From 42a7552b9c8603aeab7f0785eb05270dfbeb0bd3 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期日, 02 三月 2025 10:16:20 +0800
Subject: [PATCH] Merge branch 'master' into dev

---
 business/src/main/java/com/ycl/domain/form/ProjectInvestmentFundingForm.java            |    3 
 business/src/main/java/com/ycl/domain/form/ProjectEngineeringForm.java                  |   55 ++
 business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java |    7 
 business/src/main/java/com/ycl/domain/entity/ProjectEngineering.java                    |   44 +
 common/src/main/java/com/ycl/common/enums/business/ProjectCategoryEnum.java             |   18 
 business/src/main/java/com/ycl/controller/ProjectEngineeringController.java             |   83 +++
 business/src/main/java/com/ycl/mapper/ProjectEngineeringMapper.java                     |   34 +
 start/src/main/java/com/ycl/web/controller/system/SysDeptController.java                |    5 
 start/src/main/resources/application.yml                                                |    3 
 system/src/main/java/com/ycl/system/domain/base/AbsUUIDEntity.java                      |   34 +
 system/src/main/java/com/ycl/system/domain/base/AbsUUIDVo.java                          |   24 
 business/src/main/java/com/ycl/domain/query/ProjectProcessQuery.java                    |    2 
 business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java                            |    2 
 flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java                              |    7 
 business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java                         |   26 
 business/src/main/resources/mapper/ProjectProcessMapper.xml                             |   43 +
 business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java                            |    6 
 project_management.sql                                                                  |    2 
 business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java              |  220 +++++--
 flowable/src/main/java/com/ycl/service/common/TaskCommonService.java                    |    6 
 business/src/main/java/com/ycl/domain/query/ProjectInfoQuery.java                       |    6 
 business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java                |    3 
 start/src/main/java/com/ycl/Application.java                                            |    2 
 system/src/main/java/com/ycl/system/domain/base/AbsUUIDForm.java                        |   20 
 business/src/main/java/com/ycl/domain/query/ProjectEngineeringQuery.java                |   34 +
 business/src/main/resources/mapper/ProjectInfoMapper.xml                                |   59 +-
 business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java              |    4 
 business/src/main/java/com/ycl/domain/vo/ProjectEngineeringVO.java                      |   55 ++
 system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java                           |    2 
 system/src/main/resources/mapper/system/SysUserMapper.xml                               |    5 
 business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml                   |    3 
 business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java                             |   38 
 business/src/main/java/com/ycl/service/impl/ProjectEngineeringServiceImpl.java          |  119 ++++
 system/src/main/java/com/ycl/system/service/ISysDeptService.java                        |    8 
 system/src/main/resources/mapper/system/SysDeptMapper.xml                               |   14 
 business/src/main/java/com/ycl/service/ProjectEngineeringService.java                   |   65 ++
 business/src/main/java/com/ycl/domain/entity/ProjectInfo.java                           |   22 
 business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java                 |  341 +++++++----
 business/src/main/resources/mapper/ProjectEngineeringMapper.xml                         |   64 ++
 business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java                    |   15 
 common/pom.xml                                                                          |   13 
 common/src/main/java/com/ycl/common/enums/YesOrNo.java                                  |   32 +
 system/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java                |    5 
 business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java    |    7 
 business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java                          |   11 
 45 files changed, 1,265 insertions(+), 306 deletions(-)

diff --git a/business/src/main/java/com/ycl/controller/ProjectEngineeringController.java b/business/src/main/java/com/ycl/controller/ProjectEngineeringController.java
new file mode 100644
index 0000000..febce91
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectEngineeringController.java
@@ -0,0 +1,83 @@
+package com.ycl.controller;
+
+import com.ycl.common.group.Update;
+import com.ycl.common.group.Add;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.validation.annotation.Validated;
+import javax.validation.constraints.NotEmpty;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.ycl.service.ProjectEngineeringService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectEngineeringForm;
+import com.ycl.domain.query.ProjectEngineeringQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 椤圭洰宸ョ▼ 鍓嶇鎺у埗鍣�
+ *
+ * @author xp
+ * @since 2025-02-26
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "椤圭洰宸ョ▼", tags = "椤圭洰宸ョ▼绠$悊")
+@RestController
+@RequestMapping("/project-engineering")
+public class ProjectEngineeringController {
+
+    private final ProjectEngineeringService projectEngineeringService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+//    @PreAuthorize("@ss.hasPermi('projectEngineering:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectEngineeringForm form) {
+        return projectEngineeringService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+//    @PreAuthorize("@ss.hasPermi('projectEngineering:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectEngineeringForm form) {
+        return projectEngineeringService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+//    @PreAuthorize("@ss.hasPermi('projectEngineering:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectEngineeringService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+//    @PreAuthorize("@ss.hasPermi('projectEngineering:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectEngineeringService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+//    @PreAuthorize("@ss.hasPermi('projectEngineering:page')")
+    public Result page(ProjectEngineeringQuery query) {
+        return projectEngineeringService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+//    @PreAuthorize("@ss.hasPermi('projectEngineering:detail')")
+    public Result detail(@PathVariable("id") String id) {
+        return projectEngineeringService.detail(id);
+    }
+
+    @GetMapping("/list")
+//    @PreAuthorize("@ss.hasPermi('projectEngineering:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectEngineeringService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectEngineering.java b/business/src/main/java/com/ycl/domain/entity/ProjectEngineering.java
new file mode 100644
index 0000000..af14acc
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectEngineering.java
@@ -0,0 +1,44 @@
+package com.ycl.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+import com.ycl.system.domain.base.AbsEntity;
+import com.ycl.system.domain.base.AbsUUIDEntity;
+import lombok.Data;
+
+/**
+ * 椤圭洰宸ョ▼
+ *
+ * @author xp
+ * @since 2025-02-26
+ */
+@Data
+@TableName("t_project_engineering")
+public class ProjectEngineering extends AbsUUIDEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_info_id")
+    /** 椤圭洰id */
+    private Long projectInfoId;
+
+    @TableField("project_name")
+    /** 宸ョ▼鍚嶇О */
+    private String projectName;
+
+    @TableField("project_type")
+    /** 椤圭洰鎺ㄨ繘绫诲瀷 */
+    private String projectType;
+
+    @TableField("investment_amount")
+    /** 鎶曡祫棰� */
+    private String investmentAmount;
+
+    @TableField("status")
+    /** 鐘舵�� */
+    private String status;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java b/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java
index 177a90a..6b70800 100644
--- a/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java
@@ -62,9 +62,9 @@
     /** 鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛� */
     private String investType;
 
-//    @TableField("project_phase")
-//    /** 椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵) */
-//    private String projectPhase;
+    @TableField("project_phase")
+    /** 椤圭洰闃舵(1鍌ㄥ瑙勫垝闃舵,  2椤圭洰鍓嶆湡闃舵,  3瀹炴柦闃舵,  4绔e伐鎶曠敤闃舵) */
+    private String projectPhase;
 
     @TableField("tag")
     /** 鏍囩 */
@@ -73,6 +73,14 @@
     @TableField("competent_department")
     /** 涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id) */
     private String competentDepartment;
+
+    @TableField("competent_department_person")
+    /** 涓荤閮ㄩ棬鑱旂郴浜� */
+    private String competentDepartmentPerson;
+
+    @TableField("competent_department_phone")
+    /** 涓荤閮ㄩ棬鑱旂郴鏂瑰紡 */
+    private String competentDepartmentPhone;
 
     @TableField("area")
     /** 琛屾斂鍖哄煙 */
@@ -164,10 +172,16 @@
     @TableField("remark")
     /** 瀹℃牳淇℃伅 */
     private String remark;
+
     @TableField("industry_competent_department")
+    /** 琛屼笟涓荤閮ㄩ棬 */
     private Long industryCompetentDepartment;
+
     @TableField("industry_competent_department_person")
-    private Long industryCompetentDepartmentPerson;
+    /** 琛屼笟涓荤閮ㄩ棬鑱旂郴浜� */
+    private String industryCompetentDepartmentPerson;
+
     @TableField("department_person_phone")
+    /** 琛屼笟涓荤閮ㄩ棬鑱旂郴鏂瑰紡 */
     private String departmentPersonPhone;
 }
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java b/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java
index 5244337..05953d9 100644
--- a/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java
@@ -31,6 +31,10 @@
     /** 瓒呴暱鏈熺壒鍒浗鍊� */
     private String nationalDebt;
 
+    @TableField("additional_national_debt")
+    /** 2023骞村鍙戝浗鍊鸿祫閲� */
+    private String additionalNationalDebt;
+
     @TableField("total_investment")
     /** 椤圭洰鎬绘姇璧勯 */
     private String totalInvestment;
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectEngineeringForm.java b/business/src/main/java/com/ycl/domain/form/ProjectEngineeringForm.java
new file mode 100644
index 0000000..e83ff25
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectEngineeringForm.java
@@ -0,0 +1,55 @@
+package com.ycl.domain.form;
+
+import com.ycl.common.group.Update;
+import com.ycl.common.group.Add;
+import com.ycl.system.domain.base.AbsForm;
+import com.ycl.domain.entity.ProjectEngineering;
+import com.ycl.system.domain.base.AbsUUIDForm;
+import org.springframework.beans.BeanUtils;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import org.springframework.lang.NonNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 椤圭洰宸ョ▼琛ㄥ崟
+ *
+ * @author xp
+ * @since 2025-02-26
+ */
+@Data
+@ApiModel(value = "ProjectEngineering琛ㄥ崟", description = "椤圭洰宸ョ▼琛ㄥ崟")
+public class ProjectEngineeringForm extends AbsUUIDForm {
+
+    @NotNull(message = "椤圭洰id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰id")
+    private Long projectInfoId;
+
+    @NotBlank(message = "宸ョ▼鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("宸ョ▼鍚嶇О")
+    private String projectName;
+
+    @NotBlank(message = "椤圭洰鎺ㄨ繘绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰鎺ㄨ繘绫诲瀷")
+    private String projectType;
+
+    @NotBlank(message = "鎶曡祫棰濅笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎶曡祫棰�")
+    private String investmentAmount;
+
+    @NotBlank(message = "鐘舵�佷笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐘舵��")
+    private String status;
+
+    public static ProjectEngineering getEntityByForm(@NonNull ProjectEngineeringForm form, ProjectEngineering entity) {
+        if(entity == null) {
+          entity = new ProjectEngineering();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java b/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java
index 12b2612..1edaf2d 100644
--- a/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java
+++ b/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java
@@ -15,7 +15,6 @@
 import org.springframework.util.CollectionUtils;
 
 import javax.validation.constraints.NotBlank;
-import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -60,14 +59,22 @@
     @ApiModelProperty("鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛�")
     private String investType;
 
-    @ApiModelProperty("椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵)")
+    @ApiModelProperty("椤圭洰闃舵(1鍌ㄥ瑙勫垝闃舵,  2椤圭洰鍓嶆湡闃舵,  3瀹炴柦闃舵,  4绔e伐鎶曠敤闃舵)")
     private String projectPhase;
 
     @ApiModelProperty("鏍囩")
     private String tag;
 
     @ApiModelProperty("涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id)")
-    private List<Long> competentDepartmentList;
+    private String competentDepartment;
+
+    @ApiModelProperty("涓荤閮ㄩ棬鑱旂郴浜�")
+    /** 涓荤閮ㄩ棬鑱旂郴浜� */
+    private String competentDepartmentPerson;
+
+    @ApiModelProperty("涓荤閮ㄩ棬鑱旂郴鏂瑰紡")
+    /** 涓荤閮ㄩ棬鑱旂郴鏂瑰紡 */
+    private String competentDepartmentPhone;
 
     @ApiModelProperty("琛屾斂鍖哄煙")
     private String area;
@@ -146,7 +153,7 @@
     @ApiModelProperty("琛屼笟涓荤閮ㄩ棬")
     private Long industryCompetentDepartment;
     @ApiModelProperty("琛屼笟涓荤閮ㄩ棬鑱旂郴浜�")
-    private Long industryCompetentDepartmentPerson;
+    private String industryCompetentDepartmentPerson;
     @ApiModelProperty("琛屼笟涓荤閮ㄩ棬鑱旂郴鏂瑰紡")
     private String departmentPersonPhone;
 
@@ -156,25 +163,26 @@
           entity = new ProjectInfo();
         }
         BeanUtils.copyProperties(form, entity);
-        //瀹℃牳閮ㄩ棬杞崲
-        List<Long> competentDepartmentList = form.getCompetentDepartmentList();
-        if(!CollectionUtils.isEmpty(competentDepartmentList)){
-            entity.setCompetentDepartment(StringUtils.join(competentDepartmentList, ","));
-        }
         //璧勯噾绫诲瀷杞崲
         List<String> fundTypeList = form.getFundTypeList();
         if(!CollectionUtils.isEmpty(fundTypeList)){
             entity.setFundType(StringUtils.join(fundTypeList, ","));
+        } else {
+            entity.setFundType("");
         }
         //閲嶇偣鍒嗙被杞崲
         List<String> importanceTypeList = form.getImportanceTypeList();
         if(!CollectionUtils.isEmpty(importanceTypeList)){
             entity.setImportanceType(StringUtils.join(importanceTypeList, ","));
+        } else {
+            entity.setImportanceType("");
         }
         //绠$悊褰掑彛杞崲
         List<String> managementCentralizationList = form.getManagementCentralizationList();
         if(!CollectionUtils.isEmpty(managementCentralizationList)){
             entity.setManagementCentralization(StringUtils.join(managementCentralizationList, ","));
+        } else {
+            entity.setManagementCentralization("");
         }
         return entity;
     }
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectInvestmentFundingForm.java b/business/src/main/java/com/ycl/domain/form/ProjectInvestmentFundingForm.java
index aff965e..078a176 100644
--- a/business/src/main/java/com/ycl/domain/form/ProjectInvestmentFundingForm.java
+++ b/business/src/main/java/com/ycl/domain/form/ProjectInvestmentFundingForm.java
@@ -31,6 +31,9 @@
     @ApiModelProperty("瓒呴暱鏈熺壒鍒浗鍊�")
     private String nationalDebt;
 
+    @ApiModelProperty("2023骞村鍙戝浗鍊鸿祫閲�")
+    private String additionalNationalDebt;
+
     @ApiModelProperty("椤圭洰鎬绘姇璧勯")
     private String totalInvestment;
 
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectEngineeringQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectEngineeringQuery.java
new file mode 100644
index 0000000..1500e54
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectEngineeringQuery.java
@@ -0,0 +1,34 @@
+package com.ycl.domain.query;
+
+import com.ycl.system.domain.base.AbsQuery;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 椤圭洰宸ョ▼鏌ヨ
+ *
+ * @author xp
+ * @since 2025-02-26
+ */
+@Data
+@ApiModel(value = "ProjectEngineering鏌ヨ鍙傛暟", description = "椤圭洰宸ョ▼鏌ヨ鍙傛暟")
+public class ProjectEngineeringQuery extends AbsQuery {
+
+    @ApiModelProperty("涓婚」鐩�")
+    private Long projectInfoId;
+
+    @ApiModelProperty("宸ョ▼鍚�")
+    private String projectName;
+
+    @ApiModelProperty("寮�宸ョ姸鎬�")
+    private String status;
+
+    @ApiModelProperty("娴佺▼鎺ㄨ繘绫诲瀷")
+    private String projectType;
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectInfoQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectInfoQuery.java
index a88915e..4b8d65b 100644
--- a/business/src/main/java/com/ycl/domain/query/ProjectInfoQuery.java
+++ b/business/src/main/java/com/ycl/domain/query/ProjectInfoQuery.java
@@ -58,5 +58,11 @@
     private Integer usedStatus;
     //鏌ヨ鏉′欢涓荤閮ㄩ棬
     private Long competentDepartment;
+
+    @ApiModelProperty("鏄惁鏄紓甯搁」鐩煡璇細0 涓嶆槸  1鏄�")
+    private Integer exe;
+
+    @ApiModelProperty("鏄惁鏄」鐩腑蹇冩煡璇細0 涓嶆槸  1鏄�")
+    private Integer center;
 }
 
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectProcessQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectProcessQuery.java
index caece21..7d8676d 100644
--- a/business/src/main/java/com/ycl/domain/query/ProjectProcessQuery.java
+++ b/business/src/main/java/com/ycl/domain/query/ProjectProcessQuery.java
@@ -46,7 +46,7 @@
     private String fundType;
 
 
-    /** 椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵) */
+    /** 椤圭洰闃舵(1鍌ㄥ瑙勫垝闃舵,  2椤圭洰鍓嶆湡闃舵,  3瀹炴柦闃舵,  4绔e伐鎶曠敤闃舵) */
     private String projectPhase;
 
     /** 鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛� */
diff --git a/business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java b/business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java
index b346939..d8bed24 100644
--- a/business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/CustomerTaskVO.java
@@ -64,17 +64,17 @@
     /**
      * 鍙戣捣浜哄鍚�
      */
-    private String promoterName;
+    private List<String> promoterName;
 
     /**
      * 鍙戣捣浜哄崟浣�
      */
-    private String promoterUnitId;
+    private List<String> promoterUnitId;
 
     /**
      * 鍙戣捣浜哄崟浣嶅悕绉�
      */
-    private String promoterUnitName;
+    private List<String> promoterUnitName;
 
     /**
      * 澶勭悊浜�
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectEngineeringVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectEngineeringVO.java
new file mode 100644
index 0000000..20f31b2
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectEngineeringVO.java
@@ -0,0 +1,55 @@
+package com.ycl.domain.vo;
+
+import com.ycl.system.domain.base.AbsUUIDVo;
+import com.ycl.system.domain.base.AbsVo;
+import com.ycl.domain.entity.ProjectEngineering;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import org.springframework.beans.BeanUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 椤圭洰宸ョ▼灞曠ず
+ *
+ * @author xp
+ * @since 2025-02-26
+ */
+@Data
+@ApiModel(value = "椤圭洰宸ョ▼鍝嶅簲鏁版嵁", description = "椤圭洰宸ョ▼鍝嶅簲鏁版嵁")
+public class ProjectEngineeringVO extends AbsUUIDVo {
+
+    /** 椤圭洰id */
+    @ApiModelProperty("椤圭洰id")
+    private Long projectInfoId;
+
+    @ApiModelProperty("涓婚」鐩悕绉�")
+    private String projectInfoName;
+
+    /** 宸ョ▼鍚嶇О */
+    @ApiModelProperty("宸ョ▼鍚嶇О")
+    private String projectName;
+
+    /** 椤圭洰鎺ㄨ繘绫诲瀷 */
+    @ApiModelProperty("椤圭洰鎺ㄨ繘绫诲瀷")
+    private String projectType;
+
+    /** 鎶曡祫棰� */
+    @ApiModelProperty("鎶曡祫棰�")
+    private String investmentAmount;
+
+    /** 鐘舵�� */
+    @ApiModelProperty("鐘舵��")
+    private String status;
+
+    public static ProjectEngineeringVO getVoByEntity(@NonNull ProjectEngineering entity, ProjectEngineeringVO vo) {
+        if(vo == null) {
+            vo = new ProjectEngineeringVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java
index 7c7d0f3..5dbf816 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java
@@ -66,8 +66,8 @@
     @ApiModelProperty("鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛�")
     private String investType;
 
-    /** 椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵) */
-    @ApiModelProperty("椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵)")
+    /** 椤圭洰闃舵(1鍌ㄥ瑙勫垝闃舵,  2椤圭洰鍓嶆湡闃舵,  3瀹炴柦闃舵,  4绔e伐鎶曠敤闃舵) */
+    @ApiModelProperty("椤圭洰闃舵(1鍌ㄥ瑙勫垝闃舵,  2椤圭洰鍓嶆湡闃舵,  3瀹炴柦闃舵,  4绔e伐鎶曠敤闃舵)")
     private String projectPhase;
 
     /** 鏍囩 */
@@ -76,12 +76,16 @@
 
     /** 涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id) */
     @ApiModelProperty("涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id)")
-    private List<Long> competentDepartmentList;
-
-
-
-
     private String competentDepartment;
+
+    @ApiModelProperty("涓荤閮ㄩ棬鑱旂郴浜�")
+    /** 涓荤閮ㄩ棬鑱旂郴浜� */
+    private String competentDepartmentPerson;
+
+    @ApiModelProperty("涓荤閮ㄩ棬鑱旂郴鏂瑰紡")
+    /** 涓荤閮ㄩ棬鑱旂郴鏂瑰紡 */
+    private String competentDepartmentPhone;
+
     /** 琛屾斂鍖哄煙 */
     @ApiModelProperty("琛屾斂鍖哄煙")
     private String area;
@@ -184,7 +188,7 @@
     @ApiModelProperty("琛屼笟涓荤閮ㄩ棬")
     private Long industryCompetentDepartment;
     @ApiModelProperty("琛屼笟涓荤閮ㄩ棬鑱旂郴浜�")
-    private Long industryCompetentDepartmentPerson;
+    private String industryCompetentDepartmentPerson;
     @ApiModelProperty("琛屼笟涓荤閮ㄩ棬鑱旂郴鏂瑰紡")
     private String departmentPersonPhone;
 
@@ -203,14 +207,7 @@
         }
 
         BeanUtils.copyProperties(entity, vo);
-        //涓荤閮ㄩ棬杞垚list
-        String competentDepartment = entity.getCompetentDepartment();
-        if(!StringUtils.isBlank(competentDepartment)){
-            List<Long> list = Arrays.stream(competentDepartment.split(","))
-                    .map(Long::parseLong)
-                    .collect(Collectors.toList());
-            vo.setCompetentDepartmentList(list);
-        }
+
         //绠$悊褰掑彛杞崲
         String managementCentralization = entity.getManagementCentralization();
         if(!StringUtils.isBlank(managementCentralization)){
@@ -233,14 +230,6 @@
     }
     //杞崲瀛楃涓查泦鍚堝瓧娈�
     public static void transform(@NonNull ProjectInfoVO vo) {
-        //涓荤閮ㄩ棬杞垚list
-        String competentDepartment = vo.getCompetentDepartment();
-        if(!StringUtils.isBlank(competentDepartment)){
-            List<Long> list = Arrays.stream(competentDepartment.split(","))
-                    .map(Long::parseLong)
-                    .collect(Collectors.toList());
-            vo.setCompetentDepartmentList(list);
-        }
         //绠$悊褰掑彛杞崲
         String managementCentralization = vo.getManagementCentralization();
         if(!StringUtils.isBlank(managementCentralization)){
@@ -248,7 +237,6 @@
         }
 
         //鍒嗙被绫诲瀷杞崲
-
         String importanceType = vo.getImportanceType();
         if (!StringUtils.isBlank(importanceType)) {
             vo.setImportanceTypeList(Arrays.asList(importanceType.split(",")));
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java
index fa229ab..684962b 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java
@@ -30,6 +30,9 @@
     @ApiModelProperty("瓒呴暱鏈熺壒鍒浗鍊�")
     private String nationalDebt;
 
+    @ApiModelProperty("2023骞村鍙戝浗鍊鸿祫閲�")
+    private String additionalNationalDebt;
+
     /** 椤圭洰鎬绘姇璧勯 */
     @ApiModelProperty("椤圭洰鎬绘姇璧勯")
     private String totalInvestment;
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java
index 703f8e9..356b9c3 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectProcessVO.java
@@ -9,7 +9,9 @@
 import org.springframework.lang.NonNull;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 娴佺▼鎺ㄨ繘鍒楄〃淇℃伅琛ㄥ睍绀�
@@ -36,4 +38,13 @@
 
     @ApiModelProperty("娴佺▼鏄惁鎸傝捣/鏆傚仠")
     private boolean suspended;
+
+    @ApiModelProperty("鎶曡祫棰�")
+    private String investmentAmount;
+
+    @ApiModelProperty("寮�宸ョ姸鎬�")
+    private String status;
+
+    @ApiModelProperty("宸ョ▼鍒楄〃")
+    private List<ProjectEngineeringVO> children = new ArrayList<>();
 }
diff --git a/business/src/main/java/com/ycl/mapper/ProjectEngineeringMapper.java b/business/src/main/java/com/ycl/mapper/ProjectEngineeringMapper.java
new file mode 100644
index 0000000..4166216
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectEngineeringMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectEngineering;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.vo.ProjectEngineeringVO;
+import com.ycl.domain.form.ProjectEngineeringForm;
+import com.ycl.domain.query.ProjectEngineeringQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 椤圭洰宸ョ▼ Mapper 鎺ュ彛
+ *
+ * @author xp
+ * @since 2025-02-26
+ */
+@Mapper
+public interface ProjectEngineeringMapper extends BaseMapper<ProjectEngineering> {
+
+    /**
+     * id鏌ユ壘椤圭洰宸ョ▼
+     * @param id
+     * @return
+     */
+    ProjectEngineeringVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectEngineeringQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
index 8667a1f..97b7358 100644
--- a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
+++ b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
@@ -35,7 +35,7 @@
     *  鍒嗛〉
     */
     @DataScope(deptAlias = "d")
-    @InterceptorIgnore(tenantLine = "true")
+//    @InterceptorIgnore(tenantLine = "true")
     IPage getPage(@Param("query") ProjectInfoQuery query, IPage page);
 
     @DataScope(deptAlias = "d")
diff --git a/business/src/main/java/com/ycl/service/ProjectEngineeringService.java b/business/src/main/java/com/ycl/service/ProjectEngineeringService.java
new file mode 100644
index 0000000..a68e5a8
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectEngineeringService.java
@@ -0,0 +1,65 @@
+package com.ycl.service;
+
+import com.ycl.domain.entity.ProjectEngineering;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectEngineeringForm;
+import com.ycl.domain.query.ProjectEngineeringQuery;
+import java.util.List;
+
+/**
+ * 椤圭洰宸ョ▼ 鏈嶅姟绫�
+ *
+ * @author xp
+ * @since 2025-02-26
+ */
+public interface ProjectEngineeringService extends IService<ProjectEngineering> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectEngineeringForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectEngineeringForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectEngineeringQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(String id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index d638720..7fb7052 100644
--- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -74,6 +74,7 @@
 
 import java.io.InputStream;
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -160,7 +161,14 @@
                 newV.put(task.getTaskDefinitionKey() + "&" + key, variables.get(key));
                 //瀛楀吀閲屾湁灏辨斁鍏ユ祦绋嬪彉閲忎腑
                 if (!CollectionUtils.isEmpty(dictList) && dictList.contains(key)) {
-                    processVariables.put(key,variables.get(key));
+                    if ("money".equals(key)) {
+                        // 涓囧厓杞厓
+                        Object w = variables.get(key);
+                        BigDecimal y = new BigDecimal(w.toString()).multiply(new BigDecimal(10000));
+                        processVariables.put(key, y);
+                    } else {
+                        processVariables.put(key,variables.get(key));
+                    }
                 }
             }
         }
@@ -1264,13 +1272,14 @@
         // 鍒ゆ柇鍓嶇疆浠诲姟鏄笉鏄拰褰撳墠浠诲姟涓哄悓涓�涓猠xecuteId
         // 鍒ゆ柇褰撳墠浠诲姟鏄惁琚寕璧蜂腑
         String finalProcessInsId = processInsId;
-        beforeNodes.stream().filter(node -> {
+        beforeNodes = beforeNodes.stream().filter(node -> {
             if (node.getCurrent()) {
                 return Boolean.TRUE;
             }
             HistoricTaskInstance beforeTask = historyService.createHistoricTaskInstanceQuery().processInstanceId(finalProcessInsId).finished().taskDefinitionKey(node.getBeforeNodeDefId()).singleResult();
             return Objects.nonNull(beforeTask);
-        }).forEach(node -> {
+        }).collect(Collectors.toList());
+        beforeNodes.forEach(node -> {
             if (node.getCurrent()) {
                 if (processLogService.taskIsHangup(taskId, finalProcessInsId)) {
                     node.setTaskStatus(TaskStatusEnum.HANGUP);
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectEngineeringServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectEngineeringServiceImpl.java
new file mode 100644
index 0000000..90c7d79
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectEngineeringServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.domain.entity.ProjectEngineering;
+import com.ycl.mapper.ProjectEngineeringMapper;
+import com.ycl.service.ProjectEngineeringService;
+import com.ycl.common.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectEngineeringForm;
+import com.ycl.domain.vo.ProjectEngineeringVO;
+import com.ycl.domain.query.ProjectEngineeringQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import com.ycl.framework.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 椤圭洰宸ョ▼ 鏈嶅姟瀹炵幇绫�
+ *
+ * @author xp
+ * @since 2025-02-26
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectEngineeringServiceImpl extends ServiceImpl<ProjectEngineeringMapper, ProjectEngineering> implements ProjectEngineeringService {
+
+    private final ProjectEngineeringMapper projectEngineeringMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectEngineeringForm form) {
+        ProjectEngineering entity = ProjectEngineeringForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectEngineeringForm form) {
+        ProjectEngineering entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(ProjectEngineeringQuery query) {
+        IPage<ProjectEngineeringVO> page = PageUtil.getPage(query, ProjectEngineeringVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(String id) {
+        ProjectEngineeringVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectEngineering> entities = baseMapper.selectList(null);
+        List<ProjectEngineeringVO> vos = entities.stream()
+                .map(entity -> ProjectEngineeringVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java
index 62ae364..42058b6 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java
@@ -11,12 +11,15 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.common.base.Result;
 import com.ycl.common.config.SysConfig;
 import com.ycl.common.constant.Constants;
 import com.ycl.common.core.domain.BaseEntity;
 import com.ycl.common.core.domain.entity.SysDictData;
+import com.ycl.common.enums.YesOrNo;
 import com.ycl.common.enums.business.FileTypeEnum;
 import com.ycl.common.enums.business.ImportanceTypeEnum;
 import com.ycl.common.enums.business.ProjectCategoryEnum;
@@ -109,8 +112,6 @@
         //娣诲姞鍩烘湰淇℃伅
         ProjectInfo entity = ProjectInfoForm.getEntityByForm(form, null);
         Long userId = SecurityUtils.getUserId();
-//        Long deptId = SecurityUtils.getDeptId();
-//        entity.setProjectOwnerUnit(deptId);
         entity.setCreateBy(userId);
         entity.setUpdateBy(userId);
         //濡傛灉鏄偍澶囬」鐩�(鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍�
@@ -122,18 +123,28 @@
         }
         baseMapper.insert(entity);
         addPlan(entity.getId()); //娣诲姞璁″垝琛�
-        //娣诲姞鏂囦欢
-        List<File> fileList = form.getFileList();
-        fileList.forEach(item -> {
-            item.setBusId(entity.getId());
-            item.setType(FileTypeEnum.PROJECT_INFO);
-        });
-        fileService.saveBatch(fileList);
-
         //娣诲姞椤圭洰涓爣鍗曚綅
-        saveUnit(entity.getId(), form.getWinUnitList());
+        List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>();
+        for (ProjectInfoWinUnitForm winUnitForm : form.getWinUnitList()) {
+            ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null);
+            projectInfoWinUnit.setId(null);
+            projectInfoWinUnit.setProjectInfoId(entity.getId());
+            projectInfoWinUnits.add(projectInfoWinUnit);
+        }
+        if (!CollectionUtils.isEmpty(projectInfoWinUnits)) {
+            projectInfoWinUnitService.saveBatch(projectInfoWinUnits);
+        }
         //娣诲姞骞村害鎶曡祫璁″垝
-        saveYearPlan(entity.getId(), form.getYearPlanList());
+        List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>();
+        for (ProjectInfoYearPlanForm yearPlanForm : form.getYearPlanList()) {
+            ProjectInfoYearPlan yearPlan = ProjectInfoYearPlanForm.getEntityByForm(yearPlanForm, null);
+            yearPlan.setId(null);
+            yearPlan.setProjectInfoId(entity.getId());
+            projectInfoYearPlans.add(yearPlan);
+        }
+        if (!CollectionUtils.isEmpty(projectInfoYearPlans)) {
+            projectInfoYearPlanService.saveBatch(projectInfoYearPlans);
+        }
         return Result.ok("娣诲姞鎴愬姛").data(entity.getId());
     }
 
@@ -145,20 +156,18 @@
     public boolean  checkProjectNameAndIdIsUnique(ProjectInfo entity,Long updateId){
         LambdaQueryWrapper<ProjectInfo> queryWrapper = new LambdaQueryWrapper<>();
         if (updateId == null) {
-            queryWrapper.eq(ProjectInfo::getProjectName, entity.getProjectName());
-            queryWrapper.eq(ProjectInfo::getDeleted,0);
-            if (StringUtils.isNotEmpty(entity.getProjectCode())) {
-                queryWrapper.eq(ProjectInfo::getProjectCode, entity.getProjectCode());
-            }
-
-            List<ProjectInfo> project = projectInfoMapper.selectList(queryWrapper);
-
-            return project == null || project.isEmpty();
-        }else {
-
-            List<ProjectInfo> project = projectInfoMapper.checkProjectNameAndIdIsUnique(updateId,entity.getProjectName(),entity.getProjectCode());
-
-            return project == null || project.isEmpty();
+            List<ProjectInfo> list = new LambdaQueryChainWrapper<>(baseMapper)
+                    .eq(ProjectInfo::getProjectName, entity.getProjectName())
+                    .eq(ProjectInfo::getProjectCode, entity.getProjectCode())
+                    .list();
+            return list == null || list.isEmpty();
+        } else {
+            List<ProjectInfo> list = new LambdaQueryChainWrapper<>(baseMapper)
+                    .eq(ProjectInfo::getProjectName, entity.getProjectName())
+                    .eq(ProjectInfo::getProjectCode, entity.getProjectCode())
+                    .ne(ProjectInfo::getId, updateId)
+                    .list();
+            return list == null || list.isEmpty();
         }
 
     }
@@ -202,35 +211,39 @@
         }
         //鏇存柊椤圭洰淇℃伅
         baseMapper.updateById(entity);
-        List<File> fileList = form.getFileList();
-        fileList.forEach(item -> {
-            item.setId(null);
-            item.setBusId(entity.getId());
-            item.setType(FileTypeEnum.PROJECT_INFO);
-        });
-        //鍒犻櫎鍘熸湁鏂囦欢
-        QueryWrapper<File> fileQueryWrapper = new QueryWrapper<>();
-        fileQueryWrapper.eq("type", FileTypeEnum.PROJECT_INFO.getType());
-        fileQueryWrapper.eq("bus_id", entity.getId());
-        fileMapper.delete(fileQueryWrapper);
-        //鏇挎崲鎴愮幇鏈�
-        fileService.saveBatch(fileList);
-
         //淇敼椤圭洰涓爣鍗曚綅
         //鍒犻櫎鍘熸暟鎹�
-        QueryWrapper<ProjectInfoWinUnit> unitWrapper = new QueryWrapper<>();
-        unitWrapper.eq("project_info_id", form.getId());
-        projectInfoWinUnitService.remove(unitWrapper);
+        new LambdaUpdateChainWrapper<>(projectInfoWinUnitService.getBaseMapper())
+                .eq(ProjectInfoWinUnit::getProjectInfoId, entity.getId())
+                .remove();
         //娣诲姞椤圭洰涓爣鍗曚綅
-        saveUnit(entity.getId(), form.getWinUnitList());
+        List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>();
+        for (ProjectInfoWinUnitForm winUnitForm : form.getWinUnitList()) {
+            ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null);
+            projectInfoWinUnit.setId(null);
+            projectInfoWinUnit.setProjectInfoId(entity.getId());
+            projectInfoWinUnits.add(projectInfoWinUnit);
+        }
+        if (!CollectionUtils.isEmpty(projectInfoWinUnits)) {
+            projectInfoWinUnitService.saveBatch(projectInfoWinUnits);
+        }
 
         //淇敼骞村害鎶曡祫璁″垝
         //鍒犻櫎鍘熸暟鎹�
-        QueryWrapper<ProjectInfoYearPlan> yearPlanWrapper = new QueryWrapper<>();
-        unitWrapper.eq("project_info_id", form.getId());
-        projectInfoYearPlanService.remove(yearPlanWrapper);
+        new LambdaUpdateChainWrapper<>(projectInfoYearPlanService.getBaseMapper())
+                .eq(ProjectInfoYearPlan::getProjectInfoId, entity.getId())
+                .remove();
         //娣诲姞骞村害鎶曡祫璁″垝
-        saveYearPlan(entity.getId(), form.getYearPlanList());
+        List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>();
+        for (ProjectInfoYearPlanForm yearPlanForm : form.getYearPlanList()) {
+            ProjectInfoYearPlan yearPlan = ProjectInfoYearPlanForm.getEntityByForm(yearPlanForm, null);
+            yearPlan.setId(null);
+            yearPlan.setProjectInfoId(entity.getId());
+            projectInfoYearPlans.add(yearPlan);
+        }
+        if (!CollectionUtils.isEmpty(projectInfoYearPlans)) {
+            projectInfoYearPlanService.saveBatch(projectInfoYearPlans);
+        }
         return Result.ok("淇敼鎴愬姛");
     }
 
@@ -311,25 +324,13 @@
         if (query.getProjectEndTime() != null) {
             query.setProjectEndTime(DateUtils.getDayEnd(query.getProjectEndTime()));
         }
-        String projectCategory = query.getProjectCategory();
-        //瀹炴柦闃舵鏈変袱涓�兼斁鍦╯ql澶勭悊
-        if (ProjectCategoryEnum.RESERVE.getType().equals(projectCategory)) {
-            query.setProjectStatus(ProjectCategoryEnum.RESERVE.getStatus());
-            query.setReserveOrPrevious(ProjectCategoryEnum.RESERVE.getCode());
-        } else if (ProjectCategoryEnum.PREVIOUS.getType().equals(projectCategory)) {
-            query.setProjectStatus(ProjectCategoryEnum.PREVIOUS.getStatus());
-            query.setReserveOrPrevious(ProjectCategoryEnum.PREVIOUS.getCode());
-        } else if (ProjectCategoryEnum.FINISH.getType().equals(projectCategory)) {
-            query.setProjectStatus(ProjectCategoryEnum.FINISH.getStatus());
-        } else if (ProjectCategoryEnum.EXCEPTION.getType().equals(projectCategory)) {
-            //TODO
-            //鍏堟煡鍑哄紓甯告祦绋嬫垨鑰呭紓甯歌繘搴︽垨鑰呭紓甯歌鍒掔殑projectId鍜屽紓甯哥绫�
-            //閫氳繃projectId鏌ュ嚭椤圭洰鏁版嵁
-            //琛ュ厖鐩稿簲鐨勫紓甯告暟鎹紙寮傚父绉嶇被銆佸紓甯告祦绋嬭妭鐐圭瓑锛�
-            List<ProjectVO> list = new ArrayList<>();
-            return Result.ok().data(list).total(0);
+        if (YesOrNo.YES.getCode().equals(query.getCenter())) {
+            query.setProjectPhase("6");
         }
-
+        // 寮傚父椤圭洰鏆傛椂杩斿洖绌�
+        if (YesOrNo.YES.getCode().equals(query.getExe())) {
+            return Result.ok().data(new ArrayList<>()).total(0);
+        }
         Long userId = SecurityUtils.getUserId();
         String ancestors = sysDeptMapper.selectAncestors(userId);
         String[] ancestorArr = ancestors.split(",");
@@ -339,10 +340,12 @@
             query.setProjectOwnerUnit(SecurityUtils.getDeptId());
             //涓氫富
             query.setRole(0);
-        } else if (!CollectionUtils.isEmpty(ancestorList) && ancestorList.contains("102")) {
+        } else if ((!CollectionUtils.isEmpty(ancestorList) && ancestorList.contains("102"))) {
             query.setCompetentDepartment(SecurityUtils.getDeptId());
             //瀹℃壒 瀵瑰簲涓荤閮ㄩ棬
             query.setRole(1);
+        } else if (SecurityUtils.isAdmin(userId)) {
+            query.setRole(3);
         }
 
         IPage<ProjectInfoVO> page = PageUtil.getPage(query, ProjectInfoVO.class);
@@ -353,10 +356,10 @@
             ProjectInfoVO.transform(vo);
             ProjectVO projectVO = new ProjectVO();
             copyToProjectVO(vo, projectVO);
-            List<Long> departmentList = vo.getCompetentDepartmentList();
-            projectVO.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (!CollectionUtils.isEmpty(departmentList) && departmentList.contains(SecurityUtils.getDeptId())));
+            String competentDepartment = vo.getCompetentDepartment();
+            projectVO.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (StringUtils.isNotEmpty(competentDepartment) && competentDepartment.equals(SecurityUtils.getDeptId() + "")));
             // 缈昏瘧椤圭洰闃舵
-            String phase = ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectStatus(), projectVO.getProcessId() != null);
+            String phase = ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectPhase());
             projectVO.setProjectPhase(phase);
             if (StringUtils.isNotEmpty(projectVO.getProjectSubType())) {
                 // 缈昏瘧椤圭洰瀛愮被鍨�
@@ -394,14 +397,11 @@
         ProjectInfo entity = baseMapper.getById(id);
         Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
         ProjectInfoVO vo = ProjectInfoVO.getVoByEntity(entity, null);
-        List<Long> departmentList = vo.getCompetentDepartmentList();
-        vo.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (!CollectionUtils.isEmpty(departmentList) && departmentList.contains(SecurityUtils.getDeptId())));
+        String competentDepartment = vo.getCompetentDepartment();
+        vo.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (StringUtils.isNotEmpty(competentDepartment) && competentDepartment.equals(SecurityUtils.getDeptId() + "")));
         QueryWrapper<File> fileQueryWrapper = new QueryWrapper<>();
         fileQueryWrapper.eq("type", FileTypeEnum.PROJECT_INFO.getType());
         fileQueryWrapper.eq("bus_id", vo.getId());
-
-        List<File> files = fileMapper.selectList(fileQueryWrapper);
-        vo.setFileList(files);
 
         //涓爣鍗曚綅
         List<ProjectInfoWinUnitVO> unitVOS = new ArrayList<>();
@@ -458,25 +458,32 @@
         List<ProjectVO> city = new ArrayList<>();
         List<ProjectVO> county = new ArrayList<>();
         projectVOS.forEach(item -> {
-            if (ProjectCategoryEnum.RESERVE.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) {
+            if (ProjectCategoryEnum.RESERVE.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()))) {
                 reserve.add(item);
-            } else if (ProjectCategoryEnum.PREVIOUS.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) {
+            } else if (ProjectCategoryEnum.PREVIOUS.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()))) {
                 previous.add(item);
-            } else if (ProjectCategoryEnum.IMPLEMENT.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) {
+            } else if (ProjectCategoryEnum.IMPLEMENT.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()))) {
                 implement.add(item);
-            } else if (ProjectCategoryEnum.FINISH.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) {
+            } else if (ProjectCategoryEnum.FINISH.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()))) {
                 finish.add(item);
             }
 
-            if (ImportanceTypeEnum.PROVINCIAL_KEY.getType().equals(item.getImportanceType())) {
-                province.add(item);
-            } else if (ImportanceTypeEnum.SUINING_KEY.getType().equals(item.getImportanceType())) {
-                city.add(item);
-            } else if (ImportanceTypeEnum.SHEHONG_KEY.getType().equals(item.getImportanceType())) {
-                county.add(item);
-            } else // if  (ImportanceTypeEnum.NORMAL.getType().equals(item.getImportanceType()))
-            {
+            if (StringUtils.isBlank(item.getImportanceType())) {
                 normal.add(item);
+                // 浣跨敤contains锛屽洜涓洪噸鐐瑰垎绫诲彲澶氶�夛紝浣跨敤,鍒嗗壊瀛樺偍鐨�
+            } else {
+                if (item.getImportanceType().contains(ImportanceTypeEnum.PROVINCIAL_KEY.getType())) {
+                    province.add(item);
+                }
+                if (item.getImportanceType().contains(ImportanceTypeEnum.SUINING_KEY.getType())) {
+                    city.add(item);
+                }
+                if (item.getImportanceType().contains(ImportanceTypeEnum.SHEHONG_KEY.getType())) {
+                    county.add(item);
+                }
+                if (item.getImportanceType().contains(ImportanceTypeEnum.NORMAL.getType())) {
+                    normal.add(item);
+                }
             }
         });
         //鍗曚綅鍏堥粯璁や负鍏�
@@ -589,7 +596,7 @@
             ProjectExcelTemplate excel = new ProjectExcelTemplate();
             BeanUtils.copyProperties(item, excel);
             //椤圭洰闃舵
-            excel.setProjectPhase(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null));
+            excel.setProjectPhase(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()));
             excelList.add(excel);
         });
         Set<Integer> indexes = OutputExcelUtils.getSelectFields(query.getFieldList(), ProjectExcelTemplate.class);
@@ -815,53 +822,123 @@
         if (ObjectUtil.isNotNull(form.getProjectInfoForm())) {
             if (ObjectUtil.isNull(form.getProjectInfoForm().getId())) {
                 //鏂板
-                projectId = (Long) ((ProjectInfoServiceImpl) AopContext.currentProxy()).add(form.getProjectInfoForm()).get("data");
+                ProjectInfo entity = ProjectInfoForm.getEntityByForm(form.getProjectInfoForm(), null);
+                Long userId = SecurityUtils.getUserId();
+                entity.setCreateBy(userId);
+                entity.setUpdateBy(userId);
+                //濡傛灉鏄偍澶囬」鐩�(鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍�
+                if (ProjectCategoryEnum.RESERVE.getType().equals(entity.getProjectPhase())) {
+                    entity.setUsedStatus(ProjectConstant.PASS);
+                }
+                // 绠$悊鍛樹慨鏀圭殑鐩存帴閫氳繃
+                if (SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
+                    entity.setUsedStatus(ProjectConstant.PASS);
+                }
+                if(!checkProjectNameAndIdIsUnique(entity,null)){
+                    throw new RuntimeException("椤圭洰閲嶅锛岄」鐩悕绉般�侀」鐩爜宸插瓨鍦�");
+                }
+                baseMapper.insert(entity);
+                projectId = entity.getId();
+                addPlan(entity.getId()); //娣诲姞璁″垝琛�
+                //娣诲姞椤圭洰涓爣鍗曚綅
+                List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>();
+                for (ProjectInfoWinUnitForm winUnitForm : form.getProjectInfoForm().getWinUnitList()) {
+                    ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null);
+                    projectInfoWinUnit.setId(null);
+                    projectInfoWinUnit.setProjectInfoId(entity.getId());
+                    projectInfoWinUnits.add(projectInfoWinUnit);
+                }
+                if (!CollectionUtils.isEmpty(projectInfoWinUnits)) {
+                    projectInfoWinUnitService.saveBatch(projectInfoWinUnits);
+                }
+                //娣诲姞骞村害鎶曡祫璁″垝
+                List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>();
+                for (ProjectInfoYearPlanForm yearPlanForm : form.getProjectInfoForm().getYearPlanList()) {
+                    ProjectInfoYearPlan yearPlan = ProjectInfoYearPlanForm.getEntityByForm(yearPlanForm, null);
+                    yearPlan.setId(null);
+                    yearPlan.setProjectInfoId(entity.getId());
+                    projectInfoYearPlans.add(yearPlan);
+                }
+                if (!CollectionUtils.isEmpty(projectInfoYearPlans)) {
+                    projectInfoYearPlanService.saveBatch(projectInfoYearPlans);
+                }
             } else {
                 //鏇存柊
-                ((ProjectInfoServiceImpl) AopContext.currentProxy()).update(form.getProjectInfoForm());
-            }
-        }
-        if (ObjectUtil.isNotNull(form.getProjectInvestmentInfoForm())) {
-            if (ObjectUtil.isNull(form.getProjectInvestmentInfoForm().getId())) {
-                form.getProjectInvestmentInfoForm().setProjectId(projectId);
-                projectInvestmentInfoServiceImpl.add(form.getProjectInvestmentInfoForm());
-            } else {
-                projectInvestmentInfoServiceImpl.update(form.getProjectInvestmentInfoForm());
-            }
-        }
-        if (ObjectUtil.isNotNull(form.getProjectInvestmentFundingForm())) {
-            if (ObjectUtil.isNull(form.getProjectInvestmentFundingForm().getId())) {
-                form.getProjectInvestmentFundingForm().setProjectId(projectId);
-                projectInvestmentFundingServiceImpl.add(form.getProjectInvestmentFundingForm());
-            } else {
-                projectInvestmentFundingServiceImpl.update(form.getProjectInvestmentFundingForm());
-            }
-        }
-        if (ObjectUtil.isNotNull(form.getProjectInvestmentPolicyComplianceForm())) {
-            if (ObjectUtil.isNull(form.getProjectInvestmentPolicyComplianceForm().getId())) {
-                form.getProjectInvestmentPolicyComplianceForm().setProjectId(projectId);
-                projectInvestmentPolicyComplianceServiceImpl.add(form.getProjectInvestmentPolicyComplianceForm());
-            } else {
-                projectInvestmentPolicyComplianceServiceImpl.update(form.getProjectInvestmentPolicyComplianceForm());
-            }
-        }
-        if (ObjectUtil.isNotNull(form.getProjectUnitRegistrationInfoForm())) {
-            if (ObjectUtil.isNull(form.getProjectUnitRegistrationInfoForm().getId())) {
-                form.getProjectUnitRegistrationInfoForm().setProjectId(projectId);
-                projectUnitRegistrationInfoServiceImpl.add(form.getProjectUnitRegistrationInfoForm());
-            } else {
-                projectUnitRegistrationInfoServiceImpl.update(form.getProjectUnitRegistrationInfoForm());
-            }
-        }
-        if (ObjectUtil.isNotNull(form.getDocumentInfoForm())) {
-            if (ObjectUtil.isNull(form.getDocumentInfoForm().getProjectId())) {
-                return Result.error("璇峰厛淇濆瓨鎶曡祫绠$悊鍩烘湰淇℃伅");
-            } else {
-                addDoc(form.getDocumentInfoForm());
-            }
-        }
+                ProjectInfo entity = baseMapper.selectById(form.getProjectInfoForm().getId());
 
-        return Result.ok("鎻愪氦鎴愬姛");
+                // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+                Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+                ProjectInfoForm.getEntityByForm(form.getProjectInfoForm(), entity);
+                Long userId = SecurityUtils.getUserId();
+                entity.setUpdateBy(userId);
+                //濡傛灉鏄偍澶囬」鐩�(鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍�
+                if (ProjectCategoryEnum.RESERVE.getType().equals(entity.getProjectPhase())) {
+                    entity.setUsedStatus(ProjectConstant.PASS);
+                }
+                // 绠$悊鍛樹慨鏀圭殑鐩存帴閫氳繃
+                if (SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
+                    entity.setUsedStatus(ProjectConstant.PASS);
+                }
+                if(!checkProjectNameAndIdIsUnique(entity, entity.getId())){
+                    throw new RuntimeException("椤圭洰閲嶅锛岄」鐩悕绉般�侀」鐩爜宸插瓨鍦�");
+                }
+                //鏇存柊椤圭洰淇℃伅
+                baseMapper.updateById(entity);
+                //淇敼椤圭洰涓爣鍗曚綅
+                //鍒犻櫎鍘熸暟鎹�
+                new LambdaUpdateChainWrapper<>(projectInfoWinUnitService.getBaseMapper())
+                        .eq(ProjectInfoWinUnit::getProjectInfoId, entity.getId())
+                        .remove();
+                //娣诲姞椤圭洰涓爣鍗曚綅
+                List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>();
+                for (ProjectInfoWinUnitForm winUnitForm : form.getProjectInfoForm().getWinUnitList()) {
+                    ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null);
+                    projectInfoWinUnit.setId(null);
+                    projectInfoWinUnit.setProjectInfoId(entity.getId());
+                    projectInfoWinUnits.add(projectInfoWinUnit);
+                }
+                if (!CollectionUtils.isEmpty(projectInfoWinUnits)) {
+                    projectInfoWinUnitService.saveBatch(projectInfoWinUnits);
+                }
+
+                //淇敼骞村害鎶曡祫璁″垝
+                //鍒犻櫎鍘熸暟鎹�
+                new LambdaUpdateChainWrapper<>(projectInfoYearPlanService.getBaseMapper())
+                        .eq(ProjectInfoYearPlan::getProjectInfoId, entity.getId())
+                        .remove();
+                //娣诲姞骞村害鎶曡祫璁″垝
+                List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>();
+                for (ProjectInfoYearPlanForm yearPlanForm : form.getProjectInfoForm().getYearPlanList()) {
+                    ProjectInfoYearPlan yearPlan = ProjectInfoYearPlanForm.getEntityByForm(yearPlanForm, null);
+                    yearPlan.setId(null);
+                    yearPlan.setProjectInfoId(entity.getId());
+                    projectInfoYearPlans.add(yearPlan);
+                }
+                if (!CollectionUtils.isEmpty(projectInfoYearPlans)) {
+                    projectInfoYearPlanService.saveBatch(projectInfoYearPlans);
+                }
+            }
+
+            // 鏇存柊鍏跺畠椤圭洰淇℃伅琛�
+            if (Objects.nonNull(form.getProjectInvestmentFundingForm())) {
+                if (Objects.nonNull(form.getProjectInvestmentFundingForm().getId())) {
+                    projectInvestmentFundingServiceImpl.update(form.getProjectInvestmentFundingForm());
+                } else {
+                    form.getProjectInvestmentFundingForm().setProjectId(projectId);
+                    projectInvestmentFundingServiceImpl.add(form.getProjectInvestmentFundingForm());
+                }
+            }
+            if (Objects.nonNull(form.getProjectUnitRegistrationInfoForm())) {
+                if (Objects.nonNull(form.getProjectUnitRegistrationInfoForm().getId())) {
+                    projectUnitRegistrationInfoServiceImpl.update(form.getProjectUnitRegistrationInfoForm());
+                } else {
+                    form.getProjectUnitRegistrationInfoForm().setProjectId(projectId);
+                    projectUnitRegistrationInfoServiceImpl.add(form.getProjectUnitRegistrationInfoForm());
+                }
+
+            }
+        }
+        return Result.ok("淇濆瓨鎴愬姛");
     }
 
     @Override
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java
index a23d64c..d9a9e1b 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.ycl.common.utils.SecurityUtils;
 import com.ycl.domain.entity.ProjectInvestmentFunding;
 import com.ycl.domain.entity.ProjectInvestmentInfo;
@@ -109,9 +110,9 @@
      */
     @Override
     public Result detail(Integer id) {
-        QueryWrapper<ProjectInvestmentFunding> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("project_id",id);
-        ProjectInvestmentFunding entity = baseMapper.selectOne(queryWrapper);
+        ProjectInvestmentFunding entity = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(ProjectInvestmentFunding::getProjectId, id)
+                .one();
         ProjectInvestmentFundingVO vo =new ProjectInvestmentFundingVO();
         if(entity!=null){
             vo = ProjectInvestmentFundingVO.getVoByEntity(entity, null);
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
index c68e060..ca1ea6f 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -102,6 +102,7 @@
         IPage<ProjectProcessVO> page = PageUtil.getPage(query, ProjectProcessVO.class);
         baseMapper.getPage(query, page);
         for (ProjectProcessVO vo : page.getRecords()) {
+            vo.setStatus(vo.getProjectStatus());
             if (Objects.nonNull(vo.getProcessDefId())) {
                 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(vo.getProcessDefId()).singleResult();
                 if (Objects.nonNull(processDefinition)) {
@@ -203,8 +204,6 @@
         SysUser sysUser = SecurityUtils.getLoginUser().getUser();
         identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
         variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
-        //娴嬭瘯瀹圭己
-        variables.put("miss", true);
         // 灏嗚椤圭洰鐨勭敵璇蜂汉锛堜笟涓绘柟锛変綔涓烘祦绋嬩腑鏌愪簺鐜妭鐨勫鐞嗕汉
         variables.put(ProcessConstants.DATA_LAUNCH, "dept:" + createBy);
         ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId + "", variables);
@@ -285,7 +284,7 @@
                 this.getRemainingTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok);
                 break;
             case TaskTypeConstant.TIMELY:
-                this.getTimelyTask(query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok);
+                this.getTimelyTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok);
                 break;
             case TaskTypeConstant.OVERTIME:
                 this.getOvertimeTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok);
@@ -899,11 +898,16 @@
             List<String> handlerNames = new ArrayList<>(2);
             List<Long> handlerUnitIds = new ArrayList<>(2);
             List<String> handlerUnitNames = new ArrayList<>(2);
+            List<String> promoterNames = new ArrayList<>(2);
+            List<String> promoterUnitNames = new ArrayList<>(2);
             vo.setHandlerId(handlerIds);
             vo.setHandlerName(handlerNames);
             vo.setHandlerUnitId(handlerUnitIds);
             vo.setHandlerUnitName(handlerUnitNames);
+            vo.setPromoterName(promoterNames);
+            vo.setPromoterUnitName(promoterUnitNames);
 
+            this.setCandidateInfo(userTask, vo, projectId, processInsId);
             if (Objects.isNull(task)) {
                 // 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛岄渶瑕佷粠鍘嗗彶浠诲姟涓啀鎵句竴涓�
                 List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery()
@@ -914,28 +918,25 @@
                         .desc()
                         .list();
                 if (CollectionUtils.isEmpty(historicTasks)) {
-                    vo.setPromoterName("鏆傛棤");
-                    vo.setPromoterUnitName("鏆傛棤");
                     // 鏈紑濮嬬殑浠诲姟锛屽叾鍏宠仈鐨勭敤鎴风粍杩欎簺閮藉彲浠ヤ粠UserTask涓嬁鍒帮紝鍥犱负鏈韩鏈紑濮嬬殑浠诲姟鏄病鏈塼ask鐨勶紝鎵�浠ヨ繖閲岀洿鎺ユ煡
                     if (StringUtils.isNotBlank(userTask.getAssignee())) {
                         vo.setHandlerType(HandlerTypeEnum.USER);
                         SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee()));
                         if (Objects.nonNull(sysUser)) {
                             handlerIds.add(sysUser.getUserId());
-                            handlerNames.add(sysUser.getNickName());
+                            handlerNames.add(this.getUserShowName(sysUser));
                             if (Objects.nonNull(sysUser.getDept())) {
                                 handlerUnitIds.add(sysUser.getDept().getDeptId());
                                 handlerUnitNames.add(sysUser.getDept().getDeptName());
                             }
                         }
-
                     } else if (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) {
                         List<String> groupIds = userTask.getCandidateGroups();
                         for (String groupId : groupIds) {
                             // 澶勭悊鍙橀噺琛ㄨ揪寮忥紝DATA_LAUNCH鍙彲鑳芥槸閮ㄩ棬涓嶄細鏄鑹诧紝鍥犱负浠h〃鐨勬槸涓氫富閮ㄩ棬
                             if (groupId.contains(ProcessConstants.DATA_LAUNCH)) {
                                 vo.setHandlerType(HandlerTypeEnum.DEPT);
-                                this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT);
+                                this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT, 1);
                             } else if (groupId.startsWith("dept")) {   // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1
                                 vo.setHandlerType(HandlerTypeEnum.DEPT);
                                 String[] split = groupId.split(":");
@@ -945,6 +946,7 @@
                                     if (Objects.nonNull(dept)) {
                                         handlerUnitIds.add(dept.getDeptId());
                                         handlerUnitNames.add(dept.getDeptName());
+                                        handlerNames.add(this.getDeptLeaderShowName(dept));
                                     }
                                 }
                             } else {
@@ -970,9 +972,11 @@
                     SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
                     if (Objects.nonNull(handlerUser)) {
                         handlerIds.add(handlerUserId);
-                        handlerNames.add(handlerUser.getNickName());
-                        vo.setActualHandlerUserId(historicTasks.get(0).getAssignee());
-                        vo.setActualHandlerUserName(handlerUser.getNickName());
+                        handlerNames.add(this.getUserShowName(handlerUser));
+                        if (Objects.nonNull(handlerUser.getDept())) {
+                            handlerUnitNames.add(handlerUser.getDept().getDeptName());
+                            handlerUnitIds.add(handlerUser.getDept().getDeptId());
+                        }
                     }
                     vo.setTaskDefinitionKey(historicTasks.get(0).getTaskDefinitionKey());
                     this.setPromoterAndHandler(vo, historicTasks.get(0).getIdentityLinks());
@@ -1004,6 +1008,9 @@
      */
     private List<CustomerTaskVO> getFinishedProcessTaskInfo(List<UserTask> userTasks, String processInsId, String processDefId) {
         HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+        if (Objects.isNull(hisProcess)) {
+            return new ArrayList<>();
+        }
         List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
             CustomerTaskVO vo = new CustomerTaskVO();
             vo.setProcessInsId(hisProcess.getId());
@@ -1073,18 +1080,19 @@
         taskVO.setProcessInsId(task.getProcessInstanceId());
         taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey());
 
-        // 娴佺▼鍙戣捣浜轰俊鎭�
-        this.setPromoterInfo(taskVO);
-
         // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist
         List<Long> handlerIds = new ArrayList<>(2);
         List<String> handlerNames = new ArrayList<>(2);
         List<Long> handlerUnitIds = new ArrayList<>(2);
         List<String> handlerUnitNames = new ArrayList<>(2);
+        List<String> promoterNames = new ArrayList<>(2);
+        List<String> promoterUnitNames = new ArrayList<>(2);
         taskVO.setHandlerId(handlerIds);
         taskVO.setHandlerName(handlerNames);
         taskVO.setHandlerUnitId(handlerUnitIds);
         taskVO.setHandlerUnitName(handlerUnitNames);
+        taskVO.setPromoterName(promoterNames);
+        taskVO.setPromoterUnitName(promoterUnitNames);
 
         // 娴佺▼澶勭悊浜轰俊鎭�
         List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
@@ -1100,10 +1108,12 @@
                 SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
                 if (Objects.nonNull(sysUser)) {
                     taskVO.getHandlerId().add(sysUser.getUserId());
-                    taskVO.getHandlerName().add(sysUser.getNickName());
+                    taskVO.getHandlerName().add(this.getUserShowName(sysUser));
                     if (Objects.nonNull(sysUser.getDept())) {
                         taskVO.getHandlerUnitId().add(sysUser.getDept().getDeptId());
                         taskVO.getHandlerUnitName().add(sysUser.getDept().getDeptName());
+                        taskVO.getPromoterName().add(this.getUserShowName(sysUser));
+                        taskVO.getPromoterUnitName().add(sysUser.getDept().getDeptName());
                     }
                 }
                 // 缁戝畾鐨勬槸瑙掕壊鎴栬�呴儴闂�
@@ -1117,6 +1127,8 @@
                         if (Objects.nonNull(dept)) {
                             taskVO.getHandlerUnitId().add(dept.getDeptId());
                             taskVO.getHandlerUnitName().add(dept.getDeptName());
+                            taskVO.getPromoterName().add(this.getDeptLeaderShowName(dept));
+                            taskVO.getPromoterUnitName().add(dept.getDeptName());
                         }
                     }
                 } else {
@@ -1128,7 +1140,6 @@
                     }
                 }
             }
-
             this.distinctVo(taskVO);
         }
     }
@@ -1187,7 +1198,7 @@
      * @param result
      * @return
      */
-    private List<CustomerTaskVO> getTimelyTask(String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) {
+    private List<CustomerTaskVO> getTimelyTask(Long projectId, String processDefinitionId, String processInsId, String taskName, Integer pageNum, Integer pageSize, Result result) {
         int startNum = pageSize * (pageNum - 1);
         int endNum = startNum + pageSize;
 
@@ -1270,11 +1281,16 @@
             List<String> handlerNames = new ArrayList<>(2);
             List<Long> handlerUnitIds = new ArrayList<>(2);
             List<String> handlerUnitNames = new ArrayList<>(2);
+            List<String> promoterNames = new ArrayList<>(2);
+            List<String> promoterUnitNames = new ArrayList<>(2);
             vo.setHandlerId(handlerIds);
             vo.setHandlerName(handlerNames);
             vo.setHandlerUnitId(handlerUnitIds);
             vo.setHandlerUnitName(handlerUnitNames);
+            vo.setPromoterName(promoterNames);
+            vo.setPromoterUnitName(promoterUnitNames);
 
+            this.setCandidateInfo(userTask, vo, projectId, processInsId);
             HistoricTaskInstance hisTask = keyMap.get(userTask.getId());
             if (Objects.nonNull(hisTask)) {
                 vo.setTaskStatus(TaskStatusEnum.FINISHED);
@@ -1288,9 +1304,7 @@
                 SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
                 if (Objects.nonNull(handlerUser)) {
                     vo.getHandlerId().add(handlerUserId);
-                    vo.getHandlerName().add(handlerUser.getNickName());
-                    vo.setActualHandlerUserId(hisTask.getAssignee());
-                    vo.setActualHandlerUserName(handlerUser.getNickName());
+                    vo.getHandlerName().add(this.getUserShowName(handlerUser));
                 }
                 vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey());
                 this.setPromoterAndHandler(vo, hisTask.getIdentityLinks());
@@ -1301,6 +1315,26 @@
         }).collect(Collectors.toList());
         result.data(vos);
         return vos;
+    }
+
+    /**
+     * 鐢ㄦ埛鍚嶇О鍚庨潰璺熺數璇濆彿鐮�
+     *
+     * @param user
+     * @return
+     */
+    private String getUserShowName(SysUser user) {
+        return user.getNickName() + (StringUtils.isNotBlank(user.getPhonenumber()) ? "(" + user.getPhonenumber() + ")" : "");
+    }
+
+    /**
+     * 閮ㄩ棬璐熻矗浜哄悕绉板悗闈㈣窡鐢佃瘽鍙风爜
+     *
+     * @param dept
+     * @return
+     */
+    private String getDeptLeaderShowName(SysDept dept) {
+        return dept.getLeader() + (StringUtils.isNotBlank(dept.getPhone()) ? "(" + dept.getPhone() + ")" : "");
     }
 
     /**
@@ -1610,10 +1644,14 @@
             List<String> handlerNames = new ArrayList<>(2);
             List<Long> handlerUnitIds = new ArrayList<>(2);
             List<String> handlerUnitNames = new ArrayList<>(2);
+            List<String> promoterNames = new ArrayList<>(2);
+            List<String> promoterUnitNames = new ArrayList<>(2);
             vo.setHandlerId(handlerIds);
             vo.setHandlerName(handlerNames);
             vo.setHandlerUnitId(handlerUnitIds);
             vo.setHandlerUnitName(handlerUnitNames);
+            vo.setPromoterName(promoterNames);
+            vo.setPromoterUnitName(promoterUnitNames);
 
             vo.setProcessInsId(process.getId());
             vo.setProcessDefId(processDefinitionId);
@@ -1621,6 +1659,9 @@
             vo.setTaskName(userTask.getName());
             vo.setProcessName(process.getProcessDefinitionName());
             vo.setTaskStatus(TaskStatusEnum.NOT_START);
+
+            this.setCandidateInfo(userTask, vo, projectId, processInsId);
+
             // 鏈紑濮嬬殑浠诲姟锛屽叾鍏宠仈鐨勭敤鎴风粍杩欎簺閮藉彲浠ヤ粠UserTask涓嬁鍒帮紝鍥犱负鏈韩鏈紑濮嬬殑浠诲姟鏄病鏈塼ask鐨勶紝鎵�浠ヨ繖閲岀洿鎺ユ煡
             if (StringUtils.isNotBlank(userTask.getAssignee())) {
                 vo.setHandlerType(HandlerTypeEnum.USER);
@@ -1639,7 +1680,7 @@
                     // 澶勭悊鍙橀噺琛ㄨ揪寮忥紝DATA_LAUNCH鍙彲鑳芥槸閮ㄩ棬涓嶄細鏄鑹诧紝鍥犱负浠h〃鐨勬槸涓氫富閮ㄩ棬
                     if (groupId.contains(ProcessConstants.DATA_LAUNCH)) {
                         vo.setHandlerType(HandlerTypeEnum.DEPT);
-                        this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT);
+                        this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT, 1);
                     } else if (groupId.startsWith("dept")) {   // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1
                         vo.setHandlerType(HandlerTypeEnum.DEPT);
                         String[] split = groupId.split(":");
@@ -1682,10 +1723,10 @@
 
     /**
      * 澶勭悊娴佺▼鍙橀噺-涓氫富鍗曚綅
-     *
+     * @param setType  0 璁剧疆璐d换鍗曚綅   1 璁剧疆鍔炵悊鍗曚綅
      * @param vo
      */
-    private void varYzReview(CustomerTaskVO vo, Long projectId, String processInsId, HandlerTypeEnum type) {
+    private void varYzReview(CustomerTaskVO vo, Long projectId, String processInsId, HandlerTypeEnum type, Integer setType) {
         ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(projectProcessMapper)
                 .eq(ProjectProcess::getProjectId, projectId)
                 .eq(ProjectProcess::getProcessInsId, processInsId)
@@ -1702,8 +1743,14 @@
         } else if (HandlerTypeEnum.DEPT.equals(type)) {
             SysDept dept = deptService.selectDeptById(projectProcess.getDataLaunch());
             if (Objects.nonNull(dept)) {
-                vo.getHandlerUnitId().add(dept.getDeptId());
-                vo.getHandlerUnitName().add(dept.getDeptName());
+                if (setType == 1) {
+                    vo.getHandlerUnitId().add(dept.getDeptId());
+                    vo.getHandlerUnitName().add(dept.getDeptName());
+                    vo.getHandlerName().add(this.getDeptLeaderShowName(dept));
+                } else {
+                    vo.getPromoterUnitName().add(dept.getDeptName());
+                    vo.getPromoterName().add(this.getDeptLeaderShowName(dept));
+                }
             }
         } else if (HandlerTypeEnum.ROLE.equals(type)) {
             SysRole role = sysRoleService.selectRoleById(projectProcess.getDataLaunch());
@@ -1741,6 +1788,52 @@
         return totalNum - num;
     }
 
+    /**
+     * 璁剧疆鍊欓�変汉淇℃伅/璐d换鍗曚綅
+     *
+     * @param userTask
+     * @param vo
+     * @param projectId
+     * @param processInsId
+     */
+    private void setCandidateInfo(UserTask userTask, CustomerTaskVO vo, Long projectId, String processInsId) {
+        if (StringUtils.isNotBlank(userTask.getAssignee())) {
+            SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee()));
+            if (Objects.nonNull(sysUser)) {
+                if (Objects.nonNull(sysUser.getDept())) {
+                    // 濡傛灉鏄寚瀹氱殑鏌愪釜浜猴紝閭d箞璐d换鍗曚綅鏄繖涓汉鎵�鍦ㄧ殑閮ㄩ棬
+                    vo.getPromoterUnitName().add(sysUser.getDept().getDeptName());
+                    vo.getPromoterName().add(this.getUserShowName(sysUser));
+                }
+            }
+        } else if (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) {
+            List<String> groupIds = userTask.getCandidateGroups();
+            for (String groupId : groupIds) {
+                // 澶勭悊鍙橀噺琛ㄨ揪寮忥紝DATA_LAUNCH鍙彲鑳芥槸閮ㄩ棬涓嶄細鏄鑹诧紝鍥犱负浠h〃鐨勬槸涓氫富閮ㄩ棬
+                if (groupId.contains(ProcessConstants.DATA_LAUNCH)) {
+                    vo.setHandlerType(HandlerTypeEnum.DEPT);
+                    this.varYzReview(vo, projectId, processInsId, HandlerTypeEnum.DEPT, 0);
+                } else if (groupId.startsWith("dept")) {   // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1
+                    vo.setHandlerType(HandlerTypeEnum.DEPT);
+                    String[] split = groupId.split(":");
+                    if (split.length > 1) {
+                        // 閮ㄩ棬
+                        SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1]));
+                        if (Objects.nonNull(dept)) {
+                            vo.getPromoterUnitName().add(dept.getDeptName());
+                            vo.getPromoterName().add(this.getDeptLeaderShowName(dept));
+                        }
+                    }
+                } else {
+                    vo.setHandlerType(HandlerTypeEnum.ROLE);
+                    SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId));
+                    if (Objects.nonNull(role)) {
+                        vo.getPromoterUnitName().add(role.getRoleName());
+                    }
+                }
+            }
+        }
+    }
 
     /**
      * 璁剧疆浠诲姟鐨勫彂璧蜂汉&澶勭悊浜�   鍙湁寰呭姙浠诲姟鍜屽凡瀹屾垚浠诲姟鎵嶄細鎺夎繖涓柟娉�
@@ -1749,7 +1842,7 @@
      * @param identityLinkInfos 濡傛灉鏄凡瀹屾垚鐨勪换鍔★紝鐢ㄨ繖涓幓鍙栧叧鑱旂殑鐢ㄦ埛/鐢ㄦ埛缁�
      */
     private void setPromoterAndHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) {
-        this.setPromoterInfo(taskVO);
+//        this.setPromoterInfo(taskVO);
 
         // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist
         List<Long> handlerIds = new ArrayList<>(2);
@@ -1774,7 +1867,7 @@
                     if (Objects.nonNull(sysUser)) {
                         taskVO.setHandlerType(HandlerTypeEnum.USER);
                         handlerIds.add(sysUser.getUserId());
-                        handlerNames.add(sysUser.getNickName());
+                        handlerNames.add(this.getUserShowName(sysUser));
                         if (Objects.nonNull(sysUser.getDept())) {
                             handlerUnitIds.add(sysUser.getDept().getDeptId());
                             handlerUnitNames.add(sysUser.getDept().getDeptName());
@@ -1811,7 +1904,7 @@
                     SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
                     if (Objects.nonNull(sysUser)) {
                         handlerIds.add(sysUser.getUserId());
-                        handlerNames.add(sysUser.getNickName());
+                        handlerNames.add(this.getUserShowName(sysUser));
                         if (Objects.nonNull(sysUser.getDept())) {
                             handlerUnitIds.add(sysUser.getDept().getDeptId());
                             handlerUnitNames.add(sysUser.getDept().getDeptName());
@@ -1841,7 +1934,6 @@
                 }
             }
         }
-
         this.distinctVo(taskVO);
     }
 
@@ -1851,41 +1943,41 @@
      * @param taskVO
      */
     private void setPromoterInfo(CustomerTaskVO taskVO) {
-        // 鍙戣捣浜哄簲涓轰笂涓�鑺傜偣鐨勫鐞嗕汉
-        List<String> beforeNodeKey = taskCommonService.getBeforeNodeInfo(taskVO.getProcessDefId(), taskVO.getTaskDefinitionKey());
-        List<SysUser> userList = beforeNodeKey.stream().map(key -> {
-            List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
-                    .processInstanceId(taskVO.getProcessInsId())
-                    .taskDefinitionKey(key)
-                    .orderByHistoricTaskInstanceStartTime()
-                    .desc()
-                    .list(); // 涔嬫墍浠ョ敤list鏄洜涓哄鏋滄煇涓换鍔¤椹冲洖杩囷紝涓斿鏋滆浠诲姟鍐嶆鎵ц鏃朵細鏈夊鏉℃暟鎹紝鍙栨渶鏂扮殑涓�鏉�
-            if (!CollectionUtils.isEmpty(historicTaskInstances)) {
-                // 瀹為檯棰嗗彇杩欎釜浠诲姟鐨勪汉锛屼篃灏辨槸澶勭悊浜�
-                String assignee = historicTaskInstances.get(0).getAssignee();
-                SysUser startUser = sysUserService.selectUserById(Long.parseLong(assignee));
-                return startUser;
-            } else {
-                return null;
-            }
-        }).filter(user -> Objects.nonNull(user)).collect(Collectors.toList());
-        if (CollectionUtils.isEmpty(userList)) {
-            taskVO.setPromoterName("鏆傛棤");
-            taskVO.setPromoterUnitName("鏆傛棤");
-        } else {
-            taskVO.setPromoterId(userList.stream().map(user -> {
-                return user.getUserId() + "";
-            }).collect(Collectors.joining("銆�")));
-            taskVO.setPromoterName(userList.stream().map(user -> {
-                return user.getNickName();
-            }).collect(Collectors.joining("銆�")));
-            taskVO.setPromoterUnitId(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> {
-                return user.getDept().getDeptId() + "";
-            }).collect(Collectors.joining("銆�")));
-            taskVO.setPromoterUnitName(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> {
-                return user.getDept().getDeptName() + "";
-            }).collect(Collectors.joining("銆�")));
-        }
+//        // 鍙戣捣浜哄簲涓轰笂涓�鑺傜偣鐨勫鐞嗕汉
+//        List<String> beforeNodeKey = taskCommonService.getBeforeNodeInfo(taskVO.getProcessDefId(), taskVO.getTaskDefinitionKey());
+//        List<SysUser> userList = beforeNodeKey.stream().map(key -> {
+//            List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
+//                    .processInstanceId(taskVO.getProcessInsId())
+//                    .taskDefinitionKey(key)
+//                    .orderByHistoricTaskInstanceStartTime()
+//                    .desc()
+//                    .list(); // 涔嬫墍浠ョ敤list鏄洜涓哄鏋滄煇涓换鍔¤椹冲洖杩囷紝涓斿鏋滆浠诲姟鍐嶆鎵ц鏃朵細鏈夊鏉℃暟鎹紝鍙栨渶鏂扮殑涓�鏉�
+//            if (!CollectionUtils.isEmpty(historicTaskInstances)) {
+//                // 瀹為檯棰嗗彇杩欎釜浠诲姟鐨勪汉锛屼篃灏辨槸澶勭悊浜�
+//                String assignee = historicTaskInstances.get(0).getAssignee();
+//                SysUser startUser = sysUserService.selectUserById(Long.parseLong(assignee));
+//                return startUser;
+//            } else {
+//                return null;
+//            }
+//        }).filter(user -> Objects.nonNull(user)).collect(Collectors.toList());
+//        if (CollectionUtils.isEmpty(userList)) {
+//            taskVO.setPromoterName("鏆傛棤");
+//            taskVO.setPromoterUnitName("鏆傛棤");
+//        } else {
+//            taskVO.setPromoterId(userList.stream().map(user -> {
+//                return user.getUserId() + "";
+//            }).collect(Collectors.joining("銆�")));
+//            taskVO.setPromoterName(userList.stream().map(user -> {
+//                return this.getUserShowName(user);
+//            }).collect(Collectors.joining("銆�")));
+//            taskVO.setPromoterUnitId(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> {
+//                return user.getDept().getDeptId() + "";
+//            }).collect(Collectors.joining("銆�")));
+//            taskVO.setPromoterUnitName(userList.stream().filter(user -> Objects.nonNull(user.getDept())).map(user -> {
+//                return user.getDept().getDeptName() + "";
+//            }).collect(Collectors.joining("銆�")));
+//        }
     }
 
     /**
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java
index 0b5678b..8bd303d 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.ycl.common.utils.SecurityUtils;
 import com.ycl.domain.entity.ProjectInvestmentInfo;
 import com.ycl.domain.entity.ProjectUnitRegistrationInfo;
@@ -116,9 +117,9 @@
      */
     @Override
     public Result detail(Integer id) {
-        QueryWrapper<ProjectUnitRegistrationInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("project_id", id);
-        ProjectUnitRegistrationInfo entity = baseMapper.selectOne(queryWrapper);
+        ProjectUnitRegistrationInfo entity = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(ProjectUnitRegistrationInfo::getProjectId, id)
+                .one();
         ProjectUnitRegistrationInfoVO vo = new ProjectUnitRegistrationInfoVO();
         if (entity != null) {
             vo = ProjectUnitRegistrationInfoVO.getVoByEntity(entity, null);
diff --git a/business/src/main/resources/mapper/ProjectEngineeringMapper.xml b/business/src/main/resources/mapper/ProjectEngineeringMapper.xml
new file mode 100644
index 0000000..5b9b9b5
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectEngineeringMapper.xml
@@ -0,0 +1,64 @@
+<?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="com.ycl.mapper.ProjectEngineeringMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectEngineeringVO">
+        <result column="project_info_id" property="projectInfoId" />
+        <result column="projectInfoName" property="projectInfoName" />
+        <result column="project_name" property="projectName" />
+        <result column="project_type" property="projectType" />
+        <result column="investment_amount" property="investmentAmount" />
+        <result column="status" property="status" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TPE.project_info_id,
+            TPE.project_name,
+            TPE.project_type,
+            TPE.investment_amount,
+            TPE.status,
+            TPE.id
+        FROM
+            t_project_engineering TPE
+        WHERE
+            TPE.id = #{id} AND TPE.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TPE.project_info_id,
+            TPE.project_name,
+            TPE.project_type,
+            TPE.investment_amount,
+            TPE.status,
+            TPE.id,
+            TPI.project_name as projectInfoName
+        FROM
+            t_project_engineering TPE
+                INNER JOIN t_project_info TPI ON TPI.id = TPE.project_info_id AND TPI.deleted = 0
+        WHERE
+            TPE.deleted = 0
+            <if test="query.projectName != null and query.projectName != ''">
+                AND TPE.project_name LIKE concat('%', #{query.projectName}, '%')
+            </if>
+            <if test="query.projectInfoId != null">
+                AND TPE.project_info_id = #{query.projectInfoId}
+            </if>
+            <if test="query.status != null and query.status != ''">
+                AND TPE.status = #{query.status}
+            </if>
+            <if test="query.projectType != null and query.projectType != ''">
+                AND TPE.project_type = #{query.projectType}
+            </if>
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectInfoMapper.xml b/business/src/main/resources/mapper/ProjectInfoMapper.xml
index fffefae..ea83801 100644
--- a/business/src/main/resources/mapper/ProjectInfoMapper.xml
+++ b/business/src/main/resources/mapper/ProjectInfoMapper.xml
@@ -26,6 +26,8 @@
             TPI.project_phase,
             TPI.tag,
             TPI.competent_department,
+            TPI.competent_department_phone,
+            TPI.competent_department_person,
             TPI.area,
             TPI.management_centralization,
             TPI.project_approval_type,
@@ -74,7 +76,7 @@
             TPIF.county_fiscal_investment as TPIF_county_fiscal_investment,TPIF.county_special_fund_investment as TPIF_county_special_fund_investment,
             TPIF.domestic_loan_total as TPIF_domestic_loan_total,TPIF.bank_loan as TPIF_bank_loan,TPIF.foreign_investment_total as TPIF_foreign_investment_total,
             TPIF.enterprise_self_raised_total as TPIF_enterprise_self_raised_total,TPIF.other_investment_total as TPIF_other_investment_total,
-            TPIF.dept_bond as TPIF_dept_bond,TPIF.national_debt as TPID_national_debt,
+            TPIF.dept_bond as TPIF_dept_bond,TPIF.national_debt as TPIF_national_debt, TPIF.additional_national_debt as TPIF_additional_national_debt,
             TPII.be_cross_region as TPII_be_cross_region,TPII.construction_location as TPII_construction_location,
             TPII.detailed_address as TPII_detailed_address,TPII.be_compensation_project as TPII_be_compensation_project,TPII.compensation_reason as TPII_compensation_reason,
             TPII.planned_start_date as TPII_planned_start_date,TPII.expected_completion_date as TPII_expected_completion_date,
@@ -124,7 +126,12 @@
                 and TPI.project_type = #{query.projectType}
             </if>
             <if test="query.importanceType !=null and query.importanceType!=''">
-                and TPI.importance_type = #{query.importanceType}
+                and (
+                TPI.importance_type like concat('%',#{query.importanceType},'%')
+                <if test="query.importanceType == 'normal'">
+                    or TPI.importance_type is null or TPI.importance_type = ''
+                </if>
+                )
             </if>
             <if test="query.tag !=null and query.tag!=''">
                 and TPI.tag like concat('%',#{query.tag},'%')
@@ -132,17 +139,15 @@
             <if test="query.projectStatus !=null and query.projectStatus!=''">
                 and TPI.project_status = #{query.projectStatus}
             </if>
-            <if test="query.projectPhase !=null and query.projectPhase!=''">
+            <if test="query.projectPhase !=null and query.projectPhase!='' and query.projectPhase!=6 and query.projectPhase!=5">
                 and TPI.project_phase = #{query.projectPhase}
             </if>
-<!--            <if test=" assignmentStatus !=null and assignmentStatus!=''">-->
-<!--                and TPI.project_phase = #{projectPhase}-->
-<!--            </if>-->
+            /* 鍙涓嶆槸6灏辨煡瀹℃牳閫氳繃鐨勶紝6鏄」鐩腑蹇� */
+            <if test="query.projectPhase != 6">
+                and TPI.used_status = 2
+            </if>
             <if test="query.fundType !=null and query.fundType!=''">
                 and TPI.fund_type = #{query.fundType}
-            </if>
-            <if test="query.projectPhase !=null and query.projectPhase!=''">
-                and TPI.project_phase = #{query.projectPhase}
             </if>
             <if test="query.investType !=null and query.investType!=''">
                 and TPI.invest_type = #{query.investType}
@@ -153,28 +158,20 @@
             <if test="query.projectStartTime !=null and query.projectEndTime !=null">
                 and TPI.create_project_time between #{query.projectStartTime} and #{query.projectEndTime}
             </if>
-            <if test="query.reserveOrPrevious != null and query.reserveOrPrevious == 'reserve'">
-                and TPP.process_ins_id is null
-            </if>
-            <if test="query.reserveOrPrevious != null and query.reserveOrPrevious == 'previous'">
-                and TPP.process_ins_id is not null
-            </if>
-            <if test="query.projectCategory != 6">
-                and TPI.used_status = 2
-            </if>
-            <if test="query.projectCategory == 3">
-                and (TPI.project_status = 'working' or TPI.project_status = 'stop')
-            </if>
-            <if test="query.projectCategory == 6">
-<!--                <if test="query.role == 0">-->
-<!--                    and TPI.used_status != 2-->
+<!--            <if test="query.reserveOrPrevious != null and query.reserveOrPrevious == 'reserve'">-->
+<!--                and TPP.process_ins_id is null-->
+<!--            </if>-->
+<!--            <if test="query.reserveOrPrevious != null and query.reserveOrPrevious == 'previous'">-->
+<!--                and TPP.process_ins_id is not null-->
+<!--            </if>-->
+<!--            <if test="query.projectPhase == 3">-->
+<!--                and (TPI.project_status = 'working' or TPI.project_status = 'stop')-->
+<!--            </if>-->
+<!--                <if test="query.role != null and query.role == 1">-->
+<!--                    and TPI.competent_department = #{query.competentDepartment}-->
 <!--                </if>-->
-                <if test="query.role == 1">
-                    and TPI.used_status = 1 and  FIND_IN_SET(#{query.competentDepartment}, TPI.competent_department) > 0
-                </if>
-            </if>
             <!-- 涓氫富鏁版嵁鏉冮檺 -->
-            <if test="query.role == 0">
+            <if test="query.role != null and query.role == 0">
                 ${query.params.dataScope}
             </if>
         </where>
@@ -197,7 +194,8 @@
     <select id="selectProjectDetailByIds" resultType="com.ycl.domain.vo.ProjectVO">
         select
         TPI.id as id,TPI.project_name,TPI.project_code,TPI.attract_investment,TPI.content,TPI.construction_nature,TPI.project_type,TPI.project_sub_type,TPI.project_status,TPI.fund_type,TPI.invest_type,TPI.project_phase,
-        TPI.tag,TPI.competent_department,TPI.area,TPI.management_centralization,TPI.project_approval_type,TPI.importance_type,TPI.year,TPI.year_invest_amount,TPI.create_project_time,TPI.plan_start_time,
+        TPI.tag,TPI.competent_department, TPI.competent_department_person, TPI.competent_department_phone,
+        TPI.area,TPI.management_centralization,TPI.project_approval_type,TPI.importance_type,TPI.year,TPI.year_invest_amount,TPI.create_project_time,TPI.plan_start_time,
         TPI.plan_complete_time,TPI.win_unit,TPI.win_amount,TPI.win_time,TPI.project_address,TPI.longitude,TPI.latitude,
         TPI.project_owner_unit,TPI.project_contact_person,TPI.contact,TPI.gmt_create,TPI.gmt_update,TPI.update_by,TPI.create_by,
         TPIF.id,TPIF.project_id,TPIF.total_investment,TPIF.principal,TPIF.government_investment_total,TPIF.central_investment_total,TPIF.central_budget_investment,TPIF.central_fiscal_investment,TPIF.central_special_bond_investment,
@@ -208,6 +206,7 @@
         TPIF.create_by,TPIF.gmt_update,TPIF.update_by,
         TPIF.dept_bond,
         TPIF.national_debt,
+        TPIF.additional_national_debt,
         TPII.id,TPII.project_id,TPII.be_cross_region,TPII.construction_location,TPII.detailed_address,TPII.be_compensation_project,TPII.compensation_reason,TPII.planned_start_date,
         TPII.expected_completion_date,TPII.national_industry_classification,TPII.industry_classification,TPII.project_nature,TPII.project_attribute,
         TPII.use_earth,TPII.content_scale,TPII.code,TPII.gmt_create,TPII.create_by,TPII.gmt_update, TPII.update_by,
diff --git a/business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml b/business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml
index 3ccb767..f91aca6 100644
--- a/business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml
+++ b/business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml
@@ -9,6 +9,7 @@
         <result column="principal" property="principal" />
         <result column="dept_bond" property="deptBond" />
         <result column="national_debt" property="nationalDebt" />
+        <result column="additional_national_debt" property="additionalNationalDebt" />
         <result column="government_investment_total" property="governmentInvestmentTotal" />
         <result column="central_investment_total" property="centralInvestmentTotal" />
         <result column="central_budget_investment" property="centralBudgetInvestment" />
@@ -49,6 +50,7 @@
             TPIF.project_id,
             TPIF.dept_bond,
             TPIF.national_debt,
+            TPIF.additional_national_debt,
             TPIF.total_investment,
             TPIF.principal,
             TPIF.government_investment_total,
@@ -91,6 +93,7 @@
             TPIF.project_id,
             TPIF.dept_bond,
             TPIF.national_debt,
+            TPIF.additional_national_debt,
             TPIF.total_investment,
             TPIF.principal,
             TPIF.government_investment_total,
diff --git a/business/src/main/resources/mapper/ProjectProcessMapper.xml b/business/src/main/resources/mapper/ProjectProcessMapper.xml
index 80450e4..c51819b 100644
--- a/business/src/main/resources/mapper/ProjectProcessMapper.xml
+++ b/business/src/main/resources/mapper/ProjectProcessMapper.xml
@@ -9,17 +9,14 @@
         <result column="project_code" property="projectCode" />
         <result column="content" property="content" />
         <result column="project_type" property="projectType" />
+        <result column="investmentAmount" property="investmentAmount" />
         <result column="project_status" property="projectStatus" />
         <result column="fund_type" property="fundType" />
         <result column="invest_type" property="investType" />
         <result column="project_phase" property="projectPhase" />
         <result column="tag" property="tag" />
-<!--        <result column="competent_department" property="competentDepartment" />-->
-<!--        <result column="management_centralization" property="managementCentralization" />-->
         <result column="project_approval_type" property="projectApprovalType" />
         <result column="importance_type" property="importanceType" />
-<!--        <result column="year" property="year" />-->
-<!--        <result column="year_invest_amount" property="yearInvestAmount" />-->
         <result column="create_project_time" property="createProjectTime" />
         <result column="plan_start_time" property="planStartTime" />
         <result column="plan_complete_time" property="planCompleteTime" />
@@ -34,10 +31,42 @@
         <result column="create_by" property="createBy" />
         <result column="process_def_id" property="processDefId" />
         <result column="process_ins_id" property="processInsId" />
-<!--        <association property="id" column=""-->
     </resultMap>
 
+    <resultMap id="PageResultMap" type="com.ycl.domain.vo.ProjectProcessVO">
+        <id column="id" property="id"/>
+        <result column="project_name" property="projectName" />
+        <result column="project_code" property="projectCode" />
+        <result column="content" property="content" />
+        <result column="project_type" property="projectType" />
+        <result column="investmentAmount" property="investmentAmount" />
+        <result column="project_status" property="projectStatus" />
+        <result column="fund_type" property="fundType" />
+        <result column="invest_type" property="investType" />
+        <result column="project_phase" property="projectPhase" />
+        <result column="tag" property="tag" />
+        <result column="project_approval_type" property="projectApprovalType" />
+        <result column="importance_type" property="importanceType" />
+        <result column="create_project_time" property="createProjectTime" />
+        <result column="plan_start_time" property="planStartTime" />
+        <result column="plan_complete_time" property="planCompleteTime" />
+        <result column="project_address" property="projectAddress" />
+        <result column="longitude" property="longitude" />
+        <result column="latitude" property="latitude" />
+        <result column="project_owner_unit" property="projectOwnerUnit" />
+        <result column="project_owner_unit_name" property="projectOwnerUnitName" />
+        <result column="project_contact_person" property="projectContactPerson" />
+        <result column="contact" property="contact" />
+        <result column="update_by" property="updateBy" />
+        <result column="create_by" property="createBy" />
+        <result column="process_def_id" property="processDefId" />
+        <result column="process_ins_id" property="processInsId" />
+        <collection property="children" ofType="com.ycl.domain.vo.ProjectEngineeringVO" select="getProjectEngineering" column="id"></collection>
+    </resultMap>
 
+    <select id="getProjectEngineering" parameterType="long" resultMap="com.ycl.mapper.ProjectEngineeringMapper.BaseResultMap">
+        SELECT * FROM t_project_engineering WHERE project_info_id = #{id} and deleted = 0 ORDER BY gmt_create
+    </select>
 
 
     <select id="getById" resultMap="BaseResultMap">
@@ -52,14 +81,16 @@
     </select>
 
 
-    <select id="getPage" resultMap="BaseResultMap">
+    <select id="getPage" resultMap="PageResultMap">
         SELECT
             PI.*,
             TPP.process_def_id,
             TPP.process_ins_id,
+            TPIF.total_investment as investmentAmount,
             d.dept_name as project_owner_unit_name
         FROM
             t_project_info PI
+                LEFT JOIN t_project_investment_funding TPIF ON TPIF.project_id = PI.id AND TPIF.deleted = 0
                 LEFT JOIN t_project_process TPP ON TPP.project_id = PI.id AND TPP.deleted = 0
                 LEFT JOIN sys_dept d ON d.dept_id = PI.project_owner_unit
         <where>
diff --git a/common/pom.xml b/common/pom.xml
index 7ee7272..8d500a4 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -20,7 +20,20 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jsqlparser</artifactId>
+                    <groupId>com.github.jsqlparser</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
+
+        <dependency>
+            <groupId>com.github.jsqlparser</groupId>
+            <artifactId>jsqlparser</artifactId>
+            <version>4.2</version>
+        </dependency>
+
         <!-- lombok -->
         <dependency>
             <groupId>org.projectlombok</groupId>
diff --git a/common/src/main/java/com/ycl/common/enums/YesOrNo.java b/common/src/main/java/com/ycl/common/enums/YesOrNo.java
new file mode 100644
index 0000000..f0d4a2b
--- /dev/null
+++ b/common/src/main/java/com/ycl/common/enums/YesOrNo.java
@@ -0,0 +1,32 @@
+package com.ycl.common.enums;
+
+/**
+ * 鏄�/鍚�
+ *
+ * @author ycl
+ */
+public enum YesOrNo
+{
+    NO(0, "涓嶆槸"),
+    YES(1, "鏄�")
+    ;
+
+    private final Integer code;
+    private final String info;
+
+    YesOrNo(Integer code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public Integer getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+}
diff --git a/common/src/main/java/com/ycl/common/enums/business/ProjectCategoryEnum.java b/common/src/main/java/com/ycl/common/enums/business/ProjectCategoryEnum.java
index f152d46..94bfd53 100644
--- a/common/src/main/java/com/ycl/common/enums/business/ProjectCategoryEnum.java
+++ b/common/src/main/java/com/ycl/common/enums/business/ProjectCategoryEnum.java
@@ -8,10 +8,10 @@
 @AllArgsConstructor
 public enum ProjectCategoryEnum {
 
-    RESERVE("1", "pendding", "鍌ㄥ椤圭洰","reserve","鍌ㄥ瑙勫垝闃舵"),
-    PREVIOUS("2", "pendding","鍓嶆湡椤圭洰","previous","椤圭洰鍓嶆湡闃舵"),
+    RESERVE("1", "pendding", "鍌ㄥ椤圭洰","reserve","鍌ㄥ闃舵"),
+    PREVIOUS("2", "pendding","鍓嶆湡椤圭洰","previous","鍓嶆湡闃舵"),
     IMPLEMENT("3", "working,stop","瀹炴柦椤圭洰","implement","瀹炴柦闃舵"),
-    FINISH("4", "finish","绔e伐椤圭洰","finish","绔e伐鎶曠敤闃舵"),
+    FINISH("4", "finish","绔e伐椤圭洰","finish","绔e伐闃舵"),
     EXCEPTION("5", "","寮傚父椤圭洰","exception","");
 
 
@@ -19,7 +19,7 @@
     private final String status;
     private final String name;
     private final String code;
-    private  final String desc;
+    private final String desc;
 
     //鍒ゆ柇浼犲叆鏁版嵁鏄惁瀛樺湪鍥涚椤圭洰鎺ㄨ繘鐘舵��
     public static boolean isValidType(String type) {
@@ -33,16 +33,12 @@
 
     /**
      * 鑾峰彇椤圭洰闃舵
-     * @param projectStatus
-     * @param hasProcess 鏄惁鍚姩娴佺▼
+     * @param projectPhase
      * @return
      */
-    public static String getPhaseByProjectStatus(String projectStatus, boolean hasProcess) {
+    public static String getPhaseByProjectStatus(String projectPhase) {
         for (ProjectCategoryEnum projectCategoryEnum : ProjectCategoryEnum.values()) {
-            if (hasProcess && PREVIOUS.status.contains(projectStatus)) {
-                return PREVIOUS.desc;
-            }
-            if (projectCategoryEnum.status.contains(projectStatus)) {
+            if (projectCategoryEnum.type.equals(projectPhase)) {
                 return projectCategoryEnum.desc;
             }
         }
diff --git a/flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java b/flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java
index 3528539..f83c194 100644
--- a/flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java
+++ b/flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.ycl.common.enums.business.TaskStatusEnum;
 import lombok.Data;
+import org.flowable.bpmn.model.UserTask;
 
 import java.util.Map;
 
@@ -63,5 +64,9 @@
      */
     private Map<String, Object> formJsonObj;
 
-
+    /**
+     * 浠诲姟鍏冩暟鎹�
+     *
+     */
+    private UserTask userTask;
 }
diff --git a/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java b/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
index 240eba2..b5b0797 100644
--- a/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
+++ b/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
@@ -110,7 +110,7 @@
         formDetailVO.setCanJump(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_JUMP_TEXT));
         formDetailVO.setCanWait(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_WAIT_TEXT));
         formDetailVO.setCanHangup(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_HANGUP_TEXT));
-
+        formDetailVO.setUserTask(currentElement);
         defKeys.add(formDetailVO);
         this.beforeNodeInfo(currentElement, defKeys);
 
@@ -180,6 +180,7 @@
                         formDetailVO.setBeforeNodeName(incomingFlow.getSourceFlowElement().getName());
                         formDetailVO.setCanJump(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_JUMP_TEXT));
                         formDetailVO.setCanWait(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_WAIT_TEXT));
+                        formDetailVO.setUserTask((UserTask) incomingFlow.getSourceFlowElement());
                         defKeys.add(formDetailVO);
                     } else {
                         beforeNodeInfo(incomingFlow.getSourceFlowElement(), defKeys);
@@ -196,6 +197,7 @@
                         formDetailVO.setBeforeNodeName(incomingFlow.getSourceFlowElement().getName());
                         formDetailVO.setCanJump(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_JUMP_TEXT));
                         formDetailVO.setCanWait(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_WAIT_TEXT));
+                        formDetailVO.setUserTask((UserTask) incomingFlow.getSourceFlowElement());
                         defKeys.add(formDetailVO);
                     } else {
                         beforeNodeInfo(incomingFlow.getSourceFlowElement(), defKeys);
@@ -207,7 +209,7 @@
 
 
     /**
-     * 鑾峰彇褰撳墠鑺傜偣鐨勪笂涓�鑺傜偣id锛屼笉鍙嶆倲褰撳墠鑺傜偣淇℃伅锛屽鏋滃墠闈㈡槸骞惰锛岄偅涔堜細杩斿洖澶氫釜
+     * 鑾峰彇褰撳墠鑺傜偣鐨勪笂涓�鑺傜偣id锛屼笉杩斿洖褰撳墠鑺傜偣淇℃伅锛屽鏋滃墠闈㈡槸骞惰锛岄偅涔堜細杩斿洖澶氫釜
      *
      * @param processDefId     娴佺▼瀹氫箟id
      * @param currentNodeDefId 褰撳墠鑺傜偣瀹氫箟id
diff --git a/project_management.sql b/project_management.sql
index 396fc4c..327fbb8 100644
--- a/project_management.sql
+++ b/project_management.sql
@@ -3379,7 +3379,7 @@
   `project_status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1' COMMENT '椤圭洰鐘舵��  (0鏈紑宸ワ紝1宸插紑宸ワ紝2宸茬宸ワ紝3鏆傚仠)',
   `fund_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '璧勯噾绫诲瀷锛�0涓璧勯噾锛�1鍥藉�鸿祫閲戯紝2瓒呴暱鏈熷浗鍊猴紝3鍦版柟鏀垮簻涓撻」鍊猴級',
   `invest_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛�',
-  `project_phase` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵)',
+  `project_phase` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '椤圭洰闃舵(1鍌ㄥ瑙勫垝闃舵,  2椤圭洰鍓嶆湡闃舵,  3瀹炴柦闃舵,  4绔e伐鎶曠敤闃舵)',
   `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '鏍囩',
   `competent_department` int NULL DEFAULT NULL COMMENT '涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id)',
   `area_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '琛屾斂鍖哄煙',
diff --git a/start/src/main/java/com/ycl/Application.java b/start/src/main/java/com/ycl/Application.java
index 89ff8a4..93d6a96 100644
--- a/start/src/main/java/com/ycl/Application.java
+++ b/start/src/main/java/com/ycl/Application.java
@@ -12,7 +12,7 @@
  * @author ycl
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class},proxyBeanMethods = false)
-@EnableAspectJAutoProxy(exposeProxy = true)
+//@EnableAspectJAutoProxy(exposeProxy = true)
 public class Application
 {
     public static void main(String[] args)
diff --git a/start/src/main/java/com/ycl/web/controller/system/SysDeptController.java b/start/src/main/java/com/ycl/web/controller/system/SysDeptController.java
index 6ba80ff..bc4529d 100644
--- a/start/src/main/java/com/ycl/web/controller/system/SysDeptController.java
+++ b/start/src/main/java/com/ycl/web/controller/system/SysDeptController.java
@@ -43,10 +43,11 @@
     private final static Long userPortId = 101L;
     //瀹℃壒绔痠d
     private final static Long approvalPortId = 102L;
+
     /**
      * 鑾峰彇閮ㄩ棬鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+//    @PreAuthorize("@ss.hasPermi('system:dept:list')")
     @GetMapping("/list")
     public AjaxResult list(SysDept dept)
     {
@@ -151,6 +152,6 @@
     public Result approvalList() {
         SysDept dept = new SysDept();
         dept.setParentId(approvalPortId);
-        return deptService.all(dept);
+        return Result.ok().data(deptService.selectDeptListNoAuth(dept));
     }
 }
diff --git a/start/src/main/resources/application.yml b/start/src/main/resources/application.yml
index 5e1ce3d..3f36860 100644
--- a/start/src/main/resources/application.yml
+++ b/start/src/main/resources/application.yml
@@ -7,7 +7,7 @@
   configuration:
     shrink-whitespaces-in-sql: true #浠嶴QL涓垹闄ゅ浣欑殑绌烘牸瀛楃
     default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler # 閫氱敤鏋氫妇澶勭悊鍣�
-  #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 鏃ュ織鎵撳嵃
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 鏃ュ織鎵撳嵃
   global-config:
     db-config:
       id-type: auto
@@ -41,6 +41,7 @@
 logging:
   level:
     com.ruoyi: debug
+    com.ycl: debug
     org.springframework: warn
     org.flowable.engine.impl.persistence.entity.*: debug
     org.flowable.task.service.impl.persistence.entity.*: debug
diff --git a/system/src/main/java/com/ycl/system/domain/base/AbsUUIDEntity.java b/system/src/main/java/com/ycl/system/domain/base/AbsUUIDEntity.java
new file mode 100644
index 0000000..4d87235
--- /dev/null
+++ b/system/src/main/java/com/ycl/system/domain/base/AbsUUIDEntity.java
@@ -0,0 +1,34 @@
+package com.ycl.system.domain.base;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author xp
+ * @date 2022/11/29
+ */
+@Data
+public abstract class AbsUUIDEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+
+    /** 鍒涘缓鏃堕棿 */
+    @TableField(value = "gmt_create", fill = FieldFill.INSERT)
+    private Date gmtCreate;
+
+    /** 淇敼鏃堕棿 */
+    @TableField(value = "gmt_update", fill = FieldFill.INSERT_UPDATE)
+    private Date gmtUpdate;
+
+    @TableField(value = "deleted", fill = FieldFill.INSERT)
+    private Integer deleted;
+
+}
diff --git a/system/src/main/java/com/ycl/system/domain/base/AbsUUIDForm.java b/system/src/main/java/com/ycl/system/domain/base/AbsUUIDForm.java
new file mode 100644
index 0000000..c820bdf
--- /dev/null
+++ b/system/src/main/java/com/ycl/system/domain/base/AbsUUIDForm.java
@@ -0,0 +1,20 @@
+package com.ycl.system.domain.base;
+
+import com.ycl.common.group.Update;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author xp
+ * @date 2022/11/29
+ */
+@Data
+public abstract class AbsUUIDForm {
+
+    @ApiModelProperty(value = "id,淇敼蹇呬紶", required = false)
+    @NotNull(message = "璇烽�夋嫨鏁版嵁", groups = {Update.class})
+    private String id;
+
+}
diff --git a/system/src/main/java/com/ycl/system/domain/base/AbsUUIDVo.java b/system/src/main/java/com/ycl/system/domain/base/AbsUUIDVo.java
new file mode 100644
index 0000000..53a4191
--- /dev/null
+++ b/system/src/main/java/com/ycl/system/domain/base/AbsUUIDVo.java
@@ -0,0 +1,24 @@
+package com.ycl.system.domain.base;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author xp
+ * @date 2022/11/29
+ */
+@Data
+public abstract class AbsUUIDVo {
+
+    @ApiModelProperty("id")
+    private String id;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreate;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    private Date gmtUpdate;
+
+}
diff --git a/system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java b/system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java
index 6d587cf..87948b6 100644
--- a/system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java
+++ b/system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java
@@ -19,6 +19,8 @@
      */
     public List<SysDept> selectDeptList(SysDept dept);
 
+    public List<SysDept> selectDeptListNoAuth(SysDept dept);
+
     /**
      * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭�
      *
diff --git a/system/src/main/java/com/ycl/system/service/ISysDeptService.java b/system/src/main/java/com/ycl/system/service/ISysDeptService.java
index 6d0bf90..0db2984 100644
--- a/system/src/main/java/com/ycl/system/service/ISysDeptService.java
+++ b/system/src/main/java/com/ycl/system/service/ISysDeptService.java
@@ -23,6 +23,14 @@
     public List<SysDept> selectDeptList(SysDept dept);
 
     /**
+     * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁-鏃犳暟鎹潈闄�
+     *
+     * @param dept
+     * @return
+     */
+    public List<SysDept> selectDeptListNoAuth(SysDept dept);
+
+    /**
      * 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭�
      *
      * @param dept 閮ㄩ棬淇℃伅
diff --git a/system/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java b/system/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java
index 358a7eb..af26005 100644
--- a/system/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java
+++ b/system/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java
@@ -50,6 +50,11 @@
         return deptMapper.selectDeptList(dept);
     }
 
+    @Override
+    public List<SysDept> selectDeptListNoAuth(SysDept dept) {
+        return deptMapper.selectDeptListNoAuth(dept);
+    }
+
     /**
      * 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭�
      *
diff --git a/system/src/main/resources/mapper/system/SysDeptMapper.xml b/system/src/main/resources/mapper/system/SysDeptMapper.xml
index 8de6205..f4faa92 100644
--- a/system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -47,6 +47,18 @@
 		order by d.parent_id, d.order_num
     </select>
 
+	<select id="selectDeptListNoAuth" parameterType="SysDept" resultMap="SysDeptResult">
+		<include refid="selectDeptVo"/>
+		where d.del_flag = '0'
+		<if test="parentId != null">
+			AND FIND_IN_SET(#{parentId}, ancestors) > 0
+		</if>
+		<if test="deptName != null and deptName != ''">
+			AND dept_name like concat('%', #{deptName}, '%')
+		</if>
+		order by d.parent_id, d.order_num
+	</select>
+
     <select id="selectDeptListByRoleId" resultType="Long">
 		select d.dept_id
 		from sys_dept d
@@ -94,7 +106,7 @@
 		where dept_name=#{deptName} and parent_id = #{parentId} and del_flag = '0' limit 1
 	</select>
     <select id="selectAncestors" resultType="java.lang.String">
-		select ancestors
+		select SD.ancestors
 		from sys_user SU
 		INNER JOIN sys_dept SD ON SU.dept_id = SD.dept_id
 		where SU.user_id = #{userId}
diff --git a/system/src/main/resources/mapper/system/SysUserMapper.xml b/system/src/main/resources/mapper/system/SysUserMapper.xml
index 725195f..1eb7d74 100644
--- a/system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -34,6 +34,7 @@
         <result property="ancestors" column="ancestors"   />
         <result property="orderNum"  column="order_num"   />
         <result property="leader"    column="leader"      />
+        <result property="phone"    column="phone"      />
         <result property="status"    column="dept_status" />
     </resultMap>
 
@@ -48,7 +49,7 @@
 
 	<sql id="selectUserVo">
         select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
-        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
+        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
 		    left join sys_dept d on u.dept_id = d.dept_id
@@ -227,6 +228,6 @@
  	</delete>
 
 	<select id="getByDept" resultMap="SysUserResult">
-		select * from sys_user where dept_id = #{deptId}
+		select * from sys_user where dept_id = #{deptId} and del_flag = '0'
 	</select>
 </mapper>

--
Gitblit v1.8.0