diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java index d28c5aba..1e2eecdd 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java @@ -10,7 +10,11 @@ import com.qs.serve.common.util.*; import com.qs.serve.common.util.model.DateFormatString; import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.service.BmsSubjectService; +import com.qs.serve.modules.goods.common.GoodsType; +import com.qs.serve.modules.goods.entity.GoodsCategory; +import com.qs.serve.modules.goods.entity.GoodsSpu; import com.qs.serve.modules.goods.entity.dto.TbsCenterDto; +import com.qs.serve.modules.goods.service.GoodsCategoryService; import com.qs.serve.modules.seeyon.entity.BaseCreateCallbackBo; import com.qs.serve.modules.seeyon.entity.BaseCreateProcessBo; import com.qs.serve.modules.seeyon.service.SeeYonRequestService; @@ -23,15 +27,13 @@ import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBatchBo; import com.qs.serve.modules.tbs.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import com.qs.serve.modules.tbs.mapper.TbsBudgetBatchMapper; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -53,6 +55,8 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl paramBudgetList = param.getBudgetList(); - TbsBudgetBatch budgetBatch = new TbsBudgetBatch(); budgetBatch.setBatchTitle(sysUser.getName()+"发起了批量导入预算"); budgetBatch.setBatchCode(batchCode); @@ -127,25 +130,22 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl batchItems = new ArrayList<>(); - //加载周期信息 + //加载 周期信息 List scheduleNames = paramBudgetList.stream() - .map(TbsBudgetBatchBo.BudgetMain::getScheduleName).collect(Collectors.toList()); - List schedules = tbsScheduleService.list( - new LambdaQueryWrapper().in(TbsSchedule::getName,scheduleNames) - ); - for (TbsSchedule schedule : schedules) { - List scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId()); - schedule.setScheduleItemlist(scheduleItems); - } - //科目编码加载科目 + .map(TbsBudgetBatchBo.BudgetMain::getScheduleName).distinct().collect(Collectors.toList()); + Map scheduleMap = loadScheduleMap(scheduleNames); + //加载 科目 Map subjectMap = loadSubjectMapWithFilterInvalid(param); - //加载所有的成本中心 + //加载 成本中心 Map centerDtoMap = new HashMap<>(); for (TbsBudgetBatchBo.BudgetMain budgetMain : paramBudgetList) { TbsCenterDto centerDto = tbsCenterDtoService.getCenterDtoByName(budgetMain.getCenterType(),budgetMain.getCenterName(),true); //key=> budgetMain.getCenterType()+"_&_"+budgetMain.getCenterName() centerDtoMap.put(budgetMain.getCenterType()+"_&_"+budgetMain.getCenterName(),centerDto); } + //加载 品类 + Map categoryMap = loadGoodsCategoryMap(paramBudgetList); + //修改的生成为更变记录 List updBudgetList = paramBudgetList.stream() .filter(a->StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList()); @@ -170,7 +170,7 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl() .eq(TbsBudgetCondition::getBudgetId,budgetId) ); + tbsScheduleItemBudgetService.remove( + new LambdaQueryWrapper() + .eq(TbsScheduleItemBudget::getBudgetId,budgetId) + ); + //设置新的值 TbsBudget newBudget = new TbsBudget(); - newBudget.setBudgetCode(paramItem.getBudgetName()); - newBudget.setBudgetNumber(paramItem.getBudgetNumber()); - newBudget.setBudgetState(0); - newBudget.setBudgetCheckState(TbsBudgetCheckState.State_1_apply); - if(StringUtils.hasText(paramItem.getSubjectCode())){ - BmsSubject bmsSubject = subjectMap.get(paramItem.getSubjectCode()); - if(bmsSubject==null){ - - } - newBudget.setSubjectId(bmsSubject.getId()); - newBudget.setSubjectCode(bmsSubject.getSubjectCode()); - newBudget.setSubjectName(bmsSubject.getSubjectName()); + newBudget.setId(budgetId); + TbsSchedule schedule = scheduleMap.get(paramItem.getScheduleName()); + this.initBudget4Update(sysUser,schedule, subjectMap, centerDtoMap, paramItem, newBudget); + //创建新条件 + List conditionList = this.createTbsBudgetConditions(categoryMap, paramItem, budgetId); + //创建新预算周期 + List scheduleItemBudgetList = this.createTbsScheduleItemBudgetList(paramItem, budgetId, schedule); + //数据持久化 + tbsBudgetService.updateById(newBudget); + if(CollectionUtil.isNotEmpty(conditionList)){ + tbsBudgetConditionService.saveBatch(conditionList); } - String centerKey = paramItem.getCenterType()+"_&_"+paramItem.getCenterName(); - TbsCenterDto centerDto = centerDtoMap.get(centerKey); - newBudget.setCenterId(centerDto.getId()); - newBudget.setCenterType(centerDto.getCenterType()); - newBudget.setCenterCode(centerDto.getCenterCode()); - newBudget.setCenterName(centerDto.getCenterName()); - -// newBudget.setScheduleId(); -// newBudget.setScheduleCode(); -// newBudget.setScheduleName(); - //newBudget.setRemark(); - //newBudget.setConditionFlag(); - newBudget.setUserId(sysUser.getId()); - newBudget.setUserCode(sysUser.getCode()); - newBudget.setUserName(sysUser.getName()); - newBudget.setSubmitTime(LocalDateTime.now()); - + tbsScheduleItemBudgetService.saveBatch(scheduleItemBudgetList); } } } //新增的生成为草稿 List addBudgetList = paramBudgetList.stream() .filter(a->!StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList()); - + for (TbsBudgetBatchBo.BudgetMain budgetMain : addBudgetList) { + TbsBudget newBudget = new TbsBudget(); + tbsBudgetService.save(newBudget); + Long budgetId = newBudget.getId(); + TbsSchedule schedule = scheduleMap.get(budgetMain.getScheduleName()); + this.initBudget4Update(sysUser,schedule, subjectMap, centerDtoMap, budgetMain, newBudget); + //创建新条件 + List conditionList = this.createTbsBudgetConditions(categoryMap, budgetMain, budgetId); + //创建新预算周期 + List scheduleItemBudgetList = this.createTbsScheduleItemBudgetList(budgetMain, budgetId, schedule); + //数据持久化 + if(CollectionUtil.isNotEmpty(conditionList)){ + tbsBudgetConditionService.saveBatch(conditionList); + } + tbsScheduleItemBudgetService.saveBatch(scheduleItemBudgetList); + } this.save(budgetBatch); //保存后赋值 Long budgetBatchId = budgetBatch.getId(); @@ -227,6 +230,154 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl createTbsBudgetConditions(Map categoryMap, TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId) { + List conditionList = new ArrayList<>(); + if(StringUtils.hasText(paramItem.getBandNames())){ + String[] values = paramItem.getBandNames().split(","); + for (String value : values) { + GoodsCategory category = categoryMap.get(value); + TbsBudgetCondition budgetCondition = new TbsBudgetCondition(); + budgetCondition.setBudgetId(budgetId); + budgetCondition.setTargetType(GoodsType.Brand.name()); + budgetCondition.setTargetId(category.getId()); + budgetCondition.setTargetCode(category.getCode()); + budgetCondition.setTargetName(category.getName()); + budgetCondition.setTargetLevelPathIds(category.getLevelPath()); + budgetCondition.setTargetLevelPathNames(category.getLevelPathNames()); + conditionList.add(budgetCondition); + } + } + return conditionList; + } + + @NotNull + private List createTbsScheduleItemBudgetList(TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId, TbsSchedule schedule) { + List scheduleItemBudgetList = new ArrayList<>(); + for (TbsScheduleItem scheduleItem : schedule.getScheduleItemlist()) { + for (TbsBudgetBatchBo.BudgetAmount amountItem : paramItem.getScheduleAmount()) { + if(scheduleItem.getItemName().equals(amountItem.getScheduleItemName())){ + TbsScheduleItemBudget scheduleItemBudget = new TbsScheduleItemBudget(); + scheduleItemBudget.setScheduleId(schedule.getId()); + scheduleItemBudget.setScheduleItemId(scheduleItem.getId()); + scheduleItemBudget.setItemName(scheduleItem.getItemName()); + scheduleItemBudget.setStartDate(scheduleItem.getStartDate()); + scheduleItemBudget.setEndDate(scheduleItem.getEndDate()); + scheduleItemBudget.setBudgetId(budgetId); + scheduleItemBudget.setBudgetAmount(amountItem.getBudgetAmount()); + scheduleItemBudget.setPreDispatchAmount(amountItem.getPreDispatchAmount()); + scheduleItemBudget.setPreDispatchAmountFirst(amountItem.getPreDispatchAmount()); + scheduleItemBudgetList.add(scheduleItemBudget); + break; + } + } + } + return scheduleItemBudgetList; + } + + private void initBudget4Update(SysUser sysUser, TbsSchedule schedule, Map subjectMap, Map centerDtoMap, TbsBudgetBatchBo.BudgetMain paramItem, TbsBudget newBudget) { + if(StringUtils.hasText(paramItem.getBudgetName())){ + newBudget.setBudgetCode(paramItem.getBudgetName()); + } + newBudget.setBudgetNumber(paramItem.getBudgetNumber()); + newBudget.setBudgetState(0); + newBudget.setBudgetCheckState(TbsBudgetCheckState.State_1_apply); + if(StringUtils.hasText(paramItem.getSubjectCode())){ + BmsSubject bmsSubject = subjectMap.get(paramItem.getSubjectCode()); + if(bmsSubject==null){ + + } + newBudget.setSubjectId(bmsSubject.getId()); + newBudget.setSubjectCode(bmsSubject.getSubjectCode()); + newBudget.setSubjectName(bmsSubject.getSubjectName()); + } + String centerKey = paramItem.getCenterType()+"_&_"+ paramItem.getCenterName(); + TbsCenterDto centerDto = centerDtoMap.get(centerKey); + newBudget.setCenterId(centerDto.getId()); + newBudget.setCenterType(centerDto.getCenterType()); + newBudget.setCenterCode(centerDto.getCenterCode()); + newBudget.setCenterName(centerDto.getCenterName()); + newBudget.setScheduleId(schedule.getId()); + newBudget.setScheduleCode(schedule.getCode()); + newBudget.setScheduleName(schedule.getName()); + boolean conditionFlag = StringUtils.hasText(paramItem.getCategoryNames()) + ||StringUtils.hasText(paramItem.getSeriesNames()) + ||StringUtils.hasText(paramItem.getBandNames()); + newBudget.setConditionFlag(conditionFlag?0:1); + newBudget.setUserId(sysUser.getId()); + newBudget.setUserCode(sysUser.getCode()); + newBudget.setUserName(sysUser.getName()); + newBudget.setSubmitTime(LocalDateTime.now()); + } + + /** + * 加载类目 + * @param paramBudgetList + * @return + */ + private Map loadGoodsCategoryMap(List paramBudgetList) { + Set goodsCategoryNames = new HashSet<>(); + for (TbsBudgetBatchBo.BudgetMain budgetMain : paramBudgetList) { + String bandNames = budgetMain.getBandNames(); + String categoryNames = budgetMain.getCategoryNames(); + String seriesNames = budgetMain.getSeriesNames(); + initCategorySet(goodsCategoryNames, bandNames); + initCategorySet(goodsCategoryNames, categoryNames); + initCategorySet(goodsCategoryNames, seriesNames); + } + List goodsCategories = goodsCategoryService.list( + new LambdaQueryWrapper().in(GoodsCategory::getName,goodsCategoryNames) + ); + if(goodsCategories.size()!= goodsCategoryNames.size()){ + for (String categoryName : goodsCategoryNames) { + boolean exist = goodsCategories.stream().anyMatch(a->a.getName().equals(categoryName)); + if(!exist){ + Assert.throwEx("无效的品类:"+categoryName); + } + } + } + Map categoryMap = new HashMap<>(goodsCategories.size()); + for (GoodsCategory category : goodsCategories) { + categoryMap.put(category.getName(),category); + } + return categoryMap; + } + + /** + * 初始化set + * @param goodsCategories + * @param categoryString + */ + private void initCategorySet(Set goodsCategories, String categoryString) { + if(StringUtils.hasText(categoryString)){ + String[] values = categoryString + .replace(",",",") + .split(","); + goodsCategories.addAll(Arrays.asList(values)); + } + } + + private Map loadScheduleMap(List scheduleNames) { + List schedules = tbsScheduleService.list( + new LambdaQueryWrapper().in(TbsSchedule::getName, scheduleNames) + ); + if(scheduleNames.size()!=schedules.size()){ + for (String scheduleName : scheduleNames) { + boolean exist = schedules.stream().anyMatch(a->a.getName().equals(scheduleName)); + if(!exist){ + Assert.throwEx("预算周期不存在:["+scheduleName+"]"); + } + } + } + Map scheduleMap = new HashMap<>(scheduleNames.size()); + for (TbsSchedule schedule : schedules) { + List scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId()); + schedule.setScheduleItemlist(scheduleItems); + scheduleMap.put(schedule.getName(),schedule); + } + return scheduleMap; + } + /** * 加载param的所有科目(过滤无效的) * @param param