员工亲属实体关联

This commit is contained in:
wkc
2026-04-24 13:29:13 +08:00
parent b7db711906
commit aa08ab4711
51 changed files with 2070 additions and 845 deletions

View File

@@ -0,0 +1,37 @@
# 员工信息维护双 Sheet 导入后端实施计划
## 目标
- 将员工信息维护导入模板改为 `员工信息` + `员工资产信息` 双 Sheet。
- 统一由 `/ccdi/baseStaff/importData` 接收单文件上传,并按有数据的 Sheet 分别调用现有员工导入与员工资产导入方法。
- 员工信息导入取消“更新已存在员工”能力,命中现有员工 ID 或身份证号时直接记失败。
- 两类失败记录统一补充 `sheetName``rowNum``errorMessage`,便于直接定位 Excel 中的失败位置。
## 实施内容
- 控制器改造
- 修改 `CcdiBaseStaffController#importTemplate`,下载双 Sheet 模板,文件名统一为“员工信息维护导入模板”。
- 修改 `CcdiBaseStaffController#importData`,按 Sheet 名分别读取 `CcdiBaseStaffExcel``CcdiBaseStaffAssetInfoExcel`
- 两个 Sheet 均为空时返回错误;任一 Sheet 有数据时,仅提交对应导入任务。
- 返回新的双任务提交结果对象,包含 `staffTaskId``assetTaskId``message`
- 服务改造
- 修改 `ICcdiBaseStaffService``CcdiBaseStaffServiceImpl`,移除 `updateSupport` 参数。
- 修改 `ICcdiBaseStaffImportService``CcdiBaseStaffImportServiceImpl`,移除更新分支与 `insertOrUpdateBatch` 调用。
- 员工导入校验统一为:
- 员工 ID 已存在:失败
- 身份证号已存在:失败
- Excel 内重复:失败
- 员工资产导入补充重复校验:
- 数据库中存在同一 `personId + assetMainType + assetSubType + assetName`:失败
- 导入文件中存在同一组合重复:失败
- VO 修正
- 新增员工双 Sheet 提交结果 VO。
- 修正员工导入失败记录 VO 字段名为 `staffId`,与前端表格字段保持一致。
- 员工与员工资产失败记录 VO 均增加 `sheetName``rowNum`
## 验证
- `mvn -pl ccdi-info-collection,ruoyi-admin -am -DskipTests compile`
- 补充控制器与服务层回归测试,覆盖双 Sheet 分发与“已存在即失败”规则。
## 影响范围
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/`

View File

@@ -0,0 +1,26 @@
# 2026-04-22 招投标导入失败展示增强后端实施计划
## 1. 目标
- 为招投标导入失败记录补充失败来源 `Sheet`
- 为失败记录补充 Excel 失败行号
- 保持现有导入校验逻辑不变,仅增强失败记录元数据
## 2. 涉及范围
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/PurchaseTransactionImportFailureVO.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiPurchaseTransactionImportServiceImpl.java`
## 3. 实施步骤
1. 在失败记录 VO 中新增 `sheetName``sheetRowNum` 字段,供前端弹窗直接读取
2. 在导入服务中为主信息 Sheet 和供应商明细 Sheet 建立“Excel 数据行号”上下文
3. 在主信息校验、供应商校验、主从关系校验、空采购事项 ID 供应商校验等失败分支中,统一写入对应的 `Sheet` 与行号
4. 对跨多行触发的失败场景,行号以合并字符串形式返回,便于页面直接展示
5. 保留原有失败原因与业务字段,避免影响已有失败记录查询接口
## 4. 验证方式
- 执行后端编译,确认新增字段和异常封装无编译错误
- 通过真实页面上传失败样本,核对失败记录接口返回 `sheetName / sheetRowNum / errorMessage`
- 覆盖至少一个主信息失败样本和一个供应商明细失败样本

View File

@@ -0,0 +1,39 @@
# 员工亲属关系维护双 Sheet 导入后端实施计划
## 目标
- 将员工亲属关系维护导入模板改为双 Sheet
- `员工亲属关系信息`
- `亲属资产信息`
- 将导入提交入口统一到 `/ccdi/staffFmyRelation/importData`
- 统一补充失败记录定位字段,支持前端展示 `Sheet / Excel行号 / 失败原因`
## 实施内容
- Controller 调整
- `CcdiStaffFmyRelationController#importTemplate` 改为输出双 Sheet 模板,模板文件名统一为“员工亲属关系维护导入模板”。
- `CcdiStaffFmyRelationController#importData` 一次读取两个 Sheet。
- 按有数据的 Sheet 分别提交亲属关系导入任务和亲属资产导入任务。
- 返回新的提交结果 VO包含 `relationTaskId``assetTaskId` 和提示文案。
- VO 调整
- `StaffFmyRelationImportFailureVO` 增加 `sheetName``rowNum`
- `AssetImportFailureVO` 增加 `sheetName``rowNum`
- 新增 `StaffFmyRelationImportSubmitResultVO`
- 导入服务调整
- `CcdiStaffFmyRelationImportServiceImpl` 失败记录写入固定 `sheetName=员工亲属关系信息`,并记录 Excel 数据行号。
- `CcdiAssetInfoImportServiceImpl` 失败记录写入固定 `sheetName=亲属资产信息`,并记录 Excel 数据行号。
- 兼容策略
- 保留原 `CcdiAssetInfoController` 的状态查询与失败记录查询接口,前端继续复用原有资产任务轮询与失败记录查看能力。
## 验证
- 后端优先验证:
- `CcdiStaffFmyRelationControllerTest`
- `CcdiAssetInfoControllerTest`
- 编译验证:
- `mvn -pl ccdi-info-collection -am -Dmaven.test.skip=true compile`
## 影响范围
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiStaffFmyRelationController.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiStaffFmyRelationImportServiceImpl.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiAssetInfoImportServiceImpl.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/StaffFmyRelationImportFailureVO.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/AssetImportFailureVO.java`
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/StaffFmyRelationImportSubmitResultVO.java`

View File

@@ -0,0 +1,32 @@
# 员工信息导入机构号校验后端实施计划
## 目标
- 在员工信息 Excel 导入链路中校验 `所属部门IDdeptId` 是否对应有效机构号。
- 有效口径统一为 `sys_dept` 中“正常且未删除”的部门,即 `status = '0'``del_flag = '0'`
- 命中不存在、已停用或已删除的部门时,不入库,直接进入员工导入失败记录。
## 实施内容
- 导入服务改造
- 修改 `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiBaseStaffImportServiceImpl.java`
-`validateStaffData` 中于必填校验后增加 `deptId` 有效性校验。
- 新增私有方法按 `deptId` 查询部门并校验 `status``delFlag`
- 校验失败时抛出统一错误文案:`所属部门ID[xxx]不存在或已停用/删除,请检查机构号`
- 部门 Mapper 对齐
- 修改 `ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml`
-`selectDeptById` 查询补齐 `d.del_flag` 字段,保证导入服务可同时判断停用与逻辑删除状态。
- 单元测试补充
- 修改 `ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiBaseStaffImportServiceImplTest.java`
- 增加部门存在、停用、删除三类校验测试。
- 修改 `ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiBaseStaffDualImportServiceTest.java`
- 增加混合导入场景测试,验证合法员工成功入库、非法 `deptId` 写入失败记录且任务状态为 `PARTIAL_SUCCESS`
## 验证
- 定向单测:
- `mvn -pl ccdi-info-collection -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=CcdiBaseStaffImportServiceImplTest,CcdiBaseStaffDualImportServiceTest test`
- 编译校验:
- `mvn -pl ccdi-info-collection,ruoyi-admin -am -DskipTests compile`
## 影响范围
- 员工信息导入后端异步校验逻辑
- 系统部门主键查询字段映射
- 员工导入相关单元测试

View File

@@ -0,0 +1,23 @@
# 招投标供应商校验后端实施计划
## 目标
- 让招投标信息维护页面的新增、编辑接口仅保留供应商名称和统一信用代码必填校验。
- 移除供应商联系人、联系电话、银行账户,以及供应商名称/统一信用代码的内容格式校验,避免页面保存被接口层拦截。
## 实施内容
- 调整 `CcdiPurchaseTransactionSupplierDTO`
- 保留 `supplierName``@NotBlank`
-`supplierUscc` 增加 `@NotBlank` 必填校验。
- 移除 `supplierName` 的长度校验。
- 移除 `supplierUscc` 的格式校验。
- 移除 `contactPerson``contactPhone``supplierBankAccount` 的内容校验注解。
## 验证
- `mvn -pl ccdi-info-collection -am -DskipTests compile`
- `sh bin/restart_java_backend.sh`
- 结合真实页面验证:
- 新增弹窗提交 `supplierUscc=ABC``contactPhone=123` 成功
- 编辑弹窗提交 `supplierUscc=XYZ``contactPhone=abc123` 成功
## 产出文件
- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiPurchaseTransactionSupplierDTO.java`

View File

@@ -0,0 +1,38 @@
# 员工信息维护双 Sheet 导入前端实施计划
## 目标
- 将员工信息维护页面的两个导入按钮合并为一个。
- 统一使用双 Sheet 模板上传,并根据后端返回的 `staffTaskId``assetTaskId` 分别沿用原有轮询与失败记录能力。
- 保留员工失败记录与员工资产失败记录两个独立查看入口。
- 两个失败记录弹窗都需要展示失败来源 Sheet、Excel 行号和失败原因。
## 实施内容
- 页面入口调整
- 删除“导入资产信息”按钮,仅保留一个“导入”按钮。
- 删除独立员工资产上传弹窗,保留一个统一上传弹窗。
- 上传交互调整
- 去掉“是否更新已经存在的员工数据”复选框。
- 模板提示调整为双 Sheet 说明,明确支持只填一个或同时填写两个 Sheet。
- 下载模板文件名统一为“员工信息维护导入模板”。
- 任务处理调整
- 上传成功后解析 `staffTaskId``assetTaskId`
- 有员工任务 ID 时,启动原员工导入轮询。
- 有资产任务 ID 时,启动原资产导入轮询。
- 未返回的任务类型不清空对应历史失败记录状态。
- 失败记录展示调整
- 员工失败记录弹窗增加 `Sheet``Excel行号` 列。
- 员工资产失败记录弹窗增加 `Sheet``Excel行号` 列。
- API 调整
- `ruoyi-ui/src/api/ccdiBaseStaff.js` 去掉 `updateSupport` 参数,保持单文件上传定义。
## 验证
- `source ~/.nvm/nvm.sh && nvm use 14.21.3 >/dev/null && cd ruoyi-ui && npm run build:prod`
- 页面联调覆盖:
- 只导员工 Sheet
- 只导资产 Sheet
- 双 Sheet 同时导入
- 两类失败记录入口分别展示
## 影响范围
- `ruoyi-ui/src/views/ccdiBaseStaff/index.vue`
- `ruoyi-ui/src/api/ccdiBaseStaff.js`

View File

@@ -0,0 +1,23 @@
# 2026-04-22 招投标导入失败展示增强前端实施计划
## 1. 目标
- 调整招投标信息维护页面的“导入失败记录”弹窗
- 让失败列表直接展示失败来源 `Sheet`、失败行号、失败原因
## 2. 涉及范围
- `ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue`
## 3. 实施步骤
1. 在失败记录弹窗表格中新增 `失败Sheet`
2. 在失败记录弹窗表格中新增 `失败行号`
3. 保留现有 `采购事项ID / 项目名称 / 标的物名称 / 失败原因` 上下文信息
4. 对多行场景直接展示后端返回的合并行号,不在前端重复解析
## 4. 验证方式
- 使用真实页面上传失败样本
- 打开“查看导入失败记录”弹窗,核对主信息失败能显示 `招投标主信息 + 行号 + 原因`
- 核对供应商失败能显示 `供应商明细 + 行号 + 原因`

View File

@@ -0,0 +1,35 @@
# 员工亲属关系维护双 Sheet 导入前端实施计划
## 目标
- 将员工亲属关系维护页面顶部两个导入按钮合并为一个。
- 上传弹窗改为双 Sheet 提示和统一模板下载。
- 保留原有两套任务轮询与失败记录入口,但失败记录列表统一展示 `Sheet / Excel行号 / 失败原因`
## 实施内容
- 页面入口调整
- 删除“导入亲属资产信息”独立按钮。
- 删除独立资产上传弹窗,仅保留统一导入弹窗。
- 上传交互调整
- 导入弹窗提示模板包含 `员工亲属关系信息``亲属资产信息` 两个 Sheet。
- 下载模板文件名统一为“员工亲属关系维护导入模板”。
- 上传成功后解析后端返回的 `relationTaskId``assetTaskId`
- 状态管理调整
-`relationTaskId` 时沿用原亲属关系任务轮询与失败记录缓存。
-`assetTaskId` 时沿用原亲属资产任务轮询与失败记录缓存。
- 未返回的任务类型不主动清空既有历史失败记录状态。
- 失败记录展示调整
- 亲属关系失败记录弹窗新增 `Sheet``Excel行号` 列。
- 亲属资产失败记录弹窗新增 `Sheet``Excel行号` 列。
## 验证
- `source ~/.nvm/nvm.sh && nvm use 14.21.3 >/dev/null && cd ruoyi-ui && node tests/unit/staff-family-asset-detail-import-ui.test.js`
- `source ~/.nvm/nvm.sh && nvm use 14.21.3 >/dev/null && cd ruoyi-ui && node tests/unit/staff-family-asset-submit-flow.test.js`
- `source ~/.nvm/nvm.sh && nvm use 14.21.3 >/dev/null && cd ruoyi-ui && node tests/unit/staff-family-asset-maintenance-layout.test.js`
- 页面联调覆盖:
- 只导亲属关系 Sheet
- 只导亲属资产 Sheet
- 双 Sheet 同时导入
- 两类失败记录列表都显示 `Sheet / Excel行号 / 失败原因`
## 影响范围
- `ruoyi-ui/src/views/ccdiStaffFmyRelation/index.vue`

View File

@@ -0,0 +1,22 @@
# 招投标供应商校验前端实施计划
## 目标
- 将招投标信息维护页面新增、编辑弹窗中的供应商明细校验收敛为:
- 供应商名称必填
- 统一信用代码必填
- 移除联系人、联系电话、银行账户,以及供应商名称/统一信用代码的内容校验提示。
## 实施内容
- 调整 `ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue` 中的 `getSupplierFieldRules`
- `supplierName` 仅保留必填规则。
- `supplierUscc` 改为仅保留必填规则。
- `contactPerson``contactPhone``supplierBankAccount` 不再返回校验规则。
## 验证
- `source ~/.nvm/nvm.sh && nvm use 14.21.3 >/dev/null && cd ruoyi-ui && npm run build:prod`
- 使用 Playwright 打开真实页面 `http://127.0.0.1:62319/maintain/purchaseTransaction`
- 新增弹窗录入 `supplierUscc=ABC``contactPhone=123` 后可保存
- 编辑弹窗录入 `supplierUscc=XYZ``contactPhone=abc123` 后可保存
## 产出文件
- `ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue`