package jnpf.dmsService.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import jnpf.dmsEntity.DmsDanganCundangShenqingDanganheEntity; import jnpf.dmsEntity.DmsDanganJieyueFuyinShenqingEntity; import jnpf.dmsEntity.DmsDanganJieyueFuyinShenqingZixiangEntity; import jnpf.dmsMapper.DmsDanganCundangShenqingDanganheMapper; import jnpf.dmsMapper.DmsDanganJieyueFuyinShenqingMapper; import jnpf.dmsMapper.DmsDanganJieyueFuyinShenqingZixiangMapper; import jnpf.dmsService.DmsDanganJieyueFuyinShenqingTongguoService; import jnpf.exception.DataException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @Service @RequiredArgsConstructor public class DmsDanganJieyueFuyinShenqingTongguoServiceImpl implements DmsDanganJieyueFuyinShenqingTongguoService { private final DmsDanganJieyueFuyinShenqingMapper shenqingMapper; private final DmsDanganJieyueFuyinShenqingZixiangMapper zixiangMapper; private final DmsDanganCundangShenqingDanganheMapper danganheMapper; @Override @Transactional(rollbackFor = Exception.class) public void tongguo(String flowId, String taskId) throws DataException { String resolvedFlowId = requireValue(flowId, "流程ID(flow_id)"); String resolvedTaskId = requireValue(taskId, "流程任务ID(task_id)"); DmsDanganJieyueFuyinShenqingEntity shenqing = findApplication(resolvedFlowId, resolvedTaskId); Set danganheIds = findDanganheIds(shenqing.getId()); syncApprovedDetails(shenqing); LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); update.in(DmsDanganCundangShenqingDanganheEntity::getId, danganheIds) .isNull(DmsDanganCundangShenqingDanganheEntity::getDeleteMark) .set(DmsDanganCundangShenqingDanganheEntity::getJieyueId, shenqing.getId()); if (danganheMapper.update(null, update) != danganheIds.size()) { throw new DataException("存在未找到或已删除的档案盒,无法通过借阅复印申请"); } } private void syncApprovedDetails(DmsDanganJieyueFuyinShenqingEntity shenqing) { LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); update.eq(DmsDanganJieyueFuyinShenqingZixiangEntity::getForeignId, shenqing.getId()) .isNull(DmsDanganJieyueFuyinShenqingZixiangEntity::getDeleteMark) .set(DmsDanganJieyueFuyinShenqingZixiangEntity::getShifouYitongguo, "yes") .set(DmsDanganJieyueFuyinShenqingZixiangEntity::getShenqingRen, shenqing.getShenqingRen()) .set(DmsDanganJieyueFuyinShenqingZixiangEntity::getShenqingRiqi, shenqing.getShenqingRiqi()) .set(DmsDanganJieyueFuyinShenqingZixiangEntity::getShenqingBumen, shenqing.getShenqingBumen()); zixiangMapper.update(null, update); } private DmsDanganJieyueFuyinShenqingEntity findApplication(String flowId, String taskId) throws DataException { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(DmsDanganJieyueFuyinShenqingEntity::getFlowId, flowId) .eq(DmsDanganJieyueFuyinShenqingEntity::getFlowTaskId, taskId) .isNull(DmsDanganJieyueFuyinShenqingEntity::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 Set findDanganheIds(String shenqingId) throws DataException { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(DmsDanganJieyueFuyinShenqingZixiangEntity::getForeignId, shenqingId) .isNull(DmsDanganJieyueFuyinShenqingZixiangEntity::getDeleteMark); List details = zixiangMapper.selectList(query); if (details.isEmpty()) { throw new DataException("档案盒借阅复印申请未关联档案盒明细,无法通过"); } Set ids = new LinkedHashSet<>(); for (DmsDanganJieyueFuyinShenqingZixiangEntity detail : details) { String danganheId = trimToEmpty(detail.getDanganheId()); if (danganheId.isEmpty()) { throw new DataException("档案盒借阅复印申请明细缺少档案盒ID(danganhe_id)"); } ids.add(danganheId); } return ids; } 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(); } }