车间能级提升-智能设备管理系统
baoshiwei
2025-06-09 df64c34d92cbe8501bbbfe837bc491a47452c0b6
eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java
@@ -136,58 +136,61 @@
        if (flag) {
            bo.setId(add.getId());
        }
        //入库+库存  出库-库存  (默认入库)
        int  OperationType;
         //出库
         if(bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK)){
            OperationType =  -1;
        } else {
             OperationType = 1;
         }
        // 入库+库存  出库-库存  (默认入库)
        int OperationType = bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK) ? -1 : 1;
        List<EimsSpareBo> spareList = Optional.ofNullable(bo.getSpareList()).orElse(new ArrayList<>());
        // 插入出库明细
        List<EimsSpareInoutdt> dtList = spareList.stream()
            .map(eimsSpareBo -> {
                EimsSpareInoutdt dt = new EimsSpareInoutdt();
                dt.setInoutId(add.getId());
                dt.setSpareId(eimsSpareBo.getId());
                dt.setBeforeStock(eimsSpareBo.getActualStock());
                // 注意入库出库
                dt.setActualStock(eimsSpareBo.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
                dt.setQuantity(eimsSpareBo.getQuantity());
                // 设置单价和金额
                Optional.ofNullable(eimsSpareBo.getReferPrice()).ifPresent(referPrice -> {
                    dt.setUnitPrice(referPrice);
                    dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity())));
                });
        // 合并两次循环为一次循环
        List<EimsSpareInoutdt> dtList = new ArrayList<>();
        List<EimsSpare> updateSpareList = new ArrayList<>();
                return dt;
            })
            .toList();
        for (EimsSpareBo eimsSpareBo : spareList) {
            EimsSpare spare = spareMapper.selectById(eimsSpareBo.getId());
            if (spare == null) {
                spare = new EimsSpare();
                spare.setName(eimsSpareBo.getName());
                spare.setCode(eimsSpareBo.getCode());
                spare.setActualStock(100L);
                spareMapper.insert(spare);
                eimsSpareBo.setId(spare.getId());
            }
            // 插入出库明细
            EimsSpareInoutdt dt = new EimsSpareInoutdt();
            dt.setInoutId(add.getId());
            dt.setSpareId(spare.getId());
            dt.setBeforeStock(spare.getActualStock());
            dt.setActualStock(spare.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
            dt.setQuantity(eimsSpareBo.getQuantity());
            // 设置单价和金额
            Optional.ofNullable(spare.getReferPrice()).ifPresent(referPrice -> {
                dt.setUnitPrice(referPrice);
                dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity())));
            });
            dtList.add(dt);
            // 更新备件库存
            EimsSpare updatedSpare = new EimsSpare();
            updatedSpare.setId(spare.getId());
            updatedSpare.setActualStock(spare.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
            Optional.ofNullable(spare.getReferPrice()).ifPresent(referPrice -> {
                updatedSpare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(updatedSpare.getActualStock())));
            });
            updateSpareList.add(updatedSpare);
        }
        // 批量插入数据
        if (!dtList.isEmpty()) {
            inoutdtMapper.insertBatch(dtList);
        }
        // 更新备件的库存
        List<EimsSpare> updateSpareList = spareList.stream().map(spareBo -> {
            EimsSpare spare = new EimsSpare();
            spare.setId(spareBo.getId());
            spare.setActualStock(spareBo.getActualStock() + (spareBo.getQuantity() * OperationType));
            // 设置单价和金额
            Optional.ofNullable(spareBo.getReferPrice()).ifPresent(referPrice -> {
                spare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(spare.getActualStock())));
            });
            return spare;
        }).toList();
        // 批量更新备件库存
        if (!updateSpareList.isEmpty()) {
            spareMapper.updateBatchById(updateSpareList);
        }
        return flag;
    }