From 9fd5e6fbcb1d8badf1835478d862ac40bfb60f3c Mon Sep 17 00:00:00 2001
From: zzgtfwq <zzgtfwq>
Date: 星期三, 10 十二月 2025 16:59:09 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  248 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 231 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 46167d3..1a455ab 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -14,19 +14,24 @@
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.*;
 import com.zy.common.model.LocTypeDto;
+import com.zy.common.model.MatDto;
 import com.zy.common.model.SearchLocParam;
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
+import com.zy.common.utils.CollectionUtils;
 import com.zy.common.utils.HttpHandler;
+import com.zy.common.utils.News;
 import com.zy.core.CrnThread;
 import com.zy.core.DevpThread;
 import com.zy.core.cache.*;
 import com.zy.core.enums.*;
 import com.zy.core.model.*;
 import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.command.LedCommand;
 import com.zy.core.model.protocol.*;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
+import com.zy.core.thread.LedThread;
 import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
 import com.zy.system.entity.license.LicenseVerify;
@@ -40,6 +45,7 @@
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -60,6 +66,8 @@
     private WrkMastMapper wrkMastMapper;
     @Autowired
     private WrkDetlService wrkDetlService;
+    @Autowired
+    private BasDevpOptService basDevpOptService;
     @Autowired
     private LocMastService locMastService;
     @Autowired
@@ -129,16 +137,6 @@
                 if (barcodeThread == null) {
                     continue;
                 }
-                String barcode = barcodeThread.getBarcode();
-
-                if (!Cools.isEmpty(barcode)) {
-//                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-                    if ("00000000".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || !CodeDetectionUtil.barcodeDetection(barcode)) {
-                        continue;
-                    }
-                } else {
-                    continue;
-                }
 
                 // 鑾峰彇鍏ュ簱绔欎俊鎭�
 //                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
@@ -148,6 +146,17 @@
                     continue;
                 } else {
                     staProtocol = staProtocol.clone();
+                }
+
+                String barcode = barcodeThread.getBarcode();
+
+                if (!Cools.isEmpty(barcode)) {
+//                    log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+                    if ("00000000".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || !CodeDetectionUtil.barcodeDetection(barcode)) {
+                        continue;
+                    }
+                } else {
+                    continue;
                 }
 
                 // 灏哄妫�娴嬪紓甯�
@@ -183,6 +192,15 @@
                 }
                 // 閫�鍥�
                 if (back) {
+                    barcodeThread.setBarcode("");
+                    // 鑾峰彇宸ヤ綔鍙�
+                    int workNo = commonService.getWorkNo(3);
+
+                    staProtocol.setWorkNo(workNo);
+                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
+
+                    devpThread.setPakMk(staProtocol.getSiteId(), false,201);
+                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     // led 寮傚父鏄剧ず
                     LedErrorThreadUtil.ledErrorThread(errMsg,inSta.getLed(), LedErrorAreaType.FOUR_BARCODE.getDesc());
                     continue;
@@ -266,7 +284,9 @@
 //                            if(Cools.isEmpty(dto.getRgvNo()) || dto.getRgvNo() <= 0) {
 //                                staProtocol.setStaNo(607);//607
 //                            } else {//濡傛灉瀛樺湪RGV缂栧彿锛岃鏄庨渶瑕丷GV鎺ラ┏锛屽厛涓嬪彂浠诲姟鍒癛GV婧愮珯
-                            staProtocol.setStaNo(dto.getRgvSstaNo().shortValue());
+//                            staProtocol.setStaNo(dto.getRgvSstaNo().shortValue());
+                            staProtocol.setStaNo(wrkMast.getStaNoSou$().shortValue());
+
 //                            }
 
                             devpThread.setPakMk(staProtocol.getSiteId(), false,283);
@@ -276,6 +296,14 @@
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
                         } else {
+                            // 鑾峰彇宸ヤ綔鍙�
+                            int workNo = commonService.getWorkNo(3);
+
+                            staProtocol.setWorkNo(workNo);
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+
+                            devpThread.setPakMk(staProtocol.getSiteId(), false,201);
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             // led 寮傚父鏄剧ず
                             LedErrorThreadUtil.ledErrorThread("鍏ュ簱璇锋眰澶辫触"+jsonObject.getInteger("code"),inSta.getLed(), LedErrorAreaType.ONE_OTHER.getDesc());
                             log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
@@ -722,7 +750,7 @@
             }
 
             // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
-            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
+            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo()) && crnProtocol.getCrnNo()!=3) {
                 String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
                 LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                 // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
@@ -869,7 +897,7 @@
                 }
 
                 // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
-                if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
+                if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo()) && crnProtocol.getCrnNo()!=3) {
                     String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
                     LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                     // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
@@ -879,10 +907,10 @@
                             log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                         } else {
                             if (waitWrkMast.getWrkSts() == 11) {
-                                if (waitWrkMast.getIoPri() + 100000D < 999999999D) {
-                                    waitWrkMast.setIoPri(waitWrkMast.getIoPri()+100000D);
+                                if (waitWrkMast.getIoPri() + 10D < 9999D) {
+                                    waitWrkMast.setIoPri(waitWrkMast.getIoPri()+10D);
                                 } else {
-                                    waitWrkMast.setIoPri(999999999D);
+                                    waitWrkMast.setIoPri(9999D);
                                 }
                                 waitWrkMast.setModiTime(new Date());
                                 if (wrkMastMapper.updateById(waitWrkMast) == 0) {
@@ -1138,6 +1166,192 @@
         }
     }
 
+
+    /**
+     * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
+     */
+    public synchronized void ledExecute() {
+        for (LedSlave led : slaveProperties.getLed()) {
+            // 鑾峰彇杈撻�佺嚎plc绾跨▼
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+            // 鍛戒护闆嗗悎
+            List<LedCommand> commands = new ArrayList<>();
+            // 宸ヤ綔妗i泦鍚�
+            List<WrkMast> wrkMasts = new ArrayList<>();
+            for (Integer staNo : led.getStaArr()) {
+                // 鑾峰彇鍙夎溅绔欑偣
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+                // 鑾峰彇宸ヤ綔妗f暟鎹�
+                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
+                if (null == wrkMast) {
+                    if(staProtocol.getWorkNo() > 9999){ //寮傚父閫�鍑�
+                        String err = basDevpOptService.getErr(staProtocol.getWorkNo());
+                        MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, err));
+                    }
+                    continue;
+                }
+                wrkMasts.add(wrkMast);
+                // 缁勮鍛戒护
+                LedCommand ledCommand = new LedCommand();
+                ledCommand.setWorkNo(wrkMast.getWrkNo());
+                ledCommand.setIoType(wrkMast.getIoType());
+                // 鍑哄簱妯″紡
+                switch (wrkMast.getIoType()) {
+                    case 1:
+                        ledCommand.setTitle("鍏ㄦ澘鍏ュ簱");
+                        break;
+                    case 10:
+                        ledCommand.setTitle("绌烘澘鍏ュ簱");
+                        break;
+                    case 12:
+                        ledCommand.setTitle("鐗╂枡琛旀帴");
+                        break;
+                    case 57:
+                        ledCommand.setTitle("鐩樼偣鍐嶅叆搴�");
+                        break;
+                    case 53:
+                        ledCommand.setTitle("鎷f枡鍐嶅叆搴�");
+                        break;
+                    case 101:
+                        ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
+                        break;
+                    case 103:
+                        ledCommand.setTitle("鎷f枡鍑哄簱");
+                        break;
+                    case 104:
+                        ledCommand.setTitle("骞舵澘鍑哄簱");
+                        break;
+                    case 107:
+                        ledCommand.setTitle("鐩樼偣鍑哄簱");
+                        break;
+                    case 110:
+                        ledCommand.setTitle("绌烘澘鍑哄簱");
+                        ledCommand.setEmptyMk(true);
+                        break;
+                    default:
+                        News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
+                        break;
+                }
+                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+                ledCommand.setStaNo(wrkMast.getStaNo());
+                ledCommand.setBarcode(wrkMast.getBarcode());
+                if(wrkMast.getIoType() == 12){
+                    List<WrkDetl> wrkDetls = wrkDetlService.findByBarcode(wrkMast.getBarcode());
+                    wrkDetls.forEach(wrkDetl -> {
+                        Double total = 0.0;
+                        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
+                        LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
+                        if (Cools.isEmpty(locDetl)) {
+                            total = wrkDetl.getAnfme();
+                        } else {
+                            total = locDetl.getAnfme();
+                        }
+                        ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
+                    });
+                }
+                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
+                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+
+                    wrkDetls.forEach(wrkDetl -> {
+                        Double total = 0.0;
+                        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
+                        LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
+                        if (Cools.isEmpty(locDetl)) {
+                            total = wrkDetl.getAnfme();
+                        } else {
+                            total = locDetl.getAnfme();
+                        }
+                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
+                        }
+                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
+                        }
+                        if (wrkMast.getIoType() == 107) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
+                        }
+                    });
+                }
+                commands.add(ledCommand);
+            }
+            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+            // 鑾峰彇LED绾跨▼
+            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+            // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
+            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
+                continue;
+            }
+            // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+            if (!commands.isEmpty()) {
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+                    News.error("{}鍙稬ED鏄剧ず鍐呭鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    continue;
+                }
+            }
+
+            try {
+                // 淇敼涓绘。led鏍囪
+                for (WrkMast wrkMast : wrkMasts) {
+                    wrkMast.setOveMk("Y");
+                    wrkMast.setModiTime(new Date());
+                    if (wrkMastMapper.updateById(wrkMast) == 0) {
+                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                    }
+                }
+
+                // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
+                ledThread.setWorkNos(workNos);
+
+            } catch (Exception e) {
+                e.printStackTrace();
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            }
+
+        }
+    }
+
+    /**
+     * 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
+     */
+    public synchronized void ledReset() {
+        for (LedSlave led : slaveProperties.getLed()) {
+            // 鑾峰彇杈撻�佺嚎plc绾跨▼
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+            // 鍛戒护闆嗗悎
+            boolean reset = true;
+            for (Integer staNo : led.getStaArr()) {
+//                System.out.println("staArr = " + staNo);
+
+                // 鑾峰彇鍙夎溅绔欑偣
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (staProtocol == null) { continue; }
+                if (staProtocol.getWorkNo() != 0 || staProtocol.isErr()) {
+                    reset = false;
+                    break;
+                }
+            }
+            // 鑾峰彇led绾跨▼
+            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+            // led鏄剧ず榛樿鍐呭
+            if (reset) {
+                if (ledThread == null) {
+                    continue;
+                }
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
+                    News.error("{}鍙稬ED鏄剧ず榛樿鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                }
+//                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
+//                    News.error("{}鍙稬ED鏄剧ず榛樿鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+//                }
+            }
+        }
+    }
+
     /**
      * 鍫嗗灈鏈�5鍒嗛挓鏃犱换鍔″垯鍥炲埌婧愮偣
      */
@@ -1169,7 +1383,7 @@
                         if (!WrkMastLogList.isEmpty()) {
                             boolean signT = false;
                             for (WrkMast wrkMast : WrkMastLogList){
-                                Date completeTime = wrkMast.getIoTime();
+                                Date completeTime = wrkMast.getModiTime();
                                 if (completeTime==null){
                                     continue;
                                 }

--
Gitblit v1.9.1