|
|
@ -1,5 +1,6 @@ |
|
|
|
package com.qs.serve.modules.tbs.service.impl; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
|
import com.qs.serve.common.config.properties.ProjectProperties; |
|
|
|
import com.qs.serve.common.framework.manager.AsyncFactory; |
|
|
@ -7,6 +8,9 @@ import com.qs.serve.common.framework.manager.AsyncManager; |
|
|
|
import com.qs.serve.common.model.dto.R; |
|
|
|
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.entity.dto.TbsCenterDto; |
|
|
|
import com.qs.serve.modules.seeyon.entity.BaseCreateCallbackBo; |
|
|
|
import com.qs.serve.modules.seeyon.entity.BaseCreateProcessBo; |
|
|
|
import com.qs.serve.modules.seeyon.service.SeeYonRequestService; |
|
|
@ -14,20 +18,21 @@ import com.qs.serve.modules.sys.entity.SysUser; |
|
|
|
import com.qs.serve.modules.sys.service.SysUserService; |
|
|
|
import com.qs.serve.modules.tbs.common.TbsBudgetCheckState; |
|
|
|
import com.qs.serve.modules.tbs.common.TbsSeeYonConst; |
|
|
|
import com.qs.serve.modules.tbs.entity.TbsBudgetBatchItem; |
|
|
|
import com.qs.serve.modules.tbs.entity.*; |
|
|
|
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.springframework.stereotype.Service; |
|
|
|
import com.qs.serve.modules.tbs.entity.TbsBudgetBatch; |
|
|
|
import com.qs.serve.modules.tbs.service.TbsBudgetBatchService; |
|
|
|
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.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
|
* 批量申请 服务实现类 |
|
|
@ -42,32 +47,24 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper, |
|
|
|
private final SysUserService sysUserService; |
|
|
|
private final SeeYonRequestService seeYonService; |
|
|
|
private final ProjectProperties projectProperties; |
|
|
|
private final TbsBudgetService tbsBudgetService; |
|
|
|
private final TbsBudgetConditionService tbsBudgetConditionService; |
|
|
|
private final BmsSubjectService bmsSubjectService; |
|
|
|
private final TbsCenterDtoService tbsCenterDtoService; |
|
|
|
private final TbsScheduleService tbsScheduleService; |
|
|
|
private final TbsScheduleItemService tbsScheduleItemService; |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public Object commit(TbsBudgetBatchBo param) { |
|
|
|
|
|
|
|
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); |
|
|
|
String batchCode = CodeGenUtil.generate(CodeGenUtil.SourceKey.BudgetBatch); |
|
|
|
String templateCode = TbsSeeYonConst.BudgetBatchApplyConf.Code(); |
|
|
|
//构建Batch
|
|
|
|
TbsBudgetBatch budgetBatch = new TbsBudgetBatch(); |
|
|
|
budgetBatch.setBatchTitle(sysUser.getName()+"发起了批量导入预算"); |
|
|
|
budgetBatch.setBatchCode(batchCode); |
|
|
|
budgetBatch.setBatchState(TbsBudgetCheckState.State_0_unPublish); |
|
|
|
//budgetBatch.setSyFormId();
|
|
|
|
budgetBatch.setUserId(sysUser.getId()); |
|
|
|
budgetBatch.setUserCode(sysUser.getCode()); |
|
|
|
budgetBatch.setUserName(sysUser.getName()); |
|
|
|
budgetBatch.setSubmitTime(LocalDateTime.now()); |
|
|
|
budgetBatch.setRemark(param.getRemark()); |
|
|
|
|
|
|
|
TbsBudgetBatch budgetBatch = buildBatchData(param, batchCode, sysUser); |
|
|
|
//保存后赋值
|
|
|
|
Long budgetBatchId = budgetBatch.getId(); |
|
|
|
//新增的生成为草稿
|
|
|
|
//修改的生成为更变记录
|
|
|
|
|
|
|
|
//构建BatchItems
|
|
|
|
List<TbsBudgetBatchItem> batchItems = new ArrayList<>(); |
|
|
|
|
|
|
|
Map<String,Object> data = new HashMap<>(); |
|
|
|
data.put("exsp5", batchCode); |
|
|
@ -112,5 +109,135 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper, |
|
|
|
AsyncManager.me().execute(AsyncFactory.submitBudgetBatch(budgetBatchId+"")); |
|
|
|
return budgetBatch; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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); |
|
|
|
budgetBatch.setBatchState(TbsBudgetCheckState.State_0_unPublish); |
|
|
|
//budgetBatch.setSyFormId();
|
|
|
|
budgetBatch.setUserId(sysUser.getId()); |
|
|
|
budgetBatch.setUserCode(sysUser.getCode()); |
|
|
|
budgetBatch.setUserName(sysUser.getName()); |
|
|
|
budgetBatch.setSubmitTime(LocalDateTime.now()); |
|
|
|
budgetBatch.setRemark(param.getRemark()); |
|
|
|
|
|
|
|
//构建BatchItems
|
|
|
|
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<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); |
|
|
|
} |
|
|
|
//修改的生成为更变记录
|
|
|
|
List<TbsBudgetBatchBo.BudgetMain> updBudgetList = paramBudgetList.stream() |
|
|
|
.filter(a->StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList()); |
|
|
|
if(updBudgetList.size()>0){ |
|
|
|
List<String> budgetNumbers = updBudgetList.stream() |
|
|
|
.map(TbsBudgetBatchBo.BudgetMain::getBudgetNumber).collect(Collectors.toList()); |
|
|
|
List<TbsBudget> budgetList = tbsBudgetService.list( |
|
|
|
new LambdaQueryWrapper<TbsBudget>().in( |
|
|
|
TbsBudget::getBudgetNumber,budgetNumbers |
|
|
|
) |
|
|
|
); |
|
|
|
for (TbsBudget budget : budgetList) { |
|
|
|
if(budget.getBudgetCheckState()==TbsBudgetCheckState.State_1_apply){ |
|
|
|
Assert.throwEx("预算["+budget.getBudgetCode()+"]审批中,无法导入修改"); |
|
|
|
} |
|
|
|
} |
|
|
|
for (TbsBudget budget : budgetList) { |
|
|
|
TbsBudgetBatchBo.BudgetMain paramItem = null; |
|
|
|
for (TbsBudgetBatchBo.BudgetMain budgetMain : updBudgetList) { |
|
|
|
if(budgetMain.getBudgetNumber().equals(budget.getBudgetNumber())){ |
|
|
|
paramItem = budgetMain; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
Long budgetId = budget.getId(); |
|
|
|
if(budget.getBudgetState().equals(1)){ |
|
|
|
//生成更变记录
|
|
|
|
|
|
|
|
}else { |
|
|
|
//修改后为新增类型提交
|
|
|
|
tbsBudgetService.removeById(budgetId); |
|
|
|
tbsBudgetConditionService.remove( |
|
|
|
new LambdaQueryWrapper<TbsBudgetCondition>() |
|
|
|
.eq(TbsBudgetCondition::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()); |
|
|
|
} |
|
|
|
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()); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//新增的生成为草稿
|
|
|
|
List<TbsBudgetBatchBo.BudgetMain> addBudgetList = paramBudgetList.stream() |
|
|
|
.filter(a->!StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList()); |
|
|
|
|
|
|
|
this.save(budgetBatch); |
|
|
|
//保存后赋值
|
|
|
|
Long budgetBatchId = budgetBatch.getId(); |
|
|
|
|
|
|
|
|
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 加载param的所有科目(过滤无效的) |
|
|
|
* @param param |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private Map<String,BmsSubject> loadSubjectMapWithFilterInvalid(TbsBudgetBatchBo param){ |
|
|
|
List<String> subjectCodes = param.getBudgetList().stream().filter(a->a.getSubjectCode()!=null) |
|
|
|
.map(TbsBudgetBatchBo.BudgetMain::getSubjectCode) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
return bmsSubjectService.loadByCodes(subjectCodes,true); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|