package jnpf.dmsService.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import jnpf.audit.sdk.annotation.AuditLog; import jnpf.dmsEntity.DmsWenjianFushenJihuaFenpeiEntity; import jnpf.dmsEntity.DmsWenjianFushenJihuaFenpeiZixiangEntity; import jnpf.dmsMapper.DmsWenjianFushenJihuaFenpeiMapper; import jnpf.dmsMapper.DmsWenjianFushenJihuaFenpeiZixiangMapper; import jnpf.dmsService.DmsWenjianFushenJihuaFenpeiSyncService; import jnpf.exception.DataException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @Service @RequiredArgsConstructor public class DmsWenjianFushenJihuaFenpeiSyncServiceImpl implements DmsWenjianFushenJihuaFenpeiSyncService { private final DmsWenjianFushenJihuaFenpeiMapper fenpeiMapper; private final DmsWenjianFushenJihuaFenpeiZixiangMapper zixiangMapper; @Override @Transactional(rollbackFor = Exception.class) @AuditLog( action = "REVIEW_PLAN_ASSIGNMENT_SYNC", label = "文件复审计划分配同步", bizModule = "文件复审计划", bizType = "DMS_FILE_REVIEW_PLAN", bizCodeExpr = "", bizCodeRequired = false, targetTable = "wenjian_fushen_jihua_fenpei", targetIdExpr = "#p0" ) public void sync(String fId) throws DataException { String planId = requirePlanId(fId); DmsWenjianFushenJihuaFenpeiEntity fenpei = findFenpei(planId); reassignMatchingChildren(planId, fenpei); LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); update.eq(DmsWenjianFushenJihuaFenpeiZixiangEntity::getForeignId, planId) .isNull(DmsWenjianFushenJihuaFenpeiZixiangEntity::getDeleteMark) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getHuiguRen, fenpei.getFenpeiBumenFuzeren()) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getFenpeiBumenId, fenpei.getFenpeiBumenId()) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getFenpeiBumenFuzeren, fenpei.getFenpeiBumenFuzeren()) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getFenpeiRiqi, fenpei.getFenpeiRiqi()) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getBizStatus, "daizhixing"); zixiangMapper.update(null, update); } private void reassignMatchingChildren(String planId, DmsWenjianFushenJihuaFenpeiEntity fenpei) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.select(DmsWenjianFushenJihuaFenpeiZixiangEntity::getId, DmsWenjianFushenJihuaFenpeiZixiangEntity::getWenjianId, DmsWenjianFushenJihuaFenpeiZixiangEntity::getHuiguShixian) .eq(DmsWenjianFushenJihuaFenpeiZixiangEntity::getForeignId, planId) .isNull(DmsWenjianFushenJihuaFenpeiZixiangEntity::getDeleteMark); List currentChildren = zixiangMapper.selectList(query); if (currentChildren == null || currentChildren.isEmpty()) { return; } Set> processedKeys = new HashSet<>(); Set> reassignedKeys = new HashSet<>(); for (DmsWenjianFushenJihuaFenpeiZixiangEntity currentChild : currentChildren) { List key = Arrays.asList(currentChild.getWenjianId(), currentChild.getHuiguShixian()); if (processedKeys.add(key) && reassignMatchingChildren(planId, currentChild, fenpei)) { reassignedKeys.add(key); } if (reassignedKeys.contains(key)) { removeCurrentChild(currentChild.getId()); } } } private boolean reassignMatchingChildren(String planId, DmsWenjianFushenJihuaFenpeiZixiangEntity currentChild, DmsWenjianFushenJihuaFenpeiEntity fenpei) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.select(DmsWenjianFushenJihuaFenpeiZixiangEntity::getId) .ne(DmsWenjianFushenJihuaFenpeiZixiangEntity::getForeignId, planId) .isNull(DmsWenjianFushenJihuaFenpeiZixiangEntity::getDeleteMark); appendReviewKeyCondition(query, currentChild); List matchingChildren = zixiangMapper.selectList(query); if (matchingChildren == null || matchingChildren.isEmpty()) { return false; } Set matchingIds = new HashSet<>(); for (DmsWenjianFushenJihuaFenpeiZixiangEntity matchingChild : matchingChildren) { if (matchingChild.getId() != null) { matchingIds.add(matchingChild.getId()); } } if (matchingIds.isEmpty()) { return false; } LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); update.in(DmsWenjianFushenJihuaFenpeiZixiangEntity::getId, matchingIds) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getHuiguRen, fenpei.getFenpeiBumenFuzeren()) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getFenpeiBumenId, fenpei.getFenpeiBumenId()) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getFenpeiBumenFuzeren, fenpei.getFenpeiBumenFuzeren()) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getFenpeiRiqi, fenpei.getFenpeiRiqi()) .set(DmsWenjianFushenJihuaFenpeiZixiangEntity::getBizStatus, "daizhixing"); zixiangMapper.update(null, update); return true; } private void removeCurrentChild(String childId) { if (childId == null) { return; } zixiangMapper.deleteById(childId); } private void appendReviewKeyCondition(LambdaQueryWrapper query, DmsWenjianFushenJihuaFenpeiZixiangEntity currentChild) { if (currentChild.getWenjianId() == null) { query.isNull(DmsWenjianFushenJihuaFenpeiZixiangEntity::getWenjianId); } else { query.eq(DmsWenjianFushenJihuaFenpeiZixiangEntity::getWenjianId, currentChild.getWenjianId()); } if (currentChild.getHuiguShixian() == null) { query.isNull(DmsWenjianFushenJihuaFenpeiZixiangEntity::getHuiguShixian); } else { query.eq(DmsWenjianFushenJihuaFenpeiZixiangEntity::getHuiguShixian, currentChild.getHuiguShixian()); } } private DmsWenjianFushenJihuaFenpeiEntity findFenpei(String planId) throws DataException { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(DmsWenjianFushenJihuaFenpeiEntity::getId, planId) .isNull(DmsWenjianFushenJihuaFenpeiEntity::getDeleteMark); DmsWenjianFushenJihuaFenpeiEntity fenpei = fenpeiMapper.selectOne(query); if (fenpei == null) { throw new DataException("未找到文件复审计划分配记录:f_id=" + planId); } return fenpei; } private String requirePlanId(String fId) throws DataException { String planId = fId == null ? "" : fId.trim(); if (planId.isEmpty()) { throw new DataException("文件复审计划分配ID(f_id)不能为空"); } return planId; } }