From 2191824072549f0da35d73686a075e59b0196321 Mon Sep 17 00:00:00 2001
From: ZY <zc857179121@qq.com>
Date: 星期三, 25 九月 2024 15:02:25 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/wms-dev' into wms-dev
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java | 203 +++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 158 insertions(+), 45 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..97ceb6c 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,9 +4,12 @@
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;
+import com.zy.asrs.wms.utils.OrderUtils;
+import com.zy.asrs.wms.utils.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -50,6 +53,16 @@
private LanewayRuleService lanewayRuleService;
@Autowired
private CircleRuleService circleRuleService;
+ @Autowired
+ private LocTypeBindService locTypeBindService;
+ @Autowired
+ private LocTypeService locTypeService;
+ @Autowired
+ private MatService matService;
+ @Autowired
+ private OrderUtils orderUtils;
+ @Autowired
+ private WaveDetlService waveDetlService;
@Override
public String generateTaskNo(Long taskType) {
@@ -134,7 +147,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 +158,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 +201,7 @@
}
List<ShelvesRuleDetl> ruleDetls = shelvesRule.getRuleDetl$();
- if(ruleDetls.isEmpty()) {
+ if (ruleDetls.isEmpty()) {
throw new CoolException("鏈厤缃笂鏋惰鍒欐槑缁�");
}
@@ -185,7 +210,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 +218,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 +234,7 @@
//鑾峰彇搴撲綅
if (!globalLoc.isEmpty()) {
defaultLoc = locUtils.filterAllLoc(globalLoc);
- if(defaultLoc != null) {
+ if (defaultLoc != null) {
return defaultLoc;
}
}
@@ -244,7 +269,7 @@
Task task = new Task();
task.setTaskNo(this.generateTaskNo(taskType.getId()));//浠诲姟鍙�
- task.setTaskSts(1L);//1.鐢熸垚鍏ュ簱浠诲姟
+ task.setTaskSts(TaskStsType.GENERATE_IN.id);//1.鐢熸垚鍏ュ簱浠诲姟
task.setTaskType(taskType.getId());//浠诲姟绫诲瀷
task.setIoPri(this.generateIoPri(taskType.getId()));//浼樺厛绾�
task.setOriginLoc(null);
@@ -353,7 +378,7 @@
Task task = new Task();
task.setTaskNo(this.generateTaskNo(taskType.getId()));//浠诲姟鍙�
- task.setTaskSts(1L);//1.鐢熸垚鍏ュ簱浠诲姟
+ task.setTaskSts(TaskStsType.GENERATE_IN.id);//1.鐢熸垚鍏ュ簱浠诲姟
task.setTaskType(taskType.getId());//浠诲姟绫诲瀷
task.setIoPri(this.generateIoPri(taskType.getId()));//浼樺厛绾�
task.setOriginLoc(null);
@@ -391,10 +416,15 @@
if (task.getTaskType() < 100) {
//鍏ュ簱
- task.setTaskSts(99L);//99.鍏ュ簱瀹屾垚
+ task.setTaskSts(TaskStsType.COMPLETE_IN.id);//99.鍏ュ簱瀹屾垚
}else {
//鍑哄簱
- task.setTaskSts(199L);//199.鍑哄簱瀹屾垚
+ TaskDetl taskDetl = taskDetls.get(0);
+ if (taskDetl.getWaveId() == null) {
+ task.setTaskSts(TaskStsType.COMPLETE_OUT.id);//199.鍑哄簱瀹屾垚
+ }else {
+ task.setTaskSts(TaskStsType.WAVE_SEED.id);//198.鎾涓�
+ }
}
task.setUpdateTime(new Date());
@@ -451,7 +481,41 @@
if(!locService.updateById(loc)){
throw new CoolException("搴撲綅鐘舵�佸彉鏇村け璐�");
}
+
+ List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(taskId);
+ for (TaskDetl taskDetl : taskDetls) {
+ if (taskDetl.getWaveId() == null) {
+ continue;
+ }
+
+ String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField());
+ WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, taskDetl.getWaveId()));
+ if(waveDetl == null){
+ continue;
+ }
+ waveDetl.setWorkQty(waveDetl.getWorkQty() - taskDetl.getAnfme());
+ waveDetl.setUpdateTime(new Date());
+ if (!waveDetlService.updateById(waveDetl)) {
+ throw new CoolException("娉㈡鏄庣粏鏇存柊澶辫触");
+ }
+ }
+
+
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) {
@@ -462,17 +526,8 @@
//鍥炴粴璁㈠崟
for (TaskDetl taskDetl : taskDetls) {
- 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("宸ヤ綔鏁伴噺鍥炴粴澶辫触");
+ if (taskDetl.getDetlId() != null) {
+ orderUtils.updateWorkQty(taskDetl.getDetlId(), taskDetl.getAnfme(), false);
}
//鍏ュ簱鍥炴粴缁勬墭閫氱煡妗�
@@ -490,11 +545,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 +577,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()).in(LocTypeBind::getTypeId, LocBindType.HEIGHT.list()));
+ 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(TaskStsType.GENERATE_IN.id);//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