Browse Source

批量导入预算审批(添加页面相关接口);

v1.0
Yen 2 years ago
parent
commit
80bd0f1c98
  1. 17
      src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java
  2. 10
      src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java
  3. 31
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java
  4. 23
      src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetBatchController.java
  5. 40
      src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetChangeController.java
  6. 3
      src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java
  7. 18
      src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java
  8. 9
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetChangeService.java
  9. 2
      src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java
  10. 19
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java
  11. 121
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java
  12. 56
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeServiceImpl.java

17
src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java

@ -15,6 +15,7 @@ import com.qs.serve.modules.tbs.entity.TbsBudget;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo;
import com.qs.serve.modules.tbs.service.impl.TbsBudgetApplyOperationServiceImpl;
import com.qs.serve.modules.tbs.service.impl.TbsBudgetBatchOperationServiceImpl;
import com.qs.serve.modules.tbs.service.impl.TbsCostApplyOperationServiceImpl;
import com.qs.serve.modules.tzc.service.impl.TzcPolicyOperationServiceImpl;
import com.qs.serve.modules.vtb.common.VtbVerificationState;
@ -133,27 +134,27 @@ public class AsyncFactory {
AuthContextUtils.setTenant("001");
log.debug("--------------------------SubmitBudgetApply CallbackTimer Sleep Start------------------------------");
Thread.sleep(7*1000);
/*TbsBudgetApplyOperationServiceImpl applyOperationService = SpringUtils.getBean(TbsBudgetApplyOperationServiceImpl.class);
TbsBudgetBatchOperationServiceImpl operationService = SpringUtils.getBean(TbsBudgetBatchOperationServiceImpl.class);
String summeryResult = applyOperationService.checkAffairSummery(budgetId);
String summeryResult = operationService.checkAffairSummery(batchId);
if(summeryResult.equals(SeeYonOperationService.SummeryState_Success)){
DataAffairCommitService commitService = SpringUtils.getBean(DataAffairCommitService.class);
// 获取最后一条审批判断结果:TbsAffairCommitBo.state 0-否定,1-同意,2-退回
Integer state = commitService.getState(applyOperationService.getTemplateCode(),budgetId+"");
Integer state = commitService.getState(operationService.getTemplateCode(),batchId+"");
//调用成功回调方法
TbsAffairCommitBo doParam = new TbsAffairCommitBo();
doParam.setTargetId(budgetId);
doParam.setTargetId(batchId);
if (state==null||state==1){
applyOperationService.doFinished(doParam);
operationService.doFinished(doParam);
}else if (state==2){
applyOperationService.doCommitBacked(budgetId);
operationService.doCommitBacked(batchId);
}else if (state==0){
applyOperationService.doRefuse(doParam);
operationService.doRefuse(doParam);
}
}
log.debug("--------------------------SubmitBudgetApply CallbackTimer summeryResult:{} ------------------------------",summeryResult);
*/
} catch (Exception e) {
e.printStackTrace();
}

10
src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java

@ -2,6 +2,7 @@ package com.qs.serve.modules.bms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.bms.entity.BmsSubject;
import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBatchBo;
import java.util.List;
import java.util.Map;
@ -21,6 +22,15 @@ public interface BmsSubjectService extends IService<BmsSubject> {
*/
Map<String,BmsSubject> loadByNameOrCode(List<String> subjectCodes,Boolean throwInvalidCode);
/**
* 加载编码
* @param subjectCodes
* @param param param
* @return
*/
Map<String,BmsSubject> loadByCode(List<String> subjectCodes, TbsBudgetBatchBo param);
/**
* id加载列表
* @param ids

31
src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java

@ -1,10 +1,12 @@
package com.qs.serve.modules.bms.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.util.Assert;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.modules.bms.entity.BmsRegion2;
import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBatchBo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -51,6 +53,35 @@ public class BmsSubjectServiceImpl extends ServiceImpl<BmsSubjectMapper,BmsSubje
return subjectMap;
}
@Override
public Map<String, BmsSubject> loadByCode(List<String> subjectCodes, TbsBudgetBatchBo param) {
if(CollUtil.isEmpty(subjectCodes)){
return new HashMap<>();
}
List<BmsSubject> subjectList = this.list(
new LambdaQueryWrapper<BmsSubject>()
.in(BmsSubject::getSubjectCode,subjectCodes)
);
if(subjectCodes.size()>subjectList.size()){
for (String subjectCode : subjectCodes) {
boolean exist = subjectList.stream().anyMatch(a->a.getSubjectCode().equals(subjectCode));
if(!exist){
for (TbsBudgetBatchBo.BudgetMain budgetMain : param.getBudgetList()) {
if(budgetMain.getSubjectCode().equals(subjectCode)){
budgetMain.getErrorInfos().add("无效的科目编码:"+subjectCode);
param.setErrorFlag(true);
}
}
}
}
}
Map<String,BmsSubject> subjectMap = new HashMap<>();
for (BmsSubject subject : subjectList) {
subjectMap.put(subject.getSubjectCode(),subject);
}
return subjectMap;
}
@Override
public List<BmsSubject> listByIds(List<Long> ids, List<Long> noInIds) {
LambdaQueryWrapper<BmsSubject> lqw = new LambdaQueryWrapper<>();

23
src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetBatchController.java

@ -11,9 +11,13 @@ import com.qs.serve.common.util.PageUtil;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.seeyon.entity.bo.CtpAddNodeParam;
import com.qs.serve.modules.tbs.entity.TbsBudgetBatchItem;
import com.qs.serve.modules.tbs.entity.TbsBudgetChange;
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo;
import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBatchBo;
import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo;
import com.qs.serve.modules.tbs.service.TbsBudgetBatchItemService;
import com.qs.serve.modules.tbs.service.TbsBudgetChangeService;
import com.qs.serve.modules.tbs.service.impl.TbsBudgetBatchOperationServiceImpl;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -24,6 +28,7 @@ import com.qs.serve.modules.tbs.entity.TbsBudgetBatch;
import com.qs.serve.modules.tbs.service.TbsBudgetBatchService;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
/**
@ -39,6 +44,8 @@ public class TbsBudgetBatchController {
private TbsBudgetBatchService tbsBudgetBatchService;
private TbsBudgetBatchOperationServiceImpl budgetBatchOperationService;
private final TbsBudgetBatchItemService budgetBatchItemService;
private final TbsBudgetChangeService tbsBudgetChangeService;
/**
@ -75,8 +82,20 @@ public class TbsBudgetBatchController {
@SysLog(module = SystemModule.Budget, title = "批量申请", biz = BizType.QUERY)
@PreAuthorize("hasRole('tbs:budgetBatch:query')")
public R<TbsBudgetBatch> getById(@PathVariable("id") String id){
TbsBudgetBatch tbsBudgetBatch = tbsBudgetBatchService.getById(id);
return R.ok(tbsBudgetBatch);
TbsBudgetBatch budgetBatch = tbsBudgetBatchService.getById(id);
List<TbsBudgetBatchItem> budgetBatchItemList = budgetBatchItemService.listByBatchId(budgetBatch.getId());
List<TbsBudgetChange> changeList = new ArrayList<>();
for (TbsBudgetBatchItem batchItem : budgetBatchItemList) {
if(batchItem.getChangeId()!=null){
TbsBudgetChange budgetChange = tbsBudgetChangeService.getDetailById(batchItem.getChangeId().toString());
changeList.add(budgetChange);
}else {
TbsBudgetChange budgetChange = tbsBudgetChangeService.getDetailByBudgetId(batchItem.getBudgetId().toString());
changeList.add(budgetChange);
}
}
budgetBatch.setChangeList(changeList);
return R.ok(budgetBatch);
}

40
src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetChangeController.java

@ -72,22 +72,10 @@ public class TbsBudgetChangeController {
* @return
*/
@GetMapping("/{id}")
public R<TbsBudgetChange> getList(@PathVariable("id")Long id ){
TbsBudgetChange budgetChange = tbsBudgetChangeService.getById(id);
List<TbsBudgetChangeScheduleItem> changeScheduleItemList = tbsBudgetChangeScheduleItemService.listByChangeId(budgetChange.getId());
List<TbsBudgetChangeCondition> changeConditionList = tbsBudgetChangeConditionService.listByChangeId(budgetChange.getId());
Map<Integer,List<TbsBudgetChangeCondition>> map = changeConditionList.stream().collect(Collectors.groupingBy(TbsBudgetChangeCondition::getSourceFlag));
budgetChange.setChangeScheduleItemList(changeScheduleItemList);
budgetChange.setChangeConditionList(map.get(0));
budgetChange.setOrgConditionList(map.get(1));
if(budgetChange.getNewAttachIds()!=null&&budgetChange.getNewAttachIds().length>0){
budgetChange.setNewAttachInfos(sysAttachService.listByIds(Arrays.asList(budgetChange.getNewAttachIds())));
}
if(budgetChange.getOrgAttachIds()!=null&&budgetChange.getOrgAttachIds().length>0){
budgetChange.setOrgAttachInfos(sysAttachService.listByIds(Arrays.asList(budgetChange.getOrgAttachIds())));
}
public R<TbsBudgetChange> getList(@PathVariable("id")String id ){
TbsBudgetChange budgetChange = tbsBudgetChangeService.getDetailById(id);
if (budgetChange.getBudgetCheckState().equals(TbsBudgetCheckState.State_1_apply)){
AsyncManager.me().execute(AsyncFactory.submitBudgetChange(budgetChange.getId()+""));
AsyncManager.me().execute(AsyncFactory.submitBudgetChange(id));
}
return R.ok(budgetChange);
}
@ -98,26 +86,8 @@ public class TbsBudgetChangeController {
* @return
*/
@GetMapping("/apply/{id}")
public R<TbsBudgetChange> getApplyBudget(@PathVariable("id")Long id ){
TbsBudget budget = tbsBudgetService.getById(id);
LambdaQueryWrapper<TbsBudgetCondition> conditionLqw = new LambdaQueryWrapper<>();
conditionLqw.eq(TbsBudgetCondition::getBudgetId,id);
conditionLqw.isNull(TbsBudgetCondition::getChangeId);
List<TbsBudgetCondition> conditions = tbsBudgetConditionService.list(conditionLqw);
LambdaQueryWrapper<TbsScheduleItemBudget> schItemBudgetLqw = new LambdaQueryWrapper<>();
schItemBudgetLqw.eq(TbsScheduleItemBudget::getBudgetId,id);
List<TbsScheduleItemBudget> scheduleItemBudgetList = tbsScheduleItemBudgetService.list(schItemBudgetLqw);
TbsBudgetChange budgetChange = TbsBudgetChange.toNewObject(budget);
List<TbsBudgetChangeCondition> budgetChangeConditions = conditions.stream()
.map(TbsBudgetChangeCondition::toNewObject).collect(Collectors.toList());
List<TbsBudgetChangeScheduleItem> budgetChangeScheduleItemList = scheduleItemBudgetList.stream()
.map(TbsBudgetChangeScheduleItem::toNewObject).collect(Collectors.toList());
budgetChange.setChangeScheduleItemList(budgetChangeScheduleItemList);
budgetChange.setChangeConditionList(budgetChangeConditions);
if(budget.getAttachIds()!=null&&budget.getAttachIds().length>0){
budgetChange.setNewAttachIds(budget.getAttachIds());
budgetChange.setNewAttachInfos(sysAttachService.listByIds(Arrays.asList(budget.getAttachIds())));
}
public R<TbsBudgetChange> getApplyBudget(@PathVariable("id")String id ){
TbsBudgetChange budgetChange = tbsBudgetChangeService.getDetailByBudgetId(id);
return R.ok(budgetChange);
}

3
src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java

@ -4,6 +4,7 @@ import java.time.LocalDate;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -108,6 +109,8 @@ public class TbsBudgetBatch implements Serializable {
@JsonProperty
private String delFlag;
@TableField(exist = false)
private List<TbsBudgetChange> changeList;
public static TbsBudgetBatch toNewObject(TbsBudgetBatch source){
TbsBudgetBatch budgetBatch = new TbsBudgetBatch();

18
src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java

@ -1,9 +1,11 @@
package com.qs.serve.modules.tbs.entity.bo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author YenHex
@ -12,6 +14,8 @@ import java.util.List;
@Data
public class TbsBudgetBatchBo {
@JsonIgnore
private boolean errorFlag;
private String remark;
@ -29,7 +33,7 @@ public class TbsBudgetBatchBo {
private String scheduleName;
/** 科目编码 */
private String subjectName;
private String subjectCode;
/** 成本中心类型:
* center,
@ -45,7 +49,7 @@ public class TbsBudgetBatchBo {
private String centerName;
/** 品牌名称 */
private String bandNames;
private String brandNames;
/** 类目名称 */
private String categoryNames;
@ -58,6 +62,14 @@ public class TbsBudgetBatchBo {
*/
List<BudgetAmount> scheduleAmount;
private List<Object> errorInfos;
public List<Object> getErrorInfos() {
if(errorInfos==null){
errorInfos = new ArrayList<>();
}
return errorInfos;
}
}
@Data
@ -69,6 +81,8 @@ public class TbsBudgetBatchBo {
private BigDecimal preDispatchAmount;
private Object errorInfo;
}
}

9
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetChangeService.java

@ -17,6 +17,15 @@ import java.util.List;
*/
public interface TbsBudgetChangeService extends IService<TbsBudgetChange> {
/**
* 获取详情
* @param id
* @return
*/
TbsBudgetChange getDetailById(String id);
TbsBudgetChange getDetailByBudgetId(String budgetId);
/**
* 提交修改
* @param param

2
src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java

@ -107,7 +107,7 @@ public class TbsCenterDtoService {
}
return new TbsCenterDto(bizRegion.getId(),bizRegion.getCode(),bizRegion.getName(),centerType);
}
Assert.throwEx("无法匹配成本中心类型:"+centerType);
//Assert.throwEx("无法匹配成本中心类型:"+centerType);
return null;
}

19
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java

@ -1,6 +1,8 @@
package com.qs.serve.modules.tbs.service.impl;
import com.qs.serve.common.config.properties.ProjectProperties;
import com.qs.serve.common.framework.manager.AsyncFactory;
import com.qs.serve.common.framework.manager.AsyncManager;
import com.qs.serve.common.util.Assert;
import com.qs.serve.modules.bms.service.BmsSubjectService;
import com.qs.serve.modules.goods.service.GoodsCategoryService;
@ -34,21 +36,7 @@ public class TbsBudgetBatchOperationServiceImpl implements SeeYonOperationServic
private final TbsBudgetBatchService budgetBatchService;
private final TbsBudgetBatchItemService budgetBatchItemService;
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;
private final TbsScheduleItemBudgetService tbsScheduleItemBudgetService;
private final GoodsCategoryService goodsCategoryService;
private final TbsBudgetChangeService tbsBudgetChangeService;
private final TbsBudgetChangeConditionService tbsBudgetChangeConditionService;
private final TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper;
private final TbsBudgetChangeScheduleItemService tbsBudgetChangeScheduleItemService;
private final TbsBudgetChangeOperationServiceImpl changeOperationService;
@Override
@ -126,7 +114,8 @@ public class TbsBudgetBatchOperationServiceImpl implements SeeYonOperationServic
@Override
public void doCommitBacked(String targetId) {
//补偿接口
AsyncManager.me().execute(AsyncFactory.submitBudgetBatch(targetId));
}
}

121
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java

@ -77,6 +77,11 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
String templateCode = TbsSeeYonConst.BudgetBatchApplyConf.Code();
//构建Batch
TbsBudgetBatch budgetBatch = buildBatchData(param, batchCode, sysUser);
if(budgetBatch==null){
return param;
}
//保存后赋值
Long budgetBatchId = budgetBatch.getId();
@ -124,9 +129,34 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
return budgetBatch;
}
public TbsBudgetBatch buildBatchData(TbsBudgetBatchBo param,String batchCode,SysUser sysUser){
List<TbsBudgetBatchBo.BudgetMain> paramBudgetList = param.getBudgetList();
for (TbsBudgetBatchBo.BudgetMain budgetMain : paramBudgetList) {
if(!StringUtils.hasText(budgetMain.getScheduleName())){
budgetMain.getErrorInfos().add("预算周期名称不能为空");
param.setErrorFlag(true);
}
if(!StringUtils.hasText(budgetMain.getBudgetName())){
budgetMain.getErrorInfos().add("预算名称不能为空");
param.setErrorFlag(true);
}
if(!StringUtils.hasText(budgetMain.getCenterType())){
budgetMain.getErrorInfos().add("成本中心类型不能为空");
param.setErrorFlag(true);
}
if(!StringUtils.hasText(budgetMain.getCenterType())){
budgetMain.getErrorInfos().add("成本中心不能为空");
param.setErrorFlag(true);
}
for (TbsBudgetBatchBo.BudgetAmount budgetAmount : budgetMain.getScheduleAmount()) {
if(budgetAmount.getBudgetAmount()==null){
budgetAmount.setBudgetAmount(BigDecimal.ZERO);
}
if(budgetAmount.getPreDispatchAmount()==null){
budgetAmount.setPreDispatchAmount(BigDecimal.ZERO);
}
}
}
TbsBudgetBatch budgetBatch = new TbsBudgetBatch();
budgetBatch.setBatchTitle(sysUser.getName()+"发起了批量导入预算");
budgetBatch.setBatchCode(batchCode);
@ -142,18 +172,27 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
//加载 周期信息
List<String> scheduleNames = paramBudgetList.stream()
.map(TbsBudgetBatchBo.BudgetMain::getScheduleName).distinct().collect(Collectors.toList());
Map<String,TbsSchedule> scheduleMap = loadScheduleMap(scheduleNames);
Map<String,TbsSchedule> scheduleMap = loadScheduleMap(scheduleNames,param);
//加载 科目
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);
TbsCenterDto centerDto = tbsCenterDtoService.getCenterDtoByName(budgetMain.getCenterType(),budgetMain.getCenterName(),false);
if(centerDto==null){
budgetMain.getErrorInfos().add("无效的成本中心:"+budgetMain.getCenterType()+" "+budgetMain.getCenterName());
param.setErrorFlag(true);
}
//key=> budgetMain.getCenterType()+"_&_"+budgetMain.getCenterName()
centerDtoMap.put(budgetMain.getCenterType()+"_&_"+budgetMain.getCenterName(),centerDto);
}
//加载 品类
Map<String,GoodsCategory> categoryMap = loadGoodsCategoryMap(paramBudgetList);
Map<String,GoodsCategory> categoryMap = loadGoodsCategoryMap(param);
//有错误信息退出
if(param.isErrorFlag()){
return null;
}
//修改的生成为更变记录
List<TbsBudgetBatchBo.BudgetMain> updBudgetList = paramBudgetList.stream()
@ -228,10 +267,10 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
.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);
tbsBudgetService.save(newBudget);
Long budgetId = newBudget.getId();
//创建新条件
List<TbsBudgetCondition> conditionList = this.createTbsBudgetConditions(categoryMap, budgetMain, budgetId);
//创建新预算周期
@ -271,6 +310,9 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
//设置新的值
TbsBudget newBudget = new TbsBudget();
newBudget.setId(budgetId);
newBudget.setUserId(sysUser.getId());
newBudget.setUserCode(sysUser.getCode());
newBudget.setUserName(sysUser.getName());
TbsSchedule schedule = scheduleMap.get(paramItem.getScheduleName());
this.initBudget4Update(sysUser,schedule, subjectMap, centerDtoMap, paramItem, newBudget);
//创建新条件
@ -290,7 +332,7 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
List<TbsBudgetCondition> existingConditionList = tbsBudgetConditionService
.list(new LambdaQueryWrapper<TbsBudgetCondition>()
.eq(TbsBudgetCondition::getBudgetId, budgetId));
String bandNames = paramItem.getBandNames();
String bandNames = paramItem.getBrandNames();
String categoryNames = paramItem.getCategoryNames();
String seriesNames = paramItem.getSeriesNames();
//设置changeConditionList参数
@ -372,8 +414,8 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
@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(",");
if(StringUtils.hasText(paramItem.getBrandNames())){
String[] values = paramItem.getBrandNames().split(",");
for (String value : values) {
GoodsCategory category = categoryMap.get(value);
TbsBudgetCondition budgetCondition = new TbsBudgetCondition();
@ -421,8 +463,8 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
newBudget.setBudgetNumber(paramItem.getBudgetNumber());
newBudget.setBudgetState(0);
newBudget.setBudgetCheckState(TbsBudgetCheckState.State_1_apply);
if(StringUtils.hasText(paramItem.getSubjectName())){
BmsSubject bmsSubject = subjectMap.get(paramItem.getSubjectName());
if(StringUtils.hasText(paramItem.getSubjectCode())){
BmsSubject bmsSubject = subjectMap.get(paramItem.getSubjectCode());
if(bmsSubject==null){
}
@ -441,7 +483,7 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
newBudget.setScheduleName(schedule.getName());
boolean conditionFlag = StringUtils.hasText(paramItem.getCategoryNames())
||StringUtils.hasText(paramItem.getSeriesNames())
||StringUtils.hasText(paramItem.getBandNames());
||StringUtils.hasText(paramItem.getBrandNames());
newBudget.setConditionFlag(conditionFlag?0:1);
newBudget.setUserId(sysUser.getId());
newBudget.setUserCode(sysUser.getCode());
@ -451,19 +493,23 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
/**
* 加载类目
* @param paramBudgetList
* @param param
* @return
*/
private Map<String,GoodsCategory> loadGoodsCategoryMap(List<TbsBudgetBatchBo.BudgetMain> paramBudgetList) {
private Map<String,GoodsCategory> loadGoodsCategoryMap(TbsBudgetBatchBo param) {
List<TbsBudgetBatchBo.BudgetMain> paramBudgetList = param.getBudgetList();
Set<String> goodsCategoryNames = new HashSet<>();
for (TbsBudgetBatchBo.BudgetMain budgetMain : paramBudgetList) {
String bandNames = budgetMain.getBandNames();
String bandNames = budgetMain.getBrandNames();
String categoryNames = budgetMain.getCategoryNames();
String seriesNames = budgetMain.getSeriesNames();
initCategorySet(goodsCategoryNames, bandNames);
initCategorySet(goodsCategoryNames, categoryNames);
initCategorySet(goodsCategoryNames, seriesNames);
}
if(goodsCategoryNames.size()<1){
return new HashMap<>();
}
List<GoodsCategory> goodsCategories = goodsCategoryService.list(
new LambdaQueryWrapper<GoodsCategory>()
.in(GoodsCategory::getName,goodsCategoryNames)
@ -474,7 +520,16 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
for (String categoryName : goodsCategoryNames) {
boolean exist = goodsCategories.stream().anyMatch(a->a.getName().equals(categoryName));
if(!exist){
Assert.throwEx("无效的品类:"+categoryName);
//Assert.throwEx("无效的品类:"+categoryName);
for (TbsBudgetBatchBo.BudgetMain budgetMain : paramBudgetList) {
boolean bandNamesFlag = budgetMain.getBrandNames() != null && budgetMain.getBrandNames().contains(categoryName);
boolean categoryNamesFlag = budgetMain.getCategoryNames() != null && budgetMain.getCategoryNames().contains(categoryName);
boolean seriesNamesFlag = budgetMain.getSeriesNames() != null && budgetMain.getSeriesNames().contains(categoryName);
if(bandNamesFlag||categoryNamesFlag||seriesNamesFlag){
budgetMain.getErrorInfos().add("无效的品类:"+categoryName);
param.setErrorFlag(true);
}
}
}
}
}
@ -499,21 +554,41 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
}
}
private Map<String,TbsSchedule> loadScheduleMap(List<String> scheduleNames) {
private Map<String,TbsSchedule> loadScheduleMap(List<String> scheduleNames,TbsBudgetBatchBo param) {
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));
boolean exist = schedules.stream()
.filter(b->b.getName()!=null)
.anyMatch(a->a.getName().equals(scheduleName));
if(!exist){
Assert.throwEx("预算周期不存在:["+scheduleName+"]");
for (TbsBudgetBatchBo.BudgetMain budgetMain : param.getBudgetList()) {
if(budgetMain.getScheduleName()!=null&&budgetMain.getScheduleName().equals(scheduleName)){
budgetMain.getErrorInfos().add("预算周期不存在:"+scheduleName);
param.setErrorFlag(true);
break;
}
}
}
}
}
Map<String,TbsSchedule> scheduleMap = new HashMap<>(scheduleNames.size());
for (TbsSchedule schedule : schedules) {
List<TbsScheduleItem> scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId());
for (TbsBudgetBatchBo.BudgetMain budgetMain : param.getBudgetList()) {
if(budgetMain.getScheduleName().equals(schedule.getName())){
for (TbsBudgetBatchBo.BudgetAmount budgetAmount : budgetMain.getScheduleAmount()) {
String scheduleItemName = budgetAmount.getScheduleItemName();
boolean exist = scheduleItems.stream().anyMatch(item -> scheduleItemName.equals(item.getItemName()));
if(!exist){
budgetAmount.setErrorInfo("周期项不存在:"+scheduleItemName);
param.setErrorFlag(true);
}
}
}
}
schedule.setScheduleItemlist(scheduleItems);
scheduleMap.put(schedule.getName(),schedule);
}
@ -521,15 +596,15 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
}
/**
* 加载param的所有科目过滤无效的
* 加载param的所有科目
* @param param
* @return
*/
private Map<String,BmsSubject> loadSubjectMapWithFilterInvalid(TbsBudgetBatchBo param){
List<String> subjectCodes = param.getBudgetList().stream().filter(a->a.getSubjectName()!=null)
.map(TbsBudgetBatchBo.BudgetMain::getSubjectName)
List<String> subjectCodes = param.getBudgetList().stream().filter(a->StringUtils.hasText(a.getSubjectCode()))
.map(TbsBudgetBatchBo.BudgetMain::getSubjectCode)
.collect(Collectors.toList());
return bmsSubjectService.loadByNameOrCode(subjectCodes,true);
return bmsSubjectService.loadByCode(subjectCodes,param);
}
}

56
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeServiceImpl.java

@ -12,6 +12,7 @@ import com.qs.serve.modules.seeyon.entity.BaseCreateCallbackBo;
import com.qs.serve.modules.seeyon.entity.BaseCreateProcessBo;
import com.qs.serve.modules.seeyon.service.SeeYonRequestService;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.service.SysAttachService;
import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.common.TbsBudgetCheckState;
import com.qs.serve.modules.tbs.common.TbsSeeYonConst;
@ -23,17 +24,14 @@ import com.qs.serve.modules.tbs.entity.bo.TbsBudgetUpdateAfterStartBo;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount;
import com.qs.serve.modules.tbs.entity.so.TbsBudgetChangeSo;
import com.qs.serve.modules.tbs.mapper.*;
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.service.TbsBudgetChangeService;
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;
/**
@ -55,6 +53,54 @@ public class TbsBudgetChangeServiceImpl extends ServiceImpl<TbsBudgetChangeMappe
private final SeeYonRequestService seeYonService;
private final ProjectProperties projectProperties;
private final TbsBudgetChangeScheduleItemService tbsBudgetChangeScheduleItemService;
private final TbsBudgetChangeConditionService tbsBudgetChangeConditionService;
private final SysAttachService sysAttachService;
private final TbsBudgetConditionService tbsBudgetConditionService;
private final TbsScheduleItemBudgetService tbsScheduleItemBudgetService;
@Override
public TbsBudgetChange getDetailById(String id) {
TbsBudgetChange budgetChange = this.getById(id);
List<TbsBudgetChangeScheduleItem> changeScheduleItemList = tbsBudgetChangeScheduleItemService.listByChangeId(budgetChange.getId());
List<TbsBudgetChangeCondition> changeConditionList = tbsBudgetChangeConditionService.listByChangeId(budgetChange.getId());
Map<Integer,List<TbsBudgetChangeCondition>> map = changeConditionList.stream().collect(Collectors.groupingBy(TbsBudgetChangeCondition::getSourceFlag));
budgetChange.setChangeScheduleItemList(changeScheduleItemList);
budgetChange.setChangeConditionList(map.get(0));
budgetChange.setOrgConditionList(map.get(1));
if(budgetChange.getNewAttachIds()!=null&&budgetChange.getNewAttachIds().length>0){
budgetChange.setNewAttachInfos(sysAttachService.listByIds(Arrays.asList(budgetChange.getNewAttachIds())));
}
if(budgetChange.getOrgAttachIds()!=null&&budgetChange.getOrgAttachIds().length>0){
budgetChange.setOrgAttachInfos(sysAttachService.listByIds(Arrays.asList(budgetChange.getOrgAttachIds())));
}
return budgetChange;
}
@Override
public TbsBudgetChange getDetailByBudgetId(String budgetId) {
TbsBudget budget = tbsBudgetMapper.selectById(budgetId);
LambdaQueryWrapper<TbsBudgetCondition> conditionLqw = new LambdaQueryWrapper<>();
conditionLqw.eq(TbsBudgetCondition::getBudgetId,budgetId);
conditionLqw.isNull(TbsBudgetCondition::getChangeId);
List<TbsBudgetCondition> conditions = tbsBudgetConditionService.list(conditionLqw);
LambdaQueryWrapper<TbsScheduleItemBudget> schItemBudgetLqw = new LambdaQueryWrapper<>();
schItemBudgetLqw.eq(TbsScheduleItemBudget::getBudgetId,budgetId);
List<TbsScheduleItemBudget> scheduleItemBudgetList = tbsScheduleItemBudgetService.list(schItemBudgetLqw);
TbsBudgetChange budgetChange = TbsBudgetChange.toNewObject(budget);
List<TbsBudgetChangeCondition> budgetChangeConditions = conditions.stream()
.map(TbsBudgetChangeCondition::toNewObject).collect(Collectors.toList());
List<TbsBudgetChangeScheduleItem> budgetChangeScheduleItemList = scheduleItemBudgetList.stream()
.map(TbsBudgetChangeScheduleItem::toNewObject).collect(Collectors.toList());
budgetChange.setChangeScheduleItemList(budgetChangeScheduleItemList);
budgetChange.setChangeConditionList(budgetChangeConditions);
if(budget.getAttachIds()!=null&&budget.getAttachIds().length>0){
budgetChange.setNewAttachIds(budget.getAttachIds());
budgetChange.setNewAttachInfos(sysAttachService.listByIds(Arrays.asList(budget.getAttachIds())));
}
return null;
}
@Override
public List<TbsBudgetChangeVo> selectChangeVoList(TbsBudgetChangeSo query) {
query.setPageSize(PageUtil.getPageSize());

Loading…
Cancel
Save