|
|
|
@ -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); |
|
|
|
|