From e58e9ba5347a681cd535115c1f83e4788f39a224 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期五, 12 九月 2025 15:09:09 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java |  243 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 238 insertions(+), 5 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 042a645..c58412d 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -1,12 +1,19 @@
 package com.zy.asrs.task.handler;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.GwmsGenerateInventoryDto;
+import com.zy.asrs.mapper.LocDetlMapper;
 import com.zy.asrs.mapper.OrderDetlMapper;
+import com.zy.asrs.mapper.OrderMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
+import com.zy.common.constant.MesConstant;
+import com.zy.common.utils.HttpHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -14,8 +21,8 @@
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Created by vincent on 2020/7/4
@@ -39,6 +46,15 @@
     private OrderDetlService orderDetlService;
     @Resource
     private OrderDetlMapper orderDetlMapper;
+
+    @Resource
+    private LocDetlMapper locDetlMapper;
+
+    @Resource
+    private ApiLogService apiLogService;
+
+    @Resource
+    private OrderMapper orderMapper;
     public ReturnT<String> start(WrkMast wrkMast) {
         // 4.鍏ュ簱瀹屾垚
         if (wrkMast.getWrkSts() == 4) {
@@ -54,7 +70,7 @@
         Date now = new Date();
         LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
         try {
-            if (null == locMast) {
+            if (null == locMast && wrkMast.getIoType() != 3) {
 //                exceptionHandle("宸ヤ綔妗workNo={0}]搴撲綅鍙烽敊璇痆locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return FAIL.setMsg("宸ヤ綔妗workNo=" + wrkMast.getWrkNo() + "]搴撲綅鍙烽敊璇痆locNo=" + wrkMast.getLocNo() + "]");
@@ -107,10 +123,11 @@
                             locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
                             locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
-                            locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
+                            locDetl.setZpallet(wrkMast.getBarcode()); // 鎵樼洏鏉$爜
+                            locDetl.setBarcode(wrkMast.getBarcode());
                             locDetl.setModiTime(now);
                             locDetl.setAppeTime(now);
-                            locDetl.setBatch("");
+//                            locDetl.setBatch("");
                             if (!locDetlService.insert(locDetl)) {
 //                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -149,6 +166,8 @@
                             return FAIL.setMsg("鍏ㄦ澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
+                    // 鍏ュ簱瀹屾垚涓婃姤mes
+                    inBoundCompletePushMes(wrkMast,wrkDetls);
                     break;
                 // 鎷f枡鍏ュ簱
                 case 53:
@@ -193,6 +212,10 @@
 //                        } catch (Exception ignore){}
 
                     }
+
+                    // 淇敼鎹℃枡鍏ュ簱鐨勫簱瀛樻槑缁嗙殑鐞嗚揣鐘舵�佷负寰呯悊璐�
+                    locDetlMapper.updateLhStsByLocNo(wrkMast.getLocNo(),0);
+
                     // 淇敼搴撲綅鐘舵�� Q ====>> F
                     if (locMast.getLocSts().equals("Q")) {
                         locMast.setLocSts("F");
@@ -313,6 +336,26 @@
                             return FAIL.setMsg("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
+                    // 澶囪揣锛屾洿鏂拌鍗曟槑缁嗗強璁㈠崟鐘舵��
+                    List<WrkDetl> wrkDetlList = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (!wrkDetlList.isEmpty()) {
+                        List<String> brands = wrkDetlList.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList());
+                        // 鏌ヨ璁㈠崟鏄庣粏
+                        List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("brand", brands));
+                        if (!orderDetlList.isEmpty()) {
+                            // 鏇存柊鏄庣粏涓哄凡澶囪揣
+                            orderDetlMapper.updateOrderDetlStatusByPackageNo(brands,2);
+                            // 鑾峰彇璁㈠崟鍙�
+                            String orderNo = orderDetlList.get(0).getOrderNo();
+                            // 鍒ゆ柇璇ヨ鍗曟槑缁嗘槸鍚﹀叏閮ㄥ凡澶囪揣
+                            Integer selectCount = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().eq("order_no", orderNo).ne("inspect", 2));
+                            if (selectCount == 0) {
+                                // 鏇存柊璁㈠崟涓哄璐у畬鎴�
+                                orderMapper.updateStatusByOrderNo(orderNo,2,29);
+                            }
+                        }
+                    }
+
                     // 淇敼婧愬簱浣嶇姸鎬� ==> O
                     LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
                     if (null != sourceLoc) {
@@ -339,6 +382,108 @@
                         return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                     }
                     break;
+                // 璺ㄥ贩閬撳簱浣嶇Щ杞畬鎴�
+                case 12:
+                    // 榛樿鐩爣搴撲綅鏄┖鏉�
+                    String locSts2 = "D";
+                    // 搴撲綅绉昏浆鍒ゆ柇鏄惁涓虹┖鏉跨Щ杞�
+                    if (wrkMast.getEmptyMk().equals("N")) {
+                        locSts2 = "F";
+                        // 杞Щ搴撳瓨鏄庣粏鏁版嵁: 搴撳瓨鍙� 鐢卞伐浣滄。婧愬簱浣嶅彉涓虹洰鏍囧簱浣�
+                        if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
+//                            exceptionHandle("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触锛沎婧愬簱浣�={0}],[鐩爣搴撲綅={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                        }
+                    }
+                    // 璺ㄥ贩閬撶Щ搴擄紝鏇存柊璁㈠崟鏄庣粏鍙婅鍗曠姸鎬�
+                    List<WrkDetl> wrkDetlList2 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (!wrkDetlList2.isEmpty()) {
+                        // 鍒ゆ柇鏈夋棤鍗曟嵁缂栧彿
+                        Optional<WrkDetl> any = wrkDetlList2.stream().filter(wrkDetl -> wrkDetl.getOrderNo() != null).findAny();
+                        if (any.isPresent()) {
+                            String orderNo = any.get().getOrderNo();
+                            // 鏍规嵁鍗曟嵁缂栧彿鍜屽簱浣嶅彿鏌ヨ鍗曟嵁鏄庣粏
+                            List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("order_no",orderNo).eq("specs",wrkMast.getSourceLocNo()));
+                            // 鏇存柊鍗曟嵁鏄庣粏鐨勭Щ搴撶姸鎬�
+                            for(OrderDetl orderDetl: orderDetlList) {
+                                orderDetl.setDanger(2);
+                                orderDetl.setUpdateTime(now);
+                                orderDetlMapper.updateById(orderDetl);
+                            }
+                            // 鍒ゆ柇鍗曟嵁鏄庣粏鏄笉鏄叏閮ㄧЩ搴撳畬鎴�
+                            Integer count = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().lt("danger", 2).eq("order_no", orderNo));
+                            if (count == 0) {
+                                // 鏇存柊鍗曟嵁涓哄凡瀹屾垚
+                                // 鐩存帴鏇存柊涓�6宸蹭笂鎶ワ紝鏂逛究杞偍鍘嗗彶
+                                orderMapper.updateSettleByOrderNo(orderNo,6,null);
+                            }
+                        }
+                    } else { // 绌烘澘杞Щ娌℃湁宸ヤ綔鏄庣粏,浣嗘槸瑕佹洿鏂板崟鎹槑缁嗙姸鎬�
+
+                        // 鍙湁涓�鏉′綔涓氫腑鐨勭Щ搴撳崟鎹�
+                        List<Order> orderList = orderMapper.selectList(new EntityWrapper<Order>().eq("doc_type", 24).le("settle", 3));
+                        if(orderList.isEmpty()) {
+                            log.error("娌℃湁鑾峰彇鍒版鍦ㄦ墽琛屼腑鐨勭Щ搴撳崟鎹�");
+                        } else {
+                            Order order = orderList.get(0);
+                            // 鏍规嵁鍗曟嵁缂栧彿鍜屽簱浣嶅彿鏌ヨ鍗曟嵁鏄庣粏
+                            List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("order_no",order.getOrderNo()).eq("specs",wrkMast.getSourceLocNo()));
+                            // 鏇存柊鍗曟嵁鏄庣粏鐨勭Щ搴撶姸鎬�
+                            for(OrderDetl orderDetl: orderDetlList) {
+                                orderDetl.setDanger(2);
+                                orderDetl.setUpdateTime(now);
+                                orderDetlMapper.updateById(orderDetl);
+                            }
+                            // 鍒ゆ柇鍗曟嵁鏄庣粏鏄笉鏄叏閮ㄧЩ搴撳畬鎴�
+                            Integer count = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().lt("danger", 2).eq("order_no", order.getOrderNo()));
+                            if (count == 0) {
+                                // 鏇存柊鍗曟嵁涓哄凡瀹屾垚
+                                orderMapper.updateSettleByOrderNo(order.getOrderNo(),6,null);
+                            }
+                        }
+
+                    }
+
+                    // 淇敼婧愬簱浣嶇姸鎬� ==> O
+                    LocMast sourceLoc2 = locMastService.selectById(wrkMast.getSourceLocNo());
+                    if (null != sourceLoc2) {
+                        sourceLoc2.setBarcode("");
+                        sourceLoc2.setLocSts("O");
+                        sourceLoc2.setSheetNo("0");
+                        sourceLoc2.setModiTime(now);
+                        sourceLoc2.setIoTime(now);
+                        if (!locMastService.updateById(sourceLoc2)) {
+//                            exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                        }
+                    }
+                    // 淇敼鐩爣搴撲綅鐘舵�� ==> .locSts
+                    locMast.setLocSts(locSts2);
+                    locMast.setBarcode(wrkMast.getBarcode());
+                    locMast.setSheetNo("0");
+                    locMast.setIoTime(now);
+                    locMast.setModiTime(now);
+                    if (!locMastService.updateById(locMast)) {
+//                        exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                    }
+                    break;
+                // 绌洪棽鐞嗚揣鍏ュ簱
+                case 59:
+
+                    // 淇敼搴撲綅鐘舵�� S ====>> F
+                    if (locMast.getLocSts().equals("S")) {
+                        locMast.setLocSts("F");
+                        locMast.setModiTime(now);
+                        locMastService.updateById(locMast);
+                    }
+
+                    // 淇敼绌洪棽鐞嗚揣鍏ュ簱鐨勫簱瀛樻槑缁嗙殑鐞嗚揣鐘舵�佷负寰呯悊璐�
+                    locDetlMapper.updateLhStsByLocNo(wrkMast.getLocNo(),0);
+                    break;
                 default:
                     break;
             }
@@ -359,6 +504,94 @@
         return SUCCESS;
     }
 
+    private void inBoundCompletePushMes(WrkMast wrkMast, List<WrkDetl> wrkDetls) {
+        GwmsGenerateInventoryDto gwmsGenerateInventoryDto = new GwmsGenerateInventoryDto();
+        gwmsGenerateInventoryDto.setWarehouseType(4);
+        gwmsGenerateInventoryDto.setBarcode(wrkMast.getBarcode());
+        gwmsGenerateInventoryDto.setPalletizingNo(wrkMast.getStaNo());
+        gwmsGenerateInventoryDto.setGroupOrderNumber(wrkMast.getMemo());
+        List<GwmsGenerateInventoryDto.MatList> matLists = new ArrayList<>();
+        for (WrkDetl wrkDetl : wrkDetls) {
+            boolean flag = true;
+            for (GwmsGenerateInventoryDto.MatList matList : matLists) {
+                if (matList.getPackageGroupNo().equals(wrkDetl.getBrand())) {
+                    matList.getRolls().add(new GwmsGenerateInventoryDto.Rolls(wrkDetl.getModel(),
+                            wrkDetl.getUnit(), wrkDetl.getMaktx(), wrkDetl.getLength(),
+                            Integer.parseInt(wrkDetl.getSpecs()), wrkDetl.getWeight(), wrkDetl.getVolume(),
+                            wrkDetl.getManuDate()));
+                    flag = false;
+                    break;
+                }
+            }
+            if (flag) {
+                GwmsGenerateInventoryDto.MatList matList = new GwmsGenerateInventoryDto.MatList();
+                matList.setBoxPos(wrkDetl.getOrigin());
+                matList.setPackageGroupNo(wrkDetl.getBrand());
+                matList.setOutOrIn("in");
+                matList.setStockType(wrkMast.getWhsType() == 1 ? "杩斾慨鍏ュ簱" : "鎴愬搧鍏ュ簱");
+                matList.setBoxType(wrkDetl.getColor());
+                matList.setRollType(wrkDetl.getManu());
+                matList.setWideInWidth(wrkDetl.getSku());
+                matList.setThickness(wrkDetl.getItemNum());
+                List<GwmsGenerateInventoryDto.Rolls> rollsList = new ArrayList<>();
+                GwmsGenerateInventoryDto.Rolls roll = new GwmsGenerateInventoryDto.Rolls(wrkDetl.getModel(),
+                        wrkDetl.getUnit(), wrkDetl.getMaktx(), wrkDetl.getLength(),
+                        Integer.parseInt(wrkDetl.getSpecs()), wrkDetl.getWeight(), wrkDetl.getVolume(),
+                        wrkDetl.getManuDate());
+                rollsList.add(roll);
+                matList.setRolls(rollsList);
+                matLists.add(matList);
+            }
+        }
+        gwmsGenerateInventoryDto.setMatList(matLists);
+
+
+        boolean success = false;
+        // 鑾峰彇璇锋眰澶�
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json;charset=UTF-8");
+
+        // 鏋勯�犺姹備綋
+        String body = JSON.toJSONString(gwmsGenerateInventoryDto);
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.MES_CC_IP_PORT)
+                    .setPath(MesConstant.MES_CC_FXRK_URL)
+                    .setHeaders(headers)
+                    .setJson(body)
+                    .build()
+                    .doPost();
+            if (!Cools.isEmpty(response)) {
+                JSONObject jsonObject1 = JSONObject.parseObject(response);
+                int code = (int) jsonObject1.get("code");
+                boolean state = jsonObject1.getBoolean("state");
+                if (code == 200 && state) {
+                    success = true;
+                }
+            } else {
+                log.error("鍏ュ簱瀹屾垚鎺ㄩ�乵es澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_FXRK_URL, body, response);
+            }
+        } catch (Exception e) {
+            log.error("鍏ュ簱瀹屾垚鎺ㄩ�乵es寮傚父锛歿}", e.getMessage());
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        "鍏ュ簱瀹屾垚鎺ㄩ�乵es",
+                        MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_FXRK_URL,
+                        null,
+                        "127.0.0.1",
+                        body,
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("", e);
+            }
+        }
+    }
+
     private ReturnT<String> doOut(WrkMast wrkMast){
         Date now = new Date();
         LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());

--
Gitblit v1.9.1