cy
2023-11-22 8fc8b4788ed8be27ff6aae1cdd3fe9a584972ae3
consum-base/src/main/java/com/consum/base/service/LWhFormInventoryServiceImpl.java
@@ -2,25 +2,30 @@
import com.consum.base.core.CodeGeneratorEnum;
import com.consum.base.core.CodeGeneratorService;
import com.consum.base.pojo.LWhFormInventoryDto;
import com.consum.base.pojo.LWhFormInventoryParam;
import com.consum.base.util.IdUtil;
import com.consum.model.po.*;
import com.iplatform.model.po.S_user_core;
import com.consum.base.core.utils.IdUtil;
import com.consum.base.core.utils.MapRowMapper;
import com.consum.base.core.utils.MapUtils;
import com.consum.base.core.utils.MapperUtil;
import com.consum.base.pojo.request.FormInventoryParam;
import com.consum.base.pojo.request.LWhFormInventoryParam;
import com.consum.base.pojo.response.FormInventoryGoodsVO;
import com.consum.base.pojo.response.FormInventoryVO;
import com.consum.model.po.BaseWarehouse;
import com.consum.model.po.FinSysTenantUser;
import com.consum.model.po.LWhFormInventory;
import com.walker.db.page.GenericPager;
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.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @Description 盘点
@@ -39,35 +44,41 @@
    private FinSysTenantUserServiceImpl finSysTenantUserService;
    @Autowired
    private LWhFormInventoryGoodsServiceImpl inventoryGoodsService;
    @Autowired
    private BaseGoodsTemplateServiceImpl baseGoodsTemplateService;
    @Autowired
    private LWhGoodsService lWhGoodsService;
    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_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 lwfi.WAREHOUSE_NAME,lwfig.GOODS_TEMPLATE_NAME,\n" + "       lwfig.BASE_GOODS_MODELS_NAME,\n" + "       lwfig.INVENTORY_RESULT,\n"
            + "       lwfig.INIT_COUNTS,\n" + "       lwfig.INVENTORY_COUNTS,\n" + "       lwfig.ERROR_COUNTS,\n" + "       lwfi.AGENCY_NAME,\n"
            + "       lwfi.OPERATOR_NAME,\n" + "       lwfi.STOP_TIME\n" + "from l_wh_form_inventory lwfi\n"
            + "         inner join l_wh_form_inventory_goods lwfig on lwfi.ID = lwfig.WH_FORM_INVENTORY_ID ";
    /**
     * @param param
     * @param currentUser  当前登录用户
     * @param operatorUser 盘点人
     * @param monitorUser  监盘人
     * @return
     * @Description 新增
     * @Author 卢庆阳
     * @Date 2023/10/31
     * @param param
     * @param currentUser   当前登录用户
     * @param operatorUser  盘点人
     * @param operatorUser2 监盘人
     * @return
     */
    public int add(LWhFormInventoryParam param, FinSysTenantUser currentUser, S_user_core operatorUser, S_user_core operatorUser2) {
    public int add(FormInventoryParam param, FinSysTenantUser currentUser, FinSysTenantUser operatorUser, FinSysTenantUser monitorUser) {
        //新增盘点单
        LWhFormInventory lWhFormInventory = new LWhFormInventory();
        BeanUtils.copyProperties(param,lWhFormInventory);
        BeanUtils.copyProperties(param, lWhFormInventory);
        lWhFormInventory.setId(IdUtil.generateId());
        //盘点单编码
        String businessFormCode = codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Inventory);
@@ -77,15 +88,22 @@
        if (baseWarehouse != null) {
            lWhFormInventory.setWarehouseName(baseWarehouse.getWarehouseName());
        }
        lWhFormInventory.setOperatorName(operatorUser.getUser_name());
        lWhFormInventory.setOperatorName2(operatorUser2.getUser_name());
        if (operatorUser != null) {
            lWhFormInventory.setOperatorId(operatorUser.getId());
            lWhFormInventory.setOperatorName(operatorUser.getUserName());
        }
        if (monitorUser != null) {
            lWhFormInventory.setOperatorId2(monitorUser.getId());
            lWhFormInventory.setOperatorName2(monitorUser.getUserName());
        }
        lWhFormInventory.setStates(0);
        lWhFormInventory.setAgencyId(Long.valueOf(currentUser.getTenantId()));
        lWhFormInventory.setAgencyName(currentUser.getTenantName());
        lWhFormInventory.setCreatorId(currentUser.getSysUserId());
        lWhFormInventory.setCreatorName(currentUser.getUserName());
        lWhFormInventory.setCreateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
        lWhFormInventory.setBeiz1(param.getRemark());
        return this.insert(lWhFormInventory);
    }
@@ -94,47 +112,47 @@
     * @Author 卢庆阳
     * @Date 2023/10/31
     */
    public GenericPager<LWhFormInventory> queryList(LWhFormInventoryParam param, FinSysTenantUser sysInfo) {
    public GenericPager<LWhFormInventory> queryList(com.consum.base.pojo.LWhFormInventoryParam param, FinSysTenantUser sysInfo) {
        StringBuilder sql = new StringBuilder(QUERY_LIST);
        HashMap<String, Object> paramts = new HashMap<>();
        //盘点单号
        if (!StringUtils.isEmpty(param.getBusinessFormCode())) {
            sql.append(" and BUSINESS_FORM_CODE like:BUSINESS_FORM_CODE ");
            paramts.put("BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getBusinessFormCode() + StringUtils.CHAR_PERCENT);
            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 =:BUSINESS_FORM_NAME ");
            sql.append("and BUSINESS_FORM_NAME like :BUSINESS_FORM_NAME ");
            paramts.put("BUSINESS_FORM_NAME", StringUtils.CHAR_PERCENT + param.getBusinessFormName() + StringUtils.CHAR_PERCENT);
        }
        //仓库编号
        if (param.getWarehouseId() != null) {
            sql.append(" and WAREHOUSE_ID =:WAREHOUSE_ID ");
            sql.append("and WAREHOUSE_ID =:WAREHOUSE_ID ");
            paramts.put("WAREHOUSE_ID", param.getWarehouseId());
        }
        //盘点时间
        if (param.getInventoryDateStart() != null) {
            sql.append(" and INVENTORY_DATE >=:inventoryDateStart ");
            paramts.put("inventoryDateStart", param.getInventoryDateStart() * 1000000);
        if (param.getStartTime() != null) {
            sql.append("and INVENTORY_DATE >=:inventoryDateStart ");
            paramts.put("inventoryDateStart", param.getStartTime() * 1000000);
        }
        if (param.getInventoryDateEnd() != null) {
            sql.append(" and INVENTORY_DATE <:inventoryDateEnd ");
            paramts.put("inventoryDateEnd", param.getInventoryDateEnd() * 1000000 + 240000);
        if (param.getEndTime() != null) {
            sql.append("and INVENTORY_DATE <:inventoryDateEnd ");
            paramts.put("inventoryDateEnd", param.getEndTime() * 1000000 + 240000);
        }
        //机构
        sql.append(" and AGENCY_ID =:AGENCY_ID ");
        sql.append("and AGENCY_ID =:AGENCY_ID ");
        paramts.put("AGENCY_ID", sysInfo.getTenantId());
        sql.append(" ORDER BY CREATE_TIME DESC ");
        sql.append("ORDER BY CREATE_TIME DESC ");
        return selectSplit(sql.toString(), paramts, new LWhFormInventory());
    }
    /**
     * @param id 盘点单id
     * @Description 盘点
     * @Author 卢庆阳
     * @Date 2023/10/31
     * @param id  盘点单id
     */
    public List queryPdList(Long id) {
        //1.根据盘点单id查询盘点单
@@ -149,25 +167,211 @@
            return null;
        }
        //3.新增盘点单物品记录
        int flag = inventoryGoodsService.add(list, lWhFormInventory.getWarehouseId());
        if (flag != list.size()) {
            log.error("新增盘点单记录");
            return null;
        }
//        int flag = inventoryGoodsService.add(list, lWhFormInventory.getWarehouseId());
//        if (flag != list.size()) {
//            log.error("新增盘点单记录");
//            return null;
//        }
        //4.根据盘点单id查询盘点单物品
        return inventoryGoodsService.getByInventoryId(id);
    }
    /**
     * 暂存
     *
     * @author 卢庆阳
     * @date 2023/10/31
     */
    public int temporaryStorage(LWhFormInventoryDto dto) {
    public int temporaryStorage(LWhFormInventoryParam dto, Integer state) {
        //1.根据盘点单id查询盘点单
        LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(dto.getId()));
        if (lWhFormInventory == null) {
            log.error("根据盘点单id查询盘点单失败");
            return 0;
        }
        //2.修改盘点单
        lWhFormInventory.setStates(state);
        lWhFormInventory.setInventoryDate(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
        int flag1 = this.update(lWhFormInventory);
        if (flag1 == 0) {
            log.error("修改盘点单失败");
            return 0;
        }
        //3.添加盘点单物品
        List<FormInventoryGoodsVO> inventoryGoodsList = dto.getInventoryGoodsList();
        if (CollectionUtils.isEmpty(inventoryGoodsList)) {
            log.error("盘点单物品为空");
            return 0;
        }
        int flag2 = inventoryGoodsService.add(inventoryGoodsList, lWhFormInventory.getWarehouseId());
        if (flag2 != inventoryGoodsList.size()) {
            log.error("更新盘点单物品失败");
            return 0;
        }
        return 1;
    }
        //2.删除盘点单物品
        //3.新增盘点单物品
        return 0;
    /**
     * 完成盘点
     *
     * @author 卢庆阳
     * @date 2023/10/31
     */
//    public int finishPd(LWhFormInventoryParam dto) {
//        //1.根据盘点单id查询盘点单
//        LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(dto.getId()));
//        if (lWhFormInventory == null) {
//            log.error("根据盘点单id查询盘点单 失败");
//            return 0;
//        }
//        //2.修改盘点单
//        lWhFormInventory.setStates(2);
//        lWhFormInventory.setStopTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
//        int flag1 = this.update(lWhFormInventory);
//        if (flag1 == 0) {
//            log.error("修改盘点单 失败");
//            return 0;
//        }
//        //3.更新盘点单物品
//        List<LWhFormInventoryGoods> inventoryGoodsList = dto.getInventoryGoodsList();
//        if (CollectionUtils.isEmpty(inventoryGoodsList)) {
//            log.error("盘点单物品 为空");
//            return 0;
//        }
//        for (LWhFormInventoryGoods inventoryGoods : inventoryGoodsList) {
//            int errorCounts = inventoryGoods.getInitCounts() - inventoryGoods.getInventoryCounts();
//            if (errorCounts > 0) {
//                inventoryGoods.setInventoryResult(3);
//            } else if (errorCounts < 0) {
//                inventoryGoods.setInventoryResult(2);
//            } else {
//                inventoryGoods.setInventoryResult(1);
//            }
//            inventoryGoods.setErrorCounts(Math.abs(errorCounts));
//        }
//        int flag2 = inventoryGoodsService.update(inventoryGoodsList);
//        if (flag2 != inventoryGoodsList.size()) {
//            log.error("更新盘点单物品 失败");
//            return 0;
//        }
//        return 1;
//    }
    /**
     * @return
     * @Description 异常明细列表查询
     * @Author 卢庆阳
     * @Date 2023/11/1
     */
    public GenericPager<Map<String, Object>> queryPdDetailList(com.consum.base.pojo.LWhFormInventoryParam param, FinSysTenantUser sysInfo) {
        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);
        }
        //规格型号
        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) {
            if (inventoryResult == 2) { //盘盈入库
                sql.append(" and IN_BUSINESS_FORM_CODE =:IN_BUSINESS_FORM_CODE ");
                paramts.put("IN_BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getWarehouseFormCode() + StringUtils.CHAR_PERCENT);
            } else {  //盘亏出库
                sql.append(" and OUT_BUSINESS_FORM_CODE =:OUT_BUSINESS_FORM_CODE ");
                paramts.put("OUT_BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getWarehouseFormCode() + StringUtils.CHAR_PERCENT);
            }
        }
        //操作人
        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.getStopTimeStart() != null) {
            sql.append(" and STOP_TIME >=:stopTimeStart ");
            paramts.put("stopTimeStart", param.getStopTimeStart() * 1000000);
        }
        if (param.getStopTimeEnd() != null) {
            sql.append(" and STOP_TIME <:stopTimeEnd ");
            paramts.put("stopTimeEnd", param.getStopTimeEnd() * 1000000 + 240000);
        }
        sql.append(" ORDER BY CREATE_TIME DESC ");
        return selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapRowMapper());
    }
    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 total,fig.INVENTORY_COUNTS,fig.INVENTORY_RESULT status from "
            + "l_wh_form_inventory_goods fig 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());
        List<FormInventoryGoodsVO> result = Lists.newArrayList();
        select.forEach(item -> {
            FormInventoryGoodsVO formInventoryGoodsVO = MapUtils.convertMapToObj(item, FormInventoryGoodsVO.class);
            result.add(formInventoryGoodsVO);
        });
        return result;
    }
    public FormInventoryVO queryInventBaseGoodTemplate(Long id) {
        FormInventoryVO formInventoryVO = new FormInventoryVO();
        LWhFormInventory lWhFormInventory = new LWhFormInventory();
        lWhFormInventory.setId(id);
        LWhFormInventory inventory = this.get(lWhFormInventory);
        if (inventory == null) {
            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 bgm.id,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";
        HashMap<String, Object> param = new HashMap<>();
        param.put("agencyId", inventory.getAgencyId());
        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);
            baseGoodsModels.setInventoryCount(inventoryCount);
            goodsVOList.add(baseGoodsModels);
        });
        formInventoryVO.setFormInventoryGoodsList(goodsVOList);
        return formInventoryVO;
    }
}