diff --git a/wcs/src/main/java/org/wcs/business/pub/ReportStandard.java b/wcs/src/main/java/org/wcs/business/pub/ReportStandard.java index 3ffd949..741c95a 100644 --- a/wcs/src/main/java/org/wcs/business/pub/ReportStandard.java +++ b/wcs/src/main/java/org/wcs/business/pub/ReportStandard.java @@ -4,12 +4,11 @@ import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; import lombok.extern.slf4j.Slf4j; import org.wcs.constant.ConstantData; +import org.wcs.constant.enums.http.ConveyCallBackStatusEnum; import org.wcs.constant.enums.http.StockCallBackStatusEnum; import org.wcs.model.bo.tuple.Tuple2; -import org.wcs.model.dto.client.StockLoginDataResp; -import org.wcs.model.dto.client.StockLoginReq; -import org.wcs.model.dto.client.StockTaskStatusUploadReq; -import org.wcs.model.dto.client.UpperSystemDataResponse; +import org.wcs.model.dto.client.*; +import org.wcs.model.po.app.AppConveyTask; import org.wcs.model.po.app.AppStockComposeTask; import org.wcs.plugin.webHttpClient.WebHttpClient; import org.wcs.plugin.webHttpClient.model.HttpRequest; @@ -18,13 +17,15 @@ import org.wcs.utils.AppStringUtils; import org.wcs.utils.AppUUIDUtils; /** - * 标准上报上位系统类 + * 标准上报上位系统类 ---- 标准文档里发送给上位系统的方法都在这里 */ @Slf4j public class ReportStandard { // 仓库任务上报状态地址键,用任务来源拼接此字符串查找上位系统地址 private static final String stockTaskCallBackAddressKey = "_STOCK_TASK_STATUS_CALLBACK"; + // 输送线任务上报状态地址键,用任务来源拼接此字符串查找上位系统地址 + private static final String conveyTaskCallBackAddressKey = "_CONVEY_TASK_STATUS_CALLBACK"; // 仓库任务申请地址键,用任务点绑定的系统拼接此字符串查找上位系统地址 private static final String stockLoginRequestAddressKey = "_STOCK_LOGIN_REQ"; @@ -69,7 +70,11 @@ public class ReportStandard { stockTaskStatusUploadReq.setMessage(message); /* 构造请求体 */ HttpRequest httpRequest = HttpRequest.buildStart().post().setAddressKey(composeTask.getTaskSource() + stockTaskCallBackAddressKey) - .setBody(AppStringUtils.objectToString(stockTaskStatusUploadReq)).buildEnd(); + .setBody(AppStringUtils.objectToString(stockTaskStatusUploadReq)); + if(StockCallBackStatusEnum.completeStatus().contains(status)) { + httpRequest = httpRequest.autoRetry(); // 结束状态的必须重试发送 + } + httpRequest = httpRequest.buildEnd(); HttpResponse httpResponse = WebHttpClient.httpRequest(httpRequest); log.info("仓库任务:{} 任务状态上报上位系统,请求结果:{}", composeTask.getUpperTaskId(), httpResponse.isSuccess()); if(!httpResponse.isBaseDataError() && httpResponse.isSuccess()) { @@ -157,6 +162,55 @@ public class ReportStandard { return new Tuple2<>(null, upperSystemDataResponse.getReturnData()); } + /** + * 输送任务上报 + * @param status 状态 + * @param conveyTask 配送任务 + * @param message 错误信息 + * @return <错误信息,响应数据 > + */ + public static Tuple2 conveyTaskReport(ConveyCallBackStatusEnum status, AppConveyTask conveyTask, String message) { + return conveyTaskReport(status, conveyTask, message, null); + } + + /** + * 输送任务上报 + * @param status 状态 + * @param conveyTask 配送任务 + * @param message 错误信息 + * @param arriveLocation 到达点 + * @return <错误信息,响应数据 > + */ + public static Tuple2 conveyTaskReport(ConveyCallBackStatusEnum status, AppConveyTask conveyTask, String message, String arriveLocation) { + ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); + conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); + conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); + conveyTaskStatusUploadReq.setTaskStatus(status.getCode()); + conveyTaskStatusUploadReq.setVehicleNo(conveyTask.getVehicleNo()); + conveyTaskStatusUploadReq.setArriveLocation(arriveLocation); + conveyTaskStatusUploadReq.setMessage(message); + HttpRequest httpRequest = HttpRequest.buildStart().post().setAddressKey(conveyTask.getTaskSource() + conveyTaskCallBackAddressKey) + .setBody(AppStringUtils.objectToString(conveyTaskStatusUploadReq)); + if(ConveyCallBackStatusEnum.completeStatus().contains(status)) { + httpRequest = httpRequest.autoRetry(); + } + httpRequest = httpRequest.buildEnd(); + HttpResponse httpResponse = WebHttpClient.httpRequest(httpRequest); + if(httpResponse.isBaseDataError()) { + return new Tuple2<>(httpResponse.getErrText(), null); + } + if(!httpResponse.isSuccess()) { + String errText = httpResponse.getErrText(); + if(httpResponse.getException() != null) { + errText += httpResponse.getException().getMessage(); + } + return new Tuple2<>(errText, null); + } + return new Tuple2<>(null, httpResponse.getResponseText()); + } + + + } diff --git a/wcs/src/main/java/org/wcs/constant/enums/http/ConveyCallBackStatusEnum.java b/wcs/src/main/java/org/wcs/constant/enums/http/ConveyCallBackStatusEnum.java index 7345f11..b38a027 100644 --- a/wcs/src/main/java/org/wcs/constant/enums/http/ConveyCallBackStatusEnum.java +++ b/wcs/src/main/java/org/wcs/constant/enums/http/ConveyCallBackStatusEnum.java @@ -2,6 +2,8 @@ package org.wcs.constant.enums.http; import lombok.Getter; +import java.util.List; + /** * 箱式线任务回传状态枚举 */ @@ -19,4 +21,12 @@ public enum ConveyCallBackStatusEnum { this.code = code; this.message = message; } + + /** + * 完结的状态 + * @return 状态列表 + */ + public static List completeStatus() { + return List.of(FINISH, ERROR, CANCEL); + } } diff --git a/wcs/src/main/java/org/wcs/constant/enums/http/StockCallBackStatusEnum.java b/wcs/src/main/java/org/wcs/constant/enums/http/StockCallBackStatusEnum.java index 2544641..6ff267c 100644 --- a/wcs/src/main/java/org/wcs/constant/enums/http/StockCallBackStatusEnum.java +++ b/wcs/src/main/java/org/wcs/constant/enums/http/StockCallBackStatusEnum.java @@ -2,6 +2,8 @@ package org.wcs.constant.enums.http; import lombok.Getter; +import java.util.List; + /** * 仓库系统回调状态枚举 */ @@ -22,4 +24,12 @@ public enum StockCallBackStatusEnum { this.code = code; this.message = message; } + + /** + * 任务完结的状态 + * @return 结束状态 + */ + public static List completeStatus() { + return List.of(FINISH, ERROR, CANCEL, DOUBLE_IN, EMPTY_OUT); + } } diff --git a/wcs/src/main/java/org/wcs/plugin/webHttpClient/model/HttpRequest.java b/wcs/src/main/java/org/wcs/plugin/webHttpClient/model/HttpRequest.java index 7f2196e..3d32472 100644 --- a/wcs/src/main/java/org/wcs/plugin/webHttpClient/model/HttpRequest.java +++ b/wcs/src/main/java/org/wcs/plugin/webHttpClient/model/HttpRequest.java @@ -140,6 +140,15 @@ public class HttpRequest { return this; } + /** + * 默认开启自动重试 + * @return HttpRequest + */ + public HttpRequest autoRetry() { + this.autoRetry = true; + return this; + } + /** * 设置请求地址 * @param url 请求地址 diff --git a/wcs/src/main/java/org/wcs/serve/service/impl/ConveyTaskService.java b/wcs/src/main/java/org/wcs/serve/service/impl/ConveyTaskService.java index 276ee2b..2c9173f 100644 --- a/wcs/src/main/java/org/wcs/serve/service/impl/ConveyTaskService.java +++ b/wcs/src/main/java/org/wcs/serve/service/impl/ConveyTaskService.java @@ -5,6 +5,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.wcs.business.pub.ReportStandard; import org.wcs.constant.ConstantData; import org.wcs.constant.enums.database.ConveyTaskStatusEnum; import org.wcs.constant.enums.database.ConveyTaskTypeEnum; @@ -250,25 +251,9 @@ public class ConveyTaskService implements IConveyTaskService { return AppServeResponseFactory.fail("任务不存在"); } AppConveyTask conveyTask = conveyTasks.getFirst(); // 取第一个任务 - ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); - conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); - conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); - conveyTaskStatusUploadReq.setTaskStatus(ConveyCallBackStatusEnum.FINISH.getCode()); - conveyTaskStatusUploadReq.setArriveLocation(request.getArriveLocation()); - conveyTaskStatusUploadReq.setVehicleNo(conveyTask.getVehicleNo()); - conveyTaskStatusUploadReq.setMessage(String.format("用户:%s 回报任务完成,到达位置:%s", userId, request.getArriveLocation())); - HttpRequest httpRequest = HttpRequest.buildStart().post().setAddressKey(conveyTask.getTaskSource() + "_CONVEY_TASK_STATUS_CALLBACK") - .setBody(AppStringUtils.objectToString(conveyTaskStatusUploadReq)).buildEnd(); - HttpResponse httpResponse = WebHttpClient.httpRequest(httpRequest); - if(httpResponse.isBaseDataError()) { - return AppServeResponseFactory.fail(httpResponse.getErrText()); - } - if(!httpResponse.isSuccess()) { - String errText = httpResponse.getErrText(); - if(httpResponse.getException() != null) { - errText += httpResponse.getException().getMessage(); - } - return AppServeResponseFactory.fail(errText); + Tuple2 reportResult = ReportStandard.conveyTaskReport(ConveyCallBackStatusEnum.FINISH, conveyTask, String.format("用户:%s 回报任务完成", userId)); + if(AppStringUtils.isNotEmpty(reportResult.getItem1())) { + return AppServeResponseFactory.fail(reportResult.getItem1()); } return AppServeResponseFactory.success(); } @@ -293,24 +278,9 @@ public class ConveyTaskService implements IConveyTaskService { return AppServeResponseFactory.fail("任务不存在"); } AppConveyTask conveyTask = conveyTasks.getFirst(); // 取第一个任务 - ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); - conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); - conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); - conveyTaskStatusUploadReq.setTaskStatus(ConveyCallBackStatusEnum.CANCEL.getCode()); - conveyTaskStatusUploadReq.setVehicleNo(conveyTask.getVehicleNo()); - conveyTaskStatusUploadReq.setMessage(String.format("用户:%s 回报任务取消", userId)); - HttpRequest httpRequest = HttpRequest.buildStart().post().setAddressKey(conveyTask.getTaskSource() + "_CONVEY_TASK_STATUS_CALLBACK") - .setBody(AppStringUtils.objectToString(conveyTaskStatusUploadReq)).buildEnd(); - HttpResponse httpResponse = WebHttpClient.httpRequest(httpRequest); - if(httpResponse.isBaseDataError()) { - return AppServeResponseFactory.fail(httpResponse.getErrText()); - } - if(!httpResponse.isSuccess()) { - String errText = httpResponse.getErrText(); - if(httpResponse.getException() != null) { - errText += httpResponse.getException().getMessage(); - } - return AppServeResponseFactory.fail(errText); + Tuple2 reportResult = ReportStandard.conveyTaskReport(ConveyCallBackStatusEnum.CANCEL, conveyTask, String.format("用户:%s 回报任务取消", userId)); + if(AppStringUtils.isNotEmpty(reportResult.getItem1())) { + return AppServeResponseFactory.fail(reportResult.getItem1()); } return AppServeResponseFactory.success(); } @@ -337,28 +307,15 @@ public class ConveyTaskService implements IConveyTaskService { if(conveyTasks.isEmpty()) { return AppServeResponseFactory.fail("任务不存在"); } - AppConveyTaskBak conveyTask = conveyTasks.getFirst(); // 取第一个任务 - ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); - conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); - conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); - conveyTaskStatusUploadReq.setTaskStatus(ConveyCallBackStatusEnum.FINISH.getCode()); - conveyTaskStatusUploadReq.setArriveLocation(request.getArriveLocation()); - conveyTaskStatusUploadReq.setVehicleNo(conveyTask.getVehicleNo()); - conveyTaskStatusUploadReq.setMessage(String.format("用户:%s 回报任务完成,到达位置:%s", userId, request.getArriveLocation())); - HttpRequest httpRequest = HttpRequest.buildStart().post().setAddressKey(conveyTask.getTaskSource() + "_CONVEY_TASK_STATUS_CALLBACK") - .setBody(AppStringUtils.objectToString(conveyTaskStatusUploadReq)).buildEnd(); - HttpResponse httpResponse = WebHttpClient.httpRequest(httpRequest); - if(httpResponse.isBaseDataError()) { - return AppServeResponseFactory.fail(httpResponse.getErrText()); - } - if(!httpResponse.isSuccess()) { - String errText = httpResponse.getErrText(); - if(httpResponse.getException() != null) { - errText += httpResponse.getException().getMessage(); - } - return AppServeResponseFactory.fail(errText); + AppConveyTaskBak conveyTaskBak = conveyTasks.getFirst(); // 取第一个任务 + AppConveyTask conveyTask = new AppConveyTask(); + AppBeanUtils.copyProperties(conveyTaskBak,conveyTask); + Tuple2 reportResult = ReportStandard.conveyTaskReport(ConveyCallBackStatusEnum.FINISH, conveyTask, String.format("用户:%s 回报任务完成", userId)); + if(AppStringUtils.isNotEmpty(reportResult.getItem1())) { + return AppServeResponseFactory.fail(reportResult.getItem1()); } return AppServeResponseFactory.success(); + } /** @@ -380,25 +337,12 @@ public class ConveyTaskService implements IConveyTaskService { if(conveyTasks.isEmpty()) { return AppServeResponseFactory.fail("任务不存在"); } - AppConveyTaskBak conveyTask = conveyTasks.getFirst(); // 取第一个任务 - ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); - conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); - conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); - conveyTaskStatusUploadReq.setTaskStatus(ConveyCallBackStatusEnum.CANCEL.getCode()); - conveyTaskStatusUploadReq.setVehicleNo(conveyTask.getVehicleNo()); - conveyTaskStatusUploadReq.setMessage(String.format("用户:%s 回报任务取消", userId)); - HttpRequest httpRequest = HttpRequest.buildStart().post().setAddressKey(conveyTask.getTaskSource() + "_CONVEY_TASK_STATUS_CALLBACK") - .setBody(AppStringUtils.objectToString(conveyTaskStatusUploadReq)).buildEnd(); - HttpResponse httpResponse = WebHttpClient.httpRequest(httpRequest); - if(httpResponse.isBaseDataError()) { - return AppServeResponseFactory.fail(httpResponse.getErrText()); - } - if(!httpResponse.isSuccess()) { - String errText = httpResponse.getErrText(); - if(httpResponse.getException() != null) { - errText += httpResponse.getException().getMessage(); - } - return AppServeResponseFactory.fail(errText); + AppConveyTaskBak conveyTaskBak = conveyTasks.getFirst(); // 取第一个任务 + AppConveyTask conveyTask = new AppConveyTask(); + AppBeanUtils.copyProperties(conveyTaskBak,conveyTask); + Tuple2 reportResult = ReportStandard.conveyTaskReport(ConveyCallBackStatusEnum.CANCEL, conveyTask, String.format("用户:%s 回报任务取消", userId)); + if(AppStringUtils.isNotEmpty(reportResult.getItem1())) { + return AppServeResponseFactory.fail(reportResult.getItem1()); } return AppServeResponseFactory.success(); }