浏览代码

门户接口和计划颜色

qianxb 2 年之前
父节点
当前提交
857e529e6e
共有 21 个文件被更改,包括 298 次插入34 次删除
  1. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  2. 32 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AnnualBudgetVO3.java
  3. 13 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java
  4. 23 4
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java
  5. 4 4
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  6. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.java
  7. 10 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml
  8. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.java
  9. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.xml
  10. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.java
  11. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.xml
  12. 6 2
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  13. 18 4
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  14. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetService.java
  15. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IContractInfoService.java
  16. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IContractReturnedInfoService.java
  17. 4 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  18. 79 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  19. 14 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java
  20. 14 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractReturnedInfoServiceImpl.java
  21. 53 12
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

+ 1 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -120,7 +120,7 @@ public class ProjectCostBudget extends BaseEntity {
     private BigDecimal practicalTaskDays;
 
     @ApiModelProperty(value = "任务完成后是否审批通过")
-    private String taskApprove;
+    private Integer taskApprove;
 
     @ApiModelProperty(value = "关联回款")
     @JsonSerialize(nullsUsing = NullSerializer.class)

+ 32 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AnnualBudgetVO3.java

@@ -0,0 +1,32 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.AnnualBudget;
+import org.springblade.control.entity.AnnualBudgetDisburse;
+import org.springblade.control.entity.AnnualBudgetIncome;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Param  门户-年度统计用
+ * @Author wangwl
+ * @Date 2023/6/13 13:52
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AnnualBudgetVO3 extends AnnualBudget {
+    @ApiModelProperty(value = "已收入")
+    private BigDecimal yearReturned;
+
+    @ApiModelProperty(value = "已盈利")
+    private BigDecimal yearProfit;
+
+    @ApiModelProperty(value = "合同进度统计")
+    private Integer contractSchedule;
+
+    @ApiModelProperty(value = "利润进度统计")
+    private Integer profitSchedule;
+}

+ 13 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java

@@ -17,9 +17,21 @@ import java.util.Map;
 @EqualsAndHashCode(callSuper = true)
 public class ProjectCostBudgetVO2 extends ProjectCostBudget {
     @ApiModelProperty(value = "子计划")
-    private List<ProjectCostBudget> childrenList;
+    private List<ProjectCostBudgetVO2> childrenList;
 
     @ApiModelProperty(value = "回款条件")
     private String returnedValue;
 
+    @ApiModelProperty(value = "项目环节名称")
+    private String projectProcessValue;
+
+    @ApiModelProperty(value = "预算类型值")
+    private String budgetTypeValue;
+
+    @ApiModelProperty(value = "任务明细值")
+    private String taskDetailValue;
+
+    @ApiModelProperty(value = "任务完成状态,1黄色,2绿色")
+    private Integer taskFinishedStatus;
+
 }

+ 23 - 4
blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java

@@ -14,15 +14,14 @@ import org.springblade.control.entity.AnnualBudget;
 import org.springblade.control.entity.DepartmentMonthPlan;
 import org.springblade.control.service.IAnnualBudgetService;
 import org.springblade.control.service.IDepartmentMonthPlanService;
-import org.springblade.control.vo.AnnualBudgetVO;
-import org.springblade.control.vo.AnnualBudgetVO2;
-import org.springblade.control.vo.ControlProjectInfoVO;
-import org.springblade.control.vo.DictInfoVO;
+import org.springblade.control.vo.*;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Param
@@ -124,4 +123,24 @@ public class AnnualBudgetController {
         return R.data(budgetService.getSecondSubject());
     }
 
+    /**
+     * 门户-年度指标统计
+     */
+    @GetMapping("/portalAnnualTarget")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "门户-年度指标统计")
+    public R<AnnualBudgetVO3> portalAnnualTarget() {
+        return R.data(budgetService.portalAnnualTarget());
+    }
+
+    /**
+     * 门户-年度各项费用统计
+     */
+    @GetMapping("/portalAnnualCost")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "门户-年度各项费用统计")
+    public R<Map<String, BigDecimal>> portalAnnualCost(String year) {
+        return R.data(budgetService.portalAnnualCost(year));
+    }
+
 }

+ 4 - 4
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java

@@ -30,7 +30,7 @@ import java.util.Map;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/projectCostBudget")
-@Api(value = "计划预算接口", tags = "计划预算接口")
+@Api(value = "项目计划预算", tags = "项目计划预算")
 public class ProjectCostBudgetController {
 
     private final IProjectCostBudgetService budgetService;
@@ -44,7 +44,7 @@ public class ProjectCostBudgetController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "queryValue", value = "搜索值", required = false),
     })
-    public R<ControlProjectInfoVO> page(ControlProjectInfoDTO dto, Query query){
+    public R<List<ControlProjectInfoVO>> page(ControlProjectInfoDTO dto, Query query){
         return R.data(budgetService.page(dto,query));
     }
 
@@ -65,8 +65,8 @@ public class ProjectCostBudgetController {
      * 编辑项目计划
      */
     @PostMapping("/updatePlan")
-    @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "获取项目计划")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "编辑项目计划")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "id", value = "项目id", required = true),
     })

+ 2 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.java

@@ -33,4 +33,6 @@ public interface AnnualBudgetMapper extends BaseMapper<AnnualBudget> {
     List<DictInfoVO> getAllBudgetSubject();
 
     List<DictInfoVO> getAllSecondSubject();
+
+    AnnualBudget getThisYearBudget(@Param("year") int year);
 }

+ 10 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml

@@ -1,11 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.springblade.control.mapper.AnnualBudgetMapper">
+
+    <sql id="budget_column">
+        id, name,budget_start_time, budget_end_time, total_budget,staff_cost,manage_disburse,annual_contract_target,annual_profit_target,status
+    </sql>
+
+
     <delete id="removeById">
         delete from c_annual_budget where id = #{id}
     </delete>
 
-
     <select id="getAnnualBudget" resultType="org.springblade.control.vo.AnnualBudgetVO">
         select * from c_annual_budget
         where id = #{id}
@@ -44,6 +49,10 @@
         select *
         from c_dict_info di WHERE di.`type` = 1 AND di.parent_id > 0
     </select>
+    <select id="getThisYearBudget" resultType="org.springblade.control.entity.AnnualBudget">
+        select   <include refid="budget_column" />
+        from c_annual_budget where name like concat('%', #{year}, '%')
+    </select>
 
 
 </mapper>

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.java

@@ -12,6 +12,7 @@ import org.springblade.control.vo.ControlContractInfoVO;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.system.entity.DictBiz;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -32,4 +33,6 @@ public interface ContractInfoMapper extends BaseMapper<ControlContractInfo> {
     List<ControlProjectInfo> getNoConnectionProject2();
 
     List<ControlContractInfo> getList();
+
+    BigDecimal getYearContractMoney(@Param("year") int year);
 }

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.xml

@@ -31,4 +31,8 @@
     <select id="getList" resultType="org.springblade.control.entity.ControlContractInfo">
         select * from c_control_contract_info WHERE is_deleted = 0
     </select>
+    <select id="getYearContractMoney" resultType="java.math.BigDecimal">
+        SELECT SUM(contract_money)
+        from c_control_contract_info WHERE DATE_FORMAT(contract_sign_time ,'%Y') = #{year} and is_deleted = 0
+    </select>
 </mapper>

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.java

@@ -9,6 +9,7 @@ import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.ContractReturnedInfoVO;
 import org.springblade.control.vo.ControlContractInfoVO;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -23,4 +24,6 @@ public interface ContractReturnedInfoMapper extends BaseMapper<ContractReturnedI
     List<ContractReturnedInfoVO> getListByContractId(@Param("contractId") Long contractId);
 
     List<ContractReturnedInfoVO> getListByProjectId(@Param("projectId") Long projectId);
+
+    BigDecimal getYearReturned(@Param("year") int year);
 }

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.xml

@@ -21,4 +21,8 @@
             (select name from blade_user WHERE id = ri.reminder_user) as reminderUserName
         from c_contract_returned_info ri where ri.project_id = #{projectId}
     </select>
+    <select id="getYearReturned" resultType="java.math.BigDecimal">
+        SELECT SUM(practical_returned_money)
+        from c_contract_returned_info WHERE DATE_FORMAT(practical_returned_time,'%Y') = #{year}
+    </select>
 </mapper>

+ 6 - 2
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -10,6 +10,7 @@ import org.springblade.control.entity.*;
 import org.springblade.control.vo.*;
 import org.springblade.core.mp.support.Query;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
@@ -28,11 +29,11 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
 
     ProjectCostBudgetStats getBudgetTotalByProjectId(@Param("projectId") Long projectId);
 
-    ControlProjectInfoVO page(IPage page,@Param("dto") ControlProjectInfoDTO dto);
+    List<ControlProjectInfoVO> page(IPage page,@Param("dto") ControlProjectInfoDTO dto);
 
     List<ProjectCostBudgetVO2> getApprovePlan(@Param("id") Long id);
 
-    List<ProjectCostBudget> getAllChildrenPlan(@Param("id") Long id);
+    List<ProjectCostBudgetVO2> getAllChildrenPlan(@Param("id") Long id);
 
     void removeChildrenPlan(@Param("projectId") Long projectId);
 
@@ -55,4 +56,7 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     List<ProjectCostBudget> getProjectAllFinishedTask(@Param("projectId") Long projectId,@Param("costType") Integer costType);
 
     List<ProjectCostBudget> getAllPracticalBudgetByProjectId(@Param("projectId") Long projectId);
+
+    //获取一年人工支出
+    BigDecimal getYearStaffDisburse(@Param("year") int year);
 }

+ 18 - 4
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -48,7 +48,7 @@
             pi.*,
             (select dict_name  from c_dict_info WHERE code = 'project_type' AND dict_value = pi.project_type) as projectTypeValue,
             (select dict_name  from c_dict_info WHERE code = 'project_server_type' AND dict_value = pi.project_server_type) as projectServerTypeValue,
-            IFNULL((select cpp.name from c_project_process cpp WHERE cpp.project_id = pi.id and cpp.start_time &lt;= NOW() order by cpp.sort desc limit 1),
+            IFNULL((select cpp.name from c_project_process cpp WHERE cpp.project_id = pi.id and cpp.process_start_time &lt;= NOW() order by cpp.sort desc limit 1),
                 (select cpp.name from c_project_process cpp WHERE cpp.project_id = pi.id order by cpp.sort limit 1)) as CurrentProcessName
         from c_control_project_info pi
         WHERE 1=1
@@ -67,12 +67,14 @@
     <select id="getApprovePlan" resultType="org.springblade.control.vo.ProjectCostBudgetVO2">
         SELECT
             pcb.*,
+            (select cpp.name from c_project_process cpp where cpp.id = pcb.project_process) as projectProcessValue,
+            (select di.dict_name from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0) as budgetTypeValue,
+            (select di.dict_name from c_dict_info di where di.type = 1 and di.dict_value = pcb.task_detail and di.parent_id =
+            (select di.id from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0)) as taskDetailValue,
             (select cri.returned_condition from c_contract_returned_info cri where cri.id = pcb.contract_returned_id) as returnedValue
         FROM c_project_cost_budget pcb WHERE pcb.project_id = #{id} AND pcb.approve = 1
     </select>
-    <select id="getAllChildrenPlan" resultType="org.springblade.control.entity.ProjectCostBudget">
-        SELECT * FROM c_project_cost_budget  WHERE project_id = #{id} AND parent_id is not null
-    </select>
+
     <select id="getDepartmentPlan" resultType="org.springblade.control.vo.ProjectCostBudgetVO">
         select pcb.*,
                case pcb.status
@@ -128,6 +130,18 @@
             resultType="org.springblade.control.entity.ProjectCostBudget">
         select * from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.project_id = #{projectId} and pcb.task_approve = 1
     </select>
+    <select id="getYearStaffDisburse" resultType="java.math.BigDecimal">
+        SELECT SUM(actual_total_money)
+        from c_project_cost_budget WHERE DATE_FORMAT(plan_end_time,'%Y') = #{year} and task_approve = 1
+    </select>
+    <select id="getAllChildrenPlan" resultType="org.springblade.control.vo.ProjectCostBudgetVO2">
+        SELECT pcb.plan_task_type,pcb.plan_task_desc,pcb.plan_target,pcb.plan_start_time,pcb.plan_end_time,pcb.plan_days,id,parent_id,
+               (select cpp.name from c_project_process cpp where cpp.id = pcb.project_process) as projectProcessValue,
+               (select di.dict_name from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0) as budgetTypeValue,
+               (select di.dict_name from c_dict_info di where di.type = 1 and di.dict_value = pcb.task_detail and di.parent_id =
+                                                                                                                  (select di.id from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0)) as taskDetailValue
+        FROM c_project_cost_budget pcb WHERE pcb.project_id = #{id} AND pcb.parent_id > 0
+    </select>
 
 
 </mapper>

+ 5 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetService.java

@@ -7,6 +7,7 @@ import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.*;
 import org.springblade.core.mp.base.BaseService;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -31,4 +32,8 @@ public interface IAnnualBudgetService extends BaseService<AnnualBudget> {
     AnnualBudgetVO2 preview(Long id);
 
     List<DictInfoVO> getSecondSubject();
+
+    AnnualBudgetVO3 portalAnnualTarget();
+
+    Map<String, BigDecimal> portalAnnualCost(String year);
 }

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IContractInfoService.java

@@ -12,6 +12,7 @@ import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
 import org.springblade.system.entity.DictBiz;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -37,4 +38,6 @@ public interface IContractInfoService extends BaseService<ControlContractInfo> {
     List<ControlContractInfoVO> getPage(ControlContractInfoDTO dto,Query query);
 
     List<ControlContractInfo> getList();
+
+    BigDecimal getYearContractMoney(int year);
 }

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IContractReturnedInfoService.java

@@ -30,4 +30,7 @@ public interface IContractReturnedInfoService extends BaseService<ContractReturn
     List<ContractReturnedInfoVO> getListByContractId(Long contractId);
 
     List<ContractReturnedInfoVO> getListByProjectId(Long projectId);
+
+    //获取指定一年的回款
+    BigDecimal getYearReturned(int year);
 }

+ 4 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -14,6 +14,7 @@ import org.springblade.control.vo.ProjectCostBudgetVO3;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +34,7 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
 
     void deleteByProjectId(Long projectId);
     //分页获取列表
-    ControlProjectInfoVO page(ControlProjectInfoDTO dto, Query query);
+    List<ControlProjectInfoVO> page(ControlProjectInfoDTO dto, Query query);
     //根据id获取项目计划
     ProjectCostBudgetVO getPlanByProjectId(Long id);
     //修改项目计划
@@ -58,4 +59,6 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     List<ProjectCostBudget> getProjectAllFinishedTask(Long projectId,Integer costType);
 
     List<ProjectCostBudget> getAllPracticalBudgetByProjectId(Long projectId);
+
+    BigDecimal getYearStaffDisburse(int year);
 }

+ 79 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -32,6 +33,12 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
 
     private final IAnnualBudgetDisburseService disburseService;
 
+    private final IContractReturnedInfoService returnedInfoService;
+
+    private final IProjectCostBudgetService budgetService;
+
+    private final IContractInfoService contractInfoService;
+
     /**
      * 新增年度经营预算
      * @param dto
@@ -50,11 +57,11 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         BigDecimal contractTotal = map2.get("1");
         BigDecimal planReturnedTotal = map2.get("2");
 
-        //总经营预算
+        //总经营预算,所有支出总额
         dto.setTotalBudget(disburseTotal);
-        //年度合同指标
-        dto.setAnnualContractTarget(contractTotal);
-        //年度利润指标
+        //年度合同指标,预计本年度回款总额
+        dto.setAnnualContractTarget(planReturnedTotal);
+        //年度利润指标, 合同指标减经营预算
         dto.setAnnualProfitTarget(planReturnedTotal.subtract(disburseTotal));
         //人工成本
         dto.setStaffCost(staffTotal);
@@ -290,6 +297,74 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         return allBudgetSubject;
     }
 
+    /**
+     * 门户-年度指标统计 ,统计今年的
+     */
+    @Override
+    public AnnualBudgetVO3 portalAnnualTarget() {
+        AnnualBudgetVO3 vo3 = new AnnualBudgetVO3();
+        //获取今年
+        int year = LocalDate.now().getYear();
+        //获取今年的年度预算
+        AnnualBudget annualBudget = baseMapper.getThisYearBudget(year);
+        if (annualBudget == null){
+            throw new ServiceException("请先做年度预算");
+        }
+        //年度利润指标
+        if (annualBudget.getAnnualContractTarget() == null){
+            annualBudget.setAnnualContractTarget(new BigDecimal(0));
+        }
+        if (annualBudget.getAnnualProfitTarget() == null){
+            annualBudget.setAnnualProfitTarget(new BigDecimal(0));
+        }
+        vo3.setAnnualProfitTarget(annualBudget.getAnnualProfitTarget());
+        //年度合同指标
+        vo3.setAnnualContractTarget(annualBudget.getAnnualContractTarget());
+        //获取今年的已收入:合同回款
+        BigDecimal yearReturned = returnedInfoService.getYearReturned(year);
+        vo3.setYearReturned(yearReturned);
+        //统计今年的已盈利:已收入-支出 ,目前已支出只统计闭环的计划
+        //获取一年人工支出
+        BigDecimal yearStaffDisburse = budgetService.getYearStaffDisburse(year);
+        vo3.setYearProfit(yearReturned.subtract(yearStaffDisburse));
+        //合同进度统计
+        if (vo3.getAnnualContractTarget() == null || vo3.getAnnualContractTarget().compareTo(BigDecimal.ZERO) == 0 || vo3.getYearReturned().compareTo(BigDecimal.ZERO) == 0){
+            vo3.setContractSchedule(0);
+        }else {
+            vo3.setContractSchedule(vo3.getYearReturned().divide(vo3.getAnnualContractTarget(),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
+        }
+        //利润进度统计
+        if (vo3.getAnnualProfitTarget() == null || vo3.getAnnualProfitTarget().compareTo(BigDecimal.ZERO) == 0 || vo3.getYearProfit().compareTo(BigDecimal.ZERO) == 0){
+            vo3.setProfitSchedule(0);
+        }else {
+            vo3.setProfitSchedule(vo3.getYearProfit().divide(vo3.getAnnualProfitTarget(),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue());
+        }
+        return vo3;
+    }
+
+    /**
+     * 门户-年度各项费用统计
+     */
+    @Override
+    public Map<String, BigDecimal> portalAnnualCost(String year) {
+        int y = Integer.parseInt(year);
+        Map<String,BigDecimal> map = new HashMap<>();
+        //总合同:当年所有合同金额
+        BigDecimal yearContractMoney = contractInfoService.getYearContractMoney(y);
+        map.put("yearContractMoney",yearContractMoney);
+        //总实际收入:当年所有回款
+        BigDecimal yearReturned = returnedInfoService.getYearReturned(y);
+        map.put("yearReturned",yearReturned);
+        //总实际支出:当年所有报销支出,和人工支出
+        BigDecimal yearStaffDisburse = budgetService.getYearStaffDisburse(y);
+        map.put("yearStaffDisburse",yearStaffDisburse);
+        //总计划支出:年度预算总计划支出
+        AnnualBudget annualBudget = baseMapper.getThisYearBudget(y);
+        BigDecimal totalBudget = annualBudget.getTotalBudget();
+        map.put("totalBudget",totalBudget);
+        return map;
+    }
+
     /**
      * 统计支出 1支出总和2工资总和
      */

+ 14 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java

@@ -132,4 +132,18 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     public List<ControlContractInfo> getList() {
         return baseMapper.getList();
     }
+
+    /**
+     * 获取当年所有合同金额总和
+     * @param year
+     * @return
+     */
+    @Override
+    public BigDecimal getYearContractMoney(int year) {
+        BigDecimal decimal = baseMapper.getYearContractMoney(year);
+        if (decimal == null){
+            return new BigDecimal(0);
+        }
+        return decimal;
+    }
 }

+ 14 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractReturnedInfoServiceImpl.java

@@ -83,4 +83,18 @@ public class ContractReturnedInfoServiceImpl extends BaseServiceImpl<ContractRet
     public List<ContractReturnedInfoVO> getListByProjectId(Long projectId) {
         return baseMapper.getListByProjectId(projectId);
     }
+
+    /**
+     * 获取指定一年的回款
+     * @param year
+     * @return
+     */
+    @Override
+    public BigDecimal getYearReturned(int year) {
+        BigDecimal yearReturned = baseMapper.getYearReturned(year);
+        if (yearReturned == null){
+            return new BigDecimal(0);
+        }
+        return yearReturned;
+    }
 }

+ 53 - 12
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -122,7 +122,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
     }
 
     @Override
-    public ControlProjectInfoVO page(ControlProjectInfoDTO dto, Query query) {
+    public List<ControlProjectInfoVO> page(ControlProjectInfoDTO dto, Query query) {
         IPage page = new Page(query.getCurrent(), query.getSize());
         return baseMapper.page(page,dto);
     }
@@ -142,15 +142,42 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         //获取项目下所有已审批的计划
         List<ProjectCostBudgetVO2> list = baseMapper.getApprovePlan(id);
         //获取项目下所有的子计划
-        List<ProjectCostBudget> childrenList = baseMapper.getAllChildrenPlan(id);
-        //把子计划按parentId分组
-        Map<Long, List<ProjectCostBudget>> listMap = childrenList.parallelStream()
-                .collect(Collectors.groupingBy(ProjectCostBudget::getParentId));
-        Set<Long> key = listMap.keySet();
-        //把子计划插入计划里
-        for (ProjectCostBudgetVO2 vo2 : list) {
-            if (key.contains(vo2.getId())){
-                vo2.setChildrenList(listMap.get(vo2.getId()));
+        List<ProjectCostBudgetVO2> childrenList = baseMapper.getAllChildrenPlan(id);
+        if (childrenList != null && childrenList.size() >0) {
+            //把子计划按parentId分组
+            Map<Long, List<ProjectCostBudgetVO2>> listMap = childrenList.parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudgetVO2::getParentId));
+            Set<Long> key = listMap.keySet();
+            //循环所有父计划
+            for (ProjectCostBudgetVO2 vo2 : list) {
+                if (vo2.getTaskApprove() == 1) {
+                        vo2.setTaskFinishedStatus(2);
+                }
+                //如果子计划,把子计划插入计划里
+                if (key.contains(vo2.getId())) {
+                    //如果计划已经完成,则不计算超时
+                    if (vo2.getTaskFinishedStatus() == null) {
+                        //有子计划,判断子计划加起来是否超过预算天数
+                        BigDecimal workDays = new BigDecimal(0);
+                        List<ProjectCostBudgetVO2> vo2List = listMap.get(vo2.getId());
+                        for (ProjectCostBudgetVO2 budgetVO2 : vo2List) {
+                            if (budgetVO2.getPlanDays() != null) {
+                                workDays = workDays.add(budgetVO2.getPlanDays());
+                            }
+                        }
+                        if (workDays.compareTo(vo2.getBudgetDays()) == 1) {
+                            vo2.setTaskFinishedStatus(1);
+                        }
+                    }
+                    vo2.setChildrenList(listMap.get(vo2.getId()));
+                }else {
+                    //没有子计划,则计划父计划的时间是否超时
+                    if (vo2.getTaskFinishedStatus() == null && vo2.getPlanDays() != null){
+                        if (vo2.getPlanDays().compareTo(vo2.getBudgetDays()) == 1) {
+                            vo2.setTaskFinishedStatus(1);
+                        }
+                    }
+                }
             }
         }
         //根据单位分类
@@ -201,7 +228,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         List<ProjectCostBudget> parentList = new ArrayList<>();
         //把所有子计划分离出来,并且设置父类id
         for (ProjectCostBudgetVO2 vo2 : list) {
-            List<ProjectCostBudget> vo2ChildrenList = vo2.getChildrenList();
+            List<ProjectCostBudgetVO2> vo2ChildrenList = vo2.getChildrenList();
             if (vo2ChildrenList != null && vo2ChildrenList.size() > 0){
                 //有子计划
                 for (ProjectCostBudget budget : vo2ChildrenList) {
@@ -397,7 +424,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
 
     /**
      * 获取项目的所有实际费用
-     * @param id
+     * @param projectId
      * @return
      */
     @Override
@@ -405,6 +432,20 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         return baseMapper.getAllPracticalBudgetByProjectId(projectId);
     }
 
+    /**
+     * 获取一年的人工支出
+     * @param year
+     * @return
+     */
+    @Override
+    public BigDecimal getYearStaffDisburse(int year) {
+        BigDecimal yearStaffDisburse = baseMapper.getYearStaffDisburse(year);
+        if (yearStaffDisburse == null){
+            return new BigDecimal(0);
+        }
+        return yearStaffDisburse;
+    }
+
     /**
      * 统计一行的几个总金额
      */