From 510a21954afdf40479bdf293568cc7979e6043ad Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期三, 07 一月 2026 16:15:53 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java |  686 ++++++++++++++++++++++++++------------------------------
 1 files changed, 318 insertions(+), 368 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 9c94401..ad3df00 100644
--- a/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -1,14 +1,12 @@
 package com.zy.asrs.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 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.asrs.controller.requestParam.StationRequestParam;
+import com.zy.asrs.domain.vo.StationStatus;
+import com.zy.asrs.service.CtuMainService;
 import com.zy.common.utils.HttpHandler;
 import com.zy.common.utils.News;
 import com.zy.core.cache.MessageQueue;
@@ -26,8 +24,10 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -37,401 +37,351 @@
 @Service("ctuMainService")
 @Transactional
 @Data
-public class CtuMainServiceImpl {
+public class CtuMainServiceImpl implements CtuMainService {
 
     public static final long COMMAND_TIMEOUT = 5 * 1000;
+    private static final long SLEEP_DURATION = 8000L;
+    private static final int MAX_WORK_NO = 9999;
+    private static final int RANDOM_WORK_NO_MAX = 10000;
+    private static final int CTU_STATION_1001 = 1001;
+    private static final int CTU_STATION_1007 = 1007;
+    private static final int CTU_STATION_1006 = 1006;
+    private static final int CTU_STATION_1004 = 1004;
 
     @Value("${ctu.url}")
     private String ctuUrl;
 
-    @Value("${ctu.sendTask}")
-    private String sendTask;
-
-    @Value("${ctu.getLoc}")
-    private String getLoc;
-
-    @Value("${ctu.update}")
-    private String updateSta;
+    @Value("${ctu.station}")
+    private String station;
 
     @Autowired
     private SlaveProperties slaveProperties;
 
-    @Autowired
-    private WrkMastMapper wrkMastMapper;
+    // 涓轰笉鍚岀殑鎿嶄綔娣诲姞缁嗙矑搴﹂攣
+    private final ReentrantLock outLock = new ReentrantLock();
+    private final ReentrantLock inLock = new ReentrantLock();
+    private final ReentrantLock in2Lock = new ReentrantLock();
 
-    @Autowired
-    private LocMastService locMastService;
-
-    @Autowired
-    private WrkMastService wrkMastService;
-
-    private boolean flag1001 = false;
-
-    private boolean flag1007 = false;
-
+    /**
+     * 鍑哄簱鐨勬椂鍊欙紝璁惧涓婅蛋
+     */
+    @Override
+    public void out(Integer mark) {
+        executeWithLock(outLock, () -> {
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                for (DevpSlave.Sta outSta : devp.getOutSta()) {
+                    processOutboundStation(devp, outSta, mark);
+                }
+            }
+        }, "鍑哄簱澶勭悊");
+    }
 
     /**
      * 鍏ュ簱锛屼粠鎷f枡绔欏埌鍏ュ簱绔欙紙CTU鍙栬揣绔欙級
      */
-    public synchronized void generateStoreWrkFile(Integer mark) {
-        // 鏍规嵁杈撻�佺嚎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;
-//        }
-        // && 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));
-                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);
-//                    }
-
-        }
+    @Override
+    public void in(Integer mark) {
+        executeWithLock(inLock, () -> processInboundStation(mark, CTU_STATION_1004, (short) CTU_STATION_1006), "鍏ュ簱澶勭悊");
     }
 
+    @Override
+    public void in2(Integer mark) {
+        executeWithLock(in2Lock, () -> {
+            // 鑾峰彇1007绔欑偣淇℃伅
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            if (devpThread == null) {
+                log.warn("鏃犳硶鑾峰彇璁惧绾跨▼锛岃澶嘔D: 1");
+                return;
+            }
+            
+            StaProtocol staProtocol = getStationProtocol(devpThread, CTU_STATION_1007);
+            if (staProtocol == null || !isStationReadyForProcessing(staProtocol)) {
+                return;
+            }
 
-    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()) {
-            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol));
-            log.info("鍙栬蛋鍐欏叆纭浣嶏細{},{}", staProtocol.getWorkNo(), 1007);
+            if (staProtocol.getWorkNo() > 0 && 
+                staProtocol.isAutoing() && 
+                !staProtocol.isEmptyMk() && 
+                staProtocol.isPakMk()) {
+                
+                if (station(CTU_STATION_1007)) {
+                    Integer workNo = staProtocol.getWorkNo();
+                    
+                    // 娓呯┖1007绔欑偣
+                    clearStationProtocol(staProtocol, devpThread);
+                    
+                    // 鏇存柊1006绔欑偣淇℃伅
+                    updateStation1006(devpThread, workNo);
+                }
+            }
+        }, "鍏ュ簱绗簩姝ュ鐞�");
+    }
+
+    @Override
+    @Transactional
+    public boolean station(Integer staNo) {
+        return checkStationStatus(staNo);
+    }
+
+    /**
+     * 鍦ㄩ攣鐨勪繚鎶や笅鎵ц鎿嶄綔
+     * @param lock 閿�
+     * @param operation 瑕佹墽琛岀殑鎿嶄綔
+     * @param operationName 鎿嶄綔鍚嶇О锛岀敤浜庢棩蹇�
+     */
+    private void executeWithLock(ReentrantLock lock, Runnable operation, String operationName) {
+        lock.lock();
+        try {
+            operation.run();
+        } catch (Exception e) {
+            log.error("{}寮傚父", operationName, e);
+            News.error("{}寮傚父: {}", operationName, e.getMessage());
+        } finally {
+            lock.unlock();
         }
     }
 
     /**
-     * 鍑哄簱
+     * 澶勭悊鍑哄簱绔欑偣
+     * @param devp 璁惧
+     * @param outSta 鍑哄簱绔欑偣
+     * @param mark 鏍囪
      */
-    public synchronized void out(Integer mark) {
-        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻鍏ュ簱鍙�
-            for (DevpSlave.Sta inSta : devp.getOutSta()) {
-                // 鑾峰彇鍏ュ簱绔欎俊鎭�
-                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.isOutEnable()
-                if (flag1001 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
-                    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;
-//                    }
-
-                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-
-                    // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-                    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锛歿},{}", staProtocol.getWorkNo(), 1004);
-                    if (result) {
-                        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());
-                }
-            }
-        }
-    }
-
-    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();
-            taskDto.setSeqNum(Math.random() * 1000 + "");
-            taskDto.setOriLoc(getFLoc("1001", "16"));
-            taskDto.setDestSta("1001");
-            taskDto.setPriority(123);
-            taskList.add(taskDto);
-            openBusSubmitParam.setTaskList(taskList);
-            sendTask(openBusSubmitParam, staProtocol);
-        }
-    }
-
-
-    public synchronized void autoIn(Integer mark) {
-        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-        StaProtocol staProtocol = devpThread.getStation().get(1007);
-        if (staProtocol == null) {
+    private void processOutboundStation(DevpSlave devp, DevpSlave.Sta outSta, Integer mark) {
+        SiemensDevpThread devpThread = getDeviceThread(SlaveType.Devp, devp.getId());
+        if (devpThread == null) {
+            log.warn("鏃犳硶鑾峰彇璁惧绾跨▼锛岃澶嘔D: {}", devp.getId());
             return;
+        }
+        
+        StaProtocol staProtocol = getStationProtocol(devpThread, outSta.getStaNo());
+        if (staProtocol == null || !isStationReadyForProcessing(staProtocol)) {
+            return;
+        }
+        
+        if (isOutboundConditionMet(staProtocol) && station(CTU_STATION_1001)) {
+            executeOutboundProcess(staProtocol, devp, mark, devpThread);
         } else {
-            staProtocol = staProtocol.clone();
+            logStationConditionError(mark, staProtocol);
         }
-        // 鍒ゆ柇鏄惁婊¤冻鏉′欢
-        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(Math.random() * 1000 + "");
-        taskDto.setDestLoc(getFLoc("1007", "15"));
-        taskDto.setOriLoc("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");
+    /**
+     * 妫�鏌ュ嚭搴撴潯浠舵槸鍚︽弧瓒�
+     * @param staProtocol 绔欑偣鍗忚
+     * @return 鏉′欢鏄惁婊¤冻
+     */
+    private boolean isOutboundConditionMet(StaProtocol staProtocol) {
+        return staProtocol.isAutoing() && 
+               !staProtocol.isEmptyMk() && 
+               (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == MAX_WORK_NO) && 
+               staProtocol.isPakMk();
     }
 
-    @Transactional
-    public void 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);
-            } else {
-                log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response);
-                throw new CoolException("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊");
+    /**
+     * 鎵ц鍑哄簱澶勭悊
+     * @param staProtocol 绔欑偣鍗忚
+     * @param devp 璁惧
+     * @param mark 鏍囪
+     * @param devpThread 璁惧绾跨▼
+     */
+    private void executeOutboundProcess(StaProtocol staProtocol, DevpSlave devp, Integer mark, SiemensDevpThread devpThread) {
+        News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛�");
+        // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+        staProtocol.setWorkNo((int) (Math.random() * RANDOM_WORK_NO_MAX));
+        staProtocol.setStaNo((short) CTU_STATION_1004);
+        devpThread.setPakMk(staProtocol.getSiteId(), false);
+        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+        log.info("杈撻�佺嚎涓嬪彂3锛歿},{}", staProtocol.getWorkNo(), CTU_STATION_1004);
+        if (result) {
+            sleepWithInterruptHandling(SLEEP_DURATION, "鍑哄簱澶勭悊");
+        } else {
+            News.error("" + mark + " - 2" + " - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+        }
+    }
+
+    /**
+     * 璁板綍绔欑偣鏉′欢閿欒鏃ュ織
+     * @param mark 鏍囪
+     * @param staProtocol 绔欑偣鍗忚
+     */
+    private void logStationConditionError(Integer mark, StaProtocol staProtocol) {
+        String errorMsg = String.format(
+            "%s - 6 - 绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒 鑷姩淇″彿锛�%s銆佸彲鍏ヤ俊鍙凤細%s銆佺┖鏉夸俊鍙凤細%s銆佸伐浣滃彿锛�%s銆侀攣瀹氭爣璁�%s銆佸叆搴撳嵃璁帮細%s",
+            mark, 
+            staProtocol.isLoading(), 
+            staProtocol.isInEnable(), 
+            staProtocol.isEmptyMk(), 
+            staProtocol.getWorkNo(), 
+            staProtocol.isPakMk(), 
+            staProtocol.getStamp()
+        );
+        News.errorNoLog(errorMsg);
+        log.warn(errorMsg);
+    }
+
+    /**
+     * 澶勭悊鍏ュ簱绔欑偣
+     * @param mark 鏍囪
+     * @param sourceStaNo 婧愮珯鐐圭紪鍙�
+     * @param targetStaNo 鐩爣绔欑偣缂栧彿
+     */
+    private void processInboundStation(Integer mark, int sourceStaNo, short targetStaNo) {
+        SiemensDevpThread devpThread = getDeviceThread(SlaveType.Devp, 1);
+        if (devpThread == null) {
+            log.warn("鏃犳硶鑾峰彇璁惧绾跨▼锛岃澶嘔D: 1");
+            return;
+        }
+        
+        StaProtocol staProtocol = getStationProtocol(devpThread, sourceStaNo);
+        if (staProtocol == null || !isStationReadyForProcessing(staProtocol)) {
+            return;
+        }
+        
+        if (staProtocol.getWorkNo() > 0 && 
+            staProtocol.isAutoing() && 
+            !staProtocol.isEmptyMk() && 
+            staProtocol.isPakMk()) {
+            
+            if (staProtocol.getStaNo() == sourceStaNo) {
+                sleepWithInterruptHandling(SLEEP_DURATION, "鍏ュ簱澶勭悊");
+                staProtocol.setStaNo(targetStaNo);
+                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+                log.info("鍏ュ簱杈撻�佺嚎涓嬪彂锛歿},{}", staProtocol.getWorkNo(), targetStaNo);
             }
-        } catch (Exception e) {
-            log.error("fail", e);
         }
     }
 
-    @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);
+    /**
+     * 鑾峰彇璁惧绾跨▼
+     * @param slaveType 浠庣被鍨�
+     * @param id 璁惧ID
+     * @return 璁惧绾跨▼
+     */
+    private SiemensDevpThread getDeviceThread(SlaveType slaveType, Integer id) {
+        Object device = SlaveConnection.get(slaveType, id);
+        if (device instanceof SiemensDevpThread) {
+            return (SiemensDevpThread) device;
         }
         return null;
     }
-}
+
+    /**
+     * 鑾峰彇绔欑偣鍗忚瀵硅薄
+     * @param devpThread 璁惧绾跨▼
+     * @param staNo 绔欑偣缂栧彿
+     * @return 绔欑偣鍗忚瀵硅薄
+     */
+    private StaProtocol getStationProtocol(SiemensDevpThread devpThread, int staNo) {
+        try {
+            StaProtocol staProtocol = devpThread.getStation().get(staNo);
+            if (staProtocol != null) {
+                return staProtocol.clone();
+            }
+        } catch (Exception e) {
+            log.error("鑾峰彇绔欑偣鍗忚寮傚父锛岀珯鐐圭紪鍙�: {}", staNo, e);
+        }
+        return null;
+    }
+
+    /**
+     * 妫�鏌ョ珯鐐规槸鍚﹀噯澶囧ソ澶勭悊
+     * @param staProtocol 绔欑偣鍗忚
+     * @return 鏄惁鍑嗗濂�
+     */
+    private boolean isStationReadyForProcessing(StaProtocol staProtocol) {
+        return staProtocol != null && staProtocol.isLoading();
+    }
+
+    /**
+     * 甯︿腑鏂鐞嗙殑鐫$湢
+     * @param duration 浼戠湢鏃堕棿
+     * @param operationName 鎿嶄綔鍚嶇О锛岀敤浜庢棩蹇�
+     */
+    private void sleepWithInterruptHandling(long duration, String operationName) {
+        try {
+            Thread.sleep(duration);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            log.error("{}绾跨▼涓柇寮傚父", operationName, e);
+            throw new RuntimeException(operationName + "绾跨▼涓柇", e);
+        }
+    }
+
+    /**
+     * 娓呯┖绔欑偣鍗忚
+     * @param staProtocol 绔欑偣鍗忚
+     * @param devpThread 璁惧绾跨▼
+     */
+    private void clearStationProtocol(StaProtocol staProtocol, SiemensDevpThread devpThread) {
+        staProtocol.setWorkNo(0);
+        staProtocol.setStaNo((short) 0);
+        boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+        log.info("1007绔欑偣娓呯┖锛歿},{}", staProtocol.getWorkNo(), CTU_STATION_1006);
+    }
+
+    /**
+     * 鏇存柊1006绔欑偣
+     * @param devpThread 璁惧绾跨▼
+     * @param workNo 宸ヤ綔鍙�
+     */
+    private void updateStation1006(SiemensDevpThread devpThread, Integer workNo) {
+        StaProtocol staProtocol1006 = devpThread.getStation().get(CTU_STATION_1006);
+        if (staProtocol1006 != null) {
+            staProtocol1006.setWorkNo(workNo);
+            staProtocol1006.setStaNo((short) CTU_STATION_1007);
+            boolean result2 = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol1006));
+            log.info("1006绔欑偣寰�鍓嶈蛋涓�鏍硷細{},{}", staProtocol1006.getWorkNo(), CTU_STATION_1007);
+        } else {
+            log.warn("鏃犳硶鑾峰彇1006绔欑偣鍗忚");
+        }
+    }
+
+    /**
+     * 妫�鏌ョ珯鐐圭姸鎬�
+     * @param staNo 绔欑偣缂栧彿
+     * @return 绔欑偣鏄惁鍙�氳
+     */
+    private boolean checkStationStatus(Integer staNo) {
+        StationRequestParam stationRequestParam = new StationRequestParam();
+        List<String> staNos = new ArrayList<>();
+        staNos.add(staNo + "");
+        stationRequestParam.setStaNos(staNos);
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(ctuUrl)
+                    .setPath(station)
+                    .setTimeout(1200, TimeUnit.SECONDS)
+                    .setJson(JSON.toJSONString(stationRequestParam))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+                log.info("RCS杩斿洖鏁版嵁锛歿}", response);
+                JSONArray data = jsonObject.getJSONArray("data");
+                List<StationStatus> stationStatuses = JSONArray.parseArray(data.toString(), StationStatus.class);
+                for (StationStatus object : stationStatuses) {
+                    if (object.getStaNo().equals(staNo + "")) {
+                        if (object.getConveyable()) {
+                            return true;
+                        } else {
+                            log.info("绔欑偣锛歿}鐘舵�佷笉瀵�", staNo);
+                            return false;
+                        }
+                    }
+                }
+                log.info("鏈繑鍥炵珯鐐圭姸鎬侊細{}", staNo);
+            } else {
+                log.error("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊锛屽搷搴旂爜锛歿}锛屽搷搴斿唴瀹癸細{}", jsonObject.getInteger("code"), response);
+                throw new CoolException("璋冪敤涓嬪彂浠诲姟鎺ュ彛鎶ラ敊锛屽搷搴旂爜锛�" + jsonObject.getInteger("code"));
+            }
+        } catch (CoolException e) {
+            log.error("璋冪敤绔欑偣鐘舵�佹帴鍙e紓甯�", e);
+            throw e;
+        } catch (Exception e) {
+            log.error("妫�鏌ョ珯鐐圭姸鎬佸け璐ワ紝绔欑偣缂栧彿锛歿}", staNo, e);
+        }
+        return false;
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.1