diff --git a/src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java b/src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java index a03e0ab6..07e5235b 100644 --- a/src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java +++ b/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(); } diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java index edd03d77..7bc080fe 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java +++ b/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 { */ Map loadByNameOrCode(List subjectCodes,Boolean throwInvalidCode); + + /** + * 加载编码 + * @param subjectCodes + * @param param param + * @return + */ + Map loadByCode(List subjectCodes, TbsBudgetBatchBo param); + /** * id加载列表 * @param ids diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java index f5f18e0a..ec260fab 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java +++ b/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 loadByCode(List subjectCodes, TbsBudgetBatchBo param) { + if(CollUtil.isEmpty(subjectCodes)){ + return new HashMap<>(); + } + List subjectList = this.list( + new LambdaQueryWrapper() + .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 subjectMap = new HashMap<>(); + for (BmsSubject subject : subjectList) { + subjectMap.put(subject.getSubjectCode(),subject); + } + return subjectMap; + } + @Override public List listByIds(List ids, List noInIds) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetBatchController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetBatchController.java index ee1f45c3..b5e4177d 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetBatchController.java +++ b/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 getById(@PathVariable("id") String id){ - TbsBudgetBatch tbsBudgetBatch = tbsBudgetBatchService.getById(id); - return R.ok(tbsBudgetBatch); + TbsBudgetBatch budgetBatch = tbsBudgetBatchService.getById(id); + List budgetBatchItemList = budgetBatchItemService.listByBatchId(budgetBatch.getId()); + List 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); } diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetChangeController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetChangeController.java index e57af613..0d2bc7fe 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetChangeController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetChangeController.java @@ -72,22 +72,10 @@ public class TbsBudgetChangeController { * @return */ @GetMapping("/{id}") - public R getList(@PathVariable("id")Long id ){ - TbsBudgetChange budgetChange = tbsBudgetChangeService.getById(id); - List changeScheduleItemList = tbsBudgetChangeScheduleItemService.listByChangeId(budgetChange.getId()); - List changeConditionList = tbsBudgetChangeConditionService.listByChangeId(budgetChange.getId()); - Map> 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 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 getApplyBudget(@PathVariable("id")Long id ){ - TbsBudget budget = tbsBudgetService.getById(id); - LambdaQueryWrapper conditionLqw = new LambdaQueryWrapper<>(); - conditionLqw.eq(TbsBudgetCondition::getBudgetId,id); - conditionLqw.isNull(TbsBudgetCondition::getChangeId); - List conditions = tbsBudgetConditionService.list(conditionLqw); - LambdaQueryWrapper schItemBudgetLqw = new LambdaQueryWrapper<>(); - schItemBudgetLqw.eq(TbsScheduleItemBudget::getBudgetId,id); - List scheduleItemBudgetList = tbsScheduleItemBudgetService.list(schItemBudgetLqw); - TbsBudgetChange budgetChange = TbsBudgetChange.toNewObject(budget); - List budgetChangeConditions = conditions.stream() - .map(TbsBudgetChangeCondition::toNewObject).collect(Collectors.toList()); - List 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 getApplyBudget(@PathVariable("id")String id ){ + TbsBudgetChange budgetChange = tbsBudgetChangeService.getDetailByBudgetId(id); return R.ok(budgetChange); } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java index 22713aa8..af9aa9f5 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java +++ b/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 changeList; public static TbsBudgetBatch toNewObject(TbsBudgetBatch source){ TbsBudgetBatch budgetBatch = new TbsBudgetBatch(); diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java index a1743710..e6423d38 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java +++ b/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 scheduleAmount; + private List errorInfos; + + public List getErrorInfos() { + if(errorInfos==null){ + errorInfos = new ArrayList<>(); + } + return errorInfos; + } } @Data @@ -69,6 +81,8 @@ public class TbsBudgetBatchBo { private BigDecimal preDispatchAmount; + private Object errorInfo; + } } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetChangeService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetChangeService.java index 6550446f..e5c0b08b 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetChangeService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetChangeService.java @@ -17,6 +17,15 @@ import java.util.List; */ public interface TbsBudgetChangeService extends IService { + /** + * 获取详情 + * @param id + * @return + */ + TbsBudgetChange getDetailById(String id); + + TbsBudgetChange getDetailByBudgetId(String budgetId); + /** * 提交修改 * @param param diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java index 1daa94f2..a025e238 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java +++ b/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; } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java index 7114bf22..a6d1737c 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java +++ b/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)); } } 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 773b52cb..d6f7e4c4 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 @@ -77,6 +77,11 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl 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 scheduleNames = paramBudgetList.stream() .map(TbsBudgetBatchBo.BudgetMain::getScheduleName).distinct().collect(Collectors.toList()); - Map scheduleMap = loadScheduleMap(scheduleNames); + Map scheduleMap = loadScheduleMap(scheduleNames,param); //加载 科目 Map subjectMap = loadSubjectMapWithFilterInvalid(param); //加载 成本中心 Map 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 categoryMap = loadGoodsCategoryMap(paramBudgetList); + Map categoryMap = loadGoodsCategoryMap(param); + + //有错误信息退出 + if(param.isErrorFlag()){ + return null; + } //修改的生成为更变记录 List updBudgetList = paramBudgetList.stream() @@ -228,10 +267,10 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl!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 conditionList = this.createTbsBudgetConditions(categoryMap, budgetMain, budgetId); //创建新预算周期 @@ -271,6 +310,9 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl existingConditionList = tbsBudgetConditionService .list(new LambdaQueryWrapper() .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 createTbsBudgetConditions(Map categoryMap, TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId) { List 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 loadGoodsCategoryMap(List paramBudgetList) { + private Map loadGoodsCategoryMap(TbsBudgetBatchBo param) { + List paramBudgetList = param.getBudgetList(); Set 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 goodsCategories = goodsCategoryService.list( new LambdaQueryWrapper() .in(GoodsCategory::getName,goodsCategoryNames) @@ -474,7 +520,16 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpla.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 loadScheduleMap(List scheduleNames) { + private Map loadScheduleMap(List scheduleNames,TbsBudgetBatchBo param) { 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)); + 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 scheduleMap = new HashMap<>(scheduleNames.size()); for (TbsSchedule schedule : schedules) { List 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 loadSubjectMapWithFilterInvalid(TbsBudgetBatchBo param){ - List subjectCodes = param.getBudgetList().stream().filter(a->a.getSubjectName()!=null) - .map(TbsBudgetBatchBo.BudgetMain::getSubjectName) + List 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); } } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeServiceImpl.java index c89dc3f4..a2e5cfc3 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeServiceImpl.java +++ b/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 changeScheduleItemList = tbsBudgetChangeScheduleItemService.listByChangeId(budgetChange.getId()); + List changeConditionList = tbsBudgetChangeConditionService.listByChangeId(budgetChange.getId()); + Map> 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 conditionLqw = new LambdaQueryWrapper<>(); + conditionLqw.eq(TbsBudgetCondition::getBudgetId,budgetId); + conditionLqw.isNull(TbsBudgetCondition::getChangeId); + List conditions = tbsBudgetConditionService.list(conditionLqw); + LambdaQueryWrapper schItemBudgetLqw = new LambdaQueryWrapper<>(); + schItemBudgetLqw.eq(TbsScheduleItemBudget::getBudgetId,budgetId); + List scheduleItemBudgetList = tbsScheduleItemBudgetService.list(schItemBudgetLqw); + TbsBudgetChange budgetChange = TbsBudgetChange.toNewObject(budget); + List budgetChangeConditions = conditions.stream() + .map(TbsBudgetChangeCondition::toNewObject).collect(Collectors.toList()); + List 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 selectChangeVoList(TbsBudgetChangeSo query) { query.setPageSize(PageUtil.getPageSize());