From e09f103259fa602382bb5ce2a03361a6397af46a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 15 十月 2026 11:49:15 +0800
Subject: [PATCH] feat(mes): 优化MES模块生产调度与数据管理功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/repair/MesDvRepairServiceImpl.java |   23 ++++++++++++++++++++++-
 1 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/repair/MesDvRepairServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/repair/MesDvRepairServiceImpl.java
index b6d5e36..c8255a2 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/repair/MesDvRepairServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/repair/MesDvRepairServiceImpl.java
@@ -35,6 +35,8 @@
     private MesDvRepairLineService repairLineService;
     @Resource
     private MesDvMachineryService machineryService;
+    @Resource
+    private cn.iocoder.yudao.module.mes.dal.mysql.dv.spare.MesDvSpareMovementMapper spareMovementMapper;
 
     @Override
     public Long createRepair(MesDvRepairSaveReqVO createReqVO) {
@@ -49,9 +51,18 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateRepair(MesDvRepairSaveReqVO updateReqVO) {
         // 1.1 鏍¢獙瀛樺湪锛屼笖鐘舵�佷负鑽夌
         validateRepairPrepare(updateReqVO.getId());
+        MesDvRepairDO old = repairMapper.selectById(updateReqVO.getId());
+        if (spareMovementMapper.selectCount(
+                cn.iocoder.yudao.module.mes.dal.dataobject.dv.spare.MesDvSpareMovementDO::getRepairId, old.getId()) > 0
+                && (!java.util.Objects.equals(old.getMachineryId(), updateReqVO.getMachineryId())
+                || !java.util.Objects.equals(old.getCode(), updateReqVO.getCode()))) {
+            throw exception(new cn.iocoder.yudao.framework.common.exception.ErrorCode(1_040_807_001,
+                    "澶囦欢鎿嶄綔澶辫触锛歿}"), "宸叉湁澶囦欢娴佹按鐨勭淮淇崟涓嶈兘鏇存崲璁惧鎴栫紪鐮�");
+        }
         // 1.2 鏍¢獙淇濆瓨鏁版嵁
         validateSaveData(updateReqVO);
 
@@ -65,6 +76,12 @@
     public void deleteRepair(Long id) {
         // 鏍¢獙瀛樺湪锛屼笖鐘舵�佷负鑽夌
         validateRepairPrepare(id);
+
+        if (spareMovementMapper.selectCount(
+                cn.iocoder.yudao.module.mes.dal.dataobject.dv.spare.MesDvSpareMovementDO::getRepairId, id) > 0) {
+            throw exception(new cn.iocoder.yudao.framework.common.exception.ErrorCode(1_040_807_001,
+                    "澶囦欢鎿嶄綔澶辫触锛歿}"), "宸叉湁澶囦欢娴佹按鐨勭淮淇崟涓嶈兘鍒犻櫎锛岃淇濈暀缁翠慨杩芥函璁板綍");
+        }
 
         // 鍒犻櫎
         repairMapper.deleteById(id);
@@ -97,7 +114,8 @@
 
     @Override
     public MesDvRepairDO validateRepairExists(Long id) {
-        MesDvRepairDO repair = repairMapper.selectById(id);
+        MesDvRepairDO repair = org.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive()
+                ? repairMapper.lockForSpare(id) : repairMapper.selectById(id);
         if (repair == null) {
             throw exception(DV_REPAIR_NOT_EXISTS);
         }
@@ -134,6 +152,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void submitRepair(Long id, Long userId) {
         // 1. 鏍¢獙瀛樺湪锛屼笖鐘舵�佷负鑽夌
         validateRepairPrepare(id);
@@ -144,6 +163,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void confirmRepair(cn.iocoder.yudao.module.mes.controller.admin.dv.repair.vo.MesDvRepairConfirmReqVO confirmReqVO) {
         // 1. 鏍¢獙瀛樺湪锛屼笖鐘舵�佷负缁翠慨涓�
         MesDvRepairDO repair = validateRepairExists(confirmReqVO.getId());
@@ -157,6 +177,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void finishRepair(Long id, Integer result, Long userId) {
         // 1. 鏍¢獙瀛樺湪锛屼笖鐘舵�佷负寰呴獙鏀�
         MesDvRepairDO repair = validateRepairExists(id);

--
Gitblit v1.9.3