From 4dca5d65e2518f019ce25c805827211e0509598f Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期二, 25 二月 2025 14:06:33 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java |  167 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 143 insertions(+), 24 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
index c8aba41..ececff1 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
@@ -4,6 +4,7 @@
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
+import com.zy.asrs.constant.AsrsConstants;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.*;
 import com.zy.asrs.service.*;
@@ -17,10 +18,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -92,6 +90,17 @@
         if (!Cools.isEmpty(agvWrkMastService.selectByContainerCode(param.getBarcode()))) {
             throw new CoolException(param.getBarcode() + "璐ф灦鐮佸凡瀛樺湪AGV宸ヤ綔妗d腑");
         }
+        //鍒ゆ柇鏄惁鏈夌浉鍚屾槑缁�
+        List<CombParam.CombMat> combMats = param.getCombMats();
+        Map<String, String> data = new HashMap<>();
+        for (CombParam.CombMat combMat : combMats) {
+            String matnr = combMat.getMatnr();
+            String csocode = combMat.getCsocode();
+            if (data.get(matnr + csocode) != null) {
+                throw new CoolException("鏄庣粏涓瓨鍦ㄧ浉鍚岀墿鏂欏彿鍜岃鍗曞彿");
+            }
+            data.put(matnr + csocode, matnr + csocode);
+        }
 
         if (Cools.isEmpty(param.getOrderNo())) {
             //鏃犲崟缁勬墭
@@ -131,23 +140,23 @@
             AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("matnr", pick.getMatnr()).eq("three_code", pick.getThreeCode()).eq("supp_code", pick.getSuppCode()));
 
             if (Cools.isEmpty(agvWrkDetl)) {
-                AgvWrkDetl wrkDetl = new AgvWrkDetl();
+                agvWrkDetl = new AgvWrkDetl();
                 Mat mat = matService.selectByMatnr(pick.getMatnr());
                 if (Cools.isEmpty(mat)) {
                     throw new CoolException(pick.getMatnr() + "鍟嗗搧涓嶅瓨鍦�");
                 }
-                wrkDetl.sync(mat);
-                wrkDetl.setWrkNo(pickParams.getWrkNo());
-                wrkDetl.setOrderNo(pick.getOrderNo());
-                wrkDetl.setIoTime(agvWrkMast.getIoTime());
-                wrkDetl.setAnfme(pick.getCount()); // 鏁伴噺
-                wrkDetl.setSuppCode(pick.getSuppCode()); // 璐ф灦鏉$爜
-                wrkDetl.setAppeUser(userId);
-                wrkDetl.setAppeTime(now);
-                wrkDetl.setModiUser(userId);
-                wrkDetl.setModiTime(now);
-                wrkDetl.setThreeCode(pick.getThreeCode());
-                agvWrkDetlService.insert(wrkDetl);
+                agvWrkDetl.sync(mat);
+                agvWrkDetl.setWrkNo(pickParams.getWrkNo());
+                agvWrkDetl.setOrderNo(pick.getOrderNo());
+                agvWrkDetl.setIoTime(agvWrkMast.getIoTime());
+                agvWrkDetl.setAnfme(pick.getCount()); // 鏁伴噺
+                agvWrkDetl.setSuppCode(pick.getSuppCode()); // 璐ф灦鏉$爜
+                agvWrkDetl.setAppeUser(userId);
+                agvWrkDetl.setAppeTime(now);
+                agvWrkDetl.setModiUser(userId);
+                agvWrkDetl.setModiTime(now);
+                agvWrkDetl.setThreeCode(pick.getThreeCode());
+                agvWrkDetlService.insert(agvWrkDetl);
             } else {
                 Double anfme = agvWrkDetl.getAnfme() + pick.getCount();
                 agvWrkDetl.setIoTime(agvWrkMast.getIoTime());
@@ -164,11 +173,14 @@
                 if (agvLocDetl.getAnfme() < agvWrkDetl.getAnfme()) {
                     throw new CoolException("鎷f枡鏁伴噺涓嶈兘澶т簬搴撳瓨鏁伴噺");
                 }
+            } else {
+                throw new CoolException("鎷f枡鏁伴噺涓嶈兘澶т簬搴撳瓨鏁伴噺,瀛樺簱涓嶅瓨鍦�");
             }
 
             // 鏇存柊璁㈠崟
             OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", pick.getOrderNo()).eq("matnr", pick.getMatnr()).eq("three_code", pick.getThreeCode()));
             orderDetl.setQty(orderDetl.getQty() + pick.getCount());
+            orderDetl.setUpdateTime(new Date());
             if (!orderDetlService.update(orderDetl, new EntityWrapper<OrderDetl>().eq("order_no", pick.getOrderNo()).eq("matnr", pick.getMatnr()).eq("three_code", pick.getThreeCode()))) {
                 throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�" + pick.getOrderNo() + pick.getMatnr());
             }
@@ -343,6 +355,10 @@
 
         AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no", stationCode));
 
+        if (agvBasDevp == null) {
+            throw new CoolException(stationCode + "绔欑偣淇℃伅閿欒");
+        }
+
         if (Cools.eq(agvBasDevp.getBarcode(), barcode)) {
             return;
         }
@@ -357,9 +373,7 @@
             throw new CoolException(barcode + "宸茬粡缁戝畾鍦�" + agvBasDevp.getDevNo() + "绔欑偣");
         }
 
-        if (agvBasDevp == null) {
-            throw new CoolException(stationCode + "绔欑偣淇℃伅閿欒");
-        }
+
         if (!"O".equals(agvBasDevp.getLocSts())) {
             throw new CoolException(stationCode + "璇ョ珯鐐硅揣浣嶇姸鎬侀潪绌�");
         }
@@ -641,6 +655,9 @@
     @Transactional
     public String allocationIn(AgvMobileStartPakin param, Long userId) {
         Date now = new Date();
+        if (Cools.isEmpty(param.getBarcode())) {
+            throw new CoolException("璇疯緭鍏ヨ揣鏋剁爜");
+        }
         AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode", param.getBarcode()));
         if (Cools.isEmpty(agvWrkMast)) {
             throw new CoolException("鏆傛棤褰撳墠璐ф灦鐮佺殑浠诲姟");
@@ -689,6 +706,9 @@
             throw new CoolException("璇疯緭鍏ヨ揣鏋剁爜");
         }
         AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", param.getDevNo()));
+        if (agvWrkMast == null) {
+            throw new CoolException("褰撳墠璐ф灦鐮佹病鏈変换鍔�");
+        }
         Integer oldWrkNo = agvWrkMast.getWrkNo();
         if (Cools.isEmpty(agvWrkMast)) {
             throw new CoolException("宸ヤ綔妗d腑娌℃湁姝ょ珯鐐逛换鍔�");
@@ -715,6 +735,9 @@
     @Synchronized
     public String empIn(AgvMobileStartPakin param, Long userId) {
         Date now = new Date();
+        if (Cools.isEmpty(param.getBarcode())) {
+            throw new CoolException("璇疯緭鍏ヨ揣鏋剁爜");
+        }
         AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode", param.getBarcode()));
         if (Cools.isEmpty(agvWrkMast)) {
             throw new CoolException("宸ヤ綔妗d腑娌℃湁姝ょ珯鐐逛换鍔�");
@@ -744,6 +767,9 @@
     public String handBack(AgvMobileStartPakin param, Long userId) {
         Date now = new Date();
         AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", param.getDevNo()));
+        if (agvWrkMast == null) {
+            throw new CoolException("宸ヤ綔妗d腑娌℃湁姝ょ珯鐐逛换鍔�");
+        }
         agvWrkMast.setIoType(113);
         agvWrkMast.setModiUser(userId);
         agvWrkMast.setModiTime(now);
@@ -772,6 +798,10 @@
         agvWrkDetlLogService.save(agvWrkMast.getWrkNo());
         String sourceLocNo = agvWrkMast.getSourceLocNo();
         AgvLocMast newLocMast = agvCommonService.getLocNo(3, 1, false, false);
+        List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code", param.getBarcode()));
+        if (newLocMast == null) {
+            throw new CoolException("鏃犲彲鐢ㄥ簱浣�");
+        }
         agvWrkMast.setSourceLocNo(agvWrkMast.getLocNo());
         agvWrkMast.setLocNo(newLocMast.getLocNo());
         agvWrkMast.setIoType(57);
@@ -791,7 +821,6 @@
         agvLocMastService.updateLocStsByLocNo(sourceLocNo, "O", "", (short) 30);
         agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocNo));
 
-        List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code", param.getBarcode()));
         agvWrkDetls.forEach(agvWrkDetl -> {
             for (AgvWrkDetl wrkDetl : param.getWrkDetls()) {
                 if (wrkDetl.getMatnr().equals(agvWrkDetl.getMatnr()) && wrkDetl.getThreeCode().equals(agvWrkDetl.getThreeCode())) {
@@ -814,6 +843,77 @@
         return "ok";
     }
 
+    /*
+     * 纭鍔犲伐瀹屾垚
+     */
+    @Override
+    @Transactional
+    public String processedV2(AgvMobileStartPakin param, Long userId) {
+        Date now = new Date();
+        AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode", param.getBarcode()).eq("loc_no", param.getDevNo()));
+        if (Cools.isEmpty(agvWrkMast)) {
+            throw new CoolException("鏆傛棤褰撳墠璐ф灦鐨勫伐浣滄。");
+        }
+        if (agvWrkMast.getWrkSts() != 205) {
+            throw new CoolException("褰撳墠浠诲姟鏈畬鎴愶紝璇风‘璁�");
+        }
+        //鐢熸垚AGV宸ヤ綔鍘嗗彶妗� + 鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗�
+        agvWrkMastLogService.save(agvWrkMast);
+        agvWrkDetlLogService.save(agvWrkMast.getWrkNo());
+        String sourceLocNo = agvWrkMast.getSourceLocNo();
+        // TODO: 鍥涙湡
+        List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("supp_code", param.getBarcode()));
+        String factory = param.getFactory();
+        AgvLocMast newLocMast = agvCommonService.getLocByLocRule(3, 1, factory);
+        if (newLocMast == null) {
+            throw new CoolException("鏃犲彲鐢ㄥ簱浣�");
+        }
+        agvWrkMast.setSourceLocNo(agvWrkMast.getLocNo());
+        agvWrkMast.setLocNo(newLocMast.getLocNo());
+        agvWrkMast.setIoType(57);
+        agvWrkMast.setWrkSts(201L);
+        agvWrkMast.setModiUser(userId);
+        agvWrkMast.setModiTime(now);
+        agvWrkMast.setIoTime(now);
+        // 鎵撴爣璁帮紝鑻ュ簱浣嶄笉澶燂紝鍏ュ簱鍒板埆鐨勬ゼ灞傦紝閭d箞闇�瑕佽法灞傜Щ搴�
+        if (!Cools.isEmpty(factory)) {
+            if (newLocMast.getLev1() == 1 && !factory.equals(AsrsConstants.SANCHANG)) {
+                agvWrkMast.setCtnNo("1");
+            } else if (newLocMast.getLev1() == 2 && !factory.equals(AsrsConstants.ERCHANG)) {
+                agvWrkMast.setCtnNo("2");
+            }
+        }
+        if (!agvWrkMastService.update(agvWrkMast, new EntityWrapper<AgvWrkMast>().eq("wrk_no", agvWrkMast.getWrkNo()))) {
+            throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+        }
+
+        // 鏇存柊婧愮珯鐐� + 鐩爣搴撲綅鐘舵�� + 鍘嗗彶婧愬簱浣�
+        agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(), "R", param.getBarcode(), agvWrkMast.getWhsType().shortValue());
+        agvLocMastService.updateLocStsByLocNo(newLocMast.getLocNo(), "S", agvWrkMast.getBarcode(), agvWrkMast.getWhsType().shortValue());
+        agvLocMastService.updateLocStsByLocNo(sourceLocNo, "O", "", (short) 30);
+        agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocNo));
+
+        agvWrkDetls.forEach(agvWrkDetl -> {
+            for (AgvWrkDetl wrkDetl : param.getWrkDetls()) {
+                if (wrkDetl.getMatnr().equals(agvWrkDetl.getMatnr()) && wrkDetl.getThreeCode().equals(agvWrkDetl.getThreeCode())) {
+                    agvWrkDetl.setAnfme(wrkDetl.getAnfme());
+                    break;
+                }
+            }
+            agvWrkDetl.setProcessSts(2);
+            agvWrkDetl.setOrderNo(agvWrkDetl.getOrderNo().substring(2));
+            agvWrkDetl.setModiUser(userId);
+            agvWrkDetl.setModiTime(now);
+            agvWrkDetl.setIoTime(now);
+            if (!agvWrkDetlService.update(agvWrkDetl, new EntityWrapper<AgvWrkDetl>()
+                    .eq("matnr", agvWrkDetl.getMatnr())
+                    .eq("three_code", agvWrkDetl.getThreeCode())
+                    .eq("supp_code", param.getBarcode()))) {
+                throw new CoolException("鏇存柊宸ヤ綔鏄庣粏澶辫触");
+            }
+        });
+        return "ok";
+    }
 
     /*
      * 绔欑偣鍥為��
@@ -858,9 +958,28 @@
                 throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
             }
             // 鍚屾璁㈠崟鏁伴噺
-            OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("matnr", agvWrkDetl.getMatnr()).eq("three_code", agvWrkDetl.getThreeCode()).eq("order_no", agvWrkDetl.getOrderNo()).in("source", 18, 31, 34));
-            orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme());
-            if (!orderDetlService.update(orderDetl, new EntityWrapper<OrderDetl>().eq("order_no", orderDetl.getOrderNo()).eq("matnr", orderDetl.getMatnr()).eq("three_code", orderDetl.getThreeCode()))) {
+            //OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("matnr", agvWrkDetl.getMatnr()).eq("three_code", agvWrkDetl.getThreeCode()).eq("order_no", agvWrkDetl.getOrderNo()).in("source", 18, 31, 34));
+            List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("matnr", agvWrkDetl.getMatnr()).eq("three_code", agvWrkDetl.getThreeCode()).eq("order_no", agvWrkDetl.getOrderNo()));
+            OrderDetl orderDetl = null;
+            if (orderDetls.isEmpty()) {
+                throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+            } else if (orderDetls.size() > 1) {
+                for (OrderDetl detl : orderDetls) {
+                    if (Cools.isEmpty(agvWrkDetl.getBatch()) && Cools.isEmpty(detl.getBatch())) {
+                        orderDetl = detl;
+                    } else if (!Cools.isEmpty(agvWrkDetl.getBatch()) && !Cools.isEmpty(detl.getBatch()) && agvWrkDetl.getBatch().equals(detl.getBatch())) {
+                        orderDetl = detl;
+                    }
+                }
+                if (orderDetl == null) {
+                    throw new CoolException("璁㈠崟鏄庣粏涓嶅尮閰�");
+                }
+            } else {
+                orderDetl = orderDetls.get(0);
+            }
+            double v = orderDetl.getQty() - agvWrkDetl.getAnfme();
+            orderDetl.setQty(v < 0 ? 0 : v);
+            if (!orderDetlService.updateById(orderDetl)) {
                 throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�" + orderDetl.getOrderNo() + orderDetl.getMatnr());
             }
         }

--
Gitblit v1.9.1