Files
ERP/oa-backend/src/main/java/com/kaidi/oa/seed/LegalPolicyAnonSeeder.java
T
Qiufeng 1affcd9a5e
Signed Release / release (push) Failing after 5m1s
feat: add PostgreSQL web installation wizard
2026-08-04 07:42:20 +08:00

201 lines
11 KiB
Java

package com.kaidi.oa.seed;
import com.kaidi.oa.domain.ComplianceAnonReport;
import com.kaidi.oa.domain.LegalPolicyRevision;
import com.kaidi.oa.repository.ComplianceAnonReportRepository;
import com.kaidi.oa.repository.LegalPolicyRevisionRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import java.time.Instant;
/**
* 制度修订审批 + 匿名合规举报演示数据播种器(法务风险部)。
*
* 补齐缺口 2(匿名举报)和缺口 8(制度修订 OA 引擎接入)的活体演示数据。
* @Order(21),在 LegalDemoSeeder(@Order 20) 之后;幂等。
*/
@Order(21)
@DemoSeed
public class LegalPolicyAnonSeeder implements CommandLineRunner {
private final LegalPolicyRevisionRepository revisionRepo;
private final ComplianceAnonReportRepository anonReportRepo;
public LegalPolicyAnonSeeder(LegalPolicyRevisionRepository revisionRepo,
ComplianceAnonReportRepository anonReportRepo) {
this.revisionRepo = revisionRepo;
this.anonReportRepo = anonReportRepo;
}
@Override
public void run(String... args) throws Exception {
seedPolicyRevisions();
seedAnonReports();
}
// ======================================================================
// 1. 制度修订申请(跨状态:草稿/审批中/已生效/已废止)
// ======================================================================
private void seedPolicyRevisions() {
if (revisionRepo.count() > 0) return;
LegalPolicyRevision r1 = new LegalPolicyRevision();
r1.setRevisionNo("PR-2025-001");
r1.setPolicyNo("ZD-HR-015");
r1.setTitle("员工竞业限制与保密协议管理制度");
r1.setRevisionType("修订");
r1.setCategory("管理制度");
r1.setContent("根据2024年《劳动合同法》司法解释新规,修订竞业限制补偿标准为月薪30%,并扩展限制范围至供应商合作关系,增加违约金双倍赔偿条款。");
r1.setReason("最高法院2024年发布关于竞业限制纠纷案件审理的新司法解释,原制度与新规不符,存在合规风险。");
r1.setChangePoints("1. 补偿标准:≥月薪25% → 月薪30%; 2. 新增:禁止入职供应商; 3. 违约赔偿:1倍 → 2倍月薪×限制月数");
r1.setApplicantDept("法务部");
r1.setApplicant("陈建国");
r1.setEffectiveDate("2025-07-01");
r1.setStatus("已生效");
r1.setCreatedAt(Instant.now());
r1.setUpdatedAt(Instant.now());
LegalPolicyRevision r2 = new LegalPolicyRevision();
r2.setRevisionNo("PR-2025-002");
r2.setPolicyNo("ZD-PROC-008");
r2.setTitle("采购合同授权审批管理办法");
r2.setRevisionType("修订");
r2.setCategory("授权规则");
r2.setContent("调整各级授权金额上限:部门经理 50万→80万、总经理 200万→300万,新增电子合同签署授权,明确超授权行为追责机制。");
r2.setReason("原授权标准制定于2022年,随公司业务规模扩大,现有金额上限已不匹配实际需求,导致大量合同需要越级审批,影响效率。");
r2.setChangePoints("1. 部门经理授权额度上调至80万; 2. 总经理上调至300万; 3. 新增电子签章授权流程; 4. 超授权追责条款细化");
r2.setApplicantDept("法务部");
r2.setApplicant("李晓燕");
r2.setEffectiveDate("2025-09-01");
r2.setStatus("审批中");
r2.setCreatedAt(Instant.now());
r2.setUpdatedAt(Instant.now());
LegalPolicyRevision r3 = new LegalPolicyRevision();
r3.setRevisionNo("PR-2025-003");
r3.setPolicyNo("ZD-DATA-003");
r3.setTitle("数据安全与个人信息保护管理制度");
r3.setRevisionType("新建");
r3.setCategory("管理制度");
r3.setContent("根据《数据安全法》《个人信息保护法》制度要求,新建数据安全管理制度,覆盖数据分级保护、访问控制、泄露应急响应、删除和销毁规程。");
r3.setReason("我司目前尚无专项数据安全管理制度,监管机构检查时被要求整改。《个保法》实施已近4年,该项制度为合规基础要求。");
r3.setChangePoints("全新制度,主要内容:数据分级(公开/内部/机密/绝密)、敏感数据访问须双人核准、个人信息去标识化要求、数据出境审查流程");
r3.setApplicantDept("法务部");
r3.setApplicant("王志远");
r3.setEffectiveDate("2025-10-01");
r3.setStatus("草稿");
r3.setCreatedAt(Instant.now());
r3.setUpdatedAt(Instant.now());
LegalPolicyRevision r4 = new LegalPolicyRevision();
r4.setRevisionNo("PR-2024-006");
r4.setPolicyNo("ZD-PROC-003");
r4.setTitle("物资采购管理流程(2020版)");
r4.setRevisionType("废止");
r4.setCategory("业务流程");
r4.setContent("原2020年版物资采购流程已由2024年新版本取代,正式废止旧版本,防止双版本并行导致执行混乱。");
r4.setReason("2024年采购管理流程完成修订并发布,原版本已过时,需正式废止以避免混用。");
r4.setChangePoints("无变更,仅为废止旧版本。");
r4.setApplicantDept("采购部");
r4.setApplicant("赵明华");
r4.setDeprecationDate("2025-01-01");
r4.setStatus("已废止");
r4.setCreatedAt(Instant.now());
r4.setUpdatedAt(Instant.now());
LegalPolicyRevision r5 = new LegalPolicyRevision();
r5.setRevisionNo("PR-2025-004");
r5.setPolicyNo("ZD-HR-022");
r5.setTitle("高管绩效激励与股权激励管理办法");
r5.setRevisionType("修订");
r5.setCategory("管理制度");
r5.setContent("引入限制性股票激励计划,调整高管年度绩效考核权重(短期绩效40%+长期价值60%),与公司战略转型目标挂钩。");
r5.setReason("公司战略转型需要更长期的激励机制,现有以年为周期的绩效考核已不足以激励高管关注长期价值创造。");
r5.setChangePoints("1. 新增限制性股票激励计划(3年期); 2. 绩效权重调整; 3. 退出机制完善(反稀释条款)");
r5.setApplicantDept("战略发展部");
r5.setApplicant("张勇");
r5.setEffectiveDate("2025-12-01");
r5.setStatus("已驳回");
r5.setRemark("董事会审议认为当前不宜引入股权激励,建议待上市计划明确后重新评估,本次申请驳回。");
r5.setCreatedAt(Instant.now());
r5.setUpdatedAt(Instant.now());
revisionRepo.save(r1);
revisionRepo.save(r2);
revisionRepo.save(r3);
revisionRepo.save(r4);
revisionRepo.save(r5);
}
// ======================================================================
// 2. 匿名合规举报(跨状态:待受理/调查中/已处理/已关闭)
// ======================================================================
private void seedAnonReports() {
if (anonReportRepo.count() > 0) return;
ComplianceAnonReport a1 = new ComplianceAnonReport();
a1.setReportNo("AR-2025-001");
a1.setReportType("财务异常");
a1.setSuspectDept("采购部");
a1.setSuspectPerson("某采购经理");
a1.setReportContent("发现某采购经理与特定供应商存在利益输送:该供应商报价始终明显高于市场价15-20%,但每次仍中标,且该采购经理与供应商负责人有私下宴请记录。建议调查该供应商的实际控制人与采购部人员的关联关系。");
a1.setReporterInfo("(匿名举报,不留联系方式)");
a1.setSeverity("严重");
a1.setStatus("调查中");
a1.setHandler("陈建国");
a1.setHandleResult("已启动内部调查,正在核查采购台账及供应商关系,预计2025年8月底完成初步报告。");
a1.setQueryToken("a1b2c3d4e5f6g7h8");
a1.setCreatedAt(Instant.now());
a1.setUpdatedAt(Instant.now());
ComplianceAnonReport a2 = new ComplianceAnonReport();
a2.setReportNo("AR-2025-002");
a2.setReportType("安全隐患");
a2.setSuspectDept("生产车间");
a2.setSuspectPerson("(部门整体)");
a2.setReportContent("生产车间B区消防通道长期被货架占用,消防设施存在遮挡,安全出口标识灯不亮。已发现超过3个月,多次口头提醒但无人处理,担心发生事故时无法及时疏散。");
a2.setReporterInfo("可以通过内网邮件联系:anon@kaidi.internal");
a2.setSeverity("紧急");
a2.setStatus("已处理");
a2.setHandler("王志远");
a2.setHandleResult("已通知安全生产部现场整改。2025年6月15日复查确认:消防通道已清空,消防设施遮挡已移除,安全出口标识灯全部更换完毕。记录为安全隐患整改案例,纳入月度安全检查。");
a2.setQueryToken("h8g7f6e5d4c3b2a1");
a2.setCreatedAt(Instant.now());
a2.setUpdatedAt(Instant.now());
ComplianceAnonReport a3 = new ComplianceAnonReport();
a3.setReportNo("AR-2025-003");
a3.setReportType("劳动违规");
a3.setSuspectDept("研发部");
a3.setSuspectPerson("(不便透露)");
a3.setReportContent("研发部存在长期强制加班未支付加班费的情况,员工打卡记录被删除,绩效考核与加班时长挂钩形成隐性强制。希望公司核查过去12个月的加班记录和薪酬发放情况。");
a3.setReporterInfo("");
a3.setSeverity("严重");
a3.setStatus("待受理");
a3.setQueryToken("z9y8x7w6v5u4t3s2");
a3.setCreatedAt(Instant.now());
a3.setUpdatedAt(Instant.now());
ComplianceAnonReport a4 = new ComplianceAnonReport();
a4.setReportNo("AR-2024-009");
a4.setReportType("合规违规");
a4.setSuspectDept("市场部");
a4.setSuspectPerson("(团队行为)");
a4.setReportContent("市场部在政府项目投标中存在提前获取标底信息的行为,怀疑有内线。已有2次投标中标价格与标底极为接近,偏差在0.3%以内,统计上不太可能出现。");
a4.setReporterInfo("");
a4.setSeverity("严重");
a4.setStatus("已关闭");
a4.setHandler("李晓燕");
a4.setHandleResult("经调查,未发现实质性证据表明存在非法获取标底行为。2次中标均有合理解释(市场调研能力强+竞争对手报价较保守)。将加强投标廉洁合规培训,本案关闭。");
a4.setQueryToken("r2q1p0o9n8m7l6k5");
a4.setCreatedAt(Instant.now());
a4.setUpdatedAt(Instant.now());
anonReportRepo.save(a1);
anonReportRepo.save(a2);
anonReportRepo.save(a3);
anonReportRepo.save(a4);
}
}