From 6e695903059e82c1c376bf2926ffb8b209c0dc3e Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期三, 11 三月 2026 15:45:57 +0800
Subject: [PATCH] lsh#
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 162 ++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 127 insertions(+), 35 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 8f88520..79224eb 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -33,6 +33,8 @@
import com.vincent.rsf.server.manager.enums.LocStsType;
import com.vincent.rsf.server.system.entity.Config;
import com.vincent.rsf.server.system.service.ConfigService;
+import com.vincent.rsf.server.system.entity.FlowStepInstance;
+import com.vincent.rsf.server.system.service.FlowStepInstanceService;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import com.vincent.rsf.server.system.utils.SystemAuthUtils;
import lombok.Synchronized;
@@ -120,6 +122,10 @@
private RestTemplate restTemplate;
@Autowired
private RemotesInfoProperties.RcsApi rcsApi;
+ @Autowired
+ private FlowStepInstanceService flowStepInstanceService;
+ @Autowired
+ private RemotesInfoProperties.WmsOpenApi wmsOpenApi;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -398,7 +404,9 @@
if (Objects.isNull(station) || !station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
throw new CoolException("绔欑偣涓嶅瓨鍦ㄦ垨绔欑偣涓嶅浜庣┖搴撶姸鎬侊紒锛�");
}
- station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+ if (!station.getType().equals(0)){
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+ }
if (!basStationService.updateById(station)) {
throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�");
@@ -806,26 +814,104 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Task operateComplete(Long id, Long loginUserId) {
- List<Integer> longs = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id);
- Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
- .eq(Task::getId, id)
- .in(Task::getTaskStatus, longs));
-
+ Task task = getById(id);
if (Objects.isNull(task)) {
- throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶄换鍔′笉鍙墽琛屽畬缁撴搷浣滐紒锛�");
+ throw new CoolException("鏁版嵁閿欒锛氫换鍔′笉瀛樺湪锛侊紒");
}
-
+ if (task.getTaskStatus() != null && TERMINAL_OR_WAITING_STATUS.contains(task.getTaskStatus())) {
+ throw new CoolException("浠诲姟宸插浜庣粓鎬佹垨绛夊緟搴撳瓨鏇存柊锛屾棤闇�瀹岀粨");
+ }
+ List<FlowStepInstance> steps = flowStepInstanceService.list(
+ new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getTaskNo, task.getTaskCode())
+ .orderByAsc(FlowStepInstance::getStepOrder));
+ int maxCompletedOrder = steps.stream()
+ .filter(s -> s.getStepOrder() != null && s.getStatus() != null && s.getStatus() == 3)
+ .mapToInt(FlowStepInstance::getStepOrder)
+ .max().orElse(-1);
+ for (FlowStepInstance step : steps) {
+ if (step.getStepOrder() != null && step.getStepOrder() > maxCompletedOrder) {
+ step.setStatus((short) 5);
+ flowStepInstanceService.updateById(step);
+ }
+ }
modiftyTaskSort(task, loginUserId);
- //
-// if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
-// task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
-// } else {
- task.setTaskStatus(task.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : task.getTaskType()==101? TaskStsType.COMPLETE_OUT.id:TaskStsType.AWAIT.id);
-// }
- if (!this.updateById(task)) {
- throw new CoolException("瀹屾垚浠诲姟澶辫触");
+ applyTransferEndStatus(task);
+ // applyTransferEndStatus 鏈尮閰嶅埌鐨勪换鍔$被鍨嬶紙鏈疆涓� 98/196/198/9999锛夋椂鍏滃簳缃粓鎬�
+ if (task.getTaskStatus() == null || (!task.getTaskStatus().equals(TaskStsType.COMPLETE_IN.id)
+ && !task.getTaskStatus().equals(TaskStsType.AWAIT.id)
+ && !task.getTaskStatus().equals(TaskStsType.COMPLETE_OUT.id)
+ && !task.getTaskStatus().equals(TaskStsType.MISSION_TRANSFER.id))) {
+ task.setTaskStatus(task.getTaskType() != null && task.getTaskType() < 100
+ ? TaskStsType.COMPLETE_IN.id
+ : Integer.valueOf(101).equals(task.getTaskType()) ? TaskStsType.COMPLETE_OUT.id : TaskStsType.AWAIT.id);
+ updateById(task);
}
return task;
+ }
+ @Override
+ public void applyTransferEndStatus(Task task) {
+ if (TaskType.TASK_TYPE_IN.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_PICK_IN.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_CHECK_IN.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_EMPTY_IN.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_MERGE_IN.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_LOC_MOVE.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_OUT.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_MERGE_OUT.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_CHECK_OUT.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type.equals(task.getTaskType())
+ || TaskType.TASK_TYPE_EMPTY_OUT.type.equals(task.getTaskType())) {
+ task.setTaskStatus(TaskStsType.MISSION_TRANSFER.id);
+ } else {
+ return;
+ }
+ updateById(task);
+ }
+
+ /** 缁堟�佹垨绛夊緟瀹氭椂浠诲姟鏇存柊搴撳瓨鐨勭姸鎬併��9999锛屼笉灞曠ず瀹岀粨鎸夐挳 */
+ private static final Set<Integer> TERMINAL_OR_WAITING_STATUS = new HashSet<>(Arrays.asList(
+ TaskStsType.COMPLETE_IN.id, TaskStsType.REPORT_IN.id, TaskStsType.UPDATED_IN.id,
+ TaskStsType.COMPLETE_OUT.id, TaskStsType.WAVE_SEED.id, TaskStsType.UPDATED_OUT.id,
+ TaskStsType.MISSION_TRANSFER.id, TaskStsType.MISSION_TRANSFER_END.id));
+
+ /** 缁堟��/9999 鏃犳寜閽紱鐘舵�佸湪姝ラ涓壘涓嶅埌鎴栨棤涓嬩竴姝ワ紙鏈�鍚庝竴姝ワ級鍒欐棤瀹岀粨鎸夐挳 */
+ @Override
+ public void fillCanComplete(List<Task> tasks) {
+ if (tasks == null || tasks.isEmpty()) {
+ return;
+ }
+ Set<Integer> terminalSet = TERMINAL_OR_WAITING_STATUS;
+ List<String> codes = tasks.stream().map(Task::getTaskCode).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+ if (codes.isEmpty()) {
+ tasks.forEach(t -> t.setCanComplete(Boolean.FALSE));
+ return;
+ }
+ List<FlowStepInstance> steps = codes.size() == 1
+ ? flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>().eq(FlowStepInstance::getTaskNo, codes.get(0)).orderByAsc(FlowStepInstance::getStepOrder))
+ : flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>().in(FlowStepInstance::getTaskNo, codes).orderByAsc(FlowStepInstance::getStepOrder));
+ Map<String, List<FlowStepInstance>> stepsByTaskNo = steps.stream().collect(Collectors.groupingBy(FlowStepInstance::getTaskNo));
+ for (Task task : tasks) {
+ if (task.getTaskStatus() != null && terminalSet.contains(task.getTaskStatus())) {
+ task.setCanComplete(Boolean.FALSE);
+ continue;
+ }
+ List<FlowStepInstance> taskSteps = stepsByTaskNo.get(task.getTaskCode());
+ if (taskSteps == null || taskSteps.isEmpty()) {
+ task.setCanComplete(Boolean.FALSE);
+ continue;
+ }
+ FlowStepInstance match = taskSteps.stream()
+ .filter(s -> s.getWmsNowTaskStatus() != null && s.getWmsNowTaskStatus().equals(task.getTaskStatus()))
+ .findFirst().orElse(null);
+ if (match == null) {
+ task.setCanComplete(Boolean.FALSE);
+ continue;
+ }
+ boolean isLastStep = match.getWmsNextTaskStatus() == null || match.getWmsNextTaskStatus().equals(TaskStsType.MISSION_TRANSFER.id);
+ task.setCanComplete(!isLastStep);
+ }
}
/**
@@ -1272,7 +1358,9 @@
if (null == basStation) {
throw new CoolException("绔欑偣鐘舵�侀敊璇紒锛�");
}
- basStation.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
+ if (!basStation.getType().equals(0)){
+ basStation.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
+ }
if (!basStationService.updateById(basStation)) {
throw new CoolException("鏇存柊绔欑偣鐘舵�佸け璐ワ紒锛�");
}
@@ -1460,7 +1548,7 @@
if (!task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
minQty = Math.round((working.getAnfme() - taskItem.getAnfme()) * 1000000) / 1000000.0;
}
- if (minQty.compareTo(0.0) >= 0) {
+ if (!minQty.equals(0D) && minQty>0D) {
taskItem.setAnfme(minQty);
if (!taskItemService.updateById(taskItem)) {
throw new CoolException("浠诲姟鏄庣粏淇敼澶辫触锛侊紒");
@@ -1559,21 +1647,21 @@
throw new CoolException("搴撲綅鏄庣粏涓嶅瓨鍦紒锛�");
}
- List<LocItemWorking> workings = new ArrayList<>();
- for (LocItem item : locItems) {
- LocItemWorking working = new LocItemWorking();
- BeanUtils.copyProperties(item, working);
- working.setId(null)
- .setTaskId(task.getId())
- .setLocItemId(item.getId())
- .setUpdateBy(loginUserId)
- .setUpdateTime(new Date());
- workings.add(working);
- }
-
- if (!locItemWorkingService.saveBatch(workings)) {
- throw new CoolException("涓存椂搴撳瓨淇濆瓨澶辫触锛侊紒");
- }
+// List<LocItemWorking> workings = new ArrayList<>();
+// for (LocItem item : locItems) {
+// LocItemWorking working = new LocItemWorking();
+// BeanUtils.copyProperties(item, working);
+// working.setId(null)
+// .setTaskId(task.getId())
+// .setLocItemId(item.getId())
+// .setUpdateBy(loginUserId)
+// .setUpdateTime(new Date());
+// workings.add(working);
+// }
+//
+// if (!locItemWorkingService.saveBatch(workings)) {
+// throw new CoolException("涓存椂搴撳瓨淇濆瓨澶辫触锛侊紒");
+// }
try {
//鏇存柊搴撲綅鏄庣粏
@@ -2097,12 +2185,16 @@
/**鍒ゆ柇鏄惁鍏夌數绔欑偣锛岄潪鍏夊簵绔欑偣闇�绠℃帶绔欑偣鐘舵��*/
if (!Objects.isNull(station) && station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
if (task.getTaskType() <= TaskType.TASK_TYPE_CHECK_IN.type && !task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
- station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+ if (!station.getType().equals(0)){
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+ }
if (!basStationService.updateById(station)) {
throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�");
}
} else if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type) {
- station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+ if (!station.getType().equals(0)){
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+ }
if (!basStationService.updateById(station)) {
throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�");
}
--
Gitblit v1.9.1