Răsfoiți Sursa

Merge remote-tracking branch 'origin/master'

luok 2 ani în urmă
părinte
comite
c69c8de8a6
39 a modificat fișierele cu 615 adăugiri și 51 ștergeri
  1. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentMonthPlan.java
  2. 4 4
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java
  3. 5 2
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  4. 4 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AllProjectStatsVO.java
  5. 20 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AnnualProjectCostVO.java
  6. 25 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DeptMonthPlanRatioVO.java
  7. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java
  8. 10 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java
  9. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectProcessVO.java
  10. 4 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  11. 98 10
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  12. 12 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  13. 44 3
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java
  14. 44 6
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentMonthPlanController.java
  15. 4 4
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentPlanLogController.java
  16. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  17. 3 3
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java
  18. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectProcessController.java
  19. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.java
  20. 5 5
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml
  21. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.java
  22. 7 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml
  23. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  24. 31 2
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  25. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  26. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  27. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetService.java
  28. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentMonthPlanService.java
  29. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  30. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  31. 167 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  32. 15 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  33. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java
  34. 43 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  35. 3 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetStatsServiceImpl.java
  36. 8 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  37. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  38. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  39. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentMonthPlan.java

@@ -25,6 +25,9 @@ public class DepartmentMonthPlan extends BaseEntity {
     @ApiModelProperty(value = "部门类型")
     private Integer departmentType;
 
+    @ApiModelProperty(value = "部门id")
+    private Long deptId;
+
     @ApiModelProperty(value = "计划日期")
     private String planDate;
 

+ 4 - 4
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java

@@ -99,18 +99,18 @@ public class DepartmentPlanLog extends BaseEntity {
     private LocalDate pausePlanEndTime;
 
 
-    @ApiModelProperty(value = "计划天数")
+    @ApiModelProperty(value = "项目原计划起止工时")
     private BigDecimal planDays;
 
-    @ApiModelProperty(value = "实际工作时间")
+    @ApiModelProperty(value = "上一次计划截至暂停阶段,起止工时(天)")
     private BigDecimal realWorkDays;
 
     @ApiModelProperty(value = "计划执行顺序")
     private Integer sort;
 
-    @ApiModelProperty(value = "中途开启计划起止天数")
+    @ApiModelProperty(value = "中途暂停之后开启计划起止工时(天)")
     private BigDecimal openPlanStartEndDays;
 
-    @ApiModelProperty(value = "上一次中途开启计划起止天数")
+    @ApiModelProperty(value = "上一次计划工时(天)")
     private BigDecimal lastOpenPlanStartEndDays;
 }

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

@@ -31,7 +31,7 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "单位类型1施工2监理3建设")
     private Integer unitType;
 
-    @ApiModelProperty(value = "部门")
+    @ApiModelProperty(value = "费用分摊部门")
     private Long deptId;
 
     @ApiModelProperty(value = "费用类型")
@@ -116,9 +116,12 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "计划天数")
     private BigDecimal planDays;
 
-    @ApiModelProperty(value = "实际任务天数")
+    @ApiModelProperty(value = "任务实际完成天数")
     private BigDecimal practicalTaskDays;
 
+    @ApiModelProperty(value = "任务实际完成时间")
+    private LocalDate practicalFinishTime;
+
     @ApiModelProperty(value = "任务完成后是否审批通过")
     private Integer taskApprove;
 

+ 4 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AllProjectStatsVO.java

@@ -30,7 +30,7 @@ public class AllProjectStatsVO {
     @ApiModelProperty(value = "合同金额")
     private BigDecimal contractMoney;
 
-    @ApiModelProperty(value = "算成本")
+    @ApiModelProperty(value = "算成本")
     private BigDecimal budgetCost;
 
     @ApiModelProperty(value = "实际已支出成本")
@@ -57,4 +57,7 @@ public class AllProjectStatsVO {
     @ApiModelProperty(value = "项目id")
     private Long projectId;
 
+    @ApiModelProperty(value = "延期计划条数")
+    private Integer timeOutPlanTotal;
+
 }

+ 20 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AnnualProjectCostVO.java

@@ -0,0 +1,20 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/28 15:20
+ **/
+@Data
+public class AnnualProjectCostVO {
+    @ApiModelProperty(value = "关联项目名称")
+    private String name;
+
+    @ApiModelProperty(value = "关联项目名称")
+    private List<Integer> value;
+}

+ 25 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DeptMonthPlanRatioVO.java

@@ -0,0 +1,25 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Param  门户-当月部门计划比重
+ * @Author wangwl
+ * @Date 2023/6/29 9:48
+ **/
+@Data
+public class DeptMonthPlanRatioVO {
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "实施投入")
+    private String businessRatio;
+
+    @ApiModelProperty(value = "研发投入")
+    private String devRatio;
+
+    @ApiModelProperty(value = "维护投入")
+    private String maintainRatio;
+
+}

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java

@@ -38,6 +38,9 @@ public class ProjectCostBudgetVO extends ProjectCostBudget {
     @ApiModelProperty(value = "状态值")
     private String statusValue;
 
+    @ApiModelProperty(value = "0不显示,1暂停,2开启")
+    private Integer startOrStop;
+
     @ApiModelProperty(value = "计划施工单位")
     private Map<Integer,List<ProjectCostBudgetVO2>> buildUnit;
 

+ 10 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.control.entity.ProjectCostBudget;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -31,7 +32,16 @@ public class ProjectCostBudgetVO2 extends ProjectCostBudget {
     @ApiModelProperty(value = "任务明细值")
     private String taskDetailValue;
 
+    @ApiModelProperty(value = "岗位类型值")
+    private String postTypeValue;
+
     @ApiModelProperty(value = "任务完成状态,1黄色,2绿色")
     private Integer taskFinishedStatus;
 
+    @ApiModelProperty(value = "计划总金额")
+    private BigDecimal planCountMoney;
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
 }

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

@@ -33,7 +33,7 @@ public class ProjectProcessVO extends ProjectProcess {
     @ApiModelProperty(value = "人员投入")
     private Integer staffTotal;
 
-    @ApiModelProperty(value = "明细")
+    @ApiModelProperty(value = "费用明细")
     private List<costDetail> costDetails;
 
     @Data

+ 4 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java

@@ -147,4 +147,8 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
     Long getAllArchiveFileSize(@Param("projectId") Long projectId);
 
 	ArchivesAutoVO getArchiveFileList(@Param("id") Long id);
+
+	List<ArchivesAutoVO> getArchivesCabinet22(@Param("vo") ArchivesAutoVO archivesAuto);
+
+	List<ArchivesAutoVO> pageByArchivesAuto5(@Param("vo") ArchivesAutoVO vo);
 }

+ 98 - 10
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -615,12 +615,11 @@
     </select>
 
     <select id="pageByArchivesAuto3" resultMap="archivesAutoResultMap">
-        select uaa.*
+        select uaa.id,uaa.name,uaa.file_number,uaa.unit,uaa.storage_time,uaa.secret_level
         from
         (SELECT id FROM m_archive_tree_contract WHERE project_id =#{vo.projectId}
         and  ancestors like concat('%',#{vo.nodeId},'%')
-        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id left join u_archive_file uaf on uaa.id =
-        uaf.archive_id
+        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id
         where uaa.is_deleted = 0 and uaa.is_archive = 1
         <if test="vo.contractId != null and vo.contractId != ''">
             and uaa.contract_id = #{vo.contractId}
@@ -633,8 +632,7 @@
         select uaa.id from
         (SELECT id FROM m_archive_tree_contract WHERE project_id =#{vo.projectId}
         and  ancestors like concat('%',#{vo.nodeId},'%')
-        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id left join u_archive_file uaf on uaa.id =
-        uaf.archive_id
+        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id
         where uaa.is_deleted = 0 and uaa.is_archive = 1
         <if test="vo.contractId != null and vo.contractId != ''">
             and uaa.contract_id = #{vo.contractId}
@@ -642,6 +640,50 @@
         <if test="vo.searchType == 1 and vo.queryValue != null and vo.queryValue != ''">
             and uaa.name like concat('%',#{vo.queryValue},'%') or uaa.file_number like concat('%',#{vo.queryValue},'%')
         </if>
+        <if test="vo.storageTimes != null and vo.storageTimes != ''">
+            and uaa.storage_time in
+            <foreach collection="vo.storageTimes" item="storageTime" open="(" separator="," close=")">
+                #{storageTime}
+            </foreach>
+        </if>
+        <if test="vo.secretLevels != null and vo.secretLevels != ''">
+            and uaa.secret_level in
+            <foreach collection="vo.secretLevels" item="secretLevel" open="(" separator="," close=")">
+                #{secretLevel}
+            </foreach>
+        </if>
+        <if test="vo.carrierTypes != null and vo.carrierTypes != ''">
+            and uaa.carrier_type in
+            <foreach collection="vo.carrierTypes" item="carrierType" open="(" separator="," close=")">
+                #{carrierType}
+            </foreach>
+        </if>
+        <if test="vo.years != null and vo.years != ''">
+            and
+            <foreach collection="vo.years" item="year" separator=" or" open="(" close=")">
+                #{year} BETWEEN DATE_FORMAT(uaa.start_date,'%Y') and DATE_FORMAT(uaa.end_date ,'%Y')
+            </foreach>
+        </if>
+        <if test="vo.months != null and vo.months != ''">
+            and
+            <foreach collection="vo.months" item="month" separator=" or" open="(" close=")">
+                #{month} BETWEEN DATE_FORMAT(uaa.start_date,'%c') and DATE_FORMAT(uaa.end_date ,'%c')
+            </foreach>
+        </if>
+        GROUP BY uaa.id
+        order by uaa.tree_sort,uaa.auto_file_sort,uaa.file_number asc
+    </select>
+
+    <select id="pageByArchivesAuto5" resultMap="archivesAutoResultMap">
+        select uaa.id from
+        (SELECT id FROM m_archive_tree_contract WHERE project_id =#{vo.projectId}
+        and  ancestors like concat('%',#{vo.nodeId},'%')
+        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id left join u_archive_file uaf on uaa.id =
+        uaf.archive_id
+        where uaa.is_deleted = 0 and uaa.is_archive = 1
+        <if test="vo.contractId != null and vo.contractId != ''">
+            and uaa.contract_id = #{vo.contractId}
+        </if>
         <if test="vo.searchType == 2 and vo.queryValue != null and vo.queryValue != ''">
             and uaf.file_name like concat('%',#{vo.queryValue},'%')
         </if>
@@ -680,11 +722,10 @@
     </select>
 
     <select id="getArchivesCabinet" resultMap="archivesAutoResultMap">
-        select uaa.* from
+        select uaa.id,uaa.name,uaa.file_number,uaa.unit from
         (SELECT id FROM m_archive_tree_contract WHERE project_id =#{vo.projectId}
         and  ancestors like concat('%',#{vo.nodeId},'%')
-        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id left join u_archive_file uaf on uaa.id =
-        uaf.archive_id
+        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id
         where uaa.is_deleted = 0 and uaa.is_archive = 1
         <if test="vo.contractId != null and vo.contractId != ''">
             and uaa.contract_id = #{vo.contractId}
@@ -695,6 +736,53 @@
     </select>
 
     <select id="getArchivesCabinet2" resultMap="archivesAutoResultMap">
+        select uaa.id from
+        (SELECT id FROM m_archive_tree_contract WHERE project_id =#{vo.projectId}
+        and  ancestors like concat('%',#{vo.nodeId},'%')
+        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id
+        where uaa.is_deleted = 0 and uaa.is_archive = 1
+        <if test="vo.contractId != null and vo.contractId != ''">
+            and uaa.contract_id = #{vo.contractId}
+        </if>
+        <if test="vo.searchType == 1 and vo.queryValue != null and vo.queryValue != ''">
+            and uaa.name like concat('%',#{vo.queryValue},'%')
+        </if>
+        <if test="vo.storageTimes != null and vo.storageTimes != ''">
+            and uaa.storage_time in
+            <foreach collection="vo.storageTimes" item="storageTime" open="(" separator="," close=")">
+                #{storageTime}
+            </foreach>
+        </if>
+        <if test="vo.secretLevels != null and vo.secretLevels != ''">
+            and uaa.secret_level in
+            <foreach collection="vo.secretLevels" item="secretLevel" open="(" separator="," close=")">
+                #{secretLevel}
+            </foreach>
+        </if>
+        <if test="vo.carrierTypes != null and vo.carrierTypes != ''">
+            and uaa.carrier_type in
+            <foreach collection="vo.carrierTypes" item="carrierType" open="(" separator="," close=")">
+                #{carrierType}
+            </foreach>
+        </if>
+        <if test="vo.years != null and vo.years != ''">
+            and
+            <foreach collection="vo.years" item="year" separator=" or" open="(" close=")">
+                #{year} BETWEEN DATE_FORMAT(uaa.start_date,'%Y') and DATE_FORMAT(uaa.end_date ,'%Y')
+            </foreach>
+        </if>
+        <if test="vo.months != null and vo.months != ''">
+            and
+            <foreach collection="vo.months" item="month" separator=" or" open="(" close=")">
+                #{month} BETWEEN DATE_FORMAT(uaa.start_date,'%c') and DATE_FORMAT(uaa.end_date ,'%c')
+            </foreach>
+        </if>
+        GROUP BY uaa.id
+                order by uaa.tree_sort,uaa.auto_file_sort,uaa.file_number asc
+--         order by uaa.id
+    </select>
+
+    <select id="getArchivesCabinet22" resultMap="archivesAutoResultMap">
         select uaa.id from
         (SELECT id FROM m_archive_tree_contract WHERE project_id =#{vo.projectId}
         and  ancestors like concat('%',#{vo.nodeId},'%')
@@ -741,8 +829,8 @@
             </foreach>
         </if>
         GROUP BY uaa.id
-                order by uaa.tree_sort,uaa.auto_file_sort,uaa.file_number asc
---         order by uaa.id
+        order by uaa.tree_sort,uaa.auto_file_sort,uaa.file_number asc
+        --         order by uaa.id
     </select>
 
     <select id="getAllArchiveByContractType" resultType="org.springblade.archive.vo.ArchivesAutoVO">

+ 12 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -216,7 +216,12 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			vo.setYears(null);
 			vo.setMonths(null);
 		}
-		List<ArchivesAutoVO> selectAutos = baseMapper.pageByArchivesAuto4(vo);
+		List<ArchivesAutoVO> selectAutos = new ArrayList<>();
+		if (vo.getSearchType() == 1) {
+			selectAutos = baseMapper.pageByArchivesAuto4(vo);
+		}else {
+			selectAutos = baseMapper.pageByArchivesAuto5(vo);
+		}
 		List<Long> ids = new ArrayList<>();
 		if (selectAutos != null && selectAutos.size() > 0) {
 			ids = selectAutos.stream().map(l -> l.getId()).collect(Collectors.toList());
@@ -336,7 +341,12 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		//根据单位查询所有档案
 		List<ArchivesAutoVO> archivesAutos = baseMapper.getArchivesCabinet(archivesAuto);
 		//根据选择条件查询所有档案
-		List<ArchivesAutoVO> selectAutos = baseMapper.getArchivesCabinet2(archivesAuto);
+		List<ArchivesAutoVO> selectAutos = new ArrayList<>();
+		if (archivesAuto.getSearchType() == 1) {
+			selectAutos = baseMapper.getArchivesCabinet2(archivesAuto);
+		}else {
+			selectAutos = baseMapper.getArchivesCabinet22(archivesAuto);
+		}
 		List<Long> ids = new ArrayList<>();
 		if (selectAutos != null && selectAutos.size() > 0) {
 			ids = selectAutos.stream().map(l -> l.getId()).collect(Collectors.toList());

+ 44 - 3
blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java

@@ -20,6 +20,7 @@ import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
@@ -137,7 +138,7 @@ public class AnnualBudgetController {
      * 门户-年度各项费用统计
      */
     @GetMapping("/portalAnnualCost")
-    @ApiOperationSupport(order = 10)
+    @ApiOperationSupport(order = 11)
     @ApiOperation(value = "门户-年度各项费用统计")
     public R<Map<String, BigDecimal>> portalAnnualCost(String year) {
         return R.data(budgetService.portalAnnualCost(year));
@@ -147,8 +148,8 @@ public class AnnualBudgetController {
      * 年度列表
      */
     @GetMapping("/yearList")
-    @ApiOperationSupport(order = 11)
-    @ApiOperation(value = "年度列表")
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "门户-年度列表")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "type", value = "1不包含所有,2包含所有", required = true),
     })
@@ -156,4 +157,44 @@ public class AnnualBudgetController {
         return R.data(budgetService.yearList(type));
     }
 
+    /**
+     * 门户-年度各项目支出对比
+     */
+    @GetMapping("/portalAnnualProjectCost")
+    @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "门户-年度各项目支出对比")
+    public R<List<AnnualProjectCostVO>> portalAnnualProjectCost(String year) {
+        return R.data(budgetService.portalAnnualProjectCost(year));
+    }
+
+    /**
+     * 门户-当月各部门计划安排比重
+     */
+    @GetMapping("/portalDeptMonthPlanRatio")
+    @ApiOperationSupport(order = 13)
+    @ApiOperation(value = "门户-当月各部门计划安排比重",notes = "传入日期如:2023-06")
+    public R<List<DeptMonthPlanRatioVO>> portalProjectMonthRatio(String date) {
+        return R.data(budgetService.portalProjectMonthRatio(date));
+    }
+
+    /**
+     * 门户-风险计划
+     */
+    @GetMapping("/portalRiskPlan")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "门户-风险计划")
+    public R<List<AllProjectStatsVO>> portalRiskPlan() {
+        return R.data(budgetService.portalRiskPlan());
+    }
+
+//    /**
+//     * 门户-风险计划查看
+//     */
+//    @GetMapping("/portalRiskPlanDetail")
+//    @ApiOperationSupport(order = 15)
+//    @ApiOperation(value = "门户-风险计划查看")
+//    public R<List<AllProjectStatsVO>> portalRiskPlanDetail() {
+//        return R.data(budgetService.portalRiskPlanDetail());
+//    }
+
 }

+ 44 - 6
blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentMonthPlanController.java

@@ -15,6 +15,7 @@ import org.springblade.control.service.IDepartmentMonthPlanService;
 import org.springblade.control.vo.DepartmentMonthPlanVO;
 import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
 
@@ -38,7 +39,7 @@ public class DepartmentMonthPlanController {
      * 部门月计划分页
      */
     @GetMapping("/getPage")
-    @ApiOperationSupport(order = 3)
+    @ApiOperationSupport(order = 1)
     @ApiOperation(value = "部门月计划分页")
     public R<List<DepartmentMonthPlanVO>> getPage(ControlContractInfoDTO dto, Query query) {
         return R.data(planService.getPage(dto,query));
@@ -50,6 +51,11 @@ public class DepartmentMonthPlanController {
     @PostMapping("/addDepartmentPlan")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "新增部门月计划")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "departmentType", value = "部门类型", required = true),
+            @ApiImplicitParam(name = "deptId", value = "部门id", required = true),
+            @ApiImplicitParam(name = "planDate", value = "计划日期", required = true),
+    })
     public R<List<ProjectCostBudgetVO>> addDepartmentPlan(@RequestBody DepartmentMonthPlan plan) {
         return R.data(planService.addDepartmentPlan(plan));
     }
@@ -58,10 +64,10 @@ public class DepartmentMonthPlanController {
      * 查询部门月计划
      */
     @PostMapping("/getDepartmentPlan")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 3)
     @ApiOperation(value = "查询部门月计划")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "departmentType", value = "部门名称", required = true),
+            @ApiImplicitParam(name = "departmentType", value = "部门类型", required = true),
             @ApiImplicitParam(name = "planDate", value = "计划日期", required = true),
     })
     public R<List<ProjectCostBudgetVO>> getDepartmentPlan(@RequestBody DepartmentMonthPlan plan) {
@@ -72,21 +78,53 @@ public class DepartmentMonthPlanController {
      * 修改部门月计划
      */
     @PostMapping("/updateDepartmentPlan")
-    @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "修改部门月计划")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "修改部门月计划" ,notes = "只需要传入departmentPlanList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "departmentPlanList", value = "部门计划集合", required = true),
+    })
     public R updateDepartmentPlan(@RequestBody ProjectCostBudgetDTO dto) {
         planService.updateDepartmentPlan(dto);
         return R.success("保存成功");
     }
 
+    /**
+     * 删除部门月计划
+     */
+    @GetMapping("/deleteById")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "删除部门月计划")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "部门月计划主键", required = true),
+    })
+    public R deleteById(Long id) {
+        planService.deleteById(id);
+        return R.success("删除成功");
+
+    }
+
     /**
      * 获取前5个部门列表
      */
     @GetMapping("/getDepartmentDict")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 5)
     @ApiOperation(value = "获取部门列表")
     public R<List<DictInfo>> getDepartmentDict() {
         return R.data(planService.getDepartmentDict());
 
     }
+
+    /**
+     * 获取当前部门员工
+     */
+    @GetMapping("/getDepartmentUserDict")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取当前部门员工")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "departmentType", value = "部门名称", required = true),
+    })
+    public R<List<BladeUser>> getDepartmentUserDict(Integer departmentType) {
+        return R.data(planService.getDepartmentUserDict(departmentType));
+
+    }
 }

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

@@ -54,11 +54,11 @@ public class DepartmentPlanLogController {
     }
 
     /**
-     * 暂停保存
+     * 暂停
      */
     @PostMapping("/savePlanInPause")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "暂停保存")
+    @ApiOperation(value = "暂停计划的保存")
     public R savePlanInPause(@RequestBody DepartmentPlanLog log) {
         logService.savePlanInPause(log);
         return R.success("暂停成功");
@@ -79,11 +79,11 @@ public class DepartmentPlanLogController {
     }
 
     /**
-     * 开启保存
+     * 开启
      */
     @PostMapping("/savePlanInOpen")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "开启保存")
+    @ApiOperation(value = "开启计划的保存")
     public R savePlanInOpen(@RequestBody DepartmentPlanLog log) {
         logService.savePlanInOpen(log);
         return R.success("开启成功");

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

@@ -85,7 +85,7 @@ public class ProjectCostBudgetController {
             @ApiImplicitParam(name = "startDate", value = "开始日期", required = true),
             @ApiImplicitParam(name = "endDate", value = "结束日期", required = true),
     })
-    public R getWorkDays(@RequestParam("startDate") @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate startDate,
+    public R<Integer> getWorkDays(@RequestParam("startDate") @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate startDate,
                          @RequestParam("endDate") @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate endDate){
         return R.data(budgetService.getWorkDays(startDate,endDate));
     }

+ 3 - 3
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java

@@ -120,7 +120,7 @@ public class ProjectInfoController {
      */
     @GetMapping("/allProjectStats")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "项目统计总金额成本")
+    @ApiOperation(value = "项目统计-项目统计")
     public R<AllProjectStatsVO> allProjectStats() {
         return R.data(projectInfoService.allProjectStats());
     }
@@ -130,7 +130,7 @@ public class ProjectInfoController {
      */
     @GetMapping("/ProjectListStats")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "项目统计列表统计")
+    @ApiOperation(value = "项目统计-列表统计")
     public R<List<AllProjectStatsVO>> ProjectListStats() {
         return R.data(projectInfoService.ProjectListStats());
     }
@@ -140,7 +140,7 @@ public class ProjectInfoController {
      */
     @GetMapping("/ProjectCostTypeStats")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "项目统计费用分类")
+    @ApiOperation(value = "项目统计-费用分类",notes = "传入项目id")
     public R<List<AllProjectStatsVO>> ProjectCostTypeStats(Long id) {
         return R.data(projectInfoService.ProjectCostTypeStats(id));
     }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectProcessController.java

@@ -41,7 +41,7 @@ public class ProjectProcessController {
      */
     @GetMapping("/projectLinkCost")
     @ApiOperationSupport(order = 10)
-    @ApiOperation(value = "项目统计-环节费用")
+    @ApiOperation(value = "项目统计-环节费用",notes = "传入项目id和费用分类")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "projectId", value = "项目id", required = true),
             @ApiImplicitParam(name = "costType", value = "费用分类", required = true),

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

@@ -38,5 +38,5 @@ public interface AnnualBudgetMapper extends BaseMapper<AnnualBudget> {
 
     List<AnnualBudget> getAllYearBudget(@Param("year") int year);
 
-    List<String> yearList();
+    Integer yearList();
 }

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

@@ -58,11 +58,11 @@
         select   <include refid="budget_column" />
         from c_annual_budget where is_deleted = 0
     </select>
-    <select id="yearList" resultType="java.lang.String">
-        select DISTINCT CONCAT(DATE_FORMAT(start_time,'%Y'),"年")
-        from c_control_project_info
-        WHERE is_deleted = 0
-        order by start_time
+    <select id="yearList" resultType="java.lang.Integer">
+        select DATE_FORMAT(start_time,'%Y')
+        from c_control_project_info cpi
+        WHERE is_deleted = 0 order by start_time
+            limit 1
     </select>
 
 

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

@@ -10,6 +10,7 @@ import org.springblade.control.entity.DepartmentMonthPlan;
 import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.control.vo.DepartmentMonthPlanVO;
+import org.springblade.core.secure.BladeUser;
 
 import java.util.List;
 
@@ -26,4 +27,8 @@ public interface DepartmentMonthPlanMapper extends BaseMapper<DepartmentMonthPla
     String getDepartmentName(@Param("departmentType") Integer departmentType);
 
     List<DepartmentMonthPlanVO> getPage(IPage page,@Param("dto") ControlContractInfoDTO dto);
+
+    List<BladeUser> getDepartmentUserDict(@Param("type") Integer departmentType);
+
+    void deleteById2(@Param("id") Long id);
 }

+ 7 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml

@@ -1,7 +1,10 @@
 <?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.DepartmentMonthPlanMapper">
-
+    <delete id="deleteById2">
+        DELETE FROM c_department_month_plan
+        WHERE id = #{id}
+    </delete>
 
     <select id="getDepartmentDict" resultType="org.springblade.control.entity.DictInfo">
         select * from c_dict_info WHERE code = 'department_type' order by sort LIMIT 5
@@ -24,4 +27,7 @@
                     or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'beginPlanTotal'
         FROM c_department_month_plan dmp
     </select>
+    <select id="getDepartmentUserDict" resultType="org.springblade.core.secure.BladeUser">
+
+    </select>
 </mapper>

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

@@ -59,4 +59,10 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
 
     //获取一年人工支出
     BigDecimal getYearStaffDisburse(@Param("year") int year);
+
+    List<ProjectCostBudget> getBudgetByYear(@Param("year") int y);
+
+    List<ProjectCostBudgetVO2> getPlanByMonth(@Param("date") String date);
+
+    List<ProjectCostBudget> getRiskPlan(@Param("projectId") Long projectId,@Param("costType") Integer costType);
 }

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

@@ -24,7 +24,7 @@
                 (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 di.dict_name from c_dict_info di where di.type = 3 and di.code = pcb.post_type) as postTypeValue
         from c_project_cost_budget pcb
-        where pcb.project_id = #{budget.projectId}
+        where pcb.project_id = #{budget.projectId} and pcb.parent_id = 0
         <if test="budget.costType != null and budget.costType != ''">
             and pcb.cost_type = #{budget.costType}
         </if>
@@ -71,7 +71,8 @@
             (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
+            (select cri.returned_condition from c_contract_returned_info cri where cri.id = pcb.contract_returned_id) as returnedValue,
+            (select di.dict_name from c_dict_info di where di.type = 3 and di.code = pcb.post_type) as postTypeValue
         FROM c_project_cost_budget pcb WHERE pcb.project_id = #{id} AND pcb.approve = 1
     </select>
 
@@ -146,6 +147,34 @@
                                                                                                                   (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>
+    <select id="getBudgetByYear" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select id,project_id,practical_finish_time ,actual_total_money  from c_project_cost_budget
+        WHERE is_deleted = 0 and task_approve = 1 and DATE_FORMAT(practical_finish_time ,'%Y') = #{year}
+    </select>
+    <select id="getPlanByMonth" resultType="org.springblade.control.vo.ProjectCostBudgetVO2">
+        select pcb.*,
+               (pcb.plan_days * (select bu.one_money from blade_user bu WHERE bu.id = pcb.task_user)) as 'planCountMoney',
+                (select cpi.name from c_control_project_info cpi WHERE cpi.id = pcb.project_id) as 'projectName'
+        from c_project_cost_budget pcb WHERE DATE_FORMAT(pcb.plan_start_time ,'%Y-%m') = #{date}
+                                         and pcb.task_user is not null and pcb.plan_days is not null
+    </select>
+    <select id="getRiskPlan" resultType="org.springblade.control.entity.ProjectCostBudget">
+        SELECT * from c_project_cost_budget WHERE plan_end_time &lt; NOW() and status in (2,3)
+        <if test="projectId != null">
+            and project_id = #{projectId}
+        </if>
+        <if test="costType != null">
+            and cost_type = #{costType}
+        </if>
+        UNION ALL
+        SELECT * from c_project_cost_budget WHERE plan_end_time &lt; practical_finish_time and status = 4
+        <if test="projectId != null">
+            and project_id = #{projectId}
+        </if>
+        <if test="costType != null">
+            and cost_type = #{costType}
+        </if>
+    </select>
 
 
 </mapper>

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

@@ -35,4 +35,6 @@ public interface ProjectInfoMapper extends BaseMapper<ControlProjectInfo> {
     List<DictInfo> getCostTypeDict();
 
     ControlProjectInfo getById(@Param("id") Long id);
+
+    List<ControlProjectInfo> listByYear(@Param("year") int year);
 }

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

@@ -77,6 +77,9 @@
     <select id="getById" resultType="org.springblade.control.entity.ControlProjectInfo">
         select * from c_control_project_info where id = #{id}
     </select>
+    <select id="listByYear" resultType="org.springblade.control.entity.ControlProjectInfo">
+        select * from c_control_project_info WHERE DATE_FORMAT(start_time,'%Y') &lt;= #{year} and DATE_FORMAT(end_time ,'%Y') &gt;= #{year}
+    </select>
 
 
 </mapper>

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

@@ -38,4 +38,10 @@ public interface IAnnualBudgetService extends BaseService<AnnualBudget> {
     Map<String, BigDecimal> portalAnnualCost(String year);
 
     List<String> yearList(Integer type);
+
+    List<AnnualProjectCostVO> portalAnnualProjectCost(String year);
+
+    List<DeptMonthPlanRatioVO> portalProjectMonthRatio(String date);
+
+    List<AllProjectStatsVO> portalRiskPlan();
 }

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

@@ -11,6 +11,7 @@ import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.control.vo.ProjectProcessVO;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 
 import java.util.List;
 
@@ -30,4 +31,8 @@ public interface IDepartmentMonthPlanService extends BaseService<DepartmentMonth
     List<ProjectCostBudgetVO> getDepartmentPlan(DepartmentMonthPlan plan);
 
     void updateDepartmentPlan(ProjectCostBudgetDTO dto);
+
+    List<BladeUser> getDepartmentUserDict(Integer departmentType);
+
+    void deleteById(Long id);
 }

+ 7 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -10,6 +10,7 @@ import org.springblade.control.entity.ProjectCostBudget;
 import org.springblade.control.entity.ProjectCostBudgetStats;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.control.vo.ProjectCostBudgetVO;
+import org.springblade.control.vo.ProjectCostBudgetVO2;
 import org.springblade.control.vo.ProjectCostBudgetVO3;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
@@ -61,4 +62,10 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     List<ProjectCostBudget> getAllPracticalBudgetByProjectId(Long projectId);
 
     BigDecimal getYearStaffDisburse(int year);
+
+    List<ProjectCostBudget> getBudgetByYear(int y);
+
+    List<ProjectCostBudgetVO2> getPlanByMonth(String date);
+
+    List<ProjectCostBudget> getRiskPlan(Long projectId,Integer costType);
 }

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

@@ -37,4 +37,6 @@ public interface IProjectInfoService extends BaseService<ControlProjectInfo> {
     List<AllProjectStatsVO> ProjectListStats();
 
     List<AllProjectStatsVO> ProjectCostTypeStats(Long id);
+
+    List<ControlProjectInfo> listByYear(int year);
 }

+ 167 - 1
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.rmi.ServerException;
 import java.time.LocalDate;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -37,8 +38,12 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
 
     private final IProjectCostBudgetService budgetService;
 
+    private final IDepartmentMonthPlanService monthPlanService;
+
     private final IContractInfoService contractInfoService;
 
+    private final IProjectInfoService projectInfoService;
+
     /**
      * 新增年度经营预算
      * @param dto
@@ -387,13 +392,174 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
 
     @Override
     public List<String> yearList(Integer type) {
-        List<String> list = baseMapper.yearList();
+        List<String> list = new ArrayList<>();
+        Integer year = baseMapper.yearList();
+        if (year != null) {
+            int thisYear = LocalDate.now().getYear();
+            for (int i = year; i <= thisYear; i++) {
+                list.add(i + "年");
+            }
+        }
         if (type != 1) {
             list.add("汇总所有");
         }
         return list;
     }
 
+    /**
+     * 门户-年度各项目支出对比
+     */
+    @Override
+    public List<AnnualProjectCostVO> portalAnnualProjectCost(String year) {
+        int y = Integer.parseInt(year.substring(0,4));
+        //查出指定年的项目
+        List<ControlProjectInfo> list = projectInfoService.listByYear(y);
+        if (list == null || list.size() <= 0){
+            return null;
+        }
+        List<AnnualProjectCostVO> mapList = new ArrayList<>();
+        //按年查询所有支出,按照项目分组,然后再按照月份分组统计
+        //目前查询人工支出
+        List<ProjectCostBudget> budgetByYear = budgetService.getBudgetByYear(y);
+        Map<Long, List<ProjectCostBudget>> map = budgetByYear.parallelStream()
+                .collect(Collectors.groupingBy(ProjectCostBudget::getProjectId));
+        for (ControlProjectInfo project : list) {
+            AnnualProjectCostVO vo = new AnnualProjectCostVO();
+            List<Integer> integerList = new ArrayList<>();
+            List<ProjectCostBudget> budgets = map.get(project.getId());
+            for (int i = 1; i <= 12; i++) {
+                BigDecimal big = new BigDecimal(0);
+                if (budgets != null && budgets.size() > 0) {
+                    for (ProjectCostBudget budget : budgets) {
+                        if (budget.getPracticalFinishTime().getMonthValue() == i) {
+                            big = big.add(budget.getActualTotalMoney());
+                        }
+                    }
+                }
+                integerList.add(big.intValue());
+            }
+            vo.setName(project.getName());
+            vo.setValue(integerList);
+            mapList.add(vo);
+        }
+        return mapList;
+    }
+
+    /**
+     * 门户-当月各部门计划安排比重
+     */
+    @Override
+    public List<DeptMonthPlanRatioVO> portalProjectMonthRatio(String date) {
+        //获取当月所有计划,和计划工资
+        List<ProjectCostBudgetVO2> planByMonth = budgetService.getPlanByMonth(date);
+        if (planByMonth != null || planByMonth.size() >= 0) {
+            List<DeptMonthPlanRatioVO> vos = new ArrayList<>();
+            //月计划包含的项目
+            Set<Long> projectIds = new HashSet<>();
+            //每个部门投入总和
+            BigDecimal businessCount = new BigDecimal(0);
+            BigDecimal devCount = new BigDecimal(0);
+            BigDecimal maintainCount = new BigDecimal(0);
+            //循环获取项目,获取每个部门总和
+            for (ProjectCostBudgetVO2 plan : planByMonth) {
+                projectIds.add(plan.getProjectId());
+                if (plan.getCostType() == 3) {
+                    businessCount = businessCount.add(plan.getPlanCountMoney());
+                } else if (plan.getCostType() == 2) {
+                    devCount = devCount.add(plan.getPlanCountMoney());
+                } else if (plan.getCostType() == 4) {
+                    maintainCount = maintainCount.add(plan.getPlanCountMoney());
+                }
+            }
+            //根据项目再一个一个存入
+            Map<Long, List<ProjectCostBudgetVO2>> projectMap = planByMonth.parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudgetVO2::getProjectId));
+            List<ControlProjectInfo> projectInfos = projectInfoService.listByIds(projectIds);
+            for (ControlProjectInfo projectInfo : projectInfos) {
+                DeptMonthPlanRatioVO vo = new DeptMonthPlanRatioVO();
+                BigDecimal business = new BigDecimal(0);
+                BigDecimal dev = new BigDecimal(0);
+                BigDecimal maintain = new BigDecimal(0);
+                vo.setProjectName(projectInfo.getName());
+                List<ProjectCostBudgetVO2> list = projectMap.get(projectInfo.getId());
+                for (ProjectCostBudgetVO2 vo2 : list) {
+                    if (vo2.getCostType() == 3) {
+                        business = business.add(vo2.getPlanCountMoney());
+                    } else if (vo2.getCostType() == 2) {
+                        dev = dev.add(vo2.getPlanCountMoney());
+                    } else if (vo2.getCostType() == 4) {
+                        maintain = maintain.add(vo2.getPlanCountMoney());
+                    }
+                }
+                //设置投入比
+                if (new BigDecimal(0).compareTo(businessCount) != 0){
+                    vo.setBusinessRatio(business.divide(businessCount, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue() + "%");
+                }
+                if (new BigDecimal(0).compareTo(devCount) != 0) {
+                    vo.setDevRatio(dev.divide(devCount, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue() + "%");
+                }
+                if (new BigDecimal(0).compareTo(maintainCount) != 0) {
+                    vo.setMaintainRatio(maintain.divide(maintainCount, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).intValue() + "%");
+                }
+                //插入结果集
+                vos.add(vo);
+            }
+            return vos;
+        }
+        return null;
+    }
+
+    /**
+     * 门户-风险计划
+     */
+    @Override
+    public List<AllProjectStatsVO> portalRiskPlan() {
+        //获取所有风险计划
+        List<ProjectCostBudget> riskPlan = budgetService.getRiskPlan(null,null);
+        if (riskPlan == null || riskPlan.size() <= 0) {
+            throw new ServiceException("暂无风险计划");
+        }
+        List<AllProjectStatsVO> vos = new ArrayList<>();
+        //获取部门映射值
+        List<DictInfo> costTypeDict = monthPlanService.getDepartmentDict();
+        Map<Integer, List<DictInfo>> collect = costTypeDict.parallelStream()
+                .collect(Collectors.groupingBy(DictInfo::getDictValue));
+        //风险计划按项目分组,再按照部门分组,再统计计划总数
+        Map<Long, List<ProjectCostBudget>> map = riskPlan.parallelStream()
+                .collect(Collectors.groupingBy(ProjectCostBudget::getProjectId));
+        List<ControlProjectInfo> projectInfos = projectInfoService.listByIds(map.keySet());
+        for (ControlProjectInfo info : projectInfos) {
+            //获取项目延期计划
+            List<ProjectCostBudget> budgets = map.get(info.getId());
+            //通过部门分组
+            Map<Integer, List<ProjectCostBudget>> listMap = budgets.parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudget::getCostType));
+            //添加进结果集
+            for (Integer integer : listMap.keySet()) {
+                AllProjectStatsVO vo = new AllProjectStatsVO();
+                vo.setProjectName(info.getName());
+                vo.setProjectId(info.getId());
+                vo.setCostType(integer);
+                //如果不为管理支出和外包劳务,则直接设置
+                if (integer != 5 && integer != 6){
+                    vo.setCostTypeValue(collect.get(integer).get(0).getDictName());
+                    vo.setTimeOutPlanTotal(listMap.get(integer).size());
+                }else {
+                    vo.setCostTypeValue(collect.get(5).get(0).getDictName());
+                    if (listMap.get(5) != null && listMap.get(6) != null){
+                        vo.setTimeOutPlanTotal(listMap.get(5).size() + listMap.get(6).size());
+                    }else if (listMap.get(5) != null){
+                        vo.setTimeOutPlanTotal(listMap.get(5).size());
+                    }else if (listMap.get(6) != null){
+                        vo.setTimeOutPlanTotal(listMap.get(6).size());
+                    }
+                }
+                vos.add(vo);
+            }
+        }
+        return vos;
+    }
+
     /**
      * 统计支出 1支出总和2工资总和
      */

+ 15 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java

@@ -18,6 +18,7 @@ import org.springblade.control.vo.ProjectProcessVO;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -152,4 +153,18 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
             throw new ServiceException("暂无数据,无需保存");
         }
     }
+
+    @Override
+    public List<BladeUser> getDepartmentUserDict(Integer departmentType) {
+        return baseMapper.getDepartmentUserDict(departmentType);
+    }
+
+    /**
+     * 删除部门月计划名称
+     * @param id
+     */
+    @Override
+    public void deleteById(Long id) {
+        baseMapper.deleteById2(id);
+    }
 }

+ 6 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java

@@ -41,6 +41,9 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
     public DepartmentPlanLog getPlanInPause(Long id) {
         //获取计划最新的执行情况
         DepartmentPlanLog log = baseMapper.getNewestPlanLog(id);
+        if (log == null){
+            throw new ServiceException("暂未开启计划");
+        }
         //设置中途暂停计划日期为今天
         log.setPauseTime(LocalDate.now());
         //计算暂停日期和,中途开启计划的开始日期,之前的工作天数,如果是第一次暂停,则中途开启为null,则计算计划实际开始日期
@@ -81,6 +84,9 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
     public DepartmentPlanLog getPlanInOpen(Long id) {
         //获取计划最新的执行情况
         DepartmentPlanLog log = baseMapper.getNewestPlanLog(id);
+        if (log == null){
+            throw new ServiceException("暂未开启计划");
+        }
         //先设置上一次开启计划工时,因为下面会修改
         if (log.getOpenPlanStartEndDays() == null){
             log.setLastOpenPlanStartEndDays(null);

+ 43 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -282,6 +282,17 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             }
         }
         List<ProjectCostBudgetVO> departmentPlan = baseMapper.getDepartmentPlan(type, startDate, endDate);
+        if (departmentPlan != null && departmentPlan.size() > 0){
+            for (ProjectCostBudgetVO vo : departmentPlan) {
+                if (vo.getStatus() == 1 || vo.getStatus() == 4){
+                    vo.setStartOrStop(0);
+                }else if (vo.getStatus() == 2){
+                    vo.setStartOrStop(1);
+                }else {
+                    vo.setStartOrStop(2);
+                }
+            }
+        }
         return departmentPlan;
     }
 
@@ -446,6 +457,38 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         return yearStaffDisburse;
     }
 
+    /**
+     * 按年查询所有支出
+     * @param y
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudget> getBudgetByYear(int y) {
+        return baseMapper.getBudgetByYear(y);
+    }
+
+    /**
+     * 按月查询所有支出
+     * @param date
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudgetVO2> getPlanByMonth(String date) {
+        return baseMapper.getPlanByMonth(date);
+    }
+
+
+    /**
+     * 获取风险计划,如果参数为空获取所有
+     * @param projectId
+     * @param costType
+     * @return
+     */
+    @Override
+    public List<ProjectCostBudget> getRiskPlan(Long projectId,Integer costType) {
+        return baseMapper.getRiskPlan(projectId,costType);
+    }
+
     /**
      * 统计一行的几个总金额
      */

+ 3 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetStatsServiceImpl.java

@@ -120,7 +120,9 @@ public class ProjectCostBudgetStatsServiceImpl extends BaseServiceImpl<ProjectCo
         List<ProjectCostBudgetVO> list = budgetService.budgetList(costBudget);
         BigDecimal bigDecimal = new BigDecimal("0");
         for (ProjectCostBudgetVO l : list) {
-            bigDecimal = bigDecimal.add(l.getBudgetCountMoney());
+            if (l.getBudgetCountMoney() != null) {
+                bigDecimal = bigDecimal.add(l.getBudgetCountMoney());
+            }
         }
         vo.setPreviewTotalCost(bigDecimal);
         vo.setPreviewList(list);

+ 8 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -36,8 +36,11 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, ControlProjectInfo> implements IProjectInfoService {
     private final ProjectInfoMapper infoMapper;
+
     private final IProjectProcessService processService;
+
     private final IContractInfoService contractInfoService;
+
     private final IProjectCostBudgetService budgetService;
 
     /**
@@ -198,5 +201,10 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         return null;
     }
 
+    @Override
+    public List<ControlProjectInfo> listByYear(int year) {
+        return baseMapper.listByYear(year);
+    }
+
 
 }

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java

@@ -104,6 +104,7 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
     int updateAllSonNodeIdsForArchiveAutoRule(@feign.Param("archiveAutoType") Integer archiveAutoType,
                                               @feign.Param("archiveAutoNodeId") Long archiveAutoNodeId,
                                               @feign.Param("archiveAutoGroupId") Long archiveAutoGroupId,
-                                              @feign.Param("ancestors") String ancestors);
+                                              @feign.Param("ancestors") String ancestors,
+                                              @feign.Param("fileNumberPrefix") String fileNumberPrefix);
 
 }

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -484,6 +484,9 @@
             ,archive_auto_group_id=#{archiveAutoGroupId},
             archive_auto_group_select=0
         </if>
+        <if test="fileNumberPrefix != null and fileNumberPrefix != ''">
+            ,file_number_prefix = #{fileNumberPrefix}
+        </if>
         where
         is_deleted = 0 and ancestors like concat('', #{ancestors}, '%')
         /*最高并卷规则不能覆盖 分类并卷规则,单独组卷规则*/

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -987,7 +987,8 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 				archiveTreeContract.getArchiveAutoType(),
 				archiveTreeContract.getArchiveAutoNodeId(),
 				archiveTreeContract.getArchiveAutoGroupId(),
-				archiveTreeContract.getAncestors() + "," + archiveTreeContract.getId()
+				archiveTreeContract.getAncestors() + "," + archiveTreeContract.getId(),
+				archiveTreeContract.getFileNumberPrefix()
 		);
 	}