From 0f769b47d8d71bd419ddf1733b0b2f21c82e86b1 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 07 十月 2024 10:33:30 +0800
Subject: [PATCH] 跨巷道移库

---
 src/main/java/com/zy/asrs/task/handler/GhjtHandler.java |  274 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 221 insertions(+), 53 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
index d8243c6..3d61ebe 100644
--- a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
@@ -4,25 +4,24 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
-import com.zy.asrs.entity.Order;
-import com.zy.asrs.entity.WrkDetl;
-import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.mapper.OrderMapper;
-import com.zy.asrs.mapper.WrkMastMapper;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.service.WorkService;
 import com.zy.asrs.service.WrkDetlService;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.constant.MesConstant;
+import com.zy.common.properties.SlaveProperties;
 import com.zy.common.utils.HttpHandler;
+import com.zy.system.entity.Config;
+import com.zy.system.mapper.ConfigMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -45,6 +44,24 @@
 
     @Resource
     private WrkDetlService wrkDetlService;
+
+    @Resource
+    private OrderDetlMapper orderDetlMapper;
+
+    @Resource
+    private LocDetlMapper locDetlMapper;
+
+    @Resource
+    private LocMastMapper locMastMapper;
+
+    @Resource
+    private WorkService workService;
+
+    @Resource
+    private ConfigMapper configMapper;
+
+    @Autowired
+    private SlaveProperties slaveProperties;
 
     @Transactional
     public void startCkrwPushGwcs(WrkMast wrkMast) {
@@ -82,6 +99,9 @@
                 } else if (wrkMast.getIoType() == 3) {
                     // 淇敼宸ヤ綔涓绘。鐘舵��
                     wrkMast.setWrkSts(15L);
+                    wrkMast.setModiTime(new Date());
+                } else if(wrkMast.getIoType() == 12) { // 璺ㄥ贩閬撹浆绉�
+                    wrkMast.setWrkSts(1L); // 鐘舵�佹敼涓�1.鐢熸垚鍏ュ簱id
                     wrkMast.setModiTime(new Date());
                 }
                 wrkMastMapper.updateById(wrkMast);
@@ -155,54 +175,202 @@
         return flag;
     }
 
+    /**
+     * 鑷姩澶囪揣澶勭悊
+     */
     @Transactional
-    public void OutBoundCompleteReport(Order order) {
+    public void autoStockUpHandler(List<String> list,int columnNum) {
 
-        // 鑾峰彇璇锋眰澶�
-        Map<String, Object> headers = new HashMap<>();
-        headers.put("Content-Type", "application/json;charset=UTF-8");
-
-        // 鏋勯�犺姹備綋
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("orderNo", order.getOrderNo());
-        jsonObject.put("complete", 1); // 璁㈠崟瀹屾垚涓�1锛屽叾浠�...
-        String body = jsonObject.toJSONString();
-
-        boolean success = false;
-        String response = "";
-        try {
-            response = new HttpHandler.Builder()
-                    .setUri(MesConstant.URL)
-                    .setPath(MesConstant.PAKIN_URL)
-                    .setHeaders(headers)
-                    .setJson(body)
-                    .build()
-                    .doPost();
-            if (!Cools.isEmpty(response)) {
-                order.setSettle(6L);
-                orderMapper.updateById(order);
-                success = true;
+        // 鏍规嵁鍖呰缁勫彿鑾峰彇鎵�鍦ㄥ簱浣�
+        List<LocDetl> locDetls = locDetlMapper.selectLocNoByGroupNo(list);
+        if (locDetls.isEmpty()) {
+            return;
+        }
+        // 鐩稿悓鍒欏悎骞讹紝涓�涓簱浣嶄袱涓寘瑁呯粍鍙�
+        Map<String,List<String>> map = new HashMap<>();
+        for(LocDetl locDetl : locDetls) {
+            List<String> brand = map.get(locDetl.getLocNo());
+            if (brand == null) {
+                map.put(locDetl.getLocNo(),new ArrayList<String>(){{add(locDetl.getBrand());}});
             } else {
-                log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL + MesConstant.PAKIN_URL, body, response);
-                throw new CoolException("涓嬪彂鍑哄簱浠诲姟缁橤WCS(浠庡嚭搴撶爜澶村埌鍑哄簱鍙�)澶辫触");
-            }
-        } catch (Exception e) {
-            log.error("鍑哄簱璁㈠崟瀹屾垚涓婃姤MES寮傚父锛屽伐浣滃彿锛歿}锛寋}", order.getOrderNo(), e.getMessage());
-        } finally {
-            try {
-                // 淇濆瓨鎺ュ彛鏃ュ織
-                apiLogService.save(
-                        "鍑哄簱璁㈠崟瀹屾垚涓婃姤MES",
-                        MesConstant.URL + MesConstant.PAKIN_URL,
-                        null,
-                        "127.0.0.1",
-                        jsonObject.toJSONString(),
-                        response,
-                        success
-                );
-            } catch (Exception e) {
-                log.error("鎺ュ彛鏃ュ織淇濆瓨寮傚父", e);
+                brand.add(locDetl.getBrand());
+                map.put(locDetl.getLocNo(),brand);
             }
         }
+
+        // 閬嶅巻鍫嗗灈鏈哄苟涓斿垽鏂槸鍚﹀瓨鍦ㄤ换鍔�
+        for (int i = 1; i <= 6; i++) {
+            // 瑕佸璐х殑搴撲綅
+            String sourceLocNo = null;
+            // 澶囪揣鐩爣搴撲綅
+            String staLocNo = null;
+            Integer wrkCount = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", i));
+            if(wrkCount > 0) {
+                log.warn("{}鍙峰爢鍨涙満宸插瓨鍦ㄤ换鍔�",i);
+                continue;
+            }
+            // 鏍规嵁鍫嗗灈鏈哄彿鏌ヨ鍒板搴旂殑娣卞簱浣嶅拰娴呭簱浣�  娣卞簱浣�4*n-3鍜�4*n 娴呭簱浣�4*n-2鍜�4*n-1
+            int s1 = 4*i-3;
+            int s2 = 4*i;
+            int q1 = 4 * i - 2;
+            int q2 = 4 * i -1;
+
+            // 鏍规嵁鍫嗗灈鏈哄彿鑾峰彇涓�涓祬搴撲綅
+            for(String key : map.keySet()) {
+                int row = Integer.parseInt(key.substring(0, 2));
+                if (row == q1 || row == q2) {
+                    sourceLocNo = key;
+                    break;
+                }
+            }
+            // 娴呭簱浣嶆病鏈夊垯鎵句竴涓繁搴撲綅
+            if (sourceLocNo == null) {
+                for(String key : map.keySet()) {
+                    int row = Integer.parseInt(key.substring(0, 2));
+                    if (row == s1 || row == s2) {
+                        sourceLocNo = key;
+                        break;
+                    }
+                }
+            }
+            // 娌℃湁鎵惧埌婧愬簱浣�
+            if (sourceLocNo == null) {
+                log.warn("娌℃湁鎵惧埌婧愬簱浣�,鍫嗗灈鏈猴細{}",i);
+                continue;
+            }
+            // 瀵绘壘涓�涓璐х殑鐩爣搴撲綅锛屽厛娣卞悗娴�
+            List<LocMast> locMasts1 = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", i).in("row1", s1, s2)
+                    .le("bay1", columnNum));
+            if (locMasts1.isEmpty()) {
+                // 娣卞簱浣嶄负绌轰簡锛屽彇娴呭簱浣�
+                List<LocMast> locMasts2 = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("crn_no", i).in("row1", q1, q2)
+                        .le("bay1", columnNum));
+                if (!locMasts2.isEmpty()) {
+                    staLocNo = locMasts2.get(0).getLocNo();
+                }
+            } else {
+                staLocNo = locMasts1.get(0).getLocNo();
+            }
+
+            if(staLocNo == null) {
+                log.warn("{}鍙峰爢鍨涙満澶囪揣鍖烘弧浜�",i);
+                continue;
+            }
+
+            // 澶囪揣鐨勬簮搴撲綅锛岀洰鏍囧簱浣嶉兘鑾峰彇鍒颁簡,鐢熸垚绉诲簱浠诲姟
+            workService.locMove(sourceLocNo,staLocNo,29L);
+
+            // 璁㈠崟鏄庣粏鏀规垚澶囪揣涓紝鍦ㄤ换鍔″畬鎴愭椂鍊欐敼鎴愬璐у畬鎴愶紝骞跺垽鏂暣涓鍗曟槸鍚﹀畬鎴�
+            orderDetlMapper.updateOrderDetlStatusByPackageNo(map.get(sourceLocNo), 1);
+
+            // 绉婚櫎宸茬敓鎴愬璐у簱浣�
+            map.remove(sourceLocNo);
+        }
+
     }
+
+    @Transactional
+    public void autoMoveLoc(List<OrderDetl> orderDetlList) {
+
+        // 鍒ゆ柇鏄惁宸茬粡鏈夋墽琛岀殑绉诲簱浠诲姟
+        Integer count = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().in("io_type", 11, 12));
+        if (count > 0) {
+            return;
+        }
+
+        OrderDetl detl = null; // 瑕佺Щ搴撶殑鏄庣粏
+        String staLoc = null; // 绉诲簱鐩爣搴撲綅
+
+        // 浠庡緟绉诲簱浣嶅垪琛ㄤ腑鍏堟祬鍚庢繁鑾峰彇涓�涓緟绉诲簱浣�
+        Optional<OrderDetl> any = orderDetlList.stream().filter(orderDetl -> Utils.isShallowLoc(slaveProperties,orderDetl.getSpecs())).findAny();
+
+        if (any.isPresent()){
+            detl = any.get();
+        }
+        // 鍓╀笅鐨勫簲璇ラ兘鏄繁搴撲綅锛岃幏鍙栫涓�涓�
+        if (detl == null) {
+            detl = orderDetlList.get(0);
+            // 瀵瑰簲娴呭簱浣嶆湁璐э紝鍦ㄥ爢鍨涙満鍑哄簱鐨勬椂鍊欎細妫�娴嬪埌锛屽湪閭i噷鐢熸垚绉诲簱浠诲姟
+        }
+
+        // 鑾峰彇澶囪揣鍖洪厤缃�
+        Config config = configMapper.selectConfigByCode("auto_stock_up");
+        if (config == null) {
+            return;
+        }
+        // 澶囪揣鍙栨槸鍓嶅嚑鍒�
+        int bay1 = Integer.parseInt(config.getValue());
+        // 鎸囧畾鐨勭洰鏍囧簱浣�
+        String model = detl.getModel();
+
+        // 鎸囧畾鐩爣搴撲綅
+        if (!Cools.isEmpty(model)) {
+            // 鐩爣搴撲綅鏄繁搴撲綅
+            if (Utils.isDeepLoc(slaveProperties,model)) {
+                // 鐩爣搴撲綅
+                LocMast locMast2 = locMastMapper.selectById(model);
+                if (locMast2 == null || !locMast2.getLocSts().equals("O")) {
+                    log.error("鎸囧畾鐨勭洰鏍囧簱浣嶃�恵}銆戠姸涓嶄负绌�", model);
+                    return;
+                }
+                // 鑾峰彇鍒板搴旀祬搴撲綅
+                String shallowLoc = Utils.getShallowLoc(slaveProperties, model);
+                LocMast locMast = locMastMapper.selectById(shallowLoc);
+                // 娴呭簱浣嶆湁璐�
+                if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) {
+                    log.error("閫夋嫨鐨勬繁搴撲綅銆恵}銆戯紝浣嗘槸娴呭簱浣嶃�恵}銆戞湁璐�", model, locMast.getLocNo());
+                    return;
+                }
+                // 閬垮紑澶囪揣鍖�
+                if (Utils.getBay(model) <= bay1) {
+                    log.error("鎸囧畾鐨勭洰鏍囧簱浣嶃�恵}銆戝湪澶囪揣鍖猴紝涓嶈兘杞Щ", model);
+                    return;
+                }
+            }
+            // 娣卞簱浣嶆娴嬮�氳繃锛屾垨鑰呮槸娴呭簱浣�
+            staLoc = model;
+        } else if ( detl.getBeBatch() != null) { // 鎸囧畾鐩爣宸烽亾
+            // 鐩爣宸烽亾
+            Integer beBatch = detl.getBeBatch();
+            // 浠庡贩閬撻噷闈㈠厛娣卞悗娴呭彇涓�涓┖搴撲綅锛屼笉瑕佸崰鐢ㄥ璐у尯
+            List<LocMast> locMasts = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("crn_no", beBatch).eq("loc_sts", "O").gt("bay1", bay1));
+            if (locMasts.isEmpty()) {
+                log.error("鎸囧畾宸烽亾銆恵}銆戞病鏈夎兘绉诲簱鐨勭┖搴撲綅浜�",beBatch);
+                return;
+            }
+            // 鍏堣繃婊ゅ嚭娣卞簱浣�
+            Optional<LocMast> a = locMasts.stream().filter(locMast -> Utils.isDeepLoc(slaveProperties,locMast.getLocNo())).findAny();
+            if (a.isPresent()){
+                staLoc = a.get().getLocNo();
+                // 鑾峰彇鍒板搴旀祬搴撲綅
+                String shallowLoc = Utils.getShallowLoc(slaveProperties, staLoc);
+                LocMast locMast = locMastMapper.selectById(shallowLoc);
+                // 娴呭簱浣嶆湁璐�
+                if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) {
+                    log.error("鎸囧畾鐨勭洰鏍囧贩閬撴繁搴撲綅銆恵}銆戯紝浣嗘槸娴呭簱浣嶃�恵}銆戞湁璐�",staLoc,locMast.getLocNo());
+                    return;
+                }
+            }
+            // 娣卞簱浣嶆病鏈夊垯鍙栨祬搴撲綅
+            if (staLoc == null) {
+                staLoc = locMasts.get(0).getLocNo();
+            }
+        } else {
+            log.error("鐩爣搴撲綅鎴栫洰鏍囧贩閬撴湁璇細{}",detl);
+            return;
+        }
+
+        // 鐢熸垚璺ㄥ贩閬撶Щ搴撲换鍔�
+        workService.autoLocMove(detl.getOrderNo(),detl.getSpecs(),staLoc,29L);
+
+        // 鏇存柊鍗曟嵁鏄庣粏绉诲簱鐘舵�佷负绉诲簱涓�
+        detl.setDanger(1);
+        if (detl.getBeBatch() != null) {
+            detl.setModel(staLoc); // 琛ュ厖鐩爣搴撲綅
+        }
+        orderDetlMapper.updateById(detl);
+        // 鏇存柊鍗曟嵁鐘舵�佷负2澶勭悊涓�
+        orderMapper.updatePendingSettleByOrderNo(detl.getOrderNo(),2L);
+    }
+
 }

--
Gitblit v1.9.1