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,92 @@
package com.kaidi.oa.seed;
import com.kaidi.oa.domain.QualElecLicense;
import com.kaidi.oa.repository.QualElecLicenseRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.time.Instant;
import java.time.LocalDate;
/**
* 行政·综合部——电子证照 QR 台账演示种子(Module 6 补全缺口:表空/0条/活体返回 null)。
*
* 补全缺口描述:qual-elec-license 表无种子数据,elec-license.vue 首屏空表;
* 同时为 GET /qual-exports/qr-list 补充可见数据,让「真伪验证」与「QR台账」两个入口均有演示内容。
*
* @Order(225) 在所有主数据 Seeder(最高 220)之后运行;幂等(count > 0 跳过)。
*/
@Component
@Order(225)
public class AdminQualElecSeeder implements CommandLineRunner {
private final QualElecLicenseRepository repo;
public AdminQualElecSeeder(QualElecLicenseRepository repo) {
this.repo = repo;
}
@Override
public void run(String... args) {
if (repo.count() > 0) return;
LocalDate today = LocalDate.now();
Instant now = Instant.now();
// 安全生产许可证电子版——有效
repo.save(lic(null, "JZ-AQ-2019-1182", "安全生产许可证", "安全生产许可证电子版",
"https://jzsc.mohurd.gov.cn/asite/verify?certNo=JZ-AQ-2019-1182",
"https://files.kaidi.com/elec/aq-permit-2019.pdf",
today.plusDays(8).toString(), "有效", "王合规", "安全生产许可证,即将到期需续期", now));
// 建筑工程施工总承包一级资质电子版——有效
repo.save(lic(1L, "JZ-2021-0356", "建筑工程施工总承包一级资质电子证照", "设计资质电子版",
"https://jzsc.mohurd.gov.cn/asite/verify?certNo=JZ-2021-0356",
"https://files.kaidi.com/elec/zjzz-2021.pdf",
today.plusDays(40).toString(), "有效", "李资质", "建筑施工总包一级,省住建厅电子证照", now));
// 高新技术企业证书电子版——有效
repo.save(lic(4L, "GR202144000123", "高新技术企业证书电子版", "高新技术企业证书电子版",
"https://www.innocom.gov.cn/gxjscx/index.jhtml?certNo=GR202144000123",
"https://files.kaidi.com/elec/hnt-cert-2021.pdf",
today.plusDays(150).toString(), "有效", "张战略", "高企认定三年有效期,科技厅", now));
// 二级建造师电子证书——有效
repo.save(lic(null, "JZ2019-B-0332456", "刘强-二级建造师电子证书(市政公用)", "建造师电子证书",
"https://jzsc.mohurd.gov.cn/asite/verify?certNo=JZ2019-B-0332456",
null,
today.plusDays(25).toString(), "有效", "人事部", "市政公用专业,即将到期,需提前续期", now));
// ISO 9001 认证电子版——已过期
repo.save(lic(null, "ISO-9001-KD-2019-003", "ISO 9001 质量管理体系认证证书", "ISO认证电子版",
null,
"https://files.kaidi.com/elec/iso9001-2019.pdf",
today.minusDays(20).toString(), "已过期", "质量部", "已过期,正在延续申报中(ZSB-2", now));
// 营业执照电子版——有效(长期)
repo.save(lic(null, "91410100MA3XXXXX4X", "营业执照(电子版)", "营业执照电子版",
"https://www.gsxt.gov.cn/",
"https://files.kaidi.com/elec/biz-license.pdf",
null, "有效", "综合部", "国家企业信用信息公示系统,无固定到期日", now));
}
private static QualElecLicense lic(Long certId, String certNo, String certName,
String licenseType, String qrUrl, String fileUrl,
String expireDate, String status,
String registeredBy, String remark, Instant now) {
QualElecLicense e = new QualElecLicense();
e.setCertId(certId);
e.setCertNo(certNo);
e.setCertName(certName);
e.setLicenseType(licenseType);
e.setQrUrl(qrUrl);
e.setFileUrl(fileUrl);
e.setExpireDate(expireDate);
e.setStatus(status);
e.setRegisteredBy(registeredBy);
e.setRemark(remark);
e.setCreatedAt(now);
return e;
}
}