Browse Source

暂存批量导入预算审批

v1.0
Yen 2 years ago
parent
commit
b14733f40e
  1. 211
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java

211
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<TbsBudgetBatchMapper,
private final TbsCenterDtoService tbsCenterDtoService;
private final TbsScheduleService tbsScheduleService;
private final TbsScheduleItemService tbsScheduleItemService;
private final TbsScheduleItemBudgetService tbsScheduleItemBudgetService;
private final GoodsCategoryService goodsCategoryService;
@Override
@Transactional(rollbackFor = Exception.class)
@ -113,7 +117,6 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
public TbsBudgetBatch buildBatchData(TbsBudgetBatchBo param,String batchCode,SysUser sysUser){
List<TbsBudgetBatchBo.BudgetMain> paramBudgetList = param.getBudgetList();
TbsBudgetBatch budgetBatch = new TbsBudgetBatch();
budgetBatch.setBatchTitle(sysUser.getName()+"发起了批量导入预算");
budgetBatch.setBatchCode(batchCode);
@ -129,23 +132,20 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
List<TbsBudgetBatchItem> batchItems = new ArrayList<>();
//加载 周期信息
List<String> scheduleNames = paramBudgetList.stream()
.map(TbsBudgetBatchBo.BudgetMain::getScheduleName).collect(Collectors.toList());
List<TbsSchedule> schedules = tbsScheduleService.list(
new LambdaQueryWrapper<TbsSchedule>().in(TbsSchedule::getName,scheduleNames)
);
for (TbsSchedule schedule : schedules) {
List<TbsScheduleItem> scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId());
schedule.setScheduleItemlist(scheduleItems);
}
//科目编码加载科目
.map(TbsBudgetBatchBo.BudgetMain::getScheduleName).distinct().collect(Collectors.toList());
Map<String,TbsSchedule> scheduleMap = loadScheduleMap(scheduleNames);
//加载 科目
Map<String,BmsSubject> subjectMap = loadSubjectMapWithFilterInvalid(param);
//加载所有的成本中心
//加载 成本中心
Map<String,TbsCenterDto> 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<String,GoodsCategory> categoryMap = loadGoodsCategoryMap(paramBudgetList);
//修改的生成为更变记录
List<TbsBudgetBatchBo.BudgetMain> updBudgetList = paramBudgetList.stream()
.filter(a->StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList());
@ -170,7 +170,7 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
break;
}
}
Long budgetId = budget.getId();
final Long budgetId = budget.getId();
if(budget.getBudgetState().equals(1)){
//生成更变记录
@ -181,8 +181,104 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
new LambdaQueryWrapper<TbsBudgetCondition>()
.eq(TbsBudgetCondition::getBudgetId,budgetId)
);
tbsScheduleItemBudgetService.remove(
new LambdaQueryWrapper<TbsScheduleItemBudget>()
.eq(TbsScheduleItemBudget::getBudgetId,budgetId)
);
//设置新的值
TbsBudget newBudget = new TbsBudget();
newBudget.setId(budgetId);
TbsSchedule schedule = scheduleMap.get(paramItem.getScheduleName());
this.initBudget4Update(sysUser,schedule, subjectMap, centerDtoMap, paramItem, newBudget);
//创建新条件
List<TbsBudgetCondition> conditionList = this.createTbsBudgetConditions(categoryMap, paramItem, budgetId);
//创建新预算周期
List<TbsScheduleItemBudget> scheduleItemBudgetList = this.createTbsScheduleItemBudgetList(paramItem, budgetId, schedule);
//数据持久化
tbsBudgetService.updateById(newBudget);
if(CollectionUtil.isNotEmpty(conditionList)){
tbsBudgetConditionService.saveBatch(conditionList);
}
tbsScheduleItemBudgetService.saveBatch(scheduleItemBudgetList);
}
}
}
//新增的生成为草稿
List<TbsBudgetBatchBo.BudgetMain> 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<TbsBudgetCondition> conditionList = this.createTbsBudgetConditions(categoryMap, budgetMain, budgetId);
//创建新预算周期
List<TbsScheduleItemBudget> scheduleItemBudgetList = this.createTbsScheduleItemBudgetList(budgetMain, budgetId, schedule);
//数据持久化
if(CollectionUtil.isNotEmpty(conditionList)){
tbsBudgetConditionService.saveBatch(conditionList);
}
tbsScheduleItemBudgetService.saveBatch(scheduleItemBudgetList);
}
this.save(budgetBatch);
//保存后赋值
Long budgetBatchId = budgetBatch.getId();
return null;
}
@NotNull
private List<TbsBudgetCondition> createTbsBudgetConditions(Map<String, GoodsCategory> categoryMap, TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId) {
List<TbsBudgetCondition> 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<TbsScheduleItemBudget> createTbsScheduleItemBudgetList(TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId, TbsSchedule schedule) {
List<TbsScheduleItemBudget> 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<String, BmsSubject> subjectMap, Map<String, TbsCenterDto> 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);
@ -201,30 +297,85 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
newBudget.setCenterType(centerDto.getCenterType());
newBudget.setCenterCode(centerDto.getCenterCode());
newBudget.setCenterName(centerDto.getCenterName());
// newBudget.setScheduleId();
// newBudget.setScheduleCode();
// newBudget.setScheduleName();
//newBudget.setRemark();
//newBudget.setConditionFlag();
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<String,GoodsCategory> loadGoodsCategoryMap(List<TbsBudgetBatchBo.BudgetMain> paramBudgetList) {
Set<String> 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<GoodsCategory> goodsCategories = goodsCategoryService.list(
new LambdaQueryWrapper<GoodsCategory>().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);
}
}
//新增的生成为草稿
List<TbsBudgetBatchBo.BudgetMain> addBudgetList = paramBudgetList.stream()
.filter(a->!StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList());
this.save(budgetBatch);
//保存后赋值
Long budgetBatchId = budgetBatch.getId();
}
Map<String,GoodsCategory> 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<String> goodsCategories, String categoryString) {
if(StringUtils.hasText(categoryString)){
String[] values = categoryString
.replace(",",",")
.split(",");
goodsCategories.addAll(Arrays.asList(values));
}
}
return null;
private Map<String,TbsSchedule> loadScheduleMap(List<String> scheduleNames) {
List<TbsSchedule> schedules = tbsScheduleService.list(
new LambdaQueryWrapper<TbsSchedule>().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<String,TbsSchedule> scheduleMap = new HashMap<>(scheduleNames.size());
for (TbsSchedule schedule : schedules) {
List<TbsScheduleItem> scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId());
schedule.setScheduleItemlist(scheduleItems);
scheduleMap.put(schedule.getName(),schedule);
}
return scheduleMap;
}
/**

Loading…
Cancel
Save