From 43d6ae86bc229a1a75637fae33be378e105016e3 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期日, 29 三月 2026 20:47:11 +0800
Subject: [PATCH] RCS通知
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 128 ++++++++++++++++++++++--------------------
1 files changed, 68 insertions(+), 60 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 a7197d7..6423c9f 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
@@ -13,6 +13,7 @@
import com.vincent.rsf.server.api.config.RemotesInfoProperties;
import com.vincent.rsf.server.api.controller.erp.params.InOutResultReportParam;
import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
+import com.vincent.rsf.server.api.service.RcsBusTaskNoticeService;
import com.vincent.rsf.server.api.entity.CommonResponse;
import com.vincent.rsf.server.api.entity.constant.RcsConstant;
import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
@@ -131,6 +132,8 @@
private CloudWmsNotifyLogService cloudWmsNotifyLogService;
@Autowired
private WarehouseService warehouseService;
+ @Autowired
+ private RcsBusTaskNoticeService rcsBusTaskNoticeService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -509,7 +512,7 @@
}
/**
- * 鎵嬪姩瀹屾垚浠诲姟
+ * 鎵嬪姩瀹屾垚浠诲姟锛氬叆搴撶被缃� 98銆佸嚭搴撶被缃� 198锛屽簱浣�/鍗曟嵁鎵e噺涓庝笂鎶ョ敱瀵瑰簲瀹氭椂浠诲姟鎵ц
*
* @param id
* @param loginUserId
@@ -549,13 +552,22 @@
}
modiftyTaskSort(task, loginUserId);
-
- // 濡傛灉浠诲姟鐘舵�佸凡缁忔槸AWAIT (196)锛屽啀娆$偣鍑诲畬缁撴椂锛岀洿鎺ュ畬鎴�
- if (task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
- // AWAIT鐘舵�佺殑浠诲姟鍐嶆瀹岀粨锛岀洿鎺ヨ缃负鍑哄簱瀹屾垚
+
+ // 鍏ュ簱锛�->98锛屽嚭搴擄細-> 198锛岀敱 complateOutStock 瀹氭椂浠诲姟 鏇存柊搴撳瓨
+ if (task.getTaskType() < 100) {
+ task.setTaskStatus(TaskStsType.COMPLETE_IN.id);
+ if (StringUtils.isNotBlank(task.getOrgSite())) {
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, task.getOrgSite()));
+ if (Objects.nonNull(station) && station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+ if (!basStationService.updateById(station)) {
+ throw new CoolException("鍏ュ簱绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+ }
+ } else {
task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
-
- // 鏇存柊鍑哄簱绔欑偣鐘舵�侊紙涓嶳CS閫氱煡瀹岀粨淇濇寔涓�鑷达級
if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type && StringUtils.isNotBlank(task.getTargSite())) {
BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
.eq(BasStation::getStationName, task.getTargSite()));
@@ -566,28 +578,17 @@
}
}
}
- } else {
- // 鍏朵粬鎯呭喌鎸夊師鏈夐�昏緫澶勭悊
- // 鍏ュ簱浠诲姟锛坱askType < 100锛夛細璁剧疆涓哄叆搴撳畬鎴�
- // 鍑哄簱浠诲姟锛坱askType >= 100锛夛細璁剧疆涓虹瓑寰呯‘璁�
- Integer newStatus = task.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id;
- task.setTaskStatus(newStatus);
-
- // 濡傛灉鏄叆搴撲换鍔″畬鎴愶紝鏇存柊鍏ュ簱绔欑偣鐘舵�侊紙涓嶳CS閫氱煡瀹岀粨淇濇寔涓�鑷达級
- if (newStatus.equals(TaskStsType.COMPLETE_IN.id) && StringUtils.isNotBlank(task.getOrgSite())) {
- BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
- .eq(BasStation::getStationName, task.getOrgSite()));
- if (Objects.nonNull(station) && station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
- station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
- if (!basStationService.updateById(station)) {
- throw new CoolException("鍏ュ簱绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
- }
- }
}
+ // 鍘燂細196 鏃跺啀鐐逛竴娆℃墠缃� 198锛涘嚭搴撻娆$偣鍑绘浘缃� 196(AWAIT)
+ // if (task.getTaskStatus().equals(TaskStsType.AWAIT.id)) { task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); ... }
+ // else { Integer newStatus = task.getTaskType() < 100 ? COMPLETE_IN.id : AWAIT.id; ... }
if (!this.updateById(task)) {
throw new CoolException("瀹屾垚浠诲姟澶辫触");
+ }
+ // 绠$悊鍚庡彴銆屽畬鎴愪换鍔°�嶉�氱煡 RCS
+ if (StringUtils.isNotBlank(task.getTaskCode())) {
+ rcsBusTaskNoticeService.notifyTaskStatus(task.getTaskCode(), task.getTaskStatus());
}
return task;
}
@@ -597,11 +598,12 @@
*
* @param id 浠诲姟ID
* @param loginUserId 鐧诲綍鐢ㄦ埛ID
+ * @param notifyRcsFromAdmin 绠$悊鍚庡彴鍏ㄧ増鍑哄簱瀹岀粨鎺ュ彛涓� true 鏃堕�氱煡 RCS锛涘畾鏃�/PDA 绛変负 false
* @return 浠诲姟瀵硅薄
*/
@Override
@Transactional(rollbackFor = Exception.class)
- public Task completeFullOutStock(Long id, Long loginUserId) {
+ public Task completeFullOutStock(Long id, Long loginUserId, boolean notifyRcsFromAdmin) {
// 鏌ヨ浠诲姟
Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
.eq(Task::getId, id));
@@ -667,6 +669,9 @@
if (!this.updateById(task)) {
throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐ワ紒锛�");
+ }
+ if (notifyRcsFromAdmin && StringUtils.isNotBlank(task.getTaskCode())) {
+ rcsBusTaskNoticeService.notifyTaskStatus(task.getTaskCode(), TaskStsType.UPDATED_OUT.id);
}
return task;
@@ -984,59 +989,56 @@
}
}
- // 濡傛灉鏈変换鍔″凡涓嬪彂鍒癛CS锛屽厛璋冪敤RCS鍙栨秷鎺ュ彛
+ // 宸蹭笅鍙� RCS 鐨勫伐浣滄。锛氬繀椤诲厛璋� RCS 鍙栨秷鎺ュ彛鎴愬姛锛屽惁鍒欎笉鍏佽鍙栨秷宸ヤ綔妗�
boolean rcsCancelSuccess = false;
if (!rcsTaskCodes.isEmpty()) {
- // 妫�鏌� RCS API 閰嶇疆鏄惁鏈夋晥
if (rcsApi == null || StringUtils.isBlank(rcsApi.getHost()) || StringUtils.isBlank(rcsApi.getPort())) {
- log.error("========== RCS浠诲姟鍙栨秷澶辫触 ==========");
- log.error("RCS API 閰嶇疆鏃犳晥锛乭ost: {}, port: {}",
- rcsApi != null ? rcsApi.getHost() : "null",
- rcsApi != null ? rcsApi.getPort() : "null");
- // 鍗充娇閰嶇疆鏃犳晥锛屼篃缁х画鎵ц浠诲姟鍒犻櫎鎿嶄綔
- } else {
- try {
- log.info("========== 寮�濮嬪彇娑圧CS浠诲姟 ==========");
- log.info("闇�瑕佸彇娑堢殑RCS浠诲姟缂栧彿锛歿}", rcsTaskCodes);
- String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.cancelTask;
- log.info("RCS鍙栨秷浠诲姟璇锋眰鍦板潃锛歿}", rcsUrl);
-
- // 濡傛灉娌℃湁鎵规缂栧彿锛屼娇鐢ㄧ涓�涓换鍔$紪鍙蜂綔涓烘壒娆$紪鍙�
- if (StringUtils.isBlank(batchNo) && !rcsTaskCodes.isEmpty()) {
+ throw new CoolException("浠诲姟宸蹭笅鍙慠CS锛屼絾鏈厤缃甊CS鍦板潃锛屾棤娉曞彇娑堬紒锛�");
+ }
+ if (restTemplate == null) {
+ throw new CoolException("浠诲姟宸蹭笅鍙慠CS锛屼絾鏃犳硶璋冪敤RCS鍙栨秷鎺ュ彛锛屾棤娉曞彇娑堬紒锛�");
+ }
+ try {
+ log.info("========== 寮�濮嬪彇娑圧CS浠诲姟 ==========");
+ log.info("闇�瑕佸彇娑堢殑RCS浠诲姟缂栧彿锛歿}", rcsTaskCodes);
+ String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.cancelTask;
+ log.info("RCS鍙栨秷浠诲姟璇锋眰鍦板潃锛歿}", rcsUrl);
+
+ if (StringUtils.isBlank(batchNo)) {
batchNo = rcsTaskCodes.get(0);
}
-
+
Map<String, Object> cancelParams = new HashMap<>();
cancelParams.put("tasks", rcsTaskCodes);
if (StringUtils.isNotBlank(batchNo)) {
cancelParams.put("batchNo", batchNo);
}
-
+
log.info("RCS鍙栨秷浠诲姟璇锋眰鍙傛暟锛歿}", JSONObject.toJSONString(cancelParams));
-
+
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("api-version", "v2.0");
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(cancelParams, headers);
-
+
long startTime = System.currentTimeMillis();
ResponseEntity<String> exchange = restTemplate.exchange(rcsUrl, HttpMethod.POST, httpEntity, String.class);
long endTime = System.currentTimeMillis();
-
+
log.info("RCS鍙栨秷浠诲姟鍝嶅簲鑰楁椂锛歿}ms", (endTime - startTime));
log.info("RCS鍙栨秷浠诲姟鍝嶅簲鐘舵�佺爜锛歿}", exchange.getStatusCode());
log.info("RCS鍙栨秷浠诲姟鍝嶅簲浣擄細{}", exchange.getBody());
-
+
if (Objects.isNull(exchange.getBody())) {
log.error("RCS鍙栨秷浠诲姟澶辫触锛氬搷搴斾綋涓虹┖");
throw new CoolException("RCS鍙栨秷浠诲姟澶辫触锛氬搷搴斾綋涓虹┖");
}
-
+
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.coercionConfigDefaults()
.setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
-
+
if (result.getCode() == 200) {
log.info("========== RCS浠诲姟鍙栨秷鎴愬姛 ==========");
log.info("鎴愬姛鍙栨秷鐨凴CS浠诲姟缂栧彿锛歿}", rcsTaskCodes);
@@ -1045,22 +1047,28 @@
log.error("RCS鍙栨秷浠诲姟澶辫触锛歿}", result.getMsg());
throw new CoolException("RCS鍙栨秷浠诲姟澶辫触锛�" + result.getMsg());
}
- } catch (JsonProcessingException e) {
- log.error("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛歿}", e.getMessage(), e);
- throw new CoolException("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛�" + e.getMessage());
- } catch (Exception e) {
- log.error("RCS鍙栨秷浠诲姟寮傚父锛歿}", e.getMessage(), e);
- throw new CoolException("RCS鍙栨秷浠诲姟寮傚父锛�" + e.getMessage());
- }
+ } catch (CoolException e) {
+ throw e;
+ } catch (JsonProcessingException e) {
+ log.error("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛歿}", e.getMessage(), e);
+ throw new CoolException("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛�" + e.getMessage());
+ } catch (Exception e) {
+ log.error("RCS鍙栨秷浠诲姟寮傚父锛歿}", e.getMessage(), e);
+ throw new CoolException("RCS鍙栨秷浠诲姟寮傚父锛�" + e.getMessage());
}
}
- // 鏌ヨ绗﹀悎鍙栨秷鏉′欢鐨勪换鍔★紙鐘舵�佷负1銆�101銆�199锛�
- List<Integer> allowedStatuses = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id, TaskStsType.WAVE_SEED.id);
+ // 鍙彇娑堢姸鎬侊細鍘� 1/101锛堜笉鍚� 199锛夛紱鎷f枡/鐩樼偣鍑哄簱 RCS 鎵ц涓�(<198)锛涙嫞鏂�/鐩樼偣鍐嶅叆搴�(53/57)涓嶆敮鎸佸彇娑�
List<Task> tasks = this.list(new LambdaQueryWrapper<Task>()
.in(Task::getTaskType, list)
.in(Task::getId, (Object[]) ids)
- .in(Task::getTaskStatus, allowedStatuses));
+ .and(w -> w
+ .in(Task::getTaskStatus, Arrays.asList(
+ TaskStsType.GENERATE_IN.id,
+ TaskStsType.GENERATE_OUT.id))
+ .or(w2 -> w2
+ .in(Task::getTaskType, TaskType.TASK_TYPE_PICK_AGAIN_OUT.type, TaskType.TASK_TYPE_CHECK_OUT.type)
+ .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))));
// 濡傛灉绗﹀悎鍙栨秷鏉′欢鐨勪换鍔′负绌猴紝浣哛CS鍙栨秷鎴愬姛锛屽厑璁哥户缁紙鍙兘鏄换鍔$姸鎬佸凡鍙樻洿锛�
if (tasks.isEmpty() && !rcsCancelSuccess) {
--
Gitblit v1.9.1