futian.liu
2023-12-05 3836720e3b0fc9ab884d178e0ac27e942b175da2
consum-base/src/main/java/com/consum/base/service/LWhFormInventoryServiceImpl.java
@@ -1,7 +1,20 @@
package com.consum.base.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import com.consum.base.core.CodeGeneratorEnum;
import com.consum.base.core.CodeGeneratorService;
import com.consum.base.core.type.InventoryStatesType;
import com.consum.base.core.utils.IdUtil;
import com.consum.base.core.utils.MapUtils;
import com.consum.base.core.utils.MapperUtil;
@@ -22,17 +35,8 @@
import com.walker.infrastructure.utils.DateUtils;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.jdbc.service.BaseServiceImpl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
/**
 * @Description 盘点
@@ -57,15 +61,7 @@
    @Lazy
    private LWhFormInventoryCoreService lWhFormInventoryCoreService;
    private static final String QUERY_LIST = "select * from l_wh_form_inventory where 1=1 ";
    private static final String QUERY_PD_List = "SELECT bgt.GOODS_NAME goodsName,model.MODEL_NAME modelName,bgt.CLASSIFICATION,model.UNIT,\n"
        + "       record.endCount,bgt.ID goodsTemplateId,model.ID modelsId\n" + "FROM BASE_GOODS_MODELS model\n"
        + "         LEFT JOIN (SELECT COUNT(1) endCount, BASE_GOODS_MODELS_ID\n" + "                    FROM L_WH_GOODS\n"
        + "                    WHERE WAREHOUSE_TYPE = 0\n" + "                      AND WAREHOUSE_ID = 1\n" + "                      AND STATES = ?\n"
        + "                    GROUP BY BASE_GOODS_MODELS_ID) record ON record.BASE_GOODS_MODELS_ID = model.id\n"
        + "left join base_goods_template bgt on bgt.ID = model.GOODS_TEMPLATES_ID; ";
    private static final String QUERY_PD_DETAIL_LIST =
        "SELECT fig.id,fi.WAREHOUSE_NAME,fig.GOODS_TEMPLATE_NAME,fig.BASE_GOODS_MODELS_NAME,fig.INVENTORY_RESULT,fig.INIT_COUNTS,fig.INVENTORY_COUNTS,"
@@ -75,24 +71,25 @@
    /**
     * @param param
     * @param currentUser  当前登录用户
     * @param currentUser 当前登录用户
     * @param operatorUser 盘点人
     * @param monitorUser  监盘人
     * @param monitorUser 监盘人
     * @return
     * @Description 新增
     * @Author 卢庆阳
     * @Date 2023/10/31
     */
    @Override
    public int add(FormInventoryParam param, FinSysTenantUser currentUser, FinSysTenantUser operatorUser, FinSysTenantUser monitorUser) {
        //新增盘点单
    public int add(FormInventoryParam param, FinSysTenantUser currentUser, FinSysTenantUser operatorUser,
        FinSysTenantUser monitorUser) {
        // 新增盘点单
        LWhFormInventory lWhFormInventory = new LWhFormInventory();
        BeanUtils.copyProperties(param, lWhFormInventory);
        lWhFormInventory.setId(IdUtil.generateId());
        //盘点单编码
        // 盘点单编码
        String businessFormCode = codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Inventory);
        lWhFormInventory.setBusinessFormCode(businessFormCode);
        //根据仓库id查询仓库
        // 根据仓库id查询仓库
        BaseWarehouse baseWarehouse = this.baseWarehouseService.getById(param.getWarehouseId());
        if (baseWarehouse != null) {
            lWhFormInventory.setWarehouseName(baseWarehouse.getWarehouseName());
@@ -106,7 +103,7 @@
            lWhFormInventory.setOperatorName2(monitorUser.getUserName());
        }
        lWhFormInventory.setStates(0);
        lWhFormInventory.setStates(InventoryStatesType.NEW.getValue());
        lWhFormInventory.setAgencyId(Long.valueOf(currentUser.getTenantId()));
        FinSysTenant finSysTenant = finSysTenantService.selectById(Long.valueOf(currentUser.getTenantId()));
        lWhFormInventory.setAgencyName(finSysTenant.getName());
@@ -127,22 +124,23 @@
        StringBuilder sql = new StringBuilder(QUERY_LIST);
        HashMap<String, Object> paramts = new HashMap<>();
        //盘点单号
        // 盘点单号
        if (!StringUtils.isEmpty(param.getBusinessFormCode())) {
            sql.append("and BUSINESS_FORM_CODE =:BUSINESS_FORM_CODE ");
            paramts.put("BUSINESS_FORM_CODE", param.getBusinessFormCode());
        }
        //盘点单名称
        // 盘点单名称
        if (!StringUtils.isEmpty(param.getBusinessFormName())) {
            sql.append("and BUSINESS_FORM_NAME like :BUSINESS_FORM_NAME ");
            paramts.put("BUSINESS_FORM_NAME", StringUtils.CHAR_PERCENT + param.getBusinessFormName() + StringUtils.CHAR_PERCENT);
            paramts.put("BUSINESS_FORM_NAME",
                StringUtils.CHAR_PERCENT + param.getBusinessFormName() + StringUtils.CHAR_PERCENT);
        }
        //仓库编号
        // 仓库编号
        if (param.getWarehouseId() != null) {
            sql.append("and WAREHOUSE_ID =:WAREHOUSE_ID ");
            paramts.put("WAREHOUSE_ID", param.getWarehouseId());
        }
        //盘点时间
        // 盘点时间
        if (param.getStartTime() != null) {
            sql.append("and INVENTORY_DATE >=:inventoryDateStart ");
            paramts.put("inventoryDateStart", param.getStartTime() * 1000000);
@@ -151,7 +149,7 @@
            sql.append("and INVENTORY_DATE <:inventoryDateEnd ");
            paramts.put("inventoryDateEnd", param.getEndTime() * 1000000 + 240000);
        }
        //机构
        // 机构
        sql.append("and AGENCY_ID =:AGENCY_ID ");
        paramts.put("AGENCY_ID", sysInfo.getTenantId());
@@ -159,22 +157,21 @@
        return selectSplit(sql.toString(), paramts, new LWhFormInventory());
    }
    @Override
    public FormInventoryVO saveInventory(FormInventoryVO dto, Long id) {
        //1.根据盘点单id查询盘点单
        // 1.根据盘点单id查询盘点单
        LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(id));
        if (lWhFormInventory == null) {
            log.error("根据盘点单id查询盘点单失败");
        }
        //2.修改盘点单
        lWhFormInventory.setStates(1);
        // 2.修改盘点单
        lWhFormInventory.setStates(InventoryStatesType.PENDING.getValue());
        lWhFormInventory.setInventoryDate(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
        int flag1 = this.update(lWhFormInventory);
        if (flag1 == 0) {
            log.error("修改盘点单失败");
        }
        //3.添加盘点单物品
        // 3.添加盘点单物品
        List<FormInventoryGoodsVO> formInventoryGoodsList = dto.getFormInventoryGoodsList();
        if (CollectionUtils.isEmpty(formInventoryGoodsList)) {
            log.error("盘点单物品为空");
@@ -184,7 +181,6 @@
        return dto;
    }
    /**
     * 保存盘点信息
     *
@@ -193,27 +189,29 @@
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int updateInventoryInfo(LWhFormInventoryParam dto, Integer state, S_user_core currentUser, FinSysTenantUser sysInfo) {
        //1.根据盘点单id查询盘点单
    public int updateInventoryInfo(LWhFormInventoryParam dto, Integer state, S_user_core currentUser,
        FinSysTenantUser sysInfo) {
        // 1.根据盘点单id查询盘点单
        LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(dto.getId()));
        if (lWhFormInventory == null) {
            log.error("根据盘点单id查询盘点单失败");
            return 0;
        }
        //添加盘点单物品
        // 添加盘点单物品
        List<FormInventoryGoodsVO> inventoryGoodsList = dto.getInventoryGoodsList();
        if (CollectionUtils.isEmpty(inventoryGoodsList)) {
            log.error("盘点单物品为空");
            return 0;
        }
        this.inventoryGoodsService.updateInventoryGoods(inventoryGoodsList);
        //修改盘点单
        // 修改盘点单
        if (state == 2) {
            //完成盘点时设置完成盘点时间
            // 完成盘点时设置完成盘点时间
            lWhFormInventory.setStopTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
            //完成盘点时设置完成盘点时间
            String inOutFormByInventoryId = lWhFormInventoryCoreService.createInOutFormByInventoryId(dto.getId(), currentUser, sysInfo);
            // 完成盘点时设置完成盘点时间
            String inOutFormByInventoryId =
                lWhFormInventoryCoreService.createInOutFormByInventoryId(dto.getId(), currentUser, sysInfo);
            if (!StringUtils.isEmpty(inOutFormByInventoryId)) {
                log.error(inOutFormByInventoryId);
                return 0;
@@ -230,7 +228,6 @@
        return 1;
    }
    /**
     * @return
     * @Description 异常明细列表查询
@@ -242,46 +239,47 @@
        StringBuilder sql = new StringBuilder(QUERY_PD_DETAIL_LIST);
        HashMap<String, Object> paramts = new HashMap<>();
        //机构
        // 机构
        sql.append(" and AGENCY_ID like:AGENCY_ID ");
        if (param.getAgencyId() != null) {
            paramts.put("AGENCY_ID", param.getAgencyId() + StringUtils.CHAR_PERCENT);
        } else {
            paramts.put("AGENCY_ID", sysInfo.getTenantId() + StringUtils.CHAR_PERCENT);
        }
        //仓库编号
        // 仓库编号
        if (param.getWarehouseId() != null) {
            sql.append("and WAREHOUSE_ID =:WAREHOUSE_ID ");
            paramts.put("WAREHOUSE_ID", param.getWarehouseId());
        }
        //物品名称
        // 物品名称
        if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
            sql.append("and GOODS_TEMPLATE_NAME =: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) {
            sql.append("and BASE_GOODS_MODELS_ID =:BASE_GOODS_MODELS_ID ");
            paramts.put("BASE_GOODS_MODELS_ID", param.getBaseGoodsModelsId());
        }
        //类型(出入库类型)
        // 类型(出入库类型)
        Integer inventoryResult = param.getInventoryResult();
        if (inventoryResult != null) {
            sql.append("and INVENTORY_RESULT =:INVENTORY_RESULT ");
            paramts.put("INVENTORY_RESULT", inventoryResult);
        }
        //出入库单号
        // 出入库单号
        if (param.getWarehouseFormCode() != null) {
            sql.append(
                " and CASE WHEN fig.INVENTORY_RESULT = 2 THEN fi.IN_BUSINESS_FORM_CODE =:warehouseFormCode WHEN fig.INVENTORY_RESULT = 3 THEN fi.OUT_BUSINESS_FORM_CODE =:warehouseFormCode END ");
            paramts.put("warehouseFormCode", param.getWarehouseFormCode());
        }
        //操作人
        // 操作人
        if (!StringUtils.isEmpty(param.getOperatorName())) {
            sql.append("and OPERATOR_NAME =:OPERATOR_NAME ");
            paramts.put("OPERATOR_NAME", StringUtils.CHAR_PERCENT + param.getOperatorName() + StringUtils.CHAR_PERCENT);
        }
        //结束时间
        // 结束时间
        if (param.getStartTime() != null) {
            sql.append("and STOP_TIME >=:stopTimeStart ");
            paramts.put("stopTimeStart", param.getStartTime() * 1000000);
@@ -292,15 +290,16 @@
        }
        sql.append("AND fig.INVENTORY_RESULT in(2,3) ");
        sql.append("ORDER BY CREATE_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<FormInventoryDetailVO> pageUtil = new PageUtil<>(mapGenericPager);
        List<FormInventoryDetailVO> result = Lists.newArrayList();
        mapGenericPager.getDatas().forEach(item -> {
            FormInventoryDetailVO formInventoryDetailVO = MapUtils.convertMapToObj(item, FormInventoryDetailVO.class);
            formInventoryDetailVO.setInventoryResultType(
                formInventoryDetailVO.getInventoryResult() == null ? null : (formInventoryDetailVO.getInventoryResult() == 2 ? "盘盈" : "盘亏"));
            formInventoryDetailVO.setInventoryType(
                formInventoryDetailVO.getInventoryResult() == null ? null : (formInventoryDetailVO.getInventoryResult() == 2 ? "盘盈入库" : "盘亏出库"));
            formInventoryDetailVO.setInventoryResultType(formInventoryDetailVO.getInventoryResult() == null ? null
                : (formInventoryDetailVO.getInventoryResult() == 2 ? "盘盈" : "盘亏"));
            formInventoryDetailVO.setInventoryType(formInventoryDetailVO.getInventoryResult() == null ? null
                : (formInventoryDetailVO.getInventoryResult() == 2 ? "盘盈入库" : "盘亏出库"));
            formInventoryDetailVO.setWarehouseFormCode(formInventoryDetailVO.getWarehouseFormCode());
            result.add(formInventoryDetailVO);
        });
@@ -353,7 +352,8 @@
        List<FormInventoryGoodsVO> goodsVOList = Lists.newArrayList();
        result.forEach(item -> {
            FormInventoryGoodsVO baseGoodsModels = MapUtils.convertMapToObj(item, FormInventoryGoodsVO.class);
            int inventoryCount = this.lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseId, baseGoodsModels.getId(), 1, null);
            int inventoryCount =
                this.lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseId, baseGoodsModels.getId(), 1, null);
            baseGoodsModels.setInventoryCount(inventoryCount);
            goodsVOList.add(baseGoodsModels);
        });
@@ -363,22 +363,12 @@
    @Override
    public List<InventoryExcelTemplate> getExportList(Long id) {
        String sql = "SELECT\n"
            + "\tfi.INVENTORY_DATE createTime,\n"
            + "\tfi.STOP_TIME endTime,\n"
            + "\tfi.OPERATOR_NAME,\n"
            + "\tfi.OPERATOR_NAME2 monitorName,\n"
            + "\tfi.AGENCY_NAME tenantName,\n"
            + "\tfig.GOODS_TEMPLATE_NAME templateName,\n"
            + "\tfig.BASE_GOODS_MODELS_NAME baseModelName,\n"
            + "\tfig.INVENTORY_COUNTS num,\n"
            + "\tfig.INIT_COUNTS stockNum,\n"
            + "\tfig.INVENTORY_RESULT,\n"
            + "\tBEIZ1 remark\n"
            + "FROM\n"
            + "\tl_wh_form_inventory fi\n"
            + "\tLEFT JOIN l_wh_form_inventory_goods fig ON fi.ID = fig.WH_FORM_INVENTORY_ID\n"
            + "WHERE\n"
        String sql = "SELECT\n" + "\tfi.INVENTORY_DATE createTime,\n" + "\tfi.STOP_TIME endTime,\n"
            + "\tfi.OPERATOR_NAME,\n" + "\tfi.OPERATOR_NAME2 monitorName,\n" + "\tfi.AGENCY_NAME tenantName,\n"
            + "\tfig.GOODS_TEMPLATE_NAME templateName,\n" + "\tfig.BASE_GOODS_MODELS_NAME baseModelName,\n"
            + "\tfig.INVENTORY_COUNTS num,\n" + "\tfig.INIT_COUNTS stockNum,\n" + "\tfig.INVENTORY_RESULT,\n"
            + "\tBEIZ1 remark\n" + "FROM\n" + "\tl_wh_form_inventory fi\n"
            + "\tLEFT JOIN l_wh_form_inventory_goods fig ON fi.ID = fig.WH_FORM_INVENTORY_ID\n" + "WHERE\n"
            + "\tfi.ID = :id";
        HashMap<String, Object> param = new HashMap<>();
        param.put("id", id);
@@ -388,10 +378,11 @@
        }
        List<InventoryExcelTemplate> list = Lists.newArrayList();
        select.forEach(item -> {
            InventoryExcelTemplate inventoryExcelTemplate = MapUtils.convertMapToObj(item, InventoryExcelTemplate.class);
            InventoryExcelTemplate inventoryExcelTemplate =
                MapUtils.convertMapToObj(item, InventoryExcelTemplate.class);
            inventoryExcelTemplate.setInventoryDeception(inventoryExcelTemplate.getInventoryResult() == 1 ? "是" : "否");
            inventoryExcelTemplate.setDeception(
                inventoryExcelTemplate.getInventoryResult() == 1 ? "正常" : (inventoryExcelTemplate.getInventoryResult() == 2 ? "盘盈" : "盘亏"));
            inventoryExcelTemplate.setDeception(inventoryExcelTemplate.getInventoryResult() == 1 ? "正常"
                : (inventoryExcelTemplate.getInventoryResult() == 2 ? "盘盈" : "盘亏"));
            list.add(inventoryExcelTemplate);
        });
        return list;