| | |
| | | return false; |
| | | } |
| | | Integer ioType = wrkMast.getIoType(); |
| | | return ioType != null && (ioType == 1 || ioType == 5 || ioType == 8 || ioType == 53 || ioType == 54 || ioType == 57); |
| | | return ioType != null && (ioType == 1 || ioType == 5 || ioType == 11 || ioType == 53 || ioType == 54 || ioType == 57); |
| | | } |
| | | |
| | | private boolean needOutboundErpReport(WrkMast wrkMast) { |
| | |
| | | } |
| | | for (WrkDetl wrkDetl : wrkDetls101) { |
| | | // 更新订单完成数量 |
| | | OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), |
| | | wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); |
| | | if (orderDetlPakout == null) { |
| | | orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), |
| | | wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); |
| | | } |
| | | try { |
| | | if (!Cools.isEmpty(orderDetlPakout)) { |
| | | if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), |
| | | orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), |
| | | wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | if (!increasePakoutOrderQty(wrkMast, wrkDetl)) { |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("全板出库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | } catch (Exception ignore) { |
| | | |
| | |
| | | } |
| | | } |
| | | // 更新订单完成数量 |
| | | OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), |
| | | wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); |
| | | try { |
| | | if (!Cools.isEmpty(orderDetlPakout)) { |
| | | if (!orderDetlPakoutService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), |
| | | orderDetlPakout.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), |
| | | wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) { |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("并板途中捡料 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | if (!increasePakoutOrderQty(wrkMast, wrkDetl)) { |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg("并板途中捡料 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]"); |
| | | } |
| | | } catch (Exception ignore) { |
| | | } |
| | |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 回写出库订单完成数量。 |
| | | * |
| | | * 新增的延迟出库订单明细按 pallet_id 保存接口托盘号,因此优先使用 orderNo + palletId 精确回写; |
| | | * 如果是历史订单或旧数据没有 pallet_id,则退回原来的物料/批次/备用字段匹配方式。 |
| | | */ |
| | | private boolean increasePakoutOrderQty(WrkMast wrkMast, WrkDetl wrkDetl) { |
| | | if (wrkDetl == null || Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | return true; |
| | | } |
| | | String palletId = null; |
| | | if (!Cools.isEmpty(wrkDetl.getZpallet())) { |
| | | palletId = wrkDetl.getZpallet(); |
| | | } else if (wrkMast != null) { |
| | | palletId = wrkMast.getBarcode(); |
| | | } |
| | | // stationId > 600 的延迟出库订单是一托盘一行明细;同一订单、物料、批次、进仓编号下会有多行。 |
| | | // 因此完成回写必须优先用 orderNo + palletId 精确定位,否则旧的物料维度查询会命中多行。 |
| | | if (!Cools.isEmpty(palletId) |
| | | && orderDetlPakoutService.increaseQtyByOrderNoAndPallet(wrkDetl.getOrderNo(), palletId, wrkDetl.getAnfme())) { |
| | | return true; |
| | | } |
| | | // 兼容历史订单:旧数据可能没有 pallet_id,只能退回原来的物料/批次/备用字段匹配。 |
| | | // 这里不再调用批量 update SQL,而是先取一条明细后按 id 更新,避免重复明细时把多行 qty 一起加上。 |
| | | OrderDetlPakout matchedOrderDetl = orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), |
| | | wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), |
| | | wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); |
| | | if (Cools.isEmpty(matchedOrderDetl)) { |
| | | return true; |
| | | } |
| | | matchedOrderDetl.setQty(safeDouble(matchedOrderDetl.getQty()) + safeDouble(wrkDetl.getAnfme())); |
| | | matchedOrderDetl.setUpdateTime(new Date()); |
| | | return orderDetlPakoutService.updateById(matchedOrderDetl); |
| | | } |
| | | |
| | | private double safeDouble(Double value) { |
| | | return value == null ? 0.0D : value; |
| | | } |
| | | } |