cy
2023-12-07 84060a9e25145f2677caeaece8b85196463d9a7b
consum-base/src/main/java/com/consum/base/service/impl/LWhFormTransferServiceImpl.java
@@ -1,20 +1,8 @@
package com.consum.base.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
import com.consum.base.core.CodeGeneratorEnum;
import com.consum.base.core.CodeGeneratorService;
import com.consum.base.core.type.CategoryType;
import com.consum.base.core.utils.CurrencyUtil;
import com.consum.base.core.utils.IdUtil;
import com.consum.base.core.utils.MapUtils;
@@ -22,33 +10,28 @@
import com.consum.base.pojo.LWhFormTransferGoodsInfoParam;
import com.consum.base.pojo.LWhProcureModelUserParam;
import com.consum.base.pojo.LWhTransferModelParam;
import com.consum.base.pojo.dto.GoodModelInfoDTO;
import com.consum.base.pojo.excel.TransferExcelTemplate;
import com.consum.base.pojo.query.TransferQry;
import com.consum.base.pojo.request.LWhFormTransferParam;
import com.consum.base.pojo.response.DepartGoodsUseInfo;
import com.consum.base.pojo.response.FormTransferGoodsVO;
import com.consum.base.pojo.response.GoodsModelVO;
import com.consum.base.pojo.response.GoodsTemplateInfoVO;
import com.consum.base.pojo.response.LWHFromTransferExtendVO;
import com.consum.base.service.BaseWarehouseManagerService;
import com.consum.base.service.BaseWarehouseService;
import com.consum.base.service.FinSysTenantServiceImpl;
import com.consum.base.service.LWhFormOutputServiceImpl;
import com.consum.base.service.LWhFormTransferService;
import com.consum.base.service.LWhGoodsService;
import com.consum.base.service.LWhProcureModelService;
import com.consum.base.service.LWhProcureModelUserRecordService;
import com.consum.base.service.LWhProcureModelUserServiceImpl;
import com.consum.model.po.BaseWarehouse;
import com.consum.model.po.BaseWarehouseManager;
import com.consum.model.po.FinSysTenant;
import com.consum.model.po.FinSysTenantUser;
import com.consum.model.po.LWhFormTransfer;
import com.consum.model.po.LWhProcureModel;
import com.consum.model.po.LWhProcureModelUser;
import com.consum.model.po.LWhProcureModelUserRecord;
import com.consum.base.service.*;
import com.consum.model.po.*;
import com.walker.db.page.GenericPager;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.jdbc.service.BaseServiceImpl;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Description 调拨管理
@@ -69,18 +52,16 @@
    @Autowired
    private LWhProcureModelService lWhProcureModelService;
    @Autowired
    private LWhFormOutputServiceImpl lWhFormOutputService;
    @Autowired
    private BaseGoodsModelsServiceImpl baseGoodsModelsService;
    @Autowired
    private LWhProcureModelUserServiceImpl lWhProcureModelUserService;
    private LWhProcureModelUserService lWhProcureModelUserService;
    @Autowired
    private LWhProcureModelUserRecordService lWhProcureModelUserRecordService;
    @Autowired
    private BaseWarehouseManagerService baseWarehouseManagerService;
    private static String QUERY_FORM_TRANSFER_LIST =
        "SELECT ft.* FROM l_wh_form_transfer ft " + "left join L_WH_PROCURE_MODEL pm on pm.BUSINESS_ID = ft.id "
    private static final String QUERY_FORM_TRANSFER_LIST =
        "SELECT DISTINCT ft.* FROM l_wh_form_transfer ft " + "left join L_WH_PROCURE_MODEL pm on pm.BUSINESS_ID = ft.id "
            + "LEFT JOIN BASE_GOODS_MODELS bgm ON pm.BASE_GOODS_MODELS_ID=bgm.ID "
            + "LEFT JOIN BASE_GOODS_TEMPLATE bgt ON bgm.GOODS_TEMPLATES_ID=bgt.id WHERE 1 = 1 ";
@@ -136,7 +117,7 @@
            Long id = sysInfo.getId();
            BaseWarehouseManager manager = new BaseWarehouseManager();
            manager.setManagerId(id);
            List<BaseWarehouseManager> managerList = baseWarehouseManagerService.selectAll(manager);
            List<BaseWarehouseManager> managerList = baseWarehouseManagerService.select(manager);
            if (CollectionUtils.isEmpty(managerList)) {
                log.error("该用户不是库管员");
                throw new Exception("该用户不是库管员");
@@ -198,7 +179,7 @@
                if (businessType == 0) {
                    lWhProcureModel.setBusinessType(2);
                    // 根据物品型号查询物品库存
                    int goodsNum = this.lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, 1, null);
                    int goodsNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, 1, null);
                    lWhProcureModel.setWorehouseCount(goodsNum);
                }
                if (businessType == 1) {
@@ -350,42 +331,50 @@
            result.setDepartmentName(lWhFormTransfer.getInWarehouseName());
        }
        String sql = "SELECT bgt.id, CATEGORY_ID, CATEGORY_NAME, GOODS_NAME,bgt.CLASSIFICATION type "
            + "FROM l_wh_procure_model pm LEFT JOIN base_goods_models bgm ON bgm.id = pm.BASE_GOODS_MODELS_ID "
            + "LEFT JOIN base_goods_template bgt ON bgt.id = bgm.GOODS_TEMPLATES_ID "
            + "WHERE pm.BUSINESS_ID =:id GROUP BY bgt.id ";
        List<GoodModelInfoDTO> goodsModelInfo =
            lWhProcureModelService.getGoodsModelListByBusinessId(result.getId(), null);
        if (CollectionUtils.isEmpty(goodsModelInfo)) {
            return result;
        }
        // 查询部门物品使用信息
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("id", result.getId());
        List<Map<String, Object>> procureModelList = lWhFormOutputService.select(sql, paramMap, new MapperUtil());
        String queryRecord =
            "SELECT * FROM l_wh_procure_model_user_record where TRANS_BUSINESS_ID = :id order by DEAL_TIME desc limit 1";
        LWhProcureModelUserRecord lWhProcureModelUserRecord =
            lWhProcureModelUserRecordService.get(queryRecord, paramMap, new LWhProcureModelUserRecord());
        List<FormTransferGoodsVO> formTransferGoods = Lists.newArrayList();
        for (Map<String, Object> map : procureModelList) {
            FormTransferGoodsVO procureTemplateInfoVO = MapUtils.convertMapToObj(map, FormTransferGoodsVO.class);
            Long baseGoodsTemplateId = procureTemplateInfoVO.getId();
            // 查询型号数量
            List<GoodsModelVO> goodsModelVOList = Lists.newArrayList();
            String sql2 = "SELECT pm.id,pm.BASE_GOODS_MODELS_NAME,bgm.UNIT,COUNTS,total_amount "
                + "FROM l_wh_procure_model pm LEFT JOIN base_goods_models bgm ON bgm.id = pm.BASE_GOODS_MODELS_ID "
                + "LEFT JOIN base_goods_template bgt ON bgt.id = bgm.GOODS_TEMPLATES_ID "
                + "WHERE pm.BUSINESS_ID =:id and bgt.id =:baseGoodsTemplateId";
            Map<String, Object> goodsModelParamMap = new HashMap<>();
            goodsModelParamMap.put("id", result.getId());
            goodsModelParamMap.put("baseGoodsTemplateId", baseGoodsTemplateId);
            List<Map<String, Object>> modelList =
                lWhFormOutputService.select(sql2, goodsModelParamMap, new MapperUtil());
            modelList.forEach(item -> {
                GoodsModelVO goodsModelVO = MapUtils.convertMapToObj(item, GoodsModelVO.class);
                Integer businessType = result.getBusinessType();
                String type = procureTemplateInfoVO.getType();
        Map<Long, List<GoodModelInfoDTO>> collect =
            goodsModelInfo.stream().filter(Objects::nonNull).filter(dto -> dto.getBaseGoodsTemplateId() != null)
                .collect(Collectors.groupingBy(GoodModelInfoDTO::getBaseGoodsTemplateId));
        List<GoodsTemplateInfoVO> goodsTemplateInfoList = Lists.newArrayList();
        for (Map.Entry<Long, List<GoodModelInfoDTO>> entry : collect.entrySet()) {
            List<GoodModelInfoDTO> value = entry.getValue();
            GoodModelInfoDTO goodModelInfoDTO = value.stream().findFirst().orElse(null);
            GoodsTemplateInfoVO goodsTemplateInfoVO = new GoodsTemplateInfoVO();
            if (goodModelInfoDTO != null) {
                goodsTemplateInfoVO.setId(goodModelInfoDTO.getId());
                goodsTemplateInfoVO.setCategoryName(goodModelInfoDTO.getCategoryName());
                goodsTemplateInfoVO.setGoodsName(goodModelInfoDTO.getBaseGoodsName());
                goodsTemplateInfoVO.setType(goodModelInfoDTO.getType());
            }
            List<GoodsModelVO> goodsModelList = Lists.newArrayList();
            for (GoodModelInfoDTO goodModelInfo : value) {
                GoodsModelVO goodsModelVO = new GoodsModelVO();
                goodsModelVO.setId(goodModelInfo.getId());
                goodsModelVO.setBaseGoodsModelsName(goodModelInfo.getBaseGoodsModelsName());
                goodsModelVO.setUnit(goodModelInfo.getUnit());
                goodsModelVO.setCounts(goodModelInfo.getCounts());
                goodsModelVO.setTotalAmount(CurrencyUtil.convertFenToYuan(goodModelInfo.getTotalAmount()));
                // 部门分发需要查询使用信息
                if (businessType == 1 && "A".equals(type)) {
                Integer businessType = result.getBusinessType();
                String type = goodsTemplateInfoVO.getType();
                if (businessType == 1 && CategoryType.TYPE_A.getValue().equals(type)) {
                    Long procureModelId = goodsModelVO.getId();
                    LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
                    lWhProcureModelUser.setWhProcureModelId(procureModelId);
                    lWhProcureModelUser.setProcureModelUserRecordId(lWhProcureModelUserRecord.getId());
                    List<LWhProcureModelUser> procureModelUserList =
                        this.lWhProcureModelUserService.select(lWhProcureModelUser);
@@ -403,14 +392,74 @@
                        });
                        goodsModelVO.setUseInfo(departGoodsUseInfoList);
                    }
                }
                goodsModelVOList.add(goodsModelVO);
                procureTemplateInfoVO.setModels(goodsModelVOList);
            });
            formTransferGoods.add(procureTemplateInfoVO);
                goodsModelList.add(goodsModelVO);
            }
            goodsTemplateInfoVO.setModels(goodsModelList);
            goodsTemplateInfoList.add(goodsTemplateInfoVO);
        }
        result.setFormTransferGoods(formTransferGoods);
        result.setFormTransferGoods(goodsTemplateInfoList);
        // String sql = "SELECT bgt.id, CATEGORY_ID, CATEGORY_NAME, GOODS_NAME,bgt.CLASSIFICATION type "
        // + "FROM l_wh_procure_model pm LEFT JOIN base_goods_models bgm ON bgm.id = pm.BASE_GOODS_MODELS_ID "
        // + "LEFT JOIN base_goods_template bgt ON bgt.id = bgm.GOODS_TEMPLATES_ID "
        // + "WHERE pm.BUSINESS_ID =:id GROUP BY bgt.id ";
        // Map<String, Object> paramMap = new HashMap<>();
        // paramMap.put("id", result.getId());
        // List<Map<String, Object>> procureModelList = this.select(sql, paramMap, new MapperUtil());
        //
        // String queryRecord =
        // "SELECT * FROM l_wh_procure_model_user_record where TRANS_BUSINESS_ID = :id order by DEAL_TIME desc limit 1";
        // LWhProcureModelUserRecord lWhProcureModelUserRecord =
        // lWhProcureModelUserRecordService.get(queryRecord, paramMap, new LWhProcureModelUserRecord());
        // List<FormTransferGoodsVO> formTransferGoods = Lists.newArrayList();
        // for (Map<String, Object> map : procureModelList) {
        // FormTransferGoodsVO procureTemplateInfoVO = MapUtils.convertMapToObj(map, FormTransferGoodsVO.class);
        // Long baseGoodsTemplateId = procureTemplateInfoVO.getId();
        // // 查询型号数量
        // List<GoodsModelVO> goodsModelVOList = Lists.newArrayList();
        // String sql2 = "SELECT pm.id,pm.BASE_GOODS_MODELS_NAME,bgm.UNIT,COUNTS,total_amount "
        // + "FROM l_wh_procure_model pm LEFT JOIN base_goods_models bgm ON bgm.id = pm.BASE_GOODS_MODELS_ID "
        // + "LEFT JOIN base_goods_template bgt ON bgt.id = bgm.GOODS_TEMPLATES_ID "
        // + "WHERE pm.BUSINESS_ID =:id and bgt.id =:baseGoodsTemplateId";
        // Map<String, Object> goodsModelParamMap = new HashMap<>();
        // goodsModelParamMap.put("id", result.getId());
        // goodsModelParamMap.put("baseGoodsTemplateId", baseGoodsTemplateId);
        // List<Map<String, Object>> modelList = this.select(sql2, goodsModelParamMap, new MapperUtil());
        // modelList.forEach(item -> {
        // GoodsModelVO goodsModelVO = MapUtils.convertMapToObj(item, GoodsModelVO.class);
        // Integer businessType = result.getBusinessType();
        // String type = procureTemplateInfoVO.getType();
        // // 部门分发需要查询使用信息
        // if (businessType == 1 && "A".equals(type)) {
        // Long procureModelId = goodsModelVO.getId();
        // LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
        // lWhProcureModelUser.setWhProcureModelId(procureModelId);
        // lWhProcureModelUser.setProcureModelUserRecordId(lWhProcureModelUserRecord.getId());
        // List<LWhProcureModelUser> procureModelUserList =
        // this.lWhProcureModelUserService.select(lWhProcureModelUser);
        // if (!CollectionUtils.isEmpty(procureModelUserList)) {
        // List<DepartGoodsUseInfo> departGoodsUseInfoList = Lists.newArrayList();
        // procureModelUserList.forEach(useInfo -> {
        // Integer goodsNum = useInfo.getGoodsNum();
        // Long nowUserPhone = useInfo.getNowUserPhone();
        // String nowUserName = useInfo.getNowUserName();
        // DepartGoodsUseInfo departGoodsUseInfo = new DepartGoodsUseInfo();
        // departGoodsUseInfo.setName(nowUserName);
        // departGoodsUseInfo.setNum(goodsNum);
        // departGoodsUseInfo.setTel(nowUserPhone);
        // departGoodsUseInfoList.add(departGoodsUseInfo);
        // });
        // goodsModelVO.setUseInfo(departGoodsUseInfoList);
        // }
        //
        // }
        // goodsModelVOList.add(goodsModelVO);
        // procureTemplateInfoVO.setModels(goodsModelVOList);
        // });
        // formTransferGoods.add(procureTemplateInfoVO);
        // }
        // result.setFormTransferGoods(formTransferGoods);
        return result;
    }