黎星凯
2024-04-15 62b6a7fac3f2acde70b578431147c4a01f19c182
consum-base/src/main/java/com/consum/base/service/impl/LWhFormInventoryServiceImpl.java
@@ -1,14 +1,15 @@
package com.consum.base.service.impl;
import com.consum.base.service.BaseWarehouseService;
import com.consum.base.service.FinSysTenantServiceImpl;
import com.consum.base.service.LWhFormInventoryGoodsServiceImpl;
import com.consum.base.service.LWhFormInventoryService;
import com.consum.base.service.LWhGoodsService;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.hutool.core.collection.CollectionUtil;
import com.consum.base.pojo.query.LWhLedgerQry;
import com.consum.base.service.*;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +32,7 @@
import com.consum.base.pojo.response.FormInventoryDetailVO;
import com.consum.base.pojo.response.FormInventoryGoodsVO;
import com.consum.base.pojo.response.FormInventoryVO;
import com.consum.base.service.core.LWhFormInventoryCoreService;
import com.consum.model.po.BaseWarehouse;
import com.consum.model.po.FinSysTenant;
import com.consum.model.po.FinSysTenantUser;
@@ -42,6 +44,8 @@
import com.walker.jdbc.service.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
/**
 * @Description 盘点
@@ -57,28 +61,30 @@
    @Autowired
    private BaseWarehouseService baseWarehouseService;
    @Autowired
    private LWhFormInventoryGoodsServiceImpl inventoryGoodsService;
    private LWhFormInventoryGoodsService inventoryGoodsService;
    @Autowired
    private LWhGoodsService lWhGoodsService;
    @Autowired
    private FinSysTenantServiceImpl finSysTenantService;
    private FinSysTenantService finSysTenantService;
    @Autowired
    @Lazy
    private LWhFormInventoryCoreService lWhFormInventoryCoreService;
    @Resource
    private FinWarehouseLedgerServiceImpl finWarehouseLedgerService;
    private static final String QUERY_LIST = "select * from l_wh_form_inventory where 1=1 ";
    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,"
            + "fig.ERROR_COUNTS,fi.AGENCY_NAME,fi.OPERATOR_NAME,fi.STOP_TIME operatorTime,"
            + "CASE WHEN fig.INVENTORY_RESULT = 2 THEN fi.IN_BUSINESS_FORM_CODE WHEN fig.INVENTORY_RESULT = 3 THEN fi.OUT_BUSINESS_FORM_CODE END warehouseFormCode "
            + "FROM l_wh_form_inventory fi INNER JOIN l_wh_form_inventory_goods fig ON fi.ID = fig.WH_FORM_INVENTORY_ID where 1=1 ";
            "SELECT fig.id,fi.WAREHOUSE_NAME,fig.GOODS_TEMPLATE_NAME,fig.BASE_GOODS_MODELS_NAME,fig.INVENTORY_RESULT,fig.INIT_COUNTS,fig.INVENTORY_COUNTS,"
                    + "fig.ERROR_COUNTS,fi.AGENCY_NAME,fi.OPERATOR_NAME,fi.STOP_TIME operatorTime,"
                    + "CASE WHEN fig.INVENTORY_RESULT = 2 THEN fi.IN_BUSINESS_FORM_CODE WHEN fig.INVENTORY_RESULT = 3 THEN fi.OUT_BUSINESS_FORM_CODE END warehouseFormCode "
                    + "FROM l_wh_form_inventory fi INNER JOIN l_wh_form_inventory_goods fig ON fi.ID = fig.WH_FORM_INVENTORY_ID where 1=1 ";
    /**
     * @param param
     * @param currentUser 当前登录用户
     * @param currentUser  当前登录用户
     * @param operatorUser 盘点人
     * @param monitorUser 监盘人
     * @param monitorUser  监盘人
     * @return
     * @Description 新增
     * @Author 卢庆阳
@@ -86,7 +92,7 @@
     */
    @Override
    public int add(FormInventoryParam param, FinSysTenantUser currentUser, FinSysTenantUser operatorUser,
        FinSysTenantUser monitorUser) {
                   FinSysTenantUser monitorUser) {
        // 新增盘点单
        LWhFormInventory lWhFormInventory = new LWhFormInventory();
        BeanUtils.copyProperties(param, lWhFormInventory);
@@ -138,7 +144,7 @@
        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);
                    StringUtils.CHAR_PERCENT + param.getBusinessFormName() + StringUtils.CHAR_PERCENT);
        }
        // 仓库编号
        if (param.getWarehouseId() != null) {
@@ -155,8 +161,8 @@
            paramts.put("inventoryDateEnd", param.getEndTime() * 1000000 + 240000);
        }
        // 机构
        sql.append("and AGENCY_ID =:AGENCY_ID ");
        paramts.put("AGENCY_ID", sysInfo.getTenantId());
        sql.append("and AGENCY_ID =:agencyId ");
        paramts.put("agencyId", sysInfo.getTenantId());
        sql.append("ORDER BY CREATE_TIME DESC ");
        return selectSplit(sql.toString(), paramts, new LWhFormInventory());
@@ -195,7 +201,7 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int updateInventoryInfo(LWhFormInventoryParam dto, Integer state, S_user_core currentUser,
        FinSysTenantUser sysInfo) {
                                   FinSysTenantUser sysInfo) {
        // 1.根据盘点单id查询盘点单
        LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(dto.getId()));
        if (lWhFormInventory == null) {
@@ -208,7 +214,7 @@
            log.error("盘点单物品为空");
            return 0;
        }
        this.inventoryGoodsService.updateInventoryGoods(inventoryGoodsList);
        inventoryGoodsService.updateInventoryGoods(inventoryGoodsList);
        // 修改盘点单
        if (state == 2) {
            // 完成盘点时设置完成盘点时间
@@ -216,7 +222,7 @@
            // 完成盘点时设置完成盘点时间
            String inOutFormByInventoryId =
                lWhFormInventoryCoreService.createInOutFormByInventoryId(dto.getId(), currentUser, sysInfo);
                    lWhFormInventoryCoreService.createInOutFormByInventoryId(dto.getId(), currentUser, sysInfo);
            if (!StringUtils.isEmpty(inOutFormByInventoryId)) {
                log.error(inOutFormByInventoryId);
                return 0;
@@ -260,7 +266,7 @@
        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);
                    StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
        }
        // 规格型号
        if (param.getBaseGoodsModelsId() != null) {
@@ -276,7 +282,7 @@
        // 出入库单号
        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 ");
                    " 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());
        }
        // 操作人
@@ -296,15 +302,15 @@
        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());
                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.getInventoryResult() == 2 ? "盘盈" : "盘亏"));
            formInventoryDetailVO.setInventoryType(formInventoryDetailVO.getInventoryResult() == null ? null
                : (formInventoryDetailVO.getInventoryResult() == 2 ? "盘盈入库" : "盘亏出库"));
                    : (formInventoryDetailVO.getInventoryResult() == 2 ? "盘盈入库" : "盘亏出库"));
            formInventoryDetailVO.setWarehouseFormCode(formInventoryDetailVO.getWarehouseFormCode());
            result.add(formInventoryDetailVO);
        });
@@ -316,8 +322,8 @@
    public List<FormInventoryGoodsVO> selectDetailById(Long id) {
        String sql = "select fig.id, fig.BASE_GOODS_TEMPLATE_ID,fig.GOODS_TEMPLATE_NAME,fig.BASE_GOODS_MODELS_NAME,"
            + "fig.INIT_COUNTS inventoryCount,fig.INVENTORY_COUNTS realNum,fig.INVENTORY_RESULT status,fig.unit,bgt.CLASSIFICATION type from "
            + "l_wh_form_inventory_goods fig left join base_goods_template bgt on bgt.id =fig.BASE_GOODS_TEMPLATE_ID  where fig.WH_FORM_INVENTORY_ID = :id";
                + "fig.INIT_COUNTS inventoryCount,fig.INVENTORY_COUNTS realNum,fig.INVENTORY_RESULT status,fig.unit,bgt.CLASSIFICATION type from "
                + "l_wh_form_inventory_goods fig left join base_goods_template bgt on bgt.id =fig.BASE_GOODS_TEMPLATE_ID  where fig.WH_FORM_INVENTORY_ID = :id";
        HashMap<String, Object> param = new HashMap<>();
        param.put("id", id);
        List<Map<String, Object>> select = select(sql, param, new MapperUtil());
@@ -340,25 +346,29 @@
            return null;
        }
        Long warehouseId = inventory.getWarehouseId();
        Integer warehouseType = inventory.getWarehouseType();
        formInventoryVO.setBusinessFormCode(inventory.getBusinessFormCode());
        formInventoryVO.setBusinessFormName(inventory.getBusinessFormName());
        formInventoryVO.setWarehouseId(warehouseId);
        formInventoryVO.setWarehouseName(inventory.getWarehouseName());
        // 统计仓库内的物品
        String sql =
            "select bgt.id baseGoodsTemplateId,bgt.GOODS_NAME goodsTemplateName,bgm.MODEL_NAME baseGoodsModelsName,bgt.CLASSIFICATION type,bgm.UNIT "
                + "from base_goods_models bgm left join base_goods_template bgt on bgm.GOODS_TEMPLATES_ID = bgt.id "
                + "where bgt.AGENCY_ID = :agencyId";
                "SELECT distinct bgt.id baseGoodsTemplateId,bgm.id baseGoodsModelId,bgt.GOODS_NAME goodsTemplateName,bgm.MODEL_NAME baseGoodsModelsName,"
                        + "bgt.CLASSIFICATION TYPE,bgm.UNIT FROM l_wh_goods g "
                        + "LEFT JOIN base_goods_template bgt ON g.BASE_GOODS_TEMPLATE_ID = bgt.ID "
                        + "LEFT JOIN base_goods_models bgm ON bgm.GOODS_TEMPLATES_ID = bgt.id WHERE "
                        + "WAREHOUSE_ID = :warehouseId GROUP BY g.BASE_GOODS_MODELS_ID ";
        HashMap<String, Object> param = new HashMap<>();
        param.put("agencyId", inventory.getAgencyId());
        param.put("warehouseId", warehouseId);
        List<Map<String, Object>> result = this.select(sql, param, new MapperUtil());
        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);
            List<Long> warehouseIds = new ArrayList<>(Arrays.asList(warehouseId));
            int inventoryCount = this.lWhGoodsService.queryGoodsModelNum(null, warehouseIds,
                    baseGoodsModels.getBaseGoodsModelId(), 1, null);
            baseGoodsModels.setInventoryCount(inventoryCount);
            goodsVOList.add(baseGoodsModels);
        });
@@ -369,28 +379,55 @@
    @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"
            + "\tfi.ID = :id";
                + "\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);
        List<Map<String, Object>> select = this.select(sql, param, new MapperUtil());
        if (CollectionUtils.isEmpty(select)) {
            return null;
            return Collections.emptyList();
        }
        List<InventoryExcelTemplate> list = Lists.newArrayList();
        select.forEach(item -> {
            InventoryExcelTemplate inventoryExcelTemplate =
                MapUtils.convertMapToObj(item, InventoryExcelTemplate.class);
                    MapUtils.convertMapToObj(item, InventoryExcelTemplate.class);
            inventoryExcelTemplate.setInventoryDeception(inventoryExcelTemplate.getInventoryResult() == 1 ? "是" : "否");
            inventoryExcelTemplate.setDeception(inventoryExcelTemplate.getInventoryResult() == 1 ? "正常"
                : (inventoryExcelTemplate.getInventoryResult() == 2 ? "盘盈" : "盘亏"));
                    : (inventoryExcelTemplate.getInventoryResult() == 2 ? "盘盈" : "盘亏"));
            list.add(inventoryExcelTemplate);
        });
        return list;
    }
    @Override
    public Integer isAddInventory(LWhFormInventoryQry param, FinSysTenantUser sysInfo) {
        // isAddInventory
        StringBuilder sql = new StringBuilder(QUERY_LIST);
        HashMap<String, Object> paramts = new HashMap<>();
        // 机构
        sql.append("and AGENCY_ID =:agencyId ");
        paramts.put("agencyId", sysInfo.getTenantId());
        // 状态
        sql.append("and states !=:states ");
        paramts.put("states", "2");
        List<LWhFormInventory> select = select(sql.toString(), paramts, new LWhFormInventory());
        if (!CollectionUtil.isEmpty(select)) {
            return 0;
        }
        LWhLedgerQry query = new LWhLedgerQry();
        query.setAgencyId(new Long(sysInfo.getTenantId()));
        query.setPageSize(100);
        query.setPageNum(1);
        query.setStates(new Short("1"));
        GenericPager pager = finWarehouseLedgerService.ledgerList(query);
        if(pager==null || CollectionUtil.isEmpty(pager.getDatas())){
            return -1;
        }
        return 1;
    }
}