| | |
| | | private LocDetlService locDetlService; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | |
| | | @Autowired |
| | | private AgvLocMastService agvLocMastService; |
| | | @Autowired |
| | | private CommonService commonService; |
| | | @Autowired |
| | |
| | | Date now = new Date(); |
| | | |
| | | Set<String> locNos = pakoutLoc(order); |
| | | for (String locNo : locNos){ |
| | | for (String locNo : locNos) { |
| | | LocMast locMast = locMastService.selectByLoc(locNo); |
| | | if(!"F".equals(locMast.getLocSts())){ |
| | | if (!"F".equals(locMast.getLocSts())) { |
| | | throw new CoolException("库位状态已变更"); |
| | | } |
| | | //生成工作档 |
| | | WrkMast wrkMast = createWrkMast(locNo,locMast.getBarcode(),now); |
| | | WrkMast wrkMast = createWrkMast(locNo, locMast.getBarcode(), now); |
| | | //生成工作档明细 |
| | | List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo); |
| | | createWrkDetl(locDetls, wrkMast,order.getOrderNo(),now); |
| | | createWrkDetl(locDetls, wrkMast, order.getOrderNo(), now); |
| | | //修改库位状态 |
| | | locMast.setLocSts("R"); |
| | | locMastService.updateByLocNo(locMast); |
| | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | private Order createOrder(){ |
| | | private Order createOrder() { |
| | | Date now = new Date(); |
| | | return new Order( |
| | | String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] |
| | |
| | | |
| | | } |
| | | |
| | | private OrderDetl createOrderDetl(Order order){ |
| | | private OrderDetl createOrderDetl(Order order) { |
| | | Date now = new Date(); |
| | | OrderDetl orderDetl = new OrderDetl(); |
| | | |
| | |
| | | return orderDetl; |
| | | } |
| | | |
| | | private Set<String> pakoutLoc(Order order){ |
| | | private Set<String> pakoutLoc(Order order) { |
| | | //需要出库的库位 |
| | | Set<String> locNos = new HashSet<>(); |
| | | //根据订单生成四项库出库工作档 |
| | | List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo())); |
| | | |
| | | for(OrderDetl orderDetl : orderDetlList){ |
| | | if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){ |
| | | for (OrderDetl orderDetl : orderDetlList) { |
| | | if (orderDetl.getAnfme() - orderDetl.getQty() <= 0) { |
| | | continue; |
| | | } |
| | | |
| | |
| | | //过滤库位货物为高货物 |
| | | locNosSearch = locNosSearch.stream().filter(locNo -> { |
| | | LocMast locMast = locMastService.selectByLoc(locNo); |
| | | if(locMast.getLocType1() == 3){ |
| | | if (locMast.getLocType1() == 3) { |
| | | return false; |
| | | }else { |
| | | } else { |
| | | //且检测该库位是否含没有货架码的物料,如有有则不允许出库 |
| | | // LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locNo) |
| | | // .andNew().eq("supp_code", "").or().isNull("supp_code")); |
| | | |
| | | if(Cools.isEmpty(locDetlService.selectByLocWithoutContainer(locNo))){ |
| | | if (Cools.isEmpty(locDetlService.selectByLocWithoutContainer(locNo))) { |
| | | return true; |
| | | }else { |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | |
| | | //重新排序 |
| | | Set<String> resort = resort(locNosSearch); |
| | | |
| | | for(String locNo : resort){ |
| | | for (String locNo : resort) { |
| | | List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo); |
| | | locNos.add(locNo); |
| | | for (LocDetl locDetl :locDetls){ |
| | | if(matnr.equals(locDetl.getMatnr())){ |
| | | for (LocDetl locDetl : locDetls) { |
| | | if (matnr.equals(locDetl.getMatnr())) { |
| | | orderAnfme -= locDetl.getAnfme(); |
| | | }else { |
| | | } else { |
| | | OrderDetl odNew = createOrderDetl(order); |
| | | odNew.setMatnr(locDetl.getMatnr()); |
| | | odNew.setMaktx(locDetl.getMaktx()); |
| | |
| | | orderDetlService.insert(odNew); |
| | | } |
| | | } |
| | | if(orderAnfme <= 0){ |
| | | if (orderAnfme <= 0) { |
| | | orderDetl.setQty(orderDetl.getAnfme() - orderAnfme); |
| | | orderDetlService.updateById(orderDetl); |
| | | break; |
| | | } |
| | | } |
| | | if(orderAnfme > 0){ |
| | | if (orderAnfme > 0) { |
| | | orderDetl.setAnfme(orderDetl.getAnfme() - orderAnfme); |
| | | orderDetl.setQty(orderDetl.getAnfme()); |
| | | orderDetlService.updateById(orderDetl); |
| | |
| | | } |
| | | |
| | | //根据深浅库位进行重新排序 |
| | | private Set<String> resort(Set<String> locNos){ |
| | | private Set<String> resort(Set<String> locNos) { |
| | | Set<String> locNosResort = new LinkedHashSet<>(); |
| | | |
| | | for(String locNoSearch : locNos){ |
| | | for (String locNoSearch : locNos) { |
| | | LocMast locMast = locMastService.selectById(locNoSearch); |
| | | if(!"F".equals(locMast.getLocSts())){ |
| | | if (!"F".equals(locMast.getLocSts())) { |
| | | continue; |
| | | } |
| | | |
| | | List<String> groupOuterLoc = Utils.getGroupOuterLoc(locNoSearch); |
| | | |
| | | if(Cools.isEmpty(groupOuterLoc)){ |
| | | if (Cools.isEmpty(groupOuterLoc)) { |
| | | locNosResort.add(locNoSearch); |
| | | }else { |
| | | } else { |
| | | groupOuterLoc.add(locNoSearch); |
| | | //如果是深库位,则先找外侧的库位 |
| | | for (String locNoOut : groupOuterLoc){ |
| | | for (String locNoOut : groupOuterLoc) { |
| | | LocMast locMastOuter = locMastService.selectById(locNoOut); |
| | | //外侧如果是拣料,则内测不允许出 |
| | | if("P".equals(locMastOuter.getLocSts()) || "Q".equals(locMastOuter.getLocSts()) || "S".equals(locMastOuter.getLocSts())){ |
| | | if ("P".equals(locMastOuter.getLocSts()) || "Q".equals(locMastOuter.getLocSts()) || "S".equals(locMastOuter.getLocSts())) { |
| | | break; |
| | | } |
| | | |
| | | if(!"F".equals(locMastOuter.getLocSts())){ |
| | | if (!"F".equals(locMastOuter.getLocSts())) { |
| | | continue; |
| | | } |
| | | locNosResort.add(locNoOut); |
| | |
| | | return locNosResort; |
| | | } |
| | | |
| | | private WrkMast createWrkMast(String locNo,String barCode,Date now){ |
| | | private WrkMast createWrkMast(String locNo, String barCode, Date now) { |
| | | int ioType = 101; |
| | | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); |
| | | WrkMast wrkMast = new WrkMast(); |
| | |
| | | wrkMast.setAppeTime(now); |
| | | //wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | | |
| | | Integer pltType = null; |
| | | if (!Cools.isEmpty(locNo) && Cools.isEmpty(pltType)) { |
| | | AgvLocMast agvLocMast = agvLocMastService.selectById(locNo); |
| | | if (agvLocMast != null) { |
| | | pltType = agvLocMast.getPltType(); |
| | | } |
| | | } |
| | | wrkMast.setPltType(pltType); |
| | | //补货标识 |
| | | wrkMast.setMk("Y"); |
| | | if (!wrkMastService.insert(wrkMast)) { |
| | | throw new CoolException("保存工作档失败,出库库位号:"+locNo); |
| | | throw new CoolException("保存工作档失败,出库库位号:" + locNo); |
| | | } |
| | | return wrkMast; |
| | | } |
| | | |
| | | private void createWrkDetl(List<LocDetl> locDetls, WrkMast wrkMast,String orderNo, Date now){ |
| | | private void createWrkDetl(List<LocDetl> locDetls, WrkMast wrkMast, String orderNo, Date now) { |
| | | locDetls.forEach(locDetl -> { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | BeanUtils.copyProperties(locDetl,wrkDetl); |
| | | BeanUtils.copyProperties(locDetl, wrkDetl); |
| | | wrkDetl.setZpallet(wrkMast.getBarcode()); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |