diff --git a/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/mapper/WorkTicketMapper.java b/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/mapper/WorkTicketMapper.java index e8a57df9..182a9c88 100644 --- a/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/mapper/WorkTicketMapper.java +++ b/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/mapper/WorkTicketMapper.java @@ -57,6 +57,10 @@ public interface WorkTicketMapper { */ WorkTicket selectWorkTicketByProjectId(Long projectId); + List selectRelatedTicketIdsByProjectId(@Param("projectId") Long projectId, + @Param("ticketType") String ticketType, + @Param("excludeTicketId") Long excludeTicketId); + /** * 根据项目ID列表查询工作票ID列表(级联删除工作计划时使用) */ diff --git a/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkPlanServiceImpl.java b/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkPlanServiceImpl.java index a2f4c512..db2b39f3 100644 --- a/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkPlanServiceImpl.java +++ b/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkPlanServiceImpl.java @@ -575,8 +575,8 @@ public class WorkPlanServiceImpl implements IWorkPlanService { } String approver = SecurityUtils.getUsername(); String approvalTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); - // 审批通过,更新审批状态为1(已通过),项目状态改为已提交,实施状态设置为1(实施中) - return workPlanMapper.updateProjectStatusAndApproval(projectId, "1", "1", "1", approver, approvalTime, approvalComment); + // 审批通过,更新审批状态为1(已通过),项目状态改为已提交,实施状态设置为0(待实施) + return workPlanMapper.updateProjectStatusAndApproval(projectId, "1", "0", "1", approver, approvalTime, approvalComment); } @Override diff --git a/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkTicketServiceImpl.java b/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkTicketServiceImpl.java index 44c050b2..bc3cd18f 100644 --- a/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkTicketServiceImpl.java +++ b/aidmt-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkTicketServiceImpl.java @@ -772,6 +772,7 @@ public class WorkTicketServiceImpl implements IWorkTicketService { processJsonFields(workTicket); workTicket.setCreateBy(SecurityUtils.getUsername()); + cleanupRelatedTicketsBeforeSave(workTicket, workTicket.getProjectId()); return workTicketMapper.insertWorkTicket(workTicket); } @@ -787,9 +788,60 @@ public class WorkTicketServiceImpl implements IWorkTicketService { // 处理JSON字段 processJsonFields(workTicket); workTicket.setUpdateBy(SecurityUtils.getUsername()); + cleanupRelatedTicketsBeforeSave(workTicket, workTicket.getProjectId()); return workTicketMapper.updateWorkTicket(workTicket); } + /** + * 保存前先清理同项目下旧工作票及其关联风险控制卡数据。 + */ + private void cleanupRelatedTicketsBeforeSave(WorkTicket workTicket, Long projectId) { + if (workTicket == null || projectId == null) { + return; + } + Long excludeTicketId = workTicket.getTicketId(); + String ticketType = workTicket.getTicketType(); + String dangerousOperationType = workTicket.getDangerousOperationType(); + if (StringUtils.isEmpty(ticketType) && excludeTicketId != null) { + WorkTicket current = workTicketMapper.selectWorkTicketById(excludeTicketId); + if (current != null) { + ticketType = current.getTicketType(); + if (StringUtils.isEmpty(dangerousOperationType)) { + dangerousOperationType = current.getDangerousOperationType(); + } + } + } + if (StringUtils.isEmpty(ticketType)) { + return; + } + + List relatedTicketIds = workTicketMapper.selectRelatedTicketIdsByProjectId( + projectId, ticketType, excludeTicketId); + deleteTicketsWithRiskCards(relatedTicketIds); + + // 业务要求:当危险作业类型为“不涉及”时,需额外删除同项目下关联的危险作业票。 + if ("不涉及".equals(StringUtils.trim(dangerousOperationType))) { + List hazardousTicketIds = workTicketMapper.selectRelatedTicketIdsByProjectId( + projectId, "危险作业票", excludeTicketId); + deleteTicketsWithRiskCards(hazardousTicketIds); + } + } + + private void deleteTicketsWithRiskCards(List ticketIds) { + if (ticketIds == null || ticketIds.isEmpty()) { + return; + } + if (riskControlCardService != null) { + for (Long ticketId : ticketIds) { + RiskControlCard card = riskControlCardService.selectRiskControlCardByTicketId(ticketId); + if (card != null && card.getCardId() != null) { + riskControlCardService.deleteRiskControlCardById(card.getCardId()); + } + } + } + workTicketMapper.deleteWorkTicketByIds(ticketIds.toArray(new Long[0])); + } + /** * 批量删除工作票申请 * diff --git a/aidmt-modules/aidmt-manage-ms/src/main/resources/mapper/WorkTicketMapper.xml b/aidmt-modules/aidmt-manage-ms/src/main/resources/mapper/WorkTicketMapper.xml index b2e6c1e6..c9c7eeff 100644 --- a/aidmt-modules/aidmt-manage-ms/src/main/resources/mapper/WorkTicketMapper.xml +++ b/aidmt-modules/aidmt-manage-ms/src/main/resources/mapper/WorkTicketMapper.xml @@ -113,6 +113,17 @@ limit 1 + +