package jnpf.dmsService.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import jnpf.dmsEntity.DmsDanganCundangShenqingEntity; import jnpf.dmsEntity.DmsDanganCundangShenqingGuidangEntity; import jnpf.dmsEntity.recordprint.DmsJiluDayinLiushuiEntity; import jnpf.dmsMapper.DmsDanganCundangShenqingGuidangMapper; import jnpf.dmsMapper.DmsDanganCundangShenqingMapper; import jnpf.dmsMapper.DmsJiluDayinLiushuiMapper; import jnpf.dmsMapper.DmsWenjianFenfaMapper; import jnpf.dmsService.DmsDanganCundangShenqingTongguoService; import jnpf.exception.DataException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @Service @RequiredArgsConstructor public class DmsDanganCundangShenqingTongguoServiceImpl implements DmsDanganCundangShenqingTongguoService { private final DmsDanganCundangShenqingMapper shenqingMapper; private final DmsDanganCundangShenqingGuidangMapper guidangMapper; private final DmsJiluDayinLiushuiMapper jiluLiushuiMapper; private final DmsWenjianFenfaMapper wenjianFenfaMapper; @Override @Transactional(rollbackFor = Exception.class) public void tongguo(String flowId, String taskId) throws DataException { DmsDanganCundangShenqingEntity shenqing = findApplication( requireValue(flowId, "流程ID(flow_id)"), requireValue(taskId, "流程任务ID(task_id)")); List details = findGuidangDetails(shenqing.getId()); Set jiluLiushuiIds = new LinkedHashSet<>(); Set wenjianLiushuiIds = new LinkedHashSet<>(); for (DmsDanganCundangShenqingGuidangEntity detail : details) { addIfPresent(jiluLiushuiIds, detail.getJiluLiushuiId()); addIfPresent(wenjianLiushuiIds, detail.getWenjianLiushuiId()); } markJiluLiushuiGuidang(jiluLiushuiIds); markWenjianLiushuiGuidang(wenjianLiushuiIds); } private DmsDanganCundangShenqingEntity findApplication(String flowId, String taskId) throws DataException { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(DmsDanganCundangShenqingEntity::getFlowId, flowId) .eq(DmsDanganCundangShenqingEntity::getFlowTaskId, taskId) .isNull(DmsDanganCundangShenqingEntity::getDeleteMark); List applications = shenqingMapper.selectList(query); if (applications.isEmpty()) { throw new DataException("未找到档案存档申请:flow_id=" + flowId + ", task_id=" + taskId); } if (applications.size() > 1) { throw new DataException("flow_id与task_id关联了多条档案存档申请,无法确认通过记录"); } return applications.get(0); } private List findGuidangDetails(String shenqingId) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(DmsDanganCundangShenqingGuidangEntity::getForeignId, shenqingId) .isNull(DmsDanganCundangShenqingGuidangEntity::getDeleteMark); return guidangMapper.selectList(query); } private void markJiluLiushuiGuidang(Set ids) { if (ids.isEmpty()) { return; } LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); update.in(DmsJiluDayinLiushuiEntity::getId, ids) .isNull(DmsJiluDayinLiushuiEntity::getDeleteMark) .set(DmsJiluDayinLiushuiEntity::getIsGuidang, 1); jiluLiushuiMapper.update(null, update); } private void markWenjianLiushuiGuidang(Set serialNumbers) { if (!serialNumbers.isEmpty()) { wenjianFenfaMapper.archivePrintRecords(new ArrayList<>(serialNumbers)); } } private void addIfPresent(Set values, String value) { String resolved = trimToEmpty(value); if (!resolved.isEmpty()) { values.add(resolved); } } private String requireValue(String value, String fieldName) throws DataException { String resolved = trimToEmpty(value); if (resolved.isEmpty()) { throw new DataException(fieldName + "不能为空"); } return resolved; } private String trimToEmpty(String value) { return value == null ? "" : value.trim(); } }