280 lines
13 KiB
Java
280 lines
13 KiB
Java
package com.kaidi.oa.seed;
|
||
|
||
import com.kaidi.oa.common.Money;
|
||
import com.kaidi.oa.domain.SewageCrossDeptLinkage;
|
||
import com.kaidi.oa.domain.SewageExtLabCommission;
|
||
import com.kaidi.oa.repository.SewageCrossDeptLinkageRepository;
|
||
import com.kaidi.oa.repository.SewageExtLabCommissionRepository;
|
||
import org.springframework.boot.ApplicationArguments;
|
||
import org.springframework.boot.ApplicationRunner;
|
||
import org.springframework.core.annotation.Order;
|
||
import org.springframework.transaction.annotation.Transactional;
|
||
|
||
import java.time.Instant;
|
||
import java.time.temporal.ChronoUnit;
|
||
|
||
/**
|
||
* 城镇污水运营·跨部门联动触发器 & 外部实验室委托检测 演示种子数据。
|
||
*
|
||
* 补深审计 low 缺口(11.与其他部门接口要求):让联动台账与外委检测台账活体可见,
|
||
* 覆盖多种状态(成功/失败/待触发 / 合格/超标/待判定),演示完整业务链路。
|
||
*
|
||
* 幂等:linkageRepo.count() == 0 才插入;commRepo.count() == 0 才插入。
|
||
*/
|
||
@DemoSeed
|
||
@Order(30)
|
||
public class SewageCrossDeptSeeder implements ApplicationRunner {
|
||
|
||
private final SewageCrossDeptLinkageRepository linkageRepo;
|
||
private final SewageExtLabCommissionRepository commRepo;
|
||
|
||
public SewageCrossDeptSeeder(SewageCrossDeptLinkageRepository linkageRepo,
|
||
SewageExtLabCommissionRepository commRepo) {
|
||
this.linkageRepo = linkageRepo;
|
||
this.commRepo = commRepo;
|
||
}
|
||
|
||
@Override
|
||
@Transactional
|
||
public void run(ApplicationArguments args) {
|
||
seedLinkages();
|
||
seedExtLabCommissions();
|
||
}
|
||
|
||
// ------------------------------------------------------------------ 跨部门联动触发器演示数据
|
||
|
||
private void seedLinkages() {
|
||
if (linkageRepo.count() > 0) return;
|
||
|
||
Instant now = Instant.now();
|
||
|
||
// 1. 成功联动:药剂低库存→采购工单(真实写入)
|
||
SewageCrossDeptLinkage lk1 = new SewageCrossDeptLinkage();
|
||
lk1.setEventKey("REAGENT_LOW_STOCK");
|
||
lk1.setSourceId(1L);
|
||
lk1.setSourceModule("sewage_reagent_stock");
|
||
lk1.setEventDesc("聚合氯化铝(PAC)(凯迪一污水厂)库存 280 kg 低于安全库存 500 kg,需补货");
|
||
lk1.setTargetDept("采购部");
|
||
lk1.setLinkageAction("生成采购工单");
|
||
lk1.setStatus("成功");
|
||
lk1.setTargetEntityType("mfg_purchase_order");
|
||
lk1.setTargetEntityId(1001L);
|
||
lk1.setResultNote("已真实创建采购工单 MfgPurchaseOrder#1001(来源:sewage_reagent_stock/1)");
|
||
lk1.setOwner("系统自动");
|
||
lk1.setTriggeredAt(now.minus(3, ChronoUnit.DAYS));
|
||
lk1.setCompletedAt(now.minus(3, ChronoUnit.DAYS).plus(2, ChronoUnit.SECONDS));
|
||
lk1.setCreatedAt(now.minus(3, ChronoUnit.DAYS));
|
||
lk1.setUpdatedAt(now.minus(3, ChronoUnit.DAYS));
|
||
linkageRepo.save(lk1);
|
||
|
||
// 2. 成功联动:月度成本归集完成→财务凭证(真实写入)
|
||
SewageCrossDeptLinkage lk2 = new SewageCrossDeptLinkage();
|
||
lk2.setEventKey("COST_MONTH_COMPLETE");
|
||
lk2.setSourceId(2L);
|
||
lk2.setSourceModule("sewage_cost_month");
|
||
lk2.setEventDesc("2026-04 凯迪一污水厂 月度完全成本 ¥386500.00 完成,触发财务过账");
|
||
lk2.setTargetDept("财务部");
|
||
lk2.setLinkageAction("成本过账");
|
||
lk2.setStatus("成功");
|
||
lk2.setTargetEntityType("voucher");
|
||
lk2.setTargetEntityId(2001L);
|
||
lk2.setResultNote("已真实创建记账凭证 Voucher#2001(来源:sewage_cost_month/2)科目:5001-运营成本←2201-应付账款");
|
||
lk2.setOwner("系统自动");
|
||
lk2.setTriggeredAt(now.minus(10, ChronoUnit.DAYS));
|
||
lk2.setCompletedAt(now.minus(10, ChronoUnit.DAYS).plus(1, ChronoUnit.SECONDS));
|
||
lk2.setCreatedAt(now.minus(10, ChronoUnit.DAYS));
|
||
lk2.setUpdatedAt(now.minus(10, ChronoUnit.DAYS));
|
||
linkageRepo.save(lk2);
|
||
|
||
// 3. 成功联动:检测报告签发→申报服务部数据包
|
||
SewageCrossDeptLinkage lk3 = new SewageCrossDeptLinkage();
|
||
lk3.setEventKey("DETECT_REPORT_SIGNED");
|
||
lk3.setSourceId(5L);
|
||
lk3.setSourceModule("sewage_detection_report");
|
||
lk3.setEventDesc("2026-05 月度水质检测报告已签发,COD削减量 42.8吨,氨氮削减量 8.6吨");
|
||
lk3.setTargetDept("申报服务部");
|
||
lk3.setLinkageAction("发送运营数据包");
|
||
lk3.setStatus("成功");
|
||
lk3.setTargetEntityType("ops_data_package");
|
||
lk3.setTargetEntityId(5L);
|
||
lk3.setResultNote("已将运营数据(检测报告 sourceId=5)打包推送至申报服务部,含减排贡献数据");
|
||
lk3.setOwner("王运营");
|
||
lk3.setTriggeredAt(now.minus(5, ChronoUnit.DAYS));
|
||
lk3.setCompletedAt(now.minus(5, ChronoUnit.DAYS).plus(1, ChronoUnit.SECONDS));
|
||
lk3.setCreatedAt(now.minus(5, ChronoUnit.DAYS));
|
||
lk3.setUpdatedAt(now.minus(5, ChronoUnit.DAYS));
|
||
linkageRepo.save(lk3);
|
||
|
||
// 4. 失败联动:月度成本归集→财务部(待重试)
|
||
SewageCrossDeptLinkage lk4 = new SewageCrossDeptLinkage();
|
||
lk4.setEventKey("COST_MONTH_COMPLETE");
|
||
lk4.setSourceId(3L);
|
||
lk4.setSourceModule("sewage_cost_month");
|
||
lk4.setEventDesc("2026-05 凯迪二污水厂 月度完全成本 ¥312000.00 完成,触发财务过账");
|
||
lk4.setTargetDept("财务部");
|
||
lk4.setLinkageAction("成本过账");
|
||
lk4.setStatus("失败");
|
||
lk4.setResultNote("联动执行失败: 财务部凭证接口超时,请稍后重试");
|
||
lk4.setOwner("系统自动");
|
||
lk4.setTriggeredAt(now.minus(1, ChronoUnit.DAYS));
|
||
lk4.setCreatedAt(now.minus(1, ChronoUnit.DAYS));
|
||
lk4.setUpdatedAt(now.minus(1, ChronoUnit.DAYS));
|
||
linkageRepo.save(lk4);
|
||
|
||
// 5. 待触发:运营记录自动归档
|
||
SewageCrossDeptLinkage lk5 = new SewageCrossDeptLinkage();
|
||
lk5.setEventKey("DETECTION_REPORT_ARCHIVE");
|
||
lk5.setSourceId(7L);
|
||
lk5.setSourceModule("sewage_detection_report");
|
||
lk5.setEventDesc("2026-05 水质检测原始记录待归档至资料室");
|
||
lk5.setTargetDept("资料室");
|
||
lk5.setLinkageAction("自动归档");
|
||
lk5.setStatus("待触发");
|
||
lk5.setOwner("李化验");
|
||
lk5.setTriggeredAt(now);
|
||
lk5.setCreatedAt(now);
|
||
lk5.setUpdatedAt(now);
|
||
linkageRepo.save(lk5);
|
||
|
||
// 6. 成功联动:外委检测超标→法务风险部(真实写入 LegalRiskEvent)
|
||
SewageCrossDeptLinkage lk6 = new SewageCrossDeptLinkage();
|
||
lk6.setEventKey("EXT_LAB_EXCEED_LEGAL");
|
||
lk6.setSourceId(1L);
|
||
lk6.setSourceModule("sewage_ext_lab_commission");
|
||
lk6.setEventDesc("EXT-LAB-0001 超标(总磷 0.82mg/L),已推送至法务风险部(LegalRiskEvent#3001)");
|
||
lk6.setTargetDept("法务风险部");
|
||
lk6.setLinkageAction("创建环保处罚风险事件");
|
||
lk6.setStatus("成功");
|
||
lk6.setTargetEntityType("legal_risk_event");
|
||
lk6.setTargetEntityId(3001L);
|
||
lk6.setResultNote("真实写入 LegalRiskEvent id=3001,类型=行政处罚,状态=待分析");
|
||
lk6.setOwner("张水质");
|
||
lk6.setTriggeredAt(now.minus(2, ChronoUnit.DAYS));
|
||
lk6.setCompletedAt(now.minus(2, ChronoUnit.DAYS).plus(1, ChronoUnit.SECONDS));
|
||
lk6.setCreatedAt(now.minus(2, ChronoUnit.DAYS));
|
||
lk6.setUpdatedAt(now.minus(2, ChronoUnit.DAYS));
|
||
linkageRepo.save(lk6);
|
||
}
|
||
|
||
// ------------------------------------------------------------------ 外部实验室委托检测演示数据
|
||
|
||
private void seedExtLabCommissions() {
|
||
if (commRepo.count() > 0) return;
|
||
|
||
Instant now = Instant.now();
|
||
|
||
// 1. 超标整改状态(总磷超标,已推送法务)
|
||
SewageExtLabCommission c1 = new SewageExtLabCommission();
|
||
c1.setCommissionNo("EXT-LAB-0001");
|
||
c1.setPlant("凯迪一污水厂");
|
||
c1.setCommissionDate("2026-05-10");
|
||
c1.setPlannedReportDate("2026-05-18");
|
||
c1.setActualReportDate("2026-05-17");
|
||
c1.setLabName("省环境检测技术中心");
|
||
c1.setLabCertNo("CMA(2024)川字第12345号");
|
||
c1.setSampleType("出水");
|
||
c1.setSampleDate("2026-05-10");
|
||
c1.setSampleNo("SMP-20260510-001");
|
||
c1.setTestItems("COD,氨氮,总磷,总氮,SS,pH");
|
||
c1.setResultSummary("COD=8.5mg/L;氨氮=0.42mg/L;总磷=0.82mg/L;总氮=10.6mg/L;SS=6mg/L;pH=7.2");
|
||
c1.setComplianceResult("超标");
|
||
c1.setExceedItems("总磷");
|
||
c1.setCorrectionNote("总磷实测0.82 mg/L,超出GB18918一级A标准0.5 mg/L,需检查深度除磷单元,加强PAC加药量");
|
||
c1.setStatus("超标整改");
|
||
c1.setAmount(Money.of(3800.0));
|
||
c1.setLinkageId(3001L);
|
||
c1.setOwner("张水质");
|
||
c1.setRemark("第三方年度水质监督性抽检");
|
||
c1.setCreatedAt(now.minus(25, ChronoUnit.DAYS));
|
||
c1.setUpdatedAt(now.minus(8, ChronoUnit.DAYS));
|
||
commRepo.save(c1);
|
||
|
||
// 2. 合格状态,已归档
|
||
SewageExtLabCommission c2 = new SewageExtLabCommission();
|
||
c2.setCommissionNo("EXT-LAB-0002");
|
||
c2.setPlant("凯迪二污水厂");
|
||
c2.setCommissionDate("2026-04-15");
|
||
c2.setPlannedReportDate("2026-04-22");
|
||
c2.setActualReportDate("2026-04-21");
|
||
c2.setLabName("市水质监测站");
|
||
c2.setLabCertNo("CNAS L1234");
|
||
c2.setSampleType("出水");
|
||
c2.setSampleDate("2026-04-15");
|
||
c2.setSampleNo("SMP-20260415-002");
|
||
c2.setTestItems("COD,氨氮,总磷,总氮,SS");
|
||
c2.setResultSummary("COD=6.2mg/L;氨氮=0.18mg/L;总磷=0.32mg/L;总氮=8.4mg/L;SS=4mg/L");
|
||
c2.setComplianceResult("合格");
|
||
c2.setStatus("已归档");
|
||
c2.setAmount(Money.of(2500.0));
|
||
c2.setOwner("李化验");
|
||
c2.setRemark("季度合规性检测");
|
||
c2.setCreatedAt(now.minus(60, ChronoUnit.DAYS));
|
||
c2.setUpdatedAt(now.minus(45, ChronoUnit.DAYS));
|
||
commRepo.save(c2);
|
||
|
||
// 3. 检测中(刚发样,尚未出结果)
|
||
SewageExtLabCommission c3 = new SewageExtLabCommission();
|
||
c3.setCommissionNo("EXT-LAB-0003");
|
||
c3.setPlant("凯迪一污水厂");
|
||
c3.setCommissionDate("2026-06-05");
|
||
c3.setPlannedReportDate("2026-06-15");
|
||
c3.setLabName("省环境检测技术中心");
|
||
c3.setLabCertNo("CMA(2024)川字第12345号");
|
||
c3.setSampleType("工艺段(A/O末端)");
|
||
c3.setSampleDate("2026-06-05");
|
||
c3.setSampleNo("SMP-20260605-003");
|
||
c3.setTestItems("溶解氧,氨氮,总磷,总氮,MLSS");
|
||
c3.setComplianceResult("待判定");
|
||
c3.setStatus("检测中");
|
||
c3.setAmount(Money.of(4200.0));
|
||
c3.setOwner("张水质");
|
||
c3.setRemark("A/O生化段专项监测,配合工艺优化调整");
|
||
c3.setCreatedAt(now.minus(10, ChronoUnit.DAYS));
|
||
c3.setUpdatedAt(now.minus(10, ChronoUnit.DAYS));
|
||
commRepo.save(c3);
|
||
|
||
// 4. 待发样(刚创建)
|
||
SewageExtLabCommission c4 = new SewageExtLabCommission();
|
||
c4.setCommissionNo("EXT-LAB-0004");
|
||
c4.setPlant("凯迪三污水厂");
|
||
c4.setCommissionDate("2026-06-12");
|
||
c4.setPlannedReportDate("2026-06-20");
|
||
c4.setLabName("某市第三方水质检测机构");
|
||
c4.setSampleType("污泥滤液");
|
||
c4.setSampleDate("2026-06-12");
|
||
c4.setSampleNo("SMP-20260612-004");
|
||
c4.setTestItems("COD,氨氮,重金属(铅,镉,铬)");
|
||
c4.setComplianceResult("待判定");
|
||
c4.setStatus("待发样");
|
||
c4.setAmount(Money.of(5600.0));
|
||
c4.setOwner("赵厂长");
|
||
c4.setRemark("污泥处置前合规性检测,确认重金属含量符合处置要求");
|
||
c4.setCreatedAt(now.minus(3, ChronoUnit.DAYS));
|
||
c4.setUpdatedAt(now.minus(3, ChronoUnit.DAYS));
|
||
commRepo.save(c4);
|
||
|
||
// 5. 已出报告-合格(重金属检测通过)
|
||
SewageExtLabCommission c5 = new SewageExtLabCommission();
|
||
c5.setCommissionNo("EXT-LAB-0005");
|
||
c5.setPlant("凯迪二污水厂");
|
||
c5.setCommissionDate("2026-05-20");
|
||
c5.setPlannedReportDate("2026-05-28");
|
||
c5.setActualReportDate("2026-05-27");
|
||
c5.setLabName("省环境检测技术中心");
|
||
c5.setLabCertNo("CMA(2024)川字第12345号");
|
||
c5.setSampleType("进水");
|
||
c5.setSampleDate("2026-05-20");
|
||
c5.setSampleNo("SMP-20260520-005");
|
||
c5.setTestItems("COD,氨氮,总磷,总氮,SS,重金属筛查");
|
||
c5.setResultSummary("COD=245mg/L;氨氮=28.6mg/L;总磷=3.2mg/L;总氮=36.4mg/L;SS=180mg/L;重金属未检出");
|
||
c5.setComplianceResult("合格");
|
||
c5.setStatus("已出报告");
|
||
c5.setAmount(Money.of(6800.0));
|
||
c5.setOwner("李化验");
|
||
c5.setRemark("重要工业用户纳管排查配套检测");
|
||
c5.setCreatedAt(now.minus(26, ChronoUnit.DAYS));
|
||
c5.setUpdatedAt(now.minus(19, ChronoUnit.DAYS));
|
||
commRepo.save(c5);
|
||
}
|
||
}
|