From dabbc91c976eda3e0d6e8ca27709e05a39e5eb18 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, 2 Nov 2026 17:44:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E6=8B=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/service/HaiAnWcsApiService.java | 2 +- .../service/impl/HaiAnWcsApiServiceImpl.java | 45 ++++++++++--------- .../HaiAnPdaAutoWarehouseServiceImpl.java | 22 +++++---- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/HaiAnWcsApiService.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/HaiAnWcsApiService.java index 220ec0dc..fc886c9e 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/HaiAnWcsApiService.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/HaiAnWcsApiService.java @@ -121,7 +121,7 @@ public interface HaiAnWcsApiService { /** * @author rqrq - * @Description 查询出库看板(POST /api/wms/outbound/full-out-tasks/query):立库中有出库任务的栈板。site/warehouseCode 空白时默认 54/WH001,palletId 未填时下发空串。失败回写接口调用日志,系统错误日志暂不记,然后抛异常。 - rqrq + * @Description 查询出库看板(POST /api/wms/outbound/full-out-tasks/query):立库中有出库任务的栈板。site/warehouseCode 空白时默认 54/WH001,palletId 未填时下发空串。接口调用日志和系统错误日志先不记,resCode 非 200 仍抛异常。 - rqrq * @param inData 查询条件,允许 null;有值时 site 必须来自调用方,本方法不读登录态 - rqrq * @return 立库成功结果,rows 至少为空列表;resCode 非 200 不会返回 - 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 4ee46223..7fd73580 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 @@ -964,7 +964,7 @@ public class HaiAnWcsApiServiceImpl implements HaiAnWcsApiService { /** * @author rqrq - * @Description 查询出库看板:补齐 site/warehouseCode 默认值,palletId 空白改成空串后整包下发。resCode 非 200 回写接口调用日志后抛异常,系统错误日志暂不记。本方法不改托盘和任务。 - rqrq + * @Description 查询出库看板:补齐 site/warehouseCode 默认值,palletId 空白改成空串后整包下发。resCode 非 200 直接抛异常。接口调用日志和系统错误日志先不记,避免每 5 秒刷接口日志页。本方法不改托盘和任务。 - rqrq * @param inData 看板查询条件,null 时按默认 54/WH001/空栈板查询全部 - rqrq * @return 立库出库任务栈板清单,rows 不为 null - rqrq */ @@ -982,25 +982,26 @@ public class HaiAnWcsApiServiceImpl implements HaiAnWcsApiService { body.setWarehouseCode(warehouseCode); body.setPalletId(palletId); String wcsPath = HaiAnFullOutTaskStaticData.WCS_PATH; - Long logId = null; - // 保留已收到的响应原文供失败回填;未获得响应时保持 null,避免伪造立库回执 - rqrq + // 出库看板先不落接口调用日志,logId 停用 - rqrq + // Long logId = null; + // 保留已收到的响应原文;当前不再回填接口日志 - rqrq String ifsResponse = null; String url = haianWcsUrl + wcsPath; String requestJson = null; try { ObjectMapper objectMapper = new ObjectMapper(); - // 用补齐后的报文写日志和下发,保证日志里的 palletId 也是空串而不是缺字段 - rqrq + // 用补齐后的报文下发,保证 palletId 是空串而不是缺字段;当前不写接口日志 - rqrq requestJson = objectMapper.writeValueAsString(body); - // 先写海安接口调用日志;空栈板时用仓库编码当业务键,避免看板全量查询在日志里没有定位字段 - rqrq - logId = haiAnInterfaceCallLogService.haiAnLogInterfaceCall( - "QueryFullOutTasks", - "查询出库看板", - requestJson, - site, - StringUtils.hasText(palletId) ? palletId : warehouseCode, - "查询出库看板" - ); - // 调用统一出口:开关关闭返回空 rows,看板展示空列表;真实失败由 catch 记日志并抛错 - rqrq + // 出库看板查询先不写接口调用日志,避免 interfaceCallLog54 被 5 秒轮询刷满 - rqrq + // logId = haiAnInterfaceCallLogService.haiAnLogInterfaceCall( + // "QueryFullOutTasks", + // "查询出库看板", + // requestJson, + // site, + // StringUtils.hasText(palletId) ? palletId : warehouseCode, + // "查询出库看板" + // ); + // 调用统一出口:开关关闭返回空 rows,看板展示空列表;真实失败仍抛错,不记接口日志 - rqrq ifsResponse = postToWcs(url, requestJson, HaiAnWcsShortCircuitStaticData.fullOutTasksJson()); HaiAnFullOutTaskQueryResult result = objectMapper.readValue(ifsResponse, HaiAnFullOutTaskQueryResult.class); if (result == null || result.getResCode() == null || result.getResCode().intValue() != 200) { @@ -1015,16 +1016,16 @@ public class HaiAnWcsApiServiceImpl implements HaiAnWcsApiService { if (result.getTotal() == null) { result.setTotal(result.getRows().size()); } - if (logId != null) { - // 回写成功日志,responseData 存完整响应(含短路空清单)便于核对查询条件 - rqrq - markWcsCallSuccess(logId, ifsResponse, result.getResMsg()); - } + // if (logId != null) { + // // 回写成功日志,responseData 存完整响应(含短路空清单)便于核对查询条件 - rqrq + // markWcsCallSuccess(logId, ifsResponse, result.getResMsg()); + // } return result; } catch (Exception e) { - if (logId != null) { - // 失败只回写接口调用日志,保留立库原文和错误原因;系统错误日志先停用,异常仍抛给调用方 - rqrq - haiAnInterfaceCallLogService.haiAnUpdateCallResult(logId, ifsResponse, "FAILED", e.getMessage(), null); - } + // if (logId != null) { + // // 失败只回写接口调用日志,保留立库原文和错误原因;系统错误日志先停用,异常仍抛给调用方 - rqrq + // haiAnInterfaceCallLogService.haiAnUpdateCallResult(logId, ifsResponse, "FAILED", e.getMessage(), null); + // } // 出库看板失败暂不记系统错误日志 - rqrq // haiAnSysErrorLogService.haiAnLogInterface( // site, 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 b05e8c2b..0d14d117 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 @@ -1958,13 +1958,14 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe } /** - * 人工分拣工作盘按数据库位置映射被分拣位并查询源盘码;有增量时分别提示缺盘和多盘占位并阻断WCS下发,无增量时返回空串。- rqrq + * 人工分拣工作盘按数据库位置映射被分拣位并查询源盘码。提交分拣有增量时缺盘、多盘都阻断;结束分拣缺盘传空串,多盘仍阻断。- rqrq * @param site 海安工厂,用于托盘查询隔离 - rqrq * @param workStation 当前工作盘在数据库中的人工分拣位 - rqrq * @param hasIncrement 本次是否存在wcs_flag=1的标签增量 - rqrq - * @return 唯一被分拣托盘码,允许无增量时返回空串 - rqrq + * @param allowMissingSource 结束分拣为true:没有被分拣盘时源盘编码传空,不报未找到被分拣托盘 - rqrq + * @return 唯一被分拣托盘码;允许缺盘时返回空串 - rqrq */ - private String resolveManualSortingOriBarcode(String site, String workStation, boolean hasIncrement) { + private String resolveManualSortingOriBarcode(String site, String workStation, boolean hasIncrement, boolean allowMissingSource) { // 按海安静态配对将当前人工分拣工作位映射为被分拣位;映射缺失直接失败,避免查错盘。- rqrq String sourceStation = HaiAnStationStaticData.requireSortingSourceStation(workStation); // 在同一分拣事务中按site+被分拣位查询有效托盘,最多取两条用于识别重复占位;查询失败不得继续下发。- rqrq @@ -1973,11 +1974,14 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe return sourcePalletIds.get(0).trim(); } if (hasIncrement) { - // 同一被分拣位查到多个有效托盘属于位置数据错误,单独提示并阻断本次增量下发;零盘仍沿用缺盘提示。- rqrq + // 同一被分拣位多个有效托盘属于位置数据错误,有增量时不能挑一块下发。- rqrq if (sourcePalletIds != null && sourcePalletIds.size() > 1) { throw new RuntimeException("数据错误,被分拣位同时有多个托盘存在!请联系管理员"); } - throw new RuntimeException("未找到被分拣托盘,请联系系统管理员"); + if (!allowMissingSource) { + // 提交分拣带着增量却没有源盘时必须拦住;结束分拣允许源盘传空。- rqrq + throw new RuntimeException("未找到被分拣托盘,请联系系统管理员"); + } } return ""; } @@ -2141,7 +2145,7 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe String oriBarcode = ""; if (manualSortPallet) { // 工作盘无论有无增量均查对应被分拣托盘;有增量查不到时立即报错,无增量允许空值并沿用跳过提交。- rqrq - oriBarcode = resolveManualSortingOriBarcode(site, palletInfo.getLocationCode(), pendingCount != null && pendingCount > 0); + oriBarcode = resolveManualSortingOriBarcode(site, palletInfo.getLocationCode(), pendingCount != null && pendingCount > 0, false); } // 手工分拣工作盘无增量直接跳过;被分拣源盘无增量也要发空组盘,通知立库托盘可以回库 - rqrq if (!sortedSourcePallet && (pendingCount == null || pendingCount == 0)) { @@ -2975,7 +2979,7 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe /** * @author rqrq - * @Description 工作盘结束分拣:type=3、endFlag=Y,有无增量均下发并查询被分拣托盘;有增量时oriBarcode必填且同步回写立库取出。人工分拣位当前盘置calling_flag=Y,WCS成功后将普通明细置1供下次回库全量下发;失败回滚,不写WOT/WTT。- rqrq + * @Description 工作盘结束分拣:type=3、endFlag=Y,有无增量均下发。被分拣位有唯一托盘就写入oriBarcode,没有则传空,不报未找到被分拣托盘。人工分拣位当前盘置calling_flag=Y,WCS成功后将普通明细置1供下次回库全量下发;失败回滚,不写WOT/WTT。- rqrq */ @Override @Transactional(rollbackFor = Exception.class) @@ -3026,8 +3030,8 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe } String oriBarcode = ""; if (manualSortPallet) { - // 结束分拣即使发送空包也查询对应被分拣托盘;只有存在增量标签时才强制要求唯一源盘码。- rqrq - oriBarcode = resolveManualSortingOriBarcode(site, palletInfo.getLocationCode(), !detailRows.isEmpty()); + // 结束分拣仍查配对被分拣位:有唯一托盘就带编码,没有托盘时源盘传空,增量也不再报未找到被分拣托盘。- rqrq + oriBarcode = resolveManualSortingOriBarcode(site, palletInfo.getLocationCode(), !detailRows.isEmpty(), true); } request.setSite(site); request.setPalletId(palletId);