|
@@ -2,6 +2,7 @@ package org.springblade.control.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.hibernate.validator.internal.IgnoreForbiddenApisErrors;
|
|
|
import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
import org.springblade.control.dto.AnnualBudgetDTO;
|
|
|
import org.springblade.control.entity.*;
|
|
@@ -44,6 +45,8 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
|
|
|
private final IProjectInfoService projectInfoService;
|
|
|
|
|
|
+ private final IProjectProcessService processService;
|
|
|
+
|
|
|
/**
|
|
|
* 新增年度经营预算
|
|
|
* @param dto
|
|
@@ -450,6 +453,9 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
*/
|
|
|
@Override
|
|
|
public List<DeptMonthPlanRatioVO> portalProjectMonthRatio(String date) {
|
|
|
+ if ("汇总所有".equals(date)){
|
|
|
+ date = "";
|
|
|
+ }
|
|
|
//获取当月所有计划,和计划工资
|
|
|
List<ProjectCostBudgetVO2> planByMonth = budgetService.getPlanByMonth(date);
|
|
|
if (planByMonth != null || planByMonth.size() >= 0) {
|
|
@@ -560,6 +566,155 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
return vos;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 门户-各项目支出占比
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<ProjectIncomeCostRatioVO> portalProjectCostRatio(String date) {
|
|
|
+ if ("汇总所有".equals(date)){
|
|
|
+ date = "";
|
|
|
+ }
|
|
|
+ //获取项目列表
|
|
|
+ List<ControlProjectInfo> list = projectInfoService.list();
|
|
|
+ if (list == null || list.size() <= 0){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<ProjectIncomeCostRatioVO> vos = new ArrayList<>();
|
|
|
+ //按月获取闭环任务,根据项目分组
|
|
|
+ List<ProjectCostBudget> costByMonth = budgetService.getPlanPracticalCostByMonth(date);
|
|
|
+ if (costByMonth == null || costByMonth.size() <= 0){
|
|
|
+ //没有闭环任务,为每个项目设置为0
|
|
|
+ for (ControlProjectInfo info : list) {
|
|
|
+ ProjectIncomeCostRatioVO vo = new ProjectIncomeCostRatioVO();
|
|
|
+ vo.setProjectName(info.getName());
|
|
|
+ vo.setProjectCost(0);
|
|
|
+ vos.add(vo);
|
|
|
+ }
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+ Map<Long, List<ProjectCostBudget>> map = costByMonth.parallelStream()
|
|
|
+ .collect(Collectors.groupingBy(ProjectCostBudget::getProjectId));
|
|
|
+ //为每个合同设置支出
|
|
|
+ for (ControlProjectInfo info : list) {
|
|
|
+ ProjectIncomeCostRatioVO vo = new ProjectIncomeCostRatioVO();
|
|
|
+ vo.setProjectName(info.getName());
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ List<ProjectCostBudget> budgets = map.get(info.getId());
|
|
|
+ if (budgets != null && budgets.size() > 0){
|
|
|
+ for (ProjectCostBudget budget : budgets) {
|
|
|
+ big = big.add(budget.getActualTotalMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setProjectCost(big.intValue());
|
|
|
+ vos.add(vo);
|
|
|
+ }
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ProjectIncomeCostRatioVO> portalProjectIncomeRatio(String date) {
|
|
|
+ if ("汇总所有".equals(date)){
|
|
|
+ date = "";
|
|
|
+ }
|
|
|
+ //获取项目列表
|
|
|
+ List<ControlProjectInfo> list = projectInfoService.list();
|
|
|
+ if (list == null || list.size() <= 0){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ //获取所有回款,根据项目分组
|
|
|
+ List<ProjectIncomeCostRatioVO> vos = new ArrayList<>();
|
|
|
+ List<ContractReturnedInfo> returnedByMonth = returnedInfoService.getProjectReturnedByMonth(date);
|
|
|
+ if (returnedByMonth == null || returnedByMonth.size() <= 0){
|
|
|
+ //没有闭环任务,为每个项目设置为0
|
|
|
+ for (ControlProjectInfo info : list) {
|
|
|
+ ProjectIncomeCostRatioVO vo = new ProjectIncomeCostRatioVO();
|
|
|
+ vo.setProjectName(info.getName());
|
|
|
+ vo.setProjectIncome(0);
|
|
|
+ vos.add(vo);
|
|
|
+ }
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+ Map<Long, List<ContractReturnedInfo>> map = returnedByMonth.parallelStream()
|
|
|
+ .collect(Collectors.groupingBy(ContractReturnedInfo::getProjectId));
|
|
|
+ //为每个合同设置收入
|
|
|
+ for (ControlProjectInfo info : list) {
|
|
|
+ ProjectIncomeCostRatioVO vo = new ProjectIncomeCostRatioVO();
|
|
|
+ vo.setProjectName(info.getName());
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ List<ContractReturnedInfo> returnedInfos = map.get(info.getId());
|
|
|
+ if (returnedInfos != null && returnedInfos.size() > 0){
|
|
|
+ for (ContractReturnedInfo returnedInfo : returnedInfos) {
|
|
|
+ big = big.add(returnedInfo.getPracticalReturnedMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setProjectCost(big.intValue());
|
|
|
+ vos.add(vo);
|
|
|
+ }
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 门户-项目服务阶段进程
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<ProjectServiceProcessVO> portalProjectProcess(Long projectId) {
|
|
|
+ //获取当前项目所有进程
|
|
|
+ List<ProjectProcessVO> projectProcess = processService.getProjectProcess(projectId);
|
|
|
+ //获取项目所有已经闭环的计划
|
|
|
+ List<ProjectCostBudget> finishedTask = budgetService.getProjectAllFinishedTask(projectId, null);
|
|
|
+ Map<Long, List<ProjectCostBudget>> collect = new HashMap<>();
|
|
|
+ boolean isPlan = false ;
|
|
|
+ if (finishedTask == null || finishedTask.size() <= 0){
|
|
|
+ isPlan = true;
|
|
|
+ }else {
|
|
|
+ collect = finishedTask.parallelStream()
|
|
|
+ .collect(Collectors.groupingBy(ProjectCostBudget::getProjectProcess));
|
|
|
+ }
|
|
|
+ //把计划根据进程分组
|
|
|
+ //为每个进程设置值
|
|
|
+ List<ProjectServiceProcessVO> vos = new ArrayList<>();
|
|
|
+ for (ProjectProcessVO process : projectProcess) {
|
|
|
+ ProjectServiceProcessVO vo = new ProjectServiceProcessVO();
|
|
|
+ vo.setProcessName(process.getName());
|
|
|
+ //设置进程百分比
|
|
|
+ if (process.getProcessEndTime() != null && process.getProcessEndTime() != null){
|
|
|
+ if (process.getStatus() == 1){
|
|
|
+ //未开始
|
|
|
+ vo.setProcessProgressBar(0);
|
|
|
+ }else if (process.getStatus() == 3){
|
|
|
+ //已闭环
|
|
|
+ vo.setProcessProgressBar(100);
|
|
|
+ }else {
|
|
|
+ //进行中
|
|
|
+ vo.setProcessProgressBar(50);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //未设置时间默认未开始
|
|
|
+ vo.setProcessProgressBar(0);
|
|
|
+ }
|
|
|
+ //设置进程支出金额,目前只统计人工支出
|
|
|
+ if (isPlan){
|
|
|
+ vo.setProcessCostCount(new BigDecimal(0));
|
|
|
+ }else {
|
|
|
+ List<ProjectCostBudget> budgets = collect.get(process.getId());
|
|
|
+ if (budgets != null && budgets.size() > 0){
|
|
|
+ //计算所有任务支出总和
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ for (ProjectCostBudget budget : budgets) {
|
|
|
+ big = big.add(budget.getActualTotalMoney());
|
|
|
+ }
|
|
|
+ vo.setProcessCostCount(big);
|
|
|
+ }else {
|
|
|
+ vo.setProcessCostCount(new BigDecimal(0));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //设置进程支出金额百分比
|
|
|
+ vo.setProcessCostProgressBar(40);
|
|
|
+ vos.add(vo);
|
|
|
+ }
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 统计支出 1支出总和2工资总和
|
|
|
*/
|