| | |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | @Autowired |
| | | private OrderDetlPakoutService orderDetlPakoutService; |
| | | @Autowired |
| | | private ConfigService configService; |
| | | @Autowired |
| | | private WcsController wcsController; |
| | |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setPdcType("N"); |
| | | wrkMast.setBarcode(locMast.getBarcode()); |
| | | wrkMast.setTakeNone("0"); //0非自动 |
| | | |
| | |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setPdcType("N"); |
| | | wrkMast.setBarcode(locMast.getBarcode()); |
| | | wrkMast.setAppeUser(userId); // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | |
| | | 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(); |
| | | |
| | |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("Y"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setPdcType("N"); |
| | | wrkMast.setAppeUser(userId); |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(userId); |
| | |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("Y"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setPdcType("N"); |
| | | wrkMast.setAppeUser(1L); |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(1L); |
| | |
| | | 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())) { |
| | | // throw new CoolException("订单数据回滚失败"); |
| | | // } |
| | | OrderInAndOutUtil.decrease(Boolean.FALSE,wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(),wrkDetl.getBrand(), |
| | | wrkDetl.getStandby1(),wrkDetl.getStandby2(),wrkDetl.getStandby3(), |
| | | wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3(), wrkDetl.getAnfme()); |
| | | |
| | | //修改订单主表状态,没有作业数量时才可以修改 |
| | | boolean flag = true; |
| | | // List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",wrkDetl.getOrderNo())); |
| | | Order order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, wrkDetl.getOrderNo()); |
| | | List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(Boolean.FALSE, order.getId()); |
| | | for(OrderDetl orderDetl : orderDetls){ |
| | | if(orderDetl.getWorkQty() > 0){ |
| | | flag = false; |
| | | } |
| | | } |
| | | if(flag){ |
| | | // Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo())); |
| | | if(!Cools.isEmpty(order) && order.getSettle()==2){ |
| | | order.setSettle(1L); |
| | | order.setUpdateBy(userId); |
| | | order.setUpdateTime(now); |
| | | } |
| | | // if(!orderService.update(order,new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()))){ |
| | | // throw new CoolException("修改订单状态失败"); |
| | | // if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | //// if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) { |
| | | //// throw new CoolException("订单数据回滚失败"); |
| | | //// } |
| | | // OrderInAndOutUtil.decrease(Boolean.FALSE,wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(),wrkDetl.getBrand(), |
| | | // wrkDetl.getStandby1(),wrkDetl.getStandby2(),wrkDetl.getStandby3(), |
| | | // wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3(), wrkDetl.getAnfme()); |
| | | // |
| | | // //修改订单主表状态,没有作业数量时才可以修改 |
| | | // boolean flag = true; |
| | | //// List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",wrkDetl.getOrderNo())); |
| | | // Order order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, wrkDetl.getOrderNo()); |
| | | // List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(Boolean.FALSE, order.getId()); |
| | | // for(OrderDetl orderDetl : orderDetls){ |
| | | // if(orderDetl.getWorkQty() > 0){ |
| | | // flag = false; |
| | | // } |
| | | OrderInAndOutUtil.updateOrder(Boolean.FALSE,order.getId(),order.getSettle(),userId); |
| | | } |
| | | } |
| | | // } |
| | | // if(flag){ |
| | | //// Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo())); |
| | | // if(!Cools.isEmpty(order) && order.getSettle()==2){ |
| | | // order.setSettle(1L); |
| | | // order.setUpdateBy(userId); |
| | | // order.setUpdateTime(now); |
| | | // } |
| | | //// if(!orderService.update(order,new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()))){ |
| | | //// throw new CoolException("修改订单状态失败"); |
| | | //// } |
| | | // OrderInAndOutUtil.updateOrder(Boolean.FALSE,order.getId(),order.getSettle(),userId); |
| | | // } |
| | | // } |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 出库任务取消时回滚出库订单明细的任务生成数量。 |
| | | * |
| | | * 延迟出库订单中: |
| | | * - 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) { |