更新wcs的http请求方式,改为ObjectMapper解析响应体
This commit is contained in:
parent
7f00983377
commit
d3204454c3
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -4,3 +4,8 @@
|
|||
.vscode/
|
||||
wms_log/
|
||||
CLAUDE.md
|
||||
db/
|
||||
202504-Wms-MengYang-tp/wms_serve_mengyang/db/
|
||||
202504-Wms-MengYang-box/wms_serve_mengyang/db/
|
||||
202504-Wms-MengYang-tp/wms_serve_mengyang/api-tests/*
|
||||
202504-Wms-MengYang-tp/wms_serve_mengyang/.idea/*.xml
|
||||
5
202504-Wms-MengYang-tp/.idea/.gitignore
vendored
5
202504-Wms-MengYang-tp/.idea/.gitignore
vendored
|
|
@ -1,5 +0,0 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Environment-dependent path to Maven home directory
|
||||
/mavenHomeManager.xml
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/202504-Wms-MengYang-tp.iml" filepath="$PROJECT_DIR$/.idea/202504-Wms-MengYang-tp.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -28,3 +28,5 @@ replay_pid*
|
|||
/.idea/inspectionProfiles/Project_Default.xml
|
||||
/.idea/CoolRequestHistoryPersistent.xml
|
||||
/.idea/CoolRequestCookiePersistent.xml
|
||||
/api-tests/
|
||||
/.idea/*.xml
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 基于编辑器的 HTTP 客户端请求
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CommonStatePersistent">
|
||||
<option name="searchCache" value="Vechile" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CoolRequestCommonStatePersistent">
|
||||
<option name="searchCache" value="AppOrderOutMapper" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CoolRequestSetting">
|
||||
<option name="serializePaths">
|
||||
<list>
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\7c1a962f042d4f39b139d3fa3814b950" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\1533f53c94f94a11b32886557fca8ae3" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\b58340d70f2c4a8ead0063b7abf17401" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\a8a3e33b622d4c76ad6e138b22cedd52" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\36230e8b7000400d9b1ce9d56a1e958a" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\d2f1d91bb470445ba7d88bd226bee66c" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\9ea88944115741ce945d9c7dfb3edc77" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\1dfa81d3654f47dea274be3dc3842ccc" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\d068f586e6c241ceb7de72bf709e93e0" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\0650414680d94ac1b9bffe39717f507a" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\e3b8f17f63ff4458b2583e2ae7a362fb" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\a08c71b0c63742ac94bf6cc1c54c94e6" />
|
||||
<option value="C:\Users\btoba\.config\.cool-request\request\serialize\430bf2f962364c2db55e340b7d0d8de3" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="projectCachePath" value="project-b7ef1676-f3ff-4c1d-950c-a8cb1bbc2462" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<annotationProcessing>
|
||||
<profile default="true" name="Default" enabled="true" />
|
||||
<profile name="Maven default annotation processors profile" enabled="true">
|
||||
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
<module name="dev_wms_serve" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
<component name="JavacSettings">
|
||||
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
|
||||
<module name="dev_wms_serve" options="-parameters" />
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/java/com/wms_main/service/quartz_job/serviceImpl/JobServiceImpl.java" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RemoteRepositoriesConfiguration">
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Central Repository" />
|
||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="jboss.community" />
|
||||
<option name="name" value="JBoss Community repository" />
|
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Central Repository" />
|
||||
<option name="url" value="https://maven.aliyun.com/repository/public" />
|
||||
</remote-repository>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK" />
|
||||
</project>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -7,8 +7,8 @@ POST {{baseUrl}}/mywms/orderIn
|
|||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"taskId": "testOrderId1",
|
||||
"vehicleNo": "1001"
|
||||
"taskId": "testId12",
|
||||
"vehicleNo": "1012"
|
||||
}
|
||||
|
||||
### 2. 出库订单接口
|
||||
|
|
@ -51,7 +51,7 @@ POST {{baseUrl}}/mywms/cancelOrderIn
|
|||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"vehicleNo": "1005"
|
||||
"vehicleNo": "1012"
|
||||
}
|
||||
|
||||
### 8. AGVDone
|
||||
|
|
@ -59,7 +59,7 @@ POST {{baseUrl}}/mywms/agvDone
|
|||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"taskId": "testOrderId1"
|
||||
"taskId": "testId12"
|
||||
}
|
||||
|
||||
### 测试数据说明
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ import lombok.Getter;
|
|||
import lombok.Setter;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
|
||||
|
||||
/**
|
||||
* 立库查询是否可上料响应
|
||||
|
|
@ -17,7 +18,7 @@ public class WcsCanFeedResponse {
|
|||
@JsonProperty("responseTime")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
|
||||
private LocalDateTime responseTime;
|
||||
private DateTime responseTime;
|
||||
|
||||
@JsonProperty("allowAction")
|
||||
boolean allowAction;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
package com.wms_main.service.api.serviceImpl;
|
||||
|
||||
import com.wms_main.app.AppCommon;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.wms_main.constant.enums.wcs.WcsApiResponseCodeEnums;
|
||||
import com.wms_main.constant.enums.wms.AppConfigKeyEnums;
|
||||
import com.wms_main.model.bo.wcs.WcsPickTask;
|
||||
import com.wms_main.model.bo.wcs.WcsStackerTask;
|
||||
|
|
@ -28,6 +33,7 @@ import org.springframework.stereotype.Service;
|
|||
public class WcsApiServiceImpl implements IWcsApiService {
|
||||
private final HttpClient httpClient;// http客户端
|
||||
private final AppCommon appCommon;// 应用共通
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
/**
|
||||
* 发送堆垛机任务
|
||||
|
|
@ -38,8 +44,7 @@ public class WcsApiServiceImpl implements IWcsApiService {
|
|||
@Override
|
||||
public WcsApiResponse<WcsStackerTask> sendWcsStackerTask(WcsStackerTaskRequest request) {
|
||||
// 设置http请求
|
||||
HttpRequest httpRequest = HttpRequest
|
||||
.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_STACKER_TASK_URL.getKey()), request);
|
||||
HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_STACKER_TASK_URL.getKey()), request);
|
||||
HttpResponse httpResponse = httpClient.httpPost(httpRequest);
|
||||
if (httpResponse != null && httpResponse.isSuccess()) {
|
||||
WcsApiResponse<WcsStackerTask> response = new WcsApiResponse<>();
|
||||
|
|
@ -59,8 +64,7 @@ public class WcsApiServiceImpl implements IWcsApiService {
|
|||
@Override
|
||||
public WcsApiResponse<WcsPickTask> sendPickTask(WcsPickTaskRequest request) {
|
||||
// 设置http请求
|
||||
HttpRequest httpRequest = HttpRequest
|
||||
.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_PICK_TASK_URL.getKey()), request);
|
||||
HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_PICK_TASK_URL.getKey()), request);
|
||||
HttpResponse httpResponse = httpClient.httpPost(httpRequest);
|
||||
if (httpResponse != null && httpResponse.isSuccess()) {
|
||||
WcsApiResponse<WcsPickTask> response = new WcsApiResponse<>();
|
||||
|
|
@ -79,8 +83,7 @@ public class WcsApiServiceImpl implements IWcsApiService {
|
|||
@Override
|
||||
public BaseWcsApiResponse releaseBox(WcsReleaseBoxRequest request) {
|
||||
// 设置http请求
|
||||
HttpRequest httpRequest = HttpRequest
|
||||
.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_RELEASE_BOX_URL.getKey()), request);
|
||||
HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_RELEASE_BOX_URL.getKey()), request);
|
||||
HttpResponse httpResponse = httpClient.httpPost(httpRequest);
|
||||
if (httpResponse != null && httpResponse.isSuccess()) {
|
||||
return httpResponse.getData(BaseWcsApiResponse.class);
|
||||
|
|
@ -97,8 +100,7 @@ public class WcsApiServiceImpl implements IWcsApiService {
|
|||
@Override
|
||||
public WcsApiResponse<WcsPickTask> cancelPickTask(WcsPickTaskRequest request) {
|
||||
// 设置http请求
|
||||
HttpRequest httpRequest = HttpRequest
|
||||
.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_CANCEL_PICK_TASK_URL.getKey()), request);
|
||||
HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_CANCEL_PICK_TASK_URL.getKey()), request);
|
||||
HttpResponse httpResponse = httpClient.httpPost(httpRequest);
|
||||
if (httpResponse != null && httpResponse.isSuccess()) {
|
||||
WcsApiResponse<WcsPickTask> response = new WcsApiResponse<>();
|
||||
|
|
@ -116,15 +118,54 @@ public class WcsApiServiceImpl implements IWcsApiService {
|
|||
*/
|
||||
@Override
|
||||
public WcsApiResponse<WcsCanFeedResponse> queryStandStatus(WcsQueryStandStatusRequest request) {
|
||||
HttpRequest httpRequest = HttpRequest.postInstanceOf(
|
||||
appCommon.getConfigByKey(AppConfigKeyEnums.WCS_QUERY_STAND_STATUS_URL.getKey()), request);
|
||||
HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_QUERY_STAND_STATUS_URL.getKey()), request);
|
||||
HttpResponse httpResponse = httpClient.httpPost(httpRequest);
|
||||
if (httpResponse != null && httpResponse.isSuccess()) {
|
||||
WcsApiResponse<WcsCanFeedResponse> response = new WcsApiResponse<>();
|
||||
response = httpResponse.getData(response.getClass().asSubclass(WcsApiResponse.class));
|
||||
return response;
|
||||
|
||||
// 1. 检查HTTP请求是否成功
|
||||
if (httpResponse == null) {
|
||||
return WcsApiResponse.error("请求WCS接口失败,未获得任何响应信息。", null);
|
||||
}
|
||||
if (!httpResponse.isSuccess()) {
|
||||
log.error("请求WCS站台状态接口失败,状态码:{},响应体:{}", httpResponse.getResponseCode(), httpResponse.getResponseMessage());
|
||||
return WcsApiResponse.error("WCS系统请求失败: " + httpResponse.getResponseMessage(), null);
|
||||
}
|
||||
|
||||
try {
|
||||
// 2. 第一步:先反序列化为原始类型(忽略泛型)
|
||||
WcsApiResponse<Object> rawResponse = httpResponse.getData(WcsApiResponse.class);
|
||||
|
||||
// 3. 检查WCS业务逻辑是否成功
|
||||
if (rawResponse == null) {
|
||||
return WcsApiResponse.error("WCS响应体解析为空", null);
|
||||
}
|
||||
|
||||
if (!Objects.equals(WcsApiResponseCodeEnums.SUCCESS.getCode(), rawResponse.getCode())) {
|
||||
// WCS业务逻辑失败
|
||||
log.error("WCS系统返回业务逻辑错误:{}", rawResponse.getMessage());
|
||||
return WcsApiResponse.error(rawResponse.getMessage(), null);
|
||||
}
|
||||
|
||||
// 4. 第二步:手动转换data字段
|
||||
Object rawData = rawResponse.getData();
|
||||
WcsCanFeedResponse canFeedResponse = null;
|
||||
|
||||
if (rawData != null) {
|
||||
// 使用FastJSON转换
|
||||
canFeedResponse = objectMapper.convertValue(rawData, WcsCanFeedResponse.class);
|
||||
}
|
||||
|
||||
// 5. 构建最终响应
|
||||
WcsApiResponse<WcsCanFeedResponse> finalResponse = new WcsApiResponse<>();
|
||||
finalResponse.setCode(rawResponse.getCode());
|
||||
finalResponse.setMessage(rawResponse.getMessage());
|
||||
finalResponse.setData(canFeedResponse);
|
||||
|
||||
return finalResponse;
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("解析WCS响应时发生异常", e);
|
||||
return WcsApiResponse.error("解析WCS响应失败: " + e.getMessage(), null);
|
||||
}
|
||||
return WcsApiResponse.error("请求未获得响应信息。", null);
|
||||
// WcsCanFeedResponse wcsCanFeedResponse = new WcsCanFeedResponse();
|
||||
// wcsCanFeedResponse.setResponseTime(LocalDateTime.now());
|
||||
// wcsCanFeedResponse.setMsg("success");
|
||||
|
|
@ -134,8 +175,7 @@ public class WcsApiServiceImpl implements IWcsApiService {
|
|||
|
||||
@Override
|
||||
public BaseWcsApiResponse agvDone() {
|
||||
HttpRequest httpRequest = HttpRequest.postInstanceOf(
|
||||
appCommon.getConfigByKey(AppConfigKeyEnums.WCS_AGV_DONE.getKey()), null);
|
||||
HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.WCS_AGV_DONE.getKey()), null);
|
||||
HttpResponse httpResponse = httpClient.httpPost(httpRequest);
|
||||
if (httpResponse != null && httpResponse.isSuccess()) {
|
||||
BaseWcsApiResponse response = new BaseWcsApiResponse();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package com.wms_main.service.business.serviceImpl;
|
||||
package com.wms_main.service.business.serviceImpl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
|
|
@ -350,6 +350,7 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 列排序权重:以列数中点为中心(86列 => 中点在43/44之间),
|
||||
* 先靠近中点的列优先,等距时优先左侧(43)再右侧(44)。
|
||||
|
|
@ -358,8 +359,8 @@ public class StackerTaskServiceImpl implements IStackerTaskService {
|
|||
private int computeColOrder(int col, int maxCol) {
|
||||
int centerTimes2 = maxCol + 1; // 偶数列的两个中心之和(如86=>87)
|
||||
int distance2 = Math.abs(col * 2 - centerTimes2); // 与中心的“距离”×2
|
||||
int side = (col <= centerTimes2 / 2) ? 0 : 1; // 左侧优先(43 再 44)
|
||||
return distance2 * 2 + side; // 组合为稳定的权重
|
||||
int side = (col <= centerTimes2 / 2) ? 0 : 1; // 左侧优先(43 再 44)
|
||||
return distance2 * 2 + side; // 组合为稳定的权重
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ spring:
|
|||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
# 本地
|
||||
url: jdbc:mysql://localhost:3306/wms_mengyang_tp?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
username: root
|
||||
password: root
|
||||
# 服务器
|
||||
# url: jdbc:mysql://localhost:3306/wms_mengyang_tp?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
# username: user
|
||||
# password: user
|
||||
# username: root
|
||||
# password: root
|
||||
# 服务器
|
||||
url: jdbc:mysql://localhost:3306/wms_mengyang_tp?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
username: user
|
||||
password: user
|
||||
|
||||
profiles:
|
||||
active: online
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user