From 19b3cd8d64af08e5c0b3bd680c699e46a07e13d3 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期五, 18 七月 2025 15:50:44 +0800
Subject: [PATCH] #预调度生成任务

---
 src/main/java/com/zy/core/model/protocol/StaProtocol.java   |    2 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  106 ++++++++++++++++++++------
 src/main/java/com/zy/core/thread/SiemensDevpThread.java     |   77 ++++++++++++++++++
 3 files changed, 155 insertions(+), 30 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 fc27a46..0c9f582 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -49,6 +49,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -125,16 +126,90 @@
                 LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                StaProtocol staProtocolIn = devpThread.getStation().get(inSta.getStaNo() -1);
+                if (staProtocolIn == null) {
+                    continue;
+                } else {
+                    staProtocolIn = staProtocolIn.clone();
+                }
+                if (barcodeThread == null) {
+                    continue;
+                }
+                String barcode = barcodeThread.getBarcode();
+                if(staProtocolIn.getStamp() == 1) {
+                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                            .eq("barcode", barcode)
+                            .in("io_type", 107, 103, 57));
+                    if (!Cools.isEmpty(checkPick)) {
+                        continue;
+                    }
+                    try {
+                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
+
+                        SearchLocParam param = new SearchLocParam();
+                        locTypeDto.setLocType1((short) 1);
+                        param.setBarcode(barcode);
+                        param.setIoType(1);
+                        param.setSourceStaNo(inSta.getStaNo());
+                        param.setLocType1(locTypeDto.getLocType1());
+                        param.setWeight(staProtocol.getWeight());
+                        String response = new HttpHandler.Builder()
+                                .setTimeout(30, TimeUnit.SECONDS)
+                                .setUri(wmsUrl)
+                                .setPath("/rpc/pakin/loc/v1")
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        if (jsonObject.getInteger("code").equals(200)) {
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                            barcodeThread.setBarcode("");
+                            staProtocol.setWorkNo(dto.getWorkNo());
+                            //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
+                            staProtocol.setStaNo(dto.getStaNo().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
+                            log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo());
+
+                            ledThread.errorReset();
+                            log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
+
+                            if (!result) {
+                                News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
+
+                                throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                            }
+                        } else {
+                            if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) {
+                                continue;
+                            }
+                            staProtocol.setWorkNo(wrkNo);
+                            wrkNo++;
+                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo());
+
+//                            if (ledThread != null) {
+                            String errorMsg = jsonObject.getString("msg");
+                            if (!Cools.isEmpty(errorMsg)) {
+                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
+                            }
+//                            }
+//                            News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    }
+                }
+
                 if (staProtocol == null) {
                     continue;
                 } else {
                     staProtocol = staProtocol.clone();
                 }
 
-                if (barcodeThread == null) {
-                    continue;
-                }
-                String barcode = barcodeThread.getBarcode();
                 // 灏哄妫�娴嬪紓甯�
                 boolean back = false;
                 String errMsg = "";
@@ -226,7 +301,7 @@
 //
 //                        }
                         News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
-                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo()));
+//                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑浠诲姟,宸ヤ綔鍙�=" + wrkMast.getWrkNo()));
                         continue;
 //                        barcodeThread.setBarcode("");
 //                        staProtocol.setWorkNo(wrkMast.getWrkNo());
@@ -291,27 +366,6 @@
                             }
                         } else {
                             if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) {
-
-                                //宸ヤ綔妗e凡瀛樺湪    鍐嶆杩涘幓
-//                                wrkMast = wrkMastMapper.selectPakInStepBarcode(barcode);
-//                                if (wrkMast != null) {
-//                                    barcodeThread.setBarcode("");
-//                                    staProtocol.setWorkNo(9999);
-//                                    //staProtocol.setWorkNo(wrkMast.getWrkNo());
-//                                    //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
-//                                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
-//                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//                                    log.error("杈撻�佺嚎涓嬪彂2锛�" + wrkMast.getWrkNo() + "," + wrkMast.getStaNo());
-//                                    ledThread.errorReset();
-//                                    log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎");
-//                                    if (!result) {
-//                                        News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
-//
-//                                        throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-//                                    }
-//                                }
-
                                 continue;
                             }
                             staProtocol.setWorkNo(wrkNo);
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index 090619e..5395af5 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -58,7 +58,7 @@
     // 闅斿绔欑偣锛堝彴杞︿綅缃級
     private String nearbySta;
 
-    //lfd鍏ュ簱鍗拌  褰搒tamp>=2鏃舵墠鍏ュ簱
+    //gl蹇�熺敓鎴愪换鍔�  stamp=1鏃剁洿鎺ョ敓鎴愪换鍔�
     private Integer stamp = 0;
 
     // 澶栧舰妫�娴� ------------------------------------------------------------------------
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 4055c3b..627bb17 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -95,6 +95,16 @@
         add(203);add(205);add(208);add(211);
     }};
 
+    public static final ArrayList<Integer> staNosInList1 = new ArrayList<Integer>() {{
+        add(122);
+        add(222);add(224);add(227);add(230);
+    }};
+
+    public static final ArrayList<Integer> staNosInList2 = new ArrayList<Integer>() {{
+        add(101); add(104);add(106);add(108);
+        add(202);add(204);add(207);add(210);
+    }};
+
     private Integer count=0;
 
     /**
@@ -117,6 +127,17 @@
 
     public SiemensDevpThread(DevpSlave slave) {
         this.slave = slave;
+    }
+
+    private ArrayList<Integer> getStaNoIn() {
+        switch (slave.getId()) {
+            case 1:
+                return staNosInList1;
+            case 2:
+                return staNosInList2;
+            default:
+                throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
+        }
     }
 
     private ArrayList<Integer> getStaNoErr() {
@@ -182,6 +203,9 @@
                     case 2:
                         write((StaProtocol)task.getData());
                         log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
+                        break;
+                    case 3:
+                        write2((StaProtocol)task.getData());
                         break;
                     default:
                         break;
@@ -271,6 +295,7 @@
         ArrayList<Integer> staNos = getStaNo();
         ArrayList<Integer> staNosErrList = getStaNoErr();
         ArrayList<Integer> staNoWeight = getStaNoWeight();
+        ArrayList<Integer> staNosInList = getStaNoIn();
         int staNoSize = staNos.size();
         OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (500 * 8));
         OperateResultExOne<byte[]> resultWeight = null;
@@ -355,6 +380,20 @@
                 }
             }
 
+            //鍏ュ簱婊¤冻
+            ArrayList<Integer> staNosIns = staNosInList;
+            int staNosInSize = staNosIns.size();
+            OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6));
+            if(resultIn.IsSuccess){
+                for (int i = 0; i < staNosInSize; i++) {
+                    Integer siteId = staNosIns.get(i);
+                    StaProtocol staProtocol = station.get(siteId);
+                    staProtocol.setStamp(siemensS7Net.getByteTransform().TransInt32(result.Content, i*6));
+                }
+            }
+
+
+
 //        //plc鏁呴殰
 //        OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.1728", (short) (staNoSize*4));
 //        if (resultErr2.IsSuccess) {
@@ -432,9 +471,41 @@
         }
 
 
-    /**
-     * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
-     */
+
+    private void write2(StaProtocol staProtocol) throws InterruptedException {
+        OperateResult write = null;
+        int writeCount = 0;
+        ArrayList<Integer> staNosInList = getStaNoIn();
+
+        ArrayList<Integer> staNosIns = staNosInList;
+        int staNosInSize = staNosIns.size();
+        OperateResultExOne<byte[]> resultIn = siemensS7Net.Read("DB1000.0", (short) (staNosInSize * 6));
+        int offset = 0;
+        if(resultIn.IsSuccess){
+            for (int i = 0; i < staNosInSize; i++) {
+                Integer siteId = staNosIns.get(i);
+                if(staProtocol.getSiteId() == siteId){
+                    offset = i;
+                }
+            }
+        }
+        do {
+            write = siemensS7Net.Write("DB1000." + offset*6 + 2,staProtocol.getWorkNo());    // 宸ヤ綔鍙�
+
+            if(write.IsSuccess ){
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                break;
+            }
+            else {
+                writeCount++;
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+            }
+        }while (writeCount<5);
+    }
+
+        /**
+         * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
+         */
     private void write(StaProtocol staProtocol) throws InterruptedException {
         if (null == staProtocol) {
             return;

--
Gitblit v1.9.1