From 0970ed5ac8c8fd31d08fb5bc9f98ae01d0d6fbd4 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期一, 27 十月 2025 18:47:37 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/task/handler/WrkMastAgvHandler.java |  203 ++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/asrs/task/WrkMastAgvScheduler.java       |   42 ++++++++
 src/main/java/com/zy/asrs/entity/BasAgvMast.java              |    4 
 3 files changed, 248 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/BasAgvMast.java b/src/main/java/com/zy/asrs/entity/BasAgvMast.java
index 62774fa..7690e8e 100644
--- a/src/main/java/com/zy/asrs/entity/BasAgvMast.java
+++ b/src/main/java/com/zy/asrs/entity/BasAgvMast.java
@@ -91,7 +91,7 @@
     /**
      * 鐘舵�� 0: 鍒濆  1: 浣滀笟涓�  2: 瀹屾垚  
      */
-    @ApiModelProperty(value= "鐘舵�� 0: 鍒濆  1: 浣滀笟涓�  2: 瀹屾垚  ")
+    @ApiModelProperty(value= "鐘舵�� 0: 鍒濆  1: 浣滀笟涓�  2: 瀹屾垚  3: 杞巻鍙�")
     private Integer status;
 
     /**
@@ -188,6 +188,8 @@
                 return "浣滀笟涓�";
             case 2:
                 return "瀹屾垚";
+            case 3:
+                return "杞巻鍙�";
             default:
                 return String.valueOf(this.status);
         }
diff --git a/src/main/java/com/zy/asrs/task/WrkMastAgvScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastAgvScheduler.java
new file mode 100644
index 0000000..4acad06
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/WrkMastAgvScheduler.java
@@ -0,0 +1,42 @@
+package com.zy.asrs.task;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.BasAgvMast;
+import com.zy.asrs.service.BasAgvMastService;
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.WrkMastAgvHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Slf4j
+@Component
+public class WrkMastAgvScheduler {
+
+    @Autowired
+    private WrkMastAgvHandler wrkMastAgvHandler;
+    @Autowired
+    private BasAgvMastService basAgvMastService;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void execute(){
+        List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("status", 2));
+        if (basAgvMastList.isEmpty()) {
+            return;
+        }
+        for (BasAgvMast basAgvMast : basAgvMastList) {
+            try{
+                ReturnT<String> result = wrkMastAgvHandler.start(basAgvMast);
+                if (!result.isSuccess()) {
+                    log.error("AGV宸ヤ綔妗e伐浣滄。[TaskNo={}]瀹屾垚浠诲姟澶勭悊澶辫触:"+result.getMsg(), basAgvMast.getTaskNo());
+                }
+            } catch (Exception e) {
+                log.error("AGV宸ヤ綔妗e伐浣滄。[TaskNo={}]瀹屾垚浠诲姟澶勭悊澶辫触:"+e.getMessage(), basAgvMast.getTaskNo());
+
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/WrkMastAgvHandler.java b/src/main/java/com/zy/asrs/task/handler/WrkMastAgvHandler.java
new file mode 100644
index 0000000..ef0cf30
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/WrkMastAgvHandler.java
@@ -0,0 +1,203 @@
+package com.zy.asrs.task.handler;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.service.*;
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@Service
+@Transactional
+public class WrkMastAgvHandler extends AbstractHandler<String>{
+    @Autowired
+    private BasAgvMastService basAgvMastService;
+    @Autowired
+    private BasAgvLocDetlService basAgvLocDetlService;
+    @Autowired
+    private BasAgvWrkDetlService basAgvWrkDetlService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private LocDetlService locDetlService;
+
+
+    public ReturnT<String> start(BasAgvMast basAgvMast) {
+        try {
+            Date now = new Date();
+            switch (basAgvMast.getIoType()){
+                case 0:
+                    LocMast sourceLoc0 = locMastService.selectById(basAgvMast.getSourceLocNo());
+                    locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", sourceLoc0.getLocNo()));
+                    sourceLoc0.setLocSts("O");
+                    sourceLoc0.setBarcode("");
+                    sourceLoc0.setModiTime(now);
+                    sourceLoc0.setIoTime(now);
+                    if (!locMastService.updateById(sourceLoc0)) {
+//                            exceptionHandle("鍏ㄦ澘鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("鍑哄簱 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [TaskNo=" + basAgvMast.getTaskNo() + "],[locNo=" + basAgvMast.getSourceLocNo() + "]");
+                    }
+
+                    basAgvLocDetlService.delete(new EntityWrapper<BasAgvLocDetl>().eq("loc_no", basAgvMast.getSourceLocNo()));
+                    basAgvWrkDetlService.delete(new EntityWrapper<BasAgvWrkDetl>().eq("wrk_no", basAgvMast.getTaskNo()));
+                    basAgvMast.setStatus(3);
+                    basAgvMastService.updateById(basAgvMast);
+                    break;
+                case 1:
+                    LocMast sourceLoc1 = locMastService.selectById(basAgvMast.getSourceLocNo());
+
+
+
+                    LocMast locMast1 = locMastService.selectById(basAgvMast.getLocNo());
+                    List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", basAgvMast.getLocNo()));
+                    if (!locDetls1.isEmpty()) {
+                        locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", basAgvMast.getLocNo()));
+                    }
+
+                    // 淇敼鐩爣搴撲綅鐘舵�� ==> .locSts
+                    locMast1.setLocSts("F");
+                    locMast1.setIoTime(now);
+                    locMast1.setModiTime(now);
+                    if (!locMastService.updateById(locMast1)) {
+//                        exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐�; [TaskNo=" + basAgvMast.getTaskNo() + "],[locNo=" + basAgvMast.getLocNo() + "]");
+                    }
+
+
+                    try{
+                        // 杞Щ搴撳瓨鏄庣粏鏁版嵁: 搴撳瓨鍙� 鐢卞伐浣滄。婧愬簱浣嶅彉涓虹洰鏍囧簱浣�
+                        locDetlService.updateLocNo(basAgvMast.getLocNo(), basAgvMast.getSourceLocNo());
+//                        if (!) {
+//                            exceptionHandle("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触锛沎婧愬簱浣�={0}],[鐩爣搴撲綅={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
+//                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                            return FAIL.setMsg("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+//                        }
+                    } catch (Exception e) {
+
+                    }
+
+
+                    if (null != sourceLoc1) {
+                        sourceLoc1.setBarcode("");
+                        sourceLoc1.setLocSts("O");
+                        sourceLoc1.setModiTime(now);
+                        sourceLoc1.setIoTime(now);
+                        if (!locMastService.updateById(sourceLoc1)) {
+//                            exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [TaskNo=" + basAgvMast.getTaskNo() + "],[locNo=" + basAgvMast.getLocNo() + "]");
+                        }
+                    }
+
+                    basAgvLocDetlService.delete(new EntityWrapper<BasAgvLocDetl>().eq("loc_no", basAgvMast.getSourceLocNo()));
+                    basAgvWrkDetlService.delete(new EntityWrapper<BasAgvWrkDetl>().eq("wrk_no", basAgvMast.getTaskNo()));
+                    basAgvLocDetlService.delete(new EntityWrapper<BasAgvLocDetl>().eq("loc_no", basAgvMast.getLocNo()));
+                    basAgvMast.setStatus(3);
+                    basAgvMastService.updateById(basAgvMast);
+                    break;
+                case 2:
+                    List<LocDetl> locDetls2 = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", basAgvMast.getLocNo()));
+                    if (!locDetls2.isEmpty()) {
+                        locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", basAgvMast.getLocNo()));
+                    }
+                    List<LocDetl> locDetlList1 = new ArrayList<>();
+                    List<LocDetl> locDetlList2 = new ArrayList<>();
+                    List<BasAgvLocDetl> basAgvLocDetlList = basAgvLocDetlService.selectList(new EntityWrapper<BasAgvLocDetl>().eq("loc_no", basAgvMast.getSourceLocNo()));
+                    List<BasAgvWrkDetl> basAgvWrkDetlList = basAgvWrkDetlService.selectList(new EntityWrapper<BasAgvWrkDetl>().eq("wrk_no", basAgvMast.getTaskNo()));
+                    if (!basAgvLocDetlList.isEmpty()) {
+                        for (BasAgvLocDetl basAgvLocDetl : basAgvLocDetlList){
+                            LocDetl locDetl = new LocDetl();
+                            locDetl.sync(basAgvLocDetl);
+                            locDetlList1.add(locDetl);
+                        }
+                    } else if (!basAgvWrkDetlList.isEmpty()){
+                        for (BasAgvWrkDetl wrkDetl : basAgvWrkDetlList){
+
+                            LocDetl locDetl = locDetlService.selectItem(basAgvMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(),wrkDetl.getBrand()
+                                    ,wrkDetl.getStandby1(),wrkDetl.getStandby2(),wrkDetl.getStandby3(),wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3());
+                            if (null != locDetl) {
+                                if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), basAgvMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(),wrkDetl.getBrand(),wrkDetl.getStandby1(),wrkDetl.getStandby2(),wrkDetl.getStandby3()
+                                        ,wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3())) {
+//                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                    return FAIL.setMsg("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊搴撳瓨鏄庣粏澶辫触; [workNo=" + basAgvMast.getTaskNo() + "],[locNo=" + basAgvMast.getLocNo() + "]");
+                                }
+                            } else {
+                                locDetl = new LocDetl();
+                                locDetl.sync(wrkDetl);
+                                locDetl.setLocNo(basAgvMast.getLocNo()); // 搴撲綅鍙�
+                                locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
+                                locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
+                                locDetl.setModiTime(now);
+                                locDetl.setAppeTime(now);
+                                locDetl.setOrigin("鍦ㄥ簱");
+                                if (!locDetlService.insert(locDetl)) {
+//                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触锛沎workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                    return FAIL.setMsg("鍏ュ簱 ===>> 娣诲姞搴撳瓨鏄庣粏澶辫触; [workNo=" + basAgvMast.getTaskNo() + "],[locNo=" + basAgvMast.getLocNo() + "]");
+                                }
+                            }
+
+                        }
+                    }
+
+                    LocMast locMast2 = locMastService.selectById(basAgvMast.getLocNo());
+
+
+                    // 淇敼搴撲綅鐘舵�� S ====>> F
+                    if (locMast2.getLocSts().equals("S")) {
+                        locMast2.setLocSts("F");
+                        locMast2.setIoTime(now);
+                        locMast2.setModiTime(now);
+                        if (!locMastService.updateById(locMast2)) {
+//                            exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("鍏ㄥ叆搴� ===>> 淇敼搴撲綅鐘舵�佸け璐�; [TaskNo=" + basAgvMast.getTaskNo() + "],[locNo=" + basAgvMast.getLocNo() + "]");
+                        }
+                    }
+
+
+                    if (!locDetlList1.isEmpty()){
+                        for (LocDetl locDetl : locDetlList1) {
+                            locDetlService.insert(locDetl);
+                        }
+                    }
+                    if (!locDetlList2.isEmpty()){
+                        for (LocDetl locDetl : locDetlList2) {
+                            locDetlService.insert(locDetl);
+                        }
+                    }
+
+                    basAgvLocDetlService.delete(new EntityWrapper<BasAgvLocDetl>().eq("loc_no", basAgvMast.getLocNo()));
+                    basAgvWrkDetlService.delete(new EntityWrapper<BasAgvWrkDetl>().eq("wrk_no", basAgvMast.getTaskNo()));
+                    basAgvMast.setStatus(3);
+                    basAgvMastService.updateById(basAgvMast);
+                    break;
+                case 3:
+                    basAgvMast.setStatus(3);
+                    basAgvMastService.updateById(basAgvMast);
+                    break;
+                default:
+                    return FAIL.setMsg("鏆備笉鏀寔璇ョ被鍨�");
+            }
+
+        } catch (Exception e) {
+            log.error("fail", e);
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+}

--
Gitblit v1.9.1