From 66942458f7753fe4ddee7c5ed3386d61cff28b24 Mon Sep 17 00:00:00 2001
From: 野心家 <1051256694@qq.com>
Date: 星期二, 01 四月 2025 13:55:21 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jxjdzwcs' into jxjdzwcs

---
 src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java |   14 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |  125 ++++++++++++
 src/main/java/com/zy/core/cache/MessageQueue.java              |   15 +
 src/main/java/com/zy/asrs/service/BasDevpService.java          |    3 
 src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java |   31 +--
 src/main/java/com/zy/asrs/controller/CrnController.java        |    6 
 src/main/resources/mapper/TaskWrkMapper.xml                    |    6 
 pom.xml                                                        |    2 
 src/main/java/com/zy/core/model/protocol/Cycle.java            |   51 +++++
 src/main/java/com/zy/core/thread/SiemensCrnThread.java         |   50 +++-
 src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java            |    2 
 src/main/java/com/zy/asrs/service/WrkMastService.java          |    5 
 src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java |    7 
 src/main/java/com/zy/asrs/service/TaskWrkService.java          |    5 
 src/main/java/com/zy/core/MainProcess.java                     |   12 +
 src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java |    7 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java        |  232 +++++++++++++++++------
 src/main/resources/application.yml                             |    5 
 18 files changed, 474 insertions(+), 104 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7a47d8d..1d02e2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
 
     <properties>
         <java.version>1.8</java.version>
-        <cool.version>3.2.0</cool.version>
+        <cool.version>3.4.5</cool.version>
         <mysql-driver.version>5.1.47</mysql-driver.version>
         <mybatis-plus.version>2.3.2</mybatis-plus.version>
         <fastjson.version>1.2.58</fastjson.version>
diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java
index 4844ff3..2ee0692 100644
--- a/src/main/java/com/zy/asrs/controller/CrnController.java
+++ b/src/main/java/com/zy/asrs/controller/CrnController.java
@@ -391,7 +391,7 @@
         command.setDestinationPosX(param.getRow());     // 鐩爣搴撲綅鎺�
         command.setDestinationPosY(param.getBay());     // 鐩爣搴撲綅鍒�
         command.setDestinationPosZ(param.getLev());     // 鐩爣搴撲綅灞�
-        command.setCommand((short)1);
+//        command.setCommand((short)1);
         return crnControl(command)?R.ok():R.error();
     }
 
@@ -413,7 +413,7 @@
         command.setDestinationPosX(param.getRow());     // 鐩爣搴撲綅鎺�
         command.setDestinationPosY(param.getBay());     // 鐩爣搴撲綅鍒�
         command.setDestinationPosZ(param.getLev());     // 鐩爣搴撲綅灞�
-        command.setCommand((short)1);
+//        command.setCommand((short)1);
         return crnControl(command)?R.ok():R.error();
     }
 
@@ -435,7 +435,7 @@
         command.setDestinationPosZ(param.getRow());     // 鐩爣搴撲綅鎺�
         command.setDestinationPosX(param.getBay());     // 鐩爣搴撲綅鍒�
         command.setDestinationPosY(param.getLev());     // 鐩爣搴撲綅灞�
-        command.setCommand((short)1);
+//        command.setCommand((short)1);
         LocMast sourceLoc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", command.getSourcePosX())
                 .eq("bay1", command.getSourcePosY()).eq("lev1", command.getSourcePosZ()));
         LocMast loc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", command.getDestinationPosX())
diff --git a/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java b/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
index 1a70e31..4b924b7 100644
--- a/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
@@ -40,4 +40,6 @@
 
     List<TaskWrk> selectWorkingTask();//鑾峰彇宸ヤ綔涓殑浠诲姟
 
+    TaskWrk selectStaWorking(Integer wrkNo);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/BasDevpService.java b/src/main/java/com/zy/asrs/service/BasDevpService.java
index 8628feb..b83d2e1 100644
--- a/src/main/java/com/zy/asrs/service/BasDevpService.java
+++ b/src/main/java/com/zy/asrs/service/BasDevpService.java
@@ -44,4 +44,7 @@
      */
     BasDevp checkSiteStatus(Integer devpNo, boolean put);
 
+    int getStoreCount();
+
+
 }
diff --git a/src/main/java/com/zy/asrs/service/TaskWrkService.java b/src/main/java/com/zy/asrs/service/TaskWrkService.java
index e62ee0b..abf25b8 100644
--- a/src/main/java/com/zy/asrs/service/TaskWrkService.java
+++ b/src/main/java/com/zy/asrs/service/TaskWrkService.java
@@ -29,5 +29,10 @@
     List<TaskWrk> selectToBeHistoryData();
 
     int saveToHistory(String taskNo);//灏嗕换鍔¤浆鍘嗗彶鏃ュ織
+    /**
+     * 鑾峰彇瀵瑰簲鍫嗗灈鏈哄彿宸ヤ綔鐘舵�佷负14锛�12锛�2鐨勫伐浣滄。
+     */
+    int getStoreCount(Integer crnNo);
 
+    TaskWrk selectStaWorking(Integer wrkNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index 67469f8..e2a0c06 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -15,4 +15,9 @@
 
     int getOutToStn182(Integer devpNo);
 
+    /**
+     * 鑾峰彇瀵瑰簲鍫嗗灈鏈哄彿宸ヤ綔鐘舵�佷负14锛�12锛�2鐨勫伐浣滄。
+     */
+    int getStoreCount(Integer crnNo);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java
index 982f348..9735a47 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasCrnpServiceImpl.java
@@ -6,13 +6,19 @@
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.mapper.BasCrnpMapper;
 import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.WrkMastService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 @Slf4j
 @Service("basCrnpService")
 public class BasCrnpServiceImpl extends ServiceImpl<BasCrnpMapper, BasCrnp> implements BasCrnpService {
-
+    @Value("${wms.count}")
+    private Integer maxCount;
+    @Autowired
+    private WrkMastService wrkMastService;
     @Override
     public BasCrnp checkSiteStatus(Integer crnId) {
         BasCrnp crnp = this.selectById(crnId);
@@ -36,6 +42,11 @@
             return false;
         }
         if (pakin) {
+//            int storeCount = wrkMastService.getStoreCount(crnNo);
+//            if(storeCount >= maxCount){
+//                log.error("{}鍙峰爢鍨涙満鏆傚瓨鏁板凡婊�!", crnNo);
+//                return false;
+//            }
             if ("N".equals(crnp.getInEnable())) {
                 log.error("{}鍙峰爢鍨涙満涓嶅彲鍏�", crnNo);
                 return false;
@@ -60,4 +71,5 @@
 //        }
         return true;
     }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
index 1f87a7d..67b1ca8 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -1,8 +1,10 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.TaskWrk;
 import com.zy.asrs.mapper.BasDevpMapper;
 import com.zy.asrs.service.BasDevpService;
 import com.zy.asrs.service.WrkMastService;
@@ -64,4 +66,9 @@
         }
         return station;
     }
+
+    @Override
+    public int getStoreCount() {
+        return baseMapper.selectCount(new EntityWrapper<BasDevp>().in("loading","Y"));
+    }
 }
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 6d68728..c270c19 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -39,15 +39,18 @@
 import com.zy.core.thread.SiemensDevpThread;
 import com.zy.system.entity.Config;
 import com.zy.system.service.ConfigService;
+import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.io.IOException;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -94,7 +97,10 @@
     private ApiLogService apiLogService;
     @Autowired
     private CommonService commonService;
-
+    @Value("${wms.count}")
+    private Integer maxCount;
+    @Autowired
+    private WrkMastService wrkMastService;
     @Value("${wms.url}")
     private String wmsUrl;
     @Value("${wms.inboundTaskApplyPath}")
@@ -107,6 +113,115 @@
     private CrnController crnController;
     @Autowired
     private SiteController siteController;
+    @Synchronized
+    public void shiftTargetToCyclePoint() throws IOException, InterruptedException {
+        try {
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                for (DevpSlave.Sta outSta : devp.getOutSta()) {
+                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                    if (devpThread == null) {
+                        continue;
+                    }
+
+                    StaProtocol staProtocol = getClonedStation(devpThread, outSta.getStaNo());
+                    if (staProtocol == null) {
+                        continue;
+                    }
+
+                    // 鑾峰彇鍏朵粬鐩稿叧绔欑偣
+                    StaProtocol staProtocol1 = getClonedStation(devpThread, 1001);
+                    StaProtocol staProtocol2 = getClonedStation(devpThread, 1002);
+                    StaProtocol staProtocol3 = getClonedStation(devpThread, 1003);
+                    StaProtocol staProtocol4 = getClonedStation(devpThread, 1004);
+                    StaProtocol staProtocol6 = getClonedStation(devpThread, 111);
+
+                    boolean result = false;
+                    switch (outSta.getStaNo()) {
+                        case 105:
+                            result = (staProtocol1 != null && staProtocol1.isLoading() && staProtocol.isLoading() && staProtocol.getStaNo() == 105);
+                            break;
+                        case 107:
+                            result = (staProtocol2 != null && staProtocol2.isLoading());
+                            break;
+                        case 109:
+                            result = (staProtocol3 != null && staProtocol3.isLoading());
+                            break;
+                        case 110:
+                            result = ((staProtocol4 != null && staProtocol4.isLoading() && staProtocol.isLoading() && staProtocol.getStaNo() == 110) ||
+                                    (staProtocol6 != null && staProtocol6.isLoading() && staProtocol.isLoading() && staProtocol.getStaNo() == 111));
+                            break;
+                        default:
+                            break;
+                    }
+
+                    if (result) {
+                        if (staProtocol.getSiteId() == 107 || staProtocol.getSiteId() == 109) {
+                            StaProtocol staProtocol5 = getClonedStation(devpThread, staProtocol.getSiteId() - 1);
+                            if (staProtocol5 != null && (staProtocol5.isLoading() && (staProtocol5.getStaNo() == 107 || staProtocol5.getStaNo() == 109))) {
+                                short workNo = staProtocol5.getWorkNo();
+                                staProtocol5.setWorkNo(workNo);
+                                staProtocol5.setStaNo((short) 112);
+                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol5));
+                            }
+                        } else {
+                            if(staProtocol.isLoading() && (staProtocol.getStaNo() == 105 || staProtocol.getStaNo() == 110 ||  staProtocol.getStaNo() == 111)){
+                                short workNo = staProtocol.getWorkNo();
+                                staProtocol.setWorkNo(workNo);
+                                staProtocol.setStaNo((short) 112);
+                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol));
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("shiftTargetToCyclePoint error", e);
+        }
+    }
+
+    /**
+     * 鑾峰彇绔欑偣骞跺厠闅�
+     */
+    private StaProtocol getClonedStation(DevpThread devpThread, int staNo) {
+        StaProtocol staProtocol = devpThread.getStation().get(staNo);
+        return (staProtocol != null) ? staProtocol.clone() : null;
+    }
+
+    // 112寰幆绔欑偣鑷冲嚭搴撶珯
+    public synchronized void shiftCyclePointToTarget() throws IOException, InterruptedException {
+        try {
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                if (devpThread == null) {
+                    continue;
+                }
+
+                StaProtocol staProtocol = devpThread.getStation().get(112);
+                if (staProtocol.getStaNo() != 112 || staProtocol.getWorkNo() == 0 || !staProtocol.isLoading() || staProtocol.getWorkNo() > 9000 || staProtocol.getWorkNo() < 6000) {
+                    continue;
+                }
+                // 鏌ヨ浠诲姟淇℃伅
+                TaskWrk taskWrk = taskWrkMapper.selectStaWorking(Integer.valueOf(staProtocol.getWorkNo()));
+                if (taskWrk == null || taskWrk.getWrkNo() < 6001 || taskWrk.getWrkNo() > 9000) {
+                    continue;
+                }
+
+                short workNo = staProtocol.getWorkNo();
+                // 鍐嶅啓鍏ョ洰鏍囩珯鐐�
+                staProtocol.setWorkNo(workNo);
+                staProtocol.setStaNo(Short.valueOf(taskWrk.getTargetPoint()));
+                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol));
+                Thread.sleep(200);
+
+                log.info("Shifted from cycle station 112 to target {}, workNo: {}", taskWrk.getTargetPoint(), workNo);
+            }
+        } catch (Exception e) {
+            log.error("shiftCyclePointToTarget error", e);
+        }
+    }
+
+
+
 
 
     public synchronized void generateStoreWrkFile1() throws IOException, InterruptedException {
@@ -205,7 +320,7 @@
                                     staProtocol.setStaNo((short)107);
                                 }else if (staProtocol.getWorkNo()>=9851&&staProtocol.getWorkNo()<=9875) {
                                     staProtocol.setStaNo((short)109);
-                                }else{
+                                }else if (staProtocol.getWorkNo()>=9876 && staProtocol.getWorkNo() <= 9900){
                                     staProtocol.setStaNo((short)110);
                                 }
                                 devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -848,6 +963,12 @@
                         if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                             break;
                         }
+                        int storeCount = basDevpService.getStoreCount();
+                        if(storeCount >= maxCount){
+                            log.error("杈撻�佺嚎鏆傚瓨鏁拌揪鍒颁笂闄恵}",storeCount);
+                            break;
+                        }
+
 
                         // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
                         if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
index 9b24079..5b20240 100644
--- a/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
@@ -1,30 +1,13 @@
 package com.zy.asrs.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.core.common.Cools;
-import com.core.exception.CoolException;
-import com.zy.asrs.domain.enums.TaskStatusType;
-import com.zy.asrs.domain.enums.WorkNoType;
-import com.zy.asrs.entity.StaDesc;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.zy.asrs.mapper.TaskWrkMapper;
 import com.zy.asrs.entity.TaskWrk;
 import com.zy.asrs.service.ApiLogService;
 import com.zy.asrs.service.StaDescService;
 import com.zy.asrs.service.TaskWrkService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
-import com.zy.asrs.utils.CommandUtils;
-import com.zy.asrs.utils.Utils;
 import com.zy.common.service.CommonService;
-import com.zy.common.utils.HttpHandler;
-import com.zy.core.DevpThread;
-import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.CrnTaskModeType;
-import com.zy.core.enums.SlaveType;
-import com.zy.core.model.CrnSlave;
-import com.zy.core.model.Task;
-import com.zy.core.model.command.CrnCommand;
-import com.zy.core.model.protocol.StaProtocol;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -32,8 +15,6 @@
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 @Slf4j
@@ -247,4 +228,14 @@
     public int saveToHistory(String taskNo) {
         return this.baseMapper.saveToHistory(taskNo);
     }
+
+    @Override
+    public int getStoreCount(Integer crnNo){
+        return selectCount(new EntityWrapper<TaskWrk>().eq("crn_no", crnNo).in("wrk_sts",12,2));
+    }
+
+    @Override
+    public TaskWrk selectStaWorking(Integer wrkNo){
+        return this.baseMapper.selectStaWorking(wrkNo);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index 8c0b9e9..99f7296 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -5,9 +5,11 @@
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.service.WrkMastService;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+
 
 @Service("wrkMastService")
 public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService {
@@ -31,4 +33,9 @@
     public int getOutToStn182(Integer devpNo) {
         return selectCount(new EntityWrapper<WrkMast>().eq("sta_no", devpNo).in("wrk_sts",11,12));
     }
+
+    @Override
+    public int getStoreCount(Integer crnNo){
+        return selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("wrk_sts",12,14,2));
+    }
 }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 91070ff..d600b5f 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -27,6 +27,9 @@
     // 棰戠巼
     private int i = 0;
 
+    @Value("${wms.maxCirle}")
+    private Integer maxCount;
+
     /**
      * =====>>  寮�濮嬪伐浣�
      */
@@ -62,9 +65,14 @@
 //                    mainService.outOfDevp();
 
                     // 鍏朵粬  ===>> // 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁�
+                    //鐜舰寰幆鍑芥暟
+//                    mainService.shiftTargetToCyclePoint();
+//                    mainService.shiftCyclePointToTarget();
                     i++;
-                    if (i > 1) {
-//                        mainService.ioConvert();
+                    if (i > 2) {
+                        //鐜舰寰幆鍑芥暟
+                        mainService.shiftTargetToCyclePoint();
+                        mainService.shiftCyclePointToTarget();
                         i = 0;
                     }
 
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index b98b430..7c63158 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -150,5 +150,20 @@
                 break;
         }
     }
+    public static boolean offer(SlaveType type, Integer devpId, Task task, Runnable callback) {
+        boolean result = offer(type, devpId, task); // 鍏堟墽琛屽師鏈変换鍔¢�昏緫
+        if (result && callback != null) {
+            new Thread(() -> {
+                try {
+                    Thread.sleep(200); // 妯℃嫙浠诲姟鎵ц鏃堕棿
+                    callback.run();
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                }
+            }).start();
+        }
+        return result;
+    }
+
 
 }
diff --git a/src/main/java/com/zy/core/model/protocol/Cycle.java b/src/main/java/com/zy/core/model/protocol/Cycle.java
new file mode 100644
index 0000000..48d7ce9
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/Cycle.java
@@ -0,0 +1,51 @@
+package com.zy.core.model.protocol;
+
+public class Cycle implements Cloneable {
+    // 绔欑偣缂栧彿
+    private Integer siteId;
+
+    // 宸ヤ綔鍙�
+    private Short workNo = 0;
+
+    // 鐩爣绔�
+    private Short staNo;
+
+    public Cycle(Integer siteId, Short staNo) {
+        this.siteId = siteId;
+        this.staNo = staNo;
+    }
+
+    public Integer getSiteId() {
+        return siteId;
+    }
+
+    public void setSiteId(Integer siteId) {
+        this.siteId = siteId;
+    }
+
+    public Short getWorkNo() {
+        return workNo;
+    }
+
+    public void setWorkNo(Short workNo) {
+        this.workNo = workNo;
+    }
+
+    public Short getStaNo() {
+        return staNo;
+    }
+
+    public void setStaNo(Short staNo) {
+        this.staNo = staNo;
+    }
+
+    @Override
+    public Cycle clone() {
+        try {
+            return (Cycle) super.clone();
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 321f95c..37ca98b 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -392,33 +392,59 @@
 //        array[9] = command.getSourceStaNo();
 //        array[10] = command.getDestinationStaNo();
         array[9] = command.getCommand();
-
+        OperateResult result18 = siemensNet.Write("DB100.18", (short)0);
+        Thread.sleep(100L);
         OperateResult result = siemensNet.Write("DB100.0", array);
 
         int i=0;
-//        if(result.IsSuccess){
-//            log.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鎴愬姛[id:{}]>>>>鍐欏叆[{}]", slave.getId(),JSON.toJSON(command));
-//        }else{
-//            log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆澶辫触锛侊紒锛乕id:{}]>>>>鍐欏叆[{}]", slave.getId(),JSON.toJSON(command));
-//        }
         do{
             //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
-            Thread.sleep(300);
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB101.0", (short) 56);
-            if (result.IsSuccess) {
-                CrnCommand one=new CrnCommand();
+            Thread.sleep(100);
+            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20);
+            if (resultRead.IsSuccess) {
+                CrnCommand one = new CrnCommand();
                 one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
-                if (!command.getTaskNo().equals(one.getTaskNo())
+                one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
+                one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
+                one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+                one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
+                one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12));
+                one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
+                one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
+                if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode())
+                        || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY())
+                        || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX())
+                        || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ())
                 ){
                     i++;
                     log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐id:{}]>>>>閲嶅啓[{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), i,JSON.toJSON(command),JSON.toJSON(one));
                     result = siemensNet.Write("DB100.0", array);
                 }else{
-                    i=5;
+                    break;
                 }
             }
         }while(i<5);
 
+        if (command.getAckFinish() == 0) {
+            short commandFinish = 1;
+            Thread.sleep(100L);
+            result = siemensNet.Write("DB100.18", commandFinish);
+            int signFinish = 1;
+            while (signFinish<5){
+                OperateResultExOne<byte[]> result10018 = siemensNet.Read("DB100.18", (short) 2);
+                short transInt16 = siemensNet.getByteTransform().TransInt16(result10018.Content, 0);
+                if (transInt16 != commandFinish){
+                    log.info("涓嬪彂DB100.18  鍥炶澶辫触" + "commandFinish:"+commandFinish);
+                    log.info("涓嬪彂DB100.18  鍥炶澶辫触" + "array:"+ JSON.toJSONString(array));
+                    result = siemensNet.Write("DB100.18", commandFinish);
+                    signFinish++;
+                }else {
+                    log.info("涓嬪彂DB100.18" + "commandFinish:"+commandFinish);
+                    log.info("涓嬪彂DB100.18" + "array:"+ JSON.toJSONString(array));
+                    break;
+                }
+            }
+        }
 
         try {
             // 鏃ュ織璁板綍
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index a8f5b06..0fa8c85 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -24,6 +24,7 @@
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.Task;
+import com.zy.core.model.protocol.Cycle;
 import com.zy.core.model.protocol.StaProtocol;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
@@ -132,7 +133,7 @@
                         break;
                     // 鍐欐暟鎹� ID+鐩爣绔�
                     case 4:
-                        writeAgvOk((StaProtocol)task.getData());
+                        writeCycle((StaProtocol)task.getData());
                         read();
                         break;
                    /* case 3:
@@ -493,78 +494,185 @@
 
     }
     private void write(StaProtocol staProtocol) throws InterruptedException {
-        if (null == staProtocol) {
+        if (staProtocol == null) {
             return;
         }
-        ArrayList<Integer> staNos = getStaNo();
 
+        ArrayList<Integer> staNos = getStaNo();
         int index = staNos.indexOf(staProtocol.getSiteId());
 
-        OperateResult writeResult;
-        //浠诲姟涓嬪彂娆℃暟
-        int writeCount = 0;
-        //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
-        boolean writeFlag = false;
-        while(writeCount < 5){
-            OperateResult writeResult1 = siemensS7Net.Write("DB100." + index*6,  staProtocol.getWorkNo().intValue());    // 宸ヤ綔鍙�
-            OperateResult writeResult2 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo());    // 鐩爣绔�
-            if(writeResult1.IsSuccess && writeResult2.IsSuccess){
-                Thread.sleep(200);
-                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*6, (short)6);
-                if(readResult.IsSuccess){
-                    Integer workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
-                    short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
-                    if(workNo.equals(staProtocol.getWorkNo().intValue()) && staProtocol.getStaNo().equals(staNo)){
-                        //浠诲姟鍛戒护鍐欏叆鎴愬姛
-                        writeFlag = true;
-                        log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-                        break;
-                    } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
-                        writeCount++;
-                        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
-                                slave.getId(), JSON.toJSON(staProtocol),writeCount));
-                        log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-                    }
-                } else {
-                    writeCount++;
-                    OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
-                            slave.getId(), JSON.toJSON(staProtocol), writeCount));
-                    log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+        if (index == -1) {
+            log.error("绔欑偣缂栧彿 {} 涓嶅湪宸茬煡鍒楄〃涓紝鏃犳硶鍐欏叆浠诲姟锛�", staProtocol.getSiteId());
+            return;
+        }
+
+        int writeCount = 0; // 浠诲姟涓嬪彂灏濊瘯娆℃暟
+        boolean writeFlag = false; // 浠诲姟涓嬪彂鎴愬姛鏍囪
+        String plcAddressWorkNo = "DB100." + index * 6;
+        String plcAddressStaNo = "DB100." + (index * 6 + 4);
+
+        while (writeCount < 5) {
+            // **璇诲彇褰撳墠PLC鐘舵�侊紝閬垮厤涓嶅繀瑕佺殑鍐欏叆**
+            OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
+            if (readResult.IsSuccess) {
+                int currentWorkNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
+                short currentStaNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
+
+                if (currentWorkNo == staProtocol.getWorkNo().intValue() && currentStaNo == staProtocol.getStaNo()) {
+                    log.info("绔欑偣 {} 褰撳墠鐘舵�佸凡鍖归厤锛屾棤闇�閲嶅鍐欏叆", staProtocol.getSiteId());
+                    return;
                 }
-            } else {
+            }
+
+            // **娓呴浂骞剁‘璁�**
+            if (!clearPLCData(plcAddressWorkNo, plcAddressStaNo, staProtocol.getSiteId())) {
                 writeCount++;
-                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
-                        slave.getId(), JSON.toJSON(staProtocol),writeCount));
-                log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                continue; // 閲嶆柊灏濊瘯娓呴浂
             }
-            Thread.sleep(200);
+
+            // **鍐欏叆鏂颁换鍔�**
+            if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) {
+                writeFlag = true;
+                log.info("杈撻�佺嚎鍛戒护鍐欏叆鎴愬姛锛孭LC缂栧彿={}锛岀珯鐐规暟鎹�={}锛屽皾璇曟鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+                break;
+            }
+
+            log.warn("杈撻�佺嚎鍛戒护鍐欏叆澶辫触锛孭LC缂栧彿={}锛岀珯鐐规暟鎹�={}锛屽皾璇曟鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+            writeCount++;
         }
 
-        //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
-        if(!writeFlag){
-            staProtocol = station.get(staProtocol.getSiteId());
-            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
-                staProtocol.setPakMk(true);
-            }
-            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
-            log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
-
-//            //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
-//            boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
-//            read();//璇诲彇1娆¤澶囩姸鎬�
-        } else {
-            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
-            log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
-
-//            Integer siteId = staProtocol.getSiteId();
-//            staProtocol = station.get(siteId);
-//            if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
-//                staProtocol.setPakMk(true);
-//            }
-        }
-
-
+        // **鍐欏叆澶辫触澶勭悊**
+        handleWriteFailure(staProtocol, writeFlag);
     }
+
+    private void writeCycle(StaProtocol staProtocol) throws InterruptedException {
+        if (staProtocol == null) {
+            return;
+        }
+
+        ArrayList<Integer> staNos = getStaNo();
+        int index = staNos.indexOf(staProtocol.getSiteId());
+
+        if (index == -1) {
+            log.error("绔欑偣缂栧彿 {} 涓嶅湪宸茬煡鍒楄〃涓紝鏃犳硶鍐欏叆浠诲姟锛�", staProtocol.getSiteId());
+            return;
+        }
+
+        int writeCount = 0; // 浠诲姟涓嬪彂灏濊瘯娆℃暟
+        boolean writeFlag = false; // 浠诲姟涓嬪彂鎴愬姛鏍囪
+        String plcAddressWorkNo = "";
+        String plcAddressStaNo = "" ;
+        switch (staProtocol.getSiteId()){
+            case 105:
+                plcAddressWorkNo = "DB73." + 0;
+                plcAddressStaNo = "DB73." + 4;
+                break;
+            case 106:
+                plcAddressWorkNo = "DB73." + 6;
+                plcAddressStaNo = "DB73." + (6 + 4);
+                break;
+            case 108:
+                plcAddressWorkNo = "DB73." + 2 * 6;
+                plcAddressStaNo = "DB73." + (2 * 6 + 4);
+                break;
+            case 110:
+                plcAddressWorkNo = "DB73." + 3 * 6;
+                plcAddressStaNo = "DB73." + (3 * 6 + 4);
+                break;
+            case 112:
+                plcAddressWorkNo = "DB73." + 4 * 6;
+                plcAddressStaNo = "DB73." + (4 * 6 + 4);
+                break;
+        }
+
+
+        // **鍐欏叆鏂颁换鍔�**
+        if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) {
+            writeFlag = true;
+            log.info("杈撻�佺嚎鍛戒护鍐欏叆鎴愬姛锛孭LC缂栧彿={}锛岀珯鐐规暟鎹�={}锛屽皾璇曟鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+        }
+
+        // **鍐欏叆澶辫触澶勭悊**
+        handleWriteFailure(staProtocol, writeFlag);
+    }
+
+    /**
+     * 娓呴浂 PLC 鏁版嵁骞堕獙璇佹竻闆舵槸鍚︽垚鍔�
+     */
+    private boolean clearPLCData(String plcAddressWorkNo, String plcAddressStaNo, int siteId) throws InterruptedException {
+        siemensS7Net.Write(plcAddressWorkNo, 0);
+        siemensS7Net.Write(plcAddressStaNo, (short) 0);
+        Thread.sleep(100); // 绛夊緟PLC璇嗗埆
+
+        OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
+        if (readResult.IsSuccess) {
+            int readWorkNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
+            short readStaNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
+            if (readWorkNo == 0 && readStaNo == 0) {
+                return true; // 娓呴浂鎴愬姛
+            }
+        }
+
+        log.warn("绔欑偣 {} 娓呴浂澶辫触锛屽皾璇曢噸鏂版竻闆�...", siteId);
+        return false;
+    }
+
+    /**
+     * 鍐欏叆鏂颁换鍔″埌 PLC 骞堕獙璇佹槸鍚︽垚鍔�
+     */
+    private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, StaProtocol staProtocol) throws InterruptedException {
+        OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, staProtocol.getStaNo());
+
+        OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, staProtocol.getWorkNo().intValue());
+
+        if (writeResult1.IsSuccess && writeResult2.IsSuccess) {
+            Thread.sleep(200); // 绛夊緟 PLC 璇嗗埆鏂板��
+            OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
+            if (readResult.IsSuccess) {
+                int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
+                short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
+                return workNo == staProtocol.getWorkNo().intValue() && staNo == staProtocol.getStaNo();
+            }
+        }
+        return false;
+    }
+
+    private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, Cycle cycle) throws InterruptedException {
+        OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, cycle.getWorkNo().intValue());
+        OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, cycle.getStaNo());
+
+        if (writeResult1.IsSuccess && writeResult2.IsSuccess) {
+            Thread.sleep(200); // 绛夊緟 PLC 璇嗗埆鏂板��
+            OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
+            if (readResult.IsSuccess) {
+                int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0);
+                short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);
+                return workNo == cycle.getWorkNo().intValue() && staNo == cycle.getStaNo();
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 澶勭悊鍐欏叆澶辫触鐨勬儏鍐�
+     */
+    private void handleWriteFailure(StaProtocol staProtocol, boolean writeFlag) {
+        if (!writeFlag) {
+            StaProtocol currentStaProtocol = station.get(staProtocol.getSiteId());
+            if (currentStaProtocol.getWorkNo() == 0 && currentStaProtocol.getStaNo() == 0) {
+                currentStaProtocol.setPakMk(true);
+            }
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�侾LC缂栧彿={1}锛岀珯鐐规暟鎹�={2}",
+                    slave.getId(), JSON.toJSON(currentStaProtocol)));
+            log.error("杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ワ紝PLC缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(currentStaProtocol));
+        } else {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎鍛戒护鎴愬姛 [id:{1}] >>>>> {2}",
+                    DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+            log.info("杈撻�佺嚎鍛戒护鎴愬姛 [id:{}] >>>>> {}", slave.getId(), JSON.toJSON(staProtocol));
+        }
+    }
+
+
     private void write2(StaProtocol staProtocol) throws InterruptedException {
         if (null == staProtocol) {
             return;
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3f61057..c149282 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -8,7 +8,7 @@
     name: @pom.build.finalName@
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://127.0.0.1:1433;databasename=rywxasrs
+    url: jdbc:sqlserver://10.10.10.220:1433;databasename=rywxasrs
     username: sa
     password: sa@123
   mvc:
@@ -44,6 +44,9 @@
   publicKeysStorePath: publicCerts.keystore
 
 wms:
+  #杈撻�佺嚎鏆傚瓨鏁�
+  count: 8
+  maxCirle: 3
   # 鏄惁寮�鍚笂鎶�
   start: true
   # WMS绯荤粺ip
diff --git a/src/main/resources/mapper/TaskWrkMapper.xml b/src/main/resources/mapper/TaskWrkMapper.xml
index 6055c3a..81b71b7 100644
--- a/src/main/resources/mapper/TaskWrkMapper.xml
+++ b/src/main/resources/mapper/TaskWrkMapper.xml
@@ -134,4 +134,10 @@
         order by io_pri desc,create_time,wrk_no ASC
     </select>
 
+    <select id="selectStaWorking" resultMap="BaseResultMap">
+        select top 1 * from dbo.wcs_task_wrk_log
+        where wrk_no = #{workNo}
+        order by create_time DESC
+    </select>
+
 </mapper>

--
Gitblit v1.9.1