futian.liu
2023-12-05 ceecebe477faf5a45b19f3b258f7add8f93b4583
consum-base/src/main/java/com/consum/base/service/impl/LWhFormScrappedServiceImpl.java
File was renamed from consum-base/src/main/java/com/consum/base/service/LWhFormScrappedServiceImpl.java
@@ -1,4 +1,18 @@
package com.consum.base.service;
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 java.util.stream.Collectors;
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;
@@ -14,7 +28,17 @@
import com.consum.base.pojo.response.FormScrappedGoodsDetailVO;
import com.consum.base.pojo.response.FormScrappedGoodsVO;
import com.consum.base.pojo.response.GoodsModelVO;
import com.consum.base.pojo.response.GoodsTemplateCountVO;
import com.consum.base.pojo.response.LWhFormScrappedExtendVO;
import com.consum.base.service.BaseGoodsModelsService;
import com.consum.base.service.BaseGoodsTemplateService;
import com.consum.base.service.BaseWarehouseService;
import com.consum.base.service.FinSysTenantDepartmentService;
import com.consum.base.service.LWhFormScrappedCoreService;
import com.consum.base.service.LWhFormScrappedGoodsService;
import com.consum.base.service.LWhFormScrappedService;
import com.consum.base.service.LWhGoodsService;
import com.consum.base.service.SDictDataServiceImpl;
import com.consum.model.po.BaseGoodsModels;
import com.consum.model.po.BaseGoodsTemplate;
import com.consum.model.po.BaseWarehouse;
@@ -27,18 +51,6 @@
import com.walker.db.page.GenericPager;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.jdbc.service.BaseServiceImpl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
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;
/**
 * @Description 报废单
@@ -46,7 +58,7 @@
 * @Date 2023/11/1
 */
@Service
public class LWhFormScrappedServiceImpl extends BaseServiceImpl {
public class LWhFormScrappedServiceImpl extends BaseServiceImpl implements LWhFormScrappedService {
    @Autowired
    private CodeGeneratorService codeGeneratorService;
@@ -67,9 +79,11 @@
    @Autowired
    private LWhFormScrappedCoreService lWhFormScrappedCoreService;
    private static String QUERY_LIST = "SELECT DISTINCT fs.* FROM l_wh_form_scrapped fs left join l_wh_form_scrapped_goods fsg on fs.id = fsg.FORM_SCRAPPED_ID WHERE 1 = 1 ";
    private static String QUERY_LIST =
        "SELECT DISTINCT fs.* FROM l_wh_form_scrapped fs left join l_wh_form_scrapped_goods fsg on fs.id = fsg.FORM_SCRAPPED_ID WHERE 1 = 1 ";
    private static final String QUERY_BF_DETAIL_LIST = "select fs.id,fs.BUSINESS_FORM_CODE,fsg.GOODS_TEMPLATE_NAME,fsg.BASE_GOODS_MODELS_NAME,fsg.COUNTS,"
    private static final String QUERY_BF_DETAIL_LIST =
        "select fs.id,fs.BUSINESS_FORM_CODE,fsg.GOODS_TEMPLATE_NAME,fsg.BASE_GOODS_MODELS_NAME,fsg.COUNTS,"
        + "fs.AGENCY_NAME,OPERATOR_NAME,DEAL_TIME from l_wh_form_scrapped fs "
        + "inner join l_wh_form_scrapped_goods fsg on fs.ID = fsg.FORM_SCRAPPED_ID where 1=1 ";
@@ -81,7 +95,7 @@
     * @param sysInfo     当前登录用户
     * @return 1.新增报废单  2.新增报废单物品
     */
    @Override
    public int add(LWhFormScrappedParam param, S_user_core currentUser, FinSysTenantUser sysInfo) {
        //1.新增报废单记录
        LWhFormScrapped lWhFormScrapped = new LWhFormScrapped();
@@ -126,7 +140,8 @@
        //2.新增报废单物品记录
        //根据物品id查询物品
        for (LWhFormScrappedGoodsInfoParam goodsInfo : param.getScrappedGoodsInfo()) {
            BaseGoodsTemplate goodsTemplate = this.baseGoodsTemplateService.get(new BaseGoodsTemplate(goodsInfo.getBaseGoodsTemplateId()));
            BaseGoodsTemplate goodsTemplate =
                this.baseGoodsTemplateService.get(new BaseGoodsTemplate(goodsInfo.getBaseGoodsTemplateId()));
            if (goodsTemplate == null) {
                log.error("该物品模板不存在");
                return 0;
@@ -137,26 +152,31 @@
                return 0;
            }
            //获取规格型号id
            List<Long> baseGoodsModelsIdList = scrappedGoodsParamList.stream().map(params -> params.getBaseGoodsModelsId()).collect(Collectors.toList());
            List<Long> baseGoodsModelsIdList = scrappedGoodsParamList.stream()
                .map(params -> params.getBaseGoodsModelsId()).collect(Collectors.toList());
            //根据规格型号id查询规格型号
            List<BaseGoodsModels> models = this.baseGoodsModelsService.selectByModelsIdList(baseGoodsModelsIdList);
            if (CollectionUtils.isEmpty(models)) {
                log.error("该型号商品不存在");
                return 0;
            }
            Map<Long, BaseGoodsModels> modelMap = models.stream().collect(Collectors.toMap(model -> model.getId(), model -> model));
            Map<Long, BaseGoodsModels> modelMap =
                models.stream().collect(Collectors.toMap(model -> model.getId(), model -> model));
            //获取报废原因code
            List<String> scrappedCodeList = scrappedGoodsParamList.stream().map(params -> params.getScrappedCode()).collect(Collectors.toList());
            List<String> scrappedCodeList =
                scrappedGoodsParamList.stream().map(params -> params.getScrappedCode()).collect(Collectors.toList());
            //根据报废原因code查询数据字典
            List<SDictData> SDictDataList = this.sDictDataService.selectByScrappedCodeList(scrappedCodeList);
            Map<Long, String> scrappedNameMap = SDictDataList.stream().collect(Collectors.toMap(s -> s.getDict_code(), s -> s.getDict_label()));
            Map<Long, String> scrappedNameMap =
                SDictDataList.stream().collect(Collectors.toMap(s -> s.getDict_code(), s -> s.getDict_label()));
            List<LWhFormScrappedGoods> scrappedGoodsList = new ArrayList<>();
            for (LWhFormScrappedGoodsModelParams params : scrappedGoodsParamList) {
                LWhFormScrappedGoods scrappedGoods = new LWhFormScrappedGoods();
                scrappedGoods.setId(IdUtil.generateId());
                //根据物品型号查询物品库存
                int goodsNum = this.lWhGoodsService.queryGoodsModelNum(0, warehouseId, scrappedGoods.getBaseGoodsModelsId(), 1, null);
                int goodsNum = this.lWhGoodsService.queryGoodsModelNum(0, warehouseId,
                    scrappedGoods.getBaseGoodsModelsId(), 1, null);
                if (params.getCounts() > goodsNum) {
                    log.error("报废数量大于库存数量");
                    return 0;
@@ -188,7 +208,8 @@
            }
        }
        //3.根据报废单报废物品
        Long lWarehouseFlowId = this.lWhFormScrappedCoreService.outFormByTransId(lWhFormScrappedId, currentUser, param.getDealTime());
        Long lWarehouseFlowId =
            this.lWhFormScrappedCoreService.outFormByTransId(lWhFormScrappedId, currentUser, param.getDealTime());
        if (lWarehouseFlowId == null) {
            log.error("根据出库单出库 失败");
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -203,6 +224,7 @@
     * @Author 卢庆阳
     * @Date 2023/11/2
     */
    @Override
    public PageUtil queryList(LWhFormScrappedQry param, FinSysTenantUser sysInfo) {
        HashMap<String, Object> paramts = new HashMap<>();
        StringBuilder sql = new StringBuilder(QUERY_LIST);
@@ -214,7 +236,8 @@
        //物品名称
        if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
            sql.append("and fsg.GOODS_TEMPLATE_NAME LIKE :goodsTemplateName ");
            paramts.put("goodsTemplateName", StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
            paramts.put("goodsTemplateName",
                StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
        }
        //机构
        sql.append("and AGENCY_ID like :agencyId ");
@@ -243,6 +266,7 @@
     * @Author 卢庆阳
     * @Date 2023/11/2
     */
    @Override
    public LWhFormScrappedExtendVO getById(Long id) {
        LWhFormScrappedExtendVO scrappedExtend = new LWhFormScrappedExtendVO();
        //1.查询报废单
@@ -253,7 +277,8 @@
        //2.查询报废单
        List<LWhFormScrappedGoods> scrappedGoodsList = this.scrappedGoodsService.getByFormScrappedId(id);
        //通过baseGoodsTemplateId 进行分组
        Map<Long, List<LWhFormScrappedGoods>> map = scrappedGoodsList.stream().collect(Collectors.groupingBy(LWhFormScrappedGoods::getBaseGoodsTemplateId));
        Map<Long, List<LWhFormScrappedGoods>> map =
            scrappedGoodsList.stream().collect(Collectors.groupingBy(LWhFormScrappedGoods::getBaseGoodsTemplateId));
        //循环map的key和value
        List<FormScrappedGoodsVO> scrappedGoodsVO = Lists.newArrayList();
        for (Map.Entry<Long, List<LWhFormScrappedGoods>> entry : map.entrySet()) {
@@ -299,6 +324,7 @@
     * @param param
     * @return
     */
    @Override
    public PageUtil queryDetailList(LWhFormScrappedQry param, FinSysTenantUser sysInfo) {
        StringBuilder sql = new StringBuilder(QUERY_BF_DETAIL_LIST);
        HashMap<String, Object> paramts = new HashMap<>();
@@ -311,7 +337,8 @@
        //物品名称
        if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
            sql.append("and GOODS_TEMPLATE_NAME like:GOODS_TEMPLATE_NAME ");
            paramts.put("GOODS_TEMPLATE_NAME", StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
            paramts.put("GOODS_TEMPLATE_NAME",
                StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
        }
        //规格型号
        if (param.getBaseGoodsModelsId() != null) {
@@ -342,34 +369,26 @@
        }
        sql.append("ORDER BY DEAL_TIME DESC ");
        GenericPager<Map<String, Object>> mapGenericPager = selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapperUtil());
        GenericPager<Map<String, Object>> mapGenericPager =
            selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapperUtil());
        PageUtil pageUtil = new PageUtil<>(mapGenericPager);
        List<FormScrappedGoodsDetailVO> result = Lists.newArrayList();
        mapGenericPager.getDatas().forEach(item -> {
            FormScrappedGoodsDetailVO formScrappedGoodsDetailVO = MapUtils.convertMapToObj(item, FormScrappedGoodsDetailVO.class);
            FormScrappedGoodsDetailVO formScrappedGoodsDetailVO =
                MapUtils.convertMapToObj(item, FormScrappedGoodsDetailVO.class);
            result.add(formScrappedGoodsDetailVO);
        });
        pageUtil.setDatas(result);
        return pageUtil;
    }
    @Override
    public List<ScrappedInfoExcelTemplate> export(Long id) {
        String sql =
            "SELECT\n"
                + "\tBUSINESS_FORM_CODE,\n"
                + "\tfs.DEAL_TIME,\n"
                + "\tOPERATOR_NAME,\n"
                + "\tAGENCY_NAME tenantName,\n"
                + "\tGOODS_TEMPLATE_NAME templateName,\n"
                + "\tBASE_GOODS_MODELS_NAME baseModelName,\n"
                + "\tCOUNTS num,\n"
                + "\tSCRAPPED_NAME deception,\n"
                + "\tBEIZ remark\n"
                + "FROM\n"
                + "\tl_wh_form_scrapped_goods fsg\n"
                + "\tLEFT JOIN l_wh_form_scrapped fs ON fs.id = fsg.FORM_SCRAPPED_ID\n"
                + "WHERE\n"
                + "\tfs.ID = :id\n"
        String sql = "SELECT\n" + "\tBUSINESS_FORM_CODE,\n" + "\tfs.DEAL_TIME,\n" + "\tOPERATOR_NAME,\n"
            + "\tAGENCY_NAME tenantName,\n" + "\tGOODS_TEMPLATE_NAME templateName,\n"
            + "\tBASE_GOODS_MODELS_NAME baseModelName,\n" + "\tCOUNTS num,\n" + "\tSCRAPPED_NAME deception,\n"
            + "\tBEIZ remark\n" + "FROM\n" + "\tl_wh_form_scrapped_goods fsg\n"
            + "\tLEFT JOIN l_wh_form_scrapped fs ON fs.id = fsg.FORM_SCRAPPED_ID\n" + "WHERE\n" + "\tfs.ID = :id\n"
                + "\tAND STATES = 1";
        Map<String, Object> param = new HashMap<>();
        param.put("id", id);
@@ -379,11 +398,28 @@
        }
        List<ScrappedInfoExcelTemplate> list = Lists.newArrayList();
        select.forEach(item -> {
            ScrappedInfoExcelTemplate inventoryExcelTemplate = MapUtils.convertMapToObj(item, ScrappedInfoExcelTemplate.class);
            ScrappedInfoExcelTemplate inventoryExcelTemplate =
                MapUtils.convertMapToObj(item, ScrappedInfoExcelTemplate.class);
            list.add(inventoryExcelTemplate);
        });
        return list;
    }
    @Override
    public List<GoodsTemplateCountVO> getScrappedCountByBusinessId(Long businessId) {
        List<GoodsTemplateCountVO> goodsTemplateCount = Lists.newArrayList();
        // 统计型号数量
        String sql =
            "SELECT fsg.BASE_GOODS_TEMPLATE_ID id,fsg.GOODS_TEMPLATE_NAME goodsName,sum(counts) count FROM l_wh_form_scrapped fs left join l_wh_form_scrapped_goods fsg on fs.id = fsg.FORM_SCRAPPED_ID "
                + "where fsg.FORM_SCRAPPED_ID =:businessId group by fsg.BASE_GOODS_TEMPLATE_ID";
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("businessId", businessId);
        List<Map<String, Object>> procureModelList = this.select(sql, paramMap, new MapperUtil());
        for (Map<String, Object> map : procureModelList) {
            GoodsTemplateCountVO goodsTemplateCountVO = MapUtils.convertMapToObj(map, GoodsTemplateCountVO.class);
            goodsTemplateCount.add(goodsTemplateCountVO);
        }
        return goodsTemplateCount;
    }
}