package com.consum.base.service; import cn.hutool.core.convert.Convert; import com.consum.base.core.CodeGeneratorEnum; import com.consum.base.core.CodeGeneratorService; import com.consum.base.core.utils.MapperUtil; import com.consum.base.pojo.DepFormScrappedGoodsParam; import com.consum.base.pojo.DepFormScrappedModelParam; import com.consum.base.pojo.LDeptFormScrappedParam; import com.consum.base.pojo.query.LDeptFormScrappedQry; import com.consum.model.po.*; import com.iplatform.model.po.S_user_core; import com.walker.db.page.GenericPager; import com.walker.infrastructure.utils.CollectionUtils; import com.walker.infrastructure.utils.DateUtils; import com.walker.infrastructure.utils.NumberGenerator; import com.walker.infrastructure.utils.StringUtils; import com.walker.jdbc.service.BaseServiceImpl; import com.walker.web.ResponseValue; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @ClassName DepFormScrappedServiceImpl * @Author cy * @Date 2023/11/30 * @Description * @Version 1.0 **/ @Service public class DepFormScrappedServiceImpl extends BaseServiceImpl { @Resource private CodeGeneratorService codeGeneratorService; @Resource private FinSysTenantDepartmentServiceImpl departmentService; @Resource private LWhFormTransferServiceImpl lWhFormTransferService; @Resource private BaseCategoryServiceImpl baseCategoryService; @Resource private SDictDataServiceImpl sDictDataService; @Resource private BaseGoodsModelsServiceImpl baseGoodsModelsService; @Transactional public ResponseValue add(LDeptFormScrappedParam param, S_user_core currentUser, FinSysTenantUser sysInfo) { long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis()); //1.新增报废单记录 DepFormScrapped lDeptFormScrapped = new DepFormScrapped(); //报废单id long lWhFormScrappedId = NumberGenerator.getLongSequenceNumber(); lDeptFormScrapped.setId(lWhFormScrappedId); lDeptFormScrapped.setBusinessFormCode(codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Scrapped)); lDeptFormScrapped.setProcureDoc(param.getProcureDoc()); lDeptFormScrapped.setOutWarehouseType(1); lDeptFormScrapped.setOutWarehouseId(param.getDepartmentId()); // 查询部门名称 FinSysTenantDepartment sysTenantDepartment = departmentService.getById(param.getDepartmentId()); if (sysTenantDepartment == null) { log.error("部门不存在"); return ResponseValue.error("部门不存在"); } lDeptFormScrapped.setOutWarehouseName(sysTenantDepartment.getName()); lDeptFormScrapped.setOperatorId(sysInfo.getSysUserId()); lDeptFormScrapped.setOperatorName(sysInfo.getUserName()); lDeptFormScrapped.setDealTime(param.getDealTime()); lDeptFormScrapped.setAgencyId(Long.valueOf(sysInfo.getTenantId())); lDeptFormScrapped.setAgencyName(sysInfo.getTenantName()); //根据部门id查询部门 FinSysTenantDepartment department = this.departmentService.getById(sysInfo.getSysDeptId()); if (department != null) { lDeptFormScrapped.setDepartmentId(sysInfo.getSysDeptId()); lDeptFormScrapped.setDepartmentName(department.getName()); } lDeptFormScrapped.setCreateTime(dealTime); lDeptFormScrapped.setStates(1); //2.报废单物品【DEP_FORM_SCRAPPED_GOODS】 List scrappedGoodsInfo = param.getGoods(); if (CollectionUtils.isEmpty(scrappedGoodsInfo)) { return ResponseValue.error("报废单物品不能为空"); } ArrayList scrappedGoodsArrayList = new ArrayList<>(); ArrayList modelArrayList = new ArrayList<>(); for (DepFormScrappedGoodsParam depFormScrappedGoodsParam : scrappedGoodsInfo) { DepFormScrappedGoods depFormScrappedGoods = new DepFormScrappedGoods(); depFormScrappedGoods.setId(NumberGenerator.getLongSequenceNumber()); depFormScrappedGoods.setDepFormScrappedId(lWhFormScrappedId); depFormScrappedGoods.setBaseGoodsTemplateId(depFormScrappedGoodsParam.getBaseGoodsTemplateId()); depFormScrappedGoods.setBaseGoodsTemplateName(depFormScrappedGoodsParam.getGoodsTemplateName()); // 分类信息 Long baseCategoryId = depFormScrappedGoodsParam.getBaseCategoryId(); BaseCategory baseCategory = baseCategoryService.get(new BaseCategory(baseCategoryId)); if (baseCategory != null) { depFormScrappedGoods.setCategoryName(baseCategory.getCategoryName()); depFormScrappedGoods.setClassification(baseCategory.getClassification()); } // 查询分发单信息 Long transBusinessId = depFormScrappedGoodsParam.getTransBusinessId(); LWhFormTransfer lWhFormTransfer = lWhFormTransferService.get(new LWhFormTransfer(transBusinessId)); if (lWhFormTransfer == null) { return ResponseValue.error("报废单物品不能为空"); } depFormScrappedGoods.setTransBusinessId(transBusinessId); depFormScrappedGoods.setBusinessFormCode(lWhFormTransfer.getBusinessFormCode()); depFormScrappedGoods.setTransOutWarehouseId(lWhFormTransfer.getOutWarehouseId()); depFormScrappedGoods.setTransOutWarehouseType(lWhFormTransfer.getOutWarehouseType()); // 型号信息 List modelList = depFormScrappedGoodsParam.getModels(); if (CollectionUtils.isEmpty(modelList)) { return ResponseValue.error("报废单物品型号不能为空"); } //获取报废原因code List scrappedCodeList = modelList.stream().map(params -> params.getScrappedCode()).collect(Collectors.toList()); //根据报废原因code查询数据字典 List SDictDataList = sDictDataService.selectByScrappedCodeList(scrappedCodeList); Map scrappedNameMap = SDictDataList.stream().collect(Collectors.toMap(s -> s.getDict_code(), s -> s.getDict_label())); for (DepFormScrappedModelParam depFormScrappedModelParam : modelList) { DepFormScrappedModel depFormScrappedModel = new DepFormScrappedModel(); depFormScrappedModel.setId(NumberGenerator.getLongSequenceNumber()); depFormScrappedModel.setDepFormScrappedId(lWhFormScrappedId); depFormScrappedModel.setDepFormScrappedGoodsId(depFormScrappedGoods.getId()); //报废原因 depFormScrappedModel.setScrappedCode(depFormScrappedModelParam.getScrappedCode()); depFormScrappedModel.setScrappedName(scrappedNameMap.get(depFormScrappedModel.getScrappedCode())); // 物品 及 型号 信息 Long baseGoodsModelsId = depFormScrappedModelParam.getBaseGoodsModelsId(); if (baseGoodsModelsId == null) { return ResponseValue.error("报废单物品型号不能为空"); } List> modelInfoList = baseGoodsModelsService.queryGoodsModelInfo(baseGoodsModelsId); if (CollectionUtils.isEmpty(modelInfoList)) { return ResponseValue.error("未查询到报废单物品型号"); } Map modelInfo = modelInfoList.get(0); depFormScrappedModel.setBaseGoodsTemplateId(Convert.toLong(modelInfo.get("goodsId"))); depFormScrappedModel.setBaseGoodsTemplateName(Convert.toStr(modelInfo.get("goodsName"))); depFormScrappedModel.setClassification(Convert.toStr(modelInfo.get("type"))); depFormScrappedModel.setUnit(Convert.toStr(modelInfo.get("unit"))); depFormScrappedModel.setBaseGoodsModelsId(baseGoodsModelsId); depFormScrappedModel.setBaseGoodsModelsName(Convert.toStr(modelInfo.get("modelName"))); //调拨单信息 depFormScrappedModel.setProcureModelUserId(depFormScrappedModelParam.getModelUserId()); depFormScrappedModel.setGoodsUserName(depFormScrappedModelParam.getNowUserName()); depFormScrappedModel.setInitialCount(depFormScrappedModelParam.getGoodsNum()); depFormScrappedModel.setUseCount(depFormScrappedModelParam.getUserUseCount()); depFormScrappedModel.setCounts(depFormScrappedModelParam.getCounts()); //增加到批量插入list modelArrayList.add(depFormScrappedModel); } //增加到批量插入list scrappedGoodsArrayList.add(depFormScrappedGoods); } int flag1 = this.insert(lDeptFormScrapped); if (flag1 == 0) { log.error("新增报废单失败"); return ResponseValue.error("新增报废单失败"); } int i = insertBatch(scrappedGoodsArrayList); int i2 = insertBatch(modelArrayList); return ResponseValue.success(); } /** * @Description 列表查询 */ private static String QUERY_LIST = "SELECT scrap.id,scrap.BUSINESS_FORM_CODE,scrap.DEPARTMENT_NAME,scrap.OPERATOR_NAME,scrap.DEAL_TIME,model.BASE_GOODS_TEMPLATE_ID,model.BASE_GOODS_TEMPLATE_NAME,SUM(model.COUNTS) total_Count FROM DEP_FORM_SCRAPPED scrap LEFT JOIN DEP_FORM_SCRAPPED_MODEL model ON scrap.id=model.DEP_FORM_SCRAPPED_ID where 1=1"; private static String QUERY_LIST_END = " GROUP BY scrap.id,scrap.BUSINESS_FORM_CODE,scrap.DEPARTMENT_NAME,scrap.OPERATOR_NAME,scrap.DEAL_TIME,model.BASE_GOODS_TEMPLATE_ID,model.BASE_GOODS_TEMPLATE_NAME ORDER BY scrap.DEAL_TIME DESC"; public GenericPager> queryList(LDeptFormScrappedQry param) { HashMap paramts = new HashMap<>(); StringBuilder sql = new StringBuilder(QUERY_LIST); //报废单号 if (!StringUtils.isEmpty(param.getBusinessFormCode())) { sql.append(" and scrap.BUSINESS_FORM_CODE = :businessFormCode "); paramts.put("businessFormCode", param.getBusinessFormCode()); } //机构 sql.append(" and scrap.AGENCY_ID = :agencyId "); if (param.getAgencyId() != null) { paramts.put("agencyId", param.getAgencyId()); } //物品名称 if (!StringUtils.isEmpty(param.getGoodsTemplateName())) { sql.append(" and model.BASE_GOODS_TEMPLATE_NAME LIKE :goodsTemplateName "); paramts.put("goodsTemplateName", StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT); } //创建人 if (!StringUtils.isEmpty(param.getOperatorName())) { sql.append(" and scrap.OPERATOR_NAME LIKE :operatorName "); paramts.put("operatorName", StringUtils.CHAR_PERCENT + param.getOperatorName() + StringUtils.CHAR_PERCENT); } //报废时间 if (param.getStartTime() != null) { sql.append(" and scrap.DEAL_TIME >=:dealTimeStart "); paramts.put("dealTimeStart", param.getStartTime() * 1000000); } if (param.getEndTime() != null) { sql.append(" and scrap.DEAL_TIME <:dealTimeEnd "); paramts.put("dealTimeEnd", param.getEndTime() * 1000000 + 240000); } sql.append(QUERY_LIST_END); return selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapperUtil()); } }