10 KiB
Employee Asset Maintenance Backend Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Add backend support for employee asset maintenance, including aggregated employee detail/save, employee-asset cascade delete, and asynchronous asset import based on employee ID card linkage.
Architecture: Keep employee maintenance on the existing CcdiBaseStaff aggregate, and introduce a new CcdiAssetInfo resource in ccdi-info-collection. Employee add/edit/detail/delete will orchestrate asset persistence inside transactions, while asset import will mirror the existing employee import flow with a dedicated controller, service, Redis task keys, and failure records.
Tech Stack: Java 21, Spring Boot 3, MyBatis Plus, XML mapper SQL, EasyExcel, Redis, Maven
Task 1: Add the asset table SQL and document the data contract
Files:
- Create:
sql/2026-03-12_ccdi_asset_info.sql - Review:
assets/资产信息表.csv - Review:
docs/plans/2026-03-12-employee-asset-maintenance-design.md
Step 1: Write the SQL script
Create ccdi_asset_info with:
asset_id BIGINTauto increment primary keyperson_id VARCHAR(18)storing employeeid_card- business columns from the approved design
- audit columns
create_by,create_time,update_by,update_time - indexes
idx_person_idandidx_asset_main_type
Step 2: Verify the script matches the approved constraints
Confirm the script:
- does not include
asset_idin any import-facing note - keeps the field name
person_id - links by employee
id_card, notstaff_id
Step 3: Commit
git add sql/2026-03-12_ccdi_asset_info.sql docs/plans/2026-03-12-employee-asset-maintenance-design.md
git commit -m "新增员工资产信息设计与建表脚本"
Task 2: Add the asset domain, DTO, VO, Excel, and mapper skeletons
Files:
- Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiAssetInfo.java - Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiAssetInfoDTO.java - Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CcdiAssetInfoVO.java - Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/excel/CcdiAssetInfoExcel.java - Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/AssetImportFailureVO.java - Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiAssetInfoMapper.java - Create:
ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiAssetInfoMapper.xml
Step 1: Create the entity
Model CcdiAssetInfo with MyBatis Plus annotations and audit fields consistent with existing CcdiBaseStaff.
Step 2: Create request and response objects
Add one DTO for nested employee-form submission and one VO for employee detail response.
Step 3: Create the Excel and failure record objects
CcdiAssetInfoExcel must exclude asset_id and include person_id.
Step 4: Create mapper methods
Define methods for:
- query by
person_id - delete by
person_id - delete by
person_idlist - batch insert
- import lookup by employee
id_card
Task 3: Extend employee DTO and VO aggregation
Files:
- Modify:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiBaseStaffAddDTO.java - Modify:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiBaseStaffEditDTO.java - Modify:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CcdiBaseStaffVO.java - Test:
ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiBaseStaffServiceAssetAggregationTest.java
Step 1: Write the failing test
Add a focused service test that asserts employee detail, add DTO, and edit DTO support assetInfoList.
Step 2: Run test to verify it fails
Run:
mvn test -Dtest=CcdiBaseStaffServiceAssetAggregationTest
Expected: FAIL because assetInfoList does not exist yet.
Step 3: Add the aggregate fields
Add List<CcdiAssetInfoDTO> to add/edit DTOs and List<CcdiAssetInfoVO> to the employee VO.
Step 4: Run test to verify it passes
Run:
mvn test -Dtest=CcdiBaseStaffServiceAssetAggregationTest
Expected: PASS
Task 4: Add asset service interfaces and focused persistence methods
Files:
- Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/ICcdiAssetInfoService.java - Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/ICcdiAssetInfoImportService.java - Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiAssetInfoServiceImpl.java - Test:
ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiAssetInfoServiceImplTest.java
Step 1: Write the failing test
Cover these behaviors:
- query all assets by
person_id - replace all assets for one employee
- delete assets by one or more employee ID cards
- ignore empty rows when replacing assets
Step 2: Run test to verify it fails
Run:
mvn test -Dtest=CcdiAssetInfoServiceImplTest
Expected: FAIL because the asset service does not exist yet.
Step 3: Implement minimal service logic
Implement methods:
selectByPersonIdreplaceByPersonIddeleteByPersonIddeleteByPersonIds
Use batch delete + batch insert.
Step 4: Run test to verify it passes
Run:
mvn test -Dtest=CcdiAssetInfoServiceImplTest
Expected: PASS
Task 5: Update employee service to aggregate asset query and transactional save
Files:
- Modify:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/ICcdiBaseStaffService.java - Modify:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiBaseStaffServiceImpl.java - Modify:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiBaseStaffController.java - Test:
ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiBaseStaffServiceImplTest.java
Step 1: Write the failing test
Add or extend service tests for:
- add employee with multiple assets
- edit employee and replace assets
- edit employee with changed
id_card - detail query returns
assetInfoList - delete employee cascades asset deletion
Step 2: Run test to verify it fails
Run:
mvn test -Dtest=CcdiBaseStaffServiceImplTest
Expected: FAIL because employee service does not yet coordinate asset persistence.
Step 3: Implement the aggregate behavior
Update CcdiBaseStaffServiceImpl to:
- inject
ICcdiAssetInfoService - load assets during detail query
- save employee first, then replace assets by current employee
id_card - capture old
id_cardduring edit and clean old asset records when it changes - delete asset rows before deleting employee rows
Step 4: Run the focused test again
Run:
mvn test -Dtest=CcdiBaseStaffServiceImplTest
Expected: PASS
Task 6: Add asset import controller and async import service
Files:
- Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiAssetInfoController.java - Create:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiAssetInfoImportServiceImpl.java - Modify:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/ICcdiAssetInfoImportService.java - Test:
ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiAssetInfoImportServiceImplTest.java
Step 1: Write the failing test
Cover:
- import template entity excludes
asset_id - import fails when
person_iddoes not match an employeeid_card - import stores failure records only for bad rows
- import status and failure list use dedicated asset task keys
Step 2: Run test to verify it fails
Run:
mvn test -Dtest=CcdiAssetInfoImportServiceImplTest
Expected: FAIL because no asset import pipeline exists yet.
Step 3: Implement the import flow
Mirror the employee import design with asset-specific names:
- Redis key prefix
import:assetInfo: - asynchronous import execution
- failure record caching for 7 days
- controller endpoints for template, upload, status, and failures
Step 4: Run the focused test again
Run:
mvn test -Dtest=CcdiAssetInfoImportServiceImplTest
Expected: PASS
Task 7: Add mapper XML SQL for batch asset operations
Files:
- Modify:
ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiAssetInfoMapper.xml - Test:
ccdi-info-collection/src/test/java/com/ruoyi/info/collection/mapper/CcdiAssetInfoMapperTest.java
Step 1: Write the failing test
Verify:
- select by
person_id - batch insert multiple assets
- delete by one
person_id - delete by multiple
person_idvalues - employee existence lookup by
id_card
Step 2: Run test to verify it fails
Run:
mvn test -Dtest=CcdiAssetInfoMapperTest
Expected: FAIL because the mapper XML SQL is incomplete.
Step 3: Implement minimal XML SQL
Add:
- result map
- select by
person_id - delete by
person_id - delete by
person_idlist - batch insert
- employee existence lookup
Step 4: Run the mapper test
Run:
mvn test -Dtest=CcdiAssetInfoMapperTest
Expected: PASS
Task 8: Verify the backend changes end to end
Files:
- Modify:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/ - Modify:
ccdi-info-collection/src/main/resources/mapper/info/collection/ - Modify:
sql/2026-03-12_ccdi_asset_info.sql
Step 1: Run focused backend tests
Run:
mvn test -Dtest=CcdiBaseStaffServiceAssetAggregationTest,CcdiAssetInfoServiceImplTest,CcdiBaseStaffServiceImplTest,CcdiAssetInfoImportServiceImplTest,CcdiAssetInfoMapperTest
Expected: all focused tests pass.
Step 2: Run module compile verification
Run:
mvn clean compile
Expected: compile succeeds without Java or mapper XML errors.
Step 3: Commit
git add sql/2026-03-12_ccdi_asset_info.sql ccdi-info-collection/src/main/java/com/ruoyi/info/collection ccdi-info-collection/src/main/resources/mapper/info/collection docs/plans/2026-03-12-employee-asset-maintenance-backend-implementation.md
git commit -m "新增员工资产信息后端实施计划"