cy
2023-11-16 d8fb6d11aa24b77b8bbcc5740140d31f5692837d
consum-base/src/main/java/com/consum/base/service/LWhFormTransferServiceImpl.java
@@ -1,18 +1,28 @@
package com.consum.base.service;
import com.consum.base.Constants;
import com.consum.base.core.CodeGeneratorEnum;
import com.consum.base.core.CodeGeneratorService;
import com.consum.base.core.param.BaseWarehouseParam1;
import com.consum.base.pojo.*;
import com.consum.base.util.IdUtil;
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.LWhFormTransferGoodsInfoParam;
import com.consum.base.pojo.LWhFormTransferParam;
import com.consum.base.pojo.LWhProcureModelUserParam;
import com.consum.base.pojo.LWhTransferModelParam;
import com.consum.base.pojo.query.TransferQry;
import com.consum.base.pojo.response.FormTransferGoodsVO;
import com.consum.base.pojo.response.GoodsModelVO;
import com.consum.base.pojo.response.LWHFromTransferExtendVO;
import com.consum.model.po.*;
import com.consum.model.vo.LWhFormTransferVo;
import com.consum.model.vo.LWhFormOutputVo;
import com.consum.model.vo.LWhGoodsRecordVo;
import com.iplatform.model.po.S_user_core;
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 org.apache.commons.compress.utils.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -22,6 +32,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @Description 调拨管理
@@ -41,32 +52,50 @@
    private LWhGoodsService lWhGoodsService;
    @Autowired
    private LWhProcureModelService lWhProcureModelService;
    @Autowired
    private LWhFormOutputCoreService lWhFormOutputCoreService;
    @Autowired
    private LWhFormOutputServiceImpl lWhFormOutputService;
    @Autowired
    private LWhGoodsRecordService lWhGoodsRecordService;
    @Autowired
    private BaseGoodsModelsServiceImpl baseGoodsModelsService;
    @Autowired
    private LWhProcureModelUserServiceImpl lWhProcureModelUserService;
    private static String QUERY_FORM_TRANSFER_LIST = "SELECT * FROM l_wh_form_transfer WHERE 1 = 1";
    /**
     * @Description
     * @Description 新增
     * @Author 卢庆阳
     * @Date 2023/10/30
     */
    public int add(LWhFormTransferParam param, S_user_core currentUser, FinSysTenantUser sysInfo) {
    public int add(LWhFormTransferParam param, FinSysTenantUser sysInfo) throws Exception {
        //1.新增调拨单记录
        LWhFormTransfer lWhFormTransfer = new LWhFormTransfer();
        //调拨单id
        long lWhFormTransferId = IdUtil.generateId();
        lWhFormTransfer.setId(lWhFormTransferId);
        lWhFormTransfer.setBusinessType(0);
        Integer businessType = param.getTransferBusinessType();
        // 单据类型。0仓库调拨;1部门分发;2部门物品回退
        // TODO 枚举字典
        lWhFormTransfer.setBusinessType(businessType);
        lWhFormTransfer.setBusinessFormCode(codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Transfer));
        Long warehouseId = param.getInWarehouseId();
        lWhFormTransfer.setInWarehouseId(warehouseId);
        //根据仓库id查询仓库
        BaseWarehouse warehouse = this.baseWarehouseService.getById(warehouseId);
        //入库仓库为当前用户的默认仓库
        String tenantId = sysInfo.getTenantId();
        BaseWarehouse warehouse = baseWarehouseService.getDefaultWarehouseByAgencyId(Long.valueOf(tenantId));
        if (warehouse == null) {
            log.error("仓库不存在");
            return 0;
            throw new Exception("仓库不存在");
        }
        lWhFormTransfer.setInWarehouseId(warehouse.getId());
        lWhFormTransfer.setInWarehouseName(warehouse.getWarehouseName());
        lWhFormTransfer.setInAgencyId(Long.valueOf(sysInfo.getTenantId()));
        lWhFormTransfer.setInAgencyId(Long.valueOf(tenantId));
        lWhFormTransfer.setInAgencyName(sysInfo.getTenantName());
        //根据机构id查询调拨机构
        FinSysTenant finSysTenant = finSysTenantService.get(new FinSysTenant(param.getOutAgencyId()));
@@ -79,64 +108,122 @@
        lWhFormTransfer.setOperatorId(sysInfo.getId());
        lWhFormTransfer.setOperatorName(sysInfo.getUserName());
        lWhFormTransfer.setCreateTime(param.getCreateTime());
        //0=待出库;1=待接收;2=已入库库:4=已撤销
        lWhFormTransfer.setStates(0);
        lWhFormTransfer.setProcureDoc(param.getProcureDoc());
        //3.当业务类型为部门分发时 添加部门分发记录和使用人
        if (businessType == 1) {
            //部门分发类型 出库仓库类型0机构1部门
            // TODO 出库业务类型 联系电话
            lWhFormTransfer.setOutWarehouseType(1);
        }
        int flag1 = this.insert(lWhFormTransfer);
        if (flag1 == 0) {
            log.error("新增调拨单失败");
            return 0;
        }
        //2.新增物品型号记录
        List<LWhProcureModelParams> models = param.getModels();
        List<LWhFormTransferGoodsInfoParam> transferGoods = param.getTransferGoods();
        List<LWhProcureModel> modelList = new ArrayList<>();
        for (LWhProcureModelParams model : models) {
            LWhProcureModel lWhProcureModel = new LWhProcureModel();
            lWhProcureModel.setId(IdUtil.generateId());
            lWhProcureModel.setBusinessType(2);
            lWhProcureModel.setBusinessId(lWhFormTransferId);
            lWhProcureModel.setBaseGoodsModelsId(model.getBaseGoodsModelsId());
            lWhProcureModel.setCounts(model.getCounts());
            //根据物品型号查询物品库存
            int goodsNum = this.lWhGoodsService.queryGoodsModelNum(warehouseId, model.getBaseGoodsModelsId(), (short) 1, null);
            lWhProcureModel.setWorehouseCount(goodsNum);
            modelList.add(lWhProcureModel);
        for (LWhFormTransferGoodsInfoParam transferGoodsInfo : transferGoods) {
            for (LWhTransferModelParam model : transferGoodsInfo.getModels()) {
                LWhProcureModel lWhProcureModel = new LWhProcureModel();
                lWhProcureModel.setId(IdUtil.generateId());
                // 物品型号业务类型
                // 物品类型 1 采购2 调拨 3出库4部门分发
                switch (businessType) {
                    case 0:
                        lWhProcureModel.setBusinessType(2);
                        break;
                    case 1:
                        lWhProcureModel.setBusinessType(4);
                        break;
                    default:
                        lWhProcureModel.setBusinessType(null);
                }
                lWhProcureModel.setBusinessId(lWhFormTransferId);
                lWhProcureModel.setBaseGoodsModelsId(model.getBaseGoodsModelsId());
                lWhProcureModel.setCounts(model.getCounts());
                //根据型号id查询型号
                BaseGoodsModels baseGoodsModels = this.baseGoodsModelsService.get(new BaseGoodsModels(model.getBaseGoodsModelsId()));
                if (baseGoodsModels != null) {
                    lWhProcureModel.setBaseGoodsModelsName(baseGoodsModels.getModelName());
                }
                // TODO 价格
                lWhProcureModel.setPrice(10L);
                //根据物品型号查询物品库存
                int goodsNum = this.lWhGoodsService.queryGoodsModelNum(0, warehouseId, model.getBaseGoodsModelsId(), (short) 1, null);
                lWhProcureModel.setWorehouseCount(goodsNum);
                //3.当业务类型为部门分发时 添加部门分发记录和使用人
                // 单据类型 1 采购2 调拨 3出库4部门分发
                //TODO 部门分发类型
                if (businessType == 1) {
                    List<LWhProcureModelUser> procureModelUserList = Lists.newArrayList();
                    for (LWhProcureModelUserParam lWhProcureModelUserParam : model.getProcureModelUserList()) {
                        LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
                        lWhProcureModelUser.setId(IdUtil.generateId());
                        lWhProcureModelUser.setTransBusinessId(lWhFormTransferId);
                        lWhProcureModelUser.setWhProcureModelId(lWhProcureModel.getId());
                        lWhProcureModelUser.setBaseGoodsModelsId(model.getBaseGoodsModelsId());
                        lWhProcureModelUser.setNowUserName(lWhProcureModelUserParam.getNowUserName());
                        lWhProcureModelUser.setNowUserPhone(lWhProcureModelUserParam.getNowUserPhone());
                        lWhProcureModelUser.setGoodsNum(lWhProcureModelUserParam.getGoodsNum());
                        procureModelUserList.add(lWhProcureModelUser);
                    }
                    int procureInsertNum = lWhProcureModelUserService.insert(procureModelUserList);
                    if (procureInsertNum != procureModelUserList.size()) {
                        log.error("新增物品使用信息失败");
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return 0;
                    }
                }
                modelList.add(lWhProcureModel);
            }
        }
        int flag2 = this.lWhProcureModelService.insert(modelList);
        if (flag2 != modelList.size()) {
            log.error("新增物品型号失败");
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return 0;
        }
        return 1;
    }
    /**
     * @Description  列表查询
     * @Description 列表查询
     * @Author 卢庆阳
     * @Date 2023/10/30
     */
    public GenericPager<LWhFormTransfer> queryFormTransferList(LWhFormTransferParam param) {
    public GenericPager<LWhFormTransfer> queryFormTransferList(TransferQry param) {
        HashMap<String, Object> paramts = new HashMap<>();
        StringBuilder sql = new StringBuilder(QUERY_FORM_TRANSFER_LIST);
        //调拨单号
        if (!StringUtils.isEmpty(param.getBusinessFormCode())) {
            sql.append(" and BUSINESS_FORM_CODE like :businessFormCode ");
            paramts.put("businessFormCode", StringUtils.CHAR_PERCENT + param.getBusinessFormCode() + StringUtils.CHAR_PERCENT);
            sql.append(" and BUSINESS_FORM_CODE = :businessFormCode ");
            paramts.put("businessFormCode", param.getBusinessFormCode());
        }
        //物品名称
        if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
            sql.append(" AND id IN (SELECT BUSINESS_ID FROM L_WH_PROCURE_MODEL procureModel LEFT JOIN BASE_GOODS_MODELS baseModel ON procureModel.BASE_GOODS_MODELS_ID=baseModel.ID LEFT JOIN BASE_GOODS_TEMPLATE baseTemp ON baseModel.GOODS_TEMPLATES_ID=baseTemp.id WHERE procureModel.BUSINESS_TYPE=1 AND baseTemp.GOODS_NAME LIKE :goodsTemplateName)");
            sql.append(
                " AND id IN (SELECT BUSINESS_ID FROM L_WH_PROCURE_MODEL procureModel LEFT JOIN BASE_GOODS_MODELS baseModel ON procureModel.BASE_GOODS_MODELS_ID=baseModel.ID LEFT JOIN BASE_GOODS_TEMPLATE baseTemp ON baseModel.GOODS_TEMPLATES_ID=baseTemp.id WHERE procureModel.BUSINESS_TYPE=2 AND baseTemp.GOODS_NAME LIKE :goodsTemplateName)");
            paramts.put("goodsTemplateName", StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
        }
        //调拨机构
        if (param.getOutAgencyId() != null){
        if (param.getOutAgencyId() != null) {
            sql.append(" and OUT_AGENCY_ID = :OUT_AGENCY_ID ");
            paramts.put("OUT_AGENCY_ID", param.getOutAgencyId());
        }
        //接收机构
        if (param.getInAgencyId() != null){
            sql.append(" and OUT_AGENCY_ID = :OUT_AGENCY_ID ");
            paramts.put("OUT_AGENCY_ID",   param.getOutAgencyId() );
        if (param.getInAgencyId() != null) {
            sql.append(" and IN_AGENCY_ID = :IN_AGENCY_ID ");
            paramts.put("IN_AGENCY_ID", param.getInAgencyId());
        }
        //状态
        if (param.getStates() != null) {
@@ -158,13 +245,13 @@
            paramts.put("createTimeEnd", param.getCreateTimeEnd() * 1000000 + 240000);
        }
        //接收时间
        if (param.getInTimeStart() != null) {
        if (param.getStartTime() != null) {
            sql.append(" and IN_TIME >=:inTimeStart ");
            paramts.put("inTimeStart", param.getInTimeStart() * 1000000);
            paramts.put("inTimeStart", param.getStartTime() * 1000000);
        }
        if (param.getInTimeEnd() != null) {
        if (param.getEndTime() != null) {
            sql.append(" and IN_TIME <:inTimeEnd ");
            paramts.put("inTimeEnd", param.getInTimeEnd() * 1000000 + 240000);
            paramts.put("inTimeEnd", param.getEndTime() * 1000000 + 240000);
        }
        sql.append(" ORDER BY CREATE_TIME DESC");
@@ -174,19 +261,171 @@
    }
    /**
     * @Description  根据id查询详情
     * @Description 根据id查询详情
     * @Author 卢庆阳
     * @Date 2023/10/30
     */
    public LWhFormTransferVo getById(Long id) {
        LWhFormTransferVo vo = new LWhFormTransferVo();
    public LWHFromTransferExtendVO getById(Long id) {
        LWHFromTransferExtendVO result = new LWHFromTransferExtendVO();
        //1.查询调拨单
        LWhFormTransfer lWhFormTransfer = this.get(new LWhFormTransfer(id));
        if (lWhFormTransfer != null) {
            BeanUtils.copyProperties(lWhFormTransfer,vo);
            BeanUtils.copyProperties(lWhFormTransfer, result);
        }
        //2.查询物品型号
//        this.lWhProcureModelService.getModelByForm(id)
        return null;
        String sql = "SELECT bgt.id, CATEGORY_ID, CATEGORY_NAME, GOODS_NAME "
            + "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 = lWhFormOutputService.select(sql, paramMap, new MapperUtil());
        List<FormTransferGoodsVO> formTransferGoods = Lists.newArrayList();
        for (Map<String, Object> map : procureModelList) {
            FormTransferGoodsVO procureTemplateInfoVO = MapUtils.convertMapToObj(map, FormTransferGoodsVO.class);
            // 查询型号数量
            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";
            List<Map<String, Object>> modelList = lWhFormOutputService.select(sql2, paramMap, new MapperUtil());
            modelList.forEach(item -> {
                GoodsModelVO goodsModelVO = MapUtils.convertMapToObj(item, GoodsModelVO.class);
                goodsModelVOList.add(goodsModelVO);
            });
            procureTemplateInfoVO.setModels(goodsModelVOList);
            formTransferGoods.add(procureTemplateInfoVO);
        }
        result.setFormTransferGoods(formTransferGoods);
        /*//2.查询物品型号
        //List<LWhProcureModel> models = this.lWhProcureModelService.getModelByForm(WhBusinessEnum.DIAOBO, id);
        List<LWhProcureModel> models = this.lWhProcureModelService.getModelByForm(null, id);
        if (!CollectionUtils.isEmpty(models)) {
            List<LWhProcureModelVo> lWhProcureModelVoList = Lists.newArrayList();
            for (LWhProcureModel model : models) {
                LWhProcureModelVo lWhProcureModelVo = new LWhProcureModelVo();
                BeanUtils.copyProperties(model, lWhProcureModelVo);
                LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
                lWhProcureModelUser.setWhProcureModelId(model.getId());
                List<LWhProcureModelUser> select = lWhProcureModelUserService.select(lWhProcureModelUser);
                lWhProcureModelVo.setProcureModelUsersList(select);
                lWhProcureModelVoList.add(lWhProcureModelVo);
            }
            vo.setModels(lWhProcureModelVoList);
        }*/
        return result;
    }
    /**
     * @Description 导出调拨出库单
     * @Author 卢庆阳
     * @Date 2023/10/31
     */
    public LWhFormOutputVo export(Long id, S_user_core currentUser) {
        LWhFormOutputVo result = new LWhFormOutputVo();
        long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
        //1.根据调拨单生成出库单
        Long outWarehouseFormId = this.lWhFormOutputCoreService.createOutFormByTransId(id, currentUser, dealTime);
        //2.出库单id查询出库单
        LWhFormOutput lWhFormOutput = this.lWhFormOutputService.get(new LWhFormOutput(outWarehouseFormId));
        if (lWhFormOutput != null) {
            BeanUtils.copyProperties(lWhFormOutput, result);
        }
        //3.根据进出库流水总表id查询l_wh_goods_record
        LWhGoodsRecord record = new LWhGoodsRecord();
        record.setWarehouseFlowId(lWhFormOutput.getWarehouseFlowId());
        List<LWhGoodsRecord> recordList = this.lWhGoodsRecordService.select(record);
        List<LWhGoodsRecordVo> voList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(recordList)) {
            for (LWhGoodsRecord lWhGoodsRecord : recordList) {
                LWhGoodsRecordVo vo = new LWhGoodsRecordVo();
                BeanUtils.copyProperties(lWhGoodsRecord, vo);
                //根据型号id查询型号
                BaseGoodsModels baseGoodsModels = baseGoodsModelsService.get(new BaseGoodsModels(id));
                if (baseGoodsModels != null) {
                    vo.setUnit(baseGoodsModels.getUnit());
                }
                voList.add(vo);
            }
        }
        result.setRecordVoList(voList);
        return result;
    }
    /**
     * 撤销
     *
     * @author 卢庆阳
     * @date 2023/10/31
     */
    public int updateStatus(Long id) {
        LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(id);
        lWhFormTransfer.setStates(4);
        return this.update(lWhFormTransfer);
    }
    public GenericPager<Map<String, Object>> queryTransferInfo(TransferQry transferQry) {
        HashMap<String, Object> paramts = new HashMap<>();
        StringBuilder sql = new StringBuilder(
            "SELECT\n" + "\tft.id,\n" + "\tft.BUSINESS_FORM_CODE businessCode,\n" + "\tbgt.GOODS_NAME goodsName,\n" + "\tbgt.CLASSIFICATION goodsType,\n"
                + "\tbgm.id goodsModelId,\n" + "\tbgm.MODEL_NAME goodsModelName,\n" + "\tpm.COUNTS goodsCount,\n" + "\tfst.`name` tennatName,\n"
                + "\tfstd.NAME departmentName,\n" + "\tft.OPERATOR_ID distributor,\n" + "\tft.CREATE_TIME TIME \n" + "FROM\n" + "\tl_wh_form_transfer ft\n"
                + "\tLEFT JOIN l_wh_procure_model pm ON ft.ID = pm.BUSINESS_ID\n"
                + "\tLEFT JOIN base_goods_models bgm ON bgm.GOODS_TEMPLATES_ID = pm.BASE_GOODS_MODELS_ID\n"
                + "\tLEFT JOIN base_goods_template bgt ON bgt.id = bgm.GOODS_TEMPLATES_ID\n"
                + "\tLEFT JOIN fin_sys_tenant_user fstu ON fstu.id = ft.OPERATOR_ID\n"
                + "\tLEFT JOIN fin_sys_tenant_department fstd ON fstu.SYS_DEPT_ID = fstd.ID \n"
                + "\tLEFT JOIN fin_sys_tenant fst ON fst.id = fstd.TENANT_ID where 1=1 ");
        //单号
        if (StringUtils.isNotEmpty(transferQry.getBusinessFormCode())) {
            sql.append("AND BUSINESS_FORM_CODE like :businessFormCode ");
            paramts.put("businessFormCode", StringUtils.CHAR_PERCENT + transferQry.getBusinessFormCode() + StringUtils.CHAR_PERCENT);
        }
        //物品名称
        if (StringUtils.isNotEmpty(transferQry.getGoodsTemplateName())) {
            sql.append("AND bgt.GOODS_NAME like:goodsName ");
            paramts.put("goodsName", StringUtils.CHAR_PERCENT + transferQry.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
        }
        // 规格型号
        if (transferQry.getBaseGoodsTemplateId() != null) {
            sql.append("AND bgm.id =:goodsModelId ");
            paramts.put("goodsModelId", transferQry.getBaseGoodsTemplateId());
        }
        //调拨机构
        if (transferQry.getOutAgencyId() != null) {
            sql.append("AND OUT_AGENCY_ID = :OUT_AGENCY_ID ");
            paramts.put("OUT_AGENCY_ID", transferQry.getOutAgencyId());
        }
        //创建人
        if (StringUtils.isNotEmpty(transferQry.getOperatorName())) {
            sql.append("AND ft.OPERATOR_NAME =:OPERATOR_NAME ");
            paramts.put("OPERATOR_NAME", transferQry.getOperatorName());
        }
        //申请时间
        if (transferQry.getCreateTimeStart() != null) {
            sql.append("AND ft.CREATE_TIME >=:createTimeStart ");
            paramts.put("createTimeStart", transferQry.getCreateTimeStart() * 1000000);
        }
        if (transferQry.getCreateTimeEnd() != null) {
            sql.append("AND ft.CREATE_TIME <:createTimeEnd ");
            paramts.put("createTimeEnd", transferQry.getCreateTimeEnd() * 1000000 + 240000);
        }
        sql.append("ORDER BY ft.CREATE_TIME DESC");
        GenericPager<Map<String, Object>> mapGenericPager = this.selectSplit(sql.toString(), paramts, transferQry.getPageNum(), transferQry.getPageSize(),
            new MapRowMapper());
        return mapGenericPager;
    }
}