#
luxiaotao1123
2021-04-05 f66bda8f54d0ae0267a84128498f3f7b37fcb23f
src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
@@ -254,9 +254,59 @@
        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())) {
@@ -269,6 +319,7 @@
                }
            }
        }
        // 修改出库单状态
        if (!pakoutService.stockOutComplete(param.getWrkNo(), param.getNumber(), userId)) {
            return R.error("保存数据失败");