Browse Source

自动移库

dev
常熟吴彦祖 3 weeks ago
parent
commit
dc4a188afc
  1. 3
      src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AI_CONTEXT.md
  2. 5
      src/main/java/com/gaotao/modules/autoWareHourceHaian/api/entity/HaiAnGroundLocationQueryRequest.java
  3. 2
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaAutoWarehouseService.java
  4. 41
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java

3
src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AI_CONTEXT.md

@ -48,6 +48,7 @@
- `haianPalletPacking.vue` 的“调用空托盘”流程中,只有在用户选定区域后,站点下拉才允许调用立库接口获取;禁止未选区域直接拉站点 - rqrq - `haianPalletPacking.vue` 的“调用空托盘”流程中,只有在用户选定区域后,站点下拉才允许调用立库接口获取;禁止未选区域直接拉站点 - rqrq
- `haianPalletPacking.vue` 的“调用空托盘”弹窗初始化时,只允许调用“托盘类型列表接口”获取全部可选类型,禁止通过 `getPalletInfo` 按单栈板查询替代 - rqrq - `haianPalletPacking.vue` 的“调用空托盘”弹窗初始化时,只允许调用“托盘类型列表接口”获取全部可选类型,禁止通过 `getPalletInfo` 按单栈板查询替代 - rqrq
- 站点来源:先取 `haian_area.wcs_area_code`,再调用立库接口获取站点清单 - rqrq - 站点来源:先取 `haian_area.wcs_area_code`,再调用立库接口获取站点清单 - rqrq
- 站点清单接口固定使用 `getGroundLocationList`(`/api/wms/query-ground-location-list`):第一个参数传 `haian_area.wcs_area_code`,第二个参数 `status` 当前固定传 `IDLE`(只拉空闲点位) - rqrq
- 立库取货(`/haiAnWcsIntegration/callOutToStation`)、Call料(`/haiAnWcsIntegration/callOutToOutboundPort`)与调用空托盘(`/haiAnWcsIntegration/callEmptyPalletToStation`)下发WCS时,`targetArea` 必须使用 `haian_area.wcs_area_code`,禁止直传业务区域 `area_id` - rqrq - 立库取货(`/haiAnWcsIntegration/callOutToStation`)、Call料(`/haiAnWcsIntegration/callOutToOutboundPort`)与调用空托盘(`/haiAnWcsIntegration/callEmptyPalletToStation`)下发WCS时,`targetArea` 必须使用 `haian_area.wcs_area_code`,禁止直传业务区域 `area_id` - rqrq
- 以上三条链路中,前端传入的 `targetArea/areaId` 语义是“业务区域”(来自 `haian_area.area_id` 或固定区域文案),后端必须先查 `haian_area` 完成映射再调用下级系统 - rqrq - 以上三条链路中,前端传入的 `targetArea/areaId` 语义是“业务区域”(来自 `haian_area.area_id` 或固定区域文案),后端必须先查 `haian_area` 完成映射再调用下级系统 - rqrq
- 海安任务主表 `haian_wms_order_task.to_area` 继续存业务区域 `area_id`,仅WCS请求报文中的 `targetArea` 使用 `wcs_area_code`,避免业务查询与接口编码混淆 - rqrq - 海安任务主表 `haian_wms_order_task.to_area` 继续存业务区域 `area_id`,仅WCS请求报文中的 `targetArea` 使用 `wcs_area_code`,避免业务查询与接口编码混淆 - rqrq
@ -111,7 +112,7 @@
- 当 `haianWarehouse=false` 时,查询类接口(如查询站点)必须返回静态数据,静态结构需遵循既定契约(`resCode/resMsg/locations[]`) - rqrq - 当 `haianWarehouse=false` 时,查询类接口(如查询站点)必须返回静态数据,静态结构需遵循既定契约(`resCode/resMsg/locations[]`) - rqrq
- 当 `haianWarehouse=false` 时,非查询类接口(如组盘对送、调用空托盘)必须短路通过,不允许调用外部立库接口 - rqrq - 当 `haianWarehouse=false` 时,非查询类接口(如组盘对送、调用空托盘)必须短路通过,不允许调用外部立库接口 - rqrq
- 当 `haianWarehouse=true` 时,接口按既定立库调用链路执行,但仍保持现有前后端协议不变 - rqrq - 当 `haianWarehouse=true` 时,接口按既定立库调用链路执行,但仍保持现有前后端协议不变 - rqrq
- 当 `haianWarehouse=true` 时,查询类接口至少包含:站点清单(`query-location-list`)与分拣清单(`query-auto-sorting-info`)真实调用;若外部失败需按当前协议回退可识别的静态结果,禁止前端无响应 - rqrq
- 当 `haianWarehouse=true` 时,查询类接口至少包含:站点清单(`query-ground-location-list`,参数 `areaCode + status=IDLE`)与分拣清单(`query-auto-sorting-info`)真实调用;若外部失败需按当前协议回退可识别的静态结果,禁止前端无响应 - rqrq
- 静态模式返回建议包含可识别标记(如 `mockMode=true` 或明确 `msg`),防止测试环境结果与真实联机混淆 - rqrq - 静态模式返回建议包含可识别标记(如 `mockMode=true` 或明确 `msg`),防止测试环境结果与真实联机混淆 - rqrq
## 11. 维护要求 ## 11. 维护要求

5
src/main/java/com/gaotao/modules/autoWareHourceHaian/api/entity/HaiAnGroundLocationQueryRequest.java

@ -15,8 +15,9 @@ public class HaiAnGroundLocationQueryRequest {
private String areaCode; private String areaCode;
/** /**
* 点位状态过滤条件可选 - rqrq
* 点位状态过滤条件LOADED(已装载)/MOVING(运输中)/EMPTY(空载)/IDLE(空闲) - rqrq
* 当前海安PDA区域站点清单固定传IDLE仅拉取空闲点位避免前端再做二次过滤 - rqrq
*/ */
private String locationStatus;
private String status;
} }

2
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaAutoWarehouseService.java

@ -149,7 +149,7 @@ public interface HaiAnPdaAutoWarehouseService {
/** /**
* @author rqrq * @author rqrq
* @Description 通过haian_area.wcs_area_code获取站点清单并解析locationCode/status - rqrq
* @Description 通过haian_area.wcs_area_code调用getGroundLocationListstatus=IDLE获取空闲站点清单并解析locationCode/status - rqrq
*/ */
HaiAnStationsByAreaResult getStationsByArea(HaiAnPdaRequest request); HaiAnStationsByAreaResult getStationsByArea(HaiAnPdaRequest request);

41
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java

@ -6,6 +6,7 @@ import com.gaotao.common.utils.HttpUtils;
import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnCallPalletRequest; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnCallPalletRequest;
import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnCheckInventoryExistsRequest; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnCheckInventoryExistsRequest;
import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnDirectMaterialCallRequest; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnDirectMaterialCallRequest;
import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnGroundLocationQueryRequest;
import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnGroundLocationStatusUpdateRequest; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnGroundLocationStatusUpdateRequest;
import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnOutsideTransferTaskRequest; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnOutsideTransferTaskRequest;
import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnSpecialPalletTask; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnSpecialPalletTask;
@ -119,6 +120,7 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
private static final String WOT_ACTION_TYPE_PALLET_OUT = "栈板出库"; private static final String WOT_ACTION_TYPE_PALLET_OUT = "栈板出库";
private static final Integer GROUND_LOCATION_STATUS_TYPE_BIND = 1; private static final Integer GROUND_LOCATION_STATUS_TYPE_BIND = 1;
private static final Integer GROUND_LOCATION_STATUS_TYPE_REMOVE = 2; private static final Integer GROUND_LOCATION_STATUS_TYPE_REMOVE = 2;
private static final String GROUND_LOCATION_IDLE = "IDLE";
// 入库口1固定站点号留空待业务确认后手工填写- rqrq // 入库口1固定站点号留空待业务确认后手工填写- rqrq
private static final String INBOUND_PORT_1_STATION_CODE = "入库口1"; private static final String INBOUND_PORT_1_STATION_CODE = "入库口1";
// 入库口2固定站点号留空待业务确认后手工填写- rqrq // 入库口2固定站点号留空待业务确认后手工填写- rqrq
@ -310,15 +312,13 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
result.setRows(rows); result.setRows(rows);
result.setMsg("OK"); result.setMsg("OK");
// TODO 外部真实接口路径待联调确认此处先按约定结构解析并保留容错回退 - rqrq
String requestBody = "\"" + wcsAreaCode + "\"";
String requestUrl = (haianWcsUrl == null ? "" : haianWcsUrl) + "query-location-list";
long startTime = System.currentTimeMillis();
String response = null;
String logStatus = "SUCCESS";
String logErrorMessage = null;
// 区域站点清单统一走getGroundLocationList第一个参数传wcs_area_code第二个状态参数固定IDLE - rqrq
HaiAnGroundLocationQueryRequest queryRequest = new HaiAnGroundLocationQueryRequest();
queryRequest.setAreaCode(wcsAreaCode);
queryRequest.setStatus(GROUND_LOCATION_IDLE);
try { try {
response = HttpUtils.doPost(requestUrl, requestBody, null);
String response = haiAnWcsApiService.getGroundLocationList(queryRequest);
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(response); JsonNode rootNode = mapper.readTree(response);
int resCode = rootNode.path("resCode").asInt(); int resCode = rootNode.path("resCode").asInt();
@ -334,6 +334,10 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
if (!StringUtils.hasText(locationCode)) { if (!StringUtils.hasText(locationCode)) {
continue; continue;
} }
// 双保险即使下级系统未严格按status过滤返回也只透出空闲点位给当前海安PDA流程 - rqrq
if (!GROUND_LOCATION_IDLE.equalsIgnoreCase(status)) {
continue;
}
HaiAnStationRow row = new HaiAnStationRow(); HaiAnStationRow row = new HaiAnStationRow();
row.setStationId(locationCode); row.setStationId(locationCode);
row.setStationCode(locationCode); row.setStationCode(locationCode);
@ -346,17 +350,15 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
result.setRows(rows); result.setRows(rows);
return result; return result;
} catch (Exception ex) { } catch (Exception ex) {
logStatus = "ERROR";
logErrorMessage = ex.getMessage();
// 海安接口失败同步落sys_error_log保留请求参数和异常信息便于排查 - rqrq // 海安接口失败同步落sys_error_log保留请求参数和异常信息便于排查 - rqrq
haiAnSysErrorLogService.haiAnLogInterface( haiAnSysErrorLogService.haiAnLogInterface(
site, site,
"海安立库", "海安立库",
"查询站点清单", "查询站点清单",
"WCS", "WCS",
"query-location-list",
"query-ground-location-list",
wcsAreaCode, wcsAreaCode,
requestBody,
"areaCode=" + wcsAreaCode + ", status=" + GROUND_LOCATION_IDLE,
ex.getMessage() ex.getMessage()
); );
// 真实调用失败时回退静态数据避免页面在联调期完全不可用 - rqrq // 真实调用失败时回退静态数据避免页面在联调期完全不可用 - rqrq
@ -364,21 +366,6 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
result.setRows(buildMockStationRows()); result.setRows(buildMockStationRows());
result.setMsg("真实站点接口调用失败,已回退静态清单: " + ex.getMessage()); result.setMsg("真实站点接口调用失败,已回退静态清单: " + ex.getMessage());
return result; return result;
} finally {
long executionTime = System.currentTimeMillis() - startTime;
// 海安接口调用日志统一写入haian_interface_call_log失败也记录 - rqrq
haiAnInterfaceCallLogService.haiAnLogCompleteCall(
"WCS",
"query-location-list",
requestBody,
response,
logStatus,
logErrorMessage,
executionTime,
site,
wcsAreaCode,
"海安区域站点清单查询"
);
} }
} }

Loading…
Cancel
Save