From 3fbde4dd7e79fdb11f1fd140de0d5ada1f16d04d Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期二, 11 二月 2025 08:15:58 +0800
Subject: [PATCH] 兼容四期

---
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java |  242 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 230 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index 8627132..f3158bd 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -7,10 +7,12 @@
 import com.core.common.Cools;
 import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
+import com.zy.asrs.constant.AsrsConstants;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.LocDetlAdjustParam;
 import com.zy.asrs.entity.param.StockOutParam;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.OrderUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.LocDto;
 import com.zy.common.model.OrderDto;
@@ -31,6 +33,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Created by vincent on 2020/6/11
@@ -480,7 +483,7 @@
     鍏ュ簱
      */
     @Transactional
-    public String emptyPlateIn(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn,String factory) {
+    public String emptyPlateIn(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn) {
 
         Date now = new Date();
 
@@ -520,6 +523,7 @@
         if (agvBasDevp.getLocType1() != br) {
             throw new CoolException("绔欑偣绫诲瀷鍜岃揣鏋剁被鍨嬩笉绗︼紒");
         }
+        AtomicReference<String> factory = new AtomicReference<>();
         if (containerType == 40) {
             locType = 5;
         } else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
@@ -528,9 +532,9 @@
             locType = 2;
         } else if (containerType == 30) {
             locType = 3;
-        }  else if (containerType == 31) {
+        } else if (containerType == 31) {
             locType = 6;
-        }else {
+        } else {
             locType = agvBasDevp.getLocType1();
         }
 
@@ -558,6 +562,7 @@
         if (!Cools.isEmpty(agvWaitPakinList)) {
             AtomicBoolean isCurrLev = new AtomicBoolean(false);
             agvWaitPakinList.forEach(agvWaitPakin -> {
+                factory.set(OrderUtils.getFactory(agvWaitPakin.getThreeCode()));
                 if (!Cools.isEmpty(agvWaitPakin.getProcessSts())) {
                     if (agvWaitPakin.getProcessSts() == 1) {
                         isCurrLev.set(true);
@@ -569,19 +574,19 @@
             Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks"));
             if (Cools.isEmpty(config)) {
                 if (isCurrLev.get()) {
-                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true,factory);
+                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
                 } else {
-                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false,factory);
+                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
                 }
             } else {
                 List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1"));
                 if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) {
-                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true,factory);
+                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
                 } else {
                     if (isCurrLev.get()) {
-                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true,factory);
+                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
                     } else {
-                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false,factory);
+                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
                     }
                     //agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
                 }
@@ -590,8 +595,164 @@
             String devNo = agvBasDevp.getDevNo();
             String locNo = agvLocMast.getLocNo();
 
+
             //鐢熸垚宸ヤ綔妗�
             AgvWrkMast wrkMast = createWrkMast(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType());
+            //鐢熸垚宸ヤ綔妗f槑缁�
+            long flowId = snowflakeIdWorker.nextId();
+            agvWaitPakinList.forEach(wp -> {
+                createWrkDetlReWrite(wp.getMatnr(), wrkMast.getWrkNo(), wp.getOrderNo(), wp.getBatch(), wp.getAnfme(), wp.getSuppCode(), now, userId, wp.getThreeCode(), wp.getDeadTime(), wp.getProcessSts());
+            });
+            //淇敼鍏ュ簱閫氱煡妗g姸鎬�
+            agvWaitPakinService.updateIoStatus(containerCode, "Y");
+            //鏇存柊婧愮珯鐐圭姸鎬�
+            updateAgvBasDevp(agvBasDevp, "R", containerType);
+        } else {
+            //鏌ヨ宸ヤ綔妗�
+            AgvWrkMast agvWrkMast1 = agvWrkMastService.selectByContainerCode(containerCode);
+            if (!Cools.isEmpty(agvWrkMast1)) {
+                throw new CoolException("褰撳墠璐ф灦宸叉湁鍏ュ簱浠诲姟锛屾棤娉曡繘琛屽叆搴�");
+            }
+            agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), true, true);
+            // 鐢熸垚宸ヤ綔妗� 10.绌烘澘鍏ュ簱
+            createWrkMast(10, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), containerCode, now, userId, containerType, agvLocMast.getPltType());
+            //鏇存柊婧愮珯鐐圭姸鎬�
+            updateAgvBasDevp(agvBasDevp, "R", containerType, containerCode);
+        }
+
+        //鏇存柊鐩爣搴撲綅鐘舵�佸拰淇℃伅
+        updateAgvLocMast(agvLocMast, "S");
+        return agvLocMast.getLocNo();
+    }
+
+    /*
+   鍏ュ簱
+    */
+    @Transactional
+    public String emptyPlateInV2(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn, String code) {
+
+        Date now = new Date();
+
+        Short locType = 0;
+
+        AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
+        if (Cools.isEmpty(agvBasDevp)) {
+            throw new CoolException("鏆傛棤" + station + "绔欑偣");
+        }
+        int br = 0;
+        if (containerType == 21 && agvBasDevp.getFloor() == 2) {
+            containerType = 20;
+        }
+        switch (containerType) {
+            case 10:
+                br = 1;
+                break;
+            case 20:
+                br = 2;
+                break;
+            case 21:
+                br = 4;
+                break;
+            case 30:
+                br = 3;
+                break;
+            case 31:
+                br = 6;
+                break;
+            case 40:
+                br = 5;
+                break;
+        }
+        if (br == 4 && agvBasDevp.getLocType1() == 2) {
+            br = 2;
+        }
+        if (agvBasDevp.getLocType1() != br) {
+            throw new CoolException("绔欑偣绫诲瀷鍜岃揣鏋剁被鍨嬩笉绗︼紒");
+        }
+        AtomicReference<String> factory = new AtomicReference<>();
+        if (containerType == 40) {
+            locType = 5;
+        } else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
+            locType = 4;
+        } else if (containerType == 20 && agvBasDevp.getFloor() == 3) {
+            locType = 2;
+        } else if (containerType == 30) {
+            locType = 3;
+        } else if (containerType == 31) {
+            locType = 6;
+        } else {
+            locType = agvBasDevp.getLocType1();
+        }
+
+        if (!Cools.eq(agvBasDevp.getBarcode(), containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn) {
+            throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts() + ",鏃犳硶杩涜鍏ュ簱");
+        }
+
+        //鏌ヨ宸ヤ綔妗�
+        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode);
+        if (!Cools.isEmpty(agvWrkMast) && !emptyAutoIn) {
+            throw new CoolException("褰撳墠璐ф灦宸叉湁鍏ュ簱浠诲姟锛屾棤娉曡繘琛屽叆搴�");
+        }
+
+        //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
+        AgvLocMast agvLocMast = new AgvLocMast();
+
+        //鏌ヨ搴撳瓨
+        AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode", containerCode));
+        if (!Cools.isEmpty(locMast)) {
+            throw new CoolException("褰撳墠璐ф灦宸插湪搴撳瓨涓紝鏃犳硶杩涜鍏ュ簱");
+        }
+
+        //鏌ヨ鍏ュ簱閫氱煡妗�
+        List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
+        if (!Cools.isEmpty(agvWaitPakinList)) {
+            AtomicBoolean isCurrLev = new AtomicBoolean(false);
+            agvWaitPakinList.forEach(agvWaitPakin -> {
+                factory.set(OrderUtils.getFactory(agvWaitPakin.getThreeCode()));
+                if (!Cools.isEmpty(agvWaitPakin.getProcessSts())) {
+                    if (agvWaitPakin.getProcessSts() == 1) {
+                        isCurrLev.set(true);
+                    }
+                }
+            });
+
+
+//            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks"));
+//            if (Cools.isEmpty(config)) {
+//                if (isCurrLev.get()) {
+//                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+//                } else {
+//                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
+//                }
+//            } else {
+//                List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1"));
+//                if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) {
+//                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+//                } else {
+//                    if (isCurrLev.get()) {
+//                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+//                    } else {
+//                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
+//                    }
+//                    //agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
+//                }
+//            }
+            agvLocMast = agvCommonService.getLocByLocRule(3, 1, code);
+
+
+            String devNo = agvBasDevp.getDevNo();
+            String locNo = agvLocMast.getLocNo();
+            String ctnNo = null;
+            // 鎵撴爣璁帮紝鑻ュ簱浣嶄笉澶燂紝鍏ュ簱鍒板埆鐨勬ゼ灞傦紝閭d箞闇�瑕佽法灞傜Щ搴�
+            if (!Cools.isEmpty(code)) {
+                if (agvLocMast.getLev1() == 1 && !code.equals(AsrsConstants.SANCHANG)) {
+                    ctnNo = "1";
+                } else if (agvLocMast.getLev1() == 2 && !code.equals(AsrsConstants.ERCHANG)) {
+                    ctnNo = "1";
+                }
+            }
+            //鐢熸垚宸ヤ綔妗�
+            AgvWrkMast wrkMast = createWrkMastV2(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType(), ctnNo);
             //鐢熸垚宸ヤ綔妗f槑缁�
             long flowId = snowflakeIdWorker.nextId();
             agvWaitPakinList.forEach(wp -> {
@@ -628,6 +789,9 @@
 
         // 绔欑偣妫�娴�
         AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
+        if (Cools.isEmpty(agvBasDevp)) {
+            throw new CoolException("绔欑偣淇℃伅涓嶅瓨鍦�");
+        }
         if (!agvBasDevp.getLocSts().equals("O")) {
             throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts() + ",鏃犳硶杩涜绌烘澘鍑哄簱");
         }
@@ -637,7 +801,11 @@
         }
 
         //瀵绘壘鐩稿簲绫诲瀷鐨勭┖璐ф灦
-        AgvLocMast agvLocMast = agvLocMastService.selectEmptyZpallet(containerType, agvBasDevp.getFloor());
+        Integer floor = agvBasDevp.getFloor();
+        if (floor == 4) {
+            floor = 1;
+        }
+        AgvLocMast agvLocMast = agvLocMastService.selectEmptyZpallet(containerType, floor);
         if (containerType == 0) {
             //绌烘澘鑷姩鍑哄簱锛屾牴鎹珯鐐圭被鍨嬮�夋嫨
             agvLocMastService.selectEmptyZpalletByLocType1(agvBasDevp.getLocType1());
@@ -1042,9 +1210,11 @@
                 // 鏇存柊璁㈠崟
                 for (AgvLocDetl agvLocDetl : agvLocDetls) {
                     OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code", agvLocDetl.getThreeCode()));
-                    orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme());
-                    if (!orderDetlService.update(orderDetl, new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code", agvLocDetl.getThreeCode()))) {
-                        throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�" + agvLocDetl.getOrderNo() + agvLocDetl.getMatnr());
+                    if (orderDetl != null) {
+                        orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme());
+                        if (!orderDetlService.update(orderDetl, new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code", agvLocDetl.getThreeCode()))) {
+                            throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�" + agvLocDetl.getOrderNo() + agvLocDetl.getMatnr());
+                        }
                     }
 //                    FlowLog flowLog = new FlowLog();
 //                    flowLog.setFid(String.valueOf(flowId));
@@ -1339,6 +1509,7 @@
         wrkMast.setPltType(pltType);
         wrkMast.setLogErrMemo("createWaitPainWrkMastStart");
 
+
         if (!agvWrkMastService.insertByIncrease(wrkMast)) {
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
         }
@@ -1351,6 +1522,53 @@
         return wrkMast;
     }
 
+    /*
+   鐢熸垚宸ヤ綔妗�
+    */
+    private AgvWrkMast createWrkMastV2(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId, int containerType, Integer pltType, String ctnNo) {
+        AgvWrkMast wrkMast = new AgvWrkMast();
+        //宸ヤ綔鐘舵��
+        wrkMast.setWrkSts(wrkSts);
+        //鍏ュ嚭搴撶被鍨�
+        wrkMast.setIoType(ioType);
+        wrkMast.setIoTime(now);
+        //浼樺厛绾�
+        wrkMast.setIoPri(300.0);
+        //婧愮珯鐐�
+        wrkMast.setSourceLocNo(sourceLocNo);
+        //鐩爣绔欑偣
+        wrkMast.setLocNo(locNo);
+        //璐ф灦缂栫爜
+        wrkMast.setBarcode(barcode);
+        //璐ф灦绫诲瀷
+        wrkMast.setWhsType(containerType);
+
+        wrkMast.setAppeUser(userId);
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(now);
+        if (!Cools.isEmpty(locNo) && Cools.isEmpty(pltType)) {
+            AgvLocMast agvLocMast = agvLocMastService.selectById(locNo);
+            pltType = agvLocMast.getPltType();
+        }
+        wrkMast.setPltType(pltType);
+        wrkMast.setLogErrMemo("createWaitPainWrkMastStart");
+        wrkMast.setCtnNo(ctnNo);
+
+
+        if (!agvWrkMastService.insertByIncrease(wrkMast)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        //鏆傚瓨浣嶄换鍔�+1
+        addInQty(locNo);
+
+        wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no", sourceLocNo));
+
+        return wrkMast;
+    }
+
+
     private boolean isPakOut(String locNo, TaskDto taskDto) {
         Double allAnfme = agvLocDetlService.selectSumAnfmeByLocNo(locNo);
         Double pakOutAnfme = 0.0;

--
Gitblit v1.9.1