diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/client/TransportTaskStatusClient.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/client/TransportTaskStatusClient.java new file mode 100644 index 00000000..3eba30ab --- /dev/null +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/client/TransportTaskStatusClient.java @@ -0,0 +1,54 @@ +package cn.code.nl.module.task.client; + +import cn.code.nl.module.task.dto.TaskStatusCallbackReqDTO; +import cn.code.nl.module.task.dto.TaskStatusCallbackRespDTO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import jakarta.annotation.Resource; + +/** + * LMS/WMS 同步状态回调 HTTP 客户端 + * 通过 Nacos 服务发现 + RestTemplate 调用目标服务 + */ +@Slf4j +@Component +public class TransportTaskStatusClient { + + @Resource + @Qualifier("loadBalancedRestTemplate") + private RestTemplate restTemplate; + + /** + * 同步回调 LMS/WMS,通知任务状态变更(取货完成) + */ + public TaskStatusCallbackRespDTO notifyStatus(TaskStatusCallbackReqDTO reqDTO) { + String serviceName = resolveServiceName(reqDTO.getOwnerService()); + String url = "http://" + serviceName + "/rpc-api/transport-task/status-callback"; + + try { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity request = new HttpEntity<>(reqDTO, headers); + + TaskStatusCallbackRespDTO resp = restTemplate.postForObject(url, request, TaskStatusCallbackRespDTO.class); + log.info("同步回调 {} 成功, taskId={}", serviceName, reqDTO.getTaskId()); + return resp != null ? resp : TaskStatusCallbackRespDTO.success(); + } catch (Exception e) { + log.error("同步回调 {} 失败, taskId={}, error={}", serviceName, reqDTO.getTaskId(), e.getMessage(), e); + return TaskStatusCallbackRespDTO.fail(e.getMessage()); + } + } + + private String resolveServiceName(String ownerService) { + if ("WMS".equalsIgnoreCase(ownerService)) { + return "wms-server"; + } + return "lms-server"; + } +}