From 05fbe663b45f4d3caa62eae11b6d4aad0cb9bf51 Mon Sep 17 00:00:00 2001 From: tangcy <406968399@qq.com> Date: Fri, 17 Apr 2026 17:05:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=B7=A5=E5=8D=95=EF=BC=8C?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=88=9B=E5=BB=BA=E5=B7=A5=E4=BD=9C=E7=A5=A8?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contractor/mapper/WorkTicketMapper.java | 4 ++ .../service/impl/WorkPlanServiceImpl.java | 4 +- .../service/impl/WorkTicketServiceImpl.java | 52 +++++++++++++++++++ .../resources/mapper/WorkTicketMapper.xml | 11 ++++ 4 files changed, 69 insertions(+), 2 deletions(-) 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 + +