futian.liu
2023-12-22 3e9a4b3480e6508f3c6f7ac8723509d8b1120d20
consum-base/src/main/java/com/consum/base/service/core/DepFormScrappedCoreService.java
File was renamed from consum-base/src/main/java/com/consum/base/core/DepFormScrappedCoreServiceImpl.java
@@ -1,9 +1,23 @@
package com.consum.base.core;
package com.consum.base.service.core;
import cn.hutool.core.convert.Convert;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import com.consum.base.core.WhBusinessEnum;
import com.consum.base.core.utils.IdUtil;
import com.consum.base.core.utils.LockManage;
import com.consum.base.service.GoodsBaseServiceImpl;
import com.consum.base.service.GoodsBaseService;
import com.consum.base.service.LWarehouseFlowService;
import com.consum.base.service.LWhGoodsRecordService;
import com.consum.base.service.LWhGoodsService;
@@ -14,19 +28,9 @@
import com.iplatform.model.po.S_user_core;
import com.walker.infrastructure.utils.CollectionUtils;
import com.walker.web.ResponseValue;
import java.util.Arrays;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import cn.hutool.core.convert.Convert;
import lombok.extern.slf4j.Slf4j;
/**
 * @ClassName DepFormScrappedCoreServiceImpl
@@ -38,9 +42,9 @@
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public class DepFormScrappedCoreServiceImpl {
public class DepFormScrappedCoreService {
    @Resource
    private GoodsBaseServiceImpl goodsBaseService;
    private GoodsBaseService goodsBaseService;
    @Resource
    private LWhGoodsService lWhGoodsService;
    @Resource
@@ -48,7 +52,7 @@
    @Resource
    private LWhGoodsRecordService lWhGoodsRecordServiceImpl;
    @Resource
    private LWarehouseFlowService lWarehouseFlowService;
    private LWarehouseFlowService lWarehouseFlowServiceImpl;
    /**
     * 根据报废单报废:修改调拨单中可退回数量;仓库中物品状态设置为报废;生成一个保费流水;更新报废型号表中,物品价值
@@ -70,9 +74,11 @@
        String nickName = currentUser.getNick_name();
        // 根据报废单 查询需要报废的型号数量
        List<Map<String, Object>> bfModelList = goodsBaseService.select("SELECT scrGoods.TRANS_BUSINESS_ID,scrGoods.BUSINESS_FORM_CODE,scrGoods.TRANS_OUT_WAREHOUSE_TYPE,scrGoods.TRANS_OUT_WAREHOUSE_ID,scrGoods.BASE_GOODS_TEMPLATE_ID, scrGoods.BASE_GOODS_TEMPLATE_NAME,goodsModel.id formScrappedModelId,goodsModel.BASE_GOODS_TEMPLATE_ID,goodsModel.BASE_GOODS_MODELS_ID,goodsModel.COUNTS,goodsModel.PROCURE_MODEL_USER_ID,goodsModel.GOODS_USER_NAME,goodsModel.BASE_GOODS_MODELS_NAME FROM DEP_FORM_SCRAPPED_GOODS scrGoods LEFT JOIN DEP_FORM_SCRAPPED_MODEL goodsModel ON scrgoods.id=goodsModel.DEP_FORM_SCRAPPED_GOODS_ID where scrGoods.DEP_FORM_SCRAPPED_ID = ?", new Object[]{lWhFormScrappedId});
        Map<Object, List<Map<String, Object>>> groupByModelIdMap = bfModelList.stream()
                .collect(Collectors.groupingBy(map -> map.get("BASE_GOODS_MODELS_ID")));
        List<Map<String, Object>> bfModelList = goodsBaseService.select(
            "SELECT scrGoods.TRANS_BUSINESS_ID,scrGoods.BUSINESS_FORM_CODE,scrGoods.TRANS_OUT_WAREHOUSE_TYPE,scrGoods.TRANS_OUT_WAREHOUSE_ID,scrGoods.BASE_GOODS_TEMPLATE_ID, scrGoods.BASE_GOODS_TEMPLATE_NAME,goodsModel.id formScrappedModelId,goodsModel.BASE_GOODS_TEMPLATE_ID,goodsModel.BASE_GOODS_MODELS_ID,goodsModel.COUNTS,goodsModel.PROCURE_MODEL_USER_ID,goodsModel.GOODS_USER_NAME,goodsModel.BASE_GOODS_MODELS_NAME FROM DEP_FORM_SCRAPPED_GOODS scrGoods LEFT JOIN DEP_FORM_SCRAPPED_MODEL goodsModel ON scrgoods.id=goodsModel.DEP_FORM_SCRAPPED_GOODS_ID where scrGoods.DEP_FORM_SCRAPPED_ID = ?",
            new Object[] {lWhFormScrappedId});
        Map<Object, List<Map<String, Object>>> groupByModelIdMap =
            bfModelList.stream().collect(Collectors.groupingBy(map -> map.get("BASE_GOODS_MODELS_ID")));
        Integer warehouseType = depFormScrapped.getOutWarehouseType();
        Long warehouseId = depFormScrapped.getOutWarehouseId();
        String warehouseName = depFormScrapped.getOutWarehouseName();
@@ -120,7 +126,8 @@
            int goodsModelNum = 0;
            synchronized (warehouseModelLockObj) {
                List<Long> warehouseIds = new ArrayList<>(Arrays.asList(warehouseId));
                goodsModelNum = lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseIds, baseGoodsModelsId, 2, null);
                goodsModelNum =
                    lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseIds, baseGoodsModelsId, 2, null);
                for (Map<String, Object> depFormScrappedModel : eachFfModelList) {
                    // 调拨单信息
                    Long transBusinessId = (Long) depFormScrappedModel.get("TRANS_BUSINESS_ID");
@@ -131,7 +138,8 @@
                    modelTotalNum += counts;
                    // 根据分发单、型号、使用人信息查询物品信息
                    List<Map<String, Object>> scrappedGoodsList = lWhGoodsService.queryScrappedGoods(warehouseType, warehouseId, transBusinessId, nowUserName, baseGoodsModelsId, (short) 2, counts);
                    List<Map<String, Object>> scrappedGoodsList = lWhGoodsService.queryScrappedGoods(warehouseType,
                        warehouseId, transBusinessId, nowUserName, baseGoodsModelsId, (short)2, counts);
                    if (CollectionUtils.isEmpty(scrappedGoodsList) || scrappedGoodsList.size() < counts) {
                        log.error("要报废的物品数量不足!");
                        // 手动回滚
@@ -139,16 +147,19 @@
                        throw new RuntimeException("报废失败!型号数量不足");
                    }
                    Long formScrappedModelPrice = scrappedGoodsList.stream().mapToLong(map -> (long) map.get("price")).sum();
                    Long formScrappedModelPrice =
                        scrappedGoodsList.stream().mapToLong(map -> (long)map.get("price")).sum();
                    modelTotalPrice += formScrappedModelPrice;
                    // 更新 报废单物品【DEP_FORM_SCRAPPED_MODEL】中 价格
                    modelTotalPriceMap.put(formScrappedModelId, formScrappedModelPrice);
                    //采购、调拨、出库等的物品型号【L_WH_PROCURE_MODEL】中 在用数量
                    Integer procureModelNum = Convert.toInt(procureModelMap.get(transBusinessId + "_" + baseGoodsModelsId), 0);
                    Integer procureModelNum =
                        Convert.toInt(procureModelMap.get(transBusinessId + "_" + baseGoodsModelsId), 0);
                    procureModelMap.put(transBusinessId + "_" + baseGoodsModelsId, counts + procureModelNum);
                    // 汇总出需要修改状态的物品id
                    List<Long> srappedGoodsIds = scrappedGoodsList.stream().map(map -> (Long) map.get("id")).collect(Collectors.toList());
                    List<Long> srappedGoodsIds =
                        scrappedGoodsList.stream().map(map -> (Long)map.get("id")).collect(Collectors.toList());
                    // 设置物品为报废状态
                    lWhGoodsService.modGoodsTransfering(srappedGoodsIds, null, null, null, 3);
@@ -178,7 +189,7 @@
        warehouseFlow.setOperatorName(nickName);
        warehouseFlow.setDealTime(dealTime);
        // 插入流水总表
        int flowInsertFlag = lWarehouseFlowService.insert(warehouseFlow);
        int flowInsertFlag = lWarehouseFlowServiceImpl.insert(warehouseFlow);
        if (flowInsertFlag == 0) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return null;
@@ -215,7 +226,8 @@
            }
            Integer counts = Convert.toInt(itemMap.get("COUNTS"));
//            StringBuilder sb = new StringBuilder("update L_WH_PROCURE_MODEL_USER set USE_COUNT=USE_COUNT-").append(counts);
            // StringBuilder sb = new StringBuilder("update L_WH_PROCURE_MODEL_USER set
            // USE_COUNT=USE_COUNT-").append(counts);
//            sb.append(" where id=").append(procureModelUserId);
//            sb.append(" and USE_COUNT-").append(counts).append(" >=0");
//            goodsBaseService.update(sb.toString());
@@ -227,9 +239,10 @@
            procureModelUserIdList.add(one);
        }
        if (!CollectionUtils.isEmpty(procureModelUserIdList)) {
            goodsBaseService.execBatchUpdate("update L_WH_PROCURE_MODEL_USER set USE_COUNT=USE_COUNT- ?  where id= ? and USE_COUNT- ? >=0", procureModelUserIdList);
            goodsBaseService.execBatchUpdate(
                "update L_WH_PROCURE_MODEL_USER set USE_COUNT=USE_COUNT- ?  where id= ? and USE_COUNT- ? >=0",
                procureModelUserIdList);
        }
        //采购、调拨、出库等的物品型号【L_WH_PROCURE_MODEL】中 根据调拨单+型号 更新 在用数量
        List<Object[]> procureModelParameterList = new ArrayList<>();
@@ -252,9 +265,11 @@
            sb.append(modelUseingNum).append(" >=0");
            goodsBaseService.update(sb.toString());
        }
//        goodsBaseService.execBatchUpdate("update L_WH_PROCURE_MODEL set USE_COUNT=USE_COUNT-? where BUSINESS_TYPE=4 and BUSINESS_ID=? and BASE_GOODS_MODELS_ID=? and USE_COUNT=USE_COUNT-? >0", procureModelParameterList);
        // goodsBaseService.execBatchUpdate("update L_WH_PROCURE_MODEL set USE_COUNT=USE_COUNT-? where BUSINESS_TYPE=4
        // and BUSINESS_ID=? and BASE_GOODS_MODELS_ID=? and USE_COUNT=USE_COUNT-? >0", procureModelParameterList);
        //当库存变动时调用该方法
        //lWhWarningCoreService.updateKuCun(Convert.toShort(warehouseType,(short) 0), warehouseId, allChangModelList, null, dealTime);
        // lWhWarningCoreService.updateKuCun(Convert.toShort(warehouseType,(short) 0), warehouseId, allChangModelList,
        // null, dealTime);
        return null;
    }
}