From e49208f2514ccf950164a2d6d590d85f7cecb46a Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 07 六月 2024 16:26:28 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java |  352 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 243 insertions(+), 109 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
index ad71444..db25c37 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -4,8 +4,12 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.dto.StartupDto;
+import com.zy.asrs.common.domain.param.SearchLocParam;
+import com.zy.asrs.common.utils.HttpHandler;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.SnowflakeIdWorker;
+import com.zy.asrs.wcs.core.domain.dto.MatDto;
 import com.zy.asrs.wcs.core.domain.dto.RedisMapDto;
 import com.zy.asrs.wcs.core.domain.dto.StaDto;
 import com.zy.asrs.wcs.core.entity.*;
@@ -22,6 +26,7 @@
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
 import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
 import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.command.LedCommand;
 import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
 import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
@@ -29,6 +34,7 @@
 import com.zy.asrs.wcs.rcs.service.DeviceService;
 import com.zy.asrs.wcs.rcs.thread.BarcodeThread;
 import com.zy.asrs.wcs.rcs.thread.DevpThread;
+import com.zy.asrs.wcs.rcs.thread.LedThread;
 import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
 import com.zy.asrs.wcs.system.entity.Dict;
 import com.zy.asrs.wcs.system.service.DictService;
@@ -36,7 +42,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import java.util.*;
 
 /**
@@ -72,6 +78,8 @@
     private RedisUtil redisUtil;
     @Autowired
     private BasConveyorService basConveyorService;
+    @Autowired
+    private BasLedService basLedService;
 
     /**
      * 缁勬墭
@@ -88,7 +96,7 @@
                 // 閬嶅巻鍏ュ簱鍙�
                 for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) {
                     // 鑾峰彇鍏ュ簱绔欎俊鎭�
-                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId().intValue());
+                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, devp.getId().intValue());
                     StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                     if (staProtocol == null) {
                         continue;
@@ -129,11 +137,11 @@
                     }
                     // 閫�鍥�
                     if (back) {
-//                        // led 寮傚父鏄剧ず
-//                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-//                        if (ledThread != null) {
-//                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
-//                        }
+                        // led 寮傚父鏄剧ず
+                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+                        if (ledThread != null) {
+                            ledThread.error(errMsg);
+                        }
                         continue;
                     }
 
@@ -150,115 +158,93 @@
                         }
                         String barcode = barcodeThread.getBarcode();
                         if (!Cools.isEmpty(barcode)) {
-//                        News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
+                            News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
                             if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) {
-//                            staProtocol.setWorkNo((short) 32002);
-//                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
-//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                                staProtocol.setWorkNo((short) 32002);
+                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                                devpThread.setPakMk(staProtocol.getSiteId(), false);
+                                devpThread.writeWorkSta(staProtocol.getSiteId(), (short) 32002, inSta.getBackSta().shortValue());
 
-//                                // led 寮傚父鏄剧ず
-//                                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-//                                if (ledThread != null) {
-//                                    String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-//                                }
+                                // led 寮傚父鏄剧ず
+                                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+                                if (ledThread != null) {
+                                    String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
+                                    ledThread.error(errorMsg);
+                                }
                                 continue;
                             }
-                        } else {
-//                        staProtocol.setWorkNo((short) 32002);
-//                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
-//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        }
 
-//                        // led 寮傚父鏄剧ず
-//                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-//                        if (ledThread != null) {
-//                            String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-//                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-//                        }
+                        //鑾峰彇鍏ュ簱浠诲姟绫诲瀷
+                        TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
+                                .eq(TaskCtg::getFlag, "IN")
+                                .eq(TaskCtg::getStatus, 1));
+
+                        // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                        Task task1 = taskService.getOne(new LambdaQueryWrapper<Task>()
+                                .eq(Task::getOriginSite, inSta.getStaNo())
+                                .eq(Task::getTaskCtg, taskCtg.getId())
+                                .in(Task::getTaskSts, 1, 2, 3)
+                                .eq(Task::getZpallet, barcode));
+                        if (task1 != null) {
+                            News.error("宸ヤ綔妗e凡瀛樺湪,宸ヤ綔鍙�={}", task1.getTaskNo());
                             continue;
                         }
 
-//                        // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟
-//                        WrkMast wrkMast1 = wrkMastMapper.selectPickStepByBarcode(barcode);
-//                        if (null != wrkMast1) {
-//                            continue;
-//                        }
-//
-//                        // 鍒ゆ柇閲嶅宸ヤ綔妗�
-//                        WrkMast wrkMast2 = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
-//                        if (wrkMast2 != null) {
-//                            News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast2.getWrkNo());
-//                            continue;
-//                        }
-//
-//                        try {
-//                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-//                            SearchLocParam param = new SearchLocParam();
-//                            param.setBarcode(barcode);
-//                            param.setIoType(1);
-//                            param.setSourceStaNo(inSta.getStaNo());
-//                            param.setLocType1(locTypeDto.getLocType1());
-//                            String response = new HttpHandler.Builder()
-//                                    .setUri(wmsUrl)
-//                                    .setPath("/rpc/pakin/loc/v2")
-//                                    .setJson(JSON.toJSONString(param))
-//                                    .build()
-//                                    .doPost();
-//                            JSONObject jsonObject = JSON.parseObject(response);
-//                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-//                            Integer code = jsonObject.getInteger("code");
-//                            if (code.equals(200)) {
-//                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-////                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-////                            staProtocol.setStaNo(dto.getStaNo().shortValue());
-////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-////
-////                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-////                            if (!result) {
-////                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-////                            }
-//
-//                                // 鍒ゆ柇閲嶅宸ヤ綔妗�
-//                                WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
-//                                if (wrkMast == null) {
-//                                    continue;
-//                                }
-//
-//                                // 鏇存柊宸ヤ綔涓绘。
-//                                wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
-//                                wrkMast.setModiTime(new Date());
-//                                if (wrkMastMapper.updateById(wrkMast) == 0) {
-//                                    News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
-//                                }
-//
-//                            } else if (code == 500) {
-//                                if (ledThread != null) {
-//                                    String errorMsg = jsonObject.getString("msg");
-//                                    if (!Cools.isEmpty(errorMsg)) {
-//                                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-//                                        ledThread.setLedMk(false);
-//                                    }
-//                                }
-//                                News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
-//                            } else if (code == 700) {
-////                            staProtocol.setWorkNo((short) 32002);
-////                            staProtocol.setRollback102(1);//102绔欏洖閫�淇″彿
-////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-////                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol));
-//
-//                                // led 寮傚父鏄剧ず
-//                                if (ledThread != null) {
-//                                    String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
-//                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-//                                    ledThread.setLedMk(false);
-//                                }
-//                            }
-//                        } catch (Exception e) {
-//                            e.printStackTrace();
-//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-//                        }
+                        try {
+                            //鑾峰彇WMS鍦板潃
+                            Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "WMS_URL").eq(Dict::getStatus, 1));
+                            if (dict == null) {
+                                News.error("WMS鍦板潃鏈厤缃�");
+                                continue;
+                            }
+                            String wmsUrl = dict.getValue();
+
+                            SearchLocParam param = new SearchLocParam();
+                            param.setBarcode(barcode);
+                            param.setIoType(1);
+                            param.setSourceStaNo(inSta.getStaNo());
+                            param.setLocType1(staProtocol.getLocType1().shortValue());
+                            String response = new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/pakin/loc/v2")
+                                    .setJson(JSON.toJSONString(param))
+                                    .build()
+                                    .doPost();
+                            JSONObject jsonObject = JSON.parseObject(response);
+                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+                            Integer code = jsonObject.getInteger("code");
+                            if (code.equals(200)) {
+                                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                                devpThread.writeWorkSta(staProtocol.getSiteId(), dto.getWorkNo().shortValue(), dto.getStaNo().shortValue());
+                                devpThread.setPakMk(staProtocol.getSiteId(), false);
+
+                            } else if (code == 500) {
+                                if (ledThread != null) {
+                                    String errorMsg = jsonObject.getString("msg");
+                                    if (!Cools.isEmpty(errorMsg)) {
+                                        ledThread.error(errorMsg);
+                                        ledThread.setLedMk(false);
+                                    }
+                                }
+                                News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
+                            } else if (code == 700) {
+//                            staProtocol.setWorkNo((short) 32002);
+//                            staProtocol.setRollback102(1);//102绔欏洖閫�淇″彿
+//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol));
+
+                                // led 寮傚父鏄剧ず
+                                if (ledThread != null) {
+                                    String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
+                                    ledThread.error(errorMsg);
+                                    ledThread.setLedMk(false);
+                                }
+                            }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        }
                     }
                 }
             }
@@ -444,7 +430,7 @@
         }
 
         for (Task task : tasks) {
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, 1);
             StaProtocol staProtocol = devpThread.getStation().get(Integer.parseInt(task.getOriginSite()));//婧愮珯
             StaProtocol staProtocol1 = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔�
             if (staProtocol == null || staProtocol1 == null) {
@@ -736,4 +722,152 @@
         }
     }
 
+    /**
+     * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
+     */
+    public void ledExecute() {
+        // 閬嶅巻LED
+        List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+                .eq(Device::getDeviceType, DeviceCtgType.LED.val())
+                .eq(Device::getStatus, 1));
+        for (Device ledDevice : list) {
+            //鑾峰彇led鏁版嵁
+            BasLed led = basLedService.getOne(new LambdaQueryWrapper<BasLed>()
+                    .eq(BasLed::getDeviceId, ledDevice.getId()));
+            List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
+
+            // 鑾峰彇杈撻�佺嚎plc绾跨▼
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue());
+            // 鍛戒护闆嗗悎
+            List<LedCommand> commands = new ArrayList<>();
+            // 宸ヤ綔妗i泦鍚�
+            List<Task> tasks = new ArrayList<>();
+            for (Integer staNo : staArr) {
+                // 鑾峰彇鍙夎溅绔欑偣
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+                // 鑾峰彇宸ヤ綔妗f暟鎹�
+                Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, staProtocol.getWorkNo()));
+                if (null == task) {
+                    continue;
+                }
+
+                tasks.add(task);
+                // 缁勮鍛戒护
+                LedCommand ledCommand = new LedCommand();
+                ledCommand.setWorkNo(task.getTaskNo());
+                ledCommand.setIoType(task.getTaskCtg().intValue());
+                ledCommand.setTitle(task.getTaskCtg$());
+                ledCommand.setSourceLocNo(task.getOriginLoc());
+                ledCommand.setLocNo(task.getDestLoc());
+                ledCommand.setStaNo(Integer.parseInt(task.getDestSite()));
+
+                try {
+                    //鑾峰彇WMS鍦板潃
+                    Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "WMS_URL").eq(Dict::getStatus, 1));
+                    if (dict != null) {
+                        String wmsUrl = dict.getValue();
+
+                        HashMap<String, Object> param = new HashMap<>();
+                        param.put("taskNo", task.getTaskNo());
+                        String response = new HttpHandler.Builder()
+                                .setUri(wmsUrl)
+                                .setPath("/queryTask")
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        Integer code = jsonObject.getInteger("code");
+                        if (code.equals(200)) {
+                            List<MatDto> matDtos = JSON.parseArray(jsonObject.getString("data"), MatDto.class);
+                            ledCommand.setMatDtos(matDtos);
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+                commands.add(ledCommand);
+            }
+            // 鑾峰彇LED绾跨▼
+            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, ledDevice.getId().intValue());
+            // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+            if (!commands.isEmpty()) {
+                ledThread.write(commands);
+                ledThread.setLedMk(false);
+            }
+        }
+    }
+
+    /**
+     * 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
+     */
+    public void ledReset() {
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+                .eq(Device::getDeviceType, DeviceCtgType.LED.val())
+                .eq(Device::getStatus, 1));
+        for (Device ledDevice : list) {
+            //鑾峰彇led鏁版嵁
+            BasLed led = basLedService.getOne(new LambdaQueryWrapper<BasLed>()
+                    .eq(BasLed::getDeviceId, ledDevice.getId()));
+            List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
+
+            // 鑾峰彇杈撻�佺嚎plc绾跨▼
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue());
+            // 鍛戒护闆嗗悎
+            boolean reset = true;
+            for (Integer staNo : staArr) {
+                // 鑾峰彇鍙夎溅绔欑偣
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (staProtocol == null) {
+                    continue;
+                }
+                if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) {
+                    reset = false;
+                    break;
+                }
+            }
+            // 鑾峰彇led绾跨▼
+            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, ledDevice.getId().intValue());
+            // led鏄剧ず榛樿鍐呭
+            if (reset && !ledThread.isLedMk()) {
+                ledThread.errorReset();
+                ledThread.setLedMk(true);
+            }
+        }
+
+        for (Device ledDevice : list) {
+            //鑾峰彇led鏁版嵁
+            BasLed led = basLedService.getOne(new LambdaQueryWrapper<BasLed>()
+                    .eq(BasLed::getDeviceId, ledDevice.getId()));
+            List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
+
+            // 鑾峰彇杈撻�佺嚎plc绾跨▼
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue());
+            // 鍛戒护闆嗗悎
+            boolean reset = true;
+            for (Integer staNo : staArr) {
+                // 鑾峰彇鍙夎溅绔欑偣
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (staProtocol == null) { continue; }
+                if (staProtocol.getWorkNo() != 0) {
+                    reset = false;
+                    break;
+                }
+            }
+            // 鑾峰彇led绾跨▼
+            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, ledDevice.getId().intValue());
+            // led鏄剧ず榛樿鍐呭
+            if (reset && !ledThread.isLedMk()) {
+                ledThread.reset();
+                ledThread.setLedMk(true);
+            }
+        }
+    }
+
 }

--
Gitblit v1.9.1