package com.consum.base.service; import com.consum.base.core.CodeGeneratorEnum; import com.consum.base.core.CodeGeneratorService; 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.BaseGoodsModels; import com.consum.model.po.BaseWarehouse; import com.consum.model.po.FinSysTenant; import com.consum.model.po.FinSysTenantUser; import com.consum.model.po.LWhFormOutput; import com.consum.model.po.LWhFormTransfer; import com.consum.model.po.LWhGoodsRecord; import com.consum.model.po.LWhProcureModel; import com.consum.model.po.LWhProcureModelUser; 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 java.util.ArrayList; 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.stereotype.Service; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.util.CollectionUtils; /** * @Description 调拨管理 * @Author 卢庆阳 * @Date 2023/10/30 */ @Service public class LWhFormTransferServiceImpl extends BaseServiceImpl { @Autowired private BaseWarehouseServiceImpl baseWarehouseService; @Autowired private CodeGeneratorService codeGeneratorService; @Autowired private FinSysTenantServiceImpl finSysTenantService; @Autowired 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 新增 * @Author 卢庆阳 * @Date 2023/10/30 */ public int add(LWhFormTransferParam param, FinSysTenantUser sysInfo) throws Exception { //1.新增调拨单记录 LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(); //调拨单id long lWhFormTransferId = IdUtil.generateId(); lWhFormTransfer.setId(lWhFormTransferId); Integer businessType = param.getTransferBusinessType(); // 单据类型。0仓库调拨;1部门分发;2部门物品回退 // TODO 枚举字典 lWhFormTransfer.setBusinessType(businessType); lWhFormTransfer.setBusinessFormCode(codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Transfer)); Long warehouseId = param.getInWarehouseId(); lWhFormTransfer.setInWarehouseId(warehouseId); //入库仓库为当前用户的默认仓库 String tenantId = sysInfo.getTenantId(); BaseWarehouse warehouse = baseWarehouseService.getDefaultWarehouseByAgencyId(Long.valueOf(tenantId)); if (warehouse == null) { log.error("仓库不存在"); throw new Exception("仓库不存在"); } lWhFormTransfer.setInWarehouseName(warehouse.getWarehouseName()); lWhFormTransfer.setInAgencyId(Long.valueOf(tenantId)); lWhFormTransfer.setInAgencyName(sysInfo.getTenantName()); //根据机构id查询调拨机构 FinSysTenant finSysTenant = finSysTenantService.get(new FinSysTenant(param.getOutAgencyId())); if (finSysTenant == null) { log.error("调拨机构不存在"); return 0; } lWhFormTransfer.setOutAgencyId(finSysTenant.getId()); lWhFormTransfer.setOutAgencyName(finSysTenant.getName()); 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 transferGoods = param.getTransferGoods(); List modelList = new ArrayList<>(); 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 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 列表查询 * @Author 卢庆阳 * @Date 2023/10/30 */ public GenericPager queryFormTransferList(TransferQry param) { HashMap paramts = new HashMap<>(); StringBuilder sql = new StringBuilder(QUERY_FORM_TRANSFER_LIST); //调拨单号 if (!StringUtils.isEmpty(param.getBusinessFormCode())) { 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=2 AND baseTemp.GOODS_NAME LIKE :goodsTemplateName)"); paramts.put("goodsTemplateName", StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT); } //调拨机构 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 IN_AGENCY_ID = :IN_AGENCY_ID "); paramts.put("IN_AGENCY_ID", param.getInAgencyId()); } //状态 if (param.getStates() != null) { sql.append(" and states =:states "); paramts.put("states", param.getStates()); } //创建人 if (!StringUtils.isEmpty(param.getOperatorName())) { sql.append(" and OPERATOR_NAME =:OPERATOR_NAME "); paramts.put("OPERATOR_NAME", param.getOperatorName()); } //申请时间 if (param.getCreateTimeStart() != null) { sql.append(" and CREATE_TIME >=:createTimeStart "); paramts.put("createTimeStart", param.getCreateTimeStart() * 1000000); } if (param.getCreateTimeEnd() != null) { sql.append(" and CREATE_TIME <:createTimeEnd "); paramts.put("createTimeEnd", param.getCreateTimeEnd() * 1000000 + 240000); } //接收时间 if (param.getStartTime() != null) { sql.append(" and IN_TIME >=:inTimeStart "); paramts.put("inTimeStart", param.getStartTime() * 1000000); } if (param.getEndTime() != null) { sql.append(" and IN_TIME <:inTimeEnd "); paramts.put("inTimeEnd", param.getEndTime() * 1000000 + 240000); } sql.append(" ORDER BY CREATE_TIME DESC"); GenericPager genericPager = selectSplit(sql.toString(), paramts, new LWhFormTransfer()); return genericPager; } /** * @Description 根据id查询详情 * @Author 卢庆阳 * @Date 2023/10/30 */ public LWHFromTransferExtendVO getById(Long id) { LWHFromTransferExtendVO result = new LWHFromTransferExtendVO(); //1.查询调拨单 LWhFormTransfer lWhFormTransfer = this.get(new LWhFormTransfer(id)); if (lWhFormTransfer != null) { BeanUtils.copyProperties(lWhFormTransfer, result); } 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 paramMap = new HashMap<>(); paramMap.put("id", result.getId()); List> procureModelList = lWhFormOutputService.select(sql, paramMap, new MapperUtil()); List formTransferGoods = Lists.newArrayList(); for (Map map : procureModelList) { FormTransferGoodsVO procureTemplateInfoVO = MapUtils.convertMapToObj(map, FormTransferGoodsVO.class); // 查询型号数量 List 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> 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 models = this.lWhProcureModelService.getModelByForm(WhBusinessEnum.DIAOBO, id); List models = this.lWhProcureModelService.getModelByForm(null, id); if (!CollectionUtils.isEmpty(models)) { List lWhProcureModelVoList = Lists.newArrayList(); for (LWhProcureModel model : models) { LWhProcureModelVo lWhProcureModelVo = new LWhProcureModelVo(); BeanUtils.copyProperties(model, lWhProcureModelVo); LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser(); lWhProcureModelUser.setWhProcureModelId(model.getId()); List 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 recordList = this.lWhGoodsRecordService.select(record); List 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> queryTransferInfo(TransferQry transferQry) { HashMap 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> mapGenericPager = this.selectSplit(sql.toString(), paramts, transferQry.getPageNum(), transferQry.getPageSize(), new MapRowMapper()); return mapGenericPager; } }