From f97251d71f83423d561c582ec5576a7451895af6 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 23 九月 2025 17:16:19 +0800
Subject: [PATCH] 任务档定时任务修改

---
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java |  475 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 398 insertions(+), 77 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index d1c0950..0e8c1a5 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -1,22 +1,29 @@
 package com.zy.asrs.task.handler;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.enums.LocStsType;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.LocCacheServiceImpl;
+import com.zy.asrs.service.impl.OrderPakinServiceImpl;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
-import com.zy.asrs.utils.VersionUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Created by vincent on 2020/7/4
  */
+@Slf4j
 @Service
 @Transactional
 public class WorkMastHandler extends AbstractHandler<String> {
@@ -31,35 +38,56 @@
     private LocDetlService locDetlService;
     @Autowired
     private WaitPakinService waitPakinService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private OrderDetlPakinService orderDetlPakinService;
+    @Autowired
+    private OrderDetlPakoutService orderDetlPakoutService;
+    @Autowired
+    private LocCacheService locCacheService;
+    @Autowired
+    private OrderPakinService orderPakinService;
+    @Autowired
+    private TaskService taskService;
 
     public ReturnT<String> start(WrkMast wrkMast) {
         // 4.鍏ュ簱瀹屾垚
         if (wrkMast.getWrkSts() == 4) {
             return doIn(wrkMast);
-        // 14.鍑哄簱瀹屾垚
-        } else  if (wrkMast.getWrkSts() == 14) {
+            // 14.鍑哄簱瀹屾垚
+        } else if (wrkMast.getWrkSts() == 14) {
             return doOut(wrkMast);
         }
         return SUCCESS;
     }
 
-    private ReturnT<String> doIn(WrkMast wrkMast){
+
+    public ReturnT<String> doIn(WrkMast wrkMast) {
         Date now = new Date();
         LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
         try {
             if (null == locMast) {
-                exceptionHandle("宸ヤ綔妗workNo={0}]搴撲綅鍙烽敊璇痆locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                exceptionHandle("宸ヤ綔妗workNo={0}]搴撲綅鍙烽敊璇痆locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return FAIL.setMsg("宸ヤ綔妗workNo=" + wrkMast.getWrkNo() + "]搴撲綅鍙烽敊璇痆locNo=" + wrkMast.getLocNo() + "]");
             }
+            assert locMast != null;
             switch (wrkMast.getIoType()) {
                 // 绌烘澘鍏ュ簱
                 case 10:
                     // 淇敼搴撲綅鐘舵��=D
-                    if (locMast.getLocType().equals("S") || locMast.getLocType().equals("Q")) {
-                        locMast.setLocType("D");
+                    if (locMast.getLocSts().equals("S") || locMast.getLocSts().equals("Q")) {
+                        if (!Cools.isEmpty(wrkMast.getBarcode())) {
+                            locMast.setBarcode(wrkMast.getBarcode());
+                        }
+                        locMast.setLocSts("D");
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
                         if (!locMastService.updateById(locMast)) {
-                            exceptionHandle("绌烘澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                            exceptionHandle("绌烘澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("绌烘澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
                     break;
@@ -73,45 +101,116 @@
                     // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
                     List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                     if (wrkDetls.isEmpty()) {
-                        exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d笉瀛樺湪锛沎workNo={0}]", wrkMast.getWrkNo());
+//                        exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d笉瀛樺湪锛沎workNo={0}]", wrkMast.getWrkNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("鍏ㄦ澘鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d笉瀛樺湪; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                     }
                     // 閬嶅巻宸ヤ綔鏄庣粏锛屾洿鏂板簱瀛樻槑缁嗗拰鍏ュ簱閫氱煡妗�
                     for (WrkDetl wrkDetl : wrkDetls) {
-                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
+
+                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand()
+                                , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                         if (null != locDetl) {
-                            boolean res = locDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr());
-                            if (!res) {
-                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3()
+                                    , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) {
+//                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                             }
                         } else {
                             locDetl = new LocDetl();
+                            locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
-                            VersionUtils.setLocDetl(locDetl, wrkDetl); // 鐗堟湰鎺у埗
+                            locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
+                            locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
                             locDetl.setModiTime(now);
                             locDetl.setAppeTime(now);
                             if (!locDetlService.insert(locDetl)) {
-                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("鍏ㄦ澘鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                             }
                         }
-                        // 鏇存柊鍏ュ簱閫氱煡妗� status ===>> Y
-                        WaitPakin setParam = new WaitPakin();
-                        setParam.setStatus("Y");
-                        boolean updateRes = waitPakinService.update(setParam
-                                , new EntityWrapper<WaitPakin>().eq("barcode", wrkDetl.getZpallet())
-                                        .eq("matnr", wrkDetl.getMatnr())
-                                        .eq("anfme", wrkDetl.getAnfme()));
-                        if (!updateRes && updateRes) {
-                            exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊鍏ュ簱閫氱煡妗eけ璐ワ紱[workNo={0}]", wrkMast.getWrkNo());
+
+                        // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                        OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem
+                                (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        if (orderDetlPakin == null) {
+                            orderDetlPakin = orderDetlPakinService.selectItem
+                                    (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(),
+                                            wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                         }
+                        try {
+                            if (!Cools.isEmpty(orderDetlPakin)) {
+                                if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                        orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
+//                                    exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]",
+//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                    return FAIL.setMsg("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                                }
+                            }
+                        } catch (Exception ignore) {
+                        }
+
                     }
                     // 淇敼搴撲綅鐘舵�� S ====>> F
-                    if (locMast.getLocType().equals("S")) {
-                        locMast.setLocType("F");
+                    if (locMast.getLocSts().equals("S")) {
+                        locMast.setLocSts("F");
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
                         if (!locMastService.updateById(locMast)) {
-                            exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                            exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("鍏ㄦ澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                        }
+                    }
+                    break;
+                // 鎷f枡閫斾腑骞舵澘
+                case 8:
+                    // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
+                    List<WrkDetl> wrkDetls8 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (wrkDetls8.isEmpty()) {
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("鎷f枡閫斾腑骞舵澘 ===>> 宸ヤ綔鏄庣粏妗d笉瀛樺湪; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                    }
+                    // 閬嶅巻宸ヤ綔鏄庣粏锛屾洿鏂板簱瀛樻槑缁嗗拰鍏ュ簱閫氱煡妗�
+                    for (WrkDetl wrkDetl : wrkDetls8) {
+
+                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand()
+                                , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        if (null != locDetl) {
+                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme() + locDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3()
+                                    , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) {
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("鎷f枡閫斾腑骞舵澘 ===>> 鏇存柊搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                            }
+                        } else {
+                            locDetl = new LocDetl();
+                            locDetl.sync(wrkDetl);
+                            locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
+                            locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
+                            locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
+                            locDetl.setModiTime(now);
+                            locDetl.setAppeTime(now);
+                            if (!locDetlService.insert(locDetl)) {
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("鎷f枡閫斾腑骞舵澘 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                            }
+                        }
+
+                        if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
+                            // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                            if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                    wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                    wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("鎷f枡閫斾腑骞舵澘 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                            }
                         }
                     }
                     break;
@@ -120,26 +219,58 @@
                     // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
                     List<WrkDetl> wrkDetls53 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                     if (wrkDetls53.isEmpty()) {
-                        exceptionHandle("鎷f枡鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+//                        exceptionHandle("鎷f枡鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("鎷f枡鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                     }
-                    for (WrkDetl wrkDetl:wrkDetls53) {
-                        // 淇敼搴撳瓨鏄庣粏鏁伴噺锛屽鏋滃伐浣滄槑缁嗘暟閲忎负0鏃讹紝鍒犻櫎搴撳瓨鏄庣粏
-                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
+                    for (WrkDetl wrkDetl : wrkDetls53) {
+
+                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand()
+                                , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                         if (null != locDetl) {
-                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr())) {
-                                exceptionHandle("鎷f枡鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3()
+                                    , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) {
+//                                exceptionHandle("鎷f枡鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("鎷f枡鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                             }
-                            // todo:luxiaotao 3)淇敼鍑哄簱閫氱煡妗� status ==> Y
                         }
+
+                        // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                        OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem
+                                (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
+                                        wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        if (orderDetlPakin == null) {
+                            orderDetlPakin = orderDetlPakinService.selectItem
+                                    (wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        }
+                        try {
+                            if (!Cools.isEmpty(orderDetlPakin)) {
+                                if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                        orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
+//                                    exceptionHandle("鎷f枡鍏ュ簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]",
+//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                    return FAIL.setMsg("鎷f枡鍏ュ簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                                }
+                            }
+                        } catch (Exception ignore) {
+                        }
+
                     }
                     // 淇敼搴撲綅鐘舵�� Q ====>> F
-                    if (locMast.getLocType().equals("Q")) {
-                        locMast.setLocType("F");
+                    if (locMast.getLocSts().equals("Q")) {
+                        locMast.setLocSts("F");
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
                         if (!locMastService.updateById(locMast)) {
-                            exceptionHandle("鎷f枡鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                            exceptionHandle("鎷f枡鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("鎷f枡鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
                     break;
@@ -148,35 +279,62 @@
                     // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
                     List<WrkDetl> wrkDetls54 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                     if (wrkDetls54.isEmpty()) {
-                        exceptionHandle("骞舵澘鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+//                        exceptionHandle("骞舵澘鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("骞舵澘鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                     }
                     // 淇敼搴撳瓨鏄庣粏鏁伴噺锛屽鏃犲簱瀛橈紝鏇炬柊澧�
-                    for (WrkDetl wrkDetl:wrkDetls54) {
-                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
+                    for (WrkDetl wrkDetl : wrkDetls54) {
+
+                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand()
+                                , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
                         if (null != locDetl) {
-                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr())) {
-                                exceptionHandle("骞舵澘鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触锛沎workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
+                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3()
+                                    , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) {
+//                                exceptionHandle("骞舵澘鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触锛沎workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("骞舵澘鍏ュ簱 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                             }
                         } else {
                             locDetl = new LocDetl();
+                            locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
-                            VersionUtils.setLocDetl(locDetl, wrkDetl); // 鐗堟湰鎺у埗
+                            locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
+                            locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
                             locDetl.setModiTime(now);
                             locDetl.setAppeTime(now);
                             if (!locDetlService.insert(locDetl)) {
-                                exceptionHandle("骞舵澘鍏ュ簱 ===>> 鏂板搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("骞舵澘鍏ュ簱 ===>> 鏂板搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                             }
                         }
-                        // todo:luxiaotao 3)淇敼鍑哄簱閫氱煡妗� status ==> Y
+
+                        // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                        OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        try {
+                            if (!Cools.isEmpty(orderDetlPakin)) {
+                                if (!orderDetlPakinService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                        orderDetlPakin.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                    return FAIL.setMsg("骞舵澘鍏ュ簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                                }
+                            }
+                        } catch (Exception ignore) {
+
+                        }
+
                     }
                     // 淇敼搴撲綅鐘舵�� Q ====>> F
-                    if (locMast.getLocType().equals("Q")) {
-                        locMast.setLocType("F");
+                    if (locMast.getLocSts().equals("Q")) {
+                        locMast.setLocSts("F");
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
                         if (!locMastService.updateById(locMast)) {
-                            exceptionHandle("骞舵澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                            exceptionHandle("骞舵澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("骞舵澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
                     break;
@@ -185,51 +343,74 @@
                     // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
                     List<WrkDetl> wrkDetls57 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                     if (wrkDetls57.isEmpty()) {
-                        exceptionHandle("鐩樼偣鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+//                        exceptionHandle("鐩樼偣鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("鐩樼偣鍏ュ簱 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                     }
-                    // todo:luxiaotao 3)淇敼鐩樼偣閫氱煡妗� status ==> Y
+                    for (WrkDetl wrkDetl : wrkDetls57) {
+                        if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
+                            // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                            OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                    wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                            if (!Cools.isEmpty(orderDetlPakout)) {
+                                if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                        orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                    return FAIL.setMsg("鐩樼偣鍏ュ簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
+                                }
+                            }
+                        }
+                    }
                     // 淇敼搴撲綅鐘舵�� Q ====>> F
-                    if (locMast.getLocType().equals("Q")) {
-                        locMast.setLocType("F");
+                    if (locMast.getLocSts().equals("Q")) {
+                        locMast.setLocSts(wrkMast.getFullPlt().equals("Y") ? "F" : "D");
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
                         if (!locMastService.updateById(locMast)) {
-                            exceptionHandle("鐩樼偣鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                            exceptionHandle("鐩樼偣鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("鐩樼偣鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
                     break;
                 // 搴撲綅绉昏浆
                 case 11:
                     // 榛樿鐩爣搴撲綅鏄┖鏉�
-                    String locType = "D";
+                    String locSts = "D";
                     // 搴撲綅绉昏浆鍒ゆ柇鏄惁涓虹┖鏉跨Щ杞�
                     if (wrkMast.getEmptyMk().equals("N")) {
-                        locType = "F";
+                        locSts = "F";
                         // 杞Щ搴撳瓨鏄庣粏鏁版嵁: 搴撳瓨鍙� 鐢卞伐浣滄。婧愬簱浣嶅彉涓虹洰鏍囧簱浣�
                         if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
-                            exceptionHandle("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触锛沎婧愬簱浣�={0}],[鐩爣搴撲綅={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
+//                            exceptionHandle("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触锛沎婧愬簱浣�={0}],[鐩爣搴撲綅={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
-                    // todo:luxiaotao 3)淇敼鐩樼偣閫氱煡妗� status ==> Y
                     // 淇敼婧愬簱浣嶇姸鎬� ==> O
                     LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
                     if (null != sourceLoc) {
                         sourceLoc.setBarcode("");
-                        sourceLoc.setLocType("O");
+                        sourceLoc.setLocSts("O");
                         sourceLoc.setModiTime(now);
                         sourceLoc.setIoTime(now);
                         if (!locMastService.updateById(sourceLoc)) {
-                            exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+//                            exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
-                    // 淇敼鐩爣搴撲綅鐘舵�� ==> .locType
-                    locMast.setLocType(locType);
+                    // 淇敼鐩爣搴撲綅鐘舵�� ==> .locSts
+                    locMast.setLocSts(locSts);
                     locMast.setBarcode(wrkMast.getBarcode());
                     locMast.setIoTime(now);
                     locMast.setModiTime(now);
                     if (!locMastService.updateById(locMast)) {
-                        exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                        exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                     }
                     break;
                 default:
@@ -239,59 +420,131 @@
             wrkMast.setWrkSts(5L);
             wrkMast.setModiTime(now);
             if (!wrkMastService.updateById(wrkMast)) {
-                exceptionHandle("鏇存柊鍏ュ簱瀹屾垚鐘舵�佸け璐�;[workNo={0}]", wrkMast.getWrkNo());
+//                exceptionHandle("鏇存柊鍏ュ簱瀹屾垚鐘舵�佸け璐�;[workNo={0}]", wrkMast.getWrkNo());
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return FAIL.setMsg("鏇存柊鍏ュ簱瀹屾垚鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
             }
         } catch (Exception e) {
+            log.error("fail", e);
             e.printStackTrace();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             return FAIL.setMsg(e.getMessage());
         }
+
         return SUCCESS;
     }
 
-    private ReturnT<String> doOut(WrkMast wrkMast){
+    private ReturnT<String> doOut(WrkMast wrkMast) {
         Date now = new Date();
         LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
         try {
             if (null == locMast) {
-                exceptionHandle("宸ヤ綔妗workNo={0}]搴撲綅鍙烽敊璇痆locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+//                exceptionHandle("宸ヤ綔妗workNo={0}]搴撲綅鍙烽敊璇痆locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return FAIL.setMsg("宸ヤ綔妗e簱浣嶅彿閿欒; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
             }
+            assert locMast != null;
             switch (wrkMast.getIoType()) {
                 // 鍏ㄦ澘鍑哄簱
                 case 101:
+//                    // 鍑哄簱纭淇″彿浣�
+//                    if (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N")) {
+//                        return SUCCESS;
+//                    }
                     // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
                     List<WrkDetl> wrkDetls101 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                     if (wrkDetls101.isEmpty()) {
-                        exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+//                        exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                     }
                     for (WrkDetl wrkDetl : wrkDetls101) {
-                        // todo:luxiaotao 3)淇敼鍑哄簱閫氱煡妗� status ==> Y
+                        // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                        OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        if (orderDetlPakout == null) {
+                            orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                    wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        }
+                        try {
+                            if (!Cools.isEmpty(orderDetlPakout)) {
+                                if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                        orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
+//                                    exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触锛沎workNo={0}],[locNo={1}]",
+//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                    return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
+                                }
+                            }
+                        } catch (Exception ignore) {
+                        }
                     }
                     // 鍒犻櫎宸ヤ綔妗f簮搴撲綅鐨勫簱瀛樻槑缁�
                     if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) {
-                        exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 鍒犻櫎搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+//                        exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 鍒犻櫎搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 鍒犻櫎搴撳瓨鏄庣粏澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                     }
                     // 淇敼婧愬簱浣嶇姸鎬� R ===>> O
-                    if (locMast.getLocType().equals("R")) {
-                        locMast.setLocType("O");
+                    if (locMast.getLocSts().equals("R")) {
+                        locMast.setLocSts("O");
                         locMast.setBarcode("");
                         locMast.setModiTime(now);
                         locMast.setIoTime(now);
                         if (!locMastService.updateById(locMast)) {
-                            exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+//                            exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
+                        }
+                    }
+                    break;
+                // 骞舵澘閫斾腑鎹℃枡
+                case 108:
+                    // 鏍规嵁宸ヤ綔鍙凤紝鏌ヨ宸ヤ綔鏄庣粏妗�
+                    List<WrkDetl> wrkDetls108 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (wrkDetls108.isEmpty()) {
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("骞舵澘閫斾腑鎹℃枡 ===>> 宸ヤ綔鏄庣粏妗d负绌�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
+                    }
+                    for (WrkDetl wrkDetl : wrkDetls108) {
+                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand()
+                                , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        if (null != locDetl) {
+                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3()
+                                    , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) {
+                                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                return FAIL.setMsg("骞舵澘閫斾腑鎹℃枡 ===>> 淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                            }
+                        }
+                        // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                        OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3());
+                        try {
+                            if (!Cools.isEmpty(orderDetlPakout)) {
+                                if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(),
+                                        orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
+                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                    return FAIL.setMsg("骞舵澘閫斾腑鎹℃枡 ===>> 鏇存柊璁㈠崟瀹屾垚鏁伴噺澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
+                                }
+                            }
+                        } catch (Exception ignore) {
                         }
                     }
                     break;
                 // 绌烘澘鍑哄簱
                 case 110:
                     // 淇敼搴撲綅鐘舵�� R ===>> O
-                    if (locMast.getLocType().equals("R")) {
-                        locMast.setLocType("O");
+                    if (locMast.getLocSts().equals("R")) {
+                        locMast.setLocSts("O");
                         locMast.setBarcode("");
                         locMast.setModiTime(now);
                         locMast.setIoTime(now);
                         if (!locMastService.updateById(locMast)) {
-                            exceptionHandle("绌烘澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+//                            exceptionHandle("绌烘澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("绌烘澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                         }
                     }
                     break;
@@ -302,9 +555,12 @@
             wrkMast.setWrkSts(15L);
             wrkMast.setModiTime(now);
             if (!wrkMastService.updateById(wrkMast)) {
-                exceptionHandle("鏇存柊鍑哄簱瀹屾垚鐘舵�佸け璐�;[workNo={0}]", wrkMast.getWrkNo());
+//                exceptionHandle("鏇存柊鍑哄簱瀹屾垚鐘舵�佸け璐�;[workNo={0}]", wrkMast.getWrkNo());
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return FAIL.setMsg("鏇存柊鍑哄簱瀹屾垚鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
             }
         } catch (Exception e) {
+            log.error("fail", e);
             e.printStackTrace();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             return FAIL.setMsg(e.getMessage());
@@ -312,4 +568,69 @@
         return SUCCESS;
     }
 
+    /**
+     * @author Ryan
+     * @date 2025/9/23
+     * @description: AGV浠诲姟瀹屾垚鍔犲叆鍘嗗彶妗�
+     * @version 1.0
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public ReturnT<String> AgvStart(Task wrkMast) {
+        Date now = new Date();
+        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
+        if (Objects.isNull(locCache)) {
+            throw new CoolException("鏁版嵁閿欒锛屽簱浣嶄笉瀛樺湪锛侊紒");
+        }
+        List<WaitPakin> apallet = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
+        if (Objects.isNull(apallet)) {
+            throw new CoolException("鏁版嵁閿欒锛氱粍鎵樻暟鎹笉瀛樺湪锛侊紒");
+        }
+        apallet.forEach(pakin -> {
+            LocDetl detl = new LocDetl();
+            BeanUtils.copyProperties(pakin, detl);
+            detl.setBarcode(pakin.getBarcode())
+                    .setAnfme(pakin.getAnfme())
+                    .setBrand(pakin.getBrand())
+                    .setAppeTime(new Date())
+                    .setSpecs(pakin.getSpecs())
+                    .setColor(pakin.getColor())
+                    .setLocId(locCache.getId())
+                    .setLocNo(locCache.getLocNo())
+                    .setAreaId(locCache.getAreaId())
+                    .setAreaName(locCache.getAreaName())
+                    .setUnit(pakin.getUnit())
+                    .setBatch(pakin.getBatch());
+            if (!locDetlService.insert(detl)) {
+                throw new CoolException("搴撲綅鏄庣粏淇濆瓨澶辫触锛侊紒");
+            }
+        });
+
+        locCache.setLocSts(LocStsType.LOC_STS_TYPE_F.type);
+        locCache.setModiTime(new Date());
+        locCache.setBarcode("");
+        locCache.setModiTime(new Date());
+        locCache.setIoTime(new Date());
+        if (!locCacheService.updateById(locCache)) {
+            throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒");
+        }
+        wrkMast.setWrkSts(5L);
+        wrkMast.setModiTime(new Date());
+        if (!taskService.updateById(wrkMast)) {
+            throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+        }
+
+        Set<Long> list = apallet.stream().map(WaitPakin::getOrderId).collect(Collectors.toSet());
+        List<OrderPakin> pakins = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("id", list));
+        if (Objects.isNull(pakins) || pakins.isEmpty()) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+        }
+        pakins.forEach(orderPakin -> {
+            orderPakin.setSettle(4L);
+            if (!orderPakinService.updateById(orderPakin)) {
+                throw new CoolException("鍗曟嵁淇敼澶辫触锛侊紒");
+            }
+        });
+
+        return SUCCESS;
+    }
 }

--
Gitblit v1.9.1