From 2f1b55f10742f94c3362dc3f61333251b713ee61 Mon Sep 17 00:00:00 2001
From: Administrator <335182714>
Date: 星期二, 15 七月 2025 14:46:40 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java |  223 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 178 insertions(+), 45 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index f79844f..0dd0373 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -15,9 +15,7 @@
 import com.zy.asrs.entity.result.StockVo;
 import com.zy.asrs.entity.result.ZphjcdgzVo;
 import com.zy.asrs.entity.result.ZphjcdwcVo;
-import com.zy.asrs.mapper.LocDetlMapper;
-import com.zy.asrs.mapper.MatMapper;
-import com.zy.asrs.mapper.TagMapper;
+import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.MatUtils;
 import com.zy.common.constant.MesConstant;
@@ -37,6 +35,7 @@
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -107,6 +106,12 @@
 
     @Resource
     private ConfigMapper configMapper;
+
+    @Resource
+    private OrderMapper orderMapper;
+
+    @Resource
+    private BasCrnpMapper basCrnpMapper;
 
     @Override
     @Transactional
@@ -1021,29 +1026,27 @@
 
     @Override
     @Transactional
-    public void prodCheck(List<ProdCheckParam> param) {
+    public R prodCheck(List<ProdCheckParam> param) {
         if (param.isEmpty()) {
-            throw new CoolException("璇锋眰鍙傛暟涓嶈兘涓虹┖");
+            return R.parse("璇锋眰鍙傛暟涓嶈兘涓虹┖");
         }
         for (ProdCheckParam checkParam : param) {
             // 鏇存柊搴撳瓨鏄庣粏鏄惁鍚堟牸
-            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("brand", checkParam.getPackageGroupNo())
-                    .eq("unit", checkParam.getBoxNo()).eq("model", checkParam.getRollNo()));
+            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("model", checkParam.getRollNo()));
             // 鏇存柊鍟嗗搧琛ㄦ槸鍚﹀悎鏍�
-            Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("brand", checkParam.getPackageGroupNo())
-                    .eq("unit", checkParam.getBoxNo()).eq("model", checkParam.getRollNo()));
-            if (locDetl == null || mat == null) {
+//            Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("model", checkParam.getRollNo()));
+            if (locDetl == null) { //  || mat == null
                 throw new CoolException("鏇存柊鏄惁鍚堟牸鐗╂枡涓嶅瓨鍦細" + checkParam);
             }
 
             locDetl.setThreeCode(checkParam.getQualified());
-            mat.setThreeCode(checkParam.getQualified());
+//            mat.setThreeCode(checkParam.getQualified());
 
-            locDetlService.update(locDetl,new EntityWrapper<LocDetl>().eq("brand", checkParam.getPackageGroupNo())
-                    .eq("unit", checkParam.getBoxNo()).eq("model", checkParam.getRollNo()));
-            matService.update(mat,(new EntityWrapper<Mat>().eq("brand", checkParam.getPackageGroupNo())
-                    .eq("unit", checkParam.getBoxNo()).eq("model", checkParam.getRollNo())));
+            locDetlService.update(locDetl, new EntityWrapper<LocDetl>().eq("model", checkParam.getRollNo()));
+//            matService.update(mat, (new EntityWrapper<Mat>().eq("model", checkParam.getRollNo())));
         }
+
+        return R.ok("鏇存柊鎴愬姛");
     }
 
     @Override
@@ -1145,6 +1148,13 @@
             basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts",3).eq("in_enable","Y")
                     .eq("out_enable","Y"));
         }
+        WrkMast exist = wrkMastService.selectOne(
+                new EntityWrapper<WrkMast>()
+                        .eq("barcode", param.getBarcode())
+                        .eq("io_type", 3));
+        if (exist != null) {
+            return R.error("浠诲姟宸插瓨鍦紝涓嶅彲閲嶅鎻愪氦");
+        }
         if (basCrnps.isEmpty()) {
             throw new CoolException("娌℃湁鍙敤鍫嗗灈鏈�,鍫嗗灈鏈哄仠姝㈡垨寮傚父鎴栫鐢�");
         }
@@ -1244,6 +1254,7 @@
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
+        wrkMast.setWhsType(iotype == 1 && param.getPalletizingNo() == 2051 ? 1 : 0); // 杩斾慨鍏ュ簱鏍囪
         wrkMast.setIoTime(new Date());
         wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細璁惧涓婅蛋
         wrkMast.setIoType(iotype); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
@@ -1390,7 +1401,7 @@
                 null,    // 鍒濆绁ㄦ嵁鍙�
                 null,    // 绁ㄦ嵁鍙�
                 null,    // 瀹㈡埛缂栧彿
-                null,    // 瀹㈡埛
+                param.getCustomerName(),    // 瀹㈡埛
                 null,    // 鑱旂郴鏂瑰紡
                 null,    // 鎿嶄綔浜哄憳
                 null,    // 鍚堣閲戦
@@ -1413,7 +1424,7 @@
                 now,    // 娣诲姞鏃堕棿
                 9527L,    // 淇敼浜哄憳
                 now,    // 淇敼鏃堕棿
-                null    // 澶囨敞
+                param.getMemo()    // 澶囨敞
         );
 
         if (!orderService.insert(order)) {
@@ -1487,8 +1498,14 @@
             wrkMastService.updateById(wrkMast);
         }
 
-        // 鍑哄簱涓婃姤鎺ㄩ�乵es璁板綍
-        ckjgsbPushMes(wrkMast,wrkDetls);
+        if(!wrkDetls.get(0).getMatnr().equals("绌虹")){
+            // 鍑哄簱涓婃姤鎺ㄩ�乵es璁板綍
+            ckjgsbPushMes(wrkMast,wrkDetls);
+        }else{
+            wrkMast.setWrkSts(14L);
+            wrkMastService.updateById(wrkMast);
+        }
+
 
         return "鍑哄簱缁撴灉涓婃姤鎴愬姛";
     }
@@ -1961,6 +1978,86 @@
 
     }
 
+    @Override
+    public R getUnfulfilledOrders() {
+        // 鑾峰彇鏈畬鎴愯鍗曠粺璁′俊鎭�
+        List<OrderStatisticsDto> unfulfilledOrders = orderMapper.getUnfulfilledOrders("");
+        return R.ok(unfulfilledOrders);
+    }
+
+    @Override
+    public R getCrnLaneWayInfo() {
+        List<CrnLaneWayInfoDto> crnLaneWayInfo = basCrnpMapper.getCrnLaneWayInfo();
+        return R.ok(crnLaneWayInfo);
+    }
+
+    @Override
+    public R getOutLocInfoByBarcode(String barcode) {
+
+        // 鏍规嵁鎵樼洏鐮佽幏鍙栦换鍔′富妗�
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode));
+        if (wrkMast == null) {
+            return R.parse("璇ユ潯鐮佹棤姝e湪鎵ц浠诲姟锛�" + barcode);
+        }
+        // 鏍规嵁浠诲姟涓绘。鑾峰彇宸ヤ綔妗f槑缁�
+        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+        // 鎻愬彇鍖呰缁勫彿
+        List<String> brandList = wrkDetls.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList());
+        OutLocInfoDto outLocInfoDto = new OutLocInfoDto();
+        outLocInfoDto.setWrkNo(wrkMast.getWrkNo());
+        List<OutLocInfoDto.Material> materialList = new ArrayList<>();
+        for (String brand : brandList) {
+            // 涓�涓湪绠�
+            OutLocInfoDto.Material material = new OutLocInfoDto.Material();
+            material.setPackageGroupNo(brand); // 鍖呰缁勫彿
+            // 鎸夊寘瑁呯粍鍙疯繃婊�
+            List<WrkDetl> wrkDetls1 = wrkDetls.stream().filter(wrkDetl -> Objects.equals(wrkDetl.getBrand(), brand)).collect(Collectors.toList());
+            // 鍗蜂俊鎭�
+            List<OutLocInfoDto.Material.MaterialDetail> materialDetailList = new ArrayList<>();
+            for (WrkDetl wrkDetl : wrkDetls1) {
+                OutLocInfoDto.Material.MaterialDetail materialDetail = new OutLocInfoDto.Material.MaterialDetail();
+                materialDetail.setRollNo(wrkDetl.getModel());
+                materialDetail.setBoxNo(wrkDetl.getUnit());
+                materialDetail.setSpecs(wrkDetl.getMatnr());
+                materialDetail.setBoxType(wrkDetl.getColor());
+                materialDetail.setCoreType(wrkDetl.getManu());
+                materialDetail.setWidth(wrkDetl.getSku());
+                materialDetail.setThickness(wrkDetl.getItemNum());
+                materialDetail.setWeight(wrkDetl.getWeight());
+                materialDetail.setLength(wrkDetl.getLength());
+                materialDetail.setVolume(wrkDetl.getVolume());
+                materialDetail.setCustomerName(wrkDetl.getSupp());
+                materialDetail.setMemo(wrkDetl.getMemo());
+                material.setBoxPos(wrkDetl.getOrigin()); // 鎵樼洏涓婃湪绠变綅缃�
+                materialDetailList.add(materialDetail);
+            }
+            // 璁㈠崟淇℃伅
+            WrkDetl wrkDetl = wrkDetls1.get(0);
+            if (wrkDetl != null && wrkDetl.getOrderNo() != null) {
+                Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", wrkDetl.getOrderNo()));
+                if (order != null) {
+                    material.setOrderNo(order.getOrderNo());
+//                    material.setMemo(order.getMemo());
+//                    material.setCustomerName(order.getCstmrName());
+                    List<OrderStatisticsDto> unfulfilledOrders = orderMapper.getUnfulfilledOrders(order.getOrderNo());
+                    if (unfulfilledOrders.size() == 1) {
+                        OrderStatisticsDto orderStatisticsDto = unfulfilledOrders.get(0);
+                        material.setSum(orderStatisticsDto.getSum());
+                        material.setToShipQuantity(orderStatisticsDto.getToShipQuantity());
+                        material.setWorkQuantity(orderStatisticsDto.getWorkQuantity());
+                        material.setCompleteQuantity(orderStatisticsDto.getCompletedQuantity());
+                    }
+                }
+            }
+
+            material.setMaterialDetailList(materialDetailList);
+            materialList.add(material);
+        }
+        outLocInfoDto.setMaterialList(materialList);
+
+        return R.ok(outLocInfoDto);
+    }
+
     /**
      * 鍒涘缓妗佹灦鐞嗚揣鍑哄簱鐨勫伐浣滄。
      */
@@ -2012,39 +2109,60 @@
         return wrkDetls.size() > 1 ? 1 : 4; // 涓�鏉¤褰曞氨鏄竴鍗�
     }
 
-    public boolean pushStaNoToGwcs(Integer palletizingNo, Integer staNo, Integer workNo,String barcode,String message) {
-        boolean success = false;
-        // 鑾峰彇璇锋眰澶�
-        Map<String, Object> headers = getHeaders();
+    public boolean pushStaNoToGwcs(Integer palletizingNo, Integer staNo, Integer workNo, String barcode, String message) {
+        int maxRetry = 3;       // 鏈�澶氶噸璇� 3 娆�
+        long retryDelay = 10000; // 閲嶈瘯闂撮殧 10 绉�
+        boolean finalSuccess = false;
 
-        // 鏋勯�犺姹備綋
+        Map<String, Object> headers = getHeaders();
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("workNo", workNo);
         jsonObject.put("staNo", staNo);
         jsonObject.put("sourceStaNo", palletizingNo);
         jsonObject.put("barcode", barcode);
         String body = jsonObject.toJSONString();
-        String response = "";
-        try {
-            response = new HttpHandler.Builder()
-                    .setUri(MesConstant.GWCS_IP_PORT)
-                    .setPath(MesConstant.GWCS_FPKW_URL)
-                    .setHeaders(headers)
-                    .setJson(body)
-                    .build()
-                    .doPost();
-            if (!Cools.isEmpty(response)) {
-                success = true;
-            } else {
-                log.error(message + "澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.GWCS_IP_PORT + MesConstant.GWCS_FPKW_URL, body, response);
-            }
-        } catch (Exception e) {
-            log.error(message + "寮傚父锛歿}", e);
-        } finally {
+
+        for (int attempt = 1; attempt <= maxRetry; attempt++) {
+            String response = "";
+            boolean success = false;
+            String attemptMsg = message + "锛堢 " + attempt + " 娆″皾璇曪級";
+
             try {
-                // 淇濆瓨鎺ュ彛鏃ュ織
+                response = new HttpHandler.Builder()
+                        .setUri(MesConstant.GWCS_IP_PORT)
+                        .setPath(MesConstant.GWCS_FPKW_URL)
+                        .setHeaders(headers)
+                        .setJson(body)
+                        .setTimeout(30, TimeUnit.SECONDS) // 璁剧疆杩炴帴 + 璇诲彇瓒呮椂涓�30绉�
+                        .build()
+                        .doPost();
+
+
+                if (!Cools.isEmpty(response)) {
+                    try {
+                        JSONObject resJson = JSON.parseObject(response);
+                        int code = resJson.getIntValue("code"); // 瑙嗗叿浣撴帴鍙h�屽畾
+                        if (code == 200) {
+                            success = true;
+                            finalSuccess = true;
+                            log.info("{} 鎴愬姛锛屽搷搴旓細{}", attemptMsg, response);
+                        } else {
+                            log.warn("{} 鍝嶅簲澶辫触锛岃繑鍥瀋ode={}锛屽畬鏁村搷搴旓細{}", attemptMsg, code, response);
+                        }
+                    } catch (Exception parseEx) {
+                        log.warn("{} 鍝嶅簲瑙f瀽澶辫触锛屽唴瀹癸細{}", attemptMsg, response);
+                    }
+                } else {
+                    log.warn("{} 澶辫触锛屽搷搴斾负绌�", attemptMsg);
+                }
+            } catch (Exception e) {
+                log.error("{} 寮傚父锛歿}", attemptMsg, e.getMessage(), e);
+            }
+
+            // 姣忔閮借褰曟棩蹇楋紝涓嶈鎴愬姛鎴栧け璐�
+            try {
                 apiLogService.save(
-                        message,
+                        attemptMsg,
                         MesConstant.GWCS_IP_PORT + MesConstant.GWCS_FPKW_URL,
                         null,
                         "127.0.0.1",
@@ -2053,12 +2171,27 @@
                         success
                 );
             } catch (Exception e) {
-                log.error("", e);
+                log.error("淇濆瓨鎺ュ彛鏃ュ織寮傚父锛歿}", e.getMessage(), e);
+            }
+
+            if (success) break; // 鎴愬姛灏变笉鍐嶉噸璇�
+
+            // 濡傛灉杩樻湁涓嬩竴娆¢噸璇曪紝鍒欑瓑寰�
+            if (attempt < maxRetry) {
+                try {
+                    Thread.sleep(retryDelay);
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                    break;
+                }
             }
         }
-        return success;
+
+        return finalSuccess;
     }
 
+
+
     Map<String, Object> getHeaders(){
         Map<String,Object> headers = new HashMap<>();
         headers.put("digi-type","sync ");

--
Gitblit v1.9.1