Browse Source

自动发料大改动

clodop
常熟吴彦祖 2 months ago
parent
commit
ff69359e72
  1. 6
      src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AUTO_ISSUE_DOCKING_AND_PC.md
  2. 5
      src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnAutoIssueOrderSourceResult.java
  3. 2
      src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnAutoIssueShopOrderGroupKey.java
  4. 21
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAutoIssueServiceImpl.java
  5. 7
      src/main/resources/mapper/autoWareHourceHaian/HaiAnAutoIssueMoveRefMapper.xml
  6. 2
      src/main/resources/mapper/autoWareHourceHaian/HaiAnAutoIssueTaskLabelMapper.xml

6
src/main/java/com/gaotao/modules/autoWareHourceHaian/HAIAN_AUTO_ISSUE_DOCKING_AND_PC.md

@ -16,7 +16,7 @@
```
AutoIssueShopOrderDto
site 发料任务 site(RFID 回调大 site,禁止登录态)
site 工单订单行 haian_SOIssueNotifyOrderList.sub_site(任务大site仅用于内部归属隔离)
shopOrderNo OrderList.soorder_no
workOrderNo 固定空串,不传工单号
releaseNo OrderList.release_no,空则海安先填 *
@ -102,7 +102,7 @@ RFID建单和真实移库入队仍沿用原流程;发料门禁及汇总只以
1. 只处理移库汇总为S且`issue_flag`为空的任务标签;移库F保持未发料,发料`S/F`复用结果,`P/U`进入待核实,均禁止再次发送。 - rqrq
2. 按标签再查一次 **当前** `handling_unit`(移库后 `location_id` 已变,禁止用建单快照)。现查询 XML 需补 `eng_chg_level`。
3. 用任务标签 `serial_no` 查 `haian_SOIssueNotifyOrderMaterialList_detail`,再 `site + notify_no + item_no` 关联 `haian_SOIssueNotifyOrderList`,取 `soorder_no / release_no / sequence_no`。
4. 按 `site + shopOrderNo + releaseNo + sequenceNo` 分组,每组一个 `AutoIssueShopOrderDto`,`workOrderNo=""`;`releaseNo/sequenceNo` 空则海安填 `*`(不要依赖同事默认,两边口径一致)。
4. 按订单子工厂`sub_site + shopOrderNo + releaseNo + sequenceNo`分组,每组一个 `AutoIssueShopOrderDto`,`workOrderNo=""`;`releaseNo/sequenceNo` 空则海安填 `*`(不要依赖同事默认,两边口径一致)。 - rqrq
5. 每张标签按第 1 节映射表填写;`labelCode` 空、`issueQty=qty` 全发、`lineItemNo` 由 `BOM_item_no` 转 Integer,转失败记 0。
6. 组完后 **本地先校验** site/工单号/handlingUnitId/partNo/locationId/issueQty,缺了不要调 `autoIssue`。
7. 回参 `failCount>0` 或任一张失败:**成功的留盘标-1,失败标-2,整托走异常位 type=2**(不要因为部分成功就 type=1)。
@ -169,7 +169,7 @@ failSet = failures 里 labelCode 或 handlingUnitId 命中的集合
## 4. 已拍板(原待确认项)
1. `shopOrders.site`:发料任务大 site。
1. `shopOrders.site`:对应工单订单行`haian_SOIssueNotifyOrderList.sub_site`;为空或与标签库存site不一致时该标签本地判失败,禁止兜底为任务大site。- rqrq
2. `lineItemNo`:`detail.BOM_item_no` 转 Integer,转失败为 0(不是同事的 null→1)。
3. `labelCode` 固定空,失败对账用 `handlingUnitId`(同事内部会把空 labelCode 回退成 handlingUnitId)。
4. 只要有一张失败:成功标签留盘标-1,失败标签标-2,整托type=2去异常位。- rqrq

5
src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnAutoIssueOrderSourceResult.java

@ -28,6 +28,11 @@ public class HaiAnAutoIssueOrderSourceResult {
*/
private BigDecimal itemNo;
/**
* 工单所属子工厂,来源haian_SOIssueNotifyOrderList.sub_site;映射同事shopOrders.site并参与工单分组。为空禁止该标签发料,不落库。- rqrq
*/
private String subSite;
/**
* BOM行号原文,来源 detail.BOM_item_no,转 Integer 作为同事 lineItemNo;转失败由业务改 0。不落库。 - rqrq
*/

2
src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnAutoIssueShopOrderGroupKey.java

@ -12,7 +12,7 @@ import lombok.EqualsAndHashCode;
public class HaiAnAutoIssueShopOrderGroupKey {
/**
* 分组用工厂 site,来源发料任务 site。同事 shopOrders.site 与本字段一致。不落库。 - rqrq
* 分组用工厂site,来源haian_SOIssueNotifyOrderList.sub_site;同事shopOrders.site使用同值,隔离不同子工厂的同号工单,不落库。- rqrq
*/
private String site;

21
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAutoIssueServiceImpl.java

@ -737,6 +737,21 @@ public class HaiAnAutoIssueServiceImpl implements HaiAnAutoIssueService {
continue;
}
// IFS发料工厂取订单sub_site;任务site仅用于海安业务隔离,缺失或与库存工厂不符时本标签失败,其他标签仍可继续。- rqrq
String issueSite = normalizeText(orderSource.getSubSite());
if (!StringUtils.hasText(issueSite)) {
// 保留可定位的订单来源错误,不登记P、不调用IFS,后续按任务结果写-2并通知异常位。- rqrq
localResults.put(serialNo, buildLabelIssueResult(serialNo, false,
"工单订单行缺少子工厂sub_site,notifyNo=" + orderSource.getNotifyNo() + ",itemNo=" + orderSource.getItemNo()));
continue;
}
if (!issueSite.equals(normalizeText(handlingUnit.getSite()))) {
// 同事方法按一个工厂查询库存,工单与标签工厂不一致时不能改用大工厂或静默替换为标签工厂。- rqrq
localResults.put(serialNo, buildLabelIssueResult(serialNo, false,
"工单子工厂与标签库存工厂不一致,orderSubSite=" + issueSite + ",labelSite=" + handlingUnit.getSite()));
continue;
}
String releaseNo = defaultWildcard(orderSource.getReleaseNo());
String sequenceNo = defaultWildcard(orderSource.getSequenceNo());
AutoIssueHandlingUnitDto huDto = new AutoIssueHandlingUnitDto();
@ -752,14 +767,16 @@ public class HaiAnAutoIssueServiceImpl implements HaiAnAutoIssueService {
huDto.setIssueQty(handlingUnit.getQty());
HaiAnAutoIssueShopOrderGroupKey groupKey = new HaiAnAutoIssueShopOrderGroupKey();
groupKey.setSite(site);
// 子工厂也是工单分组键,避免多子工厂混托时把同号工单的标签合并后发给错误库存工厂。- rqrq
groupKey.setSite(issueSite);
groupKey.setShopOrderNo(shopOrderNo);
groupKey.setReleaseNo(releaseNo);
groupKey.setSequenceNo(sequenceNo);
AutoIssueShopOrderDto shopOrder = shopOrderGroups.get(groupKey);
if (shopOrder == null) {
shopOrder = new AutoIssueShopOrderDto();
shopOrder.setSite(site);
// 同事autoIssue会把本字段原样传给IFS的ifsSiteID,明确使用当前订单行sub_site。- rqrq
shopOrder.setSite(issueSite);
shopOrder.setShopOrderNo(shopOrderNo);
shopOrder.setWorkOrderNo(HaiAnAutoIssueStaticData.EMPTY_WORK_ORDER_NO);
shopOrder.setReleaseNo(releaseNo);

7
src/main/resources/mapper/autoWareHourceHaian/HaiAnAutoIssueMoveRefMapper.xml

@ -26,6 +26,7 @@
</select>
<!-- PC仅展示与本任务label有交集的队列,混合队列展示标签串裁剪为交集,原始JSON不变;NOLOCK可能脏读/漏读/重复读,仅供展示,不作发料或状态流转依据 - rqrq -->
<!-- CROSS APPLY使用普通别名,避免MATCHED关键字触发Druid SQL Server解析失败;仅改别名,标签交集与工厂过滤不变 - rqrq -->
<select id="listMoveRefsByIssueTask" resultType="HaiAnAutoIssueMoveRefData">
SELECT
r.id,
@ -33,7 +34,7 @@
r.move_queue_id AS moveQueueId,
r.created_time AS createdTime,
q.status AS queueStatus,
matched.serialNoStr AS serialNoStr,
task_label_subset.serialNoStr AS serialNoStr,
q.move_group_json AS moveGroupJson,
q.updated_time AS updatedTime,
q.result_flag AS resultFlag,
@ -52,9 +53,9 @@
ORDER BY l.id
FOR XML PATH(''), TYPE
).value('.', 'nvarchar(max)'), 1, 1, '') AS serialNoStr
) matched
) task_label_subset
WHERE r.issue_task_id = #{query.searchIssueTaskId}
AND NULLIF(matched.serialNoStr, '') IS NOT NULL
AND NULLIF(task_label_subset.serialNoStr, '') IS NOT NULL
ORDER BY r.id ASC
</select>

2
src/main/resources/mapper/autoWareHourceHaian/HaiAnAutoIssueTaskLabelMapper.xml

@ -129,11 +129,13 @@
</update>
<!-- rqrq - 按标签号批量反查工单:detail 关联 OrderList 取 soorder/release/sequence/BOM。NOLOCK 允许脏读,移库已成功后申请单行基本稳定,失败则该标签本地判失败不送 autoIssue -->
<!-- 大工厂site仍用于申请单归属隔离,订单sub_site作为发料工厂返回;不得以任务大site替代缺失的子工厂 - rqrq -->
<select id="listOrderSourceBySerialNos" resultType="HaiAnAutoIssueOrderSourceResult">
SELECT
d.serialNo AS serialNo,
d.notify_no AS notifyNo,
d.item_no AS itemNo,
o.sub_site AS subSite,
d.BOM_item_no AS bomItemNo,
o.soorder_no AS soorderNo,
o.release_no AS releaseNo,

Loading…
Cancel
Save