From f910377a07c3ab8e428f094b4bb4d2b03ea1d1a8 Mon Sep 17 00:00:00 2001
From: Administrator <335182714>
Date: 星期五, 27 六月 2025 09:52:56 +0800
Subject: [PATCH] #接口防抖

---
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java |  231 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 158 insertions(+), 73 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 29658dd..699c9e5 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -30,11 +30,13 @@
 import com.zy.system.mapper.ConfigMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -1135,57 +1137,88 @@
         return "鍏ュ簱鎴愬姛";
     }
 
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
     @Override
     @Transactional
     public R kthl(KthlParam param) {
+        String barcode = param.getBarcode();
+        String lockKey = "kthl:lock:" + barcode;
+        String lockVal = UUID.randomUUID().toString(); // 闃叉璇垹浠栦汉閿�
 
-        // 鑾峰彇妯″紡涓虹數鑴戞ā寮忥紝鏃犱换鍔$殑鍫嗗灈鏈哄垪琛�:闃叉鍒嗛厤鍒板爢鍨涙満涓嶅彲鐢�
-        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts",3)
-                .eq("wrk_no",0).eq("in_enable","Y").eq("out_enable","Y"));
-        if (basCrnps.isEmpty()) {
-            // 閮芥湁浠诲姟鍒欒幏鍙栫數鑴戞ā寮忕殑鍫嗗灈鏈哄垪琛�
-            basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts",3).eq("in_enable","Y")
-                    .eq("out_enable","Y"));
+        // 鍒嗗竷寮忛攣锛�5绉掕繃鏈�
+        Boolean locked = redisTemplate.opsForValue().setIfAbsent(lockKey, lockVal, 5, TimeUnit.SECONDS);
+        if (locked == null || !locked) {
+            return R.error("閲嶅鎻愪氦锛氳鎵樼洏宸插湪澶勭悊锛岃鍕块噸澶嶆搷浣�");
         }
-        if (basCrnps.isEmpty()) {
-            throw new CoolException("娌℃湁鍙敤鍫嗗灈鏈�,鍫嗗灈鏈哄仠姝㈡垨寮傚父鎴栫鐢�");
-        }
-        // 鍙敤鍫嗗灈鏈哄垪琛�
-        List<Integer> crnNoList = basCrnps.stream().map(BasCrnp::getCrnNo).collect(Collectors.toList());
-        Integer crnNo = crnNoList.get(0);
 
-        int workNo = commonService.getWorkNo(5);
-        Date now = new Date();
-        // 鐢熸垚宸ヤ綔妗�
-        WrkMast wrkMast = new WrkMast();
-        wrkMast.setWrkNo(workNo);
-        wrkMast.setIoTime(new Date());
-        wrkMast.setWrkSts(1L); //
-        wrkMast.setIoType(3); // 绔欏埌绔�
-        wrkMast.setIoPri(14D); // 浼樺厛绾�
-        wrkMast.setCrnNo(crnNo);
-        wrkMast.setSourceStaNo(secondFloorIn[crnNo]);
-        wrkMast.setStaNo(secondFloorOut[crnNo]);
-        wrkMast.setLocNo("");
-        wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮�
-        wrkMast.setFullPlt("N"); // 婊℃澘锛歒
-        wrkMast.setPicking("N"); // 鎷f枡
-        wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setEmptyMk("Y"); // 绌烘澘
-        wrkMast.setLinkMis("Y");
-        wrkMast.setCtnType(1); // 瀹瑰櫒绫诲瀷
-        // 鎿嶄綔浜哄憳鏁版嵁
-        wrkMast.setAppeTime(now);
-        wrkMast.setModiTime(now);
-        boolean res = wrkMastService.insert(wrkMast);
-        if (!res) {
-            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-        }
-        // 杩斿洖GWCS鐩爣淇℃伅
-        pushStaNoToGwcs(param.getPalletizingNo(),wrkMast.getSourceStaNo(),workNo,param.getBarcode(),"浜屾ゼ绌烘墭鍥炴祦鎺ㄩ�乬wcs");
+        try {
+            // 鑾峰彇绌洪棽鍫嗗灈鏈猴紙鐢佃剳妯″紡銆佹棤浠诲姟锛�
+            List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>()
+                    .eq("crn_sts", 3).eq("wrk_no", 0)
+                    .eq("in_enable", "Y").eq("out_enable", "Y"));
 
-        return R.ok("绌烘墭鍥炴祦璇锋眰鎴愬姛");
+            // 濡傛灉娌℃湁绌洪棽鍫嗗灈鏈猴紝灏濊瘯鎵�鏈夊彲鐢ㄥ爢鍨涙満
+            if (basCrnps.isEmpty()) {
+                basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>()
+                        .eq("crn_sts", 3)
+                        .eq("in_enable", "Y").eq("out_enable", "Y"));
+            }
+
+            if (basCrnps.isEmpty()) {
+                throw new CoolException("娌℃湁鍙敤鍫嗗灈鏈�,鍫嗗灈鏈哄仠姝㈡垨寮傚父鎴栫鐢�");
+            }
+
+            // 鑾峰彇绗竴涓彲鐢ㄥ爢鍨涙満
+            List<Integer> crnNoList = basCrnps.stream()
+                    .map(BasCrnp::getCrnNo)
+                    .collect(Collectors.toList());
+            Integer crnNo = crnNoList.get(0);
+
+            int workNo = commonService.getWorkNo(5);
+            Date now = new Date();
+
+            // 鐢熸垚宸ヤ綔妗�
+            WrkMast wrkMast = new WrkMast();
+            wrkMast.setWrkNo(workNo);
+            wrkMast.setIoTime(now);
+            wrkMast.setWrkSts(1L);
+            wrkMast.setIoType(3); // 绔欏埌绔�
+            wrkMast.setIoPri(14D);
+            wrkMast.setCrnNo(crnNo);
+            wrkMast.setSourceStaNo(secondFloorIn[crnNo]);
+            wrkMast.setStaNo(secondFloorOut[crnNo]);
+            wrkMast.setLocNo("");
+            wrkMast.setBarcode(barcode);
+            wrkMast.setFullPlt("N");
+            wrkMast.setPicking("N");
+            wrkMast.setExitMk("N");
+            wrkMast.setEmptyMk("Y");
+            wrkMast.setLinkMis("Y");
+            wrkMast.setCtnType(1);
+            wrkMast.setAppeTime(now);
+            wrkMast.setModiTime(now);
+
+            boolean res = wrkMastService.insert(wrkMast);
+            if (!res) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+            }
+
+            // 鎺ㄩ�佺珯鐐瑰埌GWCS
+            pushStaNoToGwcs(param.getPalletizingNo(), wrkMast.getSourceStaNo(), workNo, barcode, "浜屾ゼ绌烘墭鍥炴祦鎺ㄩ�乬wcs");
+
+            return R.ok("绌烘墭鍥炴祦璇锋眰鎴愬姛");
+
+        } finally {
+            // 瑙i攣锛岀‘淇濆彧閲婃斁鑷繁鍔犵殑閿�
+            String val = redisTemplate.opsForValue().get(lockKey);
+            if (lockVal.equals(val)) {
+                redisTemplate.delete(lockKey);
+            }
+        }
     }
+
 
     @Override
     public R tb(TbParam param) {
@@ -1490,8 +1523,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 "鍑哄簱缁撴灉涓婃姤鎴愬姛";
     }
@@ -2005,6 +2044,15 @@
                 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);
             }
@@ -2014,14 +2062,15 @@
                 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());
+//                    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());
                     }
                 }
             }
@@ -2085,39 +2134,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",
@@ -2126,12 +2196,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