From 58bb9d3e0a8d8c385085f8cce3492eccf5448ec4 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期三, 10 九月 2025 16:20:12 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java |  436 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 372 insertions(+), 64 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
index db82921..db9082c 100644
--- a/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -1,11 +1,15 @@
 package com.zy.asrs.service.impl;
 
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.zy.asrs.entity.LocMast;
-import com.zy.asrs.entity.WrkMast;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.DateUtils;
+import com.core.exception.CoolException;
+import com.zy.asrs.domain.param.OpenBusSubmitParam;
+import com.zy.asrs.domain.param.TaskDto;
 import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.WrkMastService;
+import com.zy.common.utils.HttpHandler;
 import com.zy.common.utils.News;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
@@ -15,12 +19,15 @@
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.SiemensDevpThread;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -29,10 +36,22 @@
 @Slf4j
 @Service("ctuMainService")
 @Transactional
+@Data
 public class CtuMainServiceImpl {
 
     public static final long COMMAND_TIMEOUT = 5 * 1000;
 
+    @Value("${ctu.url}")
+    private String ctuUrl;
+
+    @Value("${ctu.sendTask}")
+    private String sendTask;
+
+    @Value("${ctu.getLoc}")
+    private String getLoc;
+
+    @Value("${ctu.update}")
+    private String updateSta;
 
     @Autowired
     private SlaveProperties slaveProperties;
@@ -46,64 +65,113 @@
     @Autowired
     private WrkMastService wrkMastService;
 
+    private boolean flag1001 = false;
 
-    public Integer wrkNo = 10000;
+    private boolean flag1007 = false;
+
+    private Map<Integer, Long> staNoSet = new HashMap<>();
+
+    public Map<Integer, Long> getStaNoSet() {
+        return staNoSet;
+    }
+
+    public void setStaNoSet(Map<Integer, Long> staNoSet) {
+        this.staNoSet = staNoSet;
+    }
 
     /**
      * 鍏ュ簱锛屼粠鎷f枡绔欏埌鍏ュ簱绔欙紙CTU鍙栬揣绔欙級
      */
     public synchronized void generateStoreWrkFile(Integer mark) {
-        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻鍏ュ簱鍙�
-            for (DevpSlave.Sta inSta : devp.getInSta()) {
-                // 鑾峰彇鍏ュ簱绔欎俊鎭�
-                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
-                if (staProtocol == null) {
-                    continue;
-                } else {
-                    staProtocol = staProtocol.clone();
-                }
-                // 鍒ゆ柇鏄惁婊¤冻鏉′欢
-//                if (!staProtocol.isLoading()) {
-//                    continue;
-//                }
-                // && staProtocol.isInEnable()
-                if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
-                    WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
-                    if (wrkMast != null) {
-                        //涓嬪彂绉诲姩浠诲姟锛屽苟鐢熸垚鍏ュ簱宸ヤ綔妗�
-                        WrkMast in = new WrkMast();
-                        wrkMast.setWrkSts(223L);
-                        wrkMast.setModiTime(new Date());
-                        wrkMastService.updateById(wrkMast);
-                        in.setSourceLocNo("1007");
-                        in.setLocNo(wrkMast.getSourceLocNo());
-                        in.setIoType(10);
-                        in.setIoTime(new Date());
-                        in.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-                        in.setIoPri(13D); // 浼樺厛绾э細13
-                        in.setFullPlt("Y"); // 婊℃澘锛歒
-                        in.setPicking("N"); // 鎷f枡
-                        in.setExitMk("N"); // 閫�鍑�
-                        in.setEmptyMk("Y"); // 绌烘澘
-                        in.setLinkMis("N");
-                        in.setAppeTime(new Date());
-                        in.setModiTime(new Date());
-                        in.setBarcode(wrkMast.getBarcode());
-                        in.setPlcWrkNo(wrkMast.getPlcWrkNo());
-                        wrkMastService.insert(in);
-                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
-                        locMast.setLocSts("S");
-                        locMast.setModiTime(new Date());
-                        locMastService.selectById(locMast);
-                    }
-                }
+        for (Map.Entry<Integer, Long> entry : staNoSet.entrySet()) {
+            if (entry.getValue() != null && System.currentTimeMillis() - entry.getValue() > 1000 * 60 * 5) {
+                log.info("瓒呮椂锛歿}", entry.getKey());
+                staNoSet.remove(entry.getKey());
             }
+        }
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol = devpThread.getStation().get(1004);
+        if (staProtocol == null) {
+            return;
+        } else {
+            staProtocol = staProtocol.clone();
+        }
+        // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+        if (!staProtocol.isLoading()) {
+            return;
+        }
+        Long i = staNoSet.get(staProtocol.getWorkNo());
+        if (i != null) {
+            return;
+        }
+        // && staProtocol.isInEnable()
+        if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
+            if (staProtocol.getStaNo() == 1004) {
+                try {
+                    Thread.sleep(8000L);
+                } catch (InterruptedException e) {
+                    throw new RuntimeException(e);
+                }
+                staProtocol.setStaNo((short) 1007);
+                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+                staNoSet.put(staProtocol.getWorkNo(), System.currentTimeMillis());
+                log.info("鍏ュ簱杈撻�佺嚎涓嬪彂锛歿},{}", staProtocol.getWorkNo(), 1007);
+
+            }
+//                    WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
+//                    if (wrkMast != null) {
+//                        //涓嬪彂绉诲姩浠诲姟锛屽苟鐢熸垚鍏ュ簱宸ヤ綔妗�
+//                        WrkMast in = new WrkMast();
+//                        wrkMast.setWrkSts(223L);
+//                        wrkMast.setModiTime(new Date());
+//                        wrkMastService.updateById(wrkMast);
+//                        in.setSourceLocNo("1007");
+//                        in.setLocNo(wrkMast.getSourceLocNo());
+//                        in.setIoType(10);
+//                        in.setIoTime(new Date());
+//                        in.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+//                        in.setIoPri(13D); // 浼樺厛绾э細13
+//                        in.setFullPlt("Y"); // 婊℃澘锛歒
+//                        in.setPicking("N"); // 鎷f枡
+//                        in.setExitMk("N"); // 閫�鍑�
+//                        in.setEmptyMk("Y"); // 绌烘澘
+//                        in.setLinkMis("N");
+//                        in.setAppeTime(new Date());
+//                        in.setModiTime(new Date());
+//                        in.setBarcode(wrkMast.getBarcode());
+//                        in.setPlcWrkNo(wrkMast.getPlcWrkNo());
+//                        wrkMastService.insert(in);
+//                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+//                        locMast.setLocSts("S");
+//                        locMast.setModiTime(new Date());
+//                        locMastService.updateById(locMast);
+//                    }
+
         }
     }
 
+
+    public synchronized void outToPlc(Integer mark) {
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol = devpThread.getStation().get(1007);
+        if (staProtocol == null) {
+            return;
+        } else {
+            staProtocol = staProtocol.clone();
+        }
+        // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+        if (!staProtocol.isLoading()) {
+            return;
+        }
+        if (flag1007 && staProtocol.getWorkNo() > 0 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
+            staProtocol.setWorkNo(0);
+            staProtocol.setStaNo((short) 0);
+            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+            log.info("鍙栬蛋鍐欏叆纭浣嶏細{},{}", staProtocol.getWorkNo(), 1007);
+        }
+    }
 
     /**
      * 鍑哄簱
@@ -130,30 +198,29 @@
                     News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     // 106涔熺畻涓婏紝浠ュ悗106-銆�107鐢ㄤ簬鏇存柊搴撳瓨
-                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", "1001").in("wrk_sts", 106,107));
-                    if (wrkMast == null) {
-                        continue;
-                    }
+//                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", "1001").in("wrk_sts", 106, 107));
+//                    if (wrkMast == null) {
+//                        continue;
+//                    }
 
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-                    staProtocol.setWorkNo(wrkMast.getPlcWrkNo());
+                    staProtocol.setWorkNo((int) (Math.random() * 10000));
                     staProtocol.setStaNo((short) 1004);
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                    log.info("杈撻�佺嚎涓嬪彂3锛歿},{}", wrkMast.getWrkNo(), 1004);
+                    log.info("杈撻�佺嚎涓嬪彂3锛歿},{}", staProtocol.getWorkNo(), 1004);
                     if (result) {
-                        // 鏇存柊宸ヤ綔涓绘。
-                        wrkMast.setWrkSts(108L);
-                        wrkMast.setModiTime(new Date());
-                        if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+                        try {
+                            Thread.sleep(8000L);
+                        } catch (InterruptedException e) {
+                            throw new RuntimeException(e);
                         }
+                        setFlag1001(false);
                     } else {
                         News.error("" + mark + " - 2" + " - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
                     }
-
                 } else {
                     News.errorNoLog("" + mark + " - 6" + " - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 鑷姩淇″彿锛�" + staProtocol.isLoading() + "銆佸彲鍏ヤ俊鍙凤細" + staProtocol.isInEnable() + "銆佺┖鏉夸俊鍙凤細" + staProtocol.isEmptyMk() + "銆佸伐浣滃彿锛�" + staProtocol.getWorkNo() + "銆侀攣瀹氭爣璁�" + staProtocol.isPakMk() + "銆佸叆搴撳嵃璁帮細" + staProtocol.getStamp());
                 }
@@ -161,4 +228,245 @@
         }
     }
 
+    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
+        add(1001);
+        add(1002);
+        add(1003);
+        add(1004);
+        add(1005);
+        add(1006);
+        add(1007);
+
+    }};
+
+    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+
+        add(101);
+        add(102);
+        add(103);
+        add(104);
+        add(105);
+        add(106);
+        add(107);
+        add(108);
+    }};
+
+    public synchronized void in(Integer mark) {
+        // 閬嶅巻鍏ュ簱鍙�
+        for (Integer inSta : staNos2) {
+            // 鑾峰彇鍏ュ簱绔欎俊鎭�
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            StaProtocol staProtocol = devpThread.getStation().get(inSta);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+            if (!staProtocol.isAutoing() && !staProtocol.isLoading()) {
+                continue;
+            }
+            // && staProtocol.isInEnable()
+            if (staProtocol.isInEnable()) {
+                OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+                openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+                List<TaskDto> taskList = new ArrayList<>();
+                TaskDto taskDto = new TaskDto();
+                Random rand = new Random();
+                taskDto.setSeqNum(rand.nextInt(10000) + "");
+                taskDto.setDestLoc(getFLoc(staProtocol.getSiteId() + "-2", "15"));
+                taskDto.setOriSta(staProtocol.getSiteId() + "-2");
+                taskDto.setPriority(123);
+                taskList.add(taskDto);
+                openBusSubmitParam.setTaskList(taskList);
+                sendTask(openBusSubmitParam, staProtocol);
+            }
+            if (staProtocol.isOutEnable()) {
+                OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+                openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+                List<TaskDto> taskList = new ArrayList<>();
+                TaskDto taskDto = new TaskDto();
+                Random rand = new Random();
+                taskDto.setSeqNum(rand.nextInt(10000) + "");
+                taskDto.setDestLoc(getFLoc(staProtocol.getSiteId() + "-3", "15"));
+                taskDto.setOriSta(staProtocol.getSiteId() + "-3");
+                taskDto.setPriority(123);
+                taskList.add(taskDto);
+                openBusSubmitParam.setTaskList(taskList);
+                sendTask(openBusSubmitParam, staProtocol);
+            }
+        }
+    }
+
+    public synchronized void autoOut(Integer mark) {
+        int i = 0;
+        for (Integer staNo : staNos1) {
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            StaProtocol staProtocol = devpThread.getStation().get(staNo);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+            if (!staProtocol.isAutoing()) {
+                continue;
+            }
+            if (staProtocol.isLoading()) {
+                continue;
+            }
+            if (staProtocol.getStaNo() != 0) {
+                continue;
+            }
+            i++;
+        }
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol = devpThread.getStation().get(1001);
+        if (i >= 7) {
+            OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+            openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+            List<TaskDto> taskList = new ArrayList<>();
+            TaskDto taskDto = new TaskDto();
+            Random rand = new Random();
+            taskDto.setSeqNum("SSX-CK" + rand.nextInt() * 10000);
+            taskDto.setOriLoc(getFLoc("1001", "16"));
+            taskDto.setDestSta("1001");
+            taskDto.setPriority(123);
+            taskList.add(taskDto);
+            openBusSubmitParam.setTaskList(taskList);
+            sendTask(openBusSubmitParam, staProtocol);
+        }
+    }
+
+    /**
+     * 1007鍏ュ簱
+     *
+     * @param mark
+     */
+    public synchronized void autoIn(Integer mark) {
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol = devpThread.getStation().get(1007);
+        if (staProtocol == null) {
+            return;
+        } else {
+            staProtocol = staProtocol.clone();
+        }
+        // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+        if (!staProtocol.isAutoing()) {
+            return;
+        }
+        if (!staProtocol.isLoading()) {
+            return;
+        }
+        if (staProtocol.getStaNo() <= 0) {
+            return;
+        }
+        OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+        openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+        List<TaskDto> taskList = new ArrayList<>();
+        TaskDto taskDto = new TaskDto();
+        taskDto.setSeqNum("SSX-RK" + staProtocol.getWorkNo());
+        taskDto.setDestLoc(getFLoc("1007", "15"));
+        taskDto.setOriSta("1007");
+        taskDto.setPriority(123);
+        taskList.add(taskDto);
+        openBusSubmitParam.setTaskList(taskList);
+        sendTask(openBusSubmitParam, staProtocol);
+
+    }
+
+
+    public void updateSta(Integer mark) {
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        StaProtocol staProtocol1 = devpThread.getStation().get(1001);
+        StaProtocol staProtocol7 = devpThread.getStation().get(1007);
+        if (staProtocol1 == null) {
+            return;
+        }
+        if (staProtocol7 == null) {
+            return;
+        }
+        updateSta("1001", staProtocol1.isLoading() ? "16" : "15");
+        updateSta("1007", staProtocol7.isLoading() ? "16" : "15");
+    }
+
+    @Transactional
+    public boolean sendTask(OpenBusSubmitParam openBusSubmitParam, StaProtocol staProtocol) {
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(ctuUrl)
+                    .setPath(sendTask)
+                    .setTimeout(1200, TimeUnit.SECONDS)
+                    .setJson(JSON.toJSONString(openBusSubmitParam))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+                log.info("涓嬪彂浠诲姟杩斿洖鏁版嵁锛歿}", response);
+                return true;
+            } else {
+                log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response);
+                throw new CoolException("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊");
+            }
+        } catch (Exception e) {
+            //log.error("fail", e);
+        }
+        return false;
+    }
+
+    @Transactional
+    public void updateSta(String staNo, String sts) {
+        Map<String, String> data = new HashMap<String, String>();
+        data.put("staNo", staNo);
+        data.put("sts", sts);
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(ctuUrl)
+                    .setPath(updateSta)
+                    .setTimeout(1200, TimeUnit.SECONDS)
+                    .setJson(JSON.toJSONString(data))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+                //log.info("涓嬪彂浠诲姟杩斿洖鏁版嵁锛歿}", response);
+            } else {
+                //log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ctuUrl + sendTask, JSON.toJSONString(data), response);
+                //throw new CoolException("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊");
+            }
+        } catch (Exception e) {
+            log.error("fail", e);
+        }
+    }
+
+    @Transactional
+    public String getFLoc(String staNo, String sts) {
+        Map<String, String> data = new HashMap<String, String>();
+        data.put("staNo", staNo);
+        data.put("sts", sts);
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(ctuUrl)
+                    .setPath(getLoc)
+                    .setTimeout(1200, TimeUnit.SECONDS)
+                    .setJson(JSON.toJSONString(data))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+                //log.info("涓嬪彂浠诲姟杩斿洖鏁版嵁锛歿}", response);
+                JSONObject loc = JSON.parseObject(jsonObject.getString("data"));
+                return loc.getString("locNo");
+            } else {
+                log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ctuUrl + sendTask, JSON.toJSONString(data), response);
+                throw new CoolException("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊");
+            }
+        } catch (Exception e) {
+            log.error("fail", e);
+        }
+        return null;
+    }
 }

--
Gitblit v1.9.1