From c104a4bb8c35fa320f6ef63af91a69f6577dd3ad Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 21 Nov 2023 11:20:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=B4=B9=E7=94=A8=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E7=9B=B8=E5=85=B3=E7=9A=84=E9=A2=84=E7=AE=97=E9=A1=B9?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=90=88=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/model/enums/BudgetLogOptFlag.java | 6 +- .../tbs/controller/TbsBudgetController.java | 3 +- .../controller/TbsCostApplyController.java | 42 ++++++++++ .../dto/TbsBudgetScheduleWithAmount.java | 59 ++++++++++++++ .../entity/dto/TbsCostBudgetRelateInfo.java | 23 ++++++ .../mapper/TbsScheduleItemBudgetMapper.java | 29 ++++++- .../service/TbsScheduleItemBudgetService.java | 8 ++ .../impl/TbsBudgetBatchServiceImpl.java | 2 +- .../impl/TbsBudgetChangeServiceImpl.java | 2 +- .../TbsScheduleItemBudgetServiceImpl.java | 77 ++++++++++++++++++- .../tbs/TbsScheduleItemBudgetMapper.xml | 75 ++++++++++++++++-- 11 files changed, 314 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetScheduleWithAmount.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostBudgetRelateInfo.java diff --git a/src/main/java/com/qs/serve/common/model/enums/BudgetLogOptFlag.java b/src/main/java/com/qs/serve/common/model/enums/BudgetLogOptFlag.java index f7f1e2cf..dee9f0f0 100644 --- a/src/main/java/com/qs/serve/common/model/enums/BudgetLogOptFlag.java +++ b/src/main/java/com/qs/serve/common/model/enums/BudgetLogOptFlag.java @@ -74,7 +74,11 @@ public enum BudgetLogOptFlag { */ private boolean addBudget; - private final static List finalBudgetOptFlag = new ArrayList<>(Arrays.asList(0, 2, 3)); + private final static List finalBudgetOptFlag = Arrays.asList(0, 2, 3); + + public final static List finalCostOptFlag = Arrays.asList(1,4,5,6); + + public final static List finalPolicyOptFlag = Arrays.asList(11,12,13,14,15); /** * 预算规划,状态0,2,3,新增、调增、调减 diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java index de71443e..09bc019e 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java @@ -31,6 +31,7 @@ import com.qs.serve.modules.tbs.entity.so.TbsBudgetSo; import javax.validation.Valid; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -94,7 +95,7 @@ public class TbsBudgetController { List scheduleItemBudgetIds = scheduleItemBudgetList.stream() .map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); //实际发布预算 - List budgetLogWithAmountList = tbsScheduleItemBudgetMapper.getAllByScheduleItemIdList(scheduleItemBudgetIds); + List budgetLogWithAmountList = tbsScheduleItemBudgetMapper.getSumAmtInList(scheduleItemBudgetIds, Arrays.asList(0,2,3)); for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { for (TbsBudgetLogWithAmount withAmount : budgetLogWithAmountList) { if (itemBudget.getId().equals(withAmount.getId())){ 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 67a11ed8..9b46ed82 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 @@ -29,6 +29,8 @@ import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.*; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetScheduleWithAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsCostBudgetRelateInfo; import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.entity.vo.TbsCostApplyVo; @@ -72,10 +74,13 @@ public class TbsCostApplyController { private BmsRegion2Service region2Service; private SysUserService sysUserService; private TbsBudgetApplicationService budgetApplicationService; + private TbsBudgetService tbsBudgetService; private SysPostUserService postUserService; private TbsCostApplyOperationServiceImpl tbsCostApplyOperationServiceImpl; private TbsBudgetMatchApplication tbsBudgetMatchApplication; private TbsBudgetCostItemService tbsBudgetCostItemService; + private TbsBudgetLogService tbsBudgetLogService; + private TbsScheduleItemBudgetService tbsScheduleItemBudgetService; /** @@ -447,5 +452,42 @@ public class TbsCostApplyController { return R.isTrue(result); } + /** + * 获取费用申请相关的预算项使用合计 + * @return + */ + @GetMapping("/listBudgetInfo") + public R> listBudgetInfo(String costApplyId){ + LambdaQueryWrapper loadCostLogLqw = new LambdaQueryWrapper<>(); + loadCostLogLqw.eq(TbsBudgetLog::getCostApplyId,costApplyId); + List costApplyBudgetLogs = tbsBudgetLogService.list(loadCostLogLqw); + List budgetIds = costApplyBudgetLogs.stream().map(TbsBudgetLog::getBudgetId).distinct().collect(Collectors.toList()); + List resultInfoList = new ArrayList<>(); + for (Long budgetId : budgetIds) { + TbsBudget budget = tbsBudgetService.getById(budgetId); + LambdaQueryWrapper scheduleLqw = new LambdaQueryWrapper<>(); + scheduleLqw.eq(TbsScheduleItemBudget::getBudgetId,budgetId); + List scheduleItemBudgetList = tbsScheduleItemBudgetService.list(scheduleLqw); + List scheduleItemBudgetIds = scheduleItemBudgetList.stream().map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); + List amountList = tbsScheduleItemBudgetService.listScheduleAmountByIds(scheduleItemBudgetIds); + List relateInfoList = amountList.stream().map(obj->{ + TbsCostBudgetRelateInfo info = CopierUtil.copy(obj,new TbsCostBudgetRelateInfo()); + info.setBudgetCode(budget.getBudgetNumber()); + info.setBudgetTitle(budget.getBudgetCode()); + return info; + }).collect(Collectors.toList()); + for (TbsCostBudgetRelateInfo info : relateInfoList) { + for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { + if(info.getScheduleItemBudgetId().equals(itemBudget.getId())){ + info.setScheduleName(itemBudget.getItemName()); + break; + } + } + } + resultInfoList.addAll(relateInfoList); + } + return R.ok(resultInfoList); + } + } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetScheduleWithAmount.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetScheduleWithAmount.java new file mode 100644 index 00000000..5c065f70 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetScheduleWithAmount.java @@ -0,0 +1,59 @@ +package com.qs.serve.modules.tbs.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/6/29 + */ +@Data +public class TbsBudgetScheduleWithAmount { + + /** + * 预算项的周期ID + */ + Long scheduleItemBudgetId; + + /** + * 预算总额 + */ + BigDecimal finalAmt = BigDecimal.ZERO; + + /** + * 当前占用中的预算 + */ + BigDecimal allUsingAmt = BigDecimal.ZERO; + + /** + * 申请中的预算占用 + */ + BigDecimal allCheckingAmt = BigDecimal.ZERO; + + /** + * 费用申请-申请中的预算 + */ + BigDecimal costUsingAmt = BigDecimal.ZERO; + + /** + * 费用申请-申请中的预算 + */ + BigDecimal costCheckingAmt = BigDecimal.ZERO; + + /** + * 政策-申请中的预算 + */ + BigDecimal policyUsingAmt = BigDecimal.ZERO; + + /** + * 政策-申请中的预算 + */ + BigDecimal policyCheckingAmt = BigDecimal.ZERO; + + /** + * 剩余预算(预算总额-当前占用的预算) + */ + BigDecimal surplusAmt = BigDecimal.ZERO; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostBudgetRelateInfo.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostBudgetRelateInfo.java new file mode 100644 index 00000000..078d810e --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostBudgetRelateInfo.java @@ -0,0 +1,23 @@ +package com.qs.serve.modules.tbs.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/11/20 + */ +@Data +public class TbsCostBudgetRelateInfo extends TbsBudgetScheduleWithAmount{ + + /** 预算编码 */ + String budgetCode; + + /** 预算名称 */ + String budgetTitle; + + /** 周期名称 */ + String scheduleName; + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java index 0b01c661..9aa7b65e 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java @@ -147,12 +147,37 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper getSumAmtInList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + + + /** + * 统计Schedule金额 + * @param ids scheduleItemBudgetIds + * @param optNumbers 不包含 + * @return + */ + List getSumAmtNotInList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + + /** + * 统计审批中的费用,占用多少的预算 * @param ids + * @param optNumbers * @return */ - List getAllByScheduleItemIdList(@Param("selectIds") List ids); + List getCostCheckingList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + /** + * 统计审批中的政策,占用多少的预算 + * @param ids + * @param optNumbers + * @return + */ + List getPolicyCheckingList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); @InterceptorIgnore(tenantLine = "true") @Select(" SELECT tsib.* FROM `tbs_schedule_item_budget` tsib " + diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java index 9a3acf39..273ee972 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetScheduleWithAmount; import java.time.LocalDate; import java.util.List; @@ -20,5 +21,12 @@ public interface TbsScheduleItemBudgetService extends IService listScheduleAmountByIds(List scheduleItemBudgetIds); + } 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 03958295..f3f36a4a 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 @@ -393,7 +393,7 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl scheduleItemBudgetIds = scheduleItemBudgetList.stream() .map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); //实际发布预算 - List budgetLogWithAmountList = tbsScheduleItemBudgetMapper.getAllByScheduleItemIdList(scheduleItemBudgetIds); + List budgetLogWithAmountList = tbsScheduleItemBudgetMapper.getSumAmtInList(scheduleItemBudgetIds,Arrays.asList(0,2,3)); for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { BigDecimal realAmt = BigDecimal.ZERO; 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 d9c25dbd..0732df43 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 @@ -267,7 +267,7 @@ public class TbsBudgetChangeServiceImpl extends ServiceImpl budgetAmtUpdateList = param.getBudgetAmtUpdateList(); if(CollectionUtil.isNotEmpty(budgetAmtUpdateList)){ List budgetScheduleIds = budgetAmtUpdateList.stream().map(TbsBudgetAmtBo::getBudgetScheduleItemId).collect(Collectors.toList()); - List budgetLogWithAmountList = tbsScheduleItemBudgetMapper.getAllByScheduleItemIdList(budgetScheduleIds); + List budgetLogWithAmountList = tbsScheduleItemBudgetMapper.getSumAmtInList(budgetScheduleIds,Arrays.asList(0,2,3)); List scheduleItemBudgetList = tbsScheduleItemBudgetMapper.selectBatchIds(budgetScheduleIds); List changeScheduleItemList = new ArrayList<>(); for (TbsScheduleItemBudget scheduleItemBudget : scheduleItemBudgetList) { diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java index 652b6c75..f168cbca 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java @@ -2,7 +2,9 @@ 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.model.enums.BudgetLogOptFlag; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetScheduleWithAmount; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -11,6 +13,8 @@ import com.qs.serve.modules.tbs.service.TbsScheduleItemBudgetService; import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -33,7 +37,7 @@ public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl scheduleItemBudgetList = this.list(lqw); List ids = scheduleItemBudgetList.stream().map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); - List amountList = this.baseMapper.getAllByScheduleItemIdList(ids); + List amountList = this.baseMapper.getSumAmtInList(ids,Arrays.asList(0,2,3)); for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { for (TbsBudgetLogWithAmount withAmount : amountList) { if(itemBudget.getId().equals(withAmount.getId())){ @@ -49,5 +53,76 @@ public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl listScheduleAmountByIds(List scheduleItemBudgetIds) { + // 预算金额 + List finalList = baseMapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.getFinalBudgetOptFlag()); + // 被占用金额 + List usedList = baseMapper.getSumAmtNotInList(scheduleItemBudgetIds, BudgetLogOptFlag.getFinalBudgetOptFlag()); + // 费用使用金额 + List costUsedList = baseMapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.finalCostOptFlag); + // 政策使用金额 + List policyUsedList = baseMapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.finalPolicyOptFlag); + + List policyCheckingList = baseMapper.getPolicyCheckingList(scheduleItemBudgetIds, BudgetLogOptFlag.finalPolicyOptFlag); + + List costCheckingList = baseMapper.getCostCheckingList(scheduleItemBudgetIds, BudgetLogOptFlag.finalPolicyOptFlag); + + List result = new ArrayList<>(); + + for (Long scheduleItemBudgetId : scheduleItemBudgetIds) { + TbsBudgetScheduleWithAmount withAmount = new TbsBudgetScheduleWithAmount(); + withAmount.setScheduleItemBudgetId(scheduleItemBudgetId); + for (TbsBudgetLogWithAmount obj : finalList) { + if(scheduleItemBudgetId.equals(obj.getId())){ + withAmount.setFinalAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : usedList) { + if(scheduleItemBudgetId.equals(obj.getId())){ + withAmount.setAllUsingAmt(obj.getAmt()); + break; + } + } + + for (TbsBudgetLogWithAmount obj : costUsedList) { + if(scheduleItemBudgetId.equals(obj.getId())){ + withAmount.setCostUsingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : policyUsedList) { + if(scheduleItemBudgetId.equals(obj.getId())){ + withAmount.setPolicyUsingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : costCheckingList) { + if(scheduleItemBudgetId.equals(obj.getId())){ + withAmount.setCostCheckingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : policyCheckingList) { + if(scheduleItemBudgetId.equals(obj.getId())){ + withAmount.setPolicyCheckingAmt(obj.getAmt()); + break; + } + } + //因为log统计为负数,需要把数值取正 + withAmount.setAllUsingAmt(withAmount.getAllUsingAmt().negate()); + withAmount.setCostUsingAmt(withAmount.getCostUsingAmt().negate()); + withAmount.setCostCheckingAmt(withAmount.getCostCheckingAmt().negate()); + withAmount.setPolicyUsingAmt(withAmount.getPolicyUsingAmt().negate()); + withAmount.setPolicyCheckingAmt(withAmount.getPolicyCheckingAmt().negate()); + //计算剩余及审批合计 + withAmount.setAllCheckingAmt(withAmount.getCostCheckingAmt().add(withAmount.getPolicyCheckingAmt())); + withAmount.setSurplusAmt(withAmount.getFinalAmt().subtract(withAmount.getAllUsingAmt())); + result.add(withAmount); + } + return result; + } } diff --git a/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml b/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml index 429bce8c..40f02606 100644 --- a/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml +++ b/src/main/resources/mapper/tbs/TbsScheduleItemBudgetMapper.xml @@ -146,19 +146,84 @@ where target.id is null - + select + schedule_item_budget_id as id, + sum(amount) as amt + from tbs_budget_log + where + del_flag = 0 and opt_type in + + #{selectId} + + AND schedule_item_budget_id in + + #{selectId} + + group by schedule_item_budget_id + + + + + + + +