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 | 511 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 452 insertions(+), 59 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 92c46ad..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
@@ -3,16 +3,18 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.*;
-import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
+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;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
+import java.util.*;
@Service("workService")
public class WorkServiceImpl implements WorkService {
@@ -30,11 +32,37 @@
@Autowired
private TaskDetlFieldService taskDetlFieldService;
@Autowired
+ private OrderService orderService;
+ @Autowired
private OrderDetlService orderDetlService;
@Autowired
private LocService locService;
@Autowired
private LocStsService locStsService;
+ @Autowired
+ private TaskLogService taskLogService;
+ @Autowired
+ private TaskDetlLogService taskDetlLogService;
+ @Autowired
+ private TaskDetlFieldLogService taskDetlFieldLogService;
+ @Autowired
+ private LocUtils locUtils;
+ @Autowired
+ private ShelvesRuleService shelvesRuleService;
+ @Autowired
+ 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) {
@@ -49,20 +77,177 @@
}
@Override
- public Loc generateLoc(Long taskType) {
- LocSts locSts = locStsService.getOne(new LambdaQueryWrapper<LocSts>().eq(LocSts::getLocSts, String.valueOf(LocStsType.O)));
- List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getLocStsId, locSts.getId()));
- if (list.isEmpty()) {
- throw new CoolException("娌℃湁绌哄簱浣�");
+ public Loc generateEmptyLoc(Long taskType, Integer locTypeHeight) {
+ List<ShelvesRule> shelvesRules = shelvesRuleService.list(new LambdaQueryWrapper<ShelvesRule>().eq(ShelvesRule::getStatus, 1).orderByDesc(ShelvesRule::getCreateTime));
+ if(shelvesRules.isEmpty()) {
+ throw new CoolException("鏈厤缃笂鏋惰鍒�");
}
- return list.get(0);
+ ShelvesRule shelvesRule = shelvesRules.get(0);
+ //鍙敤宸烽亾
+ List<Long> laneList = shelvesRule.getLaneList();
+ //鍙敤宸烽亾Row
+ List<Integer> laneRowList = new ArrayList<>();
+ if (laneList != null) {
+ //鑾峰彇宸烽亾
+ List<LanewayRule> lanewayRules = lanewayRuleService.listByIds(laneList);
+ for (LanewayRule lanewayRule : lanewayRules) {
+ laneRowList.addAll(lanewayRule.getLaneX$());
+ laneRowList.addAll(lanewayRule.getLaneY$());
+ }
+ }
+
+ Integer currentLev = null;
+ if (shelvesRule.getRuleType().equals(ShelvesRuleType.HIGH.id)) {
+ //浼樺厛绔嬩綋灞�
+ currentLev = circleRuleService.getCurrentValueByFlag(CircleRuleType.LEV.flag);
+ }
+
+ List<ShelvesRuleDetl> ruleDetls = shelvesRule.getRuleDetl$();
+ if(ruleDetls.isEmpty()) {
+ throw new CoolException("鏈厤缃笂鏋惰鍒欐槑缁�");
+ }
+
+ Loc defaultLoc = null;
+
+ for (ShelvesRuleDetl ruleDetl : ruleDetls) {
+ if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.TASK_OR_LOC.id)) {
+ //浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
+ defaultLoc = locUtils.getNeighborEmptyLoc(taskType, locTypeHeight);
+ if (defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+
+ if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.SUGGEST.id)) {
+ //鑾峰彇鎺ㄨ崘搴撲綅
+ List<Loc> suggestLoc = locUtils.getSuggestEmptyLoc(taskType, locTypeHeight, laneRowList, currentLev);
+ //鑾峰彇搴撲綅
+ if (!suggestLoc.isEmpty()) {
+ defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
+ if(defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+ }
+
+ if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.COMPLETE.id)) {
+ //浠庡叏灞�搴撲綅涓幏鍙�(瀹屾暣宸烽亾)
+ List<Loc> globalLoc = locUtils.getGlobalEmptyLoc(taskType, locTypeHeight, laneRowList, currentLev);
+ //鑾峰彇搴撲綅
+ if (!globalLoc.isEmpty()) {
+ defaultLoc = locUtils.filterAllLoc(globalLoc);
+ if(defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+ }
+ }
+
+ return defaultLoc;
+ }
+
+ @Override
+ 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("鎵樼洏鏈粍鎵�");
+ }
+
+ WaitPakin waitPakin = waitPakins.get(0);
+ OrderDetl detl = waitPakin.getDetl$();
+ 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()) {
+ throw new CoolException("鏈厤缃笂鏋惰鍒�");
+ }
+ ShelvesRule shelvesRule = shelvesRules.get(0);
+ //鍙敤宸烽亾
+ List<Long> laneList = shelvesRule.getLaneList();
+ //鍙敤宸烽亾Row
+ List<Integer> laneRowList = new ArrayList<>();
+ if (laneList != null) {
+ //鑾峰彇宸烽亾
+ List<LanewayRule> lanewayRules = lanewayRuleService.listByIds(laneList);
+ for (LanewayRule lanewayRule : lanewayRules) {
+ laneRowList.addAll(lanewayRule.getLaneX$());
+ laneRowList.addAll(lanewayRule.getLaneY$());
+ }
+ }
+
+ Integer currentLev = null;
+ if (shelvesRule.getRuleType().equals(ShelvesRuleType.HIGH.id)) {
+ //浼樺厛绔嬩綋灞�
+ currentLev = circleRuleService.getCurrentValueByFlag(CircleRuleType.LEV.flag);
+ }
+
+ List<ShelvesRuleDetl> ruleDetls = shelvesRule.getRuleDetl$();
+ if (ruleDetls.isEmpty()) {
+ throw new CoolException("鏈厤缃笂鏋惰鍒欐槑缁�");
+ }
+
+ Loc defaultLoc = null;
+
+ for (ShelvesRuleDetl ruleDetl : ruleDetls) {
+ if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.TASK_OR_LOC.id)) {
+ //浠庡簱瀛樻垨浠诲姟涓尮閰嶇浉閭诲簱浣�
+ defaultLoc = locUtils.getNeighborLoc(taskType, mat.getId(), batch, uniqueFields, locTypeHeight);
+ if (defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+
+ if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.SUGGEST.id)) {
+ //鑾峰彇鎺ㄨ崘搴撲綅
+ List<Loc> suggestLoc = locUtils.getSuggestLoc(taskType, mat.getId(), batch, locTypeHeight, laneRowList, currentLev);
+ //鑾峰彇搴撲綅
+ if (!suggestLoc.isEmpty()) {
+ defaultLoc = locUtils.filterLoc(taskType, suggestLoc);
+ if (defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+ }
+
+ if (ruleDetl.getDetlType().equals(ShelvesRuleDetlType.COMPLETE.id)) {
+ //浠庡叏灞�搴撲綅涓幏鍙�(瀹屾暣宸烽亾)
+ List<Loc> globalLoc = locUtils.getGlobalLoc(taskType, locTypeHeight, laneRowList, currentLev);
+ //鑾峰彇搴撲綅
+ if (!globalLoc.isEmpty()) {
+ defaultLoc = locUtils.filterAllLoc(globalLoc);
+ if (defaultLoc != null) {
+ return defaultLoc;
+ }
+ }
+ }
+ }
+ return defaultLoc;
}
@Override
@Transactional
public boolean generatePakIn(GeneratePakInParam param) {
List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode()));
- if (waitPakins.isEmpty()) {
+ if (param.getTaskType() != 10 && waitPakins.isEmpty()) {
throw new CoolException("鎵樼洏鏈粍鎵�");
}
@@ -71,12 +256,20 @@
throw new CoolException("浠诲姟绫诲瀷涓嶅瓨鍦�");
}
+ Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, param.getBarcode()));
+ if (one != null) {
+ throw new CoolException("浠诲姟宸茬粡鍒涘缓锛岃鍕块噸澶嶈姹�");
+ }
+
//鐢熸垚搴撲綅
- Loc loc = this.generateLoc(param.getTaskType());
+ Loc loc = this.generateLoc(param.getTaskType(), param.getBarcode(), param.getLocTypeHeight());
+ if(loc == null) {
+ throw new CoolException("娌℃湁绌哄簱浣�");
+ }
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);
@@ -102,6 +295,7 @@
taskDetl.setOrderNo(waitPakin.getOrderNo());
taskDetl.setDetlId(waitPakin.getDetlId());
taskDetl.setMatId(waitPakin.getDetl$().getMatId());
+ taskDetl.setMatnr(waitPakin.getDetl$().getMat$().getMatnr());
boolean taskDetlSave = taskDetlService.save(taskDetl);
if(!taskDetlSave){
throw new CoolException("浠诲姟鏄庣粏鐢熸垚澶辫触");
@@ -129,17 +323,32 @@
throw new CoolException("缁勬墭閫氱煡妗f洿鏂板け璐�");
}
- //鏇存柊璁㈠崟鏁版嵁
+ //鏇存柊璁㈠崟鏄庣粏鏁版嵁
OrderDetl orderDetl = orderDetlService.getById(taskDetl.getDetlId());
if(orderDetl == null){
- throw new CoolException("璁㈠崟鏁版嵁寮傚父");
+ throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
}
orderDetl.setWorkQty(orderDetl.getWorkQty() + taskDetl.getAnfme());
orderDetl.setUpdateTime(new Date());
boolean orderDetlUpdate = orderDetlService.updateById(orderDetl);
if(!orderDetlUpdate){
- throw new CoolException("璁㈠崟鏇存柊澶辫触");
+ throw new CoolException("璁㈠崟鏄庣粏鏇存柊澶辫触");
+ }
+
+ //鑾峰彇璁㈠崟
+ Order order = orderService.getById(taskDetl.getOrderId());
+ if(order == null){
+ throw new CoolException("璁㈠崟涓嶅瓨鍦�");
+ }
+
+ //鏇存柊璁㈠崟鐘舵��
+ if (order.getOrderSettle().equals(OrderSettleType.WAIT.val())) {
+ order.setOrderSettle(OrderSettleType.WORKING.val());
+ order.setUpdateTime(new Date());
+ if (!orderService.updateById(order)) {
+ throw new CoolException("璁㈠崟鏁版嵁鏇存柊澶辫触");
+ }
}
}
@@ -155,8 +364,46 @@
}
@Override
- @Transactional
- public boolean cancelTask(Long taskId) {
+ public boolean generateEmptyPakIn(GeneratePakInParam param) {
+ TaskType taskType = taskTypeService.getById(param.getTaskType());
+ if (taskType == null) {
+ throw new CoolException("浠诲姟绫诲瀷涓嶅瓨鍦�");
+ }
+
+ //鐢熸垚搴撲綅
+ Loc loc = this.generateEmptyLoc(param.getTaskType(), param.getLocTypeHeight());
+ if(loc == null) {
+ throw new CoolException("娌℃湁绌哄簱浣�");
+ }
+
+ Task task = new Task();
+ task.setTaskNo(this.generateTaskNo(taskType.getId()));//浠诲姟鍙�
+ task.setTaskSts(TaskStsType.GENERATE_IN.id);//1.鐢熸垚鍏ュ簱浠诲姟
+ task.setTaskType(taskType.getId());//浠诲姟绫诲瀷
+ task.setIoPri(this.generateIoPri(taskType.getId()));//浼樺厛绾�
+ task.setOriginLoc(null);
+ task.setTargetLoc(loc.getLocNo());
+ task.setOriginSite(param.getOriginSite());
+ task.setTargetSite(null);
+ task.setBarcode(null);//鎵樼洏鐮�
+ boolean taskSave = taskService.save(task);
+ if (!taskSave) {
+ throw new CoolException("浠诲姟鐢熸垚澶辫触");
+ }
+
+ //搴撲綅O => S
+ loc.setLocStsId(LocStsType.S.val());
+ loc.setUpdateTime(new Date());
+ boolean locUpdate = locService.updateById(loc);
+ if(!locUpdate){
+ throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐�");
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean completeTask(Long taskId) {
Task task = taskService.getById(taskId);
if(task == null){
throw new CoolException("浠诲姟涓嶅瓨鍦�");
@@ -167,10 +414,40 @@
throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�");
}
+ if (task.getTaskType() < 100) {
+ //鍏ュ簱
+ task.setTaskSts(TaskStsType.COMPLETE_IN.id);//99.鍏ュ簱瀹屾垚
+ }else {
+ //鍑哄簱
+ 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());
+ if (!taskService.updateById(task)) {
+ throw new CoolException("浠诲姟鏇存柊澶辫触");
+ }
+
+ return true;
+ }
+
+ @Override
+ @Transactional
+ public boolean cancelTask(Long taskId) {
+ Task task = taskService.getById(taskId);
+ if(task == null){
+ throw new CoolException("浠诲姟涓嶅瓨鍦�");
+ }
+
//鏇存柊搴撲綅鐘舵��
Loc loc = null;
switch (task.getTaskType().intValue()) {
case 1://鍏ュ簱
+ case 10://绌烘澘
case 53://鎷f枡
case 54://骞舵澘
case 57://鐩樼偣
@@ -191,6 +468,7 @@
case 103://鎷f枡
case 104://骞舵澘
case 107://鐩樼偣
+ case 110://绌烘澘
loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getOriginLoc()));
if(loc == null){
throw new CoolException("搴撲綅涓嶅瓨鍦�");
@@ -203,50 +481,35 @@
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;
}
- //鍥炴粴璁㈠崟
- 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 (task.getTaskType() == 1) {
- WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getDetlId, taskDetl.getDetlId()).eq(WaitPakin::getBarcode, task.getBarcode()));
- if(waitPakin == null){
- throw new CoolException("缁勬墭閫氱煡妗d笉瀛樺湪");
- }
-
- waitPakin.setIoStatus(0);
- waitPakin.setUpdateTime(new Date());
- boolean updateWaitPakin = waitPakinService.updateById(waitPakin);
- if(!updateWaitPakin){
- throw new CoolException("缁勬墭閫氱煡妗e洖婊氬け璐�");
- }
- }
-
- //鍒犻櫎鏄庣粏鎵╁睍
- boolean removeField = taskDetlFieldService.remove(new LambdaQueryWrapper<TaskDetlField>().eq(TaskDetlField::getDetlId, taskDetl.getId()));
- if(!removeField){
- throw new CoolException("鍥炴粴鎵╁睍鏄庣粏澶辫触");
- }
-
- //鍒犻櫎鏄庣粏
- boolean removeDetl = taskDetlService.removeById(taskDetl.getId());
- if(!removeDetl){
- throw new CoolException("鍥炴粴鏄庣粏澶辫触");
- }
+ //鏁版嵁淇濆瓨鑷冲巻鍙叉。
+ TaskLog taskLog = new TaskLog();
+ taskLog.sync(task);
+ taskLog.setId(null);
+ if (!taskLogService.save(taskLog)) {
+ throw new CoolException("浠诲姟妗f杞巻鍙叉。妗堝け璐�");
}
//鍒犻櫎浠诲姟
@@ -255,6 +518,136 @@
throw new CoolException("鍥炴粴浠诲姟澶辫触");
}
+ if (task.getTaskType() != 10) {
+ List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(taskId);
+ if (taskDetls.isEmpty()) {
+ throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�");
+ }
+
+ //鍥炴粴璁㈠崟
+ for (TaskDetl taskDetl : taskDetls) {
+ if (taskDetl.getDetlId() != null) {
+ orderUtils.updateWorkQty(taskDetl.getDetlId(), taskDetl.getAnfme(), false);
+ }
+
+ //鍏ュ簱鍥炴粴缁勬墭閫氱煡妗�
+ if (task.getTaskType() == 1) {
+ WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getDetlId, taskDetl.getDetlId()).eq(WaitPakin::getBarcode, task.getBarcode()));
+ if(waitPakin == null){
+ throw new CoolException("缁勬墭閫氱煡妗d笉瀛樺湪");
+ }
+
+ waitPakin.setIoStatus(0);
+ waitPakin.setUpdateTime(new Date());
+ boolean updateWaitPakin = waitPakinService.updateById(waitPakin);
+ if(!updateWaitPakin){
+ throw new CoolException("缁勬墭閫氱煡妗e洖婊氬け璐�");
+ }
+ }
+
+ //鏄庣粏鏁版嵁淇濆瓨鑷冲巻鍙叉。
+ 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("鏄庣粏鎵╁睍瀛楁杞巻鍙叉。妗堝け璐�");
+ }
+
+ //鍒犻櫎鏄庣粏鎵╁睍
+ boolean removeField = taskDetlFieldService.removeById(detlField.getId());
+ if(!removeField){
+ throw new CoolException("鍥炴粴鎵╁睍鏄庣粏澶辫触");
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean pickTask(Long taskId) {
+ Task task = taskService.getById(taskId);
+ if(task == null){
+ 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