futian.liu
2023-12-05 87ff2a60723119530d071f6ed6b16fc2f3f023ca
consum-base/src/main/java/com/consum/base/service/impl/LWhFormScrappedCoreService.java
File was renamed from consum-base/src/main/java/com/consum/base/service/LWhFormScrappedCoreService.java
@@ -1,4 +1,4 @@
package com.consum.base.service;
package com.consum.base.service.impl;
import java.util.ArrayList;
import java.util.List;
@@ -15,6 +15,12 @@
import com.consum.base.core.service.LWhWarningCoreServiceImpl;
import com.consum.base.core.utils.IdUtil;
import com.consum.base.core.utils.LockManage;
import com.consum.base.service.BaseGoodsTemplateService;
import com.consum.base.service.GoodsBaseServiceImpl;
import com.consum.base.service.LWarehouseFlowService;
import com.consum.base.service.LWhFormScrappedGoodsService;
import com.consum.base.service.LWhGoodsRecordService;
import com.consum.base.service.LWhGoodsService;
import com.consum.model.po.LWarehouseFlow;
import com.consum.model.po.LWhFormScrapped;
import com.consum.model.po.LWhFormScrappedGoods;
@@ -47,14 +53,11 @@
    @Autowired
    public LWhFormScrappedCoreService(GoodsBaseServiceImpl goodsBaseService,
                                      LWhFormScrappedGoodsService lWhFormScrappedGoodsService,
                                      BaseGoodsTemplateService baseGoodsTemplateService,
                                      LWhGoodsService lWhGoodsService,
                                      LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService,
                                      LWhGoodsRecordService lWhGoodsRecordServiceImpl,
                                      LWarehouseFlowService lWarehouseFlowService,
                                      LWhWarningCoreServiceImpl lWhWarningCoreService) {
//        this.lWhFormScrappedService = lWhFormScrappedService;
        LWhFormScrappedGoodsService lWhFormScrappedGoodsService, BaseGoodsTemplateService baseGoodsTemplateService,
        LWhGoodsService lWhGoodsService, LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService,
        LWhGoodsRecordService lWhGoodsRecordServiceImpl, LWarehouseFlowService lWarehouseFlowService,
        LWhWarningCoreServiceImpl lWhWarningCoreService) {
        // this.lWhFormScrappedService = lWhFormScrappedService;
        this.lWhFormScrappedGoodsService = lWhFormScrappedGoodsService;
        this.baseGoodsTemplateService = baseGoodsTemplateService;
        this.lWhGoodsService = lWhGoodsService;
@@ -64,7 +67,6 @@
        this.goodsBaseService = goodsBaseService;
        this.lWhWarningCoreService = lWhWarningCoreService;
    }
    /**
     * 根据 报废单【L_WH_FORM_SCRAPPED】 报废物品
@@ -93,7 +95,7 @@
        // 流水记录总表ID
        long lWarehouseFlowId = IdUtil.generateId();
        //要报废的物品
        // 要报废的物品
        LWhFormScrappedGoods goods = new LWhFormScrappedGoods();
        goods.setFormScrappedId(formScrappedId);
        List<LWhFormScrappedGoods> formScrappedGoods = lWhFormScrappedGoodsService.select(goods);
@@ -105,21 +107,21 @@
        // 按型号分组
        ArrayList<Long> allChangModelList = new ArrayList<>();
        Map<Long, List<LWhFormScrappedGoods>> modelGroup = formScrappedGoods.stream()
                .collect(Collectors.groupingBy(LWhFormScrappedGoods::getBaseGoodsModelsId));
        Map<Long, List<LWhFormScrappedGoods>> modelGroup =
            formScrappedGoods.stream().collect(Collectors.groupingBy(LWhFormScrappedGoods::getBaseGoodsModelsId));
        for (Map.Entry<Long, List<LWhFormScrappedGoods>> entry : modelGroup.entrySet()) {
            //规格型号编号
            // 规格型号编号
            Long baseGoodsModelsId = entry.getKey();
            allChangModelList.add(baseGoodsModelsId);
            //对每组中要报废的数量求和
            // 对每组中要报废的数量求和
            List<LWhFormScrappedGoods> modelGoodsList = entry.getValue();
            //查询型号信息
            // 查询型号信息
            Map<String, Object> tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId);
            //要报废的总数量
            // 要报废的总数量
            int modelTotalNum = modelGoodsList.stream().mapToInt(LWhFormScrappedGoods::getCounts).sum();
            Long tempGoodsId = (Long) tempGoodsInfo.get("goodsid");
            String goodsName = (String) tempGoodsInfo.get("goodsname");
            String modelName = (String) tempGoodsInfo.get("modelname");
            Long tempGoodsId = (Long)tempGoodsInfo.get("goodsid");
            String goodsName = (String)tempGoodsInfo.get("goodsname");
            String modelName = (String)tempGoodsInfo.get("modelname");
            // 插入 各规格物品的进出库记录 L_WH_GOODS_RECORD
            long whGoodsRecordId = IdUtil.generateId();
            LWhGoodsRecord whGoodsRecord = new LWhGoodsRecord();
@@ -132,36 +134,43 @@
            whGoodsRecord.setBaseGoodsModelsId(baseGoodsModelsId);
            whGoodsRecord.setBaseGoodsModelsName(modelName);
            whGoodsRecord.setDealTime(dealTime);
            //本次调整类型 1=调增;2=调减
            // 本次调整类型 1=调增;2=调减
            whGoodsRecord.setThisType(2);
            whGoodsRecord.setThisCount(modelTotalNum);
            //通过LockManage获得锁
            // 通过LockManage获得锁
            Object warehouseModelLockObj = LockManage.acquireLock(warehouseType, warehouseId, baseGoodsModelsId);
            synchronized (warehouseModelLockObj) {
                for (LWhFormScrappedGoods formScrappedGood : modelGoodsList) {
                    //报废数量
                    // 报废数量
                    Integer counts = formScrappedGood.getCounts();
                    //报废单编号
                    // 报废单编号
                    Long transBusinessId = formScrappedGood.getTransBusinessId();
                    int goodsModelNum = 0;
                    List<Long> srappedGoodsIds = null;
                    if (warehouseType == null || warehouseType == 0) {
                        srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(warehouseType, warehouseId, null, null, baseGoodsModelsId, (short) 1, counts);
                        srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(warehouseType, warehouseId, null, null,
                            baseGoodsModelsId, (short)1, counts);
                    } else {
                        //使用人员名称
                        // 使用人员名称
                        String userName = formScrappedGood.getUserName();
                        // 根据分发单、规格型号编号、使用人员名称,进行报废
                        srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(warehouseType, warehouseId, transBusinessId, userName, baseGoodsModelsId,
                                (short) 2, counts);
                        srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(warehouseType, warehouseId,
                            transBusinessId, userName, baseGoodsModelsId, (short)2, counts);
                    }
                    if (CollectionUtils.isEmpty(srappedGoodsIds) || srappedGoodsIds.size() < counts) {
                        log.error("要报废的物品数量不足!");
                        // 手动回滚
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        throw new RuntimeException("报废失败!型号数量不足");
                    }
                    // 通过物品id查询所有商品的总金额
                    long amount = lWhGoodsService.queryGoodsPriceById(srappedGoodsIds);
                    LWhFormScrappedGoods lWhFormScrappedGoods = new LWhFormScrappedGoods(formScrappedGood.getId());
                    lWhFormScrappedGoods.setTotalAmount((int)amount);
                    lWhFormScrappedGoodsService.update(lWhFormScrappedGoods);
                    whGoodsRecord.setInitialCount(goodsModelNum);
                    whGoodsRecord.setEndCount(goodsModelNum - counts);
@@ -169,7 +178,7 @@
                    // 设置物品为报废状态
                    lWhGoodsService.modGoodsTransfering(srappedGoodsIds, null, null, null, 3);
                    // 批量插入 进出库流水明细[L_WH_GOODS_RECORD_DETAILS]
                    lWhGoodsRecordDetailsService.sameGoodsInsertMore(srappedGoodsIds, whGoodsRecordId, (short) 2);
                    lWhGoodsRecordDetailsService.sameGoodsInsertMore(srappedGoodsIds, whGoodsRecordId, (short)2);
                }
                lWhGoodsRecordServiceImpl.insert(whGoodsRecord);
            }
@@ -201,8 +210,9 @@
        lWhFormScrapped.setDealTime(dealTime);
        goodsBaseService.update(lWhFormScrapped);
        //当库存变动时调用该方法
        lWhWarningCoreService.updateKuCun(Convert.toShort(warehouseType,(short) 0), warehouseId, allChangModelList, null, dealTime);
        // 当库存变动时调用该方法
        lWhWarningCoreService.updateKuCun(Convert.toShort(warehouseType, (short)0), warehouseId, allChangModelList,
            null, dealTime);
        return lWarehouseFlowId;
    }