From 50141a5865b8ca6a549ec97dd8cef0878c0bdd95 Mon Sep 17 00:00:00 2001
From: zzgtfwq <zzgtfwq>
Date: 星期二, 03 三月 2026 15:48:16 +0800
Subject: [PATCH] #26-03-10-00

---
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java |  144 +++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 118 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 63d454f..aa13b84 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -3,14 +3,15 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.WrkDetl;
+import com.zy.asrs.entity.WrkLastno;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.entity.param.TaskCreateParam;
 import com.zy.asrs.entity.param.TaskStatusFeedbackParam;
-import com.zy.asrs.service.ApiLogService;
-import com.zy.asrs.service.OpenService;
-import com.zy.asrs.service.WrkDetlService;
-import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.service.*;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.HttpHandler;
 import com.zy.core.cache.MessageQueue;
@@ -44,7 +45,10 @@
 
     @Autowired
     private ApiLogService apiLogService;
-    
+    @Autowired
+    private WrkLastnoService wrkLastnoService;
+    @Autowired
+    private RowLastnoService rowLastnoService;
     @Autowired
     private CommonService commonService;
     
@@ -53,7 +57,8 @@
     
     @Autowired
     private WrkDetlService wrkDetlService;
-    
+    @Autowired
+    private LocMastService locMastService;
     @Autowired
     private SlaveProperties slaveProperties;
 
@@ -112,7 +117,45 @@
         }
         return false;
     }
+    /**
+     * 鐢熸垚宸ヤ綔鍙�
+     *
+     * @param wrkMk
+     * @return workNo(宸ヤ綔鍙�)
+     */
+    public int getWorkNo(Integer wrkMk) {
+        WrkLastno wrkLastno = wrkLastnoService.selectById(wrkMk);
+        if (Cools.isEmpty(wrkLastno)) {
+            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+        }
 
+        int workNo = wrkLastno.getWrkNo();
+        int sNo = wrkLastno.getSNo();
+        int eNo = wrkLastno.getENo();
+        workNo = workNo >= eNo ? sNo : workNo + 1;
+        while (true) {
+            WrkMast wrkMast = wrkMastService.selectById(workNo);
+            if (null != wrkMast) {
+                workNo = workNo >= eNo ? sNo : workNo + 1;
+            } else {
+                break;
+            }
+        }
+        // 淇敼搴忓彿璁板綍
+        if (workNo > 0) {
+            wrkLastno.setWrkNo(workNo);
+            wrkLastnoService.updateById(wrkLastno);
+        }
+        // 妫�楠�
+        if (workNo == 0) {
+            throw new CoolException("鐢熸垚宸ヤ綔鍙峰け璐ワ紝璇疯仈绯荤鐞嗗憳");
+        } else {
+            if (wrkMastService.selectById(workNo) != null) {
+                throw new CoolException("鐢熸垚宸ヤ綔鍙�" + workNo + "鍦ㄥ伐浣滄。涓凡瀛樺湪");
+            }
+        }
+        return workNo;
+    }
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean taskCreate(TaskCreateParam param) {
@@ -124,21 +167,22 @@
             //21锛氭嫞閫夊嚭搴� 22锛氭嫞閫夊叆搴�
             //31锛氱洏鐐瑰嚭搴� 32锛氱洏鐐瑰叆搴�
             switch (param.getIoType()){
-                case 1:  Inbound = false;break;
-                case 2 : Inbound = true;break;
-                case 3:  Inbound = false;break;
+                case 1:  Inbound = false;ioType = 101;break;
+                case 2 : Inbound = true;ioType = 1;break;
+                case 3:  Inbound = false;ioType = 11;break;
                 case 11: Inbound = false;ioType = 110;break;
-                case 12: Inbound = true;break;
+                case 12: Inbound = true;ioType = 10;break;
                 case 21: Inbound = false;ioType = 103;break;
-                case 22: Inbound = true;break;
+                case 22: Inbound = true;ioType = 53;break;
                 case 31: Inbound = false;ioType = 107;break;
-                case 32: Inbound = true;break;
+                case 32: Inbound = true;ioType = 57;break;
             }
             // 2. 淇濆瓨WrkMast
             WrkMast wrkMast = new WrkMast();
-
+            int workNo = getWorkNo(0);
             if(param.getIoType() == 2 || param.getIoType() == 12){
-                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setUserNo(param.getTaskNo());
                 wrkMast.setIoType(param.getIoType() != 2?10:1);
                 wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
                 wrkMast.setBarcode(param.getBarcode());
@@ -150,7 +194,8 @@
             }else if(param.getIoType() == 22 || param.getIoType() == 32){
                 wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode()));
                 wrkMast.setWrkSts(param.getIoType() != 32 ? 53L: 57L);
-                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setUserNo(param.getTaskNo());
                 wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
                 wrkMast.setBarcode(param.getBarcode());
                 wrkMast.setMemo(param.getMemo());
@@ -159,7 +204,8 @@
                 wrkMast.setLocNo(param.getTargetLocNo());
                 wrkMast.setSourceLocNo(param.getSourceLocNo());
             }else if(param.getIoType() == 3){
-                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setUserNo(param.getTaskNo());
                 wrkMast.setIoType(11);
                 wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 12.0);
                 wrkMast.setBarcode(param.getBarcode());
@@ -169,7 +215,8 @@
                 wrkMast.setLocNo(param.getTargetLocNo());
                 wrkMast.setSourceLocNo(param.getSourceLocNo());
             }else{
-                wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo()));
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setUserNo(param.getTaskNo());
                 wrkMast.setIoType(ioType);
                 wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0);
                 wrkMast.setBarcode(param.getBarcode());
@@ -185,11 +232,40 @@
             }else{
                 wrkMast.setWrkSts(11L);
             }
+            String locNo = null;
+            if (param.getSourceLocNo() != null && !param.getSourceLocNo().isEmpty()) {
+                locNo = param.getSourceLocNo();
+            }
+            if (param.getTargetLocNo() != null && !param.getTargetLocNo().isEmpty()) {
+                locNo = param.getTargetLocNo();
+            }
+// 鍙栧墠涓や綅
+            int rowNo = Integer.parseInt(locNo.substring(0, 2));
+
+            int crnNo;
+
+            if (rowNo >= 1 && rowNo <= 4) {
+                crnNo = 1;
+            } else if (rowNo >= 5 && rowNo <= 8) {
+                crnNo = 2;
+            } else if (rowNo >= 9 && rowNo <= 10) {
+                crnNo = 3;
+            } else if (rowNo >= 11 && rowNo <= 14) {
+                crnNo = 4;
+            } else {
+                throw new IllegalArgumentException("鎺掑彿瓒呭嚭鑼冨洿: " + rowNo);
+            }
+
+            wrkMast.setCrnNo(crnNo);
+            wrkMast.setIoTime(new Date());
             wrkMast.setModiTime(new Date());
             wrkMast.setAppeTime(new Date());
             wrkMast.setWrkDate(new Date());
-            
-            wrkMastService.insert(wrkMast);
+            if(param.getIoType() == 22 || param.getIoType() == 32){
+                wrkMastService.updateById(wrkMast);
+            }else{
+                wrkMastService.insert(wrkMast);
+            }
 
             // 3. 淇濆瓨WrkDetl
             if (param.getDetlList() != null && !param.getDetlList().isEmpty()) {
@@ -205,7 +281,19 @@
                     wrkDetlService.insert(wrkDetl);
                 }
             }
-            
+            if(param.getIoType() == 2 || param.getIoType() == 12){
+                locMastService.updateLocMast(param.getTargetLocNo(),"S");
+            }else if(param.getIoType() == 3){
+                locMastService.updateLocMast(param.getSourceLocNo(),"R");
+                locMastService.updateLocMast(param.getTargetLocNo(),"S");
+            }else if(param.getIoType() == 22 || param.getIoType() == 32){
+                locMastService.updateLocMast(param.getTargetLocNo(),"Q");
+            }else if(param.getIoType() == 1 || param.getIoType() == 11){
+                locMastService.updateLocMast(param.getSourceLocNo(),"R" );
+            }else{
+                locMastService.updateLocMast(param.getSourceLocNo(),"P" );
+            }
+
             // 4. 涓嬪彂缁橮LC
             if(Inbound){
                 writeToPlc(wrkMast);
@@ -225,8 +313,7 @@
             }
             
             return true;
-        } catch (Exception e) {
-            log.error("浠诲姟涓嬪彂寮傚父", e);
+        } catch (Exception e) { log.error("浠诲姟涓嬪彂寮傚父", e);
              try {
                 apiLogService.save("浠诲姟涓嬪彂",
                         "/taskCreate",
@@ -255,9 +342,14 @@
              if (devpThread == null) continue;
              
              // 妫�鏌ヨPLC鏄惁绠$悊璇ョ珯鐐�
-             if (devpThread.getStation().containsKey(sourceStaNo.shortValue())) {
-                 StaProtocol staProtocol = devpThread.getStation().get(sourceStaNo.shortValue());
-                 if (staProtocol != null && staProtocol.getWorkNo() == 9998) {
+             if (devpThread.getStation().containsKey(sourceStaNo)) {
+                 StaProtocol staProtocol = devpThread.getStation().get(sourceStaNo);
+                 if (staProtocol == null) {
+                     continue;
+                 } else {
+                     staProtocol = staProtocol.clone();
+                 }
+                 if (staProtocol != null && staProtocol.getWorkNo() == 9999) {
 
                      staProtocol.setWorkNo(wrkMast.getWrkNo());
                      if (wrkMast.getStaNo() != null) {
@@ -265,7 +357,7 @@
                      }
                      
                      // 涓嬪彂PLC鎸囦护
-                     devpThread.setPakMk(staProtocol.getSiteId(), false, 283);
+                     devpThread.setPakMk(staProtocol.getSiteId(), false, 9999);
                      boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                      
                      if (result) {

--
Gitblit v1.9.1