diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/entity/HaiAnOutsideTransferTaskRequest.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/entity/HaiAnOutsideTransferTaskRequest.java index bcef3650..ee6b7018 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/entity/HaiAnOutsideTransferTaskRequest.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/entity/HaiAnOutsideTransferTaskRequest.java @@ -4,7 +4,7 @@ import lombok.Data; /** * @author rqrq - * @Description 海安库外搬运任务请求实体,对应POST /api/wms/outside-transfer-task - rqrq + * @Description 海安库外搬运任务请求实体,对应POST /api/wms/external-transfer-task - rqrq */ @Data public class HaiAnOutsideTransferTaskRequest { @@ -24,6 +24,16 @@ public class HaiAnOutsideTransferTaskRequest { */ private String palletBarcode; + /** + * 栈板类型,对应立库报文 palletType。来源 haian_pallet.pallet_type 关联 haian_pallet_type.wcs_pallet_type,口径与组盘一致:0特殊 1混装 2四宫格 3九宫格 4一宫格。不落库,仅下发 WCS。 - rqrq + */ + private Integer palletType; + + /** + * 底托类型,对应立库报文 basePalletType。来源 haian_pallet_type.wcs_base_pallet_type,口径与组盘一致:1平托 2围框 3钢底托。不落库,仅下发 WCS。 - rqrq + */ + private Integer basePalletType; + /** * 路线配置ID(可选) - rqrq */ diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWcsApiServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWcsApiServiceImpl.java index 460fdf86..6a165900 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWcsApiServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWcsApiServiceImpl.java @@ -547,6 +547,8 @@ public class HaiAnWcsApiServiceImpl implements HaiAnWcsApiService { if (!StringUtils.hasText(inData.getSite()) || !StringUtils.hasText(inData.getTaskId()) || !StringUtils.hasText(inData.getPalletBarcode()) + || inData.getPalletType() == null + || inData.getBasePalletType() == null || !StringUtils.hasText(inData.getOriStation()) || !StringUtils.hasText(inData.getToArea())) { throw new RuntimeException("下达库外搬运任务参数不完整"); diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java index d994d184..93bdbf07 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java @@ -6,6 +6,7 @@ import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnGroundLocationQuer import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnOutsideTransferTaskRequest; import com.gaotao.modules.autoWareHourceHaian.api.service.HaiAnWcsApiService; import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnWmsOrderTaskData; +import com.gaotao.modules.autoWareHourceHaian.entity.pda.HaiAnPalletInfoResult; import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnWmsOrderTaskDetailData; import com.gaotao.modules.autoWareHourceHaian.entity.cache.HaiAnCacheArea; import com.gaotao.modules.autoWareHourceHaian.entity.cache.HaiAnCachePallet; @@ -346,10 +347,17 @@ public class HaiAnCacheTransportDispatchServiceImpl implements HaiAnCacheTranspo detail.setErrorMsg(null); // 同事务保存明细和主单调度状态,任一失败整体回滚。- rqrq persist(detail); + // 齐套运输同样走库外搬运,托盘类型必须和组盘一致,从 haian_pallet_type 取出再下发 - rqrq + HaiAnPalletInfoResult palletTypeInfo = haiAnPdaAutoWarehouseMapper.getPalletInfoWithTypeDetails(site, detail.getPalletId()); + if (palletTypeInfo == null) { + throw new RuntimeException("栈板不存在,无法解析库外搬运托盘类型:" + detail.getPalletId()); + } HaiAnOutsideTransferTaskRequest transferRequest = new HaiAnOutsideTransferTaskRequest(); transferRequest.setSite(site); transferRequest.setTaskId(detail.getTaskNo()); transferRequest.setPalletBarcode(detail.getPalletId()); + transferRequest.setPalletType(parseWcsInteger(palletTypeInfo.getWcsPalletType())); + transferRequest.setBasePalletType(parseWcsInteger(palletTypeInfo.getWcsBasePalletType())); transferRequest.setOriStation(pallet.getLocationCode()); transferRequest.setToArea(target.getWcsAreaCode()); transferRequest.setToStation(selected); @@ -592,6 +600,23 @@ public class HaiAnCacheTransportDispatchServiceImpl implements HaiAnCacheTranspo return areas.stream().anyMatch(areaInfo -> "Y".equals(areaInfo.getCacheAreaFlag()) && Objects.equals(areaInfo.getAreaId(), area)); } + /** + * @author rqrq + * @Description 把 haian_pallet_type 的 WCS 类型转成整数。空值或非数字回落 1,与组盘报文口径一致,避免库外搬运缺 palletType/basePalletType。- rqrq + * @param rawValue haian_pallet_type.wcs_pallet_type 或 wcs_base_pallet_type - rqrq + * @return 立库整数类型,解析失败为 1 - rqrq + */ + private Integer parseWcsInteger(String rawValue) { + if (!StringUtils.hasText(rawValue)) { + return 1; + } + try { + return Integer.parseInt(rawValue.trim()); + } catch (NumberFormatException ignored) { + return 1; + } + } + /** * @author rqrq * @Description 限制数据库错误描述长度,保留托盘/接口错误信息。- rqrq diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java index 10106d4a..6a0e6a38 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java @@ -2210,15 +2210,22 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe } // 4. 海安不对接AGV任务,仅通过WCS库外搬运接口下达运输动作(新协议:oriStation/toArea/toStation);HTTP 短路由接口层处理 - rqrq + // 与组盘同一口径取立库托盘类型:按 site+栈板号关联 haian_pallet_type,解析失败回落 1,避免报文缺 palletType/basePalletType - rqrq + HaiAnPalletInfoResult palletTypeInfo = haiAnPdaAutoWarehouseMapper.getPalletInfoWithTypeDetails(site, palletId); + if (palletTypeInfo == null) { + throw new RuntimeException("栈板不存在,无法解析库外搬运托盘类型"); + } HaiAnOutsideTransferTaskRequest outsideTransferTaskRequest = new HaiAnOutsideTransferTaskRequest(); outsideTransferTaskRequest.setSite(site); outsideTransferTaskRequest.setTaskId(taskNo); outsideTransferTaskRequest.setPalletBarcode(palletId); + outsideTransferTaskRequest.setPalletType(parseIntegerOrDefault(palletTypeInfo.getWcsPalletType(), 1)); + outsideTransferTaskRequest.setBasePalletType(parseIntegerOrDefault(palletTypeInfo.getWcsBasePalletType(), 1)); outsideTransferTaskRequest.setConfigId(StringUtils.hasText(request.getConfigId()) ? request.getConfigId().trim() : null); outsideTransferTaskRequest.setOriStation(startStation.trim()); outsideTransferTaskRequest.setToArea(wcsTargetAreaCode); outsideTransferTaskRequest.setToStation(StringUtils.hasText(request.getTargetStation()) ? request.getTargetStation().trim() : targetStation.trim()); - // 调用库外搬运接口:入参taskId+oriStation+toArea(wcs_area_code);HTTP 短路由接口层处理,失败回滚 WOT 与 calling_flag - rqrq + // 调用库外搬运接口:入参taskId+palletType+basePalletType+oriStation+toArea(wcs_area_code);HTTP 短路由接口层处理,失败回滚 WOT 与 calling_flag - rqrq haiAnWcsApiService.pushOutsideTransferTask(outsideTransferTaskRequest); }