From d28a5401ac1e2995ec6de12a81395aa5d05b040a Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 05 十一月 2026 10:17:49 +0800
Subject: [PATCH] refactor(order): 提取外协判断方法并还原原下单

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java |   48 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
index b05e79c..3123929 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -35,12 +35,14 @@
 import com.ruoyi.common.utils.api.IfsApiUtils;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.*;
+import com.ruoyi.inspect.event.InsOrderDeletingEvent;
 import com.ruoyi.inspect.mapper.*;
 import com.ruoyi.inspect.pojo.*;
 import com.ruoyi.inspect.service.InsOrderService;
 import com.ruoyi.inspect.service.InsOrderStateService;
 import com.ruoyi.inspect.service.InsProductService;
 import com.ruoyi.inspect.service.InsSampleService;
+import com.ruoyi.inspect.service.OutsourceOrderFlowService;
 import com.ruoyi.inspect.vo.IfsOrderVO;
 import com.ruoyi.inspect.vo.InsOrderPrintingVo;
 import com.ruoyi.system.mapper.UserMapper;
@@ -48,6 +50,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -88,8 +91,10 @@
     private InsUnqualifiedRetestProductMapper insUnqualifiedRetestProductMapper;
     private IfsApiUtils ifsApiUtils;
     private SpotCheckQuarterItemMapper spotCheckQuarterItemMapper;
+    private ApplicationEventPublisher applicationEventPublisher;
     private StandardProductListMapper standardProductListMapper;
     private StructureItemParameterMapper structureItemParameterMapper;
+    private OutsourceOrderFlowService outsourceOrderFlowService;
 
 
     //鑾峰彇妫�楠屼笅鍗曟暟鎹�
@@ -225,6 +230,16 @@
                 throw new ErrorException("璇ユ娊鏍疯鍒掑凡琚粦瀹氳繃");
             }
         }
+        IfsInventoryQuantity ifsInventoryQuantity = null;
+        if (insOrder.getIfsInventoryId() != null) {
+            ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+            if (ifsInventoryQuantity != null) {
+                insOrder.setTypeSource(outsourceOrderFlowService.resolveTypeSource(
+                        ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp(), insOrder.getTypeSource()));
+            } else if (insOrder.getTypeSource() != null) {
+                throw new ErrorException("鎵句笉鍒伴攢鍞鍗曚俊鎭�");
+            }
+        }
         insOrder.setState(0);
 
         LocalDate appointed = insOrder.getAppointed();
@@ -316,9 +331,8 @@
         });
 
         //鍘熸潗鏂欎笅鍗曟垨澶栬喘鎴愬搧涓嬪崟
-        if (Objects.nonNull(insOrder.getTypeSource()) && Objects.nonNull(insOrder.getIfsInventoryId())) {
+        if (insOrder.getTypeSource() != null && ifsInventoryQuantity != null) {
             // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
-            IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
             Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
             User user = userMapper.selectById(declareUserId);
             if (user == null) {
@@ -404,6 +418,21 @@
             }
         }
         return insOrder.getId();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteReturnedOrder(Integer insOrderId) {
+        InsOrder order = insOrderMapper.selectById(insOrderId);
+        if (order == null) {
+            throw new ErrorException("鎴愬搧璁㈠崟涓嶅瓨鍦�");
+        }
+        if (!(Integer.valueOf(2).equals(order.getState()) || Integer.valueOf(3).equals(order.getState()))) {
+            throw new ErrorException("鍙湁閫�鍥炴垨鎾ら攢璁㈠崟鎵嶈兘鍒犻櫎");
+        }
+        Integer operatorId = SecurityUtils.getUserId().intValue();
+        applicationEventPublisher.publishEvent(new InsOrderDeletingEvent(insOrderId, operatorId, LocalDateTime.now()));
+        return removeById(insOrderId);
     }
 
     /**
@@ -527,6 +556,16 @@
         Map<String, Object> map = new HashMap<>();
 //        InsOrder insOrder = insOrderMapper.selectById(id);
         IfsOrderVO ifsOrderVO = insOrderMapper.selectOrderInfoById(id);
+        // 璇︽儏鍚屾椂杩斿洖鏈夋晥澶勭悊娴佺▼锛屼緵妫�娴嬮〉闈㈢粺涓�閫夋嫨甯冨眬鍙婃牎楠岃鍒欍��
+        if (ifsOrderVO != null) {
+            ifsOrderVO.setFlowOrderType(ifsOrderVO.getIfsOrderType());
+            if (ifsOrderVO.getIfsInventoryId() != null && outsourceOrderFlowService.isOutsource(ifsOrderVO.getIfsOrderType())) {
+                IfsInventoryQuantity quantity = ifsInventoryQuantityMapper.selectById(ifsOrderVO.getIfsInventoryId());
+                if (quantity != null) {
+                    ifsOrderVO.setFlowOrderType(outsourceOrderFlowService.resolve(quantity.getOrderType(), quantity.getMaterialProp()));
+                }
+            }
+        }
         List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
         map.put("insOrder", ifsOrderVO);
         map.put("sampleProduct", list);
@@ -1191,6 +1230,9 @@
     public String moveRawMaterial(IfsInventoryQuantity inventoryQuantity) {
         //鏌ヨifs璁㈠崟璇︽儏
         IfsInventoryQuantity one = ifsInventoryQuantityMapper.selectById(inventoryQuantity.getId());
+        String flowOrderType = outsourceOrderFlowService.isOutsource(one.getOrderType())
+                ? outsourceOrderFlowService.resolve(one.getOrderType(), one.getMaterialProp())
+                : inventoryQuantity.getOrderType();
         String toLocation;
         // 鐧昏閲囪喘妫�楠岀粨鏋淪TD
         if (one.getIsRegister().equals(0)) {
@@ -1241,7 +1283,7 @@
         //1.鏍规嵁ifs鍩熻幏鍙栧搴斿簱浣嶉厤缃�
         IfsProperties properties = ifsApiUtils.getPropByContract(one.getContract());
         //2.鍒ゆ柇璁㈠崟绫诲瀷鏄惁涓哄師鏉愭枡
-        if(StringUtils.equals(inventoryQuantity.getOrderType(), OrderType.RAW.getValue())){
+        if(StringUtils.equals(flowOrderType, OrderType.RAW.getValue())){
             toLocation = properties.getRawQualifiedLocation();
         }else{
             toLocation = properties.getProductQualifiedLocation();

--
Gitblit v1.9.3