From 8a46d96777110006badcad96fedcaf91725a21f8 Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 2 Jan 2024 20:54:59 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=AE=97=E4=BD=BF=E7=94=A8=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BirBudgetScheduleController.java | 29 +++++ .../tbs/entity/dto/TbsBudgetWithAmount.java | 67 ++++++++++ .../tbs/mapper/TbsBudgetLog2Mapper.java | 65 ++++++++++ .../service/TbsScheduleItemBudgetService.java | 9 +- .../TbsScheduleItemBudgetServiceImpl.java | 106 +++++++++++++++- .../resources/mapper/tbs/TbsBudget2Mapper.xml | 118 ++++++++++++++++++ 6 files changed, 389 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetWithAmount.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLog2Mapper.java create mode 100644 src/main/resources/mapper/tbs/TbsBudget2Mapper.xml diff --git a/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java b/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java index 675297e8..222206cb 100644 --- a/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java +++ b/src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java @@ -6,6 +6,7 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.modules.tbs.entity.TbsSchedule; import com.qs.serve.modules.tbs.entity.TbsScheduleItem; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetWithAmount; import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount; import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch; @@ -36,6 +37,34 @@ public class BirBudgetScheduleController { private final TbsScheduleMapper tbsScheduleMapper; + + /** + * 查询预算使用情况 + * @param query + * @return + */ + @PostMapping("/budgetUsedList") + public R> queryBudgetUsed(@RequestBody TbsScheduleItemSearch query){ + query.initCenterCombo(); + if(CollectionUtil.isNotEmpty(query.getScheduleIds())){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(TbsScheduleItem::getScheduleId,query.getScheduleIds()); + lqw.select(TbsScheduleItem::getId); + List scheduleItemList = tbsScheduleItemMapper.selectList(lqw); + List itemIds = scheduleItemList.stream().map(a->a.getId().toString()).collect(Collectors.toList()); + query.setScheduleItemIds(itemIds); + } + List scheduleItemBudgetIdDtoList = scheduleItemBudget2Mapper.listItemBudgetIds(query); + List scheduleItemIds = scheduleItemBudgetIdDtoList.stream().map(TbsScheduleItemBudgetIdDto::getScheduleItemId).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(scheduleItemIds)){ + return R.ok(); + } + List scheduleItemList = tbsScheduleItemMapper.selectBatchIds(scheduleItemIds); + List scheduleList = tbsScheduleMapper.selectList(new QueryWrapper<>()); + List scheduleItemWithAmounts = scheduleItemBudgetService.listBudgetAmountByIds(scheduleItemBudgetIdDtoList); + return R.ok(scheduleItemWithAmounts); + } + /** * 查询周期使用情况 * @param query diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetWithAmount.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetWithAmount.java new file mode 100644 index 00000000..974ce813 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetWithAmount.java @@ -0,0 +1,67 @@ +package com.qs.serve.modules.tbs.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/6/29 + */ +@Data +public class TbsBudgetWithAmount { + + /** + * 周期项ID + */ + String budgetId; + + String budgetName; + + String centerId; + + String centerName; + + String centerType; + + /** + * 预算总额 + */ + 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/mapper/TbsBudgetLog2Mapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLog2Mapper.java new file mode 100644 index 00000000..611f7582 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLog2Mapper.java @@ -0,0 +1,65 @@ +package com.qs.serve.modules.tbs.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.tbs.entity.TbsBudgetLog; +import com.qs.serve.modules.tbs.entity.TbsCostApply; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; +import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 预算日志 Mapper + * @author YenHex + * @date 2023-01-05 + */ +public interface TbsBudgetLog2Mapper extends BaseMapper { + + + /** + * 统计budget金额 + * @param ids budgetId + * @param optNumbers 包含 + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List getSumAmtInList(@Param("selectIds") List ids, @Param("optNumbers")List optNumbers); + + + /** + * 统计budget金额 + * @param ids budget_id + * @param optNumbers 不包含 + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List getSumAmtNotInList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + + + + /** + * 统计审批中的政策,占用多少的预算 + * @param ids + * @param optNumbers + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List getPolicyCheckingList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + + /** + * 统计审批中的费用,占用多少的预算 + * @param ids + * @param optNumbers + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List getCostCheckingList(@Param("selectIds") List ids,@Param("optNumbers")List optNumbers); + +} + 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 aaa2ef8c..27b4e8d3 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 @@ -1,12 +1,12 @@ package com.qs.serve.modules.tbs.service; 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 com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetWithAmount; import java.time.LocalDate; import java.util.List; @@ -37,5 +37,12 @@ public interface TbsScheduleItemBudgetService extends IService listScheduleItemAmountByIds(List budgetIdDtoList); + /** + * 预算维度统计 + * @param budgetIdDtoList + * @return + */ + List listBudgetAmountByIds(List budgetIdDtoList); + } 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 adbb4d5c..56f2441f 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 @@ -3,10 +3,10 @@ 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 com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; -import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount; +import com.qs.serve.modules.tbs.entity.TbsBudget; +import com.qs.serve.modules.tbs.entity.dto.*; +import com.qs.serve.modules.tbs.mapper.TbsBudgetLog2Mapper; +import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudget2Mapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -31,7 +31,9 @@ import java.util.stream.Collectors; @AllArgsConstructor public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl implements TbsScheduleItemBudgetService { + private final TbsBudgetMapper tbsBudgetMapper; private final TbsScheduleItemBudget2Mapper scheduleItemBudget2Mapper; + private final TbsBudgetLog2Mapper tbsBudgetLog2Mapper; @Override public List betweenDateList(LocalDate startDate, LocalDate endDate) { @@ -206,5 +208,101 @@ public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl listBudgetAmountByIds(List budgetIdDtoList) { + + List scheduleItemBudgetIds = budgetIdDtoList.stream().map(TbsScheduleItemBudgetIdDto::getScheduleItemBudgetId).collect(Collectors.toList()); + + //加载 + LambdaQueryWrapper sibLqw = new LambdaQueryWrapper<>(); + sibLqw.in(TbsScheduleItemBudget::getId,scheduleItemBudgetIds); + sibLqw.select(TbsScheduleItemBudget::getBudgetId); + List tbsScheduleItemBudgetList = this.list(sibLqw); + List budgetIds = tbsScheduleItemBudgetList.stream().map(TbsScheduleItemBudget::getBudgetId).distinct().collect(Collectors.toList()); + + List budgetList = tbsBudgetMapper.selectBatchIds(budgetIds); + + // 预算金额 + List finalList = tbsBudgetLog2Mapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.getFinalBudgetOptFlag()); + + // 被占用金额 + List usedList = tbsBudgetLog2Mapper.getSumAmtNotInList(scheduleItemBudgetIds, BudgetLogOptFlag.getFinalBudgetOptFlag()); + + // 费用使用金额 + List costUsedList = tbsBudgetLog2Mapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.finalCostOptFlag); + + // 政策使用金额 + List policyUsedList = tbsBudgetLog2Mapper.getSumAmtInList(scheduleItemBudgetIds, BudgetLogOptFlag.finalPolicyOptFlag); + + List policyCheckingList = tbsBudgetLog2Mapper.getPolicyCheckingList(scheduleItemBudgetIds, BudgetLogOptFlag.finalPolicyOptFlag); + + List costCheckingList = tbsBudgetLog2Mapper.getCostCheckingList(scheduleItemBudgetIds, BudgetLogOptFlag.finalCostOptFlag); + + List result = new ArrayList<>(); + + for (Long budgetId : budgetIds) { + TbsBudgetWithAmount withAmount = new TbsBudgetWithAmount(); + withAmount.setBudgetId(budgetId+""); + + for (TbsBudget budget : budgetList) { + if(budget.getId().equals(budgetId)){ + withAmount.setBudgetName(budget.getBudgetCode()); + withAmount.setCenterId(budget.getCenterId()); + withAmount.setCenterName(budget.getCenterName()); + withAmount.setCenterType(budget.getCenterType()); + } + } + + for (TbsBudgetLogWithAmount obj : finalList) { + if(budgetId.equals(obj.getId())){ + withAmount.setFinalAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : usedList) { + if(budgetId.equals(obj.getId())){ + withAmount.setAllUsingAmt(obj.getAmt()); + break; + } + } + + for (TbsBudgetLogWithAmount obj : costUsedList) { + if(budgetId.equals(obj.getId())){ + withAmount.setCostUsingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : policyUsedList) { + if(budgetId.equals(obj.getId())){ + withAmount.setPolicyUsingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : costCheckingList) { + if(budgetId.equals(obj.getId())){ + withAmount.setCostCheckingAmt(obj.getAmt()); + break; + } + } + for (TbsBudgetLogWithAmount obj : policyCheckingList) { + if(budgetId.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/TbsBudget2Mapper.xml b/src/main/resources/mapper/tbs/TbsBudget2Mapper.xml new file mode 100644 index 00000000..b61bfa7a --- /dev/null +++ b/src/main/resources/mapper/tbs/TbsBudget2Mapper.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + +