From 517966d4dbed6ef6e5d591720b971af427e6b63a Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期四, 04 十二月 2025 15:25:47 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/service/CommonService.java |  295 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 271 insertions(+), 24 deletions(-)

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 8604944..f9c3670 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -1,18 +1,27 @@
 package com.zy.common.service;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
-import com.zy.asrs.domain.param.CancelTaskParam;
-import com.zy.asrs.domain.param.CompleteTaskParam;
+import com.zy.asrs.domain.param.*;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.utils.NavigateUtils;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.WrkIoType;
 import com.zy.core.enums.WrkStsType;
+import com.zy.core.model.StationObjModel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.List;
 
 @Slf4j
 @Service
@@ -21,9 +30,17 @@
     @Autowired
     private WrkMastService wrkMastService;
     @Autowired
-    private WrkMastLogService wrkMastLogService;
-    @Autowired
     private WrkLastnoService wrkLastnoService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private BasCrnpService basCrnpService;
+    @Autowired
+    private NavigateUtils navigateUtils;
+    @Autowired
+    private CommonService commonService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     /**
      * 鐢熸垚宸ヤ綔鍙�
@@ -63,20 +80,6 @@
         return workNo;
     }
 
-    public static String zerofill(String msg, Integer count) {
-        if (msg.length() == count) {
-            return msg;
-        } else if (msg.length() > count) {
-            return msg.substring(0, 16);
-        } else {
-            StringBuilder msgBuilder = new StringBuilder(msg);
-            for(int i = 0; i < count - msg.length(); ++i) {
-                msgBuilder.insert(0, "0");
-            }
-            return msgBuilder.toString();
-        }
-    }
-
     public boolean completeTask(CompleteTaskParam param) {
         Integer wrkNo = param.getWrkNo();
         WrkMast wrkMast = wrkMastService.selectByWorkNo(wrkNo);
@@ -88,10 +91,8 @@
             wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts);
         }else if (wrkMast.getIoType() == WrkIoType.OUT.id) {
             wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
-        } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_MOVE.id) {
-            wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
-        } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_CHARGE.id) {
-            wrkMast.setWrkSts(WrkStsType.COMPLETE_CHARGE.sts);
+        } else if (wrkMast.getIoType() == WrkIoType.LOC_MOVE.id) {
+            wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);
         }
 
         wrkMast.setModiTime(new Date());
@@ -106,9 +107,255 @@
             throw new CoolException("浠诲姟涓嶅瓨鍦�");
         }
 
-        wrkMastLogService.save(wrkNo);
-        wrkMastService.deleteById(wrkNo);
+        wrkMast.setMk("taskCancel");
+        wrkMast.setModiTime(new Date());
+        wrkMastService.updateById(wrkMast);
         return true;
     }
 
+    //绉诲簱浠诲姟
+    public boolean createLocMoveTask(CreateLocMoveTaskParam param) {
+        Date now = new Date();
+        LocMast sourceLocMast = locMastService.queryByLoc(param.getSourceLocNo());
+        if (null == sourceLocMast) {
+            throw new CoolException("婧愬簱浣嶄笉瀛樺湪");
+        }
+
+        if (!sourceLocMast.getLocSts().equals("F")) {
+            throw new CoolException("婧愬簱浣嶄笉澶勪簬鍦ㄥ簱鐘舵��");
+        }
+
+        LocMast locMast = locMastService.queryByLoc(param.getLocNo());
+        if (null == locMast) {
+            throw new CoolException("鐩爣搴撲綅涓嶅瓨鍦�");
+        }
+
+        if (!locMast.getLocSts().equals("O")) {
+            throw new CoolException("鐩爣搴撲綅涓嶅浜庣┖搴撶姸鎬�");
+        }
+
+        double ioPri = 800D;
+        if (param.getTaskPri() != null) {
+            ioPri = param.getTaskPri().doubleValue();
+        }
+
+        Integer sourceCrnNo = commonService.findCrnNoByLocNo(sourceLocMast.getLocNo());
+        if (sourceCrnNo == null) {
+            throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
+        }
+
+        Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+        if (crnNo == null) {
+            throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
+        }
+
+        if (!sourceCrnNo.equals(crnNo)) {
+            throw new CoolException("婧愬簱浣嶅拰鐩爣搴撲綅涓嶅湪鍚屼竴宸烽亾");
+        }
+
+        // 鑾峰彇宸ヤ綔鍙�
+        int workNo = getWorkNo(WrkIoType.LOC_MOVE.id);
+        // 淇濆瓨宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(now);
+        wrkMast.setWrkSts(WrkStsType.NEW_LOC_MOVE.sts); // 宸ヤ綔鐘舵�侊細501.鐢熸垚绉诲簱浠诲姟
+        wrkMast.setIoType(WrkIoType.LOC_MOVE.id); // 鍏ュ嚭搴撶姸鎬侊細 201.绉诲簱浠诲姟
+        wrkMast.setIoPri(ioPri);
+        wrkMast.setSourceLocNo(param.getSourceLocNo());
+        wrkMast.setLocNo(param.getLocNo()); // 鐩爣搴撲綅
+        wrkMast.setCrnNo(crnNo);
+        wrkMast.setWmsWrkNo(param.getTaskNo());
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            News.error("绉诲簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        sourceLocMast.setLocSts("R");
+        sourceLocMast.setModiTime(new Date());
+        locMastService.updateById(sourceLocMast);
+
+        locMast.setLocSts("S");
+        locMast.setModiTime(new Date());
+        locMastService.updateById(locMast);
+
+        return true;
+    }
+
+    //鍏ュ簱浠诲姟
+    public boolean createInTask(CreateInTaskParam param) {
+        Date now = new Date();
+        LocMast locMast = locMastService.queryByLoc(param.getLocNo());
+        if (null == locMast) {
+            throw new CoolException("鐩爣搴撲綅涓嶅瓨鍦�");
+        }
+
+        if (!locMast.getLocSts().equals("O")) {
+            throw new CoolException("鐩爣搴撲綅涓嶅浜庣┖搴撶姸鎬�");
+        }
+
+        double ioPri = 100D;
+        if (param.getTaskPri() != null) {
+            ioPri = param.getTaskPri().doubleValue();
+        }
+
+        Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+        if (crnNo == null) {
+            throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
+        }
+
+        // 鑾峰彇宸ヤ綔鍙�
+        int workNo = getWorkNo(WrkIoType.IN.id);
+        // 淇濆瓨宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(now);
+        wrkMast.setWrkSts(WrkStsType.NEW_INBOUND.sts); // 宸ヤ綔鐘舵�侊細1.鐢熸垚鍏ュ簱浠诲姟
+        wrkMast.setIoType(WrkIoType.IN.id); // 鍏ュ嚭搴撶姸鎬侊細 1.鍏ュ簱
+        wrkMast.setIoPri(ioPri);
+        wrkMast.setLocNo(param.getLocNo()); // 鐩爣搴撲綅
+        wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯
+        wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
+        wrkMast.setWmsWrkNo(param.getTaskNo());
+        wrkMast.setBarcode(param.getBarcode());
+        wrkMast.setCrnNo(crnNo);
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            News.error("鍏ュ簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        locMast.setLocSts("S");
+        locMast.setModiTime(new Date());
+        locMastService.updateById(locMast);
+
+        //缂撳瓨璁板綍褰撳墠鍛戒护鍫嗗灈鏈虹紪鍙�
+        redisUtil.set(RedisKeyType.CURRENT_CIRCLE_TASK_CRN_NO.key, crnNo, 60 * 60 * 24);
+        return true;
+    }
+
+    //鍑哄簱浠诲姟
+    public boolean createOutTask(CreateOutTaskParam param) {
+        Date now = new Date();
+        LocMast locMast = locMastService.queryByLoc(param.getLocNo());
+        if (null == locMast) {
+            throw new CoolException("婧愬簱浣嶄笉瀛樺湪");
+        }
+
+        if (!locMast.getLocSts().equals("F")) {
+            throw new CoolException("婧愬簱浣嶄笉澶勪簬鍦ㄥ簱鐘舵��");
+        }
+
+        double ioPri = 100D;
+        if (param.getTaskPri() != null) {
+            ioPri = param.getTaskPri().doubleValue();
+        }
+
+        Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+        if (crnNo == null) {
+            throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
+        }
+
+        Integer sourceStationId = commonService.findOutStationId(crnNo, param.getStaNo());
+        if (sourceStationId == null) {
+            throw new CoolException("鏈壘鍒拌緭閫佺洰鏍囩珯鐐瑰彲璧拌璺緞");
+        }
+
+        // 鑾峰彇宸ヤ綔鍙�
+        int workNo = getWorkNo(WrkIoType.OUT.id);
+        // 淇濆瓨宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(now);
+        wrkMast.setWrkSts(WrkStsType.NEW_OUTBOUND.sts); // 宸ヤ綔鐘舵�侊細101.鐢熸垚鍑哄簱浠诲姟
+        wrkMast.setIoType(WrkIoType.OUT.id); // 鍏ュ嚭搴撶姸鎬侊細 101.鍑哄簱
+        wrkMast.setIoPri(ioPri);
+        wrkMast.setSourceLocNo(locMast.getLocNo()); // 婧愬簱浣�
+        wrkMast.setSourceStaNo(sourceStationId);//婧愮珯
+        wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
+        wrkMast.setWmsWrkNo(param.getTaskNo());
+        wrkMast.setBarcode(locMast.getBarcode());
+        wrkMast.setCrnNo(crnNo);
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            News.error("鍑哄簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        locMast.setLocSts("R");
+        locMast.setModiTime(new Date());
+        locMastService.updateById(locMast);
+
+        return true;
+    }
+
+    public Integer findCrnNoByLocNo(String locNo) {
+        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+        for (BasCrnp basCrnp : basCrnps) {
+            String controlRows = basCrnp.getControlRows();
+            if (Cools.isEmpty(controlRows)) {
+                continue;
+            }
+
+            List<Integer> rowList = JSON.parseArray(controlRows, Integer.class);
+            if(rowList.contains(Utils.getRow(locNo))) {
+                return basCrnp.getCrnNo();
+            }
+        }
+        return null;
+    }
+
+    public Integer findInStationId(Integer crnNo, Integer sourceStationId) {
+        BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+        if(basCrnp == null) {
+            return null;
+        }
+
+        Integer targetStationId = null;
+        List<StationObjModel> stationList = basCrnp.getInStationList$();
+        for (StationObjModel stationObjModel : stationList) {
+            try {
+                String startLev = String.valueOf(sourceStationId).substring(0, 1);
+                List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(Integer.parseInt(startLev), sourceStationId, stationObjModel.getStationId());
+                if(navigateNodes != null) {
+                    targetStationId = stationObjModel.getStationId();
+                    break;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return targetStationId;
+    }
+
+    public Integer findOutStationId(Integer crnNo, Integer targetStationId) {
+        BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+        if(basCrnp == null) {
+            return null;
+        }
+
+        Integer finalSourceStationId = null;
+        List<StationObjModel> stationList = basCrnp.getOutStationList$();
+        for (StationObjModel stationObjModel : stationList) {
+            try {
+                String startLev = String.valueOf(targetStationId).substring(0, 1);
+                List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(Integer.parseInt(startLev), stationObjModel.getStationId(), targetStationId);
+                if(navigateNodes != null) {
+                    finalSourceStationId = stationObjModel.getStationId();
+                    break;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return finalSourceStationId;
+    }
+
 }

--
Gitblit v1.9.1