浏览代码

Merge remote-tracking branch 'origin/master' into master

yangyj 2 年之前
父节点
当前提交
2af3e1814d
共有 67 个文件被更改,包括 838 次插入357 次删除
  1. 5 3
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  2. 0 11
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/AttendanceTripInfoDTO.java
  3. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTO.java
  4. 0 35
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOBatch.java
  5. 0 42
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTODetailInfo.java
  6. 0 27
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOTaskUser.java
  7. 0 11
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMInvoiceInfoDTO.java
  8. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMLoanInfoDTO.java
  9. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMOutsourcingPayInfoDTO.java
  10. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMPayInfoDTO.java
  11. 0 18
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMPurchaseInfoDTO.java
  12. 0 11
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMUseCarInfoDTO.java
  13. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentMonthPlan.java
  14. 4 4
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java
  15. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMProcessTaskUser.java
  16. 5 2
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  17. 4 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AllProjectStatsVO.java
  18. 20 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AnnualProjectCostVO.java
  19. 25 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DeptMonthPlanRatioVO.java
  20. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java
  21. 10 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java
  22. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectProcessVO.java
  23. 14 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UseCarDeptVO.java
  24. 13 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UserControlVO.java
  25. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeContractClient.java
  26. 4 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  27. 98 10
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  28. 41 6
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  29. 44 3
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java
  30. 44 6
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentMonthPlanController.java
  31. 4 4
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentPlanLogController.java
  32. 62 12
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java
  33. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java
  34. 3 3
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java
  35. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectProcessController.java
  36. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.java
  37. 5 5
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/AnnualBudgetMapper.xml
  38. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.java
  39. 7 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.xml
  40. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  41. 31 2
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  42. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  43. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  44. 0 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/EMFinancialReimbursementService.java
  45. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IAnnualBudgetService.java
  46. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentMonthPlanService.java
  47. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  48. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  49. 167 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  50. 15 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  51. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java
  52. 8 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java
  53. 1 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java
  54. 43 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  55. 3 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetStatsServiceImpl.java
  56. 8 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  57. 28 23
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  58. 6 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ArchiveTreeContractImpl.java
  59. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveAutoRuleWbsMapper.java
  60. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveAutoRuleWbsMapper.xml
  61. 3 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  62. 10 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  63. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  64. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java
  65. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  66. 35 15
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java
  67. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

+ 5 - 3
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -146,12 +146,14 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
                 throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
             }
 
-            /* 校验登陆账号权限,客户端填报、试验userType=1,app端userType=2,档案userType=3,后管userType=4 */
+            /* 校验登陆账号权限,客户端填报、试验userType=1,app端userType=2,档案userType=3,后管userType=4 ,管控userType=5 ,征拆userType=6 */
             if (user.getUserType().contains(("1"))
                     || user.getUserType().contains(("2"))
                     || user.getUserType().contains(("3"))
-                    || user.getUserType().contains(("4"))) {
-                if (!("1,2,3,4").equals(user.getUserType())) {
+                    || user.getUserType().contains(("4"))
+                    || user.getUserType().contains(("5"))
+                    || user.getUserType().contains(("6"))) {
+                if (!("1,2,3,4,5,6").equals(user.getUserType())) {
                     //如果不是全部权限,那么分批校验登陆平台权限
                     this.judgeLoginPermission(user);
                 }

+ 0 - 11
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/AttendanceTripInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.AttendanceTripInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class AttendanceTripInfoDTO extends AttendanceTripInfo {
@@ -13,13 +11,4 @@ public class AttendanceTripInfoDTO extends AttendanceTripInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "人事")
-    private EMProcessTaskUser personnelUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMFinancialReimbursementInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMFinancialReimbursementInfoDTO extends EMFinancialReimbursementInfo {
@@ -13,19 +11,4 @@ public class EMFinancialReimbursementInfoDTO extends EMFinancialReimbursementInf
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 35
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOBatch.java

@@ -1,35 +0,0 @@
-package org.springblade.control.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-@Data
-public class EMFinancialReimbursementInfoDTOBatch implements Serializable {
-
-    @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
-    private String submitStatus;
-
-    @ApiModelProperty(value = "明细信息")
-    private List<EMFinancialReimbursementInfoDTODetailInfo> detailInfo;
-
-    @ApiModelProperty(value = "审批人对象")
-    private EMFinancialReimbursementInfoDTOTaskUser taskUser;
-
-    @ApiModelProperty(value = "归属人id")
-    private Long userIdVesting;
-
-    @ApiModelProperty(value = "是否抵扣借款 0=否 1=是")
-    private Integer isDeductLoan;
-
-    @ApiModelProperty(value = "借款信息id")
-    private Long deductLoanId;
-
-    @ApiModelProperty(value = "实际报销金额")
-    private BigDecimal frMoneyActual;
-
-
-}

+ 0 - 42
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTODetailInfo.java

@@ -1,42 +0,0 @@
-package org.springblade.control.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
-@Data
-public class EMFinancialReimbursementInfoDTODetailInfo implements Serializable {
-
-    @ApiModelProperty(value = "数据id")
-    private Long id;
-
-    @ApiModelProperty(value = "所属项目id")
-    private Long projectId;
-
-    @ApiModelProperty(value = "预算计划ids")
-    private String budgetPlanIds;
-
-    @ApiModelProperty(value = "报销类型")
-    private Integer frType;
-
-    @ApiModelProperty(value = "报销金额")
-    private BigDecimal frMoney;
-
-    @ApiModelProperty(value = "报销时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date frDate;
-
-    @ApiModelProperty(value = "费用说明")
-    private String frDesc;
-
-    @ApiModelProperty(value = "电子发票url地址")
-    private String frElectronicInvoiceUrl;
-
-    @ApiModelProperty(value = "附件url地址")
-    private String frAttachmentUrl;
-
-}

+ 0 - 27
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOTaskUser.java

@@ -1,27 +0,0 @@
-package org.springblade.control.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springblade.control.entity.EMProcessTaskUser;
-
-import java.util.List;
-
-@Data
-public class EMFinancialReimbursementInfoDTOTaskUser {
-
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
-}

+ 0 - 11
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMInvoiceInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMInvoiceInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMInvoiceInfoDTO extends EMInvoiceInfo {
@@ -13,13 +11,4 @@ public class EMInvoiceInfoDTO extends EMInvoiceInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMLoanInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMLoanInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMLoanInfoDTO extends EMLoanInfo {
@@ -13,19 +11,4 @@ public class EMLoanInfoDTO extends EMLoanInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMOutsourcingPayInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMOutsourcingPayInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMOutsourcingPayInfoDTO extends EMOutsourcingPayInfo {
@@ -13,19 +11,4 @@ public class EMOutsourcingPayInfoDTO extends EMOutsourcingPayInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMPayInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMPayInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMPayInfoDTO extends EMPayInfo {
@@ -13,19 +11,4 @@ public class EMPayInfoDTO extends EMPayInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 18
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMPurchaseInfoDTO.java

@@ -2,30 +2,12 @@ package org.springblade.control.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springblade.control.entity.EMProcessTaskUser;
 import org.springblade.control.entity.EMPurchaseInfo;
 
-import java.util.List;
 
 @Data
 public class EMPurchaseInfoDTO extends EMPurchaseInfo {
 
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
-
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 11
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMUseCarInfoDTO.java

@@ -2,10 +2,8 @@ package org.springblade.control.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springblade.control.entity.EMProcessTaskUser;
 import org.springblade.control.entity.EMUseCarInfo;
 
-import java.util.List;
 
 @Data
 public class EMUseCarInfoDTO extends EMUseCarInfo {
@@ -13,13 +11,4 @@ public class EMUseCarInfoDTO extends EMUseCarInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "人事")
-    private EMProcessTaskUser personnelUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 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;
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMProcessTaskUser.java

@@ -1,17 +0,0 @@
-package org.springblade.control.entity;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class EMProcessTaskUser implements Serializable {
-
-    @ApiModelProperty(value = "userId")
-    private String userId;
-
-    @ApiModelProperty(value = "名称")
-    private String userName;
-
-}

+ 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

+ 14 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UseCarDeptVO.java

@@ -0,0 +1,14 @@
+package org.springblade.control.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UseCarDeptVO implements Serializable {
+
+    private Long deptId;
+
+    private String deptName;
+
+}

+ 13 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UserControlVO.java

@@ -0,0 +1,13 @@
+package org.springblade.control.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UserControlVO implements Serializable {
+
+    private Long id;
+    private String name;
+
+}

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeContractClient.java

@@ -44,4 +44,7 @@ public interface ArchiveTreeContractClient {
 
     @PostMapping(API_PREFIX + "/getFirstNodeByTreeCode")
     ArchiveTreeContract getFirstNodeByTreeCode(@RequestParam Long projectId,@RequestParam Integer type);
+
+    @PostMapping(API_PREFIX + "/getArchiveTreeContractByContractId")
+    ArchiveTreeContract getArchiveTreeContractByContractId(@RequestParam Long contractId);
 }

+ 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">

+ 41 - 6
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());
@@ -694,6 +704,12 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			if (node.getAncestors().split(",").length <= 2){
 				//查询当前合同
 				ArchiveTreeContract archiveTreeContract = archiveTreeContractClient.getArchiveTreeContractByNodeName(contractInfo.getContractName());
+				if (archiveTreeContract == null){
+					archiveTreeContract = archiveTreeContractClient.getArchiveTreeContractByContractId(vo.getContractId());
+				}
+				if (archiveTreeContract == null){
+					throw new ServiceException("系统繁忙,请稍后再试");
+				}
 				vo.setNodeId(archiveTreeContract.getId());
 			}
 				list = baseMapper.pageByAuthenticate(page, vo);
@@ -840,14 +856,24 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				if(nodeContract==null){
 					nodeContract = contractClient.getContractById(nodeContractId);
 				}
-				storageTime = nodeContract.getStoragePeriod().toString();
+				Integer storagePeriod = nodeContract.getStoragePeriod();
+				if(storagePeriod==null){
+					storageTime="30";
+				}else{
+					storageTime = storagePeriod.toString();
+				}
 			}else{
 				if(contracts==null){
 					contracts = contractClient.getContractListByProjectId(archivesAuto.getProjectId());
 				}
 				for(ContractInfo c:contracts){
 					if(c.getContractType()==3){
-						storageTime = c.getStoragePeriod().toString();
+						Integer storagePeriod = c.getStoragePeriod();
+						if(storagePeriod==null){
+							storageTime="30";
+						}else{
+							storageTime = storagePeriod.toString();
+						}
 					}
 				}
 			}
@@ -987,10 +1013,19 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		Long projectId = node.getProjectId();
 		ProjectInfo projectInfo = projectClient.getById(String.valueOf(projectId));
 		String projectName = projectInfo.getProjectName();
+		String contractName="";
+		Long contractId = node.getContractId();
+		if(contractId!=null){
+			ContractInfo contract = contractClient.getContractById(contractId);
+			contractName=contract.getContractName();
+		}
 		//获取案卷题名
+		archiveName=projectName;
+		if(StringUtils.isNotEmpty(contractName)){
+			archiveName=archiveName+" "+contractName;
+		}
 		//--正常节点
 		if(isCrossNode){
-			archiveName=projectName;
 			//存在跨节点  项目名称+文件对应的所有节点名称
 			Set<String> nodeIdSet = new LinkedHashSet<>();
 			for(ArchiveFile file:waitArchiveFiles){
@@ -1004,7 +1039,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			}
 		}else{
 			//不存在跨节点  项目名称+节点名称
-			archiveName=projectName+" "+node.getNodeName();
+			archiveName=archiveName+" "+node.getNodeName();
 		}
 
 		//TODO wbs节点

+ 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("开启成功");

+ 62 - 12
blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java

@@ -8,25 +8,22 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springblade.control.entity.ContractReturnedInfo;
-import org.springblade.control.entity.ControlProjectInfo;
-import org.springblade.control.entity.EMLoanInfo;
-import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.*;
 import org.springblade.control.service.impl.ContractReturnedInfoServiceImpl;
 import org.springblade.control.service.impl.EMLoanServiceImpl;
 import org.springblade.control.service.impl.ProjectCostBudgetServiceImpl;
 import org.springblade.control.service.impl.ProjectInfoServiceImpl;
 import org.springblade.control.utils.NumberToChinese;
-import org.springblade.control.vo.ExMaByContractReturnedInfoVO;
-import org.springblade.control.vo.ExMaByControlProjectInfoVO;
-import org.springblade.control.vo.ExMaByLoanVO;
-import org.springblade.control.vo.ExMaByProjectCostBudgetVO;
+import org.springblade.control.vo.*;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -34,9 +31,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @RestController
@@ -45,6 +40,7 @@ import java.util.stream.Collectors;
 @Api(value = "费用管理关联业务接口", tags = "费用管理关联业务接口")
 public class ExMaTwoController extends BladeController {
 
+    private final JdbcTemplate jdbcTemplate;
     private final IUserClient iUserClient;
     private final ProjectInfoServiceImpl projectInfoService;
     private final ProjectCostBudgetServiceImpl projectCostBudgetService;
@@ -140,7 +136,6 @@ public class ExMaTwoController extends BladeController {
         return R.data(collect);
     }
 
-
     @GetMapping("/getNumberToChinese")
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "将数字转换为汉语大写,支持小数点", notes = "传入字符串value")
@@ -151,4 +146,59 @@ public class ExMaTwoController extends BladeController {
         return R.data(null);
     }
 
+    @GetMapping("/getUserList")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取管控系统用户列表(财务报销-归属人、发票管理-开票人)")
+    public R<List<UserControlVO>> getUserList() {
+        List<User> query = jdbcTemplate.query("select id,name,real_name from blade_user where tenant_id = 003077 and is_deleted = 0", new BeanPropertyRowMapper<>(User.class));
+        List<UserControlVO> result = new ArrayList<>();
+        for (User user : query) {
+            UserControlVO vo = new UserControlVO();
+            vo.setId(user.getId());
+            vo.setName(ObjectUtil.isNotEmpty(user.getName()) ? user.getName() : user.getRealName());
+            result.add(vo);
+        }
+        return R.data(result);
+    }
+
+    @GetMapping("/getPayeeUserNameList")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取支付收款人列表")
+    public R<List<String>> getPayeeUserNameList() {
+        List<EMPayInfo> query = jdbcTemplate.query("select payee_user_name from c_expense_pay_info and is_deleted = 0 and is_temp = 1", new BeanPropertyRowMapper<>(EMPayInfo.class));
+        if (query.size() > 0) {
+            return R.data(query.stream().map(EMPayInfo::getPayeeUserName).collect(Collectors.toList()));
+        }
+        return R.data(null);
+    }
+
+    @GetMapping("/getLoanUserNameList")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取借款申请人列表")
+    public R<List<String>> getLoanUserNameList() {
+        List<EMLoanInfo> query = jdbcTemplate.query("select loan_user_name from c_expense_loan_info and is_deleted = 0 and is_temp = 1", new BeanPropertyRowMapper<>(EMLoanInfo.class));
+        if (query.size() > 0) {
+            return R.data(query.stream().map(EMLoanInfo::getLoanUserName).collect(Collectors.toList()));
+        }
+        return R.data(null);
+    }
+
+    @GetMapping("/getUseCarDeptList")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取用车部门列表")
+    public R<List<UseCarDeptVO>> getUseCarDeptList() {
+        List<Dept> query = jdbcTemplate.query("select id,dept_name from blade_dept where tenant_id = 003077 and dept_type = 2", new BeanPropertyRowMapper<>(Dept.class));
+        List<UseCarDeptVO> result = new ArrayList<>();
+        if (query.size() > 0) {
+            for (Dept dept : query) {
+                UseCarDeptVO vo = new UseCarDeptVO();
+                vo.setDeptId(dept.getId());
+                vo.setDeptName(dept.getDeptName());
+                result.add(vo);
+            }
+        }
+        return R.data(result);
+    }
+
+
 }

+ 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>

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

@@ -2,10 +2,8 @@ package org.springblade.control.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.control.dto.EMFinancialReimbursementInfoDTO;
-import org.springblade.control.dto.EMFinancialReimbursementInfoDTOBatch;
 import org.springblade.control.entity.EMFinancialReimbursementInfo;
 import org.springblade.control.vo.EMDraftGroupVO;
-import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMFinancialReimbursementInfoVO;
 import org.springblade.core.mp.base.BaseService;
 

+ 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);

+ 8 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java

@@ -20,6 +20,7 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.beans.BeanUtils;
@@ -46,13 +47,19 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseC
         queryWrapper.lambda().eq(EMUseCarInfo::getIsTemp, 1);
         IPage<EMUseCarInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMUseCarInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
+        List<Dept> deptList = jdbcTemplate.query("select id,dept_name from blade_dept where tenant_id = 003077 and dept_type = 2", new BeanPropertyRowMapper<>(Dept.class));
         return pages.convert(obj -> {
             EMUseCarInfoVO vo = new EMUseCarInfoVO();
             BeanUtils.copyProperties(obj, vo);
             vo.setCreateName(userMap.get(vo.getCreateUser()));
             vo.setApprovalStatusName(vo.getStatus().equals(1) ? "待审批" : (vo.getStatus().equals(2) ? "已审批" : (vo.getStatus().equals(3) ? "已驳回" : "未上报")));
             vo.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
-            vo.setUcOrgName(""); //TODO 部门
+
+            for (Dept dept : deptList) {
+                if (ObjectUtil.isNotEmpty(obj.getUcOrgId()) && obj.getUcOrgId().equals(dept.getId())) {
+                    vo.setUcOrgName(dept.getDeptName());
+                }
+            }
 
             if (ObjectUtil.isNotEmpty(obj.getUseStartDate()) && ObjectUtil.isNotEmpty(obj.getUseEndDate())) {
                 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");

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

@@ -324,10 +324,7 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
 
                 //审批人
                 List<String> auditUserIds = new LinkedList<>();
-                EMProcessTaskUser responsibleObj = new EMProcessTaskUser(); //部门负责人
-                responsibleObj.setUserId(departmentHead.getId() + "");
-                responsibleObj.setUserName(departmentHead.getRealName());
-                auditUserIds.add(responsibleObj.getUserId());
+                auditUserIds.add(departmentHead.getId() + "");
 
                 List<String> nonEmptyAuditUserIds = new LinkedList<>();
                 for (String userId : auditUserIds) {

+ 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);
+    }
+
 
 }

+ 28 - 23
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -69,10 +69,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             queryWrapper.lambda().like(TaskProcessInfo::getAuditUserIds, SecureUtil.getUserId());
             queryWrapper.lambda().eq(TaskProcessInfo::getStatus, 1);
         } else if (dto.getSelectType().equals("2")) { //已审核、已驳回为已办任务
-            queryWrapper.lambda().like(TaskProcessInfo::getAuditUserIds, SecureUtil.getUserId())
-                    .or()
-                    .like(TaskProcessInfo::getAuditUserIdsComplete, SecureUtil.getUserId())
-                    .and(wrapper -> wrapper.in(TaskProcessInfo::getStatus, 2, 3));
+            queryWrapper.lambda().apply("(audit_user_ids_complete LIKE '%" + SecureUtil.getUserId() + "%' AND STATUS IN ( 2, 3 )) OR (audit_user_ids LIKE '%" + SecureUtil.getUserId() + "%' AND STATUS = 3)");
         } else if (dto.getSelectType().equals("3")) { //我发起的任务
             if (ObjectUtil.isNotEmpty(dto.getSelectStatus()) && !dto.getSelectStatus().equals("1")) {
                 queryWrapper.lambda().eq(TaskProcessInfo::getStatus, dto.getSelectStatus());
@@ -332,7 +329,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 if (!firstUserId.equals(SecureUtil.getUserId() + "")) {
                     User user = iUserClient.userInfoById(Long.parseLong(firstUserId)).getData();
                     bladeRedis.del("user:id=" + SecureUtil.getUserId());//解锁
-                    throw new ServiceException("当前任务的审批人【" + user.getRealName() + "】还未完成审批流程,请稍后再试");
+                    throw new ServiceException("当前任务的审批人【" + user.getRealName() + "】还未完成审批,请稍后再试");
                 }
             }
 
@@ -494,10 +491,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
                         //审批人
                         List<String> auditUserIds = new LinkedList<>();
-                        EMProcessTaskUser responsibleObj = new EMProcessTaskUser(); //部门负责人
-                        responsibleObj.setUserId(departmentHead.getId() + "");
-                        responsibleObj.setUserName(departmentHead.getRealName());
-                        auditUserIds.add(responsibleObj.getUserId());
+                        auditUserIds.add(departmentHead.getId() + "");
 
                         List<String> nonEmptyAuditUserIds = new LinkedList<>();
                         for (String userId : auditUserIds) {
@@ -530,10 +524,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
                         //审批人
                         List<String> auditUserIds = new LinkedList<>();
-                        EMProcessTaskUser responsibleObj = new EMProcessTaskUser(); //部门负责人
-                        responsibleObj.setUserId(departmentHead.getId() + "");
-                        responsibleObj.setUserName(departmentHead.getRealName());
-                        auditUserIds.add(responsibleObj.getUserId());
+                        auditUserIds.add(departmentHead.getId() + "");
 
                         List<String> nonEmptyAuditUserIds = new LinkedList<>();
                         for (String userId : auditUserIds) {
@@ -768,15 +759,17 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         if (user != null && ObjectUtil.isEmpty(user.getIsLeader())) {
             //负责人getIsLeader字段=null,证明不是负责人,那么获取当前部门负责人
             User departmentHead = this.getDepartmentHead(Long.parseLong(SecureUtil.getUser().getDeptId()));
-            auditUserIds.add(departmentHead.getId() + "");
+            if (departmentHead != null) {
+                auditUserIds.add(departmentHead.getId() + "");
+            }
         }
 
-        //获取审批人信息
+        //获取审批人、抄送人信息
         Map<String, List<User>> approveUserMaps = this.getApproveUserMaps(type);
 
         //审批人
-        List<User> spUserList = approveUserMaps.get("SP");
-        if (spUserList.size() == 0) {
+        List<User> spUserList = approveUserMaps.getOrDefault("SP", null);
+        if (spUserList == null || spUserList.size() == 0) {
             throw new ServiceException("获取当前审批流程人员信息失败,请联系管理员");
         }
         auditUserIds.addAll(spUserList.stream().map(User::getId).map(String::valueOf).collect(Collectors.toList()));
@@ -794,8 +787,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         }
 
         //抄送人
-        List<User> zcUserList = approveUserMaps.get("ZC");
-        if (zcUserList.size() > 0) {
+        List<User> zcUserList = approveUserMaps.getOrDefault("ZC", null);
+        if (zcUserList != null && zcUserList.size() > 0) {
             List<String> zcUserIds = zcUserList.stream().map(User::getId).map(String::valueOf).collect(Collectors.toList());
             taskProcessInfo.setCcUserIds(StringUtils.join(zcUserIds, ","));
         }
@@ -915,10 +908,22 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             }
         }
 
-        List<User> spUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id in(" + StringUtils.join(spPostIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
-        List<User> zcUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id in(" + StringUtils.join(zcPostIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
-        resultMaps.put("SP", spUserList);
-        resultMaps.put("ZC", zcUserList);
+        if (spPostIds.size() > 0) {
+            List<User> spUserListAll = new LinkedList<>();
+            for (String spPostId : spPostIds) {
+                List<User> spUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id =" + spPostId, new BeanPropertyRowMapper<>(User.class));
+                spUserListAll.addAll(spUserList);
+            }
+            if (spUserListAll.size() > 0) {
+                resultMaps.put("SP", spUserListAll);
+            }
+        }
+        if (zcPostIds.size() > 0) {
+            List<User> zcUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id in(" + StringUtils.join(zcPostIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
+            if (zcUserList.size() > 0) {
+                resultMaps.put("ZC", zcUserList);
+            }
+        }
         return resultMaps;
     }
 

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ArchiveTreeContractImpl.java

@@ -6,6 +6,7 @@ import org.springblade.archive.vo.ArchivesAutoVO;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
 import org.springblade.manager.service.IArchiveTreeContractService;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
@@ -96,5 +97,10 @@ public class ArchiveTreeContractImpl implements ArchiveTreeContractClient {
         return contract;
     }
 
+    @Override
+    public ArchiveTreeContract getArchiveTreeContractByContractId(@RequestParam Long contractId) {
+        return archiveTreeContractMapper.getArchiveTreeContractByContractId(contractId);
+    }
+
 
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveAutoRuleWbsMapper.java

@@ -49,4 +49,5 @@ public interface ArchiveAutoRuleWbsMapper extends BaseMapper<ArchiveAutoRuleWbs>
 
     List<ArchiveAutoRuleWbs> getArchiveAutoRuleWbs(@Param("wbsId") Long wbsId, @Param("projectId") Long projectId);
 
+    List<ArchiveAutoRuleWbs> getGroupList(@Param("archiveAutoGroupId")Long archiveAutoGroupId, @Param("projectId")Long projectId);
 }

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveAutoRuleWbsMapper.xml

@@ -49,4 +49,11 @@
         where is_deleted = 0 and wbs_id=#{wbsId} and project_id = #{projectId}
     </select>
 
+
+    <select id="getGroupList" resultMap="archiveAutoRuleWbsResultMap">
+        select *
+        from m_archive_auto_rule_wbs
+        where is_deleted = 0 and archive_auto_group_id = #{archiveAutoGroupId} and project_id = #{projectId}
+    </select>
+
 </mapper>

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

@@ -104,6 +104,8 @@ 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);
 
+    ArchiveTreeContract getArchiveTreeContractByContractId(@Param("contractId") Long contractId);
 }

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

@@ -466,6 +466,13 @@
         select count(*) from m_archive_tree_contract
         WHERE project_id = #{projectId}) and is_deleted = 0 and from_id is null and like concat('%',#{id},'%')
     </select>
+    <select id="getArchiveTreeContractByContractId"
+            resultType="org.springblade.manager.entity.ArchiveTreeContract">
+        select id from m_archive_tree_contract
+        where contract_id = #{contractId} and is_deleted = 0
+        order by ancestors
+            limit 1
+    </select>
 
     <update id="updateAllSonNodeIdsForArchiveAutoRule">
 
@@ -484,6 +491,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/mapper/ContractInfoMapper.xml

@@ -276,7 +276,8 @@
         d.wbs_type AS "wbsType",
         d.id,
         d.parent_id AS "parentId",
-        IFNULL(if(length(trim(full_name)) > 0, full_name, node_name),node_name) AS title,
+        -- IFNULL(if(length(trim(full_name)) > 0, full_name, node_name),node_name) AS title,
+        d.node_name AS title,
         d.node_name AS "nodeName",
         d.full_name AS "fullName",
         d.import_matching_info AS "importMatchingInfo",

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java

@@ -77,7 +77,6 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
 
     List<WbsTreeContractVO> addNodeTree(String pKeyId);
 
-
     List<ContractInfo> getContractListByProjectId(Long projectId);
 
     R getTreeNodeByValueAndContractId(String queryValue, String contractId);

+ 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()
 		);
 	}
 

+ 35 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -822,14 +822,35 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
      */
     private Map<String, Object> getArchiveAutoRule_WbsTreeNode(Long id, Long projectId, Long wbsNode2ArchiveTreeNodeId, String wbsId) {
         Map<String, Object> map = new HashMap<>();
+        Map<Long, ArchiveTreeVO2> ArchiveTreeVO2Map = null;
         try {
             ArchiveTree archiveTree = baseMapper.selectById(wbsNode2ArchiveTreeNodeId);
 
             //步骤1:找出wbs的规则设置
             ArchiveAutoRuleWbs  autoRuleWbs=null;
+            List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
             List<ArchiveAutoRuleWbs> autoRuleWbsList = archiveAutoRuleWbsMapper.getArchiveAutoRuleWbs(id, projectId);
             if(autoRuleWbsList.size()==0){
-                //TODO 像上级找
+                //像上级找
+                //获取wbs关联树
+                ArchiveTreeVO2 archiveTreeVO2 = getWbsArchiveTree(AuthUtil.getTenantId(), projectId, wbsNode2ArchiveTreeNodeId, wbsId, "1", Long.parseLong(archiveTree.getDisplayHierarchy()));
+                ForestNodeMerger.getTreeListEx(archiveTreeVO2, archiveTreeVO2List);
+                ArchiveTreeVO2Map = new HashMap<>();
+                for (ArchiveTreeVO2 vo2 : archiveTreeVO2List) {
+                    ArchiveTreeVO2Map.put(vo2.getId(), vo2);
+                }
+                ArchiveTreeVO2 nameVo2 = ArchiveTreeVO2Map.get(id);
+                while (nameVo2.getParentId() != 0L) {
+                    Long parentId = nameVo2.getParentId();
+                    nameVo2 = ArchiveTreeVO2Map.get(parentId);
+                    List<ArchiveAutoRuleWbs> ruleList = archiveAutoRuleWbsMapper.getArchiveAutoRuleWbs(nameVo2.getId(), projectId);
+                    if(ruleList.size()>0){
+                        autoRuleWbs=ruleList.get(0);
+                        break;
+                    }
+                }
+
+
             }else{
                 autoRuleWbs=autoRuleWbsList.get(0);
             }
@@ -851,12 +872,13 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
                     }
 
                     //获取wbs关联树
-                    ArchiveTreeVO2 archiveTreeVO2 = getWbsArchiveTree(AuthUtil.getTenantId(), projectId, wbsNode2ArchiveTreeNodeId, wbsId, "1", Long.parseLong(archiveTree.getDisplayHierarchy()));
-                    List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
-                    ForestNodeMerger.getTreeListEx(archiveTreeVO2, archiveTreeVO2List);
-                    Map<Long, ArchiveTreeVO2> ArchiveTreeVO2Map = new HashMap<>();
-                    for (ArchiveTreeVO2 vo2 : archiveTreeVO2List) {
-                        ArchiveTreeVO2Map.put(vo2.getId(), vo2);
+                    if(ArchiveTreeVO2Map == null){
+                        ArchiveTreeVO2 archiveTreeVO2 = getWbsArchiveTree(AuthUtil.getTenantId(), projectId, wbsNode2ArchiveTreeNodeId, wbsId, "1", Long.parseLong(archiveTree.getDisplayHierarchy()));
+                        ForestNodeMerger.getTreeListEx(archiveTreeVO2, archiveTreeVO2List);
+                        ArchiveTreeVO2Map = new HashMap<>();
+                        for (ArchiveTreeVO2 vo2 : archiveTreeVO2List) {
+                            ArchiveTreeVO2Map.put(vo2.getId(), vo2);
+                        }
                     }
 
                     if (archiveAutoType == 1) {
@@ -888,10 +910,11 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
                         //遍历wbs关联树 生成分类并将编辑树
                         for (ArchiveTreeVO2 vo2 : archiveTreeVO2List) {
                             //查询wbs节点是否有规则设置
-                            ArchiveAutoRuleWbs autoRuleWbs2 = archiveAutoRuleWbsMapper.selectOne(Wrappers.<ArchiveAutoRuleWbs>lambdaQuery()
-                                    .eq(ArchiveAutoRuleWbs::getWbsId, vo2.getId())
-                                    .eq(ArchiveAutoRuleWbs::getIsDeleted, 0)
-                                    .eq(ArchiveAutoRuleWbs::getProjectId, projectId));
+                            List<ArchiveAutoRuleWbs> ruleList = archiveAutoRuleWbsMapper.getArchiveAutoRuleWbs(vo2.getId(), projectId);
+                            ArchiveAutoRuleWbs autoRuleWbs2 =null;
+                            if(ruleList!=null && ruleList.size()>0){
+                                autoRuleWbs2=ruleList.get(0);
+                            }
                             if (autoRuleWbs2 != null) {
                                 //如有规则,需过滤单独规则节点,和不同组的分类规则节点
                                 if (autoRuleWbs2.getArchiveAutoType() != 3) {
@@ -930,10 +953,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
 
                         List<ArchiveTreeAutoRuleVO> merge = ForestNodeMerger.merge(nodetree);
                         //获取与当前节点设置同一分类分组的节点
-                        List<ArchiveAutoRuleWbs> archiveAutoRuleWbs = archiveAutoRuleWbsMapper.selectList(Wrappers.<ArchiveAutoRuleWbs>lambdaQuery()
-                                .eq(ArchiveAutoRuleWbs::getArchiveAutoGroupId, archiveAutoGroupId)
-                                .eq(ArchiveAutoRuleWbs::getIsDeleted, 0)
-                                .eq(ArchiveAutoRuleWbs::getProjectId, projectId));
+                        List<ArchiveAutoRuleWbs> archiveAutoRuleWbs = archiveAutoRuleWbsMapper.getGroupList(archiveAutoGroupId, projectId);
                         StringBuffer nodeSelect = new StringBuffer();
 
                         for (ArchiveAutoRuleWbs node : archiveAutoRuleWbs) {

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -259,6 +259,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                         wbsTreeContract.setContractId(pawDTO.getContractId());
                         wbsTreeContract.setIsConcealedWorksNode(0);
                         wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
+                        wbsTreeContract.setCreateTime(new Date());
                         if (wbsTreePrivate.getType() == 2) {
                             wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
                         }