Files
ERP/oa-backend/src/main/java/com/kaidi/oa/seed/BranchFinDemoSeeder.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

225 lines
11 KiB
Java

package com.kaidi.oa.seed;
import com.kaidi.oa.common.Money;
import com.kaidi.oa.domain.ArApItem;
import com.kaidi.oa.domain.OrgBranch;
import com.kaidi.oa.repository.ArApItemRepository;
import com.kaidi.oa.repository.OrgBranchRepository;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
/**
* 分公司财务报表演示数据种子(经营数据分析 §8 缺口补完)。
*
* 审计缺口:
* 1. OrgBranch 无种子数据 → /api/oa/branch-fin-statements/branches 返回空列表,
* 整个分公司独立财务报表功能无法演示。
* 2. ArApItem 无种子数据 + companySubject 未设 → 现金流量表直接法用 Payment.subject
* 模糊匹配作过渡;资产负债表 AR/AP 科目为零。
*
* 本种子补全:
* - 5 条 OrgBranch(总部 1 + 分公司 3 + 办事处 1),覆盖岳阳分公司/华东分公司/华南分公司。
* - 20 条 ArApItem(应收 12 + 应付 8),按 companySubject 与 OrgBranch.name 一致,
* 使分公司维度的应收/应付/已核销/未核销在报表中实际显示。
*
* 幂等:OrgBranch 存在则跳过(guard on count > 0)。
*
* @Order(15) 在 DataSeeder(@Order 1) 之后独立运行。
*/
@DemoSeed
@Order(15)
public class BranchFinDemoSeeder implements ApplicationRunner {
private final OrgBranchRepository orgBranchRepo;
private final ArApItemRepository arApRepo;
public BranchFinDemoSeeder(OrgBranchRepository orgBranchRepo,
ArApItemRepository arApRepo) {
this.orgBranchRepo = orgBranchRepo;
this.arApRepo = arApRepo;
}
@Override
public void run(ApplicationArguments args) {
seedOrgBranches();
seedArApItems();
}
// ============================================================
// 1. OrgBranch 机构目录
// ============================================================
private void seedOrgBranches() {
if (orgBranchRepo.count() > 0) {
return;
}
List<OrgBranch> seeds = new ArrayList<>();
seeds.add(branch("HQ001", "湖南凯迪工程科技有限公司", "总部", null,
"湖南长沙", "张伟", "0731-88889999", "长沙市岳麓区科技中路88号", "运营中",
"凯迪集团总部,负责全国市场统筹与管理"));
seeds.add(branch("YY001", "湖南凯迪工程科技有限公司岳阳分公司", "分公司", "HQ001",
"湖南岳阳", "陈静", "0730-22223333", "岳阳市云溪区长炼路66号", "运营中",
"负责岳阳及周边区域工程项目承接与实施"));
seeds.add(branch("HD001", "凯迪(华东)工程技术有限公司", "分公司", "HQ001",
"华东地区", "李明", "021-66668888", "上海市浦东新区世纪大道1368号", "运营中",
"负责华东区(沪苏浙皖闽赣)市场开拓与项目执行"));
seeds.add(branch("HN001", "凯迪(华南)工程服务有限公司", "分公司", "HQ001",
"华南地区", "赵云", "020-33337777", "广州市天河区珠江新城华夏路1号", "运营中",
"负责华南区(粤桂琼)市场开拓与EPC工程管理"));
seeds.add(branch("CS001", "凯迪长沙办公室", "办事处", "HQ001",
"湖南长沙", "王芳", "0731-55556666", "长沙市雨花区劳动中路158号", "运营中",
"长沙本地业务联络与客户服务办事处"));
orgBranchRepo.saveAll(seeds);
}
private OrgBranch branch(String code, String name, String type, String parentCode,
String region, String manager, String phone, String address,
String status, String remark) {
OrgBranch b = new OrgBranch();
b.setCode(code);
b.setName(name);
b.setType(type);
b.setParentCode(parentCode);
b.setRegion(region);
b.setManager(manager);
b.setPhone(phone);
b.setAddress(address);
b.setStatus(status);
b.setRemark(remark);
b.setCreatedAt(Instant.now());
return b;
}
// ============================================================
// 2. ArApItem 应收/应付 演示数据(含 companySubject 精准关联分公司)
// ============================================================
private void seedArApItems() {
if (arApRepo.count() > 0) {
return;
}
List<ArApItem> seeds = new ArrayList<>();
// --- 岳阳分公司 应收账款 ---
seeds.add(arApItem("AR-YY-2026-001", "应收", "岳阳市政工程集团有限公司",
"HT-YY-2026-001", "湖南凯迪工程科技有限公司岳阳分公司",
"3800000.00", "2280000.00", "1520000.00", "部分核销", "2026-09-30"));
seeds.add(arApItem("AR-YY-2026-002", "应收", "岳阳县水务局",
"HT-YY-2026-002", "湖南凯迪工程科技有限公司岳阳分公司",
"1650000.00", "990000.00", "660000.00", "部分核销", "2026-08-31"));
seeds.add(arApItem("AR-YY-2026-003", "应收", "湖南云溪工业园管委会",
"HT-YY-2026-003", "湖南凯迪工程科技有限公司岳阳分公司",
"920000.00", "0.00", "920000.00", "未核销", "2026-12-31"));
seeds.add(arApItem("AR-YY-2026-004", "应收", "岳阳华能电厂",
"HT-YY-2026-004", "湖南凯迪工程科技有限公司岳阳分公司",
"560000.00", "560000.00", "0.00", "已结清", "2026-06-30"));
// --- 岳阳分公司 应付账款 ---
seeds.add(arApItem("AP-YY-2026-001", "应付", "岳阳通达设备租赁有限公司",
"HT-YY-2026-AP01", "湖南凯迪工程科技有限公司岳阳分公司",
"386000.00", "193000.00", "193000.00", "部分核销", "2026-07-31"));
seeds.add(arApItem("AP-YY-2026-002", "应付", "长沙华信网络科技有限公司",
"HT-YY-2026-AP02", "湖南凯迪工程科技有限公司岳阳分公司",
"128000.00", "0.00", "128000.00", "未核销", "2026-09-30"));
// --- 华东分公司 应收账款 ---
seeds.add(arApItem("AR-HD-2026-001", "应收", "上海浦东建设集团有限公司",
"HT-HD-2026-001", "凯迪(华东)工程技术有限公司",
"5200000.00", "3120000.00", "2080000.00", "部分核销", "2026-10-31"));
seeds.add(arApItem("AR-HD-2026-002", "应收", "江苏南京城市基建有限公司",
"HT-HD-2026-002", "凯迪(华东)工程技术有限公司",
"3100000.00", "1860000.00", "1240000.00", "部分核销", "2026-09-30"));
seeds.add(arApItem("AR-HD-2026-003", "应收", "浙江绍兴市污水处理有限公司",
"HT-HD-2026-003", "凯迪(华东)工程技术有限公司",
"1880000.00", "1128000.00", "752000.00", "部分核销", "2026-11-30"));
seeds.add(arApItem("AR-HD-2026-004", "应收", "安徽合肥市水务集团",
"HT-HD-2026-004", "凯迪(华东)工程技术有限公司",
"2650000.00", "0.00", "2650000.00", "未核销", "2026-12-31"));
// --- 华东分公司 应付账款 ---
seeds.add(arApItem("AP-HD-2026-001", "应付", "上海华申建材有限公司",
"HT-HD-2026-AP01", "凯迪(华东)工程技术有限公司",
"680000.00", "340000.00", "340000.00", "部分核销", "2026-08-31"));
seeds.add(arApItem("AP-HD-2026-002", "应付", "南京精工机械设备有限公司",
"HT-HD-2026-AP02", "凯迪(华东)工程技术有限公司",
"420000.00", "0.00", "420000.00", "未核销", "2026-10-31"));
seeds.add(arApItem("AP-HD-2026-003", "应付", "苏州翔宇临时用工服务有限公司",
"HT-HD-2026-AP03", "凯迪(华东)工程技术有限公司",
"185000.00", "92500.00", "92500.00", "部分核销", "2026-09-15"));
// --- 华南分公司 应收账款 ---
seeds.add(arApItem("AR-HN-2026-001", "应收", "广州市城市建设开发有限公司",
"HT-HN-2026-001", "凯迪(华南)工程服务有限公司",
"4800000.00", "2400000.00", "2400000.00", "部分核销", "2026-11-30"));
seeds.add(arApItem("AR-HN-2026-002", "应收", "深圳市水务集团有限公司",
"HT-HN-2026-002", "凯迪(华南)工程服务有限公司",
"3200000.00", "3200000.00", "0.00", "已结清", "2026-06-30"));
seeds.add(arApItem("AR-HN-2026-003", "应收", "广西南宁城投集团有限公司",
"HT-HN-2026-003", "凯迪(华南)工程服务有限公司",
"1960000.00", "980000.00", "980000.00", "部分核销", "2026-10-31"));
seeds.add(arApItem("AR-HN-2026-004", "应收", "海南省生态环境工程有限公司",
"HT-HN-2026-004", "凯迪(华南)工程服务有限公司",
"1100000.00", "0.00", "1100000.00", "未核销", "2027-03-31"));
// --- 华南分公司 应付账款 ---
seeds.add(arApItem("AP-HN-2026-001", "应付", "广州宏基建材有限公司",
"HT-HN-2026-AP01", "凯迪(华南)工程服务有限公司",
"540000.00", "270000.00", "270000.00", "部分核销", "2026-09-30"));
seeds.add(arApItem("AP-HN-2026-002", "应付", "深圳福田劳务派遣有限公司",
"HT-HN-2026-AP02", "凯迪(华南)工程服务有限公司",
"168000.00", "84000.00", "84000.00", "部分核销", "2026-08-31"));
// --- 总部 应收账款 ---
seeds.add(arApItem("AR-HQ-2026-001", "应收", "靖州供水项目业主方",
"HT-HQ-2026-001", "湖南凯迪工程科技有限公司",
"8600000.00", "5160000.00", "3440000.00", "部分核销", "2026-12-31"));
arApRepo.saveAll(seeds);
}
private ArApItem arApItem(String code, String arApType, String partyName,
String relatedRef, String companySubject,
String amount, String writtenOff, String unwrittenOff,
String status, String dueDate) {
ArApItem a = new ArApItem();
a.setCode(code);
a.setArApType(arApType);
a.setPartyName(partyName);
a.setRelatedRef(relatedRef);
a.setCompanySubject(companySubject);
a.setAmount(Money.of(Double.parseDouble(amount)));
a.setWrittenOff(Money.of(Double.parseDouble(writtenOff)));
a.setUnwrittenOff(Money.of(Double.parseDouble(unwrittenOff)));
a.setStatus(status);
a.setDueDate(dueDate);
a.setCreatedAt(Instant.now());
return a;
}
}