From 964a867a0e8a0814ecd7152a8ef1266f664a014b Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 11 十二月 2025 15:36:10 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  317 +++++++++++++++++++++++++++++++++-------------------
 1 files changed, 202 insertions(+), 115 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 ee75672..656844d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,6 +7,7 @@
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.exception.CoolException;
+import com.zy.asrs.domain.dto.LedDTO;
 import com.zy.asrs.domain.param.ForwardAGVTaskParam;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
@@ -97,6 +98,10 @@
     private OrderService orderService;
     @Autowired
     private OrderDetlService orderDetlService;
+    @Autowired
+    private BasStationService basStationService;
+    @Autowired
+    private BasStationDetlService basStationDetlService;
 
     @Resource
     private ApiLogService apiLogService;
@@ -601,7 +606,7 @@
 
                         // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
                         wrkMast.setWrkSts(13L);
-                        if (wrkMast.getStaNo() == 1024 || wrkMast.getStaNo() == 1028) {
+                        if (wrkMast.getStaNo() == 1024) {
                             wrkMast.setWrkSts(14L);
                         }
                         wrkMast.setCrnEndTime(new Date());
@@ -1446,6 +1451,8 @@
                         ) {
                     News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛岋細绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�");
 
+                    String barcode = staProtocol.getBarcode();
+
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
 
@@ -1453,6 +1460,7 @@
                         param.setIoType(10);
                         param.setSourceStaNo(emptyInSta.getStaNo());
                         param.setLocType1((short) 0);
+                        param.setBarcode(barcode);
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
                                 .setPath("/rpc/pakin/loc/v1")
@@ -1528,105 +1536,23 @@
         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.workType == DevpWorkType.IDLE) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                // 鑾峰彇宸ヤ綔妗f暟鎹�
-                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                if (null == wrkMast) { 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 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() != 110 && wrkMast.getIoType() != 10) {
-                    List<WrkDetl> wrkDetls =wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", 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 (!Cools.isEmpty(wrkDetl.getOrderNo())){
-                            OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", wrkDetl.getOrderNo())
-                                    .eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
-                            if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
-                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getTemp1(),orderDetl.getTemp2()));
-                            }
-                            if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
-                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getTemp1(),orderDetl.getTemp2()));
-                            }
-                            if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) {
-                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getTemp1(),orderDetl.getTemp2()));
-                            }
-                        }else {
-                            if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
-                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-                            }
-                            if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
-                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-                            }
-                            if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) {
-                                ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-                            }
-                        }
-
-
-                    });
-                }
-                commands.add(ledCommand);
+            LedDTO ledDTO =  new LedDTO();
+            if (!led.getStaArr().isEmpty()) {
+                ledDTO = getstaCommands(led.getStaArr(), devpThread);
+            }else {
+                ledDTO = getAgvStaCommands(led.getAgvStaArr());
             }
+            // 鍛戒护闆嗗悎
+            List<LedCommand> commands = ledDTO.getCommands();
+            // 宸ヤ綔妗i泦鍚�
+            List<WrkMast> wrkMasts = ledDTO.getWrkMasts();
             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 (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
+//                continue;
+//            }
             // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
             if (!commands.isEmpty()) {
                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
@@ -1656,6 +1582,139 @@
         }
     }
 
+    public LedDTO getstaCommands(List<Integer> staArr, DevpThread devpThread ) {
+        LedDTO ledDTO = new LedDTO();
+        List<LedCommand> commands = new ArrayList<>();
+        // 宸ヤ綔妗i泦鍚�
+        List<WrkMast> wrkMasts = new ArrayList<>();
+        for (Integer staNo : staArr) {
+            // 鑾峰彇鍙夎溅绔欑偣
+            StaProtocol staProtocol = devpThread.getStation().get(staNo);
+            if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || staProtocol.workType == DevpWorkType.IDLE) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鑾峰彇宸ヤ綔妗f暟鎹�
+            WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
+            if (null == wrkMast) { 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 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() != 110 && wrkMast.getIoType() != 10) {
+                List<WrkDetl> wrkDetls =wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", 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 (!Cools.isEmpty(wrkDetl.getOrderNo())){
+                        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", wrkDetl.getOrderNo())
+                                .eq("matnr", wrkDetl.getMatnr()).eq("batch", wrkDetl.getBatch()));
+                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getTemp1(),orderDetl.getTemp2()));
+                        }
+                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getTemp1(),orderDetl.getTemp2()));
+                        }
+                        if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total,orderDetl.getTemp1(),orderDetl.getTemp2()));
+                        }
+                    }else {
+                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                        }
+                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                        }
+                        if (wrkMast.getIoType() == 107 || wrkMast.getIoType() == 104) {
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                        }
+                    }
+
+
+                });
+            }
+            commands.add(ledCommand);
+        }
+        ledDTO.setCommands(commands);
+        ledDTO.setWrkMasts(wrkMasts);
+        return ledDTO;
+    }
+
+    public LedDTO getAgvStaCommands(List<String> agvStaArr ) {
+        LedDTO ledDTO = new LedDTO();
+        List<LedCommand> commands = new ArrayList<>();
+        // 宸ヤ綔妗i泦鍚�
+        List<BasStation> basStations = new ArrayList<>();
+        for (String staNo : agvStaArr) {
+            // 鑾峰彇宸ヤ綔妗f暟鎹�
+            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", staNo));
+            if (null == station || !station.getLocSts().equals("F")) { continue; }
+            basStations.add(station);
+            // 缁勮鍛戒护
+            LedCommand ledCommand = new LedCommand();
+            ledCommand.setTitle("鍦ㄧ珯淇℃伅");
+            ledCommand.setSourceLocNo(station.getDevNo());
+            ledCommand.setBarcode(station.getBarcode());
+
+            List<BasStationDetl> basStationDetls = basStationDetlService.selectList(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo()));
+
+            basStationDetls.forEach(basStationDetl -> {
+                Double total = 0.0;
+                total = basStationDetl.getAnfme();
+
+                ledCommand.getMatDtos().add(new MatDto(basStationDetl.getMatnr(), basStationDetl.getMaktx(), basStationDetl.getBatch(), basStationDetl.getSpecs(), basStationDetl.getManu(), basStationDetl.getMemo(), basStationDetl.getAnfme(),total,basStationDetl.getStandby1(),null));
+
+
+
+
+            });
+
+            commands.add(ledCommand);
+        }
+        ledDTO.setCommands(commands);
+        return ledDTO;
+    }
+
     /**
      * 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
      */
@@ -1663,28 +1722,54 @@
         for (LedSlave led : slaveProperties.getLed()) {
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-            // 鍛戒护闆嗗悎
-            boolean reset = true;
-            for (Integer staNo : led.getStaArr()) {
-                // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (staProtocol == null) { continue; }
-                if (staProtocol.getWorkNo() != 0 || staProtocol.isErr()) {
-                    reset = false;
-                    break;
+            if (!led.getStaArr().isEmpty()){
+                // 鍛戒护闆嗗悎
+                boolean reset = true;
+                for (Integer staNo : led.getStaArr()) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    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());
+                    }
+                }
+            }else {
+                // 鍛戒护闆嗗悎
+                boolean reset = false;
+                for (String staNo : led.getAgvStaArr()) {
+                    // 鑾峰彇鍙夎溅绔欑偣
+                    BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", staNo));
+                    if (null == station) { continue; }
+                    if (station.getLocSts().equals("O")) {
+                        reset = true;
+                        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());
+                    }
                 }
             }
-            // 鑾峰彇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());
-                }
-            }
+
         }
     }
 
@@ -2124,6 +2209,8 @@
             sourceSite = "c";
         } else if(staNo == 2000 || staNo ==2002) {
             sourceSite = "d";
+        }else if (staNo == 1028){
+            sourceSite = "f";
         }
         List<ForwardAGVTaskParam.PositionCodePaths> agvTaskParamList = Arrays.asList(
                 //璧峰浣�

--
Gitblit v1.9.1