Browse Source

分拣获取清单和传值优化

master
常熟吴彦祖 1 week ago
parent
commit
e39a8facff
  1. 7
      src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AI_CONTEXT.md
  2. 2
      src/main/java/com/gaotao/modules/autoWareHourceHaian/api/entity/HaiAnAutoSortingInfoRequest.java
  3. 18
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java

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

@ -109,7 +109,7 @@
- 自动发料标签新增落库快照 `order_no/release_no/sequence_no`:定时RFID建单按site+标签号+预定领料单号,经领料明细item_no关联`haian_SOIssueNotifyOrderList`取soorder_no/release_no/sequence_no;无来源留空,不同工单多匹配拒绝建单。PC申请单号后三列展示快照,移库失败也可看工单;存量升级执行`sql/20260920_haian_auto_issue_label_order_snapshot.sql`,仅补54工厂全空且唯一匹配的历史快照,不覆盖发料状态。- rqrq
- 海安 `wcsWareHouse` 回调同样采用“两段式”:第一段接口只写 `haian_wcs_callback_task(status=已录入)`;第二段由 `HaianWcsSchedule.scheduleHaianWcsTaskProcessing(2.6秒)` 乐观锁消费,并按 `入货架(原入库)/出货架(原出库)/离开入库口(原取走栈板)/到达异常位(原异常位处理)/到达出库口(原取货通知)/到达手工分拣区` 分流处理(到达出库口不再依赖transportTask分支,且不执行 `palletAutoGoToWCS.goToWCS` 回库逻辑;离开入库口释放calling_flag并把托盘落到A01+立库输送线、不改wcs_location;到达手工分拣区仅把 `haian_pallet.location_code` 改成回传点位,不改 calling_flag、不做移库) - rqrq
- 海安手工分拣区写死为 `R1/R2/R3/R4`(`HaiAnStationStaticData.MANUAL_SORT_STATIONS`)。被分拣源盘是海安新增概念,站点写死在 `HaiAnStationStaticData.SORTED_SOURCE_STATIONS`(当前 `R5/R6/R7/R8`),禁止把 R1–R4 填进被分拣数组。组盘入库/手工组盘扫盘扫标签必须传 `sortFlag=0`,命中手工分拣区或被分拣站一律拒绝;人工分拣页传 `sortFlag=1` 才允许这两类栈板。禁止用“不是 J1-J4 就算被分拣” - rqrq
- 被分拣源盘(`sortedSourceFlag=true`):扫进=把允许回库的标签放回本盘(不卡分拣清单、拦 `reserve_flag=Y`、明细 `wcs_flag=1`);扫回=解绑本盘明细,禁止 `restorePalletDetail` 写回错误托盘;提交分拣=组盘 `Type=2` 且 `endFlag=Y`,无增量也发空 `cargoInfos` 通知回库。手工分拣工作盘保持原逻辑(卡分拣清单、扫回恢复原托盘、无增量跳过、`endFlag=N`) - rqrq
- 被分拣源盘(`sortedSourceFlag=true`):扫进=把允许回库的标签放回本盘(不卡分拣清单、拦 `reserve_flag=Y`、明细 `wcs_flag=1`),不回写领料取出标记;扫回=解绑本盘明细,禁止 `restorePalletDetail` 写回错误托盘;提交分拣=组盘 `Type=2` 且 `endFlag=Y`,无增量也发空 `cargoInfos` 通知回库。手工分拣工作盘仍卡分拣清单、扫回恢复原托盘、无增量跳过、`endFlag=N`;工作盘扫入成功后立即回写领料取出标记,提交时继续推进任务状态 - rqrq
- 海安 `pickingFeedback` 回调采用独立“两段式”消费:第一段接口只写 `haian_wcs_callback_pallet_scan(process_status=PENDING)`;第二段由 `HaianWcsSchedule.scheduleInventoryDiscrepancyProcessing(7.745秒)` 按 `actionType` 分流处理(`被分拣回传` 写库存差异表、`自动分拣` 回写增量标签与任务状态) - rqrq
- 海安自动分拣回调不启用“endFlag=Y自动发起任务”语义:无增量数据时仅结束本条回调,不自动创建空托盘任务或下发额外配送任务 - rqrq
- 海安到达出库口(原取货通知)在“来源=领料申请单/发货通知单”且“托盘无预约取走任务 + 存在预定标签”时,必须批量回写 `haian_SOIssueNotifyOrderMaterialList_detail.out_wcs_flag='Y'`,并联动对应 `haian_wms_order_task_detail` 置 `已完成/直接出库`、主任务在明细全完成后置 `已完成` - rqrq
@ -145,7 +145,10 @@
- 扫入不比较标签与栈板区域的仓库/库位;已绑定站点的栈板也允许跨仓标签扫入,扫入只保存栈板明细,不立即改写标签库存位置 - rqrq
- 栈板后续随 AGV 放货、手工绑定站点或 WCS 入货架等现有流程触发移库;移库入队和 IFS 处理仍按目标区域配置及标签实时库存状态执行 - rqrq
- 海安PDA组盘入库页的托盘高度为选填,允许清空选择并提交运输入库;已选高度随请求保存并下发,未选时复用托盘已保存高度,托盘也无高度时仅在WCS报文默认低于600,不写默认值到主表。- rqrq
- 所有“扫入/扫出/扫回”标签操作前,若栈板 `area` 非空,必须按 `site+area` 联查 `haian_area.pack_able`;当 `pack_able='N'` 时必须拒绝并提示“该区域禁止扫标签操作”。组盘入库/手工组盘不得跳过本校验。仅人工分拣页被分拣源盘允许跳过 `pack_able` - rqrq
- 所有“扫入/扫出/扫回”标签操作前,若栈板 `area` 非空,必须按 `site+area` 联查 `haian_area.pack_able`;当 `pack_able='N'` 时必须拒绝并提示“该区域禁止扫标签操作”。组盘入库/手工组盘不得跳过本校验。人工分拣页(`sortFlag=1`)扫入时,工作盘和被分拣源盘都跳过 `pack_able`;扫出仍只对被分拣源盘跳过,工作盘扫出继续校验。分拣场景的扫回跳过 `pack_able` - rqrq
- 手工分拣工作盘扫入(`sortFlag=1` 且站点命中 `HaiAnStationStaticData.MANUAL_SORT_STATIONS`)落盘成功后,按 `site+标签号` 把 `haian_SOIssueNotifyOrderMaterialList_detail` 中 `out_wcs_flag='N'` 的行改成 `Y` 并写 `out_wcs_time`。无匹配申请单或已是 `Y` 时更新 0 行,不阻断扫入;写入失败回滚本次扫入。被分拣放回和组盘扫入不回写 - rqrq
- 分拣扫回(`sortFlag=1` 的 `restorePalletDetail`)按 `site+标签号` 把已取出的 `out_wcs_flag='Y'` 改回 `N` 并清空 `out_wcs_time`;已是 `N` 的行不改。写入失败回滚本次扫回 - rqrq
- 手工分拣提交或结束仍按本次 `wcs_flag=1` 增量推进海安任务明细和主任务。查询申请单明细不再排除已取出行,扫入时已写成 `Y` 的标签也要继续推进任务;`out_wcs_flag` 回写仍只改 `N` - rqrq
- 若栈板 `area` 为空或空串,跳过 `pack_able` 校验,保持离站栈板可操作语义 - rqrq
## 8. 托盘类型特殊规则

2
src/main/java/com/gaotao/modules/autoWareHourceHaian/api/entity/HaiAnAutoSortingInfoRequest.java

@ -20,7 +20,7 @@ public class HaiAnAutoSortingInfoRequest {
private String palletId;
/**
* 查询点位。手工分拣传当前托盘站点,不再换成被分拣源盘位;看板传 ALL。不落库,HTTP 体序列化为 JSON 字符串。 - rqrq
* 查询点位,立库按该值原样返回对应清单。分拣盘传当前工作位;被分拣盘通知回库传配对工作位,不传源盘位;看板传 ALL。不落库,HTTP 体序列化为 JSON 字符串。 - rqrq
*/
private String locationCode;
}

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

@ -1987,10 +1987,10 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
* 任一查询失败或校验不通过均中断当前事务,不生成WOT且不下发WCS。- rqrq
* @param site 海安工厂,限定托盘与明细范围 - rqrq
* @param palletId 当前被分拣源盘编码 - rqrq
* @param sourceStation 当前源盘实际位置,供WCS查询和工作位映射 - rqrq
* @param sourceStation 当前源盘实际位置,只用于映射配对工作位,不直接作为立库查询点位 - rqrq
*/
private void validateSortedSourceReturn(String site, String palletId, String sourceStation) throws Exception {
// 用源盘当前位置实时获取WCS拣选清单,不能依赖PDA扫码时缓存;接口或报文异常阻断回库。- rqrq
// 立库按请求点位原样返回清单;源盘位查不到工作位任务,必须先换成配对工作位再查。失败阻断回库。- rqrq
List<String> pickingLabels = querySourceSortingLabels(site, palletId, sourceStation);
// 在已锁定的本盘明细范围内查当前标签,只有清单标签仍在本源盘时才提示未分拣。- rqrq
List<HaiAnPalletDetailRow> palletDetails = haiAnPdaAutoWarehouseMapper.getPalletDetails(site, palletId, "", null);
@ -2028,11 +2028,13 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
}
/**
* 按源盘位置请求WCS拣选清单,响应按配对工作位识别并兼容返回源盘位的旧报文。- rqrq
* 空站点数组代表无待拣标签;非空报文缺少本组站点、重复站点或标签无效时失败,防止误放行。- rqrq
* 通知回库按配对工作位请求WCS拣选清单。立库传什么点位就返回什么点位,不能把 ST-MP-01 当成 ST-MP-05 去查。- rqrq
* 空站点数组代表无待拣标签;非空报文缺少所查工作位、重复站点或标签无效时失败,防止误放行。- rqrq
* @param sourceStation 被分拣源盘当前位置,仅用于映射工作位 - rqrq
* @return 本组待拣标签号,按WCS顺序去重 - rqrq
*/
private List<String> querySourceSortingLabels(String site, String palletId, String sourceStation) throws Exception {
// ST-MP-01→05、02→06、03→07、04→08;映射失败说明站点未配置,不能拿源盘位硬查。- rqrq
String workStation = HaiAnStationStaticData.resolveSortingWorkStation(sourceStation);
if (!StringUtils.hasText(workStation)) {
throw new RuntimeException("被分拣托盘位置未配置对应分拣工作位:" + sourceStation);
@ -2040,8 +2042,9 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
HaiAnAutoSortingInfoRequest queryRequest = new HaiAnAutoSortingInfoRequest();
queryRequest.setSite(site);
queryRequest.setPalletId(palletId);
queryRequest.setLocationCode(sourceStation);
// WCS查询入参是源盘位置,接口失败直接抛错;不得把失败当成空清单放行回库。- rqrq
// HTTP体只有这一个点位字符串;传源盘位会原样返回源盘清单,待拣标签会对错工作位。- rqrq
queryRequest.setLocationCode(workStation);
// 按工作位查清单,接口失败直接抛错;不得把失败当成空清单放行回库。- rqrq
String response = haiAnWcsApiService.queryAutoSortingInfo(queryRequest);
JsonNode root = new ObjectMapper().readTree(response);
if (root == null) {
@ -2064,7 +2067,8 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
if (!StringUtils.hasText(stationCode)) {
stationCode = station.path("stationCode").asText("");
}
if (!workStation.equals(HaiAnStationStaticData.resolveSortingWorkStation(stationCode))) {
// 立库回显的就是请求点位,只收本次发出的工作位,不再把源盘位反查成工作位。- rqrq
if (!workStation.equalsIgnoreCase(stationCode.trim())) {
continue;
}
if (matched) {

Loading…
Cancel
Save