From a2a5f1b9b70be48687ac7f84ebf6aa132c3721e9 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 21 三月 2026 21:18:12 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/service/CommonService.java | 181 ++++++++++++++++++++++++++++++++++++++-------
1 files changed, 153 insertions(+), 28 deletions(-)
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 6026fd8..771bdeb 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -1,8 +1,9 @@
package com.zy.common.service;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
+import com.zy.asrs.domain.Result.CancelTaskBatchResult;
import com.zy.asrs.domain.param.*;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
@@ -12,16 +13,15 @@
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.SlaveType;
-import com.zy.core.enums.WrkIoType;
-import com.zy.core.enums.WrkStsType;
+import com.zy.core.service.WrkCommandRollbackService;
+import com.zy.core.enums.*;
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.ArrayList;
+import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Random;
@@ -46,20 +46,22 @@
private RedisUtil redisUtil;
@Autowired
private BasOutStationAreaService basOutStationAreaService;
+ @Autowired
+ private WrkCommandRollbackService wrkCommandRollbackService;
/**
* 鐢熸垚宸ヤ綔鍙�
* @return workNo(宸ヤ綔鍙�)
*/
public synchronized int getWorkNo(Integer wrkMk) {
- WrkLastno wrkLastno = wrkLastnoService.selectById(wrkMk);
+ WrkLastno wrkLastno = wrkLastnoService.getById(wrkMk);
if (Cools.isEmpty(wrkLastno)) {
throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
}
int workNo = wrkLastno.getWrkNo();
- int sNo = wrkLastno.getSNo();
- int eNo = wrkLastno.getENo();
+ int sNo = wrkLastno.getsNo();
+ int eNo = wrkLastno.geteNo();
workNo = workNo>=eNo ? sNo : workNo+1;
while (true) {
WrkMast wrkMast = wrkMastService.selectByWorkNo(workNo);
@@ -92,7 +94,7 @@
if(wrkNo == null) {
if (!Cools.isEmpty(taskNo)) {
- wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wms_wrk_no", taskNo));
+ wrkMast = wrkMastService.getOne(new QueryWrapper<WrkMast>().eq("wms_wrk_no", taskNo));
}
}else {
wrkMast = wrkMastService.selectByWorkNo(wrkNo);
@@ -122,7 +124,7 @@
if(wrkNo == null) {
if (!Cools.isEmpty(taskNo)) {
- wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wms_wrk_no", taskNo));
+ wrkMast = wrkMastService.getOne(new QueryWrapper<WrkMast>().eq("wms_wrk_no", taskNo));
}
}else {
wrkMast = wrkMastService.selectByWorkNo(wrkNo);
@@ -132,10 +134,91 @@
throw new CoolException("浠诲姟涓嶅瓨鍦�");
}
+ boolean cancelSuccess = false;
+ if (wrkMast.getIoType().equals(WrkIoType.IN.id) && !wrkMast.getWrkSts().equals(WrkStsType.NEW_INBOUND.sts)) {
+ cancelSuccess = true;
+ } else if (wrkMast.getIoType().equals(WrkIoType.OUT.id) && !wrkMast.getWrkSts().equals(WrkStsType.NEW_OUTBOUND.sts)) {
+ cancelSuccess = true;
+ } else if (wrkMast.getIoType().equals(WrkIoType.LOC_MOVE.id) && !wrkMast.getWrkSts().equals(WrkStsType.NEW_LOC_MOVE.sts)) {
+ cancelSuccess = true;
+ }
+
+ if (cancelSuccess) {
+ throw new CoolException("浠诲姟宸叉墽琛岋紝鍙栨秷澶辫触");
+ }
+
wrkMast.setMk("taskCancel");
wrkMast.setModiTime(new Date());
wrkMastService.updateById(wrkMast);
return true;
+ }
+
+ public boolean updateTaskPriorityAndBatchSeq(UpdateTaskPriorityAndBatchSeqParam param) {
+ if (param == null) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
+ }
+ if (Cools.isEmpty(param.getTaskNo())) {
+ throw new CoolException("WMS浠诲姟鍙蜂笉鑳戒负绌�");
+ }
+ if (param.getTaskPri() == null && param.getBatchSeq() == null) {
+ throw new CoolException("浠诲姟浼樺厛绾у拰鎵规搴忓彿涓嶈兘鍚屾椂涓虹┖");
+ }
+
+ WrkMast wrkMast = wrkMastService.getOne(new QueryWrapper<WrkMast>().eq("wms_wrk_no", param.getTaskNo()));
+ if (wrkMast == null) {
+ throw new CoolException("浠诲姟涓嶅瓨鍦�");
+ }
+
+ if (param.getTaskPri() != null) {
+ wrkMast.setIoPri(param.getTaskPri().doubleValue());
+ }
+ if (param.getBatchSeq() != null) {
+ wrkMast.setBatchSeq(param.getBatchSeq());
+ }
+ wrkMast.setModiTime(new Date());
+ wrkMastService.updateById(wrkMast);
+ return true;
+ }
+
+ public CancelTaskBatchResult cancelTaskBatch(CancelTaskBatchParam param) {
+ if (param == null) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
+ }
+
+ List<CancelTaskParam> taskList = param.getTaskList();
+ if (taskList == null || taskList.isEmpty()) {
+ throw new CoolException("浠诲姟鍙傛暟鍒楄〃涓虹┖");
+ }
+
+ List<String> successList = new ArrayList<>();
+ List<String> failList = new ArrayList<>();
+
+ for (CancelTaskParam cancelTaskParam : taskList) {
+ if (cancelTaskParam == null) {
+ throw new CoolException("浠诲姟鍙傛暟涓嶈兘涓虹┖");
+ }
+
+ boolean cancelStatus = false;
+ try {
+ cancelStatus = cancelTask(cancelTaskParam);
+ } catch (Exception e) {
+ }
+
+ if (cancelStatus) {
+ successList.add(cancelTaskParam.getTaskNo());
+ }else {
+ failList.add(cancelTaskParam.getTaskNo());
+ }
+ }
+
+ CancelTaskBatchResult result = new CancelTaskBatchResult();
+ result.setSuccessList(successList);
+ result.setFailList(failList);
+ return result;
+ }
+
+ public boolean manualRollbackTask(ManualRollbackTaskParam param) {
+ return wrkCommandRollbackService.manualRollbackTask(param);
}
//绉诲簱浠诲姟
@@ -202,7 +285,7 @@
throw new CoolException("鏈煡璁惧绫诲瀷");
}
- boolean res = wrkMastService.insert(wrkMast);
+ boolean res = wrkMastService.save(wrkMast);
if (!res) {
News.error("绉诲簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
@@ -270,7 +353,7 @@
throw new CoolException("鏈煡璁惧绫诲瀷");
}
- boolean res = wrkMastService.insert(wrkMast);
+ boolean res = wrkMastService.save(wrkMast);
if (!res) {
News.error("鍏ュ簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
@@ -312,7 +395,7 @@
}
if(Cools.isEmpty(staNo)) {
- List<BasOutStationArea> areaList = basOutStationAreaService.selectList(new EntityWrapper<BasOutStationArea>().eq("area_code", outArea));
+ List<BasOutStationArea> areaList = basOutStationAreaService.list(new QueryWrapper<BasOutStationArea>().eq("area_code", outArea));
if (areaList.isEmpty()) {
throw new CoolException("鍑哄簱鍖哄煙涓嶅瓨鍦�");
}
@@ -352,11 +435,11 @@
}
if (findCrnResult.getCrnType().equals(SlaveType.Crn)) {
- BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+ BasCrnp basCrnp = basCrnpService.getOne(new QueryWrapper<BasCrnp>().eq("crn_no", crnNo));
if(basCrnp == null) {
throw new CoolException("鏈壘鍒板搴斿爢鍨涙満鏁版嵁");
}
- List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ List<WrkMast> outWrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
.eq("crn_no", crnNo)
.eq("io_type", WrkIoType.OUT.id)
);
@@ -368,11 +451,11 @@
wrkMast.setCrnNo(findCrnResult.getCrnNo());
} else if (findCrnResult.getCrnType().equals(SlaveType.DualCrn)) {
- BasDualCrnp basDualCrnp = basDualCrnpService.selectOne(new EntityWrapper<BasDualCrnp>().eq("crn_no", crnNo));
+ BasDualCrnp basDualCrnp = basDualCrnpService.getOne(new QueryWrapper<BasDualCrnp>().eq("crn_no", crnNo));
if(basDualCrnp == null) {
throw new CoolException("鏈壘鍒板搴斿弻宸ヤ綅鍫嗗灈鏈烘暟鎹�");
}
- List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ List<WrkMast> outWrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
.eq("dual_crn_no", crnNo)
.eq("io_type", WrkIoType.OUT.id)
);
@@ -387,7 +470,7 @@
throw new CoolException("鏈煡璁惧绫诲瀷");
}
- boolean res = wrkMastService.insert(wrkMast);
+ boolean res = wrkMastService.save(wrkMast);
if (!res) {
News.error("鍑哄簱浠诲姟 --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒");
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
@@ -399,8 +482,50 @@
return true;
}
+ public boolean createOutTaskBatch(CreateOutTaskBatchParam param) {
+ if (param == null) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
+ }
+
+ List<CreateOutTaskParam> taskList = param.getTaskList();
+ if (taskList == null || taskList.isEmpty()) {
+ throw new CoolException("浠诲姟鍒楄〃涓嶈兘涓虹┖");
+ }
+
+ List<CreateOutTaskParam> sortedTaskList = new ArrayList<>(taskList);
+ sortedTaskList.sort(Comparator.nullsLast(Comparator
+ .comparing(this::getSortableBatch, Comparator.nullsLast(String::compareTo))
+ .thenComparing(this::getSortableBatchSeq, Comparator.nullsLast(Integer::compareTo))));
+
+ for (CreateOutTaskParam createOutTaskParam : sortedTaskList) {
+ if (createOutTaskParam == null) {
+ throw new CoolException("浠诲姟鍙傛暟涓嶈兘涓虹┖");
+ }
+ createOutTask(createOutTaskParam);
+ }
+ return true;
+ }
+
+ private String getSortableBatch(CreateOutTaskParam param) {
+ if (param == null) {
+ return null;
+ }
+ String batch = param.getBatch();
+ if (batch == null || batch.trim().isEmpty()) {
+ return null;
+ }
+ return batch;
+ }
+
+ private Integer getSortableBatchSeq(CreateOutTaskParam param) {
+ if (param == null) {
+ return null;
+ }
+ return param.getBatchSeq();
+ }
+
public FindCrnNoResult findCrnNoByLocNo(String locNo) {
- List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+ List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
for (BasCrnp basCrnp : basCrnps) {
List<List<Integer>> rowList = basCrnp.getControlRows$();
for (List<Integer> rows : rowList) {
@@ -413,7 +538,7 @@
}
}
- List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(new EntityWrapper<>());
+ List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
for (BasDualCrnp basDualCrnp : basDualCrnps) {
List<List<Integer>> rowList = basDualCrnp.getControlRows$();
for (List<Integer> rows : rowList) {
@@ -432,13 +557,13 @@
List<StationObjModel> stationList = new ArrayList<>();
Integer crnNo = findCrnNoResult.getCrnNo();
if (findCrnNoResult.getCrnType().equals(SlaveType.Crn)) {
- BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+ BasCrnp basCrnp = basCrnpService.getOne(new QueryWrapper<BasCrnp>().eq("crn_no", crnNo));
if(basCrnp == null) {
return null;
}
stationList = basCrnp.getInStationList$();
} else if (findCrnNoResult.getCrnType().equals(SlaveType.DualCrn)) {
- BasDualCrnp basDualCrnp = basDualCrnpService.selectOne(new EntityWrapper<BasDualCrnp>().eq("crn_no", crnNo));
+ BasDualCrnp basDualCrnp = basDualCrnpService.getOne(new QueryWrapper<BasDualCrnp>().eq("crn_no", crnNo));
if(basDualCrnp == null) {
return null;
}
@@ -448,8 +573,8 @@
Integer targetStationId = null;
for (StationObjModel stationObjModel : stationList) {
try {
- List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(sourceStationId, stationObjModel.getStationId());
- if(navigateNodes != null) {
+ List<NavigateNode> navigateNodes = navigateUtils.calcReachablePathByStationId(sourceStationId, stationObjModel.getStationId());
+ if(!navigateNodes.isEmpty()) {
targetStationId = stationObjModel.getStationId();
break;
}
@@ -464,13 +589,13 @@
List<StationObjModel> stationList = new ArrayList<>();
Integer crnNo = findCrnNoResult.getCrnNo();
if (findCrnNoResult.getCrnType().equals(SlaveType.Crn)) {
- BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+ BasCrnp basCrnp = basCrnpService.getOne(new QueryWrapper<BasCrnp>().eq("crn_no", crnNo));
if(basCrnp == null) {
return null;
}
stationList = basCrnp.getOutStationList$();
} else if (findCrnNoResult.getCrnType().equals(SlaveType.DualCrn)) {
- BasDualCrnp basDualCrnp = basDualCrnpService.selectOne(new EntityWrapper<BasDualCrnp>().eq("crn_no", crnNo));
+ BasDualCrnp basDualCrnp = basDualCrnpService.getOne(new QueryWrapper<BasDualCrnp>().eq("crn_no", crnNo));
if(basDualCrnp == null) {
return null;
}
@@ -480,8 +605,8 @@
Integer finalSourceStationId = null;
for (StationObjModel stationObjModel : stationList) {
try {
- List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(stationObjModel.getStationId(), targetStationId);
- if(navigateNodes != null) {
+ List<NavigateNode> navigateNodes = navigateUtils.calcReachablePathByStationId(stationObjModel.getStationId(), targetStationId);
+ if(!navigateNodes.isEmpty()) {
finalSourceStationId = stationObjModel.getStationId();
break;
}
--
Gitblit v1.9.1