From 1b7fa84d5b48c67f920ff9d3202ceb9bda80bdc5 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期二, 06 五月 2025 19:36:06 +0800
Subject: [PATCH] 地图绘制完成

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  239 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 195 insertions(+), 44 deletions(-)

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 8edd7e5..4f9173a 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,12 +7,17 @@
 import com.core.exception.CoolException;
 import com.zy.asrs.controller.CrnController;
 import com.zy.asrs.domain.enums.TaskStatusType;
+import com.zy.asrs.domain.enums.WorkNoType;
 import com.zy.asrs.domain.param.CrnOperatorParam;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.wms.StorageEscalationParam;
-import com.zy.asrs.mapper.*;
+import com.zy.asrs.mapper.BasCrnErrorMapper;
+import com.zy.asrs.mapper.StaDescMapper;
+import com.zy.asrs.mapper.TaskWrkMapper;
+import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
+import com.zy.common.service.CommonService;
 import com.zy.core.CrnThread;
 import com.zy.core.DevpThread;
 import com.zy.core.cache.MessageQueue;
@@ -29,6 +34,7 @@
 import com.zy.core.thread.SiemensDevpThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -36,6 +42,7 @@
 import java.io.IOException;
 import java.util.Date;
 import java.util.List;
+import java.util.Random;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -55,6 +62,8 @@
     @Autowired
     private LocMastService locMastService;
     @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
     private BasCrnpService basCrnpService;
     @Autowired
     private BasDevpService basDevpService;
@@ -66,10 +75,9 @@
     private TaskWrkMapper taskWrkMapper;
 
     @Autowired
-    private DevpTaskMapper devpTaskMapper;
-    @Autowired
     private TaskWrkService taskWrkService;
-
+    @Autowired
+    private CommonService commonService;
     @Autowired
     private StaDescMapper staDescMapper;
 
@@ -84,6 +92,24 @@
 
     @Autowired
     private CrnController crnController;
+
+    @Autowired
+    private TransferTaskService transferTaskService;
+
+    @Autowired
+    private WrkMastService wrkMastService;
+
+    @Autowired
+    private WrkDetlService wrkDetlService;
+
+    @Value("${loc-move.enable}")
+    private boolean enable;
+    @Value("${loc-move.crn1}")
+    private boolean crn1;
+    @Value("${loc-move.crn2}")
+    private boolean crn2;
+    @Value("${loc-move.crn3}")
+    private boolean crn3;
 
 
     public void generateStoreWrkFile() throws IOException, InterruptedException {
@@ -836,6 +862,9 @@
         try {
             // 鏍规嵁杈撻�佺嚎plc閬嶅巻
             for (DevpSlave devp : slaveProperties.getDevp()) {
+                if (devp.getId() == 2) {
+                    continue;
+                }
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 for (DevpSlave.Sta inSta : devp.getInSta()) {
                     WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getBackSta());
@@ -996,15 +1025,123 @@
 
 
     /**
-     * 鐙珛杈撻�佺嚎
+     * 璺戝簱绋嬪簭
      */
-    public void onlyDevp() {
-        DevpSlave devpSlave = slaveProperties.getDevp().get(1);
-        List<DevpSlave.Sta> inSta = devpSlave.getInSta();
-        // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
-        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
-        for (DevpSlave.Sta sta : inSta) {
+    public void debug(String sts, Long modiUser, Integer loc_type1) {
+        if (!enable) {
+            return;
+        }
+        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>());
+        if (basCrnps.isEmpty()) {
+            return;
+        }
+        for (BasCrnp basCrnp : basCrnps) {
+            if (!basCrnp.getInEnable().equals("N") || !basCrnp.getOutEnable().equals("Y")) {
+                continue;
+            }
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", basCrnp.getCrnNo()).eq("io_type", 11));
+            if (Cools.isEmpty(wrkMasts) || wrkMasts.isEmpty()) {
+                int i = locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_sts", sts).eq("loc_type1", loc_type1).ne("modi_user", modiUser));
+                LocMast locMastStart = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", sts).eq("loc_type1", loc_type1).ne("modi_user", modiUser));
+                if (locMastStart == null || i > 1) {
+                    continue;
+                }
+                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                        .eq("loc_sts", "O")
+                        .eq("crn_no", basCrnp.getCrnNo())
+                        .eq("loc_type1", locMastStart.getLocType1())
+                        .ne("modi_user", 77));
+                if (Cools.isEmpty(locMasts)) {
+                    continue;
+                }
+                Random random = new Random();
+                LocMast locMastEnd = locMasts.get(random.nextInt(locMasts.size()));
+                locMove(locMastStart, locMastEnd, Long.parseLong(basCrnp.getCrnNo().toString()));
+            }
+        }
+    }
+
+
+    public void locMove(LocMast sourceLoc, LocMast locNo, Long userId) {
+        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLoc.getLocNo()));
+        LocMast loc = locMastService.selectById(locNo);
+        if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
+            throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");
+        }
+        Date now = new Date();
+        // 鑾峰彇宸ヤ綔鍙�
+        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
+        // 淇濆瓨宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(now);
+        wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+        wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+        wrkMast.setIoPri(10D);
+        wrkMast.setCrnNo(sourceLoc.getCrnNo());
+        wrkMast.setSourceLocNo(sourceLoc.getLocNo()); // 婧愬簱浣�
+        wrkMast.setLocNo(locNo.getLocNo()); // 鐩爣搴撲綅
+        wrkMast.setFullPlt(Cools.isEmpty(locDetls) ? "N" : "Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
+        wrkMast.setBarcode(sourceLoc.getBarcode()); // 鎵樼洏鐮�
+        wrkMast.setLinkMis("N");
+        wrkMast.setAppeUser(userId);
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 宸ヤ綔妗f槑缁嗕繚瀛�
+        for (LocDetl locDetl : locDetls) {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.sync(locDetl);
+            wrkDetl.setWrkNo(workNo);
+            wrkDetl.setIoTime(now);
+            wrkDetl.setAnfme(locDetl.getAnfme());
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setAppeUser(userId);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setModiUser(userId);
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+            }
+        }
+        // 淇敼婧愬簱浣嶇姸鎬�
+        if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
+            sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+            sourceLoc.setModiUser(userId);
+            sourceLoc.setModiTime(now);
+            if (!locMastService.updateById(sourceLoc)) {
+                throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+            }
+        } else {
+            throw new CoolException("婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細" + sourceLoc.getLocSts$());
+        }
+        // 淇敼鐩爣搴撲綅鐘舵��
+        if (loc.getLocSts().equals("O")) {
+            loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+            loc.setModiTime(now);
+            loc.setModiUser(userId);
+            if (!locMastService.updateById(loc)) {
+                throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細" + loc.getLocSts$());
+        }
+    }
+
+    /**
+     * 杞Щ浠诲姟涓嬪彂
+     */
+    public void transferTaskStart() {
+        for (DevpSlave.Sta sta : slaveProperties.getDevp().get(1).getInSta()) {
             try {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                 StaProtocol staProtocol = devpThread.getStation().get(sta.getStaNo());
                 if (staProtocol == null) {
                     continue;
@@ -1013,48 +1150,62 @@
                 }
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
                     // 鏌ヨ宸ヤ綔妗�
-//                    TaskWrk taskWrk = devpTaskMapper.selectCrnStaWorking(crnSlave.getId(), staDesc.getStnNo().toString());
-//                    if (taskWrk == null) {
-//                        continue;
-//                    }
-//                    log.info("涓嬪彂杈撻�佺嚎浠诲姟锛歵askWrk:" + JSON.toJSONString(taskWrk));
-//                    staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
-//                    staProtocol.setStaNo(staDesc.getStnNo().shortValue());
-//                    boolean offer = false;
-//                    try {
-//                        offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
-//                    } catch (Exception e) {
-//                        log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛氬紓甯�:" + e);
-//                        log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛氬紓甯�:offer:" + offer);
-//                    }
-//                    if (offer) {
-//                        log.info("涓嬪彂杈撻�佺嚎浠诲姟鎴愬姛锛歵askWrk:" + JSON.toJSONString(taskWrk));
-//                        taskWrk.setStatus(5);
-//                        taskWrk.setWrkSts(14);
-//                        taskWrkService.updateById(taskWrk);
-//
-//                    } else {
-//                        log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛歵askWrk:" + JSON.toJSONString(taskWrk));
-//                    }
+                    TransferTask transferTask = transferTaskService.selectByStartPoint(sta.getStaNo());
+                    if (transferTask == null) {
+                        continue;
+                    }
+                    log.info("涓嬪彂杈撻�佺嚎杞Щ浠诲姟锛歵askWrk:" + JSON.toJSONString(transferTask));
+                    staProtocol.setWorkNo(transferTask.getWrkNo().shortValue());
+                    staProtocol.setStaNo(transferTask.getTargetPoint().shortValue());
+                    boolean offer = false;
+                    try {
+                        offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+                    } catch (Exception e) {
+                        log.error("涓嬪彂杈撻�佺嚎杞Щ浠诲姟锛氬紓甯�:" + e);
+                        log.error("涓嬪彂杈撻�佺嚎杞Щ浠诲姟锛氬紓甯�:offer:" + offer);
+                    }
+                    if (offer) {
+                        log.info("涓嬪彂杈撻�佺嚎浠诲姟鎴愬姛锛歵askWrk:" + JSON.toJSONString(transferTask));
+                        transferTask.setStatus(2);
+                        transferTaskService.updateById(transferTask);
+                    } else {
+                        log.error("涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛歵askWrk:" + JSON.toJSONString(transferTask));
+                    }
                 }
             } catch (Exception e) {
-                log.error("鍑哄簱鍒板嚭搴撶珯寮傚父:寮傚父淇℃伅锛�" + e);
+                log.error("杞Щ浠诲姟寮傚父:寮傚父淇℃伅锛�" + e);
             }
         }
 
     }
 
-
     /**
-     * 璺戝簱绋嬪簭
+     * 杞Щ浠诲姟瀹屾垚
      */
-    public void debug() {
-        //棣栧厛搴撲綅鏈変竴涓湪搴撶殑搴撲綅
-        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "F"));
-        if (locMast != null) {
-            // 鍐嶇敓鎴愪竴涓Щ搴撲换鍔�
-            LocMast mk = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "O").ne("mk", 1));
-
+    public void transferTaskEnd() {
+        for (DevpSlave.Sta sta : slaveProperties.getDevp().get(1).getInSta()) {
+            try {
+                // 鑾峰彇缁堢偣绔�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
+                StaProtocol staProtocol = devpThread.getStation().get(sta.getOverSta());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
+                    // 鏌ヨ宸ヤ綔妗�
+                    TransferTask transferTask = transferTaskService.selectByEndPoint(sta.getStaNo());
+                    if (transferTask == null) {
+                        continue;
+                    }
+                    log.info("杞Щ浠诲姟瀹屾垚锛歵ransferTask:" + JSON.toJSONString(transferTask));
+                    transferTask.setStatus(3);
+                    transferTaskService.updateById(transferTask);
+                }
+            } catch (Exception e) {
+                log.error("杞Щ浠诲姟寮傚父:寮傚父淇℃伅锛�" + e);
+            }
         }
 
     }

--
Gitblit v1.9.1