cy
2023-11-22 a7a6b5d7ed7b6e5b96866b24fd1cb7ba3dcc19d1
consum-base/src/main/java/com/consum/base/service/LWhFormInventoryCoreService.java
@@ -3,11 +3,22 @@
import com.consum.base.core.CodeGeneratorEnum;
import com.consum.base.core.CodeGeneratorService;
import com.consum.base.core.WhBusinessEnum;
import com.consum.base.core.param.BaseWarehouseParam1;
import com.consum.base.util.IdUtil;
import com.consum.model.po.*;
import com.consum.base.core.utils.IdUtil;
import com.consum.model.po.BaseWarehouse;
import com.consum.model.po.FinSysTenantUser;
import com.consum.model.po.LWhFormInventory;
import com.consum.model.po.LWhFormInventoryGoods;
import com.consum.model.po.LWhFormOutput;
import com.consum.model.po.LWhFormProcure;
import com.consum.model.po.LWhFormProcureGoods;
import com.consum.model.po.LWhProcureModel;
import com.iplatform.model.po.S_user_core;
import com.walker.infrastructure.utils.NumberGenerator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -15,15 +26,8 @@
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @ClassName LWhFormInventoryCoreService
 * @Author cy
 * @Date 2023/11/1
 * @Description
 * @Version 1.0
@@ -31,6 +35,7 @@
@Slf4j
@Service
public class LWhFormInventoryCoreService {
    private LWhFormInventoryGoodsServiceImpl lWhFormInventoryGoods;
    private LWhFormOutputCoreService lWhFormOutputCoreService;
    private CodeGeneratorService codeGeneratorService;
@@ -46,17 +51,17 @@
    @Autowired
    public LWhFormInventoryCoreService(LWhFormInventoryGoodsServiceImpl lWhFormInventoryGoods,
                                       LWhFormOutputCoreService lWhFormOutputCoreService,
                                       CodeGeneratorService codeGeneratorService,
                                       LWhFormProcureService lWhFormProcureService,
                                       BaseWarehouseServiceImpl baseWarehouseService,
                                       LWhFormProcureGoodsService lWhFormProcureGoodsService,
                                       LWhProcureModelService lWhProcureModelService,
                                       BaseGoodsTemplateServiceImpl baseGoodsTemplateService,
                                       LWhGoodsService lWhGoodsService,
                                       LWhFormInventoryServiceImpl lWhFormInventoryService,
                                       LWhFormProcureCoreService lWhFormProcureCoreService,
                                       LWhFormOutputServiceImpl lWhFormOutputService
        LWhFormOutputCoreService lWhFormOutputCoreService,
        CodeGeneratorService codeGeneratorService,
        LWhFormProcureService lWhFormProcureService,
        BaseWarehouseServiceImpl baseWarehouseService,
        LWhFormProcureGoodsService lWhFormProcureGoodsService,
        LWhProcureModelService lWhProcureModelService,
        BaseGoodsTemplateServiceImpl baseGoodsTemplateService,
        LWhGoodsService lWhGoodsService,
        LWhFormInventoryServiceImpl lWhFormInventoryService,
        LWhFormProcureCoreService lWhFormProcureCoreService,
        LWhFormOutputServiceImpl lWhFormOutputService
    ) {
        this.lWhFormInventoryGoods = lWhFormInventoryGoods;
@@ -74,32 +79,41 @@
    }
    /**
     * 根据 盘点单 生成 出库单 和 入库单
     * 盘点单中 盘盈物品生成入库单,盘亏生成出库单
     * 根据 盘点单 生成 出库单 和 入库单 盘点单中 盘盈物品生成入库单,盘亏生成出库单
     *
     * @param whformInventoryId 盘点单id
     * @return status true/false
     * errMsg 错误消息
     * @return status true/false errMsg 错误消息
     */
    @Transactional(rollbackFor = Exception.class)
    public Map<String, Object> createInOutFormByInventoryId(Long whformInventoryId, S_user_core currentUser, FinSysTenantUser sysInfo) {
        HashMap<String, Object> rtnMap = new HashMap<>();
    public String createInOutFormByInventoryId(Long whformInventoryId, S_user_core currentUser, FinSysTenantUser sysInfo) {
        LWhFormInventory lWhFormInventory = lWhFormInventoryService.get(new LWhFormInventory(whformInventoryId));
        if (lWhFormInventory == null) {
//            rtnMap.put("status", false);
//            rtnMap.put("errMsg", "没有找到盘点单");
            return "没有找到盘点单";
        }
        if (lWhFormInventory.getStates() != 1) {
//            rtnMap.put("status", false);
//            rtnMap.put("errMsg", "请检查盘点单状态");
            return "请检查盘点单状态";
        }
        List<LWhFormInventoryGoods> lWhFormInventoryGoods = this.lWhFormInventoryGoods.getByInventoryId(whformInventoryId);
        if (CollectionUtils.isEmpty(lWhFormInventoryGoods)) {
            rtnMap.put("status", false);
            rtnMap.put("errMsg", "没有找到物品");
            return rtnMap;
//            rtnMap.put("status", false);
//            rtnMap.put("errMsg", "没有找到盘点单结果物品");
            return "没有找到盘点单结果物品";
        }
        Map<Integer, List<LWhFormInventoryGoods>> inventoryGoodsMap = lWhFormInventoryGoods.stream()
                .filter(goods -> goods.getInventoryResult() == 2 || goods.getInventoryResult() == 3)
                .collect(Collectors.groupingBy(LWhFormInventoryGoods::getInventoryResult));
            .filter(goods -> goods.getInventoryResult() == 2 || goods.getInventoryResult() == 3)
            .collect(Collectors.groupingBy(LWhFormInventoryGoods::getInventoryResult));
        if (CollectionUtils.isEmpty(lWhFormInventoryGoods)) {
            rtnMap.put("status", true);
            return rtnMap;
//            rtnMap.put("status", true);
            return null;
        }
        LWhFormInventory lWhFormInventory = lWhFormInventoryService.get(new LWhFormInventory(whformInventoryId));
        Long warehouseId = lWhFormInventory.getWarehouseId();
        Long stopTime = lWhFormInventory.getStopTime();
        Map<String, Object> inOutMap = new HashMap<>();
        for (Map.Entry<Integer, List<LWhFormInventoryGoods>> entry : inventoryGoodsMap.entrySet()) {
            //盘点结果(1=正常;2=盘盈;3=盘亏)
@@ -108,50 +122,61 @@
            if (inventoryResult == 2) {
                // 创建入库单并入库
                // 返回入库单号
                Long inFormByInventoryId = createInFormByInventoryId(warehouseId, stopTime, inventoryGoods, currentUser);
                if (inFormByInventoryId == null) {
                Map<String, Object> rkMap = createInFormByInventoryId(warehouseId, stopTime, inventoryGoods, currentUser);
                if (rkMap == null) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                    throw new RuntimeException("创建入库单失败");
                    log.error("创建入库单失败");
                    rtnMap.put("status", false);
                    rtnMap.put("errMsg", "创建入库单失败");
                    return rtnMap;
//                    rtnMap.put("status", false);
//                    rtnMap.put("errMsg", "创建入库单失败");
                    return "创建入库单失败";
                }
                String errMsg = lWhFormProcureCoreService.doProcure(warehouseId, currentUser);
                Long inFormByInventoryId = (Long) inOutMap.get("inId");
                inOutMap.putAll(rkMap);
                String errMsg = lWhFormProcureCoreService.doProcure(inFormByInventoryId, currentUser);
                if (errMsg != null) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                    throw new RuntimeException(errMsg);
                    log.error("创建入库单失败");
                    rtnMap.put("status", false);
                    rtnMap.put("errMsg", "创建入库单失败");
                    return rtnMap;
//                    rtnMap.put("status", false);
//                    rtnMap.put("errMsg", "创建入库单失败");
                    return "创建入库单失败";
                }
            } else {
                // 创建出库单并出库
                Long lWhFormOutputId = this.createOutFormByInventoryId(warehouseId, stopTime, inventoryGoods, currentUser, sysInfo);
                if (lWhFormOutputId == null) {
                Map<String, Object> ckMap = createOutFormByInventoryId(warehouseId, stopTime, inventoryGoods, currentUser, sysInfo);
                if (ckMap == null) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                    throw new RuntimeException("创建出库单失败");
                    log.error("创建入库单失败");
                    rtnMap.put("status", false);
                    rtnMap.put("errMsg", "创建入库单失败");
                    return rtnMap;
//                    rtnMap.put("status", false);
//                    rtnMap.put("errMsg", "创建入库单失败");
                    return "创建入库单失败";
                }
                inOutMap.putAll(ckMap);
                Long lWhFormOutputId = (Long) inOutMap.get("outId");
                //2.根据出库单出库
                Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(lWhFormOutputId, currentUser, stopTime);
                Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(lWhFormOutputId, WhBusinessEnum.CAIGOU, currentUser, stopTime);
                if (lWarehouseFlowId == null) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                    throw new RuntimeException("创建出库单失败");
                    log.error("创建入库单失败");
                    rtnMap.put("status", false);
                    rtnMap.put("errMsg", "创建入库单失败");
                    return rtnMap;
//                    rtnMap.put("status", false);
//                    rtnMap.put("errMsg", "创建入库单失败");
                    return "创建入库单失败";
                }
            }
        }
        //
        lWhFormInventory = new LWhFormInventory(whformInventoryId);
        lWhFormInventory.setStates(2);
        lWhFormInventory.setInWarehouseFormId((Long) inOutMap.get("inId"));
        lWhFormInventory.setInBusinessFormCode((String) inOutMap.get("inCode"));
        lWhFormInventory.setOutWarehouseFormId((Long) inOutMap.get("outId"));
        lWhFormInventory.setOutBusinessFormCode((String) inOutMap.get("outCode"));
        lWhFormInventoryService.update(lWhFormInventory);
        return rtnMap;
        return null;
    }
    /**
@@ -161,8 +186,8 @@
     * @param procureTime 采购时间
     * @param currentUser
     */
    private Long createInFormByInventoryId(Long warehouseId, Long procureTime, List<LWhFormInventoryGoods> inventoryGoodsList,
                                           S_user_core currentUser) {
    private Map<String, Object> createInFormByInventoryId(Long warehouseId, Long procureTime, List<LWhFormInventoryGoods> inventoryGoodsList,
        S_user_core currentUser) {
        if (CollectionUtils.isEmpty(inventoryGoodsList)) {
            return null;
        }
@@ -170,7 +195,8 @@
        BaseWarehouse baseWarehouse = baseWarehouseService.getById(warehouseId);
        LWhFormProcure lWhFormProcure = new LWhFormProcure();
        lWhFormProcure.setId(whFormProcureId);
        lWhFormProcure.setBusinessFormCode(codeGeneratorService.createCodeByPrefix(CodeGeneratorEnum.Procure_Warehouse.getValue(), 10));
        String inCode = codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Procure_Warehouse);
        lWhFormProcure.setBusinessFormCode(inCode);
        lWhFormProcure.setWarehouseId(warehouseId);
        lWhFormProcure.setWarehouseName(baseWarehouse.getWarehouseName());
        lWhFormProcure.setBuyerId(currentUser.getId());
@@ -182,7 +208,9 @@
        lWhFormProcure.setAgencyId(baseWarehouse.getAgencyId());
        lWhFormProcure.setAgencyName(baseWarehouse.getAgencyName());
        int result = lWhFormProcureService.insert(lWhFormProcure);
        if (result == 0) return null;
        if (result == 0) {
            return null;
        }
        ArrayList<LWhFormProcureGoods> procureGoodList = new ArrayList<>();
        ArrayList<LWhProcureModel> whProcureModeLlist = new ArrayList<>();
@@ -209,7 +237,7 @@
                continue;
            }
            // 查询型号库存
            int goodsModelNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, (short) 1, null);
            int goodsModelNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, 1, null);
            LWhProcureModel model = new LWhProcureModel();
            model.setId(NumberGenerator.getLongSequenceNumber());
            model.setFromProcureGoodsId(fromProcureGoodsId);
@@ -225,7 +253,11 @@
        }
        lWhFormProcureGoodsService.insertBatch(procureGoodList);
        lWhProcureModelService.insertBatch(whProcureModeLlist);
        return whFormProcureId;
        HashMap<String, Object> rtnMap = new HashMap<>();
        rtnMap.put("inId", whFormProcureId);
        rtnMap.put("inCode", inCode);
        return rtnMap;
    }
    /**
@@ -235,8 +267,8 @@
     * @param procureTime 出库时间
     * @param currentUser
     */
    private Long createOutFormByInventoryId(Long warehouseId, Long procureTime, List<LWhFormInventoryGoods> inventoryGoodsList,
                                            S_user_core currentUser, FinSysTenantUser sysInfo) {
    private Map<String, Object> createOutFormByInventoryId(Long warehouseId, Long procureTime, List<LWhFormInventoryGoods> inventoryGoodsList,
        S_user_core currentUser, FinSysTenantUser sysInfo) {
        if (CollectionUtils.isEmpty(inventoryGoodsList)) {
            return null;
        }
@@ -253,10 +285,13 @@
            return null;
        }
        lWhFormOutput.setWarehouseName(warehouse.getWarehouseName());
        lWhFormOutput.setOutputCode(BaseWarehouseParam1.In_OutPutTypeEnum.Inventory_Output.getValue() + "");
        String outCode = codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.OutPut_Warehouse);
        lWhFormOutput.setOutputCode(outCode);
        lWhFormOutput.setOutputName("盘点出库");
        lWhFormOutput.setAgencyId(Long.valueOf(sysInfo.getTenantId()));
        lWhFormOutput.setAgencyName(sysInfo.getTenantName());
//        lWhFormOutput.setAgencyId(Long.valueOf(sysInfo.getTenantId()));
        lWhFormOutput.setAgencyId(null);
//        lWhFormOutput.setAgencyName(sysInfo.getTenantName());
        lWhFormOutput.setAgencyName(null);
        lWhFormOutput.setOperatorId(sysInfo.getId());
        lWhFormOutput.setOperatorName(sysInfo.getUserName());
@@ -273,7 +308,7 @@
                continue;
            }
            //根据物品型号查询物品库存
            int goodsNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, (short) 1, null);
            int goodsNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, 1, null);
            //新增L_WH_PROCURE_MODEL记录
            LWhProcureModel lWhProcureModel = new LWhProcureModel();
            lWhProcureModel.setId(IdUtil.generateId());
@@ -283,9 +318,10 @@
            lWhProcureModel.setWorehouseCount(goodsNum);
            lWhProcureModelService.insert(lWhProcureModel);
        }
        return lWhFormOutputId;
        HashMap<String, Object> rtnMap = new HashMap<>();
        rtnMap.put("outId", lWhFormOutputId);
        rtnMap.put("outCode", outCode);
        return rtnMap;
    }
}