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/task/handler/GhjtHandler.java     |    2 
 src/main/webapp/static/js/order/out.js                      |    9 +++
 src/main/java/com/zy/asrs/controller/MobileController.java  |    2 
 src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java  |    2 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java |  128 +++++++++++++++++++++++++++---------------
 5 files changed, 96 insertions(+), 47 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 136a38d..9e07434 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -606,7 +606,7 @@
     }
 
     @PostMapping("/pdaGetMemo")
-    @ManagerAuth(memo = "pda鑾峰彇鏈ㄧ璧勬枡")
+//    @ManagerAuth(memo = "pda鑾峰彇鏈ㄧ璧勬枡")
     public synchronized  List<Map<String, Object>> pdaGetMemo() {
         return mobileService.pdaGetMemo();
     }
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 7322481..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,6 +30,7 @@
 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;
 
@@ -1136,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) {
@@ -1491,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 "鍑哄簱缁撴灉涓婃姤鎴愬姛";
     }
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 c54c985..102a14e 100644
--- a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
@@ -24,6 +24,7 @@
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -101,6 +102,7 @@
                     .setPath(MesConstant.GWCS_DCKK_URL)
                     .setHeaders(headers)
                     .setJson(body)
+                    .setTimeout(30, TimeUnit.SECONDS) // 璁剧疆杩炴帴 + 璇诲彇瓒呮椂涓�30绉�
                     .build()
                     .doPost();
             if (!Cools.isEmpty(response)) {
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
index 7c4f47b..7e710a2 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -95,7 +95,7 @@
                 }
 
             // 鍑哄簱 --------------------------------------------------------------------------------
-            } else if (wrkMast.getWrkSts() == 15 && wrkMast.getIoType() != 110) {
+            } else if (wrkMast.getWrkSts() == 15 && wrkMast.getIoType() != 110 &&wrkMast.getIoType() != 3) {
                 List<WrkDetl> wrkDetls101 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                 if (wrkDetls101.isEmpty()) {
 //                        exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 宸ヤ綔鏄庣粏妗d负绌猴紱[workNo={0}]", wrkMast.getWrkNo());
diff --git a/src/main/webapp/static/js/order/out.js b/src/main/webapp/static/js/order/out.js
index abe3c6a..1ebda0a 100644
--- a/src/main/webapp/static/js/order/out.js
+++ b/src/main/webapp/static/js/order/out.js
@@ -42,6 +42,15 @@
             ,{field: 'memo', align: 'center',title: '澶囨敞', hide: false}
             ,{field: 'qty', align: 'center',title: '浣滀笟鏁伴噺', style: 'font-weight: bold'}
             ,{field: 'enableQty', align: 'center',title: '寰呭嚭鏁伴噺', style: 'font-weight: bold'}
+            ,{field: 'finishStatus', align: 'center', title: '鏄惁瀹屾垚', templet: function(d){
+                    if (d.qty === 0 && d.enableQty === 0) {
+                        return '<span style="color:green;font-weight:bold;">瀹屾垚</span>';
+                    } else {
+                        return '<span style="color:red;">鏈畬鎴�</span>';
+                    }
+                }}
+
+
             // ,{field: 'name', align: 'center',title: '鍚嶇О'}
             // ,{field: 'unit', align: 'center',title: '鍗曚綅', hide: true}
             // ,{field: 'barcode', align: 'center',title: '鍟嗗搧鏉$爜', hide: true}

--
Gitblit v1.9.1