From 48278d6051b6e58d648178964585d35ae000ec91 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 30 八月 2024 15:36:56 +0800
Subject: [PATCH] #

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java |  174 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 134 insertions(+), 40 deletions(-)

diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
index 1c1748b..141bcf3 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
@@ -4,6 +4,7 @@
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wms.asrs.entity.*;
 import com.zy.asrs.wms.asrs.entity.enums.*;
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
 import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam;
 import com.zy.asrs.wms.asrs.service.*;
 import com.zy.asrs.wms.utils.LocUtils;
@@ -50,6 +51,12 @@
     private LanewayRuleService lanewayRuleService;
     @Autowired
     private CircleRuleService circleRuleService;
+    @Autowired
+    private LocTypeBindService locTypeBindService;
+    @Autowired
+    private LocTypeService locTypeService;
+    @Autowired
+    private MatService matService;
 
     @Override
     public String generateTaskNo(Long taskType) {
@@ -134,7 +141,7 @@
     }
 
     @Override
-    public Loc generateLoc(Long taskType, String barcode, Integer locTypeHeight) {
+    public synchronized Loc generateLoc(Long taskType, String barcode, Integer locTypeHeight) {
         List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode));
         if (taskType != 10 && waitPakins.isEmpty()) {
             throw new CoolException("鎵樼洏鏈粍鎵�");
@@ -145,14 +152,26 @@
         if (detl == null) {
             throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
         }
+        String batch = detl.getBatch();
+        List<FieldParam> uniqueFields = detl.getUniqueField();
 
         Mat mat = detl.getMat$();
         if (mat == null) {
             throw new CoolException("鍟嗗搧涓嶅瓨鍦�");
         }
 
+        return generateLoc(taskType, mat.getId(), batch, uniqueFields, locTypeHeight);
+    }
+
+    @Override
+    public synchronized Loc generateLoc(Long taskType, Long matId, String batch, List<FieldParam> uniqueFields, Integer locTypeHeight) {
+        Mat mat = matService.getById(matId);
+        if (mat == null) {
+            throw new CoolException("鍟嗗搧涓嶅瓨鍦�");
+        }
+
         List<ShelvesRule> shelvesRules = shelvesRuleService.list(new LambdaQueryWrapper<ShelvesRule>().eq(ShelvesRule::getStatus, 1).orderByDesc(ShelvesRule::getCreateTime));
-        if(shelvesRules.isEmpty()) {
+        if (shelvesRules.isEmpty()) {
             throw new CoolException("鏈厤缃笂鏋惰鍒�");
         }
         ShelvesRule shelvesRule = shelvesRules.get(0);
@@ -176,7 +195,7 @@
         }
 
         List<ShelvesRuleDetl> ruleDetls = shelvesRule.getRuleDetl$();
-        if(ruleDetls.isEmpty()) {
+        if (ruleDetls.isEmpty()) {
             throw new CoolException("鏈厤缃笂鏋惰鍒欐槑缁�");
         }
 
@@ -185,7 +204,7 @@
         for (ShelvesRuleDetl ruleDetl : ruleDetls) {
             if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.TASK_OR_LOC.id)) {
                 //浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
-                defaultLoc = locUtils.getNeighborLoc(taskType, detl, locTypeHeight);
+                defaultLoc = locUtils.getNeighborLoc(taskType, mat.getId(), batch, uniqueFields, locTypeHeight);
                 if (defaultLoc != null) {
                     return defaultLoc;
                 }
@@ -193,11 +212,11 @@
 
             if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.SUGGEST.id)) {
                 //鑾峰彇鎺ㄨ崘搴撲綅
-                List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), detl.getBatch(), locTypeHeight, laneRowList, currentLev);
+                List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), batch, locTypeHeight, laneRowList, currentLev);
                 //鑾峰彇搴撲綅
                 if (!suggestLoc.isEmpty()) {
                     defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
-                    if(defaultLoc != null) {
+                    if (defaultLoc != null) {
                         return defaultLoc;
                     }
                 }
@@ -209,7 +228,7 @@
                 //鑾峰彇搴撲綅
                 if (!globalLoc.isEmpty()) {
                     defaultLoc = locUtils.filterAllLoc(globalLoc);
-                    if(defaultLoc != null) {
+                    if (defaultLoc != null) {
                         return defaultLoc;
                     }
                 }
@@ -454,6 +473,20 @@
                 break;
         }
 
+        //鏁版嵁淇濆瓨鑷冲巻鍙叉。
+        TaskLog taskLog = new TaskLog();
+        taskLog.sync(task);
+        taskLog.setId(null);
+        if (!taskLogService.save(taskLog)) {
+            throw new CoolException("浠诲姟妗f杞巻鍙叉。妗堝け璐�");
+        }
+
+        //鍒犻櫎浠诲姟
+        boolean removeTask = taskService.removeById(taskId);
+        if(!removeTask){
+            throw new CoolException("鍥炴粴浠诲姟澶辫触");
+        }
+
         if (task.getTaskType() != 10) {
             List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(taskId);
             if (taskDetls.isEmpty()) {
@@ -462,17 +495,20 @@
 
             //鍥炴粴璁㈠崟
             for (TaskDetl taskDetl : taskDetls) {
-                OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId());
-                if(orderDetl == null){
-                    throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
-                }
+                if (taskDetl.getDetlId() != null) {
+                    OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId());
+                    if(orderDetl == null){
+                        throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+                    }
 
-                //鍥炴粴宸ヤ綔鏁伴噺
-                orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme());
-                orderDetl.setUpdateTime(new Date());
-                boolean orderDetlUpdate = orderDetlService.updateById(orderDetl);
-                if(!orderDetlUpdate){
-                    throw new CoolException("宸ヤ綔鏁伴噺鍥炴粴澶辫触");
+                    //鍥炴粴宸ヤ綔鏁伴噺
+                    orderDetl.setWorkQty(orderDetl.getWorkQty() - taskDetl.getAnfme());
+                    orderDetl.setUpdateTime(new Date());
+                    boolean orderDetlUpdate = orderDetlService.updateById(orderDetl);
+                    if(!orderDetlUpdate){
+                        throw new CoolException("宸ヤ綔鏁伴噺鍥炴粴澶辫触");
+                    }
+
                 }
 
                 //鍏ュ簱鍥炴粴缁勬墭閫氱煡妗�
@@ -490,11 +526,28 @@
                     }
                 }
 
+                //鏄庣粏鏁版嵁淇濆瓨鑷冲巻鍙叉。
+                TaskDetlLog taskDetlLog = new TaskDetlLog();
+                taskDetlLog.sync(taskDetl);
+                taskDetlLog.setId(null);
+                taskDetlLog.setTaskId(taskLog.getId());
+                if (!taskDetlLogService.save(taskDetlLog)) {
+                    throw new CoolException("鏄庣粏鏁版嵁杞巻鍙叉。妗堝け璐�");
+                }
+
+                //鍒犻櫎鏄庣粏
+                boolean removeDetl = taskDetlService.removeById(taskDetl.getId());
+                if(!removeDetl){
+                    throw new CoolException("鍥炴粴鏄庣粏澶辫触");
+                }
+
                 List<TaskDetlField> detlFields = taskDetlFieldService.list(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()));
                 for (TaskDetlField detlField : detlFields) {
                     //鏄庣粏鎵╁睍瀛楁鏁版嵁淇濆瓨鑷冲巻鍙叉。
                     TaskDetlFieldLog taskDetlFieldLog = new TaskDetlFieldLog();
                     taskDetlFieldLog.sync(detlField);
+                    taskDetlFieldLog.setId(null);
+                    taskDetlFieldLog.setDetlId(taskDetlLog.getId());
                     if (!taskDetlFieldLogService.save(taskDetlFieldLog)) {
                         throw new CoolException("鏄庣粏鎵╁睍瀛楁杞巻鍙叉。妗堝け璐�");
                     }
@@ -505,34 +558,75 @@
                         throw new CoolException("鍥炴粴鎵╁睍鏄庣粏澶辫触");
                     }
                 }
-
-
-                //鏄庣粏鏁版嵁淇濆瓨鑷冲巻鍙叉。
-                TaskDetlLog taskDetlLog = new TaskDetlLog();
-                taskDetlLog.sync(taskDetl);
-                if (!taskDetlLogService.save(taskDetlLog)) {
-                    throw new CoolException("鏄庣粏鏁版嵁杞巻鍙叉。妗堝け璐�");
-                }
-
-                //鍒犻櫎鏄庣粏
-                boolean removeDetl = taskDetlService.removeById(taskDetl.getId());
-                if(!removeDetl){
-                    throw new CoolException("鍥炴粴鏄庣粏澶辫触");
-                }
             }
         }
 
-        //鏁版嵁淇濆瓨鑷冲巻鍙叉。
-        TaskLog taskLog = new TaskLog();
-        taskLog.sync(task);
-        if (!taskLogService.save(taskLog)) {
-            throw new CoolException("浠诲姟妗f杞巻鍙叉。妗堝け璐�");
+        return true;
+    }
+
+    @Override
+    public boolean pickTask(Long taskId) {
+        Task task = taskService.getById(taskId);
+        if(task == null){
+            throw new CoolException("浠诲姟涓嶅瓨鍦�");
         }
 
-        //鍒犻櫎浠诲姟
-        boolean removeTask = taskService.removeById(taskId);
-        if(!removeTask){
-            throw new CoolException("鍥炴粴浠诲姟澶辫触");
+        if (task.getTaskType() != 103) {
+            throw new CoolException("浠诲姟绫诲瀷涓嶅彲鎷f枡");
+        }
+
+        if (task.getTaskSts() != 200) {
+            throw new CoolException("褰撳墠鐘舵�佷笉鍙嫞鏂�");
+        }
+
+        //鑾峰彇婧愬簱浣�
+        Loc originLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getOriginLoc()));
+        if(originLoc == null){
+            throw new CoolException("婧愬簱浣嶄笉瀛樺湪");
+        }
+
+        //鑾峰彇婧愬簱浣嶉珮搴�
+        LocTypeBind locTypeBind = locTypeBindService.getOne(new LambdaQueryWrapper<LocTypeBind>().eq(LocTypeBind::getLocId, originLoc.getId()));
+        if(locTypeBind == null){
+            throw new CoolException("搴撲綅绫诲瀷涓嶅瓨鍦�");
+        }
+        LocType locType = locTypeService.getById(locTypeBind.getTypeId());
+        if(locType == null){
+            throw new CoolException("搴撲綅绫诲瀷涓嶅瓨鍦�");
+        }
+        LocTypeHeightType locTypeHeightType = LocTypeHeightType.get(locType.getFlag());
+        if(locTypeHeightType == null){
+            throw new CoolException("楂樹綆搴撲綅绫诲瀷涓嶅瓨鍦�");
+        }
+
+        Long taskType = task.getTaskType() - 50;
+
+        List<TaskDetl> taskDetls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, taskId).gt(TaskDetl::getAnfme, 0));
+        if (taskDetls.isEmpty()) {
+            throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�");
+        }
+        TaskDetl taskDetl = taskDetls.get(0);
+
+        //鐢熸垚搴撲綅
+        Loc loc = this.generateLoc(taskType, taskDetl.getMatId(), taskDetl.getBatch(), taskDetl.getUniqueField(), locTypeHeightType.id);
+        if(loc == null) {
+            throw new CoolException("娌℃湁绌哄簱浣�");
+        }
+
+        task.setTaskSts(1L);//1.鐢熸垚鍏ュ簱浠诲姟
+        task.setTaskType(taskType);
+        task.setTargetLoc(loc.getLocNo());
+        task.setUpdateTime(new Date());
+        if (!taskService.updateById(task)) {
+            throw new CoolException("鎷f枡澶辫触");
+        }
+
+        //搴撲綅O => S
+        loc.setLocStsId(LocStsType.S.val());
+        loc.setUpdateTime(new Date());
+        boolean locUpdate = locService.updateById(loc);
+        if(!locUpdate){
+            throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐�");
         }
 
         return true;

--
Gitblit v1.9.1