瀏覽代碼

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf 2 年之前
父節點
當前提交
1c0641aa2c
共有 96 個文件被更改,包括 2176 次插入991 次删除
  1. 7 8
      blade-auth/blade-auth.iml
  2. 8 0
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  3. 1 1
      blade-ops/blade-xxljob-admin/doc/db/tables_xxl_job.sql
  4. 3 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java
  5. 4 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ControlProjectInfoDTO.java
  6. 34 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/DictInfoDTO.java
  7. 19 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/LogHistoryInfoDTO.java
  8. 0 19
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/PlanInfoDTO.java
  9. 0 24
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/TaskInfoDTO.java
  10. 98 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ControlContractInfo.java
  11. 16 28
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ControlProjectInfo.java
  12. 66 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DictInfo.java
  13. 31 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/LogHistoryInfo.java
  14. 0 42
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/PlanInfo.java
  15. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectProcess.java
  16. 0 64
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/TaskInfo.java
  17. 0 4
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/feign/test.java
  18. 19 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlContractInfoVO.java
  19. 11 2
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlProjectInfoVO.java
  20. 70 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DictInfoVO.java
  21. 15 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/LogHistoryInfoReadVO.java
  22. 38 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/LogHistoryInfoVO.java
  23. 0 39
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanInfoVO.java
  24. 0 16
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanTaskRecordVO.java
  25. 0 47
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskPageVO.java
  26. 0 1
      blade-service-api/blade-user-api/blade-user-api.iml
  27. 4 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  28. 1 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/config/ThreadPoolConfig.java
  29. 2 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  30. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  31. 14 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  32. 29 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  33. 11 0
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java
  34. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.java
  35. 6 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml
  36. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  37. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  38. 90 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractInfoController.java
  39. 120 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DictInfoController.java
  40. 61 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/LogHistoryController.java
  41. 0 56
      blade-service/blade-control/src/main/java/org/springblade/control/controller/PlanInfoController.java
  42. 8 8
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java
  43. 0 71
      blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskInfoController.java
  44. 28 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.java
  45. 21 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.xml
  46. 52 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DictInfoMapper.java
  47. 24 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DictInfoMapper.xml
  48. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/LogHistoryMapper.java
  49. 14 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/LogHistoryMapper.xml
  50. 0 7
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/PlanInfoMapper.java
  51. 0 19
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/PlanInfoMapper.xml
  52. 4 2
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  53. 30 14
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  54. 7 7
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectProcessMapper.xml
  55. 0 7
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/TaskInfoMapper.java
  56. 0 13
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/TaskInfoMapper.xml
  57. 35 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IContractInfoService.java
  58. 74 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDictInfoService.java
  59. 4 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  60. 23 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/LogHistoryService.java
  61. 0 19
      blade-service/blade-control/src/main/java/org/springblade/control/service/PlanInfoService.java
  62. 0 26
      blade-service/blade-control/src/main/java/org/springblade/control/service/TaskInfoService.java
  63. 93 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java
  64. 73 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DictInfoServiceImpl.java
  65. 183 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java
  66. 0 131
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/PlanInfoServiceImpl.java
  67. 25 6
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  68. 16 12
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectProcessServiceImpl.java
  69. 0 161
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskInfoServiceImpl.java
  70. 62 0
      blade-service/blade-control/src/main/java/org/springblade/control/wrapper/DictInfoWrapper.java
  71. 0 4
      blade-service/blade-control/src/main/java/org/springblade/control/wrapper/test.java
  72. 0 1
      blade-service/blade-desk/blade-desk.iml
  73. 5 5
      blade-service/blade-manager/pom.xml
  74. 7 4
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java
  75. 19 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/LinkdataInfoController.java
  76. 8 26
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  77. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  78. 23 28
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  79. 17 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  80. 63 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FTPUtils.java
  81. 22 48
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java
  82. 0 1
      blade-service/blade-system/blade-system.iml
  83. 5 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  84. 二進制
      logs/backup/2023-06-01/cfca-logging-environment.20230601.0.log.zip
  85. 二進制
      logs/backup/2023-06-01/cfca-logging-error.20230601.0.log.zip
  86. 二進制
      logs/backup/2023-06-01/cfca-logging-info.20230601.0.log.zip
  87. 二進制
      logs/backup/2023-06-02/cfca-logging-info.20230602.0.log.zip
  88. 127 0
      src/main/java/org/springblade/control/controller/DictInfoController.java
  89. 34 0
      src/main/java/org/springblade/control/dto/DictInfoDTO.java
  90. 64 0
      src/main/java/org/springblade/control/entity/DictInfo.java
  91. 42 0
      src/main/java/org/springblade/control/mapper/DictInfoMapper.java
  92. 32 0
      src/main/java/org/springblade/control/mapper/DictInfoMapper.xml
  93. 41 0
      src/main/java/org/springblade/control/service/IDictInfoService.java
  94. 41 0
      src/main/java/org/springblade/control/service/impl/DictInfoServiceImpl.java
  95. 34 0
      src/main/java/org/springblade/control/vo/DictInfoVO.java
  96. 20 0
      src/main/java/sql/dictinfo.menu.sql

+ 7 - 8
blade-auth/blade-auth.iml

@@ -70,6 +70,12 @@
     <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.30" level="project" />
     <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.7" level="project" />
     <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
+    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
     <orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.7" level="project" />
     <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
     <orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
@@ -93,6 +99,7 @@
     <orderEntry type="library" name="Maven: io.protostuff:protostuff-runtime:1.6.0" level="project" />
     <orderEntry type="library" name="Maven: io.protostuff:protostuff-collectionschema:1.6.0" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
     <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.12.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.7.Final" level="project" />
@@ -202,7 +209,6 @@
     <orderEntry type="library" name="Maven: io.prometheus:simpleclient_common:0.9.0" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-core:1.8.3" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
-    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-redis:2.9.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-jwt:2.9.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-impl:0.11.2" level="project" />
@@ -269,13 +275,6 @@
     <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-security:2.2.5.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.3.12.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
-    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.4" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.4" level="project" />
-    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.12" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.security.oauth:spring-security-oauth2:2.3.5.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.15.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.15.RELEASE" level="project" />

+ 8 - 0
blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -449,4 +449,12 @@ public class CommonUtil {
         return baos.toByteArray();
     }
 
+
+    // 上传文件路径获取
+    public String getSysFileUrl() {
+
+
+        return "";
+    }
+
 }

+ 1 - 1
blade-ops/blade-xxljob-admin/doc/db/tables_xxl_job.sql

@@ -125,7 +125,7 @@ INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_cron`, `job_desc`, `add_time`
                            `alarm_email`, `executor_route_strategy`, `executor_handler`, `executor_param`,
                            `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`,
                            `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`)
-VALUES (1, 1, '0 0 0 * * ? *', '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'FIRST',
+VALUES (1, 1, '0 0 0 keyword error:', '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'FIRST',
         'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
 INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`)
 VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java

@@ -115,4 +115,7 @@ public interface ArchiveFileClient {
 
     @PostMapping(API_PREFIX + "/updateArchiveFileByBoxNameOne")
     boolean updateArchiveFileByBoxNameOne(@RequestParam String boxName, @RequestParam Integer boxNumber);
+
+    @PostMapping(API_PREFIX + "/updateRectificationById")
+    boolean updateRectificationById(@RequestParam Long id,@RequestParam Integer rectification);
 }

+ 4 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ControlProjectInfoDTO.java

@@ -22,4 +22,8 @@ public class ControlProjectInfoDTO extends ControlProjectInfo {
     //模糊查询
     @ApiModelProperty(value = "搜索值")
     private String queryValue;
+
+    //模糊查询
+    @ApiModelProperty(value = "查询时间")
+    private String queryDate;
 }

+ 34 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/DictInfoDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.dto;
+
+import org.springblade.control.entity.DictInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 参数信息表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DictInfoDTO extends DictInfo {
+    private static final long serialVersionUID = 1L;
+
+}

+ 19 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/LogHistoryInfoDTO.java

@@ -0,0 +1,19 @@
+package org.springblade.control.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.control.entity.LogHistoryInfo;
+
+@Data
+public class LogHistoryInfoDTO extends LogHistoryInfo {
+
+    @ApiModelProperty(value = "开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "任务ids")
+    private String taskIds;
+
+}

+ 0 - 19
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/PlanInfoDTO.java

@@ -1,19 +0,0 @@
-package org.springblade.control.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.control.entity.PlanInfo;
-
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class PlanInfoDTO extends PlanInfo {
-
-    @ApiModelProperty(value = "任务ids,字符串逗号拼接")
-    private String taskIds;
-
-    @ApiModelProperty(value = "任务数据状态 1=提交数据 2=暂存数据")
-    private String taskDataStatus;
-
-}

+ 0 - 24
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/TaskInfoDTO.java

@@ -1,24 +0,0 @@
-package org.springblade.control.dto;
-
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.control.entity.TaskInfo;
-import org.springblade.core.mp.base.BaseEntity;
-
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class TaskInfoDTO extends TaskInfo {
-
-    @ApiModelProperty(value = "1=我的任务、2=我关联的计划任务、3=查看全部计划任务")
-    private String type;
-
-    @ApiModelProperty(value = "计划部门")
-    private String planDept;
-
-    @ApiModelProperty(value = "计划状态")
-    private String planStatus;
-
-}

+ 98 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ControlContractInfo.java

@@ -0,0 +1,98 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/6 9:21
+ **/
+@Data
+@TableName("c_control_contract_info")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "项目合同表", description = "项目合同表")
+public class ControlContractInfo extends BaseEntity {
+    @ApiModelProperty(value = "合同编号")
+    private String number;
+
+    @ApiModelProperty(value = "合同名称")
+    private String name;
+
+    @ApiModelProperty(value = "合同类型")
+    private Integer contractType;
+
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "合同签订时间")
+    private LocalDate contractSignTime;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "合同开始日期")
+    private LocalDate startTime;
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd"
+    )
+    @ApiModelProperty(value = "合同结束日期")
+    private LocalDate endTime;
+
+    @ApiModelProperty(value = "对方单位回款联系人名称")
+    private String returnedUserName;
+
+    @ApiModelProperty(value = "对方单位回款联系人电话")
+    private String returnedUserPhone;
+
+    @ApiModelProperty(value = "合同金额")
+    private BigDecimal contractMoney;
+
+    @ApiModelProperty(value = "发票抬头")
+    private String invoiceHead;
+
+    @ApiModelProperty(value = "纳税人识别号")
+    private String taxpayerNumber;
+
+    @ApiModelProperty(value = "开户银行")
+    private String openAccountBank;
+
+    @ApiModelProperty(value = "银行账户")
+    private String bankAccount;
+
+    @ApiModelProperty(value = "收件人姓名")
+    private String addresseeUserName;
+
+    @ApiModelProperty(value = "联系电话")
+    private String addresseePhone;
+
+    @ApiModelProperty(value = "邮寄地址")
+    private String mailingAddress;
+
+    @ApiModelProperty(value = "合同附件")
+    private String contractAccessory;
+
+
+}

+ 16 - 28
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ControlProjectInfo.java

@@ -30,8 +30,8 @@ public class ControlProjectInfo extends BaseEntity {
     @ApiModelProperty(value = "项目名称")
     private String name;
 
-    @ApiModelProperty(value = "项目进程")
-    private String process;
+    @ApiModelProperty(value = "建设单位")
+    private String constructUnit;
 
     @DateTimeFormat(
             pattern = "yyyy-MM-dd"
@@ -40,16 +40,7 @@ public class ControlProjectInfo extends BaseEntity {
             pattern = "yyyy-MM-dd"
     )
     @ApiModelProperty(value = "项目开始日期")
-    private LocalDate projectStartTime;
-
-    @ApiModelProperty(value = "项目类型")
-    private Integer projectType;
-
-    @ApiModelProperty(value = "合同类型")
-    private Integer contractType;
-
-    @ApiModelProperty(value = "合同金额")
-    private BigDecimal contractAmount;
+    private LocalDate startTime;
 
     @DateTimeFormat(
             pattern = "yyyy-MM-dd"
@@ -57,25 +48,22 @@ public class ControlProjectInfo extends BaseEntity {
     @JsonFormat(
             pattern = "yyyy-MM-dd"
     )
-    @ApiModelProperty(value = "合同开始时间")
-    private LocalDate contractStartTime;
+    @ApiModelProperty(value = "项目结束日期")
+    private LocalDate endTime;
 
-    @DateTimeFormat(
-            pattern = "yyyy-MM-dd"
-    )
-    @JsonFormat(
-            pattern = "yyyy-MM-dd"
-    )
-    @ApiModelProperty(value = "合同停止日期")
-    private LocalDate contractEndTime;
+    @ApiModelProperty(value = "项目类型")
+    private Integer projectType;
+
+    @ApiModelProperty(value = "项目服务类型")
+    private Integer projectServerType;
 
-    @ApiModelProperty(value = "已回款")
-    private BigDecimal returnedMoney;
+    @ApiModelProperty(value = "项目负责人")
+    private Long projectPrincipal;
 
-    @ApiModelProperty(value = "合同pdf")
-    private String contractPdf;
+    @ApiModelProperty(value = "实施负责人")
+    private Long implementPrincipal;
 
-    @ApiModelProperty(value = "负责人")
-    private Long dutyUser;
+    @ApiModelProperty(value = "维护负责人")
+    private Long maintainPrincipal;
 
 }

+ 66 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DictInfo.java

@@ -0,0 +1,66 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+import org.springblade.core.mp.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 参数信息表实体类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@Data
+@TableName("c_dict_info")
+@EqualsAndHashCode(callSuper = true)
+public class DictInfo extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 父主键
+     */
+    private Long parentId;
+    /**
+     * 字典名称
+     */
+    private String dictName;
+    /**
+     * 字典值
+     */
+    private String dictValue;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 参数类型
+     */
+    private Integer type;
+    /**
+     * 自定义码
+     */
+    private String code;
+
+
+}

+ 31 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/LogHistoryInfo.java

@@ -0,0 +1,31 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+@Data
+@TableName("c_log_history_info")
+@EqualsAndHashCode(callSuper = true)
+public class LogHistoryInfo extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "组织部门id")
+    private Long orgDept;
+
+    @ApiModelProperty(value = "工作描述")
+    private String workDesc;
+
+    @ApiModelProperty(value = "风险预警")
+    private String riskWarning;
+
+    @ApiModelProperty(value = "报销金额")
+    private String expenseReimbursementAmount;
+
+}

+ 0 - 42
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/PlanInfo.java

@@ -1,42 +0,0 @@
-package org.springblade.control.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-import java.util.Date;
-
-/**
- * 计划表
- */
-@Data
-@TableName("c_control_plan_info")
-@EqualsAndHashCode(callSuper = true)
-public class PlanInfo extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "计划名称")
-    private String planName;
-
-    @ApiModelProperty(value = "计划编号")
-    private String planNumber;
-
-    @ApiModelProperty(value = "计划部门")
-    private Integer planDept;
-
-    @ApiModelProperty(value = "计划类型")
-    private Integer planType;
-
-    @ApiModelProperty(value = "计划开始时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd", timezone = "GMT+8")
-    private Date planStartDate;
-
-    @ApiModelProperty(value = "计划结束时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd", timezone = "GMT+8")
-    private Date planEndDate;
-
-}

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

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
  * @Date 2023/5/12 11:42
  **/
 @Data
-@TableName("c_control_project_process")
+@TableName("c_project_process")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "项目进程表", description = "项目进程表")
 public class ProjectProcess extends BaseEntity {

+ 0 - 64
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/TaskInfo.java

@@ -1,64 +0,0 @@
-package org.springblade.control.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springblade.core.mp.base.BaseEntity;
-
-import java.util.Date;
-
-
-/**
- * 计划任务表
- */
-@Data
-@TableName("c_control_task_info")
-@EqualsAndHashCode(callSuper = true)
-public class TaskInfo extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "任务描述")
-    private String taskDesc;
-
-    @ApiModelProperty(value = "任务类型")
-    private Integer taskType;
-
-    @ApiModelProperty(value = "任务完成指标")
-    private String taskStandard;
-
-    @ApiModelProperty(value = "任务开始日期")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd", timezone = "GMT+8")
-    private Date taskStartDate;
-
-    @ApiModelProperty(value = "任务结束日期")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd", timezone = "GMT+8")
-    private Date taskEndDate;
-
-    @ApiModelProperty(value = "总工作日")
-    private String totalWorkDays;
-
-    @ApiModelProperty(value = "关联项目id")
-    private Long relatedProjectId;
-
-    @ApiModelProperty(value = "是否关联预算 0=否 1=是")
-    private Integer isRelatedBudget;
-
-    @ApiModelProperty(value = "关联的项目环节")
-    private Integer projectProcess;
-
-    @ApiModelProperty(value = "任务人id")
-    private Long taskUserId;
-
-    @ApiModelProperty(value = "协助人id")
-    private Long taskUserIdAssist;
-
-    @ApiModelProperty(value = "部门负责人id")
-    private Long taskUserIdLeader;
-
-    @ApiModelProperty(value = "任务数据状态 1=提交数据 2=暂存数据")
-    private Integer isSubmitOrSuspend;
-
-}

+ 0 - 4
blade-service-api/blade-control-api/src/main/java/org/springblade/control/feign/test.java

@@ -1,4 +0,0 @@
-package org.springblade.control.feign;
-
-public class test {
-}

+ 19 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlContractInfoVO.java

@@ -0,0 +1,19 @@
+package org.springblade.control.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.ControlContractInfo;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/6 15:22
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ControlContractInfoVO extends ControlContractInfo {
+    //合同类型值
+    private String contractTypeValue;
+    //项目名称
+    private String projectName;
+}

+ 11 - 2
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ControlProjectInfoVO.java

@@ -4,6 +4,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.control.entity.ControlProjectInfo;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -16,8 +17,16 @@ import java.util.List;
 public class ControlProjectInfoVO extends ControlProjectInfo {
     //项目类型值
     private String projectTypeValue;
-    //合同类型值
-    private String contractTypeValue;
+    //项目服务类型值
+    private String projectServerTypeValue;
+    //合同金额
+    private BigDecimal contractMoney;
+    //项目负责人名称
+    private String projectPrincipalName;
+    //实施负责人名称
+    private String implementPrincipalName;
+    //维护负责人名称
+    private String maintainPrincipalName;
     //项目进程集合
     private List<ProjectProcessVO> projectProcessList;
 }

+ 70 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DictInfoVO.java

@@ -0,0 +1,70 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import org.springblade.control.entity.DictInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 参数信息表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DictInfoVO extends DictInfo implements INode<DictInfoVO> {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    /**
+     * 子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<DictInfoVO> children;
+
+    @Override
+    public List<DictInfoVO> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+
+    /**
+     * 上级字典
+     */
+    private String parentName;
+}

+ 15 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/LogHistoryInfoReadVO.java

@@ -0,0 +1,15 @@
+package org.springblade.control.vo;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("c_log_history_read_record")
+public class LogHistoryInfoReadVO {
+
+    private Long id;
+    private Long logId;
+    private Long userId;
+
+}

+ 38 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/LogHistoryInfoVO.java

@@ -0,0 +1,38 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.control.entity.LogHistoryInfo;
+
+import java.util.List;
+
+@Data
+public class LogHistoryInfoVO extends LogHistoryInfo {
+
+    @ApiModelProperty(value = "用户头像")
+    private String headPicture;
+
+    @ApiModelProperty(value = "日志名称")
+    private String logTitle;
+
+    @ApiModelProperty(value = "已读状态 0=未读 1=已读")
+    private Integer isRead;
+
+   /*@ApiModelProperty(value = "当前日志关联的任务信息List")
+    private List<TaskInfo> taskList;*/
+
+    @ApiModelProperty(value = "当前日志所有已读人")
+    private List<ReadUser> readUsers;
+
+    @Data
+    public static class ReadUser {
+        private String headPicture;
+        private String name;
+
+        public ReadUser(String headPicture, String name) {
+            this.headPicture = headPicture;
+            this.name = name;
+        }
+    }
+
+}

+ 0 - 39
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanInfoVO.java

@@ -1,39 +0,0 @@
-package org.springblade.control.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class PlanInfoVO implements Serializable {
-
-    @ApiModelProperty(value = "计划id")
-    private String id;
-
-    @ApiModelProperty(value = "计划编号")
-    private String planNumber;
-
-    @ApiModelProperty(value = "计划名称")
-    private String planName;
-
-    @ApiModelProperty(value = "计划类型")
-    private String planTypeName;
-
-    @ApiModelProperty(value = "计划起止日期")
-    private String planStartAndEndDate;
-
-    @ApiModelProperty(value = "任务总数量")
-    private String taskCount;
-
-    @ApiModelProperty(value = "已完成计划")
-    private String taskComplete;
-
-    @ApiModelProperty(value = "未完成计划")
-    private String taskIncomplete;
-
-    @ApiModelProperty(value = "计划制定人")
-    private String planFormulateUserName;
-
-
-}

+ 0 - 16
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/PlanTaskRecordVO.java

@@ -1,16 +0,0 @@
-package org.springblade.control.vo;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@TableName("c_control_plan_task_record")
-public class PlanTaskRecordVO implements Serializable {
-
-    private Long id;
-    private Long planId;
-    private Long taskId;
-
-}

+ 0 - 47
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskPageVO.java

@@ -1,47 +0,0 @@
-package org.springblade.control.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-@Data
-public class TaskPageVO implements Serializable {
-
-    @ApiModelProperty(value = "任务id")
-    private String id;
-
-    @ApiModelProperty(value = "计划名称")
-    private String planName;
-
-    @ApiModelProperty(value = "任务状态")
-    private String status;
-
-    @ApiModelProperty(value = "任务描述")
-    private String taskDesc;
-
-    @ApiModelProperty(value = "任务完成指标")
-    private String taskStandard;
-
-    @ApiModelProperty(value = "任务完成期限")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd", timezone = "GMT+8")
-    private Date taskEndDate;
-
-    @ApiModelProperty(value = "任务人")
-    private String taskUserName;
-
-    @ApiModelProperty(value = "协助人")
-    private String taskUserAssistName;
-
-    @ApiModelProperty(value = "部门负责人")
-    private String taskUserLeaderName;
-
-    @ApiModelProperty(value = "关联的项目环节名称")
-    private String projectProcessName;
-
-    @ApiModelProperty(value = "关联项目")
-    private String relatedProjectName;
-
-}

+ 0 - 1
blade-service-api/blade-user-api/blade-user-api.iml

@@ -172,7 +172,6 @@
     <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.15.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.15.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
-    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-tenant:2.9.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.3.6" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.2.9.RELEASE" level="project" />

+ 4 - 0
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java

@@ -57,6 +57,7 @@ public interface IUserClient {
     String UPDATE_USERS_ROLE_ID = API_PREFIX + "/user-roleId-update-three";
     String USER_INFO_LIST = API_PREFIX + "/find-user-info-list";
     String USER_INFO_ALL = API_PREFIX + "/get-users-all";
+    String USER_LIST_INFO_BY_IDS = API_PREFIX + "/getUserListByIds";
 
     /**
      * 获取所有有效用户
@@ -162,4 +163,7 @@ public interface IUserClient {
     @GetMapping(USER_INFO_ALL)
     List<User> selectUserAll();
 
+    @GetMapping(USER_LIST_INFO_BY_IDS)
+    List<User> userInfoByIds(@RequestBody List<Long> userIds);
+
 }

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/config/ThreadPoolConfig.java

@@ -13,7 +13,7 @@ public class ThreadPoolConfig {
 
     @Bean(name = "executorService")
     public ExecutorService executorService() {
-        return Executors.newFixedThreadPool(10);
+        return Executors.newFixedThreadPool(20);
     }
 
 }

+ 2 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -382,10 +382,10 @@ public class ArchivesAutoController extends BladeController {
 			contractClient.updateIsArchivesAutoById(contractId,1);
 
 			archivesAutoService.archiveAutoMethodThread(projectId,contractId,nodeId);
-			return R.data("自动组卷中,请耐心等待");
+			return R.data("开始自动组卷中,请耐心等待");
 		}catch (Exception e){
 			e.printStackTrace();
-			log.error("自动组卷错。"+e.getMessage()+"--projectId:"+projectId+"-contractId:"+contractId+"-nodeId:"+nodeId);
+			log.error("自动组卷错。"+e.getMessage()+"--projectId:"+projectId+"-contractId:"+contractId+"-nodeId:"+nodeId);
 			//设置自动组卷结束
 			contractClient.updateIsArchivesAutoById(contractId,0);
 			return R.fail(e.getMessage());

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

@@ -128,6 +128,8 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 
     List<ArchivesAutoVO> getArchivesCabinet(@Param("vo") ArchivesAutoVO archivesAuto);
 
+    List<ArchivesAutoVO> getArchivesCabinet2(@Param("vo") ArchivesAutoVO archivesAuto);
+
 	List<ArchivesAutoVO> pageByArchivesAuto3(IPage page, @Param("vo") ArchivesAutoVO vo);
 
 	List<ArchivesAutoVO> pageByArchivesAuto4(@Param("vo") ArchivesAutoVO vo);

+ 14 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -542,6 +542,18 @@
         ) 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
+        GROUP BY uaa.id
+        order by uaa.tree_sort,uaa.auto_file_sort,uaa.file_number asc
+--         order by uaa.id
+    </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 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.searchType == 1 and vo.queryValue != null and vo.queryValue != ''">
             and uaa.name like concat('%',#{vo.queryValue},'%')
         </if>
@@ -579,7 +591,8 @@
             </foreach>
         </if>
         GROUP BY uaa.id
-        order by uaa.tree_sort,uaa.auto_file_sort,uaa.file_number asc
+                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">

+ 29 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -39,6 +40,7 @@ import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
@@ -242,9 +244,21 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	public List<Map<String,List<Map<String,String>>>> getArchivesCabinet(ArchivesAutoVO archivesAuto) {
 		//获取单位首节点
 		ArchiveTreeContract	contract = archiveTreeContractClient.getFirstNodeByTreeCode(archivesAuto.getProjectId(),archivesAuto.getArchiveType());
+		if (contract == null){
+			throw new ServiceException("归档树节点错误");
+		}
+		//如果没有获取到对应单位,则提示
 		archivesAuto.setNodeId(contract.getId());
 		//根据单位查询所有档案
 		List<ArchivesAutoVO> archivesAutos = baseMapper.getArchivesCabinet(archivesAuto);
+		//根据选择条件查询所有档案
+		List<ArchivesAutoVO> selectAutos = baseMapper.getArchivesCabinet2(archivesAuto);
+		List<Long> ids = new ArrayList<>();
+		if (selectAutos != null && selectAutos.size() > 0) {
+			ids = selectAutos.stream().map(l -> l.getId()).collect(Collectors.toList());
+		}else {
+			ids.add(-1L);
+		}
 		if (archivesAutos != null && archivesAutos.size() > 0) {
 			List<List<ArchivesAutoVO>> listList = CommonUtil.splitList(archivesAutos, 160);
 			//所有页,所有柜子
@@ -254,6 +268,13 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			int CabinetTotal = 1;
 			//把所有档案分成柜子
 			for (List<ArchivesAutoVO> list : listList) {
+				String status = "0";
+				for (ArchivesAutoVO vo : list) {
+					if (ids.contains(vo.getId())){
+						status = "1";
+						break;
+					}
+				}
 				//一个柜子
 				Map<String, String> map = new HashMap<>();
 				map.put("id",CabinetTotal+"");
@@ -262,9 +283,11 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				}else {
 					map.put("name",CabinetTotal+"");
 				}
+				CabinetTotal++;
 				String[] min = list.get(0).getFileNumber().split("_");
 				String[] max = list.get(list.size()-1).getFileNumber().split("_");
 				map.put("content","档号"+min[min.length-1]+"~"+"档号"+max[max.length-1]);
+				map.put("status",status);
 				//把每一个柜子都添加
 				allCabinet.add(map);
 			}
@@ -1428,15 +1451,17 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 		//分组,分程 建设单位,各个合同段,电子单位等
 		for (List<ArchiveTreeContract> subList: subGroupedList) {
+
+			//根据 authFilter函数过滤
+			subList = authFilter(subList,contractId,nodeId);
 			List<Long> ids = subList.stream()
 					.map(ArchiveTreeContract::getId)
 					.collect(Collectors.toList());
 
-			//todo 后续根据 authFilter函数过滤
-
-			subList = authFilter(subList,contractId,nodeId);
-
 			index =1;
+			if(ids.size()==0){
+				continue;
+			}
 			List<ArchivesAuto> archivesAutos = findArchivesAutosByIds(ids);
 			if (archivesAutos == null || archivesAutos.size() == 0) {
 				continue;

+ 11 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -240,5 +240,16 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
         return this.iArchiveFileService.updateArchiveFileByBoxNameOne(boxName, boxNumber);
     }
 
+    @Override
+    public boolean updateRectificationById(Long id,Integer rectification) {
+        try {
+            fileMapper.updateRectificationById(id,rectification);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
 
 }

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.java

@@ -86,4 +86,6 @@ public interface ArchiveFileMapper extends BaseMapper<ArchiveFile> {
 
     //后续应该加入文件类型
     List<ArchiveFile> getAllPdfFileUrlByProjectIdAndFileType(@Param("projectId") Long projectId);
+
+    void updateRectificationById(@Param("id") Long id,@Param("rectification") Integer rectification);
 }

+ 6 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml

@@ -357,6 +357,7 @@
         from u_archive_file
         where node_id = #{nodeId}
           and (is_archive = 0 OR is_archive IS NULL)
+          and (is_auto_file is null or is_auto_file != 1)
           and is_deleted = 0
         order by sort
     </select>
@@ -376,4 +377,9 @@
         WHERE project_id = #{projectId}
     </select>
 
+    <update id="updateRectificationById">
+        update u_archive_file set rectification = #{rectification} where
+        id = #{id}
+    </update>
+
 </mapper>

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -99,8 +99,8 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                 tableList = this.wbsTreeContractClient.queryContractFirstTab(tree.getContractId(), "111");
             }
             if (tableList != null && tableList.size() > 0) {
-                //删除掉无法溯源的数据
-                tableList.removeIf(node -> node.getIsTypePrivatePid() == null || node.getIsTypePrivatePid() <= 0 || StringUtils.isEmpty(node.getIsTypePrivatePid().toString()) || node.getHtmlUrl() == null);
+                //删除掉无法溯源的数据   和 隐藏节点数据
+                tableList.removeIf(node -> node.getIsTypePrivatePid() == null || node.getIsTypePrivatePid() <= 0 || StringUtils.isEmpty(node.getIsTypePrivatePid().toString()) || node.getHtmlUrl() == null || node.getStatus() != 1);
                 List<Long> privatePIdList = tableList.stream().map(WbsTreeContract::getIsTypePrivatePid).distinct().collect(Collectors.toList());
                 return JSONArray.parseArray(JSONObject.toJSONString(privatePIdList), String.class);
 

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -511,7 +511,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     }
 
 
-    @Scheduled(cron = "0 */3 * * * ?")
+    @Scheduled(cron = "0 */2 * * * ?")
     public void SignInfo() {
         //执行代码
         logger.debug("扫描开始");
@@ -556,7 +556,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             for (TaskApprovalVO taskApprovalVO : taskApprovalVOS) {
                 taskApprovalVO.setUserId(userId);
                 taskApprovalVO.setNickName(nickName);
-                RedisTemplate.opsForValue().set("sign-" + taskApprovalVO.getFormDataId(), "1", 300, TimeUnit.SECONDS);
+                RedisTemplate.opsForValue().set("sign-" + taskApprovalVO.getFormDataId(), "1", 150, TimeUnit.SECONDS);
 
                 String pdfUrlEVisa = this.completeApprovalTask(taskApprovalVO);
                 //TODO ============== 电签成功,修改试验状态,关联工程部位信息pdf(只有电签成功,才修改) liuYc 2023-03-16 ==============

+ 90 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractInfoController.java

@@ -0,0 +1,90 @@
+package org.springblade.control.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ControlContractInfo;
+import org.springblade.control.service.IContractInfoService;
+import org.springblade.control.service.IProjectInfoService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/6/6 9:46
+ **/
+@RestController
+@AllArgsConstructor
+@RequestMapping("/contractInfo")
+@Api(value = "合同信息接口", tags = "合同信息接口")
+public class ContractInfoController {
+    private final IContractInfoService contractInfoService;
+
+    /**
+     * 新增合同
+     */
+    @PostMapping("/addContractInfo")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "新增合同")
+    public R addContractInfo(@RequestBody ControlContractInfo contractInfo) {
+        contractInfoService.addContractInfo(contractInfo);
+        return R.success("新增成功");
+    }
+
+    /**
+     * 删除合同
+     */
+    @GetMapping("/deleteContractInfoById")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "删除合同")
+    public R deleteContractInfoById(Long id) {
+        contractInfoService.deleteContractInfoById(id);
+        return R.success("删除成功");
+    }
+
+    /**
+     * 修改合同
+     */
+    @PostMapping("/updateContractInfo")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "修改合同")
+    public R updateContractInfo(@RequestBody ControlContractInfo contractInfo) {
+        contractInfoService.updateContractInfo(contractInfo);
+        return R.success("修改成功");
+    }
+
+    /**
+     * 查询单个合同信息
+     */
+    @GetMapping("/getContractInfoById")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "查询单个合同信息")
+    public R getContractInfoById(Long id) {
+        return R.data(contractInfoService.getContractInfoById(id));
+    }
+
+    /**
+     * 获取合同类型字典
+     */
+    @GetMapping("/getContractTypeDict")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取合同类型字典")
+    public R getContractTypeDict() {
+        return R.data(contractInfoService.getContractTypeDict());
+    }
+
+    /**
+     * 获取未被关联的项目
+     */
+    @GetMapping("getNoConnectionProject")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取未被关联的项目")
+    public R getNoConnectionProject(){
+        return R.data(contractInfoService.getNoConnectionProject());
+    }
+
+}

+ 120 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/DictInfoController.java

@@ -0,0 +1,120 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.controller;
+
+import io.swagger.annotations.*;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.vo.DictBizVO;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import org.springblade.control.service.IDictInfoService;
+import org.springblade.core.boot.ctrl.BladeController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 参数信息表 控制器
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dictinfo")
+@Api(value = "参数信息表", tags = "参数信息表接口")
+public class DictInfoController extends BladeController {
+
+    private final IDictInfoService dictInfoService;
+
+    /**
+     * 新增或修改 参数信息表
+     */
+    @PostMapping("/submit")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "新增或修改", notes = "传入dictInfo")
+    public R submit(@Valid @RequestBody DictInfo dictInfo) {
+        return R.status(dictInfoService.saveOrUpdate(dictInfo));
+    }
+
+
+    /**
+     * 删除 参数信息表
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        return R.status(dictInfoService.deleteLogic(Func.toLongList(ids)));
+    }
+
+
+    /**
+     * 获取字典
+     */
+    @GetMapping("/dictionary")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "获取字典", notes = "获取字典")
+    public R<List<DictBiz>> dictionary(String code) {
+        List<DictBiz> tree = dictInfoService.getList(code, "notRoot");
+        return R.data(tree);
+    }
+
+    /**
+     * 顶级列表
+     */
+    @GetMapping("/parent-list")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"),
+            @ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string")
+    })
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "列表", notes = "传入dict")
+    public R<IPage<DictInfoVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
+        return R.data(dictInfoService.parentList(dict, query));
+    }
+
+    /**
+     * 子列表
+     */
+    @GetMapping("/child-list")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"),
+            @ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string"),
+            @ApiImplicitParam(name = "parentId", value = "字典名称", paramType = "query", dataType = "string")
+    })
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "列表", notes = "传入dict")
+    public R<List<DictInfoVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
+        return R.data(dictInfoService.childList(dict, parentId));
+    }
+
+
+}

+ 61 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/LogHistoryController.java

@@ -0,0 +1,61 @@
+package org.springblade.control.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.dto.LogHistoryInfoDTO;
+import org.springblade.control.service.LogHistoryService;
+import org.springblade.control.vo.LogHistoryInfoVO;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/log")
+@Api(value = "日志填报接口", tags = "日志填报接口")
+public class LogHistoryController extends BladeController {
+
+    private final LogHistoryService logHistoryService;
+
+    @PostMapping("/list")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "日志填报列表查询", notes = "传入HistoryLogInfoDTO")
+    public R<Map<String, List<LogHistoryInfoVO>>> logList(@RequestBody LogHistoryInfoDTO dto) {
+        return R.data(logHistoryService.logList(dto));
+    }
+
+    @PostMapping("/submit")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "日志填报新增或修改", notes = "传入HistoryLogInfoDTO")
+    public R<Object> logSubmit(@RequestBody LogHistoryInfoDTO dto) {
+        return R.status(logHistoryService.logSubmit(dto));
+    }
+
+    @PostMapping("/detail")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "日志填报详情", notes = "传入日志id")
+    public R<LogHistoryInfoVO> logDetail(@RequestParam Long id) {
+        return R.data(logHistoryService.logDetail(id));
+    }
+
+    @PostMapping("/task/complete")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "日志任务完成", notes = "传入日志logId、任务taskId")
+    public R<Object> logTaskComplete(@RequestParam Long logId, @RequestParam Long taskId) {
+        return R.status(logHistoryService.logTaskComplete(logId, taskId));
+    }
+
+    @PostMapping("/task/list")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "日志任务列表", notes = "传入日志logId")
+    public R<Object> logTaskList(@RequestParam Long logId) {
+        return R.data(logHistoryService.logTaskList(logId));
+    }
+
+
+}

+ 0 - 56
blade-service/blade-control/src/main/java/org/springblade/control/controller/PlanInfoController.java

@@ -1,56 +0,0 @@
-package org.springblade.control.controller;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springblade.control.dto.PlanInfoDTO;
-import org.springblade.control.entity.PlanInfo;
-import org.springblade.control.service.PlanInfoService;
-import org.springblade.control.vo.PlanInfoVO;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tool.api.R;
-import org.springframework.web.bind.annotation.*;
-
-
-@RestController
-@AllArgsConstructor
-@RequestMapping("/plan")
-@Api(value = "计划接口", tags = "计划接口")
-public class PlanInfoController extends BladeController {
-
-    private final PlanInfoService planInfoService;
-
-    @PostMapping("/page")
-    @ApiOperationSupport(order = 1)
-    @ApiOperation(value = "计划分页查询", notes = "传入Query、PlanInfoDTO")
-    public R<IPage<PlanInfoVO>> planPage(@RequestBody Query query, @RequestBody PlanInfoDTO dto) {
-        return R.data(planInfoService.planPage(Condition.getPage(query), dto));
-    }
-
-    @PostMapping("/submit")
-    @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "计划新增或编辑", notes = "传入PlanInfoDTO")
-    public R<Object> planSubmit(PlanInfoDTO dto) {
-        return R.status(planInfoService.planSubmit(dto));
-    }
-
-    @PostMapping("/remove")
-    @ApiOperationSupport(order = 3)
-    @ApiOperation(value = "计划删除", notes = "传入计划id")
-    public R<Object> planRemove(@RequestParam String id) {
-        return R.status(planInfoService.planRemove(id));
-    }
-
-    @GetMapping("/detail")
-    @ApiOperationSupport(order = 4)
-    @ApiOperation(value = "计划详情", notes = "传入计划id")
-    public R<PlanInfo> planDetail(@RequestParam String id) {
-        return R.data(planInfoService.planDetail(id));
-    }
-
-}

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

@@ -67,13 +67,12 @@ public class ProjectInfoController {
         return R.success("删除成功");
     }
 
-
     /**
-     * 根据id获取项目和流程
+     * 编辑-根据id获取项目和流程
      */
     @GetMapping("/getProjectInfoById")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "根据id获取项目和流程")
+    @ApiOperation(value = "编辑-根据id获取项目和流程")
     public R getProjectInfoById(Long id) {
         return R.data(projectInfoService.getProjectInfoById(id));
     }
@@ -89,13 +88,14 @@ public class ProjectInfoController {
     }
 
     /**
-     * 获取合同类型字典
+     * 获取项目服务类型字典
      */
-    @GetMapping("/getContractTypeDict")
+    @GetMapping("/getProjectServerTypeDict")
     @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "获取合同类型字典")
-    public R getContractTypeDict() {
-        return R.data(projectInfoService.getContractTypeDict());
+    @ApiOperation(value = "获取项目服务类型字典")
+    public R getProjectServerTypeDict() {
+        return R.data(projectInfoService.getProjectServerTypeDict());
     }
 
+
 }

+ 0 - 71
blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskInfoController.java

@@ -1,71 +0,0 @@
-package org.springblade.control.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springblade.control.dto.TaskInfoDTO;
-import org.springblade.control.entity.TaskInfo;
-import org.springblade.control.service.TaskInfoService;
-import org.springblade.control.vo.TaskPageVO;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-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.*;
-
-import java.util.List;
-
-@RestController
-@AllArgsConstructor
-@RequestMapping("/task")
-@Api(value = "计划任务接口", tags = "计划任务接口")
-public class TaskInfoController extends BladeController {
-
-    private final TaskInfoService taskInfoService;
-
-    @PostMapping("/submit")
-    @ApiOperationSupport(order = 1)
-    @ApiOperation(value = "任务新增或修改", notes = "传入TaskInfo")
-    public R<Object> taskSubmit(@RequestBody TaskInfo obj) {
-        return R.status(taskInfoService.taskSubmit(obj));
-    }
-
-    @GetMapping("/list")
-    @ApiOperationSupport(order = 2)
-    @ApiOperation(value = "任务列表", notes = "传入计划id")
-    public R<List<TaskInfo>> taskList(@RequestParam String id) {
-        return R.data(taskInfoService.taskList(id));
-    }
-
-    @PostMapping("/remove")
-    @ApiOperationSupport(order = 3)
-    @ApiOperation(value = "任务删除", notes = "传入任务id")
-    public R<Object> taskRemove(@RequestParam String id) {
-        return R.status(taskInfoService.taskRemove(id));
-    }
-
-    @PostMapping("/repeal")
-    @ApiOperationSupport(order = 4)
-    @ApiOperation(value = "任务废除", notes = "传入任务id")
-    public R<Object> taskRepeal(@RequestParam String id) {
-        return R.status(taskInfoService.taskRepeal(id));
-    }
-
-    @PostMapping("/page")
-    @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "我的任务page分页", notes = "传入Query、TaskInfoDTO")
-    public R<IPage<TaskPageVO>> taskPage(@RequestBody Query query, @RequestBody TaskInfoDTO dto) {
-        return R.data(taskInfoService.taskPage(Condition.getPage(query), dto));
-    }
-
-    @PostMapping("/relation/submit")
-    @ApiOperationSupport(order = 6)
-    @ApiOperation(value = "关联任务提交", notes = "传入任务ids、当前用户信息")
-    public R<Object> taskRelationSubmit(String taskIds, BladeUser user) {
-        return R.status(taskInfoService.taskRelationSubmit(taskIds, user));
-    }
-
-}

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

@@ -0,0 +1,28 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ControlContractInfo;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.ControlContractInfoVO;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.system.entity.DictBiz;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:38
+ **/
+public interface ContractInfoMapper extends BaseMapper<ControlContractInfo> {
+
+    List<DictInfo> getContractTypeDict();
+
+    List<ControlProjectInfo> getNoConnectionProject();
+
+    ControlContractInfoVO getContractInfoById(@Param("id") Long id);
+}

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

@@ -0,0 +1,21 @@
+<?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.ContractInfoMapper">
+
+
+    <select id="getNoConnectionProject" resultType="org.springblade.control.entity.ControlProjectInfo">
+        select pi.id,pi.name from c_control_project_info pi left join c_control_contract_info ci on pi.id = ci.project_id WHERE ci.id is null
+    </select>
+
+    <select id="getContractTypeDict" resultType="org.springblade.control.entity.DictInfo">
+        SELECT * FROM c_dict_info WHERE CODE = 'contract_type' order by sort
+    </select>
+
+    <select id="getContractInfoById" resultType="org.springblade.control.vo.ControlContractInfoVO">
+        SELECT
+            ci.*,
+            (select dict_name  from c_dict_info WHERE code = 'contract_type' AND dict_value= ci.contract_type) as contractTypeValue,
+            (select name  from c_control_project_info WHERE id = ci.project_id) as projectName
+        FROM c_control_contract_info ci WHERE ci.id = #{id}
+    </select>
+</mapper>

+ 52 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DictInfoMapper.java

@@ -0,0 +1,52 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.system.entity.DictBiz;
+
+import java.util.List;
+
+/**
+ * 参数信息表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+public interface DictInfoMapper extends BaseMapper<DictInfo> {
+
+    /**
+     * 自定义分页
+     *
+     * @param page
+     * @param dictInfo
+     * @return
+     */
+    List<DictInfoVO> selectDictInfoPage(IPage page, DictInfoVO dictInfo);
+
+    /**
+     * 获取字典表
+     *
+     * @param code 字典编号
+     * @return
+     */
+    List<DictBiz> getList(@Param("code") String code, @Param("notRoot") String notRoot);
+}

+ 24 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DictInfoMapper.xml

@@ -0,0 +1,24 @@
+<?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.DictInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="dictInfoResultMap" type="org.springblade.control.entity.DictInfo">
+        <result column="id" property="id"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="dict_name" property="dictName"/>
+        <result column="dict_value" property="dictValue"/>
+        <result column="sort" property="sort"/>
+        <result column="type" property="type"/>
+        <result column="code" property="code"/>
+    </resultMap>
+
+
+    <select id="selectDictInfoPage" resultMap="dictInfoResultMap">
+        select *
+        from c_dict_info
+        where is_deleted = 0
+    </select>
+
+</mapper>

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

@@ -0,0 +1,7 @@
+package org.springblade.control.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.control.entity.LogHistoryInfo;
+
+public interface LogHistoryMapper extends BaseMapper<LogHistoryInfo> {
+}

+ 14 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/LogHistoryMapper.xml

@@ -0,0 +1,14 @@
+<?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.LogHistoryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="resultMap" type="org.springblade.control.entity.LogHistoryInfo">
+        <result column="user_id" property="userId"/>
+        <result column="risk_warning" property="riskWarning"/>
+        <result column="work_desc" property="workDesc"/>
+        <result column="expense_reimbursement_amount" property="expenseReimbursementAmount"/>
+    </resultMap>
+
+
+</mapper>

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

@@ -1,7 +0,0 @@
-package org.springblade.control.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.control.entity.PlanInfo;
-
-public interface PlanInfoMapper extends BaseMapper<PlanInfo> {
-}

+ 0 - 19
blade-service/blade-control/src/main/java/org/springblade/control/mapper/PlanInfoMapper.xml

@@ -1,19 +0,0 @@
-<?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.PlanInfoMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="resultMap" type="org.springblade.control.entity.PlanInfo">
-        <result column="id" property="id"/>
-        <result column="plan_name" property="planName"/>
-        <result column="plan_number" property="planNumber"/>
-        <result column="plan_dept" property="planDept"/>
-        <result column="plan_type" property="planType"/>
-        <result column="plan_start_date" property="planStartDate"/>
-        <result column="plan_end_date" property="planEndDate"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-
-</mapper>

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.system.entity.DictBiz;
 
@@ -20,7 +21,8 @@ public interface ProjectInfoMapper extends BaseMapper<ControlProjectInfo> {
 
     ControlProjectInfoVO getProjectInfoById(@Param("id") Long id);
 
-    List<DictBiz> getProjectTypeDict();
+    List<DictInfo> getProjectTypeDict();
+
+    List<DictInfo> getProjectServerTypeDict();
 
-    List<DictBiz> getContractTypeDict();
 }

+ 30 - 14
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml

@@ -4,36 +4,52 @@
 
 
     <select id="selectByPage" resultType="org.springblade.control.vo.ControlProjectInfoVO">
-        select pi.*,d1.dict_value as projectTypeValue,d2.dict_value as contractTypeValue
+        select
+        pi.*,
+        (select dict_name  from c_dict_info WHERE code = 'project_type' AND dict_value = pi.project_type) as projectTypeValue,
+        (select dict_name  from c_dict_info WHERE code = 'project_server_type' AND dict_value = pi.project_server_type) as projectServerTypeValue,
+        (select contract_money from c_control_contract_info WHERE project_id = pi.id)as contractMoney,
+        (select name from blade_user WHERE id = pi.project_principal) as projectPrincipalName,
+        (select name from blade_user WHERE id = pi.implement_principal) as implementPrincipalName
         from c_control_project_info pi
-        LEFT JOIN ( SELECT * FROM blade_dict_biz WHERE CODE = 'project_type' ) d1 ON pi.project_type = d1.dict_key
-        LEFT JOIN ( SELECT * FROM blade_dict_biz WHERE CODE = 'contract_type' ) d2 ON pi.contract_type = d2.dict_key
         where pi.is_deleted = 0
         <if test="dto.projectType != null and dto.projectType != ''">
             and pi.project_type = #{dto.projectType}
         </if>
-        <if test="dto.contractType != null and dto.contractType != ''">
-            and pi.contract_type = #{dto.contractType}
+        <if test="dto.projectServerType != null and dto.projectServerType != ''">
+            and pi.project_server_type = #{dto.projectServerType}
         </if>
-        <if test="dto.process != null and dto.process != ''">
-            and pi.process = #{dto.process}
+        <if test="dto.implementPrincipal != null and dto.implementPrincipal != ''">
+            and pi.implement_principal = #{dto.implementPrincipal}
+        </if>
+        <if test="dto.queryDate != null and dto.queryDate != ''">
+            and #{dto.queryDate} BETWEEN pi.start_time AND pi.end_time
         </if>
         <if test="dto.queryValue != null and dto.queryValue != ''">
             and pi.name like concat('%', #{dto.queryValue}, '%')
         </if>
-
-
     </select>
+
     <select id="getProjectInfoById" resultType="org.springblade.control.vo.ControlProjectInfoVO">
-        select pi.*
+        select
+            pi.*,
+            (select dict_name  from c_dict_info WHERE code = 'project_type' AND dict_value = pi.project_type) as projectTypeValue,
+            (select dict_name  from c_dict_info WHERE code = 'project_server_type' AND dict_value = pi.project_server_type) as projectServerTypeValue,
+            (select contract_money from c_control_contract_info WHERE project_id = pi.id)as contractMoney,
+            (select name from blade_user WHERE id = pi.project_principal) as projectPrincipalName,
+            (select name from blade_user WHERE id = pi.implement_principal) as implementPrincipalName,
+            (select name from blade_user WHERE id = pi.maintain_principal) as maintainPrincipalName
         from c_control_project_info pi
         where pi.is_deleted = 0 and pi.id = #{id}
     </select>
-    <select id="getProjectTypeDict" resultType="org.springblade.system.entity.DictBiz">
-        SELECT * FROM blade_dict_biz WHERE CODE = 'project_type' and parent_id > 0
+
+    <select id="getProjectTypeDict" resultType="org.springblade.control.entity.DictInfo">
+        SELECT dict_name,dict_value FROM c_dict_info WHERE CODE = 'project_type' order by sort
     </select>
-    <select id="getContractTypeDict" resultType="org.springblade.system.entity.DictBiz">
-        SELECT * FROM blade_dict_biz WHERE CODE = 'contract_type' and parent_id > 0
+
+    <select id="getProjectServerTypeDict" resultType="org.springblade.control.entity.DictInfo">
+        SELECT dict_name,dict_value FROM c_dict_info WHERE CODE = 'project_server_type' order by sort
     </select>
 
+
 </mapper>

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

@@ -4,14 +4,14 @@
 
 
     <select id="getBaseProcess" resultType="org.springblade.control.vo.ProjectProcessVO">
-        SELECT bdb.dict_value as name, bdb.sort as sort
-        FROM blade_dict_biz bdb
-        WHERE bdb.code = 'project_process'
-          AND bdb.parent_id > 0
-        ORDER BY bdb.sort
+        SELECT dict_name as name, sort
+        FROM c_dict_info
+        WHERE code = 'project_process'
+        ORDER BY sort
     </select>
     <select id="getProjectProcess" resultType="org.springblade.control.vo.ProjectProcessVO">
-        SELECT * FROM c_control_project_process ccpp
-        WHERE ccpp.project_id = #{id}
+        SELECT * FROM c_project_process
+        WHERE project_id = #{id}
+        order by sort
     </select>
 </mapper>

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

@@ -1,7 +0,0 @@
-package org.springblade.control.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.control.entity.TaskInfo;
-
-public interface TaskInfoMapper extends BaseMapper<TaskInfo> {
-}

+ 0 - 13
blade-service/blade-control/src/main/java/org/springblade/control/mapper/TaskInfoMapper.xml

@@ -1,13 +0,0 @@
-<?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.TaskInfoMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="resultMap" type="org.springblade.control.entity.TaskInfo">
-        <result column="id" property="id"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-    </resultMap>
-
-
-</mapper>

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

@@ -0,0 +1,35 @@
+package org.springblade.control.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ControlContractInfo;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.ControlContractInfoVO;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.entity.DictBiz;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:41
+ **/
+public interface IContractInfoService extends BaseService<ControlContractInfo> {
+
+
+    void addContractInfo(ControlContractInfo contractInfo);
+
+    List<DictInfo> getContractTypeDict();
+
+    List<ControlProjectInfo> getNoConnectionProject();
+
+    void deleteContractInfoById(Long id);
+
+    void updateContractInfo(ControlContractInfo contractInfo);
+
+    ControlContractInfoVO getContractInfoById(Long id);
+}

+ 74 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IDictInfoService.java

@@ -0,0 +1,74 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.service;
+
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import org.springblade.core.mp.base.BaseService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.vo.DictBizVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 参数信息表 服务类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+public interface IDictInfoService extends BaseService<DictInfo> {
+
+    /**
+     * 自定义分页
+     *
+     * @param page
+     * @param dictInfo
+     * @return
+     */
+    IPage<DictInfoVO> selectDictInfoPage(IPage<DictInfoVO> page, DictInfoVO dictInfo);
+
+
+    /**
+     * 获取字典表
+     *
+     * @param code 字典编号
+     * @return
+     */
+    List<DictBiz> getList(String code, String notRoot);
+
+
+    /**
+     * 顶级列表
+     *
+     * @param dict
+     * @param query
+     * @return
+     */
+    IPage<DictInfoVO> parentList(Map<String, Object> dict, Query query);
+
+    /**
+     * 子列表
+     *
+     * @param dict
+     * @param parentId
+     * @return
+     */
+    List<DictInfoVO> childList(Map<String, Object> dict, Long parentId);
+}

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

@@ -3,6 +3,7 @@ package org.springblade.control.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.DictInfo;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
@@ -26,7 +27,8 @@ public interface IProjectInfoService extends BaseService<ControlProjectInfo> {
 
     ControlProjectInfoVO getProjectInfoById(Long id);
 
-    List<DictBiz> getProjectTypeDict();
+    List<DictInfo> getProjectTypeDict();
+
+    List<DictInfo> getProjectServerTypeDict();
 
-    List<DictBiz> getContractTypeDict();
 }

+ 23 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/LogHistoryService.java

@@ -0,0 +1,23 @@
+package org.springblade.control.service;
+
+import org.springblade.control.dto.LogHistoryInfoDTO;
+import org.springblade.control.entity.LogHistoryInfo;
+import org.springblade.control.vo.LogHistoryInfoVO;
+import org.springblade.core.mp.base.BaseService;
+
+import java.util.List;
+import java.util.Map;
+
+public interface LogHistoryService extends BaseService<LogHistoryInfo> {
+
+    Map<String, List<LogHistoryInfoVO>> logList(LogHistoryInfoDTO dto);
+
+    boolean logSubmit(LogHistoryInfoDTO dto);
+
+    LogHistoryInfoVO logDetail(Long id);
+
+    boolean logTaskComplete(Long logId, Long taskId);
+
+    Object logTaskList(Long logId);
+
+}

+ 0 - 19
blade-service/blade-control/src/main/java/org/springblade/control/service/PlanInfoService.java

@@ -1,19 +0,0 @@
-package org.springblade.control.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.control.dto.PlanInfoDTO;
-import org.springblade.control.entity.PlanInfo;
-import org.springblade.control.vo.PlanInfoVO;
-import org.springblade.core.mp.base.BaseService;
-
-public interface PlanInfoService extends BaseService<PlanInfo> {
-
-    IPage<PlanInfoVO> planPage(IPage<PlanInfo> page, PlanInfoDTO dto);
-
-    boolean planSubmit(PlanInfoDTO dto);
-
-    boolean planRemove(String id);
-
-    PlanInfo planDetail(String id);
-
-}

+ 0 - 26
blade-service/blade-control/src/main/java/org/springblade/control/service/TaskInfoService.java

@@ -1,26 +0,0 @@
-package org.springblade.control.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.control.dto.TaskInfoDTO;
-import org.springblade.control.entity.TaskInfo;
-import org.springblade.control.vo.TaskPageVO;
-import org.springblade.core.mp.base.BaseService;
-import org.springblade.core.secure.BladeUser;
-
-import java.util.List;
-
-public interface TaskInfoService extends BaseService<TaskInfo> {
-
-    boolean taskSubmit(TaskInfo obj);
-
-    List<TaskInfo> taskList(String id);
-
-    boolean taskRemove(String id);
-
-    boolean taskRepeal(String id);
-
-    IPage<TaskPageVO> taskPage(IPage<TaskInfo> page, TaskInfoDTO dto);
-
-    boolean taskRelationSubmit(String taskIds, BladeUser user);
-
-}

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

@@ -0,0 +1,93 @@
+package org.springblade.control.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.ControlContractInfo;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.mapper.ContractInfoMapper;
+import org.springblade.control.mapper.ProjectInfoMapper;
+import org.springblade.control.service.IContractInfoService;
+import org.springblade.control.service.IProjectInfoService;
+import org.springblade.control.service.IProjectProcessService;
+import org.springblade.control.vo.ControlContractInfoVO;
+import org.springblade.control.vo.ControlProjectInfoVO;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.entity.DictBiz;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/5/12 9:43
+ **/
+@Service
+@AllArgsConstructor
+public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper, ControlContractInfo> implements IContractInfoService {
+
+    /**
+     * 添加合同信息
+     * @param contractInfo
+     */
+    @Override
+    public void addContractInfo(ControlContractInfo contractInfo) {
+        baseMapper.insert(contractInfo);
+    }
+
+    /**
+     * 获取合同类型字典
+     * @return
+     */
+    @Override
+    public List<DictInfo> getContractTypeDict() {
+        return baseMapper.getContractTypeDict();
+    }
+
+    /**
+     * 获取没有被关联的项目
+     * @return
+     */
+    @Override
+    public List<ControlProjectInfo> getNoConnectionProject() {
+        return baseMapper.getNoConnectionProject();
+    }
+
+    /**
+     * 删除合同
+     * @param id
+     */
+    @Override
+    @Transactional
+    public void deleteContractInfoById(Long id) {
+        //合同回款记录和合同开票记录一起删除
+        baseMapper.deleteById(id);
+    }
+
+    /**
+     * 修改合同
+     * @param contractInfo
+     */
+    @Override
+    public void updateContractInfo(ControlContractInfo contractInfo) {
+        baseMapper.updateById(contractInfo);
+    }
+
+    /**
+     * 根据id查询合同
+     * @param id
+     * @return
+     */
+    @Override
+    public ControlContractInfoVO getContractInfoById(Long id) {
+        return baseMapper.getContractInfoById(id);
+    }
+}

+ 73 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DictInfoServiceImpl.java

@@ -0,0 +1,73 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.service.impl;
+
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import org.springblade.control.mapper.DictInfoMapper;
+import org.springblade.control.service.IDictInfoService;
+import org.springblade.control.wrapper.DictInfoWrapper;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.system.cache.DictBizCache;
+import org.springblade.system.entity.DictBiz;
+import org.springblade.system.vo.DictBizVO;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 参数信息表 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@Service
+public class DictInfoServiceImpl extends BaseServiceImpl<DictInfoMapper, DictInfo> implements IDictInfoService {
+
+    @Override
+    public IPage<DictInfoVO> selectDictInfoPage(IPage<DictInfoVO> page, DictInfoVO dictInfo) {
+        return page.setRecords(baseMapper.selectDictInfoPage(page, dictInfo));
+    }
+
+    @Override
+    public List<DictBiz> getList(String code, String notRoot) {
+        return baseMapper.getList(code, notRoot);
+    }
+
+    @Override
+    public IPage<DictInfoVO> parentList(Map<String, Object> dict, Query query) {
+        IPage<DictInfo> page = this.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictInfo.class).lambda().eq(DictInfo::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(DictInfo::getSort));
+        return DictInfoWrapper.build().pageVO(page);
+    }
+
+    @Override
+    public List<DictInfoVO> childList(Map<String, Object> dict, Long parentId) {
+        if (parentId < 0) {
+            return new ArrayList<>();
+        }
+        dict.remove("parentId");
+        DictBiz parentDict = DictBizCache.getById(parentId);
+        List<DictInfo> list = this.list(Condition.getQueryWrapper(dict, DictInfo.class).lambda().ne(DictInfo::getId, parentId).eq(DictInfo::getCode, parentDict.getCode()).orderByAsc(DictInfo::getSort));
+        return DictInfoWrapper.build().listNodeVO(list);
+    }
+}

+ 183 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -0,0 +1,183 @@
+package org.springblade.control.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateUtils;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.control.dto.LogHistoryInfoDTO;
+import org.springblade.control.entity.LogHistoryInfo;
+import org.springblade.control.mapper.LogHistoryMapper;
+import org.springblade.control.service.LogHistoryService;
+import org.springblade.control.vo.LogHistoryInfoReadVO;
+import org.springblade.control.vo.LogHistoryInfoVO;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.DateUtil;
+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.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@AllArgsConstructor
+public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, LogHistoryInfo> implements LogHistoryService {
+
+    private final IUserClient iUserClient;
+    private final JdbcTemplate jdbcTemplate;
+
+    @Override
+    public Map<String, List<LogHistoryInfoVO>> logList(LogHistoryInfoDTO dto) {
+        LambdaQueryWrapper<LogHistoryInfo> queryWrapper = new LambdaQueryWrapper<>();
+        if (ObjectUtil.isNotEmpty(dto.getOrgDept())) {
+            queryWrapper.eq(LogHistoryInfo::getOrgDept, dto.getOrgDept());
+        }
+        if (ObjectUtil.isNotEmpty(dto.getUserId())) {
+            queryWrapper.eq(LogHistoryInfo::getUserId, dto.getUserId());
+        }
+        if (StringUtils.isNotEmpty(dto.getStartTime()) && StringUtils.isNotEmpty(dto.getEndTime())) {
+            String endTime = dto.getEndTime();
+            endTime = DateUtil.format(DateUtils.addDays(DateUtil.parse(endTime, "yyyy-MM-dd"), 1), "yyyy-MM-dd");
+            queryWrapper.between(LogHistoryInfo::getCreateTime, dto.getStartTime(), endTime);
+        } else {
+            //默认查询7天内日志
+            LocalDate today = LocalDate.now();
+            LocalDate tomorrow = today.plusDays(1);
+            LocalDate sevenDaysAgo = today.minusDays(6);
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            String todayStr = tomorrow.format(formatter);
+            String sevenDaysAgoStr = sevenDaysAgo.format(formatter);
+            queryWrapper.between(LogHistoryInfo::getCreateTime, sevenDaysAgoStr, todayStr);
+        }
+        queryWrapper.orderByDesc(true, LogHistoryInfo::getCreateTime);
+        List<LogHistoryInfo> logHistoryInfos = baseMapper.selectList(queryWrapper);
+        List<LogHistoryInfoVO> voList = BeanUtil.copyProperties(logHistoryInfos, LogHistoryInfoVO.class);
+        List<Long> logIds = voList.stream().map(LogHistoryInfo::getId).collect(Collectors.toList());
+        if (logIds.size() > 0) {
+            //用户信息
+            List<User> userList = iUserClient.selectUserAll();
+            Map<Long, User> userMap = new HashMap<>();
+            for (User user : userList) {
+                userMap.put(user.getId(), user);
+            }
+            //7天内已读日志记录信息
+            List<LogHistoryInfoReadVO> infoReadVOS = jdbcTemplate.query("select * from c_log_history_read_record where log_id in(" + StringUtils.join(logIds, ",") + ")", new BeanPropertyRowMapper<>(LogHistoryInfoReadVO.class));
+            Map<String, LogHistoryInfoReadVO> readMap = new HashMap<>();
+            for (LogHistoryInfoReadVO readVO : infoReadVOS) {
+                readMap.put(readVO.getUserId() + readVO.getLogId() + "", readVO);
+            }
+
+            for (LogHistoryInfoVO vo : voList) {
+                User user = userMap.get(vo.getUserId());
+                if (user != null) {
+                    vo.setLogTitle(user.getRealName() + "的日志");
+                    vo.setHeadPicture(StringUtils.isNotEmpty(user.getAvatar()) ? user.getAvatar() : "");
+                }
+                String readIndex = SecureUtil.getUserId() + vo.getId() + "";
+                LogHistoryInfoReadVO readVO = readMap.get(readIndex);
+                if (readVO != null) {
+                    vo.setIsRead(1);
+                } else {
+                    vo.setIsRead(0);
+                }
+            }
+        }
+        return voList.stream()
+                .collect(Collectors.groupingBy(vo -> {
+                    LocalDateTime localDateTime = LocalDateTime.ofInstant(vo.getCreateTime().toInstant(), ZoneId.systemDefault());
+                    return localDateTime.toLocalDate().toString();
+                }, LinkedHashMap::new, Collectors.toList()));
+    }
+
+    @Override
+    public boolean logSubmit(LogHistoryInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        dto.setUserId(SecureUtil.getUserId());
+        this.saveOrUpdate(dto);
+
+        if (ObjectUtil.isNotEmpty(dto.getTaskIds())){
+            //新增日志与任务关系信息 TODO
+        }
+
+        if (ObjectUtil.isNotEmpty(dto.getExpenseReimbursementAmount())) {
+            //报销金额不为空,在财务报销里面新增一条草稿箱内容 TODO
+        }
+
+        return true;
+    }
+
+    @Override
+    public LogHistoryInfoVO logDetail(Long id) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        LogHistoryInfo obj = baseMapper.selectById(id);
+        if (obj != null) {
+            LogHistoryInfoVO vo = BeanUtil.copyProperties(obj, LogHistoryInfoVO.class);
+            if (vo != null) {
+                User user = iUserClient.userInfoById(vo.getUserId()).getData();
+                if (user != null) {
+                    vo.setLogTitle(user.getRealName() + "的日志");
+                    vo.setHeadPicture(StringUtils.isNotEmpty(user.getAvatar()) ? user.getAvatar() : "");
+                }
+
+                //处理当前用户查看当前日志信息为已读状态
+                Long row = jdbcTemplate.queryForObject("select count(1) from c_log_history_read_record where log_id = " + vo.getId() + " and user_id = " + SecureUtil.getUserId(), Long.class);
+                if (row == null || row == 0L) {
+                    jdbcTemplate.execute("insert into c_log_history_read_record(id,log_id,user_id) values (" + SnowFlakeUtil.getId() + "," + vo.getId() + "," + SecureUtil.getUserId() + ")");
+                    vo.setIsRead(1);
+                }
+
+                //处理当前日志taskList任务列表 TODO
+
+                //处理所有已读人信息
+                List<LogHistoryInfoReadVO> readUsersInfo = jdbcTemplate.query("select * from c_log_history_read_record where log_id = " + vo.getId(), new BeanPropertyRowMapper<>(LogHistoryInfoReadVO.class));
+                List<Long> userIds = readUsersInfo.stream().map(LogHistoryInfoReadVO::getUserId).distinct().collect(Collectors.toList());
+                if (userIds.size() > 0) {
+                    List<User> readUserInfoList = iUserClient.userInfoByIds(userIds);
+                    List<LogHistoryInfoVO.ReadUser> readUsers = new ArrayList<>();
+                    for (User userRead : readUserInfoList) {
+                        readUsers.add(new LogHistoryInfoVO.ReadUser(userRead.getAvatar(), userRead.getRealName()));
+                    }
+                    vo.setReadUsers(readUsers);
+                }
+
+                return vo;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public boolean logTaskComplete(Long logId, Long taskId) {
+        if (ObjectUtil.isEmpty(logId)) {
+            throw new ServiceException("请先提交日志后,再变更任务");
+        }
+        //修改计划任务的状态为已完成,推送到对应的当前部门负责人审批(此处修改的任务状态为计划任务,新增推送的任务为审批任务) TODO
+
+        return true;
+    }
+
+    @Override
+    public Object logTaskList(Long logId) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        //获取当前用户当天的所有任务信息 TODO
+
+        return null;
+    }
+}

+ 0 - 131
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/PlanInfoServiceImpl.java

@@ -1,131 +0,0 @@
-package org.springblade.control.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.AllArgsConstructor;
-import org.apache.commons.lang.StringUtils;
-import org.springblade.common.utils.SnowFlakeUtil;
-import org.springblade.control.dto.PlanInfoDTO;
-import org.springblade.control.entity.PlanInfo;
-import org.springblade.control.entity.TaskInfo;
-import org.springblade.control.mapper.PlanInfoMapper;
-import org.springblade.control.service.PlanInfoService;
-import org.springblade.control.vo.PlanInfoVO;
-import org.springblade.control.vo.PlanTaskRecordVO;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.secure.utils.SecureUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.ObjectUtil;
-import org.springblade.system.entity.DictBiz;
-import org.springframework.beans.BeanUtils;
-import org.springframework.jdbc.core.BeanPropertyRowMapper;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@AllArgsConstructor
-@Service
-public class PlanInfoServiceImpl extends BaseServiceImpl<PlanInfoMapper, PlanInfo> implements PlanInfoService {
-
-    private final JdbcTemplate jdbcTemplate;
-
-    @Override
-    public IPage<PlanInfoVO> planPage(IPage<PlanInfo> page, PlanInfoDTO dto) {
-        QueryWrapper<PlanInfo> queryWrapper = Condition.getQueryWrapper(dto);
-        if (ObjectUtil.isNotEmpty(dto.getPlanType())) {
-            queryWrapper.lambda().eq(PlanInfo::getPlanType, dto.getPlanType());
-        }
-        if (ObjectUtil.isNotEmpty(dto.getPlanDept())) {
-            queryWrapper.lambda().eq(PlanInfo::getPlanDept, dto.getPlanDept());
-        }
-        if (ObjectUtil.isNotEmpty(dto.getPlanName())) {
-            queryWrapper.lambda().eq(PlanInfo::getPlanName, dto.getPlanName());
-        }
-        if (ObjectUtil.isNotEmpty(dto.getPlanStartDate()) && ObjectUtil.isNotEmpty(dto.getPlanEndDate())) {
-            queryWrapper.lambda().ge(PlanInfo::getPlanStartDate, dto.getPlanStartDate()).le(PlanInfo::getPlanEndDate, dto.getPlanEndDate());
-        }
-        IPage<PlanInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, PlanInfo::getCreateTime));
-        List<DictBiz> query = jdbcTemplate.query("select dict_key,dict_value from blade_dict_biz where code= 'plan_type' and parent_id != 0", new BeanPropertyRowMapper<>(DictBiz.class));
-        List<PlanInfo> records = pages.getRecords();
-
-        List<Long> planIds = records.stream().map(PlanInfo::getId).collect(Collectors.toList());
-        Map<Long, List<PlanTaskRecordVO>> mapsRecord = jdbcTemplate.queryForList("select plan_id,task_id from c_control_plan_task_record where plan_id in(" + StringUtils.join(planIds, ",") + ")", PlanTaskRecordVO.class).stream().collect(Collectors.groupingBy(PlanTaskRecordVO::getPlanId));
-
-        return pages.convert(planInfo -> {
-            PlanInfoVO vo = new PlanInfoVO();
-            BeanUtils.copyProperties(planInfo, vo);
-
-            vo.setId(planInfo.getId() + "");
-            vo.setPlanName(StringUtils.isNotEmpty(planInfo.getPlanName()) ? planInfo.getPlanName() : "");
-            vo.setPlanNumber(StringUtils.isNotEmpty(planInfo.getPlanNumber()) ? planInfo.getPlanNumber() : "");
-
-            for (DictBiz dictBiz : query) {
-                if (dictBiz.getDictKey().equals(planInfo.getPlanType() + "")) {
-                    vo.setPlanTypeName(dictBiz.getDictValue());
-                    break;
-                }
-            }
-
-            vo.setPlanStartAndEndDate(planInfo.getPlanStartDate() + "~" + planInfo.getPlanEndDate());
-
-            List<PlanTaskRecordVO> planTaskRecordVOS = mapsRecord.get(planInfo.getId());
-            if (planTaskRecordVOS != null && planTaskRecordVOS.size() > 0) {
-                //任务总数
-                vo.setTaskCount(planTaskRecordVOS.size() + "");
-                List<Long> taskIds = planTaskRecordVOS.stream().map(PlanTaskRecordVO::getTaskId).collect(Collectors.toList());
-                //已完成任务数
-                Long taskCompletedCount = jdbcTemplate.queryForObject("select count(1) from c_control_task_info where status = 2 and id in(" + StringUtils.join(taskIds, ",") + ")", Long.class);
-                vo.setTaskComplete(taskCompletedCount + "");
-                //未完成任务数
-                Long taskIncompleteCount = jdbcTemplate.queryForObject("select count(1) from c_control_task_info where status != 2 and id in(" + StringUtils.join(taskIds, ",") + ")", Long.class);
-                vo.setTaskIncomplete(taskIncompleteCount + "");
-            }
-            vo.setPlanFormulateUserName(StringUtils.isNotEmpty(SecureUtil.getUserName()) ? SecureUtil.getUserName() : "");
-            return vo;
-        });
-    }
-
-    @Override
-    public boolean planSubmit(PlanInfoDTO dto) {
-        this.saveOrUpdate(dto);
-        if (ObjectUtil.isNotEmpty(dto.getId()) && StringUtils.isNotEmpty(dto.getTaskIds()) && StringUtils.isNotEmpty(dto.getTaskDataStatus())) {
-            //绑定计划与任务关系
-            List<String> taskIds = Func.toStrList(dto.getTaskIds());
-            for (String taskId : taskIds) {
-                jdbcTemplate.execute("insert into c_control_plan_task_record(id,plan_id,task_id) values(" + SnowFlakeUtil.getId() + "," + dto.getId() + "," + taskId + ")");
-            }
-            //修改任务数据状态为提交或暂存(任务数据状态 1=提交数据 2=暂存数据)
-            jdbcTemplate.execute("update from c_control_task_info set is_submit_or_suspend = " + dto.getTaskDataStatus() + " where id in(" + StringUtils.join(taskIds, ",") + ")");
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public boolean planRemove(String id) {
-        //删除计划
-        jdbcTemplate.execute("delete from c_control_plan_info where id = " + id);
-
-        //删除计划内任务
-        List<PlanTaskRecordVO> planTaskRecordVOS = jdbcTemplate.queryForList("select task_id from c_control_plan_task_record where plan_id = " + id, PlanTaskRecordVO.class);
-        List<Long> taskIds = planTaskRecordVOS.stream().map(PlanTaskRecordVO::getTaskId).collect(Collectors.toList());
-        jdbcTemplate.execute("delete from c_control_task_info where id in(" + StringUtils.join(taskIds, ",") + ")");
-
-        //删除关联关系
-        jdbcTemplate.execute("delete from c_control_plan_task_record where plan_id = " + id);
-        return true;
-    }
-
-    @Override
-    public PlanInfo planDetail(String id) {
-        return baseMapper.selectById(id);
-    }
-
-
-}

+ 25 - 6
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -1,11 +1,13 @@
 package org.springblade.control.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.DictInfo;
 import org.springblade.control.mapper.ProjectInfoMapper;
 import org.springblade.control.service.IProjectInfoService;
 import org.springblade.control.service.IProjectProcessService;
@@ -54,9 +56,15 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
     public void addProjectInfo(ControlProjectInfoDTO dto) {
         Long id = SnowFlakeUtil.getId();
         dto.setId(id);
-        ControlProjectInfo info = new ControlProjectInfo();
-        BeanUtils.copyProperties(dto, info);
-        infoMapper.insert(info);
+        Long count = infoMapper.selectCount(new LambdaQueryWrapper<>());
+        if (count == 0){
+            dto.setNumber("GS-01");
+        }else if (count < 9){
+            dto.setNumber("GS-0"+(count+1));
+        }else {
+            dto.setNumber("GS-"+(count+1));
+        }
+        infoMapper.insert(dto);
         processService.addProjectProcess(dto);
     }
 
@@ -100,13 +108,24 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         return vo;
     }
 
+    /**
+     * 获取项目类型字典
+     * @return
+     */
     @Override
-    public List<DictBiz> getProjectTypeDict() {
+    public List<DictInfo> getProjectTypeDict() {
         return infoMapper.getProjectTypeDict();
     }
 
+    /**
+     * 获取项目服务类型字典
+     * @return
+     */
     @Override
-    public List<DictBiz> getContractTypeDict() {
-        return infoMapper.getContractTypeDict();
+    public List<DictInfo> getProjectServerTypeDict() {
+        return infoMapper.getProjectServerTypeDict();
     }
+
+
+
 }

+ 16 - 12
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectProcessServiceImpl.java

@@ -33,11 +33,13 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMap
     @Override
     public void addProjectProcess(ControlProjectInfoDTO dto) {
         List<ProjectProcess> list = dto.getProjectProcessList();
-        for (ProjectProcess process : list) {
-            process.setProjectId(dto.getId());
-            process.setId(SnowFlakeUtil.getId());
+        if (list != null && list.size() > 0) {
+            for (ProjectProcess process : list) {
+                process.setProjectId(dto.getId());
+                process.setId(SnowFlakeUtil.getId());
+            }
+            this.saveBatch(list);
         }
-        this.saveBatch(list);
     }
 
     /**
@@ -70,7 +72,7 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMap
     @Override
     public List<ProjectProcessVO> getBaseProcess() {
         List<ProjectProcessVO> list = processMapper.getBaseProcess();
-        list.stream().forEach(l -> l.setStatusValue("未开始"));
+//        list.stream().forEach(l -> l.setStatusValue("未开始"));
         return list;
     }
 
@@ -83,15 +85,17 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMap
     public List<ProjectProcessVO> getProjectProcess(Long id) {
         List<ProjectProcessVO> list = processMapper.getProjectProcess(id);
         list.stream().forEach(l -> {
-            //是否开始时间,在当前时间之前
-            if (l.getProcessStartTime().isBefore(LocalDate.now())) {
-                if (l.getProcessEndTime().isBefore(LocalDate.now())) {
-                    l.setStatusValue("已闭环");
+            if (l.getProcessStartTime() != null && l.getProcessEndTime() != null) {
+                //是否开始时间,在当前时间之前
+                if (l.getProcessStartTime().isBefore(LocalDate.now())) {
+                    if (l.getProcessEndTime().isBefore(LocalDate.now())) {
+                        l.setStatusValue("已闭环");
+                    } else {
+                        l.setStatusValue("进行中");
+                    }
                 } else {
-                    l.setStatusValue("进行中");
+                    l.setStatusValue("未开始");
                 }
-            } else {
-                l.setStatusValue("未开始");
             }
         });
         return list;

+ 0 - 161
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskInfoServiceImpl.java

@@ -1,161 +0,0 @@
-package org.springblade.control.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.AllArgsConstructor;
-import org.apache.commons.lang.StringUtils;
-import org.springblade.control.dto.TaskInfoDTO;
-import org.springblade.control.entity.PlanInfo;
-import org.springblade.control.entity.TaskInfo;
-import org.springblade.control.mapper.TaskInfoMapper;
-import org.springblade.control.service.TaskInfoService;
-import org.springblade.control.vo.TaskPageVO;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.secure.BladeUser;
-import org.springblade.core.secure.utils.SecureUtil;
-import org.springblade.core.tool.utils.ObjectUtil;
-import org.springblade.system.user.entity.User;
-import org.springframework.beans.BeanUtils;
-import org.springframework.jdbc.core.BeanPropertyRowMapper;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-@AllArgsConstructor
-@Service
-public class TaskInfoServiceImpl extends BaseServiceImpl<TaskInfoMapper, TaskInfo> implements TaskInfoService {
-
-    private final JdbcTemplate jdbcTemplate;
-    private final PlanInfoServiceImpl planInfoServiceImpl;
-
-    @Override
-    public boolean taskSubmit(TaskInfo obj) {
-        obj.setStatus(0); //默认未完成
-        return this.saveOrUpdate(obj);
-    }
-
-    @Override
-    public List<TaskInfo> taskList(String id) {
-        if (StringUtils.isNotEmpty(id)) {
-            List<Long> taskIds = jdbcTemplate.queryForList("select task_id from c_control_plan_task_record where plan_id = " + id, Long.class);
-            //List<TaskInfo> taskInfos = baseMapper.selectBatchIds(taskIds);
-
-            //TODO 项目名称、进度等,返回VO
-//            for (TaskInfo taskInfo : taskInfos) {
-//
-//            }
-            return null;
-        }
-        return null;
-    }
-
-    @Override
-    public boolean taskRemove(String id) {
-        if (StringUtils.isNotEmpty(id)) {
-            //物理删除
-            jdbcTemplate.execute("delete from c_control_task_info where id = " + id);
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public boolean taskRepeal(String id) {
-        return this.update(Wrappers.<TaskInfo>lambdaUpdate().set(TaskInfo::getStatus, 3).eq(TaskInfo::getId, id));
-    }
-
-    @Override
-    public IPage<TaskPageVO> taskPage(IPage<TaskInfo> page, TaskInfoDTO dto) {
-        if (("1").equals(dto.getType()) || ("3").equals(dto.getType())) {
-            //我的任务、全部任务
-            List<Long> taskIds = null;
-            if (ObjectUtil.isNotEmpty(dto.getPlanDept())) {
-                //获取对应部门计划任务信息
-                List<PlanInfo> planInfos = planInfoServiceImpl.getBaseMapper().selectList(Wrappers.<PlanInfo>lambdaQuery().eq(PlanInfo::getPlanDept, dto.getPlanDept()));
-                List<Long> planIds = planInfos.stream().map(PlanInfo::getId).collect(Collectors.toList());
-                taskIds = jdbcTemplate.queryForList("select task_id from c_control_plan_task_record where plan_id in(" + StringUtils.join(planIds, ",") + ")", Long.class);
-            }
-            QueryWrapper<TaskInfo> queryWrapper = Condition.getQueryWrapper(dto);
-            if (("1").equals(dto.getType())) {
-                if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
-                    throw new ServiceException("未获取到当前用户信息,原因:userId is null");
-                }
-                //查询当前用户的任务,我的任务,否则查询全部任务
-                queryWrapper.lambda().eq(TaskInfo::getTaskUserId, SecureUtil.getUserId());
-            }
-            if (ObjectUtil.isNotEmpty(dto.getStatus())) {
-                //任务状态
-                queryWrapper.lambda().eq(TaskInfo::getStatus, dto.getStatus());
-            }
-            if (ObjectUtil.isNotEmpty(dto.getTaskStartDate()) && ObjectUtil.isNotEmpty(dto.getTaskEndDate())) {
-                //开始时间、结束时间
-                queryWrapper.lambda().ge(TaskInfo::getTaskStartDate, dto.getTaskStartDate()).le(TaskInfo::getTaskEndDate, dto.getTaskEndDate());
-            }
-            if (ObjectUtil.isNotEmpty(taskIds)) {
-                //部门对应的计划中的任务
-                queryWrapper.lambda().in(TaskInfo::getId, taskIds);
-            }
-            IPage<TaskInfo> taskInfoPage = this.page(page, queryWrapper.lambda().orderBy(true, true, TaskInfo::getCreateTime));
-
-            List<Long> taskIdsResult = taskInfoPage.getRecords().stream().map(TaskInfo::getId).collect(Collectors.toList());
-            String sql = "SELECT cctr.task_id, pi.plan_name FROM c_control_plan_task_record cctr LEFT JOIN plan_info pi ON cctr.plan_id = pi.id WHERE cctr.task_id IN (" + StringUtils.join(taskIdsResult, ",") + ")";
-            List<Map<String, Object>> result = jdbcTemplate.queryForList(sql);
-            Map<Long, String> taskPlanMap = new HashMap<>();
-            for (Map<String, Object> row : result) {
-                Long taskId = (Long) row.get("task_id");
-                String planName = (String) row.get("plan_name");
-                if (!taskPlanMap.containsKey(taskId)) {
-                    taskPlanMap.put(taskId, planName);
-                }
-            }
-
-            List<Long> taskUserIds = taskInfoPage.getRecords().stream().map(TaskInfo::getTaskUserId).collect(Collectors.toList());
-            List<Long> taskUserIdsAssist = taskInfoPage.getRecords().stream().map(TaskInfo::getTaskUserIdAssist).collect(Collectors.toList());
-            List<Long> taskUserIdsLeader = taskInfoPage.getRecords().stream().map(TaskInfo::getTaskUserIdLeader).collect(Collectors.toList());
-            taskUserIds.addAll(taskUserIdsAssist);
-            taskUserIds.addAll(taskUserIdsLeader);
-            Set<Long> sets = new HashSet<>(taskUserIds);
-            List<User> query = jdbcTemplate.query("select id,name from blade_user where id in(" + StringUtils.join(sets, ",") + ")", new BeanPropertyRowMapper<>(User.class));
-            Map<Long, String> idNameMap = new HashMap<>();
-            for (User user : query) {
-                idNameMap.put(user.getId(), user.getName());
-            }
-
-            return taskInfoPage.convert(taskInfo -> {
-                TaskPageVO vo = new TaskPageVO();
-                BeanUtils.copyProperties(taskInfo, vo);
-                vo.setId(taskInfo.getId() + "");
-                vo.setStatus(ObjectUtil.isNotEmpty(taskInfo.getStatus()) ? taskInfo.getStatus().toString() : "");
-                vo.setPlanName(StringUtils.isNotEmpty(taskPlanMap.get(taskInfo.getId())) ? taskPlanMap.get(taskInfo.getId()) : "");
-                vo.setTaskDesc(ObjectUtil.isNotEmpty(taskInfo.getTaskDesc()) ? taskInfo.getTaskDesc() : "");
-                vo.setTaskStandard(ObjectUtil.isNotEmpty(taskInfo.getTaskStandard()) ? taskInfo.getTaskStandard() : "");
-                vo.setTaskEndDate(ObjectUtil.isNotEmpty(taskInfo.getTaskEndDate()) ? taskInfo.getTaskEndDate() : null);
-                vo.setTaskUserName(StringUtils.isNotEmpty(idNameMap.get(taskInfo.getTaskUserId())) ? idNameMap.get(taskInfo.getTaskUserId()) : "");
-                vo.setTaskUserAssistName(StringUtils.isNotEmpty(idNameMap.get(taskInfo.getTaskUserIdAssist())) ? idNameMap.get(taskInfo.getTaskUserIdAssist()) : "");
-                vo.setTaskUserLeaderName(StringUtils.isNotEmpty(idNameMap.get(taskInfo.getTaskUserIdLeader())) ? idNameMap.get(taskInfo.getTaskUserIdLeader()) : "");
-                //TODO 项目环节、项目
-
-
-                return vo;
-            });
-
-        } else if (("2").equals(dto.getType())) {
-            //我关联的任务 TODO
-
-        }
-        return null;
-    }
-
-    @Override
-    public boolean taskRelationSubmit(String taskIds, BladeUser user) {
-        //TODO
-        return false;
-    }
-
-
-}

+ 62 - 0
blade-service/blade-control/src/main/java/org/springblade/control/wrapper/DictInfoWrapper.java

@@ -0,0 +1,62 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.wrapper;
+
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.system.cache.DictCache;
+import org.springblade.system.entity.Dict;
+import org.springblade.system.vo.DictVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class DictInfoWrapper extends BaseEntityWrapper<DictInfo, DictInfoVO> {
+
+    public static DictInfoWrapper build() {
+        return new DictInfoWrapper();
+    }
+
+    @Override
+    public DictInfoVO entityVO(DictInfo dictinfo) {
+        DictInfoVO dictInfoVO = Objects.requireNonNull(BeanUtil.copy(dictinfo, DictInfoVO.class));
+        if (Func.equals(dictinfo.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+            dictInfoVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+        } else {
+            Dict parent = DictCache.getById(dictinfo.getParentId());
+            dictInfoVO.setParentName(parent.getDictValue());
+        }
+        return dictInfoVO;
+    }
+
+    public List<DictInfoVO> listNodeVO(List<DictInfo> list) {
+        List<DictInfoVO> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictInfoVO.class)).collect(Collectors.toList());
+        return ForestNodeMerger.merge(collect);
+    }
+
+}

+ 0 - 4
blade-service/blade-control/src/main/java/org/springblade/control/wrapper/test.java

@@ -1,4 +0,0 @@
-package org.springblade.control.wrapper;
-
-public class test {
-}

+ 0 - 1
blade-service/blade-desk/blade-desk.iml

@@ -306,7 +306,6 @@
     <orderEntry type="library" name="Maven: io.prometheus:simpleclient_common:0.9.0" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-core:1.8.3" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
-    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-tenant:2.9.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.3.6" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-api-crypto:2.9.1.RELEASE" level="project" />

+ 5 - 5
blade-service/blade-manager/pom.xml

@@ -167,11 +167,11 @@
             <artifactId>jfreechart</artifactId>
             <version>1.0.13</version>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>org.apache.commons</groupId>-->
-<!--            <artifactId>commons-math3</artifactId>-->
-<!--            <version>3.6.1</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>3.7</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 7 - 4
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -31,6 +31,8 @@ import org.springblade.manager.dto.Coords;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
+import org.springblade.manager.utils.FileUtils;
+
 import java.awt.*;
 import java.awt.Font;
 import java.awt.geom.Ellipse2D;
@@ -478,12 +480,13 @@ public class FormulaUtils {
 
     public static Map<String, String> getElementCell(String uri) {
         try {
-            return  Jsoup.parse(IoUtil.readToString(new FileInputStream(ResourceUtil.getFile(uri))))
+            InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(uri);
+            return Jsoup.parse(IoUtil.readToString(inputStreamByUrl))
                     .select("table").first()
                     .select("tr").stream()
-                    .flatMap(tr->tr.select("td").stream())
-                    .filter(d->!d.children().isEmpty())
-                    .map(d->d.children().get(0)).map(d->d.attr("keyname")).filter(StringUtils::isNotEmpty).map(e->e.split("__"))
+                    .flatMap(tr -> tr.select("td").stream())
+                    .filter(d -> !d.children().isEmpty())
+                    .map(d -> d.children().get(0)).map(d -> d.attr("keyname")).filter(StringUtils::isNotEmpty).map(e -> e.split("__"))
                     .collect(
                             Collectors.toMap(
                                     b -> b[0],

+ 19 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/LinkdataInfoController.java

@@ -21,6 +21,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
@@ -38,12 +39,15 @@ import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.ILinkdataInfoService;
 import org.springblade.manager.service.IWbsFormElementService;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 清表解析字段信息 控制器
@@ -63,6 +67,7 @@ public class LinkdataInfoController extends BladeController {
 
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
 
+    private final JdbcTemplate jdbcTemplate;
     /**
      * 详情
      */
@@ -183,7 +188,7 @@ public class LinkdataInfoController extends BladeController {
         Element table = doc.select("table").first();
         Elements trs = table.select("tr");
         Element element = trs.get(linkdataInfo.getTrIndex()).select("td").get(linkdataInfo.getTdIndex());
-
+        String keyId = "";
         if (linkdataInfo.getColName().equals("/")) {
             element.empty();
         } else {
@@ -202,6 +207,7 @@ public class LinkdataInfoController extends BladeController {
                 element1.removeAttr("weighing");
                 element1.removeAttr("v-model");
                 element1.removeAttr("@focus");
+                keyId = element1.attr("keyName");
                 element1 = element.children().get(0).children().get(0);
             }
 
@@ -211,7 +217,7 @@ public class LinkdataInfoController extends BladeController {
             element1.removeAttr("weighing");
             element1.removeAttr("v-model");
             element1.removeAttr("@focus");
-
+            keyId = element1.attr("keyName");
             if (element.html().indexOf("hc-form-checkbox-group") >= 0) {
                 element1.removeAttr(":val");
                 element1.attr(":val", "formData." + dataInfo2);
@@ -226,6 +232,17 @@ public class LinkdataInfoController extends BladeController {
         File writefile = new File(wbsTreePrivate.getHtmlUrl());
         FileUtil.writeToFile(writefile, doc.html(), Boolean.parseBoolean("UTF-8"));
         inputStream.close();
+
+        // 清空数据
+        if (StringUtils.isNotEmpty(keyId)) {
+            String tabName = wbsTreePrivate.getInitTableName();
+            String isExitSql = " select * from information_schema.TABLES where TABLE_NAME='" + tabName + "'";
+            List<Map<String, Object>> tablist = jdbcTemplate.queryForList(isExitSql);
+            if (tablist != null && tablist.size() > 0 && wbsTreePrivate.getType() != 10) {
+                String clarSql = "update  " + tabName + " set " + keyId.split("__")[0] + "=null where p_key_id in(SELECT p_key_id FROM m_wbs_tree_contract WHERE id ='" + wbsTreePrivate.getId() + "' and project_id='" + wbsTreePrivate.getProjectId() + "' )";
+                jdbcTemplate.execute(clarSql);
+            }
+        }
         return R.success("操作成功");
     }
 

+ 8 - 26
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java

@@ -29,13 +29,13 @@ import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.net.ftp.FTPClient;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.CommonUtil;
-import org.springblade.common.utils.FileUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.common.utils.SystemUtils;
 import org.springblade.core.log.exception.ServiceException;
@@ -49,6 +49,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.impl.WbsTreeContractServiceImpl;
 import org.springblade.manager.service.impl.WbsTreePrivateServiceImpl;
+import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.vo.TextdictBy345VO;
 import org.springblade.manager.vo.TextdictDataInfoVO;
 import org.springblade.manager.vo.TextdictInfo_vo;
@@ -375,7 +376,7 @@ public class TextdictInfoController extends BladeController {
     @PostMapping("/save_sigInfo")
     @ApiOperationSupport(order = 7)
     @ApiOperation(value = "保存电签", notes = "保存电签")
-    public R<String> saveSigInfo(@Valid @RequestBody JSONObject dataInfo) throws IOException {
+    public R<String> saveSigInfo(@Valid @RequestBody JSONObject dataInfo) throws Exception {
         String redisValue = bladeRedis.get("save-eVis-lock:" + SecureUtil.getUserId());
         if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
             throw new ServiceException("请勿重复提交,请3秒后再尝试");
@@ -400,8 +401,10 @@ public class TextdictInfoController extends BladeController {
         }
 
         // 读取html页面信息
-        File file1 = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
-        String htmlString = IoUtil.readToString(new FileInputStream(file1));
+        // File file1 = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
+
+        InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsTreePrivate.getHtmlUrl());
+        String htmlString = IoUtil.readToString(inputStreamByUrl);
 
         // 样式集合
         Document doc = Jsoup.parse(htmlString);
@@ -466,6 +469,7 @@ public class TextdictInfoController extends BladeController {
         }
 
         //写入excel
+        FileUtils.getSysLocalFileUrl();
         File writeFile = new File(wbsTreePrivate.getHtmlUrl());
         FileUtil.writeToFile(writeFile, doc.html(), Boolean.parseBoolean("UTF-8"));
 
@@ -623,26 +627,4 @@ public class TextdictInfoController extends BladeController {
         return R.success("操作成功");
     }
 
-    /*public static void main(String[] args) throws FileNotFoundException {
-		File file1 = ResourceUtil.getFile("/Users/hongchuangyanfa/Desktop/privateUrl/1567789917445029888.html");
-		String htmlString =  IoUtil.readToString(new FileInputStream(file1));
-		// 样式集合
-		Document doc = Jsoup.parse(htmlString);
-		//解析
-		Element table = doc.select("table").first();
-		Elements trs = table.select("tr");
-		Element element = trs.get(3).select("td").get(1);
-		System.out.println(element.html());
-		if(element.html().indexOf("el-tooltip")>=0){
-			element.children().attr("content","111");
-		}
-
-		String lastHmtl = " <el-tooltip content='Bottom center' effect='customized'>"+element.html()+"</el-tooltip>";
-		element.empty().append(lastHmtl);
-		File writefile = new File("/Users/hongchuangyanfa/Desktop/privateUrl/1567789917445029888.html");
-		FileUtil.writeToFile(writefile, doc.html(), Boolean.parseBoolean("UTF-8"));
-
-		System.out.println();
-	}*/
-
 }

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

@@ -441,11 +441,11 @@
     <select id="getFirstNodeByTreeCode" resultType="org.springblade.manager.entity.ArchiveTreeContract">
         select * from m_archive_tree_contract
         WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId})
-          and tree_code is NULL
+          and is_deleted = 0 and tree_code is NULL
     </select>
     <select id="getFirstNodeByTreeCode2" resultType="org.springblade.manager.entity.ArchiveTreeContract">
         select * from m_archive_tree_contract
         WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId})
-          and tree_code = #{type}
+          and is_deleted = 0 and tree_code = #{type}
     </select>
 </mapper>

+ 23 - 28
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -1284,8 +1284,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
     @Override
     public R getBussPdfInfo(Long pkeyId) throws Exception {
-        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        String sys_net_url = ParamCache.getValue(CommonConstant.SYS_FILE_NET_URL);
+        String file_path = FileUtils.getSysLocalFileUrl();
+
         WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, pkeyId));
 
@@ -1298,6 +1298,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
         String pdfPath = file_path + "/pdf//" + pkeyId + ".pdf";
         String excelPath = file_path + "/pdf//" + pkeyId + ".xlsx";
+
         File tabPdf = ResourceUtil.getFile(pdfPath);
         if (tabPdf.exists()) {
             tabPdf.delete();
@@ -1364,23 +1365,23 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
         //数据不为空
         if (StringUtils.isNotEmpty(wbsTreeContract.getHtmlUrl())) {
-            File htmlFile = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
-            if (htmlFile.exists()) {
-                String htmlString = IoUtil.readToString(new FileInputStream(htmlFile));
-                Document doc = Jsoup.parse(htmlString);
-                Element table = doc.select("table").first();
-                Elements trs = table.select("tr");
-                Elements cols = table.select("col");
-
-                if (ObjectUtil.isNotEmpty(DataInfo)) {
-                    for (String val : DataInfo.keySet()) {
-                        if (val.indexOf("__") >= 0) {
-                            String[] DataVal = val.split("__");
-                            String[] xy = DataVal[1].split("_");
-                            if (Integer.parseInt(xy[0]) < trs.size()) {
-                                Element ytzData = trs.get(Integer.parseInt(xy[0]));
-                                if (ytzData != null) {
-                                    Elements tdsx = ytzData.select("td");
+            InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsTreeContract.getHtmlUrl());
+            String htmlString = IoUtil.readToString(inputStreamByUrl);
+
+            Document doc = Jsoup.parse(htmlString);
+            Element table = doc.select("table").first();
+            Elements trs = table.select("tr");
+            Elements cols = table.select("col");
+
+            if (ObjectUtil.isNotEmpty(DataInfo)) {
+                for (String val : DataInfo.keySet()) {
+                    if (val.indexOf("__") >= 0) {
+                        String[] DataVal = val.split("__");
+                        String[] xy = DataVal[1].split("_");
+                        if (Integer.parseInt(xy[0]) < trs.size()) {
+                            Element ytzData = trs.get(Integer.parseInt(xy[0]));
+                            if (ytzData != null) {
+                                Elements tdsx = ytzData.select("td");
                                     if (Integer.parseInt(xy[1]) < tdsx.size()) {
                                         Element data = ytzData.select("td").get(Integer.parseInt(xy[1]));
                                         if (data != null) {
@@ -1422,13 +1423,13 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                                         }
                                                     } else {
                                                         String[] dataStr = myData.split("T")[0].split("-");
-                                                        myData = StringUtil.format("{}年{}月{}日", dataStr[0], dataStr[1], Integer.parseInt(dataStr[2]));
+                                                        if (dataStr.length == 3) {
+                                                            myData = StringUtil.format("{}年{}月{}日", dataStr[0], dataStr[1], Integer.parseInt(dataStr[2]));
+                                                        }
                                                     }
                                                 }
 
                                                 if (myData.indexOf("lang.String") >= 0) {
-                                                    /*String[]  dataDate = (String[]) DataInfo.get(val);
-                                                    myData = dataDate[0]+" - "+dataDate[1].trim();*/
                                                     Object obj = DataInfo.get(val);
                                                     if (obj instanceof String[]) {
                                                         String[] dataDate = (String[]) obj;
@@ -1440,14 +1441,10 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                                 if ((myData.indexOf("https") >= 0 || myData.indexOf("http") >= 0) && myData.indexOf("aliyuncs") >= 0) {
 
                                                     InputStream imageIn = CommonUtil.getOSSInputStream(myData);
-
                                                     byte[] byteNew = IOUtils.toByteArray(imageIn);
-
                                                     byte[] bytes = CommonUtil.compressImage(byteNew);
-
                                                     // 这里根据实际需求选择图片类型
                                                     int pictureIdx = workbook.addPicture(bytes, 6);
-
                                                     CreationHelper helper = workbook.getCreationHelper();
                                                     ClientAnchor anchor = helper.createClientAnchor();
                                                     anchor.setCol1(x1); // param1是列号
@@ -1543,11 +1540,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         }
                     }
                 }
-            }
         }
         //输出流
 
-
         FileOutputStream outputStream = new FileOutputStream(excelPath);
         workbook.write(outputStream);
         FileUtils.setExcelScaleToPdf(excelPath, pdfPath);

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

@@ -773,6 +773,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                         //复选框
                                         td = doc.select("hc-form-checkbox-group[keyname~=" + findIndex + ".*]");
                                     }
+                                    if (td.size() == 0) {
+                                        //单选框
+                                        td = doc.select("el-radio-group[keyname~=" + findIndex + ".*]");
+                                    }
                                     if (td.size() == 0) {
                                         //下拉框
                                         td = doc.select("el-select[keyname~=" + findIndex + ".*]");
@@ -802,6 +806,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                                 //复选框
                                                 tdJL = docJL.select("hc-form-checkbox-group[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
                                             }
+                                            if (tdJL.size() == 0) {
+                                                //单选框
+                                                tdJL = docJL.select("el-radio-group[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
+                                            }
                                             if (tdJL.size() == 0) {
                                                 //下拉框
                                                 tdJL = docJL.select("el-select[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
@@ -857,6 +865,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                             //复选框
                                             td = doc.select("hc-form-checkbox-group[keyname~=" + findIndex + ".*]");
                                         }
+                                        if (td.size() == 0) {
+                                            //单选框
+                                            td = doc.select("el-radio-group[keyname~=" + findIndex + ".*]");
+                                        }
                                         if (td.size() == 0) {
                                             //下拉框
                                             td = doc.select("el-select[keyname~=" + findIndex + ".*]");
@@ -876,7 +888,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                                 Elements tdJL = docJL.select("el-input[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
                                                 if (tdJL.size() == 0) {
                                                     //日期格式
-                                                    tdJL = docJL.select("el-date-picker[keyname~=" + this.escapeRegex(placeholderValue) + ".*]");
+                                                    tdJL = docJL.select("el-date-picker[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
                                                 }
                                                 if (tdJL.size() == 0) {
                                                     //图片格式
@@ -886,6 +898,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                                     //复选框
                                                     tdJL = docJL.select("hc-form-checkbox-group[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
                                                 }
+                                                if (tdJL.size() == 0) {
+                                                    //单选框
+                                                    tdJL = docJL.select("el-radio-group[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");
+                                                }
                                                 if (tdJL.size() == 0) {
                                                     //下拉框
                                                     tdJL = docJL.select("el-select[placeholderxx~=" + this.escapeRegex(placeholderValue) + ".*]");

+ 63 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FTPUtils.java

@@ -0,0 +1,63 @@
+package org.springblade.manager.utils;
+
+import org.apache.commons.net.ftp.FTPClient;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class FTPUtils {
+    String hostname = "192.168.0.109";
+    int port = 21;
+    String username = "fileadmin";
+    String password = "DpE5aYNybfeDEMcD";
+
+    // 获取ftp 客户端
+    public FTPClient getFTPClinet(){
+        FTPClient ftp = new FTPClient();
+        ftp.setControlEncoding("UTF-8");
+        System.out.println("准备连接到ftp");
+        try {
+            //连接
+            ftp.connect(hostname, port);
+            //登录
+            boolean loginS = ftp.login(username, password);
+            if (!loginS) {
+                System.out.println("ftp登录失败,用户名或密码错误");
+                return null;
+            }else{
+                System.out.println("ftp登录成功");
+            }
+            return ftp;
+        } catch (IOException e) {
+            System.out.println("ftp连接失败");
+            return null;
+        }
+    }
+
+    //文件覆盖上传
+/*    public static void main(String[] args) throws Exception {
+
+        InputStream input = FileUtils.getInputStreamByUrl("http://192.168.0.109:6371/1534807810770993152.html");
+
+        FTPUtils ftpUtils = new FTPUtils();
+        try {
+            FTPClient ftp = ftpUtils.getFTPClinet();
+            // 获取本地文件并上传
+
+            ftp.changeWorkingDirectory("/Desktop/");//跳转目录
+            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//必须要设置以二进制的方式传输文件
+            ftp.enterLocalPassiveMode();//被动模式
+
+            if (!ftp.storeFile("1534807810770993152.html", input)) {
+                System.out.println("失败,服务器返回:" + ftp.getReplyString());//获取上传失败的原因
+            } else {
+                System.out.println("文件:1534807810770993152.html 上传成功");
+            }
+            input.close();
+            ftp.logout();
+        } catch (IOException e) {
+            System.out.println("ftp连接失败");
+        }
+    }*/
+
+}

+ 22 - 48
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java

@@ -26,6 +26,7 @@ import org.jsoup.select.Elements;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.common.utils.SystemUtils;
 import org.springblade.common.vo.DataVO;
 import org.springblade.core.tool.api.ResultCode;
 import org.springblade.core.tool.utils.FileUtil;
@@ -368,56 +369,29 @@ public class FileUtils {
     }
 
 
-    public static void main123(String[] args) throws Exception {
-
-
-        //  String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        String sys_file_net_url = "http://192.168.0.109:6371/12345.pdf";
-        File file = new File(sys_file_net_url);
-        file.mkdir();
-
-
+    // 获取本地 或 远程工作流ParamCache
+    public static InputStream getInputStreamByUrl(String fileUrl) throws Exception {
+        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        String sys_file_net_url = ParamCache.getValue(CommonConstant.SYS_FILE_NET_URL);
+        File file1 = new File(fileUrl);
+        InputStream fileInputStream = null;
+        if (file1.exists()) {
+            fileInputStream = new FileInputStream(file1);
+        } else {
+            String path = sys_file_net_url + fileUrl.replaceAll("//", "/").replaceAll(file_path, "");
+            fileInputStream = CommonUtil.getOSSInputStream(path);
+        }
+        return fileInputStream;
     }
 
-
-    public static void main11(String[] args) throws FileNotFoundException {
-       /* double a= 2;
-        double maxData = Math.ceil(a/7);
-        System.out.println(maxData);*/
-
-        /*File file1 = ResourceUtil.getFile("/Users/hongchuangyanfa/fsdownload/1633774811681390592.html");
-        FileInputStream fileInputStream = new FileInputStream(file1);
-        String htmlString = IoUtil.readToString(fileInputStream);
-        // 解析 style
-        org.jsoup.nodes.Document doc = Jsoup.parse(htmlString);
-        Element table = doc.select("table").first();
-        Elements trs = table.select("tr");
-
-
-        List<List<String>> redata = new ArrayList<>();
-        for (int i = 0; i < trs.size(); i++) {
-            Element tr = trs.get(i);
-            Elements tds = tr.select("td");
-            List<String> tdList = new ArrayList<>();
-            for (int j = 0; j < tds.size(); j++) {
-                Element element = tds.get(j);
-                if (element.html().indexOf("el-tooltip") >= 0) {
-                    element = element.children().get(0);
-                }
-                if (element.children().size() >= 1) {
-                    String keyname = element.children().get(0).attr("keyname");
-                    if (StringUtils.isNotEmpty(keyname)) {
-                        tdList.add(keyname);
-                    }
-                }
-            }
-            redata.add(tdList) ;
+    public static String getSysLocalFileUrl() {
+        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        if (SystemUtils.isMacOs()) {
+            file_path = "/Users/hongchuangyanfa/Desktop/";
+        } else if (SystemUtils.isWindows()) {
+            file_path = "C://upload";
         }
-
-        String[][] res = new String[redata.size()][]; // 存放转换结果的 二维数组
-        for(int i=0; i<res.length; i++){ // 转换方法
-            res[i] = redata.get(i).toArray(new String[redata.get(i).size()]);
-        }*/
-
+        return file_path;
     }
+
 }

+ 0 - 1
blade-service/blade-system/blade-system.iml

@@ -306,7 +306,6 @@
     <orderEntry type="library" name="Maven: io.prometheus:simpleclient_common:0.9.0" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-core:1.8.3" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
-    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-tenant:2.9.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.3.6" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-api-crypto:2.9.1.RELEASE" level="project" />

+ 5 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java

@@ -119,4 +119,9 @@ public class UserClient implements IUserClient {
         return service.selectUserAll();
     }
 
+    @Override
+    public List<User> userInfoByIds(List<Long> userIds) {
+        return service.getBaseMapper().selectBatchIds(userIds);
+    }
+
 }

二進制
logs/backup/2023-06-01/cfca-logging-environment.20230601.0.log.zip


二進制
logs/backup/2023-06-01/cfca-logging-error.20230601.0.log.zip


二進制
logs/backup/2023-06-01/cfca-logging-info.20230601.0.log.zip


二進制
logs/backup/2023-06-02/cfca-logging-info.20230602.0.log.zip


+ 127 - 0
src/main/java/org/springblade/control/controller/DictInfoController.java

@@ -0,0 +1,127 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import org.springblade.control.service.IDictInfoService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 参数信息表 控制器
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dictinfo")
+@Api(value = "参数信息表", tags = "参数信息表接口")
+public class DictInfoController extends BladeController {
+
+	private final IDictInfoService dictInfoService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入dictInfo")
+	public R<DictInfo> detail(DictInfo dictInfo) {
+		DictInfo detail = dictInfoService.getOne(Condition.getQueryWrapper(dictInfo));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 参数信息表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入dictInfo")
+	public R<IPage<DictInfo>> list(DictInfo dictInfo, Query query) {
+		IPage<DictInfo> pages = dictInfoService.page(Condition.getPage(query), Condition.getQueryWrapper(dictInfo));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 参数信息表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入dictInfo")
+	public R<IPage<DictInfoVO>> page(DictInfoVO dictInfo, Query query) {
+		IPage<DictInfoVO> pages = dictInfoService.selectDictInfoPage(Condition.getPage(query), dictInfo);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 参数信息表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入dictInfo")
+	public R save(@Valid @RequestBody DictInfo dictInfo) {
+		return R.status(dictInfoService.save(dictInfo));
+	}
+
+	/**
+	 * 修改 参数信息表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入dictInfo")
+	public R update(@Valid @RequestBody DictInfo dictInfo) {
+		return R.status(dictInfoService.updateById(dictInfo));
+	}
+
+	/**
+	 * 新增或修改 参数信息表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入dictInfo")
+	public R submit(@Valid @RequestBody DictInfo dictInfo) {
+		return R.status(dictInfoService.saveOrUpdate(dictInfo));
+	}
+
+	
+	/**
+	 * 删除 参数信息表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "逻辑删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(dictInfoService.deleteLogic(Func.toLongList(ids)));
+	}
+
+	
+}

+ 34 - 0
src/main/java/org/springblade/control/dto/DictInfoDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.dto;
+
+import org.springblade.control.entity.DictInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 参数信息表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DictInfoDTO extends DictInfo {
+	private static final long serialVersionUID = 1L;
+
+}

+ 64 - 0
src/main/java/org/springblade/control/entity/DictInfo.java

@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import org.springblade.core.mp.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 参数信息表实体类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@Data
+@TableName("c_dict_info")
+@EqualsAndHashCode(callSuper = true)
+public class DictInfo extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	* 父主键
+	*/
+		private Long parentId;
+	/**
+	* 字典名称
+	*/
+		private String dictName;
+	/**
+	* 字典值
+	*/
+		private String dictValue;
+	/**
+	* 排序
+	*/
+		private Integer sort;
+	/**
+	* 参数类型
+	*/
+		private Integer type;
+	/**
+	* 自定义码
+	*/
+		private String code;
+
+
+}

+ 42 - 0
src/main/java/org/springblade/control/mapper/DictInfoMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.mapper;
+
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 参数信息表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+public interface DictInfoMapper extends BaseMapper<DictInfo> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param dictInfo
+	 * @return
+	 */
+	List<DictInfoVO> selectDictInfoPage(IPage page, DictInfoVO dictInfo);
+
+}

+ 32 - 0
src/main/java/org/springblade/control/mapper/DictInfoMapper.xml

@@ -0,0 +1,32 @@
+<?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.DictInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="dictInfoResultMap" type="org.springblade.control.entity.DictInfo">
+        <result column="id" property="id"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="dict_name" property="dictName"/>
+        <result column="dict_value" property="dictValue"/>
+        <result column="sort" property="sort"/>
+        <result column="type" property="type"/>
+        <result column="code" property="code"/>
+    </resultMap>
+
+
+    <select id="selectDictInfoPage" resultMap="dictInfoResultMap">
+        select *
+        from c_dict_info
+        where is_deleted = 0
+    </select>
+
+    <select id="getList" resultMap="dictInfoResultMap">
+        select * from c_dict_info where code = #{code}
+        <if test="notRoot != null and notRoot != ''">
+            and parent_id > 0
+        </if>
+        and is_deleted = 0
+        order by sort
+    </select>
+</mapper>

+ 41 - 0
src/main/java/org/springblade/control/service/IDictInfoService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.service;
+
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import org.springblade.core.mp.base.BaseService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 参数信息表 服务类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+public interface IDictInfoService extends BaseService<DictInfo> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param dictInfo
+	 * @return
+	 */
+	IPage<DictInfoVO> selectDictInfoPage(IPage<DictInfoVO> page, DictInfoVO dictInfo);
+
+}

+ 41 - 0
src/main/java/org/springblade/control/service/impl/DictInfoServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.service.impl;
+
+import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DictInfoVO;
+import org.springblade.control.mapper.DictInfoMapper;
+import org.springblade.control.service.IDictInfoService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 参数信息表 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@Service
+public class DictInfoServiceImpl extends BaseServiceImpl<DictInfoMapper, DictInfo> implements IDictInfoService {
+
+	@Override
+	public IPage<DictInfoVO> selectDictInfoPage(IPage<DictInfoVO> page, DictInfoVO dictInfo) {
+		return page.setRecords(baseMapper.selectDictInfoPage(page, dictInfo));
+	}
+
+}

+ 34 - 0
src/main/java/org/springblade/control/vo/DictInfoVO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.control.vo;
+
+import org.springblade.control.entity.DictInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 参数信息表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-06-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DictInfoVO extends DictInfo {
+	private static final long serialVersionUID = 1L;
+
+}

+ 20 - 0
src/main/java/sql/dictinfo.menu.sql

@@ -0,0 +1,20 @@
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`,
+                         `is_open`, `remark`, `is_deleted`)
+VALUES ('1665658060720152578', 1123598815738675201, 'dictinfo', '参数信息表', 'menu', '/control/dictinfo', NULL, 1, 1, 0, 1,
+        NULL, 0);
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`,
+                         `is_open`, `remark`, `is_deleted`)
+VALUES ('1665658060720152579', '1665658060720152578', 'dictinfo_add', '新增', 'add', '/control/dictinfo/add', 'plus', 1,
+        2, 1, 1, NULL, 0);
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`,
+                         `is_open`, `remark`, `is_deleted`)
+VALUES ('1665658060720152580', '1665658060720152578', 'dictinfo_edit', '修改', 'edit', '/control/dictinfo/edit', 'form',
+        2, 2, 2, 1, NULL, 0);
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`,
+                         `is_open`, `remark`, `is_deleted`)
+VALUES ('1665658060720152581', '1665658060720152578', 'dictinfo_delete', '删除', 'delete',
+        '/api/blade-control/dictinfo/remove', 'delete', 3, 2, 3, 1, NULL, 0);
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`,
+                         `is_open`, `remark`, `is_deleted`)
+VALUES ('1665658060720152582', '1665658060720152578', 'dictinfo_view', '查看', 'view', '/control/dictinfo/view',
+        'file-text', 4, 2, 2, 1, NULL, 0);