| | |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | @Autowired |
| | | private OrderDetlPakoutService orderDetlPakoutService; |
| | | @Autowired |
| | | private ConfigService configService; |
| | | @Autowired |
| | | private WcsController wcsController; |
| | |
| | | public String emptyPlateIn(Integer devpNo, Long userId) { |
| | | // 源站点状态检测 |
| | | BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true); |
| | | // 检索库位 |
| | | // 检索库位;人工空托盘入库固定传 staDescId=10,实际找位规则集中在 CommonService。 |
| | | LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); |
| | | FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(); |
| | | |
| | |
| | | throw new CoolException("保存数据失败"); |
| | | } |
| | | } |
| | | rollbackPakoutOrderWorkQty(wrkMast, wrkDetls, userId, now); |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | // if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | //// if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 出库任务取消时回滚出库订单明细的任务生成数量。 |
| | | * |
| | | * 延迟出库订单中: |
| | | * - work_qty 表示已经生成任务的数量; |
| | | * - qty 表示已经完成出库的数量。 |
| | | * |
| | | * WCS 取消或本地取消任务后,任务会被移入历史档并删除当前工作档。 |
| | | * 如果不回滚 work_qty,后续同一订单再次下发时系统会误认为这些明细仍已生成任务。 |
| | | */ |
| | | private void rollbackPakoutOrderWorkQty(WrkMast wrkMast, List<WrkDetl> wrkDetls, Long userId, Date now) { |
| | | if (wrkMast == null || Cools.isEmpty(wrkDetls)) { |
| | | return; |
| | | } |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | if (wrkDetl == null || Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | continue; |
| | | } |
| | | OrderDetlPakout orderDetl = findPakoutOrderDetlForRollback(wrkMast, wrkDetl); |
| | | if (orderDetl == null) { |
| | | continue; |
| | | } |
| | | double oldWorkQty = safeDouble(orderDetl.getWorkQty()); |
| | | double rollbackQty = safeDouble(wrkDetl.getAnfme()); |
| | | double completedQty = safeDouble(orderDetl.getQty()); |
| | | double newWorkQty = Math.max(completedQty, oldWorkQty - rollbackQty); |
| | | orderDetl.setWorkQty(newWorkQty); |
| | | orderDetl.setUpdateBy(userId); |
| | | orderDetl.setUpdateTime(now); |
| | | if (!orderDetlPakoutService.updateById(orderDetl)) { |
| | | throw new CoolException("出库任务取消回滚订单明细作业数量失败:" + wrkDetl.getOrderNo()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private OrderDetlPakout findPakoutOrderDetlForRollback(WrkMast wrkMast, WrkDetl wrkDetl) { |
| | | String palletId = null; |
| | | if (wrkDetl != null && !Cools.isEmpty(wrkDetl.getZpallet())) { |
| | | palletId = wrkDetl.getZpallet(); |
| | | } else if (wrkMast != null) { |
| | | palletId = wrkMast.getBarcode(); |
| | | } |
| | | if (!Cools.isEmpty(palletId)) { |
| | | OrderDetlPakout orderDetl = orderDetlPakoutService.selectItemByOrderNoAndPallet(wrkDetl.getOrderNo(), palletId); |
| | | if (orderDetl != null) { |
| | | return orderDetl; |
| | | } |
| | | } |
| | | return orderDetlPakoutService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), |
| | | wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), |
| | | wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); |
| | | } |
| | | |
| | | private double safeDouble(Double value) { |
| | | return value == null ? 0.0D : value; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void pickWrkMast(String workNo, Long userId) { |