From 8f8b6a47ce277cad0b640c328ab3962419e1c024 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期五, 06 二月 2026 13:00:47 +0800
Subject: [PATCH] RCS完整流程
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 125 +++++++++++++++++++++++++++++++++++------
1 files changed, 107 insertions(+), 18 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 fc391e0..2500a3a 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
@@ -428,7 +428,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 +437,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)) {
@@ -463,12 +463,18 @@
@Override
public R receiveExMsg(ExMsgParams params) {
if (Objects.isNull(params)) {
+ log.error("RCS鍥炶皟涓虹┖锛�");
return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
+ log.info("========== 鎺ユ敹RCS鍥炶皟 ==========");
+ log.info("浠诲姟缂栧彿锛歿}锛屼簨浠剁被鍨嬶細{}", params.getSeqNum(), params.getEventType());
Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSeqNum()));
if (Objects.isNull(task)) {
- throw new CoolException("浠诲姟涓嶅瓨鍦ㄥ彲宸茬粨鏉燂紒锛�");
+ log.error("浠诲姟涓嶅瓨鍦ㄦ垨宸茬粨鏉燂紒浠诲姟缂栧彿锛歿}", params.getSeqNum());
+ throw new CoolException("浠诲姟涓嶅瓨鍦ㄦ垨宸茬粨鏉燂紒锛�");
}
+ log.info("鏌ヨ鍒颁换鍔� - 浠诲姟缂栫爜锛歿}锛屼换鍔$被鍨嬶細{}锛屽綋鍓嶇姸鎬侊細{}",
+ task.getTaskCode(), task.getTaskType(), task.getTaskStatus());
/**鏂欑鎼繍涓紝 淇敼绔欑偣鐘舵��*/
// if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_OBIT.event)) {
@@ -493,21 +499,40 @@
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)) {
+ log.error("鍏ュ簱绔欑偣涓嶅瓨鍦� - 绔欑偣鍚嶇О锛歿}锛屼换鍔$紪鐮侊細{}", task.getOrgSite(), task.getTaskCode());
throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
}
+ log.info("鏌ヨ鍒板叆搴撶珯鐐� - 绔欑偣鍚嶇О锛歿}锛岀珯鐐圭被鍨嬶細{}锛屽綋鍓嶇姸鎬侊細{}",
+ station.getStationName(), station.getType(), station.getUseStatus());
if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ log.info("鏇存柊鍏ュ簱绔欑偣鐘舵�� - 绔欑偣鍚嶇О锛歿}锛屾柊鐘舵�侊細{}", station.getStationName(), LocStsType.LOC_STS_TYPE_O.type);
station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
if (!basStationService.updateById(station)) {
+ log.error("鍏ュ簱绔欑偣鐘舵�佷慨鏀瑰け璐� - 绔欑偣鍚嶇О锛歿}", station.getStationName());
throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
+ log.info("鍏ュ簱绔欑偣鐘舵�佹洿鏂版垚鍔� - 绔欑偣鍚嶇О锛歿}", station.getStationName());
}
}
- 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("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ log.info("鍑嗗鏇存柊鍏ュ簱浠诲姟鐘舵�� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}",
+ task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_IN.id);
+
+ // 濡傛灉浠诲姟鐘舵�佸凡缁忓ぇ浜庣瓑浜庣洰鏍囩姸鎬侊紝璺宠繃鏇存柊
+ if (task.getTaskStatus() >= TaskStsType.COMPLETE_IN.id) {
+ log.warn("鍏ュ簱浠诲姟鐘舵�佸凡澶т簬绛変簬鐩爣鐘舵�侊紝璺宠繃鏇存柊 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}",
+ task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_IN.id);
+ } else {
+ boolean updated = taskService.update(new LambdaUpdateWrapper<Task>()
+ .lt(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)
+ .eq(Task::getTaskCode, task.getTaskCode())
+ .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id));
+ if (!updated) {
+ log.error("鍏ュ簱浠诲姟鐘舵�佷慨鏀瑰け璐� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}锛屽彲鑳戒换鍔$姸鎬佸凡澶т簬绛変簬鐩爣鐘舵��",
+ task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_IN.id);
+ throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛佸綋鍓嶄换鍔$姸鎬侊細" + task.getTaskStatus() + "锛岀洰鏍囩姸鎬侊細" + TaskStsType.COMPLETE_IN.id);
+ }
+ log.info("鍏ュ簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
}
} else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
@@ -515,28 +540,49 @@
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)) {
-
/**淇敼鍑哄簱绔欑偣鐘舵��*/
BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
.eq(BasStation::getStationName, task.getTargSite()));
if (Objects.isNull(station)) {
+ log.error("鍑哄簱绔欑偣涓嶅瓨鍦� - 绔欑偣鍚嶇О锛歿}锛屼换鍔$紪鐮侊細{}", task.getTargSite(), task.getTaskCode());
throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
}
+ log.info("鏌ヨ鍒板嚭搴撶珯鐐� - 绔欑偣鍚嶇О锛歿}锛岀珯鐐圭被鍨嬶細{}锛屽綋鍓嶇姸鎬侊細{}",
+ station.getStationName(), station.getType(), station.getUseStatus());
if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ log.info("鏇存柊鍑哄簱绔欑偣鐘舵�� - 绔欑偣鍚嶇О锛歿}锛屾柊鐘舵�侊細{}", station.getStationName(), LocStsType.LOC_STS_TYPE_F.type);
station.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
if (!basStationService.updateById(station)) {
+ log.error("鍑哄簱绔欑偣鐘舵�佷慨鏀瑰け璐� - 绔欑偣鍚嶇О锛歿}", station.getStationName());
throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
+ log.info("鍑哄簱绔欑偣鐘舵�佹洿鏂版垚鍔� - 绔欑偣鍚嶇О锛歿}", station.getStationName());
}
-
- 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("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ log.info("鍑嗗鏇存柊鍑哄簱浠诲姟鐘舵�� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}",
+ task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_OUT.id);
+
+ // 濡傛灉浠诲姟鐘舵�佸凡缁忓ぇ浜庣瓑浜庣洰鏍囩姸鎬侊紝璺宠繃鏇存柊
+ if (task.getTaskStatus() >= TaskStsType.COMPLETE_OUT.id) {
+ log.warn("鍑哄簱浠诲姟鐘舵�佸凡澶т簬绛変簬鐩爣鐘舵�侊紝璺宠繃鏇存柊 - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}",
+ task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_OUT.id);
+ } else {
+ boolean updated = taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
+ .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
+ .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id));
+ if (!updated) {
+ log.error("鍑哄簱浠诲姟鐘舵�佷慨鏀瑰け璐� - 浠诲姟缂栫爜锛歿}锛屽綋鍓嶇姸鎬侊細{}锛岀洰鏍囩姸鎬侊細{}锛屽彲鑳戒换鍔$姸鎬佸凡澶т簬绛変簬鐩爣鐘舵��",
+ task.getTaskCode(), task.getTaskStatus(), TaskStsType.COMPLETE_OUT.id);
+ throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛佸綋鍓嶄换鍔$姸鎬侊細" + task.getTaskStatus() + "锛岀洰鏍囩姸鎬侊細" + TaskStsType.COMPLETE_OUT.id);
+ }
+ log.info("鍑哄簱浠诲姟鐘舵�佹洿鏂版垚鍔� - 浠诲姟缂栫爜锛歿}", task.getTaskCode());
}
}
+ } else {
+ log.warn("鏈鐞嗙殑浜嬩欢绫诲瀷 - 浜嬩欢绫诲瀷锛歿}锛屼换鍔$紪鐮侊細{}锛屼换鍔$被鍨嬶細{}",
+ params.getEventType(), task.getTaskCode(), task.getTaskType());
}
- log.info(JSONObject.toJSONString(params));
+ log.info("========== 浠诲姟鎵ц閫氱煡涓婃姤澶勭悊瀹屾垚 ==========");
+ log.info("澶勭悊缁撴灉锛歿}", JSONObject.toJSONString(params));
return R.ok(JSONObject.toJSONString(params));
}
@@ -549,7 +595,7 @@
@Override
public R pubWcsTask(WcsTaskParams params) {
String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.pubTask;
- log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl, JSONObject.toJSONString(params));
+ log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�3锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl, JSONObject.toJSONString(params));
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("api-version", "v2.0");
@@ -868,6 +914,7 @@
int deviceNo = 0;
Loc loc = new Loc();
InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
+ locTypeDto.setLocType1(18);
List<Loc> loc1 = locService.list(new LambdaQueryWrapper<Loc>()
.eq(Loc::getAreaId, area)
.eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
@@ -923,4 +970,46 @@
inTaskMsgDto.setLocNo(locNo);
return inTaskMsgDto;
}
+
+ /**
+ * @author Ryan
+ * @date 2026/2/6
+ * @description: 鐢宠鍏ュ簱浠诲姟锛屽垎閰嶅簱浣�
+ * @version 1.0
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R allocateLocation(String barcode, String staNo, Integer type) {
+ log.info("========== 寮�濮嬬敵璇峰叆搴撲换鍔★紝鍒嗛厤搴撲綅 ==========");
+ log.info("鏂欑鐮侊細{}锛屽叆搴撶珯鐐癸細{}锛屽叆搴撶被鍨嬶細{}", barcode, staNo, type);
+
+ // 鏋勫缓 TaskInParam 鍙傛暟锛屼笌 /wcs/create/in/task 鎺ュ彛鍙傛暟涓�鑷�
+ TaskInParam param = new TaskInParam();
+ param.setBarcode(barcode);
+ param.setSourceStaNo(staNo);
+ param.setIoType(TaskType.TASK_TYPE_IN.type); // 鍏ュ簱绫诲瀷
+ param.setLocType1(type); // 搴撲綅绫诲瀷锛堥珮浣庢娴嬩俊鍙凤級
+ param.setUser(1L); // 榛樿鐢ㄦ埛ID锛屽彲浠ユ牴鎹疄闄呴渶姹傝皟鏁�
+
+ // 璋冪敤 createInTask 鏂规硶锛屽垱寤哄畬鏁寸殑鍏ュ簱浠诲姟
+ // 璇ユ柟娉曚細鎵ц浠ヤ笅娴佺▼锛�
+ // 1. 楠岃瘉璁惧绔欑偣
+ // 2. 楠岃瘉缁勬嫋鐘舵��
+ // 3. 鐢熸垚浠诲姟缂栫爜
+ // 4. 鑾峰彇搴撲綅鍙�
+ // 5. 鍒涘缓骞朵繚瀛樹换鍔�
+ // 6. 鏇存柊搴撲綅鐘舵��
+ // 7. 鑾峰彇骞堕獙璇佺粍鎷栨槑缁�
+ // 8. 鍒涘缓骞朵繚瀛樹换鍔℃槑缁�
+ // 9. 鏇存柊缁勬墭鐘舵��
+ InTaskMsgDto msgDto = createInTask(param);
+
+ log.info("========== 鐢宠鍏ュ簱浠诲姟鎴愬姛 ==========");
+ log.info("浠诲姟缂栫爜锛歿}锛屽簱浣嶅彿锛歿}", msgDto.getWorkNo(), msgDto.getLocNo());
+
+ // 杩斿洖缁撴灉锛屽彧杩斿洖搴撲綅鍙凤紙鏍规嵁鎺ュ彛鏂囨。瑕佹眰锛�
+ JSONObject result = new JSONObject();
+ result.put("locNo", msgDto.getLocNo());
+ return R.ok(result);
+ }
}
--
Gitblit v1.9.1