将箱式线任务的回告集成到统一上报类中

This commit is contained in:
葛林强 2026-01-22 14:33:05 +08:00
parent d60a3685dd
commit 00d373395f
5 changed files with 109 additions and 82 deletions

View File

@ -4,12 +4,11 @@ import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference; import com.alibaba.fastjson2.TypeReference;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.wcs.constant.ConstantData; import org.wcs.constant.ConstantData;
import org.wcs.constant.enums.http.ConveyCallBackStatusEnum;
import org.wcs.constant.enums.http.StockCallBackStatusEnum; import org.wcs.constant.enums.http.StockCallBackStatusEnum;
import org.wcs.model.bo.tuple.Tuple2; import org.wcs.model.bo.tuple.Tuple2;
import org.wcs.model.dto.client.StockLoginDataResp; import org.wcs.model.dto.client.*;
import org.wcs.model.dto.client.StockLoginReq; import org.wcs.model.po.app.AppConveyTask;
import org.wcs.model.dto.client.StockTaskStatusUploadReq;
import org.wcs.model.dto.client.UpperSystemDataResponse;
import org.wcs.model.po.app.AppStockComposeTask; import org.wcs.model.po.app.AppStockComposeTask;
import org.wcs.plugin.webHttpClient.WebHttpClient; import org.wcs.plugin.webHttpClient.WebHttpClient;
import org.wcs.plugin.webHttpClient.model.HttpRequest; import org.wcs.plugin.webHttpClient.model.HttpRequest;
@ -18,13 +17,15 @@ import org.wcs.utils.AppStringUtils;
import org.wcs.utils.AppUUIDUtils; import org.wcs.utils.AppUUIDUtils;
/** /**
* 标准上报上位系统类 * 标准上报上位系统类 ---- 标准文档里发送给上位系统的方法都在这里
*/ */
@Slf4j @Slf4j
public class ReportStandard { public class ReportStandard {
// 仓库任务上报状态地址键用任务来源拼接此字符串查找上位系统地址 // 仓库任务上报状态地址键用任务来源拼接此字符串查找上位系统地址
private static final String stockTaskCallBackAddressKey = "_STOCK_TASK_STATUS_CALLBACK"; 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"; private static final String stockLoginRequestAddressKey = "_STOCK_LOGIN_REQ";
@ -69,7 +70,11 @@ public class ReportStandard {
stockTaskStatusUploadReq.setMessage(message); stockTaskStatusUploadReq.setMessage(message);
/* 构造请求体 */ /* 构造请求体 */
HttpRequest httpRequest = HttpRequest.buildStart().post().setAddressKey(composeTask.getTaskSource() + stockTaskCallBackAddressKey) 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); HttpResponse httpResponse = WebHttpClient.httpRequest(httpRequest);
log.info("仓库任务:{} 任务状态上报上位系统,请求结果:{}", composeTask.getUpperTaskId(), httpResponse.isSuccess()); log.info("仓库任务:{} 任务状态上报上位系统,请求结果:{}", composeTask.getUpperTaskId(), httpResponse.isSuccess());
if(!httpResponse.isBaseDataError() && httpResponse.isSuccess()) { if(!httpResponse.isBaseDataError() && httpResponse.isSuccess()) {
@ -157,6 +162,55 @@ public class ReportStandard {
return new Tuple2<>(null, upperSystemDataResponse.getReturnData()); return new Tuple2<>(null, upperSystemDataResponse.getReturnData());
} }
/**
* 输送任务上报
* @param status 状态
* @param conveyTask 配送任务
* @param message 错误信息
* @return <错误信息响应数据 >
*/
public static Tuple2<String, String> 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<String, String> 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());
}
} }

View File

@ -2,6 +2,8 @@ package org.wcs.constant.enums.http;
import lombok.Getter; import lombok.Getter;
import java.util.List;
/** /**
* 箱式线任务回传状态枚举 * 箱式线任务回传状态枚举
*/ */
@ -19,4 +21,12 @@ public enum ConveyCallBackStatusEnum {
this.code = code; this.code = code;
this.message = message; this.message = message;
} }
/**
* 完结的状态
* @return 状态列表
*/
public static List<ConveyCallBackStatusEnum> completeStatus() {
return List.of(FINISH, ERROR, CANCEL);
}
} }

View File

@ -2,6 +2,8 @@ package org.wcs.constant.enums.http;
import lombok.Getter; import lombok.Getter;
import java.util.List;
/** /**
* 仓库系统回调状态枚举 * 仓库系统回调状态枚举
*/ */
@ -22,4 +24,12 @@ public enum StockCallBackStatusEnum {
this.code = code; this.code = code;
this.message = message; this.message = message;
} }
/**
* 任务完结的状态
* @return 结束状态
*/
public static List<StockCallBackStatusEnum> completeStatus() {
return List.of(FINISH, ERROR, CANCEL, DOUBLE_IN, EMPTY_OUT);
}
} }

View File

@ -140,6 +140,15 @@ public class HttpRequest {
return this; return this;
} }
/**
* 默认开启自动重试
* @return HttpRequest
*/
public HttpRequest autoRetry() {
this.autoRetry = true;
return this;
}
/** /**
* 设置请求地址 * 设置请求地址
* @param url 请求地址 * @param url 请求地址

View File

@ -5,6 +5,7 @@ import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.wcs.business.pub.ReportStandard;
import org.wcs.constant.ConstantData; import org.wcs.constant.ConstantData;
import org.wcs.constant.enums.database.ConveyTaskStatusEnum; import org.wcs.constant.enums.database.ConveyTaskStatusEnum;
import org.wcs.constant.enums.database.ConveyTaskTypeEnum; import org.wcs.constant.enums.database.ConveyTaskTypeEnum;
@ -250,25 +251,9 @@ public class ConveyTaskService implements IConveyTaskService {
return AppServeResponseFactory.fail("任务不存在"); return AppServeResponseFactory.fail("任务不存在");
} }
AppConveyTask conveyTask = conveyTasks.getFirst(); // 取第一个任务 AppConveyTask conveyTask = conveyTasks.getFirst(); // 取第一个任务
ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); Tuple2<String, String> reportResult = ReportStandard.conveyTaskReport(ConveyCallBackStatusEnum.FINISH, conveyTask, String.format("用户:%s 回报任务完成", userId));
conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); if(AppStringUtils.isNotEmpty(reportResult.getItem1())) {
conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); return AppServeResponseFactory.fail(reportResult.getItem1());
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);
} }
return AppServeResponseFactory.success(); return AppServeResponseFactory.success();
} }
@ -293,24 +278,9 @@ public class ConveyTaskService implements IConveyTaskService {
return AppServeResponseFactory.fail("任务不存在"); return AppServeResponseFactory.fail("任务不存在");
} }
AppConveyTask conveyTask = conveyTasks.getFirst(); // 取第一个任务 AppConveyTask conveyTask = conveyTasks.getFirst(); // 取第一个任务
ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); Tuple2<String, String> reportResult = ReportStandard.conveyTaskReport(ConveyCallBackStatusEnum.CANCEL, conveyTask, String.format("用户:%s 回报任务取消", userId));
conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); if(AppStringUtils.isNotEmpty(reportResult.getItem1())) {
conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); return AppServeResponseFactory.fail(reportResult.getItem1());
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);
} }
return AppServeResponseFactory.success(); return AppServeResponseFactory.success();
} }
@ -337,28 +307,15 @@ public class ConveyTaskService implements IConveyTaskService {
if(conveyTasks.isEmpty()) { if(conveyTasks.isEmpty()) {
return AppServeResponseFactory.fail("任务不存在"); return AppServeResponseFactory.fail("任务不存在");
} }
AppConveyTaskBak conveyTask = conveyTasks.getFirst(); // 取第一个任务 AppConveyTaskBak conveyTaskBak = conveyTasks.getFirst(); // 取第一个任务
ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); AppConveyTask conveyTask = new AppConveyTask();
conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); AppBeanUtils.copyProperties(conveyTaskBak,conveyTask);
conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); Tuple2<String, String> reportResult = ReportStandard.conveyTaskReport(ConveyCallBackStatusEnum.FINISH, conveyTask, String.format("用户:%s 回报任务完成", userId));
conveyTaskStatusUploadReq.setTaskStatus(ConveyCallBackStatusEnum.FINISH.getCode()); if(AppStringUtils.isNotEmpty(reportResult.getItem1())) {
conveyTaskStatusUploadReq.setArriveLocation(request.getArriveLocation()); return AppServeResponseFactory.fail(reportResult.getItem1());
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);
} }
return AppServeResponseFactory.success(); return AppServeResponseFactory.success();
} }
/** /**
@ -380,25 +337,12 @@ public class ConveyTaskService implements IConveyTaskService {
if(conveyTasks.isEmpty()) { if(conveyTasks.isEmpty()) {
return AppServeResponseFactory.fail("任务不存在"); return AppServeResponseFactory.fail("任务不存在");
} }
AppConveyTaskBak conveyTask = conveyTasks.getFirst(); // 取第一个任务 AppConveyTaskBak conveyTaskBak = conveyTasks.getFirst(); // 取第一个任务
ConveyTaskStatusUploadReq conveyTaskStatusUploadReq = new ConveyTaskStatusUploadReq(); AppConveyTask conveyTask = new AppConveyTask();
conveyTaskStatusUploadReq.setTaskId(conveyTask.getTaskId()); AppBeanUtils.copyProperties(conveyTaskBak,conveyTask);
conveyTaskStatusUploadReq.setTaskType(conveyTask.getTaskType()); Tuple2<String, String> reportResult = ReportStandard.conveyTaskReport(ConveyCallBackStatusEnum.CANCEL, conveyTask, String.format("用户:%s 回报任务取消", userId));
conveyTaskStatusUploadReq.setTaskStatus(ConveyCallBackStatusEnum.CANCEL.getCode()); if(AppStringUtils.isNotEmpty(reportResult.getItem1())) {
conveyTaskStatusUploadReq.setVehicleNo(conveyTask.getVehicleNo()); return AppServeResponseFactory.fail(reportResult.getItem1());
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);
} }
return AppServeResponseFactory.success(); return AppServeResponseFactory.success();
} }