Просмотр исходного кода

aps-提交时更新所有涉及客户订单号冗余字段的地方

sucheng 1 неделя назад
Родитель
Сommit
d1f3a3f38d

+ 5 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProductionOrderService.java

@@ -1,6 +1,9 @@
 package com.rongwei.bscommon.sys.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.domain.ApsBlankOrderDo;
+import com.rongwei.bsentity.domain.ApsProductDetailDo;
+import com.rongwei.bsentity.domain.ApsProductionMergeOrderDo;
 import com.rongwei.bsentity.domain.ApsProductionOrderDo;
 import com.rongwei.bsentity.vo.CheckAndSaveOrUpdateOrderReq;
 import com.rongwei.bsentity.vo.DeleteOrderVo;
@@ -48,4 +51,6 @@ public interface ApsProductionOrderService extends IService<ApsProductionOrderDo
     R removeBatchNumberByOrderId(String orderId);
 
     void dataEyeReport();
+
+    void setBlankColumn(ApsProductionOrderDo orderDo, List<ApsBlankOrderDo> apsBlankOrderDoList, List<ApsProductDetailDo> apsProductDetailVoList, List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList);
 }

+ 48 - 17
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProductionOrderServiceImpl.java

@@ -41,7 +41,11 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -173,6 +177,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
     private ApsCustomerManagementService apsCustomerManagementService;
     @Autowired
     private ApsReportRecordsService apsReportRecordsService;
+    @Autowired
+    private PlatformTransactionManager transactionManager;
+    @Autowired
+    private ApsProductionOrderService apsProductionOrderService;
 
 
     public static final String ERROR_MSG = "%s上诉订单的排程交货期大于承诺交货期";
@@ -251,7 +259,6 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
     }
 
     @Override
-    @Transactional
     public R checkAndSaveOrUpdateOrder(CheckAndSaveOrUpdateOrderReq req) {
         //订单信息
         ApsProductionOrderDo apsProductionOrderDo = req.getApsProductionOrderDo();
@@ -269,6 +276,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
             log.error("校验-该订单已被:{}提交", existingUser);
             return R.error("该订单已被提交,请刷新页面后重新操作");
         }
+        // 定义事务属性
+        TransactionDefinition definition = new DefaultTransactionDefinition();
+        // 开始事务
+        TransactionStatus status = transactionManager.getTransaction(definition);
         try {
             //数据库中的订单数据
             ApsProductionOrderDo nowApsProductionOrderDo = this.getById(id);
@@ -535,11 +546,6 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
                     }
                     apsProductionMergeOrderService.saveOrUpdateBatch(apsProductionMergeOrderDoList);
                 }
-
-                //根据订单和产品明细,及其合并订单,重新赋值 坯料计划和输出成品的冗余字段
-                List<ApsProductDetailDo> apsProductDetailDos = BeanUtil.copyToList(apsProductDetailVoList, ApsProductDetailDo.class);
-                Thread thread = new Thread(() -> setBlankColumn(apsProductionOrderDo, apsBlankOrderDoList, apsProductDetailDos, apsProductionMergeOrderDoList));
-                thread.start();
             }
 
             if (req.getIsNeedPublish()) {
@@ -588,13 +594,20 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
                     throw new RuntimeException("执行流程失败,请刷新页面后重试");
                 }
             }
+            // 提交事务
+            transactionManager.commit(status);
         } catch (Exception e) {
             log.error("异常信息:", e);
+            // 捕获异常并回滚事务
+            transactionManager.rollback(status);
             throw e;
         } finally {
             log.debug("校验-订单提交完毕,从map中清空当前订单锁,订单ID:{}", id);
             productOrderLock.remove(id);
         }
+        //订单更新完后,更新坯料计划对应的字段
+        Thread thread = new Thread(() -> updateNeedUpdateColumnAll(id));
+        thread.start();
 
         return R.ok();
     }
@@ -1142,7 +1155,6 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
     }
 
     @Override
-    @Transactional
     public R generalMsUpdate(OrderSaveOrUpdateVo req) {
         MasterSlaveUpdateVo masterSlaveUpdate = req.getMasterSlaveUpdate();
         String id = masterSlaveUpdate.getMasterUpdate().getColumnQueryTypes().get(0).getColumns().get(0).getValue();
@@ -1158,6 +1170,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
             log.error("修改-该订单已被:{}提交", existingUser);
             return R.error("该订单已被提交");
         }
+        // 定义事务属性
+        TransactionDefinition definition = new DefaultTransactionDefinition();
+        // 开始事务
+        TransactionStatus status = transactionManager.getTransaction(definition);
         try {
             //数据库中的订单数据
             ApsProductionOrderDo nowApsProductionOrderDo = this.getById(id);
@@ -1172,16 +1188,9 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
             } catch (Exception e) {
                 throw new RuntimeException("更新订单信息错误,请刷新页面后重试");
             }
-            //订单更新完后,更新坯料计划对应的字段
             //查询坯料计划
             List<ApsBlankOrderDo> apsBlankOrderDoList = apsBlankOrderService.list(new LambdaQueryWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getProductionorderid, id));
-            //查询产品明细
-            List<ApsProductDetailDo> apsProductDetailVoList = apsProductDetailService.list(new LambdaQueryWrapper<ApsProductDetailDo>().eq(ApsProductDetailDo::getMainid, id));
-            //查询合并订单
-            List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList = apsProductionMergeOrderService.list(new LambdaQueryWrapper<ApsProductionMergeOrderDo>().eq(ApsProductionMergeOrderDo::getMainid, id));
-            oldOrder.setId(id);
-            Thread thread = new Thread(() -> setBlankColumn(oldOrder, apsBlankOrderDoList, apsProductDetailVoList, apsProductionMergeOrderDoList));
-            thread.start();
+
             //更新订单的生产状态
             if (!apsBlankOrderDoList.isEmpty()) {
                 CommonUpdateProductionStatusReq commonUpdateProductionStatusReq = new CommonUpdateProductionStatusReq();
@@ -1251,14 +1260,36 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
                     throw new RuntimeException("执行创建流程失败,请刷新页面后重试");
                 }
             }
-        } finally {
+            // 提交事务
+            transactionManager.commit(status);
+        }catch (Exception e){
+            // 捕获异常并回滚事务
+            transactionManager.rollback(status);
+            throw e;
+        }finally {
             log.debug("修改-订单提交完毕,从map中清空当前订单锁,订单ID:{}", id);
             productOrderLock.remove(id);
         }
+        //订单更新完后,更新坯料计划对应的字段
+        Thread thread = new Thread(() -> updateNeedUpdateColumnAll(id));
+        thread.start();
         return R.ok();
     }
 
-    private void setBlankColumn(ApsProductionOrderDo orderDo, List<ApsBlankOrderDo> apsBlankOrderDoList, List<ApsProductDetailDo> apsProductDetailVoList, List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList) {
+    private void updateNeedUpdateColumnAll(String orderId) {
+        //查询订单详情
+        ApsProductionOrderDo apsProductionOrderDo = this.getById(orderId);
+        //查询产品明细
+        List<ApsProductDetailDo> apsProductDetailVoList = apsProductDetailService.list(new LambdaQueryWrapper<ApsProductDetailDo>().eq(ApsProductDetailDo::getMainid, orderId));
+        //查询合并订单
+        List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList = apsProductionMergeOrderService.list(new LambdaQueryWrapper<ApsProductionMergeOrderDo>().eq(ApsProductionMergeOrderDo::getMainid, orderId));
+        //查询坯料计划列表
+        List<ApsBlankOrderDo> apsBlankOrderDoList = apsBlankOrderService.list(new LambdaQueryWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getProductionorderid, orderId));
+        apsProductionOrderService.setBlankColumn(apsProductionOrderDo, apsBlankOrderDoList, apsProductDetailVoList, apsProductionMergeOrderDoList);
+    }
+
+    @Transactional
+    public void setBlankColumn(ApsProductionOrderDo orderDo, List<ApsBlankOrderDo> apsBlankOrderDoList, List<ApsProductDetailDo> apsProductDetailVoList, List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList) {
         //根据订单和产品明细,及其合并订单,重新赋值 坯料计划和输出成品的冗余字段
         String orderno = StringUtils.isNotBlank(orderDo.getOrderno()) ? orderDo.getOrderno() : "";
         String customorderno = StringUtils.isNotBlank(orderDo.getCustomorderno()) ? orderDo.getCustomorderno() : "";