From e3fd61ea0b38ce1ad20a1ddeaf456fdaf3032b10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?= Date: Mon, 31 Aug 2026 11:05:55 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autoWareHourceHaian/HAIAN_AI_CONTEXT.md | 2 + .../impl/HaiAnWmsMessageServiceImpl.java | 334 +++++++++++++++++- .../entity/HaiAnBufferZoneConfig.java | 31 ++ .../entity/vo/HaiAnWcsCallbackTask.java | 5 + .../mapper/HaiAnPdaAutoWarehouseMapper.java | 6 + .../HaiAnPdaAutoWarehouseMapper.xml | 17 +- 6 files changed, 385 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnBufferZoneConfig.java diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AI_CONTEXT.md b/src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AI_CONTEXT.md index 55f0f4a5..646c5ff9 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AI_CONTEXT.md +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AI_CONTEXT.md @@ -57,6 +57,8 @@ - 库外搬运新接口参数为 `site/taskId/palletBarcode/configId/oriStation/toArea/toStation`:其中 `oriStation` 为源点位、`toArea` 必须是 `wcs_area_code`、`toStation` 可空 - rqrq - 托盘运输在后端需先校验业务区域可解析(`area_id/area_desc` -> `haian_area`),再做 `toArea=wcs_area_code` 映射,确保区域配置、站点分配与下发编码一致 - rqrq - 栈板人工移动接口(`/haiAnWcsIntegration/removeFromStation`、`/haiAnWcsIntegration/bindPalletToStation`)在本地库更新成功后,最后必须调用 `update-ground-location-status`:移入 `type=1`、移出 `type=2` - rqrq +- 海安 `wcsWareHouse` 回调落 `haian_wcs_callback_task` 时,`to_area` 固定写 `A01`(立库区域);`to_warehouse_id/to_location_id` 必须通过 `site + A01` 查询 `haian_area` 映射获得,禁止写死仓库库位常量 - rqrq +- 海安 `wcsWareHouse` 回调即时状态语义对齐老链路:入库回调保存任务后需执行 `updatePalletDetailWcsFlag(site,palletId)`(`wcs_flag:1->0`),出库回调保存任务后需执行 `reUpdatePalletDetailWcsFlag(site,palletId)`(`wcs_flag:0->1`);出库回调不启用任务状态回写 - rqrq - 栈板人工移入站点触发海安独立移库服务:按目标 `area` 查询 `haian_area.warehouse_id/location_id`,仅筛选“仓库或库位不一致”的标签进入移库流程;若无差异标签则直接跳过 - rqrq - 海安托盘移库需按“标签site + 当前warehouse”分组;每组各自生成 `STO/STI` 事务头、事务明细、事务子明细(落老 `trans` 三张表),禁止多site混写单据 - rqrq - 海安托盘移库主流程仅写 `haian_ifs_pallet_move_queue`,不在提交时立即修改标签库位;`serial_no_str` 必须按分号保存本条队列涉及标签 - rqrq diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWmsMessageServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWmsMessageServiceImpl.java index b0d528d6..245d863a 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWmsMessageServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWmsMessageServiceImpl.java @@ -1,6 +1,7 @@ package com.gaotao.modules.autoWareHourceHaian.api.service.impl; import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnAgvCallbackRequest; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnPickingFeedbackRequest; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnRfidCountVerifyCallbackRequest; @@ -8,30 +9,51 @@ import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnRfidLongMenCallbac import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnRobotErrorRequest; import com.gaotao.modules.autoWareHourceHaian.api.entity.HaiAnWcsInboundCallbackRequest; import com.gaotao.modules.autoWareHourceHaian.api.service.HaiAnWmsMessageService; +import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnBufferZoneConfig; +import com.gaotao.modules.autoWareHourceHaian.entity.pda.HaiAnAreaOption; +import com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnWcsCallbackTask; +import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnPdaAutoWarehouseMapper; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnInterfaceCallLogService; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnSysErrorLogService; +import com.gaotao.modules.autoWareHourceHaian.service.HaiAnWcsCallbackTaskService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import java.util.Date; import java.util.UUID; /** * @author rqrq - * @Description 海安WMS消息接收服务实现,先搭建异常与日志框架,具体业务处理后续按接口联调细化 - rqrq + * @Description 海安WMS消息接收服务实现,统一处理接口日志、异常日志与关键回调落库逻辑 - rqrq */ @Slf4j @Service("haiAnWmsMessageService") public class HaiAnWmsMessageServiceImpl implements HaiAnWmsMessageService { + /** + * WCS回调任务初始状态:已录入,等待后续任务处理 - rqrq + */ + private static final String CALLBACK_STATUS_INPUT = "已录入"; + /** + * WCS回调任务初始重试次数,首次入库固定为0 - rqrq + */ + private static final Integer CALLBACK_DEFAULT_RETRY_COUNT = 0; + @Autowired private HaiAnInterfaceCallLogService haiAnInterfaceCallLogService; @Autowired private HaiAnSysErrorLogService haiAnSysErrorLogService; + @Autowired + private HaiAnWcsCallbackTaskService haiAnWcsCallbackTaskService; + + @Autowired + private HaiAnPdaAutoWarehouseMapper haiAnPdaAutoWarehouseMapper; + /** * @author rqrq * @Description 统一规范site入参,缺失时回落54用于日志完整性,避免日志主键为空 - rqrq @@ -94,7 +116,7 @@ public class HaiAnWmsMessageServiceImpl implements HaiAnWmsMessageService { /** * @author rqrq - * @Description 处理立库出入库状态回调:当前仅完成日志/异常框架,业务落库与状态流转后续补充 - rqrq + * @Description 处理海安立库出入库回调:按事务类型分流落库,取货通知执行幂等校验,目标区域固定A01并映射仓库/库位 - rqrq */ @Override @Transactional(rollbackFor = Exception.class) @@ -113,10 +135,47 @@ public class HaiAnWmsMessageServiceImpl implements HaiAnWmsMessageService { businessKey, "海安立库出入库状态回调" ); - String messageId = generateMessageId("HAIAN_WCS_WH"); - // TODO 执行业务处理:按transTypeDesc分发入库/出库/取货通知/取走栈板/异常位处理 - rqrq - updateSuccessLog(logId, messageId, startTime); - return messageId; + // 1. 入参校验:必须具备site/palletId/transTypeDesc,指定类型还要校验toBarcode - rqrq + validateWcsWareHouseData(data); + String transTypeDesc = data.getTransTypeDesc().trim(); + + // 2. 统一解析A01区域映射,确保to_warehouse_id/to_location_id都来自haian_area配置 - rqrq + HaiAnAreaOption areaOption = getCallbackAreaConfig(site); + String toArea = HaiAnBufferZoneConfig.CALLBACK_DEFAULT_TO_AREA_ID.getValue(); + String toWarehouseId = areaOption.getWarehouseId().trim(); + String toLocationId = areaOption.getLocationId().trim(); + + // 3. 按业务类型执行独立保存逻辑:取货通知先做幂等校验,其余类型直接落任务表 - rqrq + String result; + switch (transTypeDesc) { + case "入库": + result = saveInboundCallbackTask(data, site, toArea, toWarehouseId, toLocationId); + break; + case "出库": + result = saveOutboundCallbackTask(data, site, toArea, toWarehouseId, toLocationId); + break; + case "取货通知": + String pickupToStation = convertStationCode(data.getToBarcode()); + if (hasDuplicatePickupNotification(site, data, pickupToStation, toArea)) { + result = "取货通知重复回调已幂等通过,WMS跳过重复保存"; + log.info("海安取货通知触发幂等跳过 - rqrq,site={}, palletId={}, taskNo={}, itemNo={}, toStation={}", + site, data.getPalletId(), data.getTaskNo(), data.getItemNo(), pickupToStation); + } else { + result = savePickupNotificationCallbackTask(data, site, toArea, toWarehouseId, toLocationId); + } + break; + case "取走栈板": + result = savePalletRemovalCallbackTask(data, site, toArea, toWarehouseId, toLocationId); + break; + case "异常位处理": + result = saveErrorStationCallbackTask(data, site, toArea, toWarehouseId, toLocationId); + break; + default: + throw new RuntimeException("不支持的事务类型:" + transTypeDesc); + } + + updateSuccessLog(logId, result, startTime); + return result; } catch (Exception e) { throw buildAndThrowException( logId, @@ -131,6 +190,269 @@ public class HaiAnWmsMessageServiceImpl implements HaiAnWmsMessageService { } } + /** + * @author rqrq + * @Description 校验立库回调核心参数,避免关键主键缺失导致错误写入回调任务表 - rqrq + * @param data 回调参数实体,至少包含site/palletId/transTypeDesc - rqrq + */ + private void validateWcsWareHouseData(HaiAnWcsInboundCallbackRequest data) { + if (data == null + || !StringUtils.hasText(data.getSite()) + || !StringUtils.hasText(data.getPalletId()) + || !StringUtils.hasText(data.getTransTypeDesc())) { + throw new RuntimeException("参数验证失败:site/palletId/transTypeDesc不能为空"); + } + String transTypeDesc = data.getTransTypeDesc().trim(); + if ("入库".equals(transTypeDesc) + || "取货通知".equals(transTypeDesc) + || "异常位处理".equals(transTypeDesc)) { + if (!StringUtils.hasText(data.getToBarcode())) { + throw new RuntimeException("参数验证失败:" + transTypeDesc + "场景toBarcode不能为空"); + } + } + } + + /** + * @author rqrq + * @Description 根据固定业务区域A01查询haian_area映射,统一提供to_warehouse_id与to_location_id落库值 - rqrq + * @param site 海安大site - rqrq + * @return HaiAnAreaOption 包含A01对应仓库、库位与区域编码配置 - rqrq + */ + private HaiAnAreaOption getCallbackAreaConfig(String site) { + String areaId = HaiAnBufferZoneConfig.CALLBACK_DEFAULT_TO_AREA_ID.getValue(); + HaiAnAreaOption areaOption = haiAnPdaAutoWarehouseMapper.getHaianArea(site, areaId); + if (areaOption == null) { + throw new RuntimeException("haian_area缺少固定区域配置:" + areaId + ",无法保存WCS回调任务"); + } + if (!StringUtils.hasText(areaOption.getWarehouseId()) || !StringUtils.hasText(areaOption.getLocationId())) { + throw new RuntimeException("haian_area固定区域" + areaId + "缺少仓库或库位配置,无法保存WCS回调任务"); + } + return areaOption; + } + + /** + * @author rqrq + * @Description 取货通知幂等校验:相同业务键消息重复回传时直接放行但不重复落库 - rqrq + * @param site 海安大site - rqrq + * @param data 回调参数(用于taskNo/itemNo/palletId/transTypeDesc) - rqrq + * @param toStation 归一化后的目标站点编码(1099/1093会映射成D1/D2) - rqrq + * @param toArea 固定目标区域A01 - rqrq + * @return true表示已存在重复数据,false表示需要继续保存 - rqrq + */ + private boolean hasDuplicatePickupNotification(String site, HaiAnWcsInboundCallbackRequest data, String toStation, String toArea) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("site", site) + .eq("pallet_id", data.getPalletId().trim()) + .eq("trans_type_desc", data.getTransTypeDesc().trim()) + .eq("to_area", toArea); + if (StringUtils.hasText(data.getTaskNo())) { + queryWrapper.eq("task_no", data.getTaskNo().trim()); + } else { + queryWrapper.isNull("task_no"); + } + if (data.getItemNo() != null) { + queryWrapper.eq("item_no", data.getItemNo()); + } else { + queryWrapper.isNull("item_no"); + } + if (StringUtils.hasText(toStation)) { + queryWrapper.eq("to_station", toStation); + } else { + queryWrapper.isNull("to_station"); + } + return haiAnWcsCallbackTaskService.count(queryWrapper) > 0; + } + + /** + * @author rqrq + * @Description 处理站点编码兼容:WCS回传1099/1093时映射成D1/D2,其余编码保持不变 - rqrq + * @param stationCode WCS回传站点编码 - rqrq + * @return 标准化后的站点编码,空值直接返回空 - rqrq + */ + private String convertStationCode(String stationCode) { + if (!StringUtils.hasText(stationCode)) { + return stationCode; + } + String normalizeCode = stationCode.trim(); + if ("1099".equals(normalizeCode)) { + return "D1"; + } + if ("1093".equals(normalizeCode)) { + return "D2"; + } + return normalizeCode; + } + + /** + * @author rqrq + * @Description 保存入库回调任务:to_area固定A01,to_warehouse_id/to_location_id来自haian_area映射 - rqrq + * @param data WCS入库回调参数 - rqrq + * @param site 海安工厂编码 - rqrq + * @param toArea 固定目标区域A01 - rqrq + * @param toWarehouseId 目标仓库(由haian_area映射) - rqrq + * @param toLocationId 目标库位(由haian_area映射) - rqrq + * @return 保存结果提示 - rqrq + */ + private String saveInboundCallbackTask(HaiAnWcsInboundCallbackRequest data, + String site, + String toArea, + String toWarehouseId, + String toLocationId) { + HaiAnWcsCallbackTask callbackTask = new HaiAnWcsCallbackTask(); + callbackTask.setSite(site); + callbackTask.setPalletId(data.getPalletId().trim()); + callbackTask.setTransTypeDesc(data.getTransTypeDesc().trim()); + callbackTask.setToArea(toArea); + callbackTask.setToWarehouseId(toWarehouseId); + callbackTask.setToLocationId(toLocationId); + callbackTask.setToStation(StringUtils.hasText(data.getToBarcode()) ? data.getToBarcode().trim() : null); + callbackTask.setTaskNo(StringUtils.hasText(data.getTaskNo()) ? data.getTaskNo().trim() : null); + callbackTask.setItemNo(data.getItemNo()); + callbackTask.setStatus(CALLBACK_STATUS_INPUT); + callbackTask.setCreatedTime(new Date()); + callbackTask.setRetryCount(CALLBACK_DEFAULT_RETRY_COUNT); + callbackTask.setRemark("WCS立库入库回调"); + haiAnWcsCallbackTaskService.save(callbackTask); + // 立即更新部分状态:入库回调先把本托盘增量明细置为已提交,避免重复推送历史增量 - rqrq + haiAnPdaAutoWarehouseMapper.updatePalletDetailWcsFlag(site, data.getPalletId().trim()); + return "入库回调数据已保存,等待定时任务处理"; + } + + /** + * @author rqrq + * @Description 保存出库回调任务:目标站点统一记为Virtual_AS,to_area固定A01并写入haian回调表 - rqrq + * @param data WCS出库回调参数 - rqrq + * @param site 海安工厂编码 - rqrq + * @param toArea 固定目标区域A01 - rqrq + * @param toWarehouseId 目标仓库(由haian_area映射) - rqrq + * @param toLocationId 目标库位(由haian_area映射) - rqrq + * @return 保存结果提示 - rqrq + */ + private String saveOutboundCallbackTask(HaiAnWcsInboundCallbackRequest data, + String site, + String toArea, + String toWarehouseId, + String toLocationId) { + HaiAnWcsCallbackTask callbackTask = new HaiAnWcsCallbackTask(); + callbackTask.setSite(site); + callbackTask.setPalletId(data.getPalletId().trim()); + callbackTask.setTransTypeDesc(data.getTransTypeDesc().trim()); + callbackTask.setToArea(toArea); + callbackTask.setToWarehouseId(toWarehouseId); + callbackTask.setToLocationId(toLocationId); + callbackTask.setToStation(HaiAnBufferZoneConfig.BUFFER_Station_ID.getValue()); + callbackTask.setTaskNo(StringUtils.hasText(data.getTaskNo()) ? data.getTaskNo().trim() : null); + callbackTask.setItemNo(data.getItemNo()); + callbackTask.setStatus(CALLBACK_STATUS_INPUT); + callbackTask.setCreatedTime(new Date()); + callbackTask.setRetryCount(CALLBACK_DEFAULT_RETRY_COUNT); + callbackTask.setRemark("WCS立库出库回调"); + haiAnWcsCallbackTaskService.save(callbackTask); + // 立即更新部分状态(可能是移库出库)- rqrq + // updateOrderTaskStatusForOutCallback(data); 禁用,立库回传任务信息不准 - rqrq + haiAnPdaAutoWarehouseMapper.reUpdatePalletDetailWcsFlag(site, data.getPalletId().trim()); + return "出库回调数据已保存,等待定时任务处理"; + } + + /** + * @author rqrq + * @Description 保存取货通知回调任务:执行站点编码归一化后落库,目标区域固定A01 - rqrq + * @param data WCS取货通知回调参数 - rqrq + * @param site 海安工厂编码 - rqrq + * @param toArea 固定目标区域A01 - rqrq + * @param toWarehouseId 目标仓库(由haian_area映射) - rqrq + * @param toLocationId 目标库位(由haian_area映射) - rqrq + * @return 保存结果提示 - rqrq + */ + private String savePickupNotificationCallbackTask(HaiAnWcsInboundCallbackRequest data, + String site, + String toArea, + String toWarehouseId, + String toLocationId) { + HaiAnWcsCallbackTask callbackTask = new HaiAnWcsCallbackTask(); + callbackTask.setSite(site); + callbackTask.setPalletId(data.getPalletId().trim()); + callbackTask.setTransTypeDesc(data.getTransTypeDesc().trim()); + callbackTask.setToArea(toArea); + callbackTask.setToWarehouseId(toWarehouseId); + callbackTask.setToLocationId(toLocationId); + callbackTask.setToStation(convertStationCode(data.getToBarcode())); + callbackTask.setTaskNo(StringUtils.hasText(data.getTaskNo()) ? data.getTaskNo().trim() : null); + callbackTask.setItemNo(data.getItemNo()); + callbackTask.setStatus(CALLBACK_STATUS_INPUT); + callbackTask.setCreatedTime(new Date()); + callbackTask.setRetryCount(CALLBACK_DEFAULT_RETRY_COUNT); + callbackTask.setRemark("WCS立库取货通知回调"); + haiAnWcsCallbackTaskService.save(callbackTask); + return "取货通知回调数据已保存,等待定时任务处理"; + } + + /** + * @author rqrq + * @Description 保存取走栈板回调任务:不再执行站点占用状态改写,只负责回调任务落库 - rqrq + * @param data WCS取走栈板回调参数 - rqrq + * @param site 海安工厂编码 - rqrq + * @param toArea 固定目标区域A01 - rqrq + * @param toWarehouseId 目标仓库(由haian_area映射) - rqrq + * @param toLocationId 目标库位(由haian_area映射) - rqrq + * @return 保存结果提示 - rqrq + */ + private String savePalletRemovalCallbackTask(HaiAnWcsInboundCallbackRequest data, + String site, + String toArea, + String toWarehouseId, + String toLocationId) { + HaiAnWcsCallbackTask callbackTask = new HaiAnWcsCallbackTask(); + callbackTask.setSite(site); + callbackTask.setPalletId(data.getPalletId().trim()); + callbackTask.setTransTypeDesc(data.getTransTypeDesc().trim()); + callbackTask.setToArea(toArea); + callbackTask.setToWarehouseId(toWarehouseId); + callbackTask.setToLocationId(toLocationId); + callbackTask.setToStation(convertStationCode(data.getToBarcode())); + callbackTask.setTaskNo(StringUtils.hasText(data.getTaskNo()) ? data.getTaskNo().trim() : null); + callbackTask.setItemNo(data.getItemNo()); + callbackTask.setStatus(CALLBACK_STATUS_INPUT); + callbackTask.setCreatedTime(new Date()); + callbackTask.setRetryCount(CALLBACK_DEFAULT_RETRY_COUNT); + callbackTask.setRemark("WCS立库取走栈板回调"); + haiAnWcsCallbackTaskService.save(callbackTask); + return "取走栈板回调数据已保存,等待定时任务处理"; + } + + /** + * @author rqrq + * @Description 保存异常位处理回调任务:remark优先使用入参异常原因,缺失时回落默认文案 - rqrq + * @param data WCS异常位处理回调参数 - rqrq + * @param site 海安工厂编码 - rqrq + * @param toArea 固定目标区域A01 - rqrq + * @param toWarehouseId 目标仓库(由haian_area映射) - rqrq + * @param toLocationId 目标库位(由haian_area映射) - rqrq + * @return 保存结果提示 - rqrq + */ + private String saveErrorStationCallbackTask(HaiAnWcsInboundCallbackRequest data, + String site, + String toArea, + String toWarehouseId, + String toLocationId) { + HaiAnWcsCallbackTask callbackTask = new HaiAnWcsCallbackTask(); + callbackTask.setSite(site); + callbackTask.setPalletId(data.getPalletId().trim()); + callbackTask.setTransTypeDesc(data.getTransTypeDesc().trim()); + callbackTask.setToArea(toArea); + callbackTask.setToWarehouseId(toWarehouseId); + callbackTask.setToLocationId(toLocationId); + callbackTask.setToStation(StringUtils.hasText(data.getToBarcode()) ? data.getToBarcode().trim() : null); + callbackTask.setTaskNo(StringUtils.hasText(data.getTaskNo()) ? data.getTaskNo().trim() : null); + callbackTask.setItemNo(data.getItemNo()); + callbackTask.setStatus(CALLBACK_STATUS_INPUT); + callbackTask.setCreatedTime(new Date()); + callbackTask.setRetryCount(CALLBACK_DEFAULT_RETRY_COUNT); + callbackTask.setRemark(StringUtils.hasText(data.getRemark()) ? data.getRemark().trim() : "WCS立库异常位处理回调"); + haiAnWcsCallbackTaskService.save(callbackTask); + return "异常位处理回调数据已保存,等待定时任务处理"; + } + /** * @author rqrq * @Description 处理栈板RFID拣货反馈:当前仅完成日志/异常框架,分拣对账与回写逻辑后续补充 - rqrq diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnBufferZoneConfig.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnBufferZoneConfig.java new file mode 100644 index 00000000..826f1480 --- /dev/null +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnBufferZoneConfig.java @@ -0,0 +1,31 @@ +package com.gaotao.modules.autoWareHourceHaian.entity; + +/** + * @author rqrq + * @Description 海安立库过渡站点与回调默认区域常量,统一维护A01与Virtual_AS相关配置,避免多处硬编码漂移 - rqrq + */ +public enum HaiAnBufferZoneConfig { + + /** + * 立库回调默认目标区域ID(haian_area.area_id) - rqrq + */ + CALLBACK_DEFAULT_TO_AREA_ID("A01"), + /** + * 立库过渡站点站点ID - rqrq + */ + BUFFER_Station_ID("Virtual_AS"); + + private final String value; + + HaiAnBufferZoneConfig(String value) { + this.value = value; + } + + /** + * @author rqrq + * @Description 获取配置值,供海安回调处理和默认站点逻辑复用 - rqrq + */ + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/vo/HaiAnWcsCallbackTask.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/vo/HaiAnWcsCallbackTask.java index 6dc2316d..4281bca8 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/vo/HaiAnWcsCallbackTask.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/vo/HaiAnWcsCallbackTask.java @@ -48,6 +48,11 @@ public class HaiAnWcsCallbackTask { */ private String toLocationId; + /** + * 目标业务区域(固定A01:立库区域) - rqrq + */ + private String toArea; + /** * 处理状态 - rqrq */ diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnPdaAutoWarehouseMapper.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnPdaAutoWarehouseMapper.java index f5426f96..73aca26e 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnPdaAutoWarehouseMapper.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnPdaAutoWarehouseMapper.java @@ -365,6 +365,12 @@ public interface HaiAnPdaAutoWarehouseMapper { */ void updatePalletDetailWcsFlag(@Param("site") String site, @Param("palletId") String palletId); + /** + * @author rqrq + * @Description 出库回调即时回写:将已提交标记wcs_flag从0恢复为1,保持与老链路“移库出库可继续追踪”语义一致 - rqrq + */ + void reUpdatePalletDetailWcsFlag(@Param("site") String site, @Param("palletId") String palletId); + /** * @author rqrq * @Description 查询指定wcs_flag明细,供组盘推送组装增量报文使用 - rqrq diff --git a/src/main/resources/mapper/autoWareHourceHaian/HaiAnPdaAutoWarehouseMapper.xml b/src/main/resources/mapper/autoWareHourceHaian/HaiAnPdaAutoWarehouseMapper.xml index ffedc445..90ff88b0 100644 --- a/src/main/resources/mapper/autoWareHourceHaian/HaiAnPdaAutoWarehouseMapper.xml +++ b/src/main/resources/mapper/autoWareHourceHaian/HaiAnPdaAutoWarehouseMapper.xml @@ -106,7 +106,7 @@ @@ -114,7 +114,7 @@ @@ -131,7 +131,7 @@ remove_able AS removeAble, pack_able AS packAble, wcs_area_code AS wcsAreaCode - FROM haian_area + FROM haian_area WITH (NOLOCK) WHERE site = #{site} AND area_id = #{areaId} @@ -148,7 +148,7 @@ remove_able AS removeAble, pack_able AS packAble, wcs_area_code AS wcsAreaCode - FROM haian_area + FROM haian_area WITH (NOLOCK) WHERE site = #{site} AND area_desc = #{areaDesc} @@ -654,6 +654,15 @@ AND wcs_flag = 1 + + + UPDATE haian_pallet_detail + SET wcs_flag = 1 + WHERE site = #{site} + AND pallet_id = #{palletId} + AND wcs_flag = 0 + +