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<DmsWenjianFushenJihuaFenpeiZixiangEntity> 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<DmsWenjianFushenJihuaFenpeiZixiangEntity> query = new LambdaQueryWrapper<>();
|
query.select(DmsWenjianFushenJihuaFenpeiZixiangEntity::getId,
|
DmsWenjianFushenJihuaFenpeiZixiangEntity::getWenjianId,
|
DmsWenjianFushenJihuaFenpeiZixiangEntity::getHuiguShixian)
|
.eq(DmsWenjianFushenJihuaFenpeiZixiangEntity::getForeignId, planId)
|
.isNull(DmsWenjianFushenJihuaFenpeiZixiangEntity::getDeleteMark);
|
List<DmsWenjianFushenJihuaFenpeiZixiangEntity> currentChildren = zixiangMapper.selectList(query);
|
if (currentChildren == null || currentChildren.isEmpty()) {
|
return;
|
}
|
|
Set<List<Object>> processedKeys = new HashSet<>();
|
Set<List<Object>> reassignedKeys = new HashSet<>();
|
for (DmsWenjianFushenJihuaFenpeiZixiangEntity currentChild : currentChildren) {
|
List<Object> key = Arrays.<Object>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<DmsWenjianFushenJihuaFenpeiZixiangEntity> query = new LambdaQueryWrapper<>();
|
query.select(DmsWenjianFushenJihuaFenpeiZixiangEntity::getId)
|
.ne(DmsWenjianFushenJihuaFenpeiZixiangEntity::getForeignId, planId)
|
.isNull(DmsWenjianFushenJihuaFenpeiZixiangEntity::getDeleteMark);
|
appendReviewKeyCondition(query, currentChild);
|
List<DmsWenjianFushenJihuaFenpeiZixiangEntity> matchingChildren = zixiangMapper.selectList(query);
|
if (matchingChildren == null || matchingChildren.isEmpty()) {
|
return false;
|
}
|
|
Set<String> matchingIds = new HashSet<>();
|
for (DmsWenjianFushenJihuaFenpeiZixiangEntity matchingChild : matchingChildren) {
|
if (matchingChild.getId() != null) {
|
matchingIds.add(matchingChild.getId());
|
}
|
}
|
if (matchingIds.isEmpty()) {
|
return false;
|
}
|
|
LambdaUpdateWrapper<DmsWenjianFushenJihuaFenpeiZixiangEntity> 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<DmsWenjianFushenJihuaFenpeiZixiangEntity> 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<DmsWenjianFushenJihuaFenpeiEntity> 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;
|
}
|
}
|