| | |
| | | List<Pakout> pakouts = pakoutService.selectList(new EntityWrapper<Pakout>() |
| | | .eq("doc_num", param.getNumber()) |
| | | .in("wrk_sts", 1, 2)); |
| | | // 修改库存数量 |
| | | for (Pakout pakout : pakouts) { |
| | | LocDetl locDetl = locDetlService.getLocDetl(pakout.getNodeId(), pakout.getMatnr()); |
| | | // 缺货 or 立库 |
| | | if (locDetl == null) { |
| | | // 缺货 |
| | | if (pakout.getLocNo().equals("缺货")) { |
| | | Double count = Optional.ofNullable(locDetlService.selectCountByMatnr(pakout.getMatnr())).orElse(0.0D); |
| | | if (count < pakout.getAnfme()) { |
| | | throw new CoolException(pakout.getMaktx()+"缺货"); |
| | | } |
| | | Date now = new Date(); |
| | | // 查找推荐货位是否库存足够 |
| | | List<LocDetl> locDetls = locDetlService.findOfSort(pakout.getMatnr()); |
| | | double issued = Optional.ofNullable(pakout.getAnfme()).orElse(0.0D) ; |
| | | for (LocDetl locDetl1 : locDetls) { |
| | | if (issued > 0) { |
| | | // 保存出库通知单 |
| | | Pakout newPakout = new Pakout(); |
| | | newPakout.setWrkSts(3L); |
| | | newPakout.setAnfme(issued>=locDetl1.getAnfme()?locDetl1.getAnfme():issued); |
| | | newPakout.setZpallet(locDetl1.getZpallet()); |
| | | newPakout.setLocNo(locDetl1.getLocNo()); |
| | | newPakout.setNodeId(locDetl1.getNodeId()); |
| | | newPakout.setWrkNo(String.valueOf(snowflakeIdWorker.nextId())); |
| | | VersionUtils.setPakout(newPakout, locDetl1); |
| | | newPakout.setDocId(pakout.getDocId()); // 单据类型 |
| | | newPakout.setDocNum(pakout.getDocNum()); // 单据编号 |
| | | newPakout.setCreateTime(now); |
| | | newPakout.setUpdateTime(now); |
| | | newPakout.setStatus(1); |
| | | if (!pakoutService.insert(newPakout)) { |
| | | throw new CoolException("保存出库通知单失败"); |
| | | } |
| | | if (issued>=locDetl1.getAnfme()) { |
| | | // 删除库存明细 |
| | | if (!locDetlService.removeStock(locDetl1.getNodeId(), newPakout.getMatnr())) { |
| | | throw new CoolException("删除库存明细失败"); |
| | | } |
| | | } else { |
| | | // 修改库存明细数量 |
| | | if (!locDetlService.reduceStock(locDetl1.getNodeId(), newPakout.getMatnr(), issued)) { |
| | | throw new CoolException("修改库存明细数量失败"); |
| | | } |
| | | } |
| | | // 剩余待出数量递减 |
| | | issued = issued - locDetl1.getAnfme(); |
| | | } |
| | | } |
| | | |
| | | } |
| | | continue; |
| | | } |
| | | // 修改库存数量 |
| | | if (pakout.getAnfme()>=locDetl.getAnfme()) { |
| | | // 删除库存明细 |
| | | if (!locDetlService.removeStock(locDetl.getNodeId(), pakout.getMatnr())) { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 修改出库单状态 |
| | | if (!pakoutService.stockOutComplete(param.getWrkNo(), param.getNumber(), userId)) { |
| | | return R.error("保存数据失败"); |