From 57a4f9e3745ed4ca7413ea7188b3a81f93293359 Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 20 Dec 2022 11:25:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=AF=94=E9=A2=84=E7=AE=97=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3,=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/qs/serve/Application.java | 2 + .../exception/UnifiedExceptionHandler.java | 4 +- .../seeyon/entity/CtpAffairCommit.java | 2 + .../service/impl/SeeYonServiceImpl.java | 9 +- .../controller/TbsCostApplyController.java | 32 +++ .../modules/tbs/entity/TbsCostApply.java | 3 + .../tbs/entity/TbsScheduleItemBudget.java | 1 + .../tbs/entity/bo/TbsCostApplyActivityBo.java | 24 ++ .../tbs/entity/vo/TbsBudgetMatchVo.java | 123 ++++++++++ .../TbsActivityApplicationService.java | 225 ++++-------------- src/main/java/com/qs/serve/task/TbsTask.java | 19 ++ 11 files changed, 262 insertions(+), 182 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyActivityBo.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetMatchVo.java diff --git a/src/main/java/com/qs/serve/Application.java b/src/main/java/com/qs/serve/Application.java index a8e4d274..33d2ef84 100644 --- a/src/main/java/com/qs/serve/Application.java +++ b/src/main/java/com/qs/serve/Application.java @@ -1,6 +1,8 @@ package com.qs.serve; import com.qs.serve.common.config.DevEnvironmentConfig; +import com.qs.serve.task.TbsTask; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java b/src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java index 00f2e14b..8b3bcbe5 100644 --- a/src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java +++ b/src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java @@ -80,7 +80,9 @@ public class UnifiedExceptionHandler { @ResponseBody public R handleDevPrintMsgException(Exception e) { log.warn("参数校验异常:{}",e.getMessage()); - if(DevEnvironmentConfig.isDev()){return R.error(e.getMessage());} + if(DevEnvironmentConfig.isDev()){ + return R.error(e.getMessage()); + } return R.error(); } diff --git a/src/main/java/com/qs/serve/modules/seeyon/entity/CtpAffairCommit.java b/src/main/java/com/qs/serve/modules/seeyon/entity/CtpAffairCommit.java index 91c2126f..64417729 100644 --- a/src/main/java/com/qs/serve/modules/seeyon/entity/CtpAffairCommit.java +++ b/src/main/java/com/qs/serve/modules/seeyon/entity/CtpAffairCommit.java @@ -19,6 +19,8 @@ public class CtpAffairCommit { */ private String memberId; + private String member; + private String comment; private String formCode; diff --git a/src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonServiceImpl.java b/src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonServiceImpl.java index 3fb634bc..cd0bf3cc 100644 --- a/src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonServiceImpl.java @@ -76,13 +76,8 @@ public class SeeYonServiceImpl implements SeeYonService { param.setState(affairCommit.getState()); param.setAffairId(affairCommit.getAffairId()); param.setComment(affairCommit.getComment()); - if(affairCommit.getState().equals(1)){ - param.setMemberId(sysUser.getSyUserId()); - }else if(affairCommit.getState().equals(0)){ - param.setMemberId(sysUser.getSyAccount()); - }else { - Assert.throwEx("param err2"); - } + param.setMemberId(sysUser.getSyUserId()); + param.setMember(sysUser.getSyAccount()); R result = this.affairCommit(param); return result; } diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java index 2c517cf2..1c8f1393 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java @@ -24,7 +24,9 @@ import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.common.TbsSeeYonConst; import com.qs.serve.modules.tbs.common.util.TbsBudgetCostUtil; import com.qs.serve.modules.tbs.entity.*; +import com.qs.serve.modules.tbs.entity.bo.TbsActivityBo; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; +import com.qs.serve.modules.tbs.entity.bo.TbsCostApplyActivityBo; import com.qs.serve.modules.tbs.entity.bo.TbsCostApplyBo; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; @@ -35,6 +37,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.Nullable; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -224,6 +227,35 @@ public class TbsCostApplyController { return R.ok(entity); } + /** + * 根据模板,新增费用及活动 + * @param param + * @return + */ + @PostMapping("/saveWithActivity") + @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.INSERT) + @PreAuthorize("hasRole('tbs:costApply:insert')") + @Transactional(rollbackFor = Exception.class) + public R save(@RequestBody @Valid TbsCostApplyActivityBo param){ + TbsCostApplyBo costApplyBo = param.getCostApplyBo(); + ValidateTools.valid(costApplyBo); + TbsCostApply entity = CopierUtil.copy(costApplyBo,new TbsCostApply()); + BmsSupplier supplier = bmsSupplierService.getById(entity.getSupplierId()); + entity.setTemplateId(param.getTemplateId()); + entity.setSupplierCode(supplier.getCode()); + entity.setSupplierName(supplier.getName()); + SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); + entity.setUserId(sysUser.getId()); + entity.setUserCode(sysUser.getCode()); + entity.setUserName(sysUser.getName()); + tbsCostApplyService.save(entity); + TbsActivityBo activityBo = param.getActivityBo(); + activityBo.setCostApplyId(entity.getId()); + ValidateTools.valid(activityBo); + tbsActivityService.modify(activityBo); + return R.ok(entity); + } + /** * 删除 * @param id diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java index ff5cf486..ee917eb3 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java @@ -114,6 +114,9 @@ public class TbsCostApply implements Serializable { /** 统计所有活动使用的金额 */ private BigDecimal totalActivityUsedAmount; + /** 模板id */ + private Long templateId; + @TableField(exist = false) private String affairId; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java index 61dfd21b..b413f2b0 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsScheduleItemBudget.java @@ -99,5 +99,6 @@ public class TbsScheduleItemBudget implements Serializable { @JsonProperty private String delFlag; + } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyActivityBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyActivityBo.java new file mode 100644 index 00000000..34b18bda --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyActivityBo.java @@ -0,0 +1,24 @@ +package com.qs.serve.modules.tbs.entity.bo; + +import com.qs.serve.modules.tbs.entity.TbsCostApply; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author YenHex + * @since 2022/12/19 + */ +@Data +public class TbsCostApplyActivityBo { + + @NotNull + TbsCostApplyBo costApplyBo; + + @NotNull + TbsActivityBo activityBo; + + @NotNull + Long templateId; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetMatchVo.java b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetMatchVo.java new file mode 100644 index 00000000..17b4138c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsBudgetMatchVo.java @@ -0,0 +1,123 @@ +package com.qs.serve.modules.tbs.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author YenHex + * @since 2022/12/20 + */ +@Data +public class TbsBudgetMatchVo { + + /** + * 预算列表 + */ + private List budgetVoList; + + /** 预算金额 */ + private BigDecimal totalAmount; + + /** 预算已使用金额 */ + private BigDecimal usedAmount; + + @Data + public static class BudgetVo{ + /** 预算编码 */ + private String budgetCode; + + /** 费用启用状态 0/1 */ + private Integer budgetState; + + /** 科目id */ + @NotNull(message = "科目id不能为空") + private Long subjectId; + + /** 科目编码 */ + @NotBlank(message = "科目编码不能为空") + @Length(max = 30,message = "科目编码长度不能超过30字") + private String subjectCode; + + /** 科目名称 */ + @NotBlank(message = "科目名称不能为空") + @Length(max = 30,message = "科目名称长度不能超过30字") + private String subjectName; + + /** 成本中心id */ + @NotNull(message = "成本中心id不能为空") + private String centerId; + + @NotNull(message = "成本中心类型不能为空") + private String centerType; + + /** 成本中心编码 */ + @NotBlank(message = "成本中心编码不能为空") + @Length(max = 30,message = "成本中心编码长度不能超过30字") + private String centerCode; + + /** 成本中心名称 */ + @NotBlank(message = "成本中心名称不能为空") + @Length(max = 30,message = "成本中心名称长度不能超过30字") + private String centerName; + + /** 考核期id */ + @NotNull(message = "考核期id不能为空") + private Long scheduleId; + + /** 考核期编码 */ + @NotBlank(message = "考核期编码不能为空") + @Length(max = 30,message = "考核期编码长度不能超过30字") + private String scheduleCode; + + /** 考核期名称 */ + @NotBlank(message = "考核期名称不能为空") + @Length(max = 30,message = "考核期名称长度不能超过30字") + private String scheduleName; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 命中的考核期 */ + List itemBudgetVoList; + + /** 预算金额 */ + private BigDecimal totalAmount; + + /** 历史已用金额 */ + private BigDecimal totalHisAmount; + } + + @Data + public static class ItemBudgetVo{ + + /** 考核编码 */ + private String itemName; + + /** 开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime startDate; + + /** 结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime endDate; + + /** 预算金额 */ + private BigDecimal budgetAmount; + + /** 历史已用金额 */ + private BigDecimal hisAmount; + + /** 备注 */ + private String remark; + } + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityApplicationService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityApplicationService.java index 7ce30d6b..41b0102f 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityApplicationService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityApplicationService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.model.consts.SysConfigKey; import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.common.util.CopierUtil; import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.service.BmsSupplierService; @@ -14,6 +15,7 @@ import com.qs.serve.modules.tbs.common.util.TbsBudgetCostUtil; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.TbsActivityBo; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; +import com.qs.serve.modules.tbs.entity.vo.TbsBudgetMatchVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.mapper.TbsActivityGoodsMapper; import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; @@ -53,8 +55,7 @@ public class TbsActivityApplicationService { * @param activityBo * @return */ - public TbsBudgetCostResult matchBudgetCostResult(Boolean throwEx, TbsActivityBo activityBo){ - BmsSupplier supplier = supplierService.getById(activityBo.getSupplierId()); + public TbsBudgetMatchVo matchBudgetCostResult(Boolean throwEx, TbsActivityBo activityBo){ //允许超出预算标识 boolean overspend = configService.getByKey(SysConfigKey.TbsBudgetOverspend).getConfigValue().equals("1"); //考核期有关的预算id,判断逻辑为活动需要允许在 @@ -71,14 +72,6 @@ public class TbsActivityApplicationService { .collect(Collectors.groupingBy(TbsBudgetCostItem::getScheduleItemBudgetId)); List activityGoodsList = activityService.buildActGoodsList(activityBo,null,null); //构建预算费用占用明细 - Map subjectMap = new HashMap<>(); - List activitySubjects = new ArrayList<>(); - List activityCenterList = new ArrayList<>(); - Map centerDtoMap = new HashMap<>(); - activityService.initSubjectAndCenter(activityBo,subjectMap,centerDtoMap,activitySubjects,activityCenterList,null,null); - Map checkAmountMap = new HashMap<>(); - List activityCenterGoodsList = new ArrayList<>(); - activityService.initCenterGoods(activityBo,subjectMap,centerDtoMap,checkAmountMap,activityGoodsList,activityCenterGoodsList,null,new TbsActivity(),supplier); // 加载所有条件 List budgetList = new ArrayList<>(); if(budgetIds.size()>0){ @@ -90,53 +83,77 @@ public class TbsActivityApplicationService { List noConditionBudgetList = new ArrayList<>(); boolean budgetNoCondition = this.loadConditionByBudgetsAndMatch(budgetList, noConditionBudgetList); //预算条件需包含活动条件, Map结构:活动id->满足的预算id列表 - List activityAllowBudgetIds = this.buildActivityBudgetMap(activityCenterGoodsList, budgetList, noConditionBudgetList); + List activityAllowBudgetIds = this.buildActivityBudgetMap(activityGoodsList, budgetList, noConditionBudgetList); //活动拦截 this.handleNoBudgetActivity(throwEx, overspend, budgetNoCondition,activityAllowBudgetIds); - //统计当前活动前置项占用预算 - Map counterMap = new HashMap<>(); - //匹配预算主要方法 - final List actMatchList = new ArrayList<>(); - final List actUnMatchList = new ArrayList<>(); - for (TbsActivityCenterGoods activityCostItem : activityCenterGoodsList) { - this.matchActivityMain(activityCostItem,throwEx, overspend, scheduleItemList, hisCostGroupByItemBudget, budgetList, - noConditionBudgetList, counterMap, actMatchList, actUnMatchList,activityAllowBudgetIds); + Map> scheduleItemBudgetMap = scheduleItemList.stream() + .collect(Collectors.groupingBy(TbsScheduleItemBudget::getBudgetId)); + TbsBudgetMatchVo budgetMatchVo = new TbsBudgetMatchVo(); + BigDecimal totalAllAmount = BigDecimal.ZERO; + BigDecimal totalAllHisAmount = BigDecimal.ZERO; + if(CollectionUtil.isNotEmpty(activityAllowBudgetIds)){ + TbsBudget budget = null; + List matchVos = new ArrayList<>(); + for (Long allowBudgetId : activityAllowBudgetIds) { + for (TbsBudget budget2 : budgetList) { + if(allowBudgetId.equals(budget2.getId())){ + budget = budget2; + } + break; + } + if(budget!=null){ + BigDecimal totalBudgetAmount = BigDecimal.ZERO; + BigDecimal totalBudgetHisAmount = BigDecimal.ZERO; + List itemBudgets = scheduleItemBudgetMap.get(budget.getId()); + List itemBudgetVoList = new ArrayList<>(); + for (TbsScheduleItemBudget itemBudget : itemBudgets) { + List hisCostItems = hisCostGroupByItemBudget.get(itemBudget.getId()); + BigDecimal totalItemBudgetHis = TbsBudgetCostUtil.totalHisCost(hisCostItems); + totalBudgetHisAmount = totalBudgetHisAmount.add(totalBudgetHisAmount); + totalBudgetAmount = totalBudgetAmount.add(itemBudget.getBudgetAmount()); + + TbsBudgetMatchVo.ItemBudgetVo itemBudgetVo = CopierUtil.copy(itemBudget,new TbsBudgetMatchVo.ItemBudgetVo()); + itemBudgetVo.setHisAmount(totalItemBudgetHis); + itemBudgetVoList.add(itemBudgetVo); + } + TbsBudgetMatchVo.BudgetVo matchVo = CopierUtil.copy(budget,new TbsBudgetMatchVo.BudgetVo()); + matchVo.setTotalAmount(totalBudgetAmount); + matchVo.setTotalHisAmount(totalBudgetHisAmount); + matchVo.setItemBudgetVoList(itemBudgetVoList); + matchVos.add(matchVo); + totalAllAmount = totalAllAmount.add(totalBudgetAmount); + totalAllHisAmount = totalBudgetHisAmount.add(totalBudgetHisAmount); + } + } + budgetMatchVo.setBudgetVoList(matchVos); + budgetMatchVo.setUsedAmount(totalAllHisAmount); + budgetMatchVo.setTotalAmount(totalAllAmount); } - List budgetMatchList = actMatchList.stream() - .map(TbsActivityCenterGoods::toBudgetCostItem).collect(Collectors.toList()); - List budgetUnMatchList = actUnMatchList.stream() - .map(TbsActivityCenterGoods::toBudgetCostItem).collect(Collectors.toList()); - TbsBudgetCostResult result = new TbsBudgetCostResult(); - result.setBudgetMatchList(budgetMatchList); - result.setBudgetUnMatchList(budgetUnMatchList); - return result; + return budgetMatchVo; } /** * 预算条件需包含活动条件, Map结构:活动id->满足的预算id列表 - * @param centerGoodsList + * @param activityGoodsList * @param budgetList * @param noConditionBudgetList * @return */ - private List buildActivityBudgetMap(List centerGoodsList, + private List buildActivityBudgetMap(List activityGoodsList, List budgetList, List noConditionBudgetList) { List budgetIdsOfActivity = new ArrayList<>(); if(CollectionUtil.isEmpty(noConditionBudgetList)){ budgetIdsOfActivity.addAll(noConditionBudgetList.stream().map(TbsBudget::getId).collect(Collectors.toList())); } - Map> activityCenterGoodsListMap = centerGoodsList.stream().collect(Collectors.groupingBy(a->a.getTargetType()+":"+a.getTargetId())); for (TbsBudget budget : budgetList) { if(budget.getConditionFlag().equals(1)){ List budgetConditionList = budget.getBudgetConditionList(); boolean hasNoMatch = false; - for (String key : activityCenterGoodsListMap.keySet()) { - List centerGoods = activityCenterGoodsListMap.get(key); - TbsActivityCenterGoods activityCenterGoods = centerGoods.get(0); + for (TbsActivityGoods activityGoods : activityGoodsList) { boolean matchGoods = false; for (TbsBudgetCondition budgetCondition : budgetConditionList) { - if(activityCenterGoods.getTargetLevelPathIds().contains(budgetCondition.getTargetLevelPathIds())){ + if(activityGoods.getTargetLevelPathIds().contains(budgetCondition.getTargetLevelPathIds())){ matchGoods = true; break; } @@ -154,146 +171,6 @@ public class TbsActivityApplicationService { return budgetIdsOfActivity; } - - - /** - * 匹配的主要方法 - * @param activityCostItem 活动项 - * @param throwEx 预算不够时抛出异常 - * @param overspend 超值标识 - * @param scheduleItemBudgets 时间区间条件 - * @param hisCostGroupByItemBudget 历史费用组 - * @param allBudgetList 所有预算 - * @param noConditionBudgetList 没有条件的预算列表 - * @param counterMap 历史预算占用 - * @param actMatchList 匹配预算占用的费用(含超支预算) - * @param actUnMatchList 没有匹配预算的费用 - * @param allowBudgetIds 满足当前活动项的费用idMap - */ - private void matchActivityMain(TbsActivityCenterGoods activityCostItem, - Boolean throwEx, - boolean overspend, - List scheduleItemBudgets, - Map> hisCostGroupByItemBudget, - final List allBudgetList, - List noConditionBudgetList, - Map counterMap, - final List actMatchList, - final List actUnMatchList, - final List allowBudgetIds) { - List budgetList = allBudgetList.stream().filter(obj->allowBudgetIds.contains(obj.getId())).collect(Collectors.toList()); - //PS:排序规则:优先为时间条件,其次匹配品牌条件 - //按品类条件,提取可用预算(列表已按小维度到大维度排列) - List currentItemBudgetList = this.filterMatchGoodsCondition(budgetList, activityCostItem); - //关联无条件预算 - currentItemBudgetList.addAll(noConditionBudgetList); - //提取可用预算的考核期 - List currentScheduleItemBudgets = new ArrayList<>(); - for (TbsBudget budget : currentItemBudgetList) { - for (TbsScheduleItemBudget scheduleItemBudget : scheduleItemBudgets) { - if(scheduleItemBudget.getBudgetId().equals(budget.getId())){ - currentScheduleItemBudgets.add(scheduleItemBudget); - } - } - } - //检测是否有是否足够预算 - BigDecimal goodsAmount = activityCostItem.getCenterGoodsAmount(); - if(CollectionUtil.isNotEmpty(currentScheduleItemBudgets)){ - boolean isMatch = false; - for (TbsScheduleItemBudget itemBudget : currentScheduleItemBudgets) { - //历史费用 - BigDecimal totalUsed = TbsBudgetCostUtil.totalHisCost(hisCostGroupByItemBudget.get(itemBudget.getId())); - //当前项费用 - BigDecimal budgetAmount = itemBudget.getBudgetAmount(); - //前置费用 - BigDecimal lastAmount = counterMap.get(itemBudget.getId()); - if(lastAmount==null){ - lastAmount = BigDecimal.ZERO; - } - if(budgetAmount.subtract(lastAmount).subtract(totalUsed).compareTo(goodsAmount)>0){ - activityCostItem.setBudgetId(itemBudget.getBudgetId()); - activityCostItem.setScheduleId(itemBudget.getScheduleId()); - activityCostItem.setScheduleItemId(itemBudget.getScheduleItemId()); - activityCostItem.setScheduleItemBudgetId(itemBudget.getId()); - isMatch = true; - //记录当前费用使用考核期费用 - lastAmount = lastAmount.add(goodsAmount); - counterMap.put(itemBudget.getId(),lastAmount); - break; - } - } - //无匹配的预算 - if(!isMatch){ - if(overspend){ - TbsScheduleItemBudget itemBudget = currentScheduleItemBudgets.get(0); - activityCostItem.setBudgetId(itemBudget.getBudgetId()); - activityCostItem.setScheduleId(itemBudget.getScheduleId()); - activityCostItem.setScheduleItemId(itemBudget.getScheduleItemId()); - activityCostItem.setScheduleItemBudgetId(itemBudget.getId()); - //记录当前费用使用考核期费用 - BigDecimal lastAmount = counterMap.get(itemBudget.getId()); - if(lastAmount==null){ - lastAmount = BigDecimal.ZERO; - } - lastAmount = lastAmount.add(goodsAmount); - counterMap.put(itemBudget.getId(),lastAmount); - }else if (throwEx){ - Assert.throwEx("品类["+ activityCostItem.getTargetName()+"]预算不足"); - } - activityCostItem.setBudgetId(0L); - activityCostItem.setScheduleId(0L); - activityCostItem.setScheduleItemId(0L); - activityCostItem.setScheduleItemBudgetId(0L); - } - actMatchList.add(activityCostItem); - }else { - if(throwEx){ - Assert.throwEx("品类["+ activityCostItem.getTargetName()+"]无可用预算"); - } - if(overspend){ - //添加到预算超支表 - activityCostItem.setBudgetId(0L); - activityCostItem.setScheduleId(0L); - activityCostItem.setScheduleItemId(0L); - activityCostItem.setScheduleItemBudgetId(0L); - actUnMatchList.add(activityCostItem); - } - } - } - - /** - * 按品类条件,提取可用预算 - * @param budgetList - * @param activityCostItem - * @return - */ - @NotNull - private List filterMatchGoodsCondition(List budgetList,TbsActivityCenterGoods activityCostItem) { - String levelPath = activityCostItem.getTargetLevelPathIds(); - Set levelPathSet = new LinkedHashSet<>(); - levelPathSet.add(levelPath); - TbsBudgetCostUtil.buildPaths(levelPath,levelPathSet); - List currentItemBudgetList = new ArrayList<>(); - for (TbsBudget budget : budgetList) { - if(budget.getConditionFlag().equals(1)){ - List budgetConditionListByBudget = budget.getBudgetConditionList(); - boolean unMatch = true; - for (String conditionString : levelPathSet) { - if(unMatch){ - for (TbsBudgetCondition budgetCondition : budgetConditionListByBudget) { - if(budgetCondition.getTargetLevelPathIds().contains(conditionString)){ - currentItemBudgetList.add(budget); - unMatch = false; - break; - } - } - } - } - } - } - return currentItemBudgetList; - } - /** * 1.加载所有的条件 * 2.匹配初无条件预算 diff --git a/src/main/java/com/qs/serve/task/TbsTask.java b/src/main/java/com/qs/serve/task/TbsTask.java index 3f660b74..ca91189c 100644 --- a/src/main/java/com/qs/serve/task/TbsTask.java +++ b/src/main/java/com/qs/serve/task/TbsTask.java @@ -1,8 +1,15 @@ package com.qs.serve.task; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.util.AuthContextUtils; +import com.qs.serve.modules.tbs.common.TbsActivityState; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.service.TbsActivityService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; +import java.time.LocalDateTime; + /** * @author YenHex * @since 2022/12/9 @@ -11,6 +18,18 @@ import org.springframework.stereotype.Component; @AllArgsConstructor public class TbsTask { + private final TbsActivityService activityService; + //todo 每日更新过期的活动,过期则进行冻结 + public void task1(){ + AuthContextUtils.setTenant("001"); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.le(TbsActivity::getPreEndDate, LocalDateTime.now()); + lqw.eq(TbsActivity::getReopenFlag,0); + TbsActivity param = new TbsActivity(); + param.setActivityState(TbsActivityState.STATE_1_Baning); + activityService.update(param,lqw); + } + }