From 7a2ce679e71f8ca970b48a65f08061412bbfe4a9 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期一, 25 三月 2024 16:49:54 +0800
Subject: [PATCH] #导入库位覆盖

---
 src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java |  209 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 182 insertions(+), 27 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
index a0c3d12..0134534 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -1,41 +1,55 @@
 package com.zy.asrs.task.handler;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.AgvLocDetl;
 import com.zy.asrs.entity.AgvWaitPakin;
 import com.zy.asrs.entity.AgvWrkDetl;
 import com.zy.asrs.entity.AgvWrkMast;
 import com.zy.asrs.service.*;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
+import lombok.Synchronized;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 public class AgvWrkMastHandler extends AbstractHandler<String> {
 
+    @Value("${agvBasDev.maxWorkNum}")
+    private int maxWrokNum;
+
     @Autowired
-    AgvWrkMastService agvWrkMastService;
+    private AgvWrkMastService agvWrkMastService;
     @Autowired
-    AgvLocMastService agvLocMastService;
+    private AgvLocMastService agvLocMastService;
     @Autowired
-    AgvLocDetlService agvLocDetlService;
+    private AgvLocDetlService agvLocDetlService;
     @Autowired
-    AgvWrkMastLogService agvWrkMastLogService;
+    private AgvWrkMastLogService agvWrkMastLogService;
     @Autowired
-    AgvWrkDetlService agvWrkDetlService;
+    private AgvWrkDetlService agvWrkDetlService;
     @Autowired
-    AgvWrkDetlLogService agvWrkDetlLogService;
+    private AgvWrkDetlLogService agvWrkDetlLogService;
     @Autowired
-    AgvWaitPakinService agvWaitPakinService;
+    private AgvWaitPakinService agvWaitPakinService;
     @Autowired
-    AgvWaitPakinLogService agvWaitPakinLogService;
+    private AgvWaitPakinLogService agvWaitPakinLogService;
     @Autowired
-    OrderService orderService;
+    private OrderService orderService;
+    @Autowired
+    private AgvBasDevpService agvBasDevpService;
 
     @Transactional
     public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) {
@@ -43,44 +57,135 @@
         String barcode = agvWrkMast.getBarcode();
         String orderNo = getOrderNoByWrkNo(wrkNo);
 
-        //淇敼宸ヤ綔妗g姸鎬佷负206.搴撳瓨鏇存柊瀹屾垚
-        agvWrkMast.setWrkSts(206L);
+        //淇敼宸ヤ綔妗g姸鎬佷负207.搴撳瓨鏇存柊瀹屾垚
+        agvWrkMast.setWrkSts(207L);
         agvWrkMastService.updateById(agvWrkMast);
-        //淇敼鐩爣搴撲綅鐘舵�佷负F.鍦ㄥ簱
-        agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F");
-        //鏇存柊鐩爣搴撲綅鏄庣粏
-        agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo);
+        if(agvWrkMast.getIoType() == 10){
+            // 绌烘澘鍏ュ簱 璁剧疆搴撲綅鐘舵�佷负D.绌烘《/绌烘爤鏉�
+            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode());
+        }else{
+            //淇敼鐩爣搴撲綅鐘舵�佷负F.鍦ㄥ簱
+            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode());
+        }
         //鐢熸垚AGV宸ヤ綔鍘嗗彶妗�
-        agvWrkMastLogService.save(wrkNo);
+        agvWrkMastLogService.save(agvWrkMast);
         //鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗�
         agvWrkDetlLogService.save(wrkNo);
-        //鐢熸垚鍏ュ簱閫氱煡鍘嗗彶妗�
-        agvWaitPakinLogService.save(barcode);
+        //绫诲瀷涓哄叆搴撴椂
+        if(agvWrkMast.getIoType() == 1){
+            //鏇存柊鐩爣搴撲綅鏄庣粏
+            log.info("鏇存柊鐩爣搴撲綅鏄庣粏 agvWrkMast.getLocNo(): " + agvWrkMast.getLocNo() + ", wrkNo: " + wrkNo);
+            agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo);
+            //鐢熸垚鍏ュ簱閫氱煡鍘嗗彶妗�
+            boolean save = agvWaitPakinLogService.save(barcode);
+            //鍒犻櫎鍏ュ簱閫氱煡妗�
+            log.info("鍒犻櫎鍏ュ簱閫氱煡妗� supp_code: " + barcode);
+            agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",barcode));
+        }
+        //绫诲瀷涓哄簱浣嶇Щ杞椂
+        if(agvWrkMast.getIoType() == 11){
+            //鏇存柊搴撳瓨鏄庣粏
+            agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo());
+            //淇敼婧愬簱浣嶇姸鎬佷负O
+            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","");
+        }
+
         //鍒犻櫎AGV宸ヤ綔妗�
         agvWrkMastService.deleteById(wrkNo);
         //鍒犻櫎AGV宸ヤ綔鏄庣粏妗�
         agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
-        //鍒犻櫎鍏ュ簱閫氱煡妗�
-        agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("zpallet",barcode));
 
-        //妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚
-        orderService.checkComplete(orderNo);
+        if(!isJSON(orderNo)){
+            //妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚
+            orderService.checkComplete(orderNo);
+        }else{
+            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
+            maps.forEach(map -> {
+                String o = map.get("orderNo").toString();
+                orderService.checkComplete(o);
+            });
+        }
 
+        return SUCCESS;
+    }
+
+
+    @Transactional
+    public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) {
+        int wrkNo = agvWrkMast.getWrkNo();
+        String orderNo = getOrderNoByWrkNo(wrkNo);
+        //淇敼宸ヤ綔妗g姸鎬佷负207.搴撳瓨鏇存柊瀹屾垚
+        agvWrkMast.setWrkSts(207L);
+        agvWrkMastService.updateById(agvWrkMast);
+        //淇敼婧愬簱浣嶇姸鎬佷负O
+        agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","");
+        if(agvWrkMast.getIoType() == 101){
+            //鏇存柊鐩爣搴撲綅鏄庣粏 101.鍑哄簱 鍒犻櫎婧愬簱浣嶅簱瀛樻槑缁�
+            agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
+        }
+
+        //鐢熸垚AGV宸ヤ綔鍘嗗彶妗�
+        agvWrkMastLogService.save(agvWrkMast);
+        //鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗�
+        agvWrkDetlLogService.save(wrkNo);
+        //鍒犻櫎AGV宸ヤ綔妗�
+        agvWrkMastService.deleteById(wrkNo);
+        //鍒犻櫎AGV宸ヤ綔鏄庣粏妗�
+        agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
+        if(!isJSON(orderNo)){
+            //妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚
+            orderService.checkComplete(orderNo);
+        }else{
+            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
+            maps.forEach(map -> {
+                String o = map.get("orderNo").toString();
+                orderService.checkComplete(o);
+            });
+        }
         return SUCCESS;
     }
 
     @Transactional
     public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
-        Map<String, List<Map<String, String>>> containerMoveParam = agvWrkMastService.startWrk(agvWrkMastList);
 
-        int code = agvWrkMastService.containerMove(containerMoveParam);
+        //涓嬪彂浠诲姟
+        int startWrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway");
+        if(startWrkCode != 0){
+            throw new CoolException("浠诲姟涓嬪彂澶辫触");
+        }
 
+        //涓嬪彂瀹瑰櫒鍏ュ満鎸囦护 锛堢紦瀛樿揣鏋讹級
+        int code = agvWrkMastService.containerMoveIn(agvWrkMastList);
+
+        if(code == 0){
+            for(AgvWrkMast agvWrkMast : agvWrkMastList){
+                //202.RCS鍙栬揣涓�
+                agvWrkMast.setWrkSts(202L);
+                agvWrkMastService.updateById(agvWrkMast);
+                if(agvWrkMast.getIoType() == 1){
+                    //淇敼AGV鍏ュ簱閫氱煡妗g姸鎬佸叆鍑虹姸鎬佷负Y
+                    agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y");
+                }
+            }
+            return SUCCESS;
+        }
+        return FAIL;
+    }
+
+    @Transactional
+    public ReturnT<String> startCarryWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
+        //log.info(agvWrkMastList.toString());
+        //浠诲姟杩囨护锛岃繃婊ゆ帀宸插瓨鍦ㄧ浉鍚岀洰鏍囧簱浣嶇殑宸ヤ綔妗�
+        //agvWrkMastList = filter(agvWrkMastList);
+        int code = agvWrkMastService.startWrk(agvWrkMastList,"carry");
+        //log.info(agvWrkMastList.toString());
+        if (Cools.isEmpty(agvWrkMastList)){
+            return SUCCESS;
+        }
         if(code == 0){
             agvWrkMastList.forEach(agvWrkMast -> {
                 //202.RCS鍙栬揣涓�
-                agvWrkMast.setWrkSts((long)202);
-                //淇敼AGV鍏ュ簱閫氱煡妗g姸鎬佸叆鍑虹姸鎬佷负Y
-                agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y");
+                agvWrkMast.setWrkSts(202L);
                 agvWrkMastService.updateById(agvWrkMast);
             });
             //agvWrkMastService.updateBatchById(agvWrkMastList);
@@ -91,8 +196,58 @@
         return FAIL;
     }
 
+    @Synchronized
+    @Transactional
+    public ReturnT<String> dealWatiWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
+
+        agvWrkMastList.forEach(agvWrkMast -> {
+            //鏌ヨ璇ョ珯鐐规墍鏈夋殏瀛樹綅鍦ㄥ伐浣滄。涓嚭鐜扮殑娆℃暟
+            List<Map<String, Object>> devNoMaps = agvBasDevpService.selectDevNoAndNumBystationCode(agvWrkMast.getLocNo());
+            //鍙栫涓�涓殏瀛樹綅锛屽苟鏌ヨ鍏舵鏁颁笌閰嶇疆鐨勬鏁板仛姣旇緝
+            Map<String, Object> devNoMap = devNoMaps.get(0);
+            if((int)devNoMap.get("num") < maxWrokNum){
+                agvWrkMast.setLocNo(devNoMap.get("dev_no").toString());
+                agvWrkMastService.updateById(agvWrkMast);
+                log.info("after锛�" + devNoMap.toString()  +  ", wrkNo:" + agvWrkMast.getWrkNo() + ", locNo: " + agvWrkMast.getLocNo());
+            }
+        });
+
+        return SUCCESS;
+    }
+
     private String getOrderNoByWrkNo(int wrkNo){
         AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkNo));
+        if(Cools.isEmpty(agvWrkDetl)){
+            return null;
+        }
         return agvWrkDetl.getOrderNo();
     }
+
+    private boolean isJSON(String str) {
+        if (Cools.isEmpty(str)) {
+            return false;
+        } else {
+            str = str.trim();
+            if (str.startsWith("{") && str.endsWith("}")) {
+                return true;
+            } else if (str.startsWith("[") && str.endsWith("]")) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+    }
+
+    private List<AgvWrkMast> filter(List<AgvWrkMast> agvWrkMastList){
+        return agvWrkMastList.stream().filter(agvWrkMast -> {
+            AgvWrkMast agvWrkMastWroking = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", agvWrkMast.getLocNo()));
+            if(!Cools.isEmpty(agvWrkMastWroking) && agvWrkMastWroking.getWrkSts()<=202){
+                System.out.println("source_loc_no > 1");
+                return false;
+            }
+            log.info(agvWrkMast.toString());
+            int num = agvWrkMastService.selectCount(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvWrkMast.getLocNo()));
+            return num <= maxWrokNum;
+        }).collect(Collectors.toList());
+    }
 }

--
Gitblit v1.9.1