SNAPSHOT W7 已部署稳定态 — 凯迪ERP+OA一体化平台 (MET 73.3%)

恢复点(restore point)。别人改崩后可 git reset --hard 回到此提交。

== 此快照内容 ==
- 后端 oa-backend: 734 控制器 / 711 实体 (Spring Boot 3.2.5 + SQLite, 端口8091)
- 前端 modern-ui/app: Vue3+Vite, 约700页 (构建产物已在 oa-backend/src/main/resources/static)
- 数据库 oa-backend/data/oa.db: 含全部演示数据 (强制入库, 6.6MB)
- 交接文档 go.md + go-code-reference/endpoints/entities/database.md
- 多代理建设脚本 .claude/wf-*.js

== 状态 ==
- 对 凯迪科技ERP_20260507.xlsx 合规 MET ~73.3% (PARTIAL 75: 34可建+6种子/bug+35外部硬天花板)
- 安全: 5轮红队+5轮复检, default-deny分级鉴权, 连续零可利用
- W3~W7 累计补完436缺口; W8末轮(40缺口)为半成品(源码树可编译但未集成)
- 运行: cd oa-backend; java -jar build/libs/oa-backend-0.1.0.jar --server.port=8091; admin/123456

== 排除(gitignore, 可再生) ==
node_modules / oa-backend/build / .jdks / *.log / Backup-ERP-* / 弃用的OFBiz核心(只保留modern-ui)
完整文件夹备份见同目录 Backup-ERP-20260615-191517/ (含上述全部, 仅缺 node_modules)

时间戳: 20260615-191517

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Qiufeng
2026-06-15 19:19:15 +08:00
co-authored by Claude Opus 4.8
commit 5e51dc3f56
10584 changed files with 2501339 additions and 0 deletions
@@ -0,0 +1,220 @@
package com.kaidi.oa.seed;
import com.kaidi.oa.domain.CultureMonthlyBriefing;
import com.kaidi.oa.domain.HrCultureKpi;
import com.kaidi.oa.repository.CultureMonthlyBriefingRepository;
import com.kaidi.oa.repository.HrCultureKpiRepository;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
/**
* 品牌推广部·项目文化 W8 缺口演示数据。
*
* 缺口1(low):月刊电子版生成(CultureMonthlyBriefing)——历史简报+当月已生成各一条演示。
* 缺口2(low)KPI回写HR绩效(HrCultureKpi)——已写入2条+待写入1条,让「已写入历史」功能活体可见。
*
* @Order(225) 在 BrandCultureGapSeeder(@Order 220) 之后运行,幂等(count>0跳过)。
*/
@Component
@Order(225)
public class CultureBriefingKpiSeeder implements ApplicationRunner {
private final CultureMonthlyBriefingRepository briefingRepo;
private final HrCultureKpiRepository hrKpiRepo;
public CultureBriefingKpiSeeder(CultureMonthlyBriefingRepository briefingRepo,
HrCultureKpiRepository hrKpiRepo) {
this.briefingRepo = briefingRepo;
this.hrKpiRepo = hrKpiRepo;
}
@Override
public void run(ApplicationArguments args) {
seedBriefings();
seedHrCultureKpis();
}
// ====================================================================
// 月刊电子版演示数据(CultureMonthlyBriefing
// ====================================================================
private void seedBriefings() {
if (briefingRepo.count() > 0) return;
List<CultureMonthlyBriefing> list = new ArrayList<>();
// 2026年3月刊 - 已发布
CultureMonthlyBriefing b1 = new CultureMonthlyBriefing();
b1.setCode("CMB-202603-001");
b1.setIssueTag("2026年第3期");
b1.setPublishMonth("2026-03");
b1.setTitle("凯迪科技项目简报 2026年第3期");
b1.setTaskTotal(18);
b1.setTaskDone(15);
b1.setTaskOverdue(1);
b1.setNewStoryCount(6);
b1.setNewMaterialCount(24);
b1.setProjectCount(3);
b1.setFeaturedProjects("PRJ-2026-001、PRJ-2026-002、PRJ-2025-003");
b1.setSummary("3月份项目宣传工作稳步推进,共完成15项宣传任务,完成率83.3%。南方水务PPP项目推出" +
"「攻坚克难」系列专访共3篇,引发热烈反响。滨江EPC项目荣获客户高度赞誉," +
"典型案例已录入案例库。北部生物质电厂技改项目顺利完工,文化建设获年度标杆评定。");
b1.setDistributeTarget("全员 / 南方水务PPP项目相关客户 / 滨江EPC项目业主方");
b1.setStatus("已发布");
b1.setGeneratedBy("系统自动生成");
b1.setPublishedBy("宣传部·李部长");
b1.setPublishDate("2026-04-01");
b1.setBriefingUrl("https://cdn.kaidi.com/culture-briefing/2026-03-issue.pdf");
b1.setCreatedAt(Instant.now());
list.add(b1);
// 2026年4月刊 - 已发布
CultureMonthlyBriefing b2 = new CultureMonthlyBriefing();
b2.setCode("CMB-202604-001");
b2.setIssueTag("2026年第4期");
b2.setPublishMonth("2026-04");
b2.setTitle("凯迪科技项目简报 2026年第4期");
b2.setTaskTotal(22);
b2.setTaskDone(19);
b2.setTaskOverdue(0);
b2.setNewStoryCount(8);
b2.setNewMaterialCount(31);
b2.setProjectCount(3);
b2.setFeaturedProjects("PRJ-2026-001、PRJ-2026-002");
b2.setSummary("4月份各项目宣传任务完成率达86.4%,创近半年新高。新增8篇项目故事," +
"其中「绿色施工先行者」荣获公司月度最佳故事奖。文化氛围调查回收率90%以上," +
"综合满意度82分,较上季度提升2.5分。");
b2.setDistributeTarget("全员 / 相关客户");
b2.setStatus("已发布");
b2.setGeneratedBy("系统自动生成");
b2.setPublishedBy("宣传部·李部长");
b2.setPublishDate("2026-05-02");
b2.setBriefingUrl("https://cdn.kaidi.com/culture-briefing/2026-04-issue.pdf");
b2.setCreatedAt(Instant.now());
list.add(b2);
// 2026年5月刊 - 已发布
CultureMonthlyBriefing b3 = new CultureMonthlyBriefing();
b3.setCode("CMB-202605-001");
b3.setIssueTag("2026年第5期");
b3.setPublishMonth("2026-05");
b3.setTitle("凯迪科技项目简报 2026年第5期");
b3.setTaskTotal(20);
b3.setTaskDone(17);
b3.setTaskOverdue(2);
b3.setNewStoryCount(5);
b3.setNewMaterialCount(18);
b3.setProjectCount(2);
b3.setFeaturedProjects("PRJ-2026-001、PRJ-2026-002");
b3.setSummary("5月份宣传任务总量20项,完成17项,完成率85%。2项任务因项目现场条件变化延期," +
"已协调宣传员重新排期。本月新增5篇已发布项目故事,素材库新增18份材料。" +
"Q2文化氛围调查正在收集中,截至月底回收率已超50%。");
b3.setDistributeTarget("全员 / 相关客户");
b3.setStatus("已发布");
b3.setGeneratedBy("系统自动生成");
b3.setPublishedBy("宣传部·王主任");
b3.setPublishDate("2026-06-03");
b3.setBriefingUrl("https://cdn.kaidi.com/culture-briefing/2026-05-issue.pdf");
b3.setCreatedAt(Instant.now());
list.add(b3);
// 2026年6月刊 - 已生成(本月,待发布)
CultureMonthlyBriefing b4 = new CultureMonthlyBriefing();
b4.setCode("CMB-202606-001");
b4.setIssueTag("2026年第6期");
b4.setPublishMonth("2026-06");
b4.setTitle("凯迪科技项目简报 2026年第6期");
b4.setTaskTotal(24);
b4.setTaskDone(12);
b4.setTaskOverdue(1);
b4.setNewStoryCount(4);
b4.setNewMaterialCount(9);
b4.setProjectCount(3);
b4.setFeaturedProjects("PRJ-2026-001、PRJ-2026-002、PRJ-2025-003");
b4.setSummary("6月份宣传工作正在进行中,截至月底(预计)将完成24项任务中的20余项。" +
"Q2文化评估调查结束,综合满意度待最终统计。本期将重点报道南方水务项目" +
"「一线感人故事」专题。");
b4.setDistributeTarget("全员 / 南方水务PPP项目相关客户");
b4.setStatus("已生成");
b4.setGeneratedBy("系统自动生成");
b4.setCreatedAt(Instant.now());
list.add(b4);
briefingRepo.saveAll(list);
}
// ====================================================================
// HR 年度绩效文化 KPI 演示数据(HrCultureKpi
// ====================================================================
private void seedHrCultureKpis() {
if (hrKpiRepo.count() > 0) return;
List<HrCultureKpi> list = new ArrayList<>();
// 2025年度 北部生物质电厂 - 已写入(优秀,完整历史记录)
HrCultureKpi k1 = new HrCultureKpi();
k1.setCode("HCK-2025-001");
k1.setAssessYear("2025");
k1.setProjectCode("PRJ-2025-003");
k1.setProjectName("北部生物质电厂技改项目");
k1.setCulturalOfficer("刘宇航");
k1.setCultureTotalScore(88.5);
k1.setCultureGrade("优秀");
k1.setFusedSatisfaction(88.15);
k1.setHrSatisfaction(89.2);
k1.setWriteTarget("HR年度绩效·项目文化KPI项");
k1.setKpiWeight(10);
k1.setKpiContribution(8.85);
k1.setConfirmedBy("人力资源部·张经理");
k1.setConfirmedAt(Instant.parse("2026-01-15T09:00:00Z"));
k1.setRemark("项目文化建设成效突出,已作为公司文化标杆,建议纳入年度最佳案例表彰。");
k1.setStatus("已写入");
k1.setCreatedAt(Instant.parse("2026-01-10T08:00:00Z"));
list.add(k1);
// 2026年度 南方水务PPP项目 - 待写入(当年,Q2评估完成后待HR确认)
HrCultureKpi k2 = new HrCultureKpi();
k2.setCode("HCK-2026-001");
k2.setAssessYear("2026");
k2.setProjectCode("PRJ-2026-001");
k2.setProjectName("南方水务污水处理PPP项目");
k2.setCulturalOfficer("王晓峰");
k2.setCultureTotalScore(79.3);
k2.setCultureGrade("良好");
k2.setFusedSatisfaction(82.6);
k2.setHrSatisfaction(83.2);
k2.setWriteTarget("HR年度绩效·项目文化KPI项");
k2.setKpiWeight(10);
k2.setKpiContribution(7.93);
k2.setRemark("Q2数据:文化氛围问卷82分,HR满意度83.2分,融合满意度82.6分。待年底最终确认。");
k2.setStatus("待写入");
k2.setCreatedAt(Instant.now());
list.add(k2);
// 2026年度 滨江工业废水EPC项目 - 待写入
HrCultureKpi k3 = new HrCultureKpi();
k3.setCode("HCK-2026-002");
k3.setAssessYear("2026");
k3.setProjectCode("PRJ-2026-002");
k3.setProjectName("滨江工业废水处理EPC项目");
k3.setCulturalOfficer("陈美珍");
k3.setCultureTotalScore(65.8);
k3.setCultureGrade("合格");
k3.setFusedSatisfaction(75.15);
k3.setHrSatisfaction(74.8);
k3.setWriteTarget("HR年度绩效·项目文化KPI项");
k3.setKpiWeight(10);
k3.setKpiContribution(6.58);
k3.setRemark("满意度得分偏低,建议加强项目文化活动开展频次,目标Q3满意度提升至80+。");
k3.setStatus("待写入");
k3.setCreatedAt(Instant.now());
list.add(k3);
hrKpiRepo.saveAll(list);
}
}