From e711c834aec2293c53b07efe53e81e3573c289b6 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期三, 01 四月 2026 11:42:44 +0800
Subject: [PATCH] lsh#
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 607 +++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 479 insertions(+), 128 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index 3005f19..6d3f168 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -19,18 +19,22 @@
import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
import com.vincent.rsf.server.api.entity.dto.SyncLocsDto;
import com.vincent.rsf.server.api.entity.enums.CallBackEvent;
-import com.vincent.rsf.server.api.entity.params.CommonRequest;
-import com.vincent.rsf.server.api.entity.params.ExMsgParams;
-import com.vincent.rsf.server.api.entity.params.WcsTaskParams;
+import com.vincent.rsf.server.api.entity.enums.WcsMsgTypeEvent;
+import com.vincent.rsf.server.api.entity.params.*;
+import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams;
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.api.service.WcsService;
import com.vincent.rsf.server.api.utils.LocUtils;
import com.vincent.rsf.server.api.utils.SlaveProperties;
import com.vincent.rsf.server.manager.entity.*;
+import com.vincent.rsf.server.manager.mapper.LocItemMapper;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.LocServiceImpl;
+import com.vincent.rsf.server.manager.utils.WarehouseLocationRetrievalUtil;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.manager.enums.LocStsType;
+import com.vincent.rsf.server.system.entity.*;
+import com.vincent.rsf.server.system.service.impl.*;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -44,6 +48,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
+import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Random;
@@ -64,7 +69,7 @@
@Autowired
private LocServiceImpl locService;
@Autowired
- private LocItemService locItemService;
+ private LocItemMapper locItemMapper;
@Autowired
private SlaveProperties slaveProperties;
@Autowired
@@ -81,6 +86,16 @@
private RestTemplate restTemplate;
@Autowired
private RemotesInfoProperties.RcsApi rcsApi;
+ @Autowired
+ private UserServiceImpl userService;
+ @Autowired
+ private TaskInstanceServiceImpl taskInstanceService;
+ @Autowired
+ private TaskInstanceNodeServiceImpl taskInstanceNodeService;
+ @Autowired
+ private FlowStepInstanceServiceImpl flowStepInstanceService;
+ @Autowired
+ private FlowInstanceServiceImpl flowInstanceService;
@Override
@@ -116,7 +131,7 @@
public InTaskMsgDto createInTask(TaskInParam param) {
// 楠岃瘉璁惧绔欑偣
- DeviceSite deviceSite = validateDeviceSite(param);
+// DeviceSite deviceSite = validateDeviceSite(param);
// 楠岃瘉缁勬嫋鐘舵��
WaitPakin waitPakin = validateWaitPakin(param.getBarcode());
@@ -134,7 +149,7 @@
// 鍒涘缓骞朵繚瀛樹换鍔�
Task task = createTask(ruleCode, locNo.getLocNo(), waitPakin.getBarcode(),
- deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), param.getUser());
+ null, param.getSourceStaNo().toString(), param.getUser());
// 鏇存柊搴撲綅鐘舵��
updateLocStatus(task.getTargLoc(), waitPakin.getBarcode());
@@ -157,16 +172,16 @@
/**
* 楠岃瘉璁惧绔欑偣
*/
- private DeviceSite validateDeviceSite(TaskInParam param) {
- DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
- .eq(DeviceSite::getSite, param.getSourceStaNo())
- .eq(DeviceSite::getType, param.getIoType()));
-
- if (Objects.isNull(deviceSite)) {
- throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�");
- }
- return deviceSite;
- }
+// private DeviceSite validateDeviceSite(TaskInParam param) {
+// DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+// .eq(DeviceSite::getSite, param.getSourceStaNo())
+// .eq(DeviceSite::getType, param.getIoType()));
+//
+// if (Objects.isNull(deviceSite)) {
+// throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�");
+// }
+// return deviceSite;
+// }
/**
* 楠岃瘉缁勬嫋鐘舵��
@@ -200,7 +215,7 @@
String targetSite, String sourceSiteNo, Long loginUserId) {
Task task = new Task();
task.setTaskCode(ruleCode)
- .setTaskStatus(TaskStsType.GENERATE_IN.id)
+ .setTaskStatus(TaskStsType.MISSION_INITIAL.id)
.setTaskType(TaskType.TASK_TYPE_IN.type)
.setWarehType(WarehType.WAREHOUSE_TYPE_CRN.val)
.setTargLoc(targetLoc)
@@ -220,10 +235,17 @@
* 鏇存柊搴撲綅鐘舵��
*/
private void updateLocStatus(String locCode, String barcode) {
- boolean updated = locService.update(new LambdaUpdateWrapper<Loc>()
- .eq(Loc::getCode, locCode)
- .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type)
- .set(Loc::getBarcode, barcode));
+ Loc current = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, locCode));
+ if (Objects.isNull(current)) {
+ throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒");
+ }
+ Loc update = new Loc();
+ update.setId(current.getId());
+ update.setVersion(current.getVersion());
+ update.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+ update.setBarcode(barcode);
+ boolean updated = locService.update(update, new LambdaUpdateWrapper<Loc>()
+ .eq(Loc::getId, current.getId()));
if (!updated) {
throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒");
}
@@ -255,6 +277,9 @@
.setCreateBy(loginUserId)
.setUpdateBy(loginUserId)
.setOrderId(item.getAsnId())
+ .setSplrBatch(item.getBatch())
+ .setPlatWorkCode(item.getPlatWorkCode())
+ .setPlatItemId(item.getPlatItemId())
.setOrderItemId(item.getAsnItemId());
}).collect(Collectors.toList());
@@ -267,11 +292,19 @@
* 鏇存柊缁勬墭鐘舵��
*/
private void updateWaitPakinStatus(String barcode, Long loginUserId) {
- boolean updated = waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>()
- .eq(WaitPakin::getBarcode, barcode)
- .set(WaitPakin::getUpdateBy, loginUserId)
- .set(WaitPakin::getCreateBy, loginUserId)
- .set(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val));
+ WaitPakin current = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+ .eq(WaitPakin::getBarcode, barcode));
+ if (Objects.isNull(current)) {
+ throw new CoolException("缁勬墭鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ WaitPakin update = new WaitPakin();
+ update.setId(current.getId());
+ update.setVersion(current.getVersion());
+ update.setUpdateBy(loginUserId);
+ update.setCreateBy(loginUserId);
+ update.setIoStatus(PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val);
+ boolean updated = waitPakinService.update(update, new LambdaUpdateWrapper<WaitPakin>()
+ .eq(WaitPakin::getId, current.getId()));
if (!updated) {
throw new CoolException("缁勬墭鐘舵�佷慨鏀瑰け璐ワ紒锛�");
@@ -361,6 +394,42 @@
// return locNo;
// }
@Override
+ public InTaskMsgDto getLocNoArea(TaskInParam param) throws Exception {
+ String matnr = null;
+ String batch = null;
+ List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode()));
+ if (Cools.isEmpty(waitPakins) && param.getIoType().equals(TaskType.TASK_TYPE_IN.type)) {
+ throw new CoolException("鏈壘鍒扮粍鎵樹俊鎭紝璇风粍鎵�");
+ } else if (!Cools.isEmpty(waitPakins)) {
+ matnr = waitPakins.get(0).getCode();
+ batch = waitPakins.get(0).getCode();
+ }
+
+ DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(param.getSourceStaNo()));
+ if (Cools.isEmpty(deviceBind)) {
+ throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
+ }
+ WarehouseAreas warehouseArea = warehouseAreasService.getById(deviceBind.getTypeId());
+ if (Cools.isEmpty(warehouseArea)) {
+ throw new CoolException("鏈壘鍒版墍灞炲簱鍖轰俊鎭�");
+ }
+ LocTypeDto locTypeDto = new LocTypeDto(param);
+ InTaskMsgDto dto = null;
+ //鏍规嵁绔嬪簱绫诲瀷鑾峰彇鑾峰彇搴撲綅
+ if (warehouseArea.getType().equals(WarehType.WAREHOUSE_TYPE_CRN.val)) {
+ //鍫嗗灈鏈�
+ dto = getLocNoCrn(param.getOrgLoc(), deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
+
+ } else if (warehouseArea.getType().equals(WarehType.WAREHOUSE_TYPE_FOUR_DIRECTIONS.val)) {
+ //鍥涘悜搴�
+ } else {
+ //CTU 搴撲互鍙婂叾瀹�
+ dto = getLocNoCtu(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
+ }
+ return dto;
+ }
+
+ @Override
public InTaskMsgDto getLocNo(TaskInParam param) throws Exception {
String matnr = null;
String batch = null;
@@ -371,13 +440,13 @@
matnr = waitPakins.get(0).getCode();
batch = waitPakins.get(0).getCode();
}
- List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
- .eq(DeviceSite::getSite, param.getSourceStaNo())
- .eq(DeviceSite::getType, param.getIoType())
- );
- if (Cools.isEmpty(deviceSites)) {
- throw new CoolException("鏈壘鍒扮珯鐐硅矾寰勪俊鎭�");
- }
+// List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
+// .eq(DeviceSite::getSite, param.getSourceStaNo())
+// .eq(DeviceSite::getType, param.getIoType())
+// );
+// if (Cools.isEmpty(deviceSites)) {
+// throw new CoolException("鏈壘鍒扮珯鐐硅矾寰勪俊鎭�");
+// }
DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(param.getSourceStaNo()));
if (Cools.isEmpty(deviceBind)) {
throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
@@ -428,7 +497,7 @@
for (SyncLocsDto dto : dtos) {
Loc loc = new Loc();
String string = new Random().nextInt(10000000) + "";
- Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, string));
+ Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, dto.getLocNo()));
if (!Objects.isNull(one)) {
string = new Random().nextInt(10000000) + "";
}
@@ -437,11 +506,11 @@
.setRow(dto.getRow())
.setLev(dto.getLev())
.setId(null)
- .setAreaId(41L)
- .setWarehouseId(27L)
+ .setAreaId(42L)
+ .setWarehouseId(29L)
.setBarcode(string)
.setCol(dto.getBay())
- .setType(dto.getLocType())
+ .setType(dto.getLocType().equals("16") ? "17" : "15")
.setStatus(dto.getStatusBool())
.setUseStatus(LocStsType.getLocSts(dto.getLocSts()));
if (!locService.save(loc)) {
@@ -467,72 +536,111 @@
}
Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSeqNum()));
if (Objects.isNull(task)) {
- throw new CoolException("浠诲姟涓嶅瓨鍦ㄥ彲宸茬粨鏉燂紒锛�");
+ throw new CoolException("浠诲姟涓嶅瓨鍦ㄥ彲浠ョ粨鏉燂紒锛�");
+ }
+ FlowStepInstance flowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getTaskNo, task.getTaskCode())
+ .eq(FlowStepInstance::getWmsNowTaskStatus, task.getTaskStatus())
+ .eq(FlowStepInstance::getStatus, (short) 1).last("limit 1"));
+ if (Cools.isEmpty(flowStepInstance)){
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ if (!MissionStepType.getTaskRECEIVE().contains(flowStepInstance.getStepType())){
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鐩稿叧浠诲姟绫诲瀷闈炴帴鏀跺瀷锛屾楠ら敊涔憋紒锛侊紒");
}
+ FlowInstance flowInstance = flowInstanceService.getById(flowStepInstance.getFlowInstanceId());
+ if (Cools.isEmpty(flowInstance)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ List<FlowStepInstance> flowStepInstances = flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getFlowInstanceId, flowInstance.getId()).eq(FlowStepInstance::getStatus, (short) 0));
+ flowInstance.setStatus(flowStepInstances.isEmpty()? (short) 2:(short) 1);
+ TaskInstanceNode taskInstanceNode = taskInstanceNodeService.getById(flowInstance.getNodeInstanceId());
+ if (Cools.isEmpty(taskInstanceNode)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ taskInstanceNode.setStatus(flowInstance.getStatus());
+ TaskInstance taskInstance = taskInstanceService.getById(flowInstance.getTaskId());
+ if (Cools.isEmpty(taskInstance)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+
+
/**鏂欑鎼繍涓紝 淇敼绔欑偣鐘舵��*/
- if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_OBIT.event)) {
+ if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_BIN.event)) {
+ if (!flowStepInstance.getStepType().equals(MissionStepType.MISSION_STEP_TYPE_RECEIVE_BIN.type)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
- if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
- BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite()));
- if (Objects.isNull(station)) {
- throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
- }
- if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
- station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
- if (!basStationService.updateById(station)) {
- throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
- }
- }
- } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)) {
+ || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_IN.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)) {
/**淇敼鍑哄簱绔欑偣鐘舵��*/
BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
- .eq(BasStation::getStationName, task.getTargSite()));
+ .eq(BasStation::getStationName, task.getOrgSite()));
if (Objects.isNull(station)) {
throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
}
if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
- station.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+ station.setBarcode(null);
if (!basStationService.updateById(station)) {
throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
- }
- }
- /**鍙栫瀹屾垚锛� 淇敼浠诲姟鐘舵��*/
- } else if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_END.event)) {
- if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
- if (!taskService.update(new LambdaUpdateWrapper<Task>()
- .lt(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)
- .eq(Task::getTaskCode, task.getTaskCode())
- .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) {
- throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
} else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)) {
- if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
- .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
- .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))) {
- throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
+ || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) {
+// /**淇敼鍑哄簱绔欑偣鐘舵��*/
+// BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+// .eq(BasStation::getStationName, task.getOrgLoc()));
+// if (Objects.isNull(station)) {
+// throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+// }
+// if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+// station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+// station.setBarcode(null);
+// if (!basStationService.updateById(station)) {
+// throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+// }
+// }
+ } else if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)){
+ //鏌ヨ姝ラ 娓呮婧愬簱浣嶆垨鑰呬腑闂寸珯鐐规暟鎹�
+ //寰呬慨鏀� 鍏堥粯璁ゆ竻闄ゆ簮搴撲綅
+
}
+ /**鍙栫瀹屾垚锛� 淇敼浠诲姟鐘舵��*/
+ } else if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_END.event)) {
+ if (flowStepInstance.getStepType().equals(MissionStepType.MISSION_STEP_TYPE_RECEIVE_BIN.type)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>璇峰厛鍑虹珯璇锋眰锛侊紒锛�");
+ }
+ }
+
+
+ task.setTaskStatus(flowStepInstance.getWmsNextTaskStatus());
+ flowStepInstance.setStatus((short)3);
+
+ flowStepInstanceService.updateById(flowStepInstance);
+ taskService.updateById(task);
+ if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
+ FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getStatus, (short)0)
+ .eq(FlowStepInstance::getTaskNo, flowStepInstance.getTaskNo())
+ .eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder() + 1)
+ .eq(FlowStepInstance::getWmsNowTaskStatus, flowStepInstance.getWmsNextTaskStatus()));
+ if (Cools.isEmpty(nextFlowStepInstance)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ nextFlowStepInstance.setStatus((short)1);
+
+ flowStepInstanceService.updateById(nextFlowStepInstance);
+ } else {
+ taskInstance.setStatus((short)2);
+ taskInstanceService.updateById(taskInstance);
}
log.info(JSONObject.toJSONString(params));
return R.ok(JSONObject.toJSONString(params));
@@ -639,7 +747,7 @@
//鍏ュ簱闈犺繎鎽嗘斁
if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr) && Cools.isEmpty(orgLoc)) {
if (nearRow != curRow) {
- List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr));
+ List<LocItem> locItems = locItemMapper.selectList(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr));
for (LocItem locItem : locItems) {
Loc loc1 = locService.getById(locItem.getLocId());
if (LocUtils.isShallowLoc(loc1.getCode())) {
@@ -647,7 +755,7 @@
}
String shallowLocNo = LocUtils.getShallowLoc(loc1.getCode());
// 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
- Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo));
+ Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo).last("limit 1"));
if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
if (LocUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
loc = shallowLoc;
@@ -659,40 +767,22 @@
}
}
-// // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
-// if (ioType == 10 && deviceBind.getEmptySimilar().equals("1")) {
-// List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-// .eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow).eq("whs_type", rowLastnoType.getType().longValue()));
-// if (!locMasts.isEmpty()) {
-// for (LocMast loc : locMasts) {
-// if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
-// continue;
-// }
-// String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
-// // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-// LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-// if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
-// if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
-// if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
-// locMast = shallowLoc;
-// crnNo = locMast.getCrnNo();
-// break;
-// }
-// }
-// }
-// }
-// }
-// }
- //鏌ユ壘璺緞
- DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
- .eq(DeviceSite::getType, ioType)
- .eq(DeviceSite::getSite, sourceStaNo)
- .eq(DeviceSite::getChannel, channel)
- );
- if (Cools.isEmpty(deviceSite)) {
- channel = 0;
- } else {
- inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
+
+
+ if (loc != null) {
+ //鏌ユ壘璺緞
+ boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
+// DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+// .eq(DeviceSite::getType, ioType)
+// .eq(DeviceSite::getSite, sourceStaNo)
+// .eq(DeviceSite::getChannel, channel).last("limit 1")
+// );
+ if (!available) {
+ channel = 0;
+ loc = null;
+ } else {
+ inTaskMsgDto.setStaNo(sourceStaNo);
+ }
}
//鏇存柊褰撳墠鎺�
@@ -820,6 +910,23 @@
}
}
}
+
+ if (loc != null) {
+ //鏌ユ壘璺緞
+ boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
+// DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+// .eq(DeviceSite::getType, ioType)
+// .eq(DeviceSite::getSite, sourceStaNo)
+// .eq(DeviceSite::getChannel, channel).last("limit 1")
+// );
+ if (!available) {
+ channel = 0;
+ loc = null;
+ } else {
+ inTaskMsgDto.setStaNo(sourceStaNo);
+ }
+ }
+
//鏌ヨ褰撳墠搴撲綅绫诲瀷绌哄簱浣� 灏忎簬5涓垯locmast = null
List<Loc> locTypeLocMasts = locService.list(new LambdaQueryWrapper<Loc>()
.eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
@@ -883,18 +990,34 @@
loc = loc2;
break;
}
+
//鏌ユ壘璺緞
- DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
- .eq(DeviceSite::getType, ioType)
- .eq(DeviceSite::getSite, sourceStaNo)
- .eq(!Objects.isNull(loc.getDeviceNo()), DeviceSite::getDeviceCode, loc.getDeviceNo())
- );
- if (Cools.isEmpty(deviceSite)) {
- deviceNo = 0;
- loc = null;
- } else {
- inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
+ if (loc != null) {
+ //鏌ユ壘璺緞
+ boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
+// DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+// .eq(DeviceSite::getType, ioType)
+// .eq(DeviceSite::getSite, sourceStaNo)
+// .eq(DeviceSite::getChannel, channel).last("limit 1")
+// );
+ if (!available) {
+ deviceNo = 0;
+ loc = null;
+ } else {
+ inTaskMsgDto.setStaNo(sourceStaNo);
+ }
}
+// DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+// .eq(DeviceSite::getType, ioType)
+// .eq(DeviceSite::getSite, sourceStaNo)
+// .eq(!Objects.isNull(loc.getDeviceNo()), DeviceSite::getDeviceCode, loc.getDeviceNo())
+// );
+// if (Cools.isEmpty(deviceSite)) {
+// deviceNo = 0;
+// loc = null;
+// } else {
+// inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
+// }
// 閫掑綊鏌ヨ
if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
// 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
@@ -921,4 +1044,232 @@
inTaskMsgDto.setLocNo(locNo);
return inTaskMsgDto;
}
+
+ /**
+ * WCS鍏ュ簱浠诲姟鐢宠
+ *
+ * @return
+ */
+ @Override
+ public R wcsCreateInTask(CreateInTaskParam params) {
+ if (Objects.isNull(params)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+
+ BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, params.getSourceStaNo()).orderByDesc(BasStation::getId), false);
+ if (Objects.isNull(basStation)) {
+ throw new CoolException(params.getSourceStaNo()+"绔欑偣涓嶅瓨鍦紒锛�");
+ }
+ if (!basStation.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) {
+ throw new CoolException(params.getSourceStaNo()+"绔欑偣闈炴櫤鑳界珯鐐癸紒锛佽浣跨敤PDA缁戝畾鍏ュ簱");
+ }
+ Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode()));
+ if (!Cools.isEmpty(one)) {
+ if (one.getTaskStatus().equals(TaskStsType.MISSION_TRANSFER.id)) {
+ return R.error("浠诲姟宸插瓨鍦ㄤ絾鏄姸鎬佷笉涓�鑷达紒锛侊紒").add("浠诲姟宸插瓨鍦ㄤ絾鏄姸鎬佷笉涓�鑷达紒锛侊紒浠诲姟宸插畬鎴愶紒锛侊紒");
+ }
+ InTaskWcsReportParam inTaskWcsReportParam = new InTaskWcsReportParam();
+ inTaskWcsReportParam.setTaskNo(one.getTaskCode());
+ inTaskWcsReportParam.setLocNo(one.getTargLoc());
+ inTaskWcsReportParam.setTaskPri(one.getSort());
+ return R.ok("浠诲姟宸插瓨鍦ㄧ洿鎺ヤ笅鍙戯紒").add(inTaskWcsReportParam);
+ }
+ List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
+ if (waitPakins.isEmpty()) {
+ throw new CoolException("缁勬墭鍗曟嵁涓嶅瓨鍦� 锛侊紒");
+ }
+ GenerateTaskParams taskParams = new GenerateTaskParams();
+ taskParams.setWaitPakins(waitPakins)
+ .setSiteId(basStation.getId());
+
+ User wcs = userService.getByUsername("wcs", 1L);
+ Long wcsId = 1111L;
+ if (!Cools.isEmpty(wcs)) {
+ wcsId = wcs.getId();
+ }
+ R r = taskService.generateTasksWcs(taskParams, wcsId,params.getRowList());
+ if (r.get("msg").equals("浠诲姟鐢熸垚瀹屾瘯锛�")) {
+ one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode()));
+ InTaskWcsReportParam inTaskWcsReportParam = new InTaskWcsReportParam();
+ inTaskWcsReportParam.setTaskNo(one.getTaskCode());
+ inTaskWcsReportParam.setLocNo(one.getTargLoc());
+ inTaskWcsReportParam.setTaskPri(one.getSort());
+ return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�").add(inTaskWcsReportParam);
+ }
+ return R.error();
+// return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
+// log.info(JSONObject.toJSONString(params));
+// return R.ok(JSONObject.toJSONString(params));
+ }
+
+ /**
+ * WCS浠诲姟涓婃姤閫氱煡
+ *
+ * @return
+ */
+ @Override
+ public R wcsTaskReport(TaskReportParam params) {
+ if (Objects.isNull(params)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSuperTaskNo()));
+ if (Cools.isEmpty(task)) {
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟锛侊紒锛�");
+ }
+ if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_COMPLETE.event)){
+ if (!Cools.isEmpty(task)) {
+ FlowStepInstance flowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getTaskNo, task.getTaskCode())
+ .eq(FlowStepInstance::getWmsNowTaskStatus, task.getTaskStatus())
+ .eq(FlowStepInstance::getStatus, (short) 1).last("limit 1"));
+ if (Cools.isEmpty(flowStepInstance)){
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+
+ if (!MissionStepType.getTaskRECEIVE().contains(flowStepInstance.getStepType())){
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鐩稿叧浠诲姟绫诲瀷闈炴帴鏀跺瀷锛屾楠ら敊涔憋紒锛侊紒");
+ }
+
+ FlowInstance flowInstance = flowInstanceService.getById(flowStepInstance.getFlowInstanceId());
+ if (Cools.isEmpty(flowInstance)) {
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ List<FlowStepInstance> flowStepInstances = flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getFlowInstanceId, flowInstance.getId()).eq(FlowStepInstance::getStatus, (short) 0));
+ flowInstance.setStatus(flowStepInstances.isEmpty()? (short) 2:(short) 1);
+ TaskInstanceNode taskInstanceNode = taskInstanceNodeService.getById(flowInstance.getNodeInstanceId());
+ if (Cools.isEmpty(taskInstanceNode)) {
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ taskInstanceNode.setStatus(flowInstance.getStatus());
+ TaskInstance taskInstance = taskInstanceService.getById(flowInstance.getTaskId());
+ if (Cools.isEmpty(taskInstance)) {
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ task.setTaskStatus(flowStepInstance.getWmsNextTaskStatus());
+ flowStepInstance.setStatus((short)3);
+
+ flowStepInstanceService.updateById(flowStepInstance);
+ taskService.updateById(task);
+ // 鐩樼偣鍐嶅叆搴撲换鍔$粡 WCS 涓婃姤鍙樹负 100锛堝簱瀛樻洿鏂板畬鎴愶級鏃讹紝鍚屾灏嗙洏鐐瑰樊寮傚崟缃负宸插鏍�
+ if (TaskType.TASK_TYPE_CHECK_IN.type.equals(task.getTaskType())
+ && flowStepInstance.getWmsNextTaskStatus() != null
+ && flowStepInstance.getWmsNextTaskStatus().equals(TaskStsType.UPDATED_IN.id)) {
+ taskService.markCheckDiffApprovedWhenCheckInDone(task);
+ }
+ if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
+ FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getStatus, (short)0)
+ .eq(FlowStepInstance::getTaskNo, flowStepInstance.getTaskNo())
+ .eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder() + 1)
+ .eq(FlowStepInstance::getWmsNowTaskStatus, flowStepInstance.getWmsNextTaskStatus()));
+ if (Cools.isEmpty(nextFlowStepInstance)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ nextFlowStepInstance.setStatus((short)1);
+
+ flowStepInstanceService.updateById(nextFlowStepInstance);
+ } else {
+ taskInstance.setStatus((short)2);
+ taskInstanceService.updateById(taskInstance);
+ }
+ return R.ok("浠诲姟瀹屾垚鎴愬姛").add(task);
+
+
+// one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id);
+// if (!taskService.updateById(one)) {
+//// throw new CoolException("瀹屾垚浠诲姟澶辫触");
+// return R.error("瀹屾垚浠诲姟澶辫触").add(one);
+// }
+ }
+ } else if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_CANCEL.event)){
+// if (!Cools.isEmpty(one)) {
+// one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id);
+// return R.ok("锛�").add(one);
+// }
+ return R.error("鏆備笉鍏佽鍙栨秷");
+ }
+ return R.error("鏁版嵁寮傚父");
+ }
+
+ /**
+ * WCS浠诲姟涓婃姤閫氱煡
+ *
+ * @return
+ */
+ @Override
+ public R wcsTaskReport2(TaskReportParam params) {
+ if (Objects.isNull(params)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSuperTaskNo()));
+ if (Cools.isEmpty(one)) {
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟锛侊紒锛�");
+ }
+ if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_COMPLETE.event)){
+ if (!Cools.isEmpty(one)) {
+ one.setTaskStatus(TaskStsType.MISSION_INITIAL.id);
+ one.setOrgSite(one.getTargSite());
+ if (!taskService.updateById(one)) {
+// throw new CoolException("瀹屾垚浠诲姟澶辫触");
+ return R.error("瀹屾垚浠诲姟澶辫触").add(one);
+ }
+ return R.ok("浠诲姟瀹屾垚鎴愬姛").add(one);
+ }
+ } else if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_CANCEL.event)){
+// if (!Cools.isEmpty(one)) {
+// one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id);
+// return R.ok("锛�").add(one);
+// }
+ return R.error("鏆備笉鍏佽鍙栨秷");
+ }
+ return R.error("鏁版嵁寮傚父");
+ }
+
+ /**
+ * WCS鐢宠浠诲姟閲嶆柊鍒嗛厤鍏ュ簱
+ *
+ * @return
+ */
+ @Override
+ public R wcsReassignLoc(ReassignLocParam params) {
+ if (Objects.isNull(params)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
+ if (waitPakins.isEmpty()) {
+ throw new CoolException("鍗曟嵁涓嶅瓨鍦� 锛侊紒");
+ }
+ GenerateTaskParams taskParams = new GenerateTaskParams();
+ taskParams.setWaitPakins(waitPakins)
+ .setSiteId(params.getSourceStaNo().longValue());
+ return R.ok(taskService.generateTasks(taskParams, 111L));
+// return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
+// log.info(JSONObject.toJSONString(params));
+// return R.ok(JSONObject.toJSONString(params));
+ }
+
+ /**
+ * WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅
+ *
+ * @return
+ */
+ @Override
+ public R wcsChangeLoc(ChangeLocParam params) {
+ if (Objects.isNull(params)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
+ if (waitPakins.isEmpty()) {
+ throw new CoolException("鍗曟嵁涓嶅瓨鍦� 锛侊紒");
+ }
+ GenerateTaskParams taskParams = new GenerateTaskParams();
+ taskParams.setWaitPakins(waitPakins)
+ .setSiteId(params.getSourceStaNo().longValue());
+ return R.ok(taskService.generateTasks(taskParams, 111L));
+// return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
+// log.info(JSONObject.toJSONString(params));
+// return R.ok(JSONObject.toJSONString(params));
+ }
}
+
--
Gitblit v1.9.1