From bdef23946e420ba538870d6314034fbd42f00a66 Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期三, 27 十一月 2024 18:38:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 business/src/main/java/com/ycl/domain/form/ProjectInvestmentFundingForm.java                  |  154 +++
 business/src/main/java/com/ycl/domain/form/ProjectInvestmentPolicyComplianceForm.java         |  106 ++
 start/src/main/resources/application-dev.yml                                                  |   16 
 business/src/main/java/com/ycl/service/ProjectInvestmentPolicyComplianceService.java          |   65 +
 business/src/main/java/com/ycl/mapper/ProjectInvestmentPolicyComplianceMapper.java            |   34 
 business/src/main/java/com/ycl/domain/query/ProjectInvestmentPolicyComplianceQuery.java       |   22 
 business/src/main/java/com/ycl/service/ProjectInvestmentFundingService.java                   |   65 +
 business/src/main/java/com/ycl/mapper/FileMapper.java                                         |   23 
 start/src/main/resources/application-prod.yml                                                 |   14 
 business/src/main/java/com/ycl/domain/vo/ProjectInvestmentInfoVO.java                         |  107 ++
 start/src/main/java/com/ycl/web/controller/system/SysDeptController.java                      |   15 
 start/src/main/resources/application.yml                                                      |   17 
 business/src/main/resources/mapper/ProjectInvestmentInfoMapper.xml                            |   91 +
 business/src/main/java/com/ycl/domain/vo/ProjectInvestmentPolicyComplianceVO.java             |  103 ++
 business/src/main/java/com/ycl/service/ProjectInvestmentInfoService.java                      |   65 +
 business/src/main/java/com/ycl/service/impl/FileServiceImpl.java                              |   72 +
 business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java                               |   76 -
 business/src/main/java/com/ycl/domain/query/ProjectInvestmentFundingQuery.java                |   22 
 business/src/main/java/com/ycl/service/impl/ProjectInvestmentPolicyComplianceServiceImpl.java |  119 ++
 business/src/main/java/com/ycl/domain/entity/File.java                                        |   48 
 common/src/main/java/com/ycl/common/utils/ProjectCodeGenerator.java                           |   49 +
 business/src/main/java/com/ycl/controller/ProjectInvestmentFundingController.java             |   83 +
 business/src/main/java/com/ycl/domain/entity/ProjectInvestmentInfo.java                       |   99 ++
 business/src/main/java/com/ycl/controller/ProjectInvestmentInfoController.java                |   83 +
 business/src/main/java/com/ycl/domain/query/ProjectInvestmentInfoQuery.java                   |   22 
 business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java                      |  151 +++
 business/src/main/resources/mapper/FileMapper.xml                                             |   30 
 business/src/main/java/com/ycl/controller/ProjectInvestmentPolicyComplianceController.java    |   83 +
 business/src/main/java/com/ycl/domain/form/ProjectInvestmentInfoForm.java                     |  110 ++
 business/src/main/resources/mapper/ProjectInfoMapper.xml                                      |   28 
 business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java                    |  143 ++
 business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml                         |  124 ++
 business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java                                   |   37 
 business/src/main/java/com/ycl/mapper/ProjectInvestmentFundingMapper.java                     |   34 
 system/src/main/java/com/ycl/system/service/ISysDeptService.java                              |    8 
 business/src/main/resources/mapper/ProjectInvestmentPolicyComplianceMapper.xml                |   88 +
 business/src/main/java/com/ycl/domain/entity/ProjectInfo.java                                 |   33 
 business/src/main/java/com/ycl/service/impl/ProjectInvestmentInfoServiceImpl.java             |  119 ++
 business/src/main/java/com/ycl/controller/ProjectInfoController.java                          |   11 
 business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java                       |    9 
 business/src/main/java/com/ycl/service/FileService.java                                       |   46 
 business/src/main/java/com/ycl/mapper/ProjectInvestmentInfoMapper.java                        |   34 
 system/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java                      |   19 
 business/src/main/java/com/ycl/domain/entity/ProjectInvestmentPolicyCompliance.java           |   95 +
 business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java          |  119 ++
 45 files changed, 2,765 insertions(+), 126 deletions(-)

diff --git a/business/src/main/java/com/ycl/controller/ProjectInfoController.java b/business/src/main/java/com/ycl/controller/ProjectInfoController.java
index 1d14514..cac7115 100644
--- a/business/src/main/java/com/ycl/controller/ProjectInfoController.java
+++ b/business/src/main/java/com/ycl/controller/ProjectInfoController.java
@@ -3,13 +3,13 @@
 import com.ycl.common.base.Result;
 import com.ycl.common.group.Add;
 import com.ycl.common.group.Update;
+import com.ycl.common.utils.ProjectCodeGenerator;
 import com.ycl.domain.form.ProjectInfoForm;
 import com.ycl.domain.query.ProjectInfoQuery;
 import com.ycl.service.ProjectInfoService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -79,4 +79,13 @@
     public Result list() {
         return projectInfoService.all();
     }
+
+    /**
+     * 鐢熸垚椤圭洰缂栧彿
+     * @return 椤圭洰缂栧彿
+     */
+    @GetMapping("/getProjectCode")
+    public Result generateProjectCode() {
+        return Result.ok().data(ProjectCodeGenerator.generateProjectCode());
+    };
 }
diff --git a/business/src/main/java/com/ycl/controller/ProjectInvestmentFundingController.java b/business/src/main/java/com/ycl/controller/ProjectInvestmentFundingController.java
new file mode 100644
index 0000000..4f5d4ff
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectInvestmentFundingController.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.ProjectInvestmentFundingService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectInvestmentFundingForm;
+import com.ycl.domain.query.ProjectInvestmentFundingQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃 鍓嶇鎺у埗鍣�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃", tags = "椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃绠$悊")
+@RestController
+@RequestMapping("/project-investment-funding")
+public class ProjectInvestmentFundingController {
+
+    private final ProjectInvestmentFundingService projectInvestmentFundingService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('projectInvestmentFunding:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectInvestmentFundingForm form) {
+        return projectInvestmentFundingService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('projectInvestmentFunding:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectInvestmentFundingForm form) {
+        return projectInvestmentFundingService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectInvestmentFunding:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectInvestmentFundingService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectInvestmentFunding:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectInvestmentFundingService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('projectInvestmentFunding:page')")
+    public Result page(ProjectInvestmentFundingQuery query) {
+        return projectInvestmentFundingService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('projectInvestmentFunding:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return projectInvestmentFundingService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('projectInvestmentFunding:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectInvestmentFundingService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/controller/ProjectInvestmentInfoController.java b/business/src/main/java/com/ycl/controller/ProjectInvestmentInfoController.java
new file mode 100644
index 0000000..c809bd6
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectInvestmentInfoController.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.ProjectInvestmentInfoService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectInvestmentInfoForm;
+import com.ycl.domain.query.ProjectInvestmentInfoQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 鎶曡祫椤圭洰鍩虹淇℃伅琛� 鍓嶇鎺у埗鍣�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "鎶曡祫椤圭洰鍩虹淇℃伅琛�", tags = "鎶曡祫椤圭洰鍩虹淇℃伅琛ㄧ鐞�")
+@RestController
+@RequestMapping("/project-investment-info")
+public class ProjectInvestmentInfoController {
+
+    private final ProjectInvestmentInfoService projectInvestmentInfoService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('projectInvestmentInfo:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectInvestmentInfoForm form) {
+        return projectInvestmentInfoService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('projectInvestmentInfo:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectInvestmentInfoForm form) {
+        return projectInvestmentInfoService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectInvestmentInfo:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectInvestmentInfoService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectInvestmentInfo:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectInvestmentInfoService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('projectInvestmentInfo:page')")
+    public Result page(ProjectInvestmentInfoQuery query) {
+        return projectInvestmentInfoService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('projectInvestmentInfo:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return projectInvestmentInfoService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('projectInvestmentInfo:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectInvestmentInfoService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/controller/ProjectInvestmentPolicyComplianceController.java b/business/src/main/java/com/ycl/controller/ProjectInvestmentPolicyComplianceController.java
new file mode 100644
index 0000000..1541b7c
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectInvestmentPolicyComplianceController.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.ProjectInvestmentPolicyComplianceService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectInvestmentPolicyComplianceForm;
+import com.ycl.domain.query.ProjectInvestmentPolicyComplianceQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛� 鍓嶇鎺у埗鍣�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛�", tags = "鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛ㄧ鐞�")
+@RestController
+@RequestMapping("/project-investment-policy-compliance")
+public class ProjectInvestmentPolicyComplianceController {
+
+    private final ProjectInvestmentPolicyComplianceService projectInvestmentPolicyComplianceService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('projectInvestmentPolicyCompliance:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectInvestmentPolicyComplianceForm form) {
+        return projectInvestmentPolicyComplianceService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('projectInvestmentPolicyCompliance:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectInvestmentPolicyComplianceForm form) {
+        return projectInvestmentPolicyComplianceService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectInvestmentPolicyCompliance:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectInvestmentPolicyComplianceService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectInvestmentPolicyCompliance:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectInvestmentPolicyComplianceService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('projectInvestmentPolicyCompliance:page')")
+    public Result page(ProjectInvestmentPolicyComplianceQuery query) {
+        return projectInvestmentPolicyComplianceService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('projectInvestmentPolicyCompliance:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return projectInvestmentPolicyComplianceService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('projectInvestmentPolicyCompliance:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectInvestmentPolicyComplianceService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/File.java b/business/src/main/java/com/ycl/domain/entity/File.java
new file mode 100644
index 0000000..c71fac2
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/File.java
@@ -0,0 +1,48 @@
+package com.ycl.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ycl.system.domain.base.AbsEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 鏂囦欢琛�
+ *
+ * @author flq
+ * @since 2024-11-22
+ */
+@Data
+@TableName("t_file")
+public class File extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Integer id;
+    /**
+     * 鏂囦欢璺緞
+     */
+    private String url;
+    /**
+     * 鍏宠仈鐨勫悇绉嶄笟鍔$殑id
+     */
+    private Long busId;
+    /**
+     * 鏂囦欢鍒嗙被
+     */
+    private String type;
+    /**
+     * 鏂囦欢鍚�
+     */
+    private String name;
+    /**
+     * 鏂囦欢鍘熷鍚�
+     */
+    private String originalName;
+
+}
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 59e77c5..d5eec5c 100644
--- a/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java
@@ -1,12 +1,13 @@
 package com.ycl.domain.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ycl.system.domain.base.AbsEntity;
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * 椤圭洰绠$悊鍩虹淇℃伅琛�
@@ -58,11 +59,11 @@
 
     @TableField("competent_department")
     /** 涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id) */
-    private Integer competentDepartment;
+    private String competentDepartment;
 
-    @TableField("area_code")
+    @TableField("area")
     /** 琛屾斂鍖哄煙 */
-    private String areaCode;
+    private String area;
 
     @TableField("management_centralization")
     /** 绠$悊褰掑彛  (0鍩烘湰寤鸿(鍙戞敼),  1鏇存柊鏀归��(缁忎俊),  2鍗曠函璐疆(鍙戞敼),  3淇℃伅鍖�(鍙戞敼),  4鍏朵粬鎶曡祫) */
@@ -71,10 +72,6 @@
     @TableField("project_approval_type")
     /** 椤圭洰瀹℃壒绫诲瀷 */
     private String projectApprovalType;
-
-    @TableField("investment_catalogue")
-    /** 鎶曡祫鐩綍(锛�) */
-    private String investmentCatalogue;
 
     @TableField("importance_type")
     /** 閲嶇偣鍒嗙被  (0鐪侀噸鐐归」鐩�,  1閬傚畞甯傞噸鐐归」鐩�,  2.灏勬椽甯傞噸鐐归」鐩�,  3.涓�鑸」鐩�) */
@@ -90,15 +87,15 @@
 
     @TableField("create_project_time")
     /** 绔嬮」鏃堕棿 */
-    private LocalDateTime createProjectTime;
+    private Date createProjectTime;
 
     @TableField("plan_start_time")
     /** 璁″垝寮�宸ユ椂闂� */
-    private LocalDateTime planStartTime;
+    private Date planStartTime;
 
     @TableField("plan_complete_time")
     /** 璁″垝绔e伐鏃堕棿 */
-    private LocalDateTime planCompleteTime;
+    private Date planCompleteTime;
 
     @TableField("win_unit")
     /** 涓爣鍗曚綅 */
@@ -110,7 +107,7 @@
 
     @TableField("win_time")
     /** 涓爣鏃堕棿 */
-    private LocalDateTime winTime;
+    private Date winTime;
 
     @TableField("project_address")
     /** 璇︾粏鍦板潃 */
@@ -136,19 +133,11 @@
     /** 鑱旂郴鏂瑰紡 */
     private String contact;
 
-    @TableField("gmt_create_time")
-    /** 鍒涘缓鏃堕棿 */
-    private LocalDateTime gmtCreateTime;
-
-    @TableField("gmt_update_time")
-    /** 鏇存柊鏃堕棿 */
-    private LocalDateTime gmtUpdateTime;
-
-    @TableField("update_by")
+    @TableField(value = "update_by",fill = FieldFill.INSERT_UPDATE)
     /** 鏇存柊浜� */
     private Long updateBy;
 
-    @TableField("create_by")
+    @TableField(value = "create_by",fill = FieldFill.INSERT)
     /** 鍒涘缓浜� */
     private Long createBy;
 
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java b/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java
new file mode 100644
index 0000000..28343de
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentFunding.java
@@ -0,0 +1,143 @@
+package com.ycl.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ycl.system.domain.base.AbsEntity;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Data
+@TableName("t_project_investment_funding")
+public class ProjectInvestmentFunding extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_id")
+    /** 椤圭洰id */
+    private Long projectId;
+
+    @TableField("total_investment")
+    /** 椤圭洰鎬绘姇璧勯 */
+    private String totalInvestment;
+
+    @TableField("principal")
+    /** 椤圭洰鏈噾 */
+    private String principal;
+
+    @TableField("government_investment_total")
+    /** 鏀垮簻鎶曡祫鎬婚 */
+    private String governmentInvestmentTotal;
+
+    @TableField("central_investment_total")
+    /** 涓ぎ鎶曡祫鎬婚 */
+    private String centralInvestmentTotal;
+
+    @TableField("central_budget_investment")
+    /** 涓ぎ棰勭畻鎶曡祫 */
+    private String centralBudgetInvestment;
+
+    @TableField("central_fiscal_investment")
+    /** 涓ぎ璐㈡斂 */
+    private String centralFiscalInvestment;
+
+    @TableField("central_special_bond_investment")
+    /** 涓ぎ涓撻」鍊哄埜绛归泦鐨勪笓椤瑰缓璁捐祫閲� */
+    private String centralSpecialBondInvestment;
+
+    @TableField("central_special_fund_investment")
+    /** 涓ぎ涓撻」寤鸿鍩洪噾 */
+    private String centralSpecialFundInvestment;
+
+    @TableField("provincial_investment_total")
+    /** 鐪佺骇鎶曡祫鎬婚 */
+    private String provincialInvestmentTotal;
+
+    @TableField("provincial_budget_investment")
+    /** 鐪侀绠楀唴鎶曡祫 */
+    private String provincialBudgetInvestment;
+
+    @TableField("provincial_fiscal_investment")
+    /** 鐪佽储鏀挎�у缓璁炬姇璧� */
+    private String provincialFiscalInvestment;
+
+    @TableField("provincial_special_fund_investment")
+    /** 鐪佷笓椤瑰缓璁捐祫閲� */
+    private String provincialSpecialFundInvestment;
+
+    @TableField("city_investment_total")
+    /** 甯傦紙宸烇級鎶曡祫鎬婚 */
+    private String cityInvestmentTotal;
+
+    @TableField("city_budget_investment")
+    /** 甯傦紙宸烇級棰勭畻鍐呮姇璧� */
+    private String cityBudgetInvestment;
+
+    @TableField("city_fiscal_investment")
+    /** 甯傦紙宸烇級璐㈡斂鎬ф姇璧� */
+    private String cityFiscalInvestment;
+
+    @TableField("city_special_fund_investment")
+    /** 甯傦紙宸烇級涓撻」璧勯噾 */
+    private String citySpecialFundInvestment;
+
+    @TableField("county_investment_total")
+    /** 鍘匡紙甯傘�佸尯锛夋姇璧勬�婚 */
+    private String countyInvestmentTotal;
+
+    @TableField("county_budget_investment")
+    /** 鍘匡紙甯傘�佸尯锛夐绠楀唴鎶曡祫 */
+    private String countyBudgetInvestment;
+
+    @TableField("county_fiscal_investment")
+    /** 鍘匡紙甯傘�佸尯锛夎储鏀挎�у缓璁捐祫閲� */
+    private String countyFiscalInvestment;
+
+    @TableField("county_special_fund_investment")
+    /** 鍘匡紙甯傘�佸尯锛変笓椤硅祫閲� */
+    private String countySpecialFundInvestment;
+
+    @TableField("domestic_loan_total")
+    /** 鍥藉唴璐锋鎬婚 */
+    private String domesticLoanTotal;
+
+    @TableField("bank_loan")
+    /** 閾惰璐锋 */
+    private String bankLoan;
+
+    @TableField("foreign_investment_total")
+    /** 澶栧晢鎶曡祫鎬婚 */
+    private String foreignInvestmentTotal;
+
+    @TableField("enterprise_self_raised_total")
+    /** 浼佷笟鑷鎬婚 */
+    private String enterpriseSelfRaisedTotal;
+
+    @TableField("other_investment_total")
+    /** 鍏朵粬鎶曡祫鎬婚 */
+    private String otherInvestmentTotal;
+
+    @TableField("gmt_create_time")
+    /** 鍒涘缓鏃堕棿 */
+    private LocalDateTime gmtCreateTime;
+
+    @TableField("create_by")
+    /** 鍒涘缓浜� */
+    private Long createBy;
+
+    @TableField("gmt_update_time")
+    /** 鏇存柊鏃堕棿 */
+    private LocalDateTime gmtUpdateTime;
+
+    @TableField("update_by")
+    /** 鏇存柊浜� */
+    private Long updateBy;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentInfo.java b/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentInfo.java
new file mode 100644
index 0000000..13fbbbb
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentInfo.java
@@ -0,0 +1,99 @@
+package com.ycl.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ycl.system.domain.base.AbsEntity;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鎶曡祫椤圭洰鍩虹淇℃伅琛�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Data
+@TableName("t_project_investment_info")
+public class ProjectInvestmentInfo extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_id")
+    /** 椤圭洰id */
+    private Long projectId;
+
+    @TableField("be_cross_region")
+    /** 寤鸿鍦扮偣鏄惁璺ㄥ煙 */
+    private Integer beCrossRegion;
+
+    @TableField("construction_location")
+    /** 椤圭洰寤鸿鍦扮偣 */
+    private String constructionLocation;
+
+    @TableField("detailed_address")
+    /** 寤鸿璇︾粏鍦板潃 */
+    private String detailedAddress;
+
+    @TableField("be_compensation_project")
+    /** 鏄惁鏄ˉ鐮侀」鐩� */
+    private Integer beCompensationProject;
+
+    @TableField("compensation_reason")
+    /** 琛ョ爜鍘熷洜 */
+    private String compensationReason;
+
+    @TableField("planned_start_date")
+    /** 璁″垝寮�宸ユ椂闂� */
+    private LocalDateTime plannedStartDate;
+
+    @TableField("expected_completion_date")
+    /** 鎷熷缓鎴愭椂闂� */
+    private LocalDateTime expectedCompletionDate;
+
+    @TableField("national_industry_classification")
+    /** 鍥芥爣琛屼笟鍒嗙被 */
+    private String nationalIndustryClassification;
+
+    @TableField("industry_classification")
+    /** 鎵�灞炶涓氬垎绫� */
+    private String industryClassification;
+
+    @TableField("project_nature")
+    /** 椤圭洰寤鸿鎬ц川 */
+    private String projectNature;
+
+    @TableField("project_attribute")
+    /** 椤圭洰灞炴�� */
+    private String projectAttribute;
+
+    @TableField("use_earth")
+    /** 鏄惁浣跨敤鍦熷湴 */
+    private Integer useEarth;
+
+    @TableField("content_scale")
+    /** 涓昏寤鸿鍐呭鍙婅妯� */
+    private String contentScale;
+
+    @TableField("code")
+    /** 寤虹骞冲彴浠g爜 */
+    private String code;
+
+    @TableField("gmt_create_time")
+    /** 鍒涘缓鏃堕棿 */
+    private LocalDateTime gmtCreateTime;
+
+    @TableField("create_by")
+    /** 鍒涘缓浜� */
+    private Long createBy;
+
+    @TableField("gmt_update_time")
+    /** 鏇存柊鏃堕棿 */
+    private LocalDateTime gmtUpdateTime;
+
+    @TableField("update_by")
+    /** 鏇存柊浜� */
+    private Long updateBy;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentPolicyCompliance.java b/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentPolicyCompliance.java
new file mode 100644
index 0000000..8fb94a5
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectInvestmentPolicyCompliance.java
@@ -0,0 +1,95 @@
+package com.ycl.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ycl.system.domain.base.AbsEntity;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Data
+@TableName("t_project_investment_policy_compliance")
+public class ProjectInvestmentPolicyCompliance extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_id")
+    /** 椤圭洰id */
+    private Long projectId;
+
+    @TableField("policy_compliance_attachment")
+    /** 绗﹀悎浜т笟鏀跨瓥闄勪欢 */
+    private String policyComplianceAttachment;
+
+    @TableField("belongs_to_industry_adjustment_directory")
+    /** 鏄惁灞炰簬銆婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬩笅鐨勯」鐩� */
+    private String belongsToIndustryAdjustmentDirectory;
+
+    @TableField("belongs_to_allowed_projects")
+    /** 鏄惁灞炰簬鏈垪鍏ャ�婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬬殑鍏佽绫婚」鐩� */
+    private String belongsToAllowedProjects;
+
+    @TableField("belongs_to_western_encouraged_directory")
+    /** 鏄惁灞炰簬銆婅タ閮ㄥ湴鍖洪紦鍔辩被浜т笟鐩綍銆嬬殑椤圭洰 */
+    private Integer belongsToWesternEncouragedDirectory;
+
+    @TableField("not_banned_or_controlled_project")
+    /** 鏄惁涓嶅睘浜庝骇涓氭斂绛栫姝㈡姇璧勫缓璁炬垨瀹炶鏍稿噯銆佸鎵圭鐞嗙殑椤圭洰 */
+    private Integer notBannedOrControlledProject;
+
+    @TableField("information_is_true")
+    /** 濉姤淇℃伅鏄惁鐪熷疄 */
+    private Integer informationIsTrue;
+
+    @TableField("special_planning_compliance")
+    /** 涓撻」瑙勫垝澶嶅悎鎯呭喌 */
+    private String specialPlanningCompliance;
+
+    @TableField("energy_consumption")
+    /** 椤圭洰鑳借�楁儏鍐� */
+    private String energyConsumption;
+
+    @TableField("annual_energy_consumption")
+    /** 椤圭洰骞寸患鍚堣兘婧愭秷璐归噺锛堟爣鍑嗙叅褰撻噺鍊硷級 */
+    private String annualEnergyConsumption;
+
+    @TableField("annual_electricity_consumption")
+    /** 椤圭洰骞寸數鍔涙秷鑰楅噺锛堟爣鍑嗙叅褰撻噺鍊硷級 */
+    private String annualElectricityConsumption;
+
+    @TableField("energy_check")
+    /** 鑺傝兘瀹℃煡锛�1闇�瑕侊紝0涓嶉渶瑕侊級 */
+    private String energyCheck;
+
+    @TableField("no_only_check_type")
+    /** 涓嶅啀鍗曠嫭杩涜鑺傝兘瀹℃煡鐨勭被鍨� */
+    private String noOnlyCheckType;
+
+    @TableField("remarks")
+    /** 澶囨敞 */
+    private String remarks;
+
+    @TableField("gmt_create_time")
+    /** 鍒涘缓鏃堕棿 */
+    private LocalDateTime gmtCreateTime;
+
+    @TableField("gmt_update_time")
+    /** 鏇存柊鏃堕棿 */
+    private LocalDateTime gmtUpdateTime;
+
+    @TableField("create_by")
+    /** 鍒涘缓浜� */
+    private Long createBy;
+
+    @TableField("update_by")
+    /** 鏇存柊浜� */
+    private Long updateBy;
+
+
+}
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 7d4b1f3..644de14 100644
--- a/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java
+++ b/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java
@@ -1,19 +1,23 @@
 package com.ycl.domain.form;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.common.group.Add;
 import com.ycl.common.group.Update;
+import com.ycl.domain.entity.File;
 import com.ycl.domain.entity.ProjectInfo;
 import com.ycl.system.domain.base.AbsForm;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.lang.NonNull;
+import org.springframework.util.CollectionUtils;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 椤圭洰绠$悊鍩虹淇℃伅琛ㄨ〃鍗�
@@ -29,139 +33,109 @@
     @ApiModelProperty("椤圭洰鍚嶇О")
     private String projectName;
 
-    @NotBlank(message = "椤圭洰浠g爜涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏂囦欢")
+    private List<File> fileList;
+
     @ApiModelProperty("椤圭洰浠g爜")
     private String projectCode;
 
-    @NotBlank(message = "寤鸿鍐呭涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("寤鸿鍐呭")
     private String content;
 
-    @NotBlank(message = "椤圭洰绫诲瀷锛�0鎴垮眿寤虹瓚锛�1鍩庡競鍩虹璁炬柦锛�2浜ら�氳繍杈擄紝3姘村埄锛�4鑳芥簮锛�5闈炵叅鐭垮北锛�6鍏朵粬锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
     @ApiModelProperty("椤圭洰绫诲瀷锛�0鎴垮眿寤虹瓚锛�1鍩庡競鍩虹璁炬柦锛�2浜ら�氳繍杈擄紝3姘村埄锛�4鑳芥簮锛�5闈炵叅鐭垮北锛�6鍏朵粬锛�")
     private String projectType;
 
-    @NotBlank(message = "椤圭洰鐘舵��  (0鏈紑宸ワ紝1宸插紑宸ワ紝2宸茬宸ワ紝3鏆傚仠)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("椤圭洰鐘舵��  (0鏈紑宸ワ紝1宸插紑宸ワ紝2宸茬宸ワ紝3鏆傚仠)")
     private String projectStatus;
 
-    @NotBlank(message = "璧勯噾绫诲瀷锛�0涓璧勯噾锛�1鍥藉�鸿祫閲戯紝2瓒呴暱鏈熷浗鍊猴紝3鍦版柟鏀垮簻涓撻」鍊猴級涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("璧勯噾绫诲瀷锛�0涓璧勯噾锛�1鍥藉�鸿祫閲戯紝2瓒呴暱鏈熷浗鍊猴紝3鍦版柟鏀垮簻涓撻」鍊猴級")
     private String fundType;
 
-    @NotBlank(message = "鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
     @ApiModelProperty("鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛�")
     private String investType;
 
-    @NotBlank(message = "椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵)")
     private String projectPhase;
 
-    @NotBlank(message = "鏍囩涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("鏍囩")
     private String tag;
 
-    @NotNull(message = "涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id)")
-    private Integer competentDepartment;
+    private List<Long> competentDepartmentList;
 
-    @NotBlank(message = "琛屾斂鍖哄煙涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("琛屾斂鍖哄煙")
-    private String areaCode;
+    private String area;
 
-    @NotBlank(message = "绠$悊褰掑彛  (0鍩烘湰寤鸿(鍙戞敼),  1鏇存柊鏀归��(缁忎俊),  2鍗曠函璐疆(鍙戞敼),  3淇℃伅鍖�(鍙戞敼),  4鍏朵粬鎶曡祫)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("绠$悊褰掑彛  (0鍩烘湰寤鸿(鍙戞敼),  1鏇存柊鏀归��(缁忎俊),  2鍗曠函璐疆(鍙戞敼),  3淇℃伅鍖�(鍙戞敼),  4鍏朵粬鎶曡祫)")
-    private String managementCentralization;
+    private List<String> managementCentralizationList;
 
-    @NotBlank(message = "椤圭洰瀹℃壒绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("椤圭洰瀹℃壒绫诲瀷")
     private String projectApprovalType;
 
-    @NotBlank(message = "鎶曡祫鐩綍(锛�)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("鎶曡祫鐩綍(锛�)")
-    private String investmentCatalogue;
-
-    @NotBlank(message = "閲嶇偣鍒嗙被  (0鐪侀噸鐐归」鐩�,  1閬傚畞甯傞噸鐐归」鐩�,  2.灏勬椽甯傞噸鐐归」鐩�,  3.涓�鑸」鐩�)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("閲嶇偣鍒嗙被  (0鐪侀噸鐐归」鐩�,  1閬傚畞甯傞噸鐐归」鐩�,  2.灏勬椽甯傞噸鐐归」鐩�,  3.涓�鑸」鐩�)")
     private String importanceType;
 
-    @NotBlank(message = "骞村害鎶曡祫璁″垝涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("骞村害鎶曡祫璁″垝")
     private String year;
 
-    @NotNull(message = "骞村害鎶曡祫閲戦涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("骞村害鎶曡祫閲戦")
     private BigDecimal yearInvestAmount;
 
-    @NotNull(message = "绔嬮」鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("绔嬮」鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createProjectTime;
 
-    @NotNull(message = "璁″垝寮�宸ユ椂闂翠笉鑳戒负绌�", groups = {Add.class, Update.class})
     @ApiModelProperty("璁″垝寮�宸ユ椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date planStartTime;
 
-    @NotNull(message = "璁″垝绔e伐鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("璁″垝绔e伐鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date planCompleteTime;
 
-    @NotBlank(message = "涓爣鍗曚綅涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("涓爣鍗曚綅")
     private String winUnit;
 
-    @NotBlank(message = "涓爣閲戦涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("涓爣閲戦")
     private String winAmount;
 
-    @NotNull(message = "涓爣鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("涓爣鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date winTime;
 
-    @NotBlank(message = "璇︾粏鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("璇︾粏鍦板潃")
     private String projectAddress;
 
-    @NotBlank(message = "缁忓害涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("缁忓害")
     private String longitude;
 
-    @NotBlank(message = "绾害涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("绾害")
     private String latitude;
 
-    @NotBlank(message = "椤圭洰涓氫富鍗曚綅涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("椤圭洰涓氫富鍗曚綅")
     private String projectOwnerUnit;
 
-    @NotBlank(message = "椤圭洰鑱旂郴浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
     @ApiModelProperty("椤圭洰鑱旂郴浜�")
     private String projectContactPerson;
 
-    @NotBlank(message = "鑱旂郴鏂瑰紡涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("鑱旂郴鏂瑰紡")
     private String contact;
-
-    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    private Date gmtCreateTime;
-
-    @NotNull(message = "鏇存柊鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("鏇存柊鏃堕棿")
-    private Date gmtUpdateTime;
-
-    @NotNull(message = "鏇存柊浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
-    @ApiModelProperty("鏇存柊浜�")
-    private Long updateBy;
-
-    @NotNull(message = "鍒涘缓浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
-    @ApiModelProperty("鍒涘缓浜�")
-    private Long createBy;
 
     public static ProjectInfo getEntityByForm(@NonNull ProjectInfoForm form, ProjectInfo entity) {
         if(entity == null) {
           entity = new ProjectInfo();
         }
         BeanUtils.copyProperties(form, entity);
+        //瀹℃牳閮ㄩ棬杞崲
+        List<Long> competentDepartmentList = form.getCompetentDepartmentList();
+        if(!CollectionUtils.isEmpty(competentDepartmentList)){
+            entity.setCompetentDepartment(StringUtils.join(competentDepartmentList, ","));
+        }
+        //绠$悊褰掑彛杞崲
+        List<String> managementCentralizationList = form.getManagementCentralizationList();
+        if(!CollectionUtils.isEmpty(managementCentralizationList)){
+            entity.setManagementCentralization(StringUtils.join(managementCentralizationList, ","));
+        }
         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
new file mode 100644
index 0000000..e62ec8a
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectInvestmentFundingForm.java
@@ -0,0 +1,154 @@
+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.ProjectInvestmentFunding;
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "ProjectInvestmentFunding琛ㄥ崟", description = "椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃琛ㄥ崟")
+public class ProjectInvestmentFundingForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
+
+    @NotBlank(message = "椤圭洰鎬绘姇璧勯涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰鎬绘姇璧勯")
+    private String totalInvestment;
+
+    @NotBlank(message = "椤圭洰鏈噾涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰鏈噾")
+    private String principal;
+
+    @NotBlank(message = "鏀垮簻鎶曡祫鎬婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏀垮簻鎶曡祫鎬婚")
+    private String governmentInvestmentTotal;
+
+    @NotBlank(message = "涓ぎ鎶曡祫鎬婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓ぎ鎶曡祫鎬婚")
+    private String centralInvestmentTotal;
+
+    @NotBlank(message = "涓ぎ棰勭畻鎶曡祫涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓ぎ棰勭畻鎶曡祫")
+    private String centralBudgetInvestment;
+
+    @NotBlank(message = "涓ぎ璐㈡斂涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓ぎ璐㈡斂")
+    private String centralFiscalInvestment;
+
+    @NotBlank(message = "涓ぎ涓撻」鍊哄埜绛归泦鐨勪笓椤瑰缓璁捐祫閲戜笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓ぎ涓撻」鍊哄埜绛归泦鐨勪笓椤瑰缓璁捐祫閲�")
+    private String centralSpecialBondInvestment;
+
+    @NotBlank(message = "涓ぎ涓撻」寤鸿鍩洪噾涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓ぎ涓撻」寤鸿鍩洪噾")
+    private String centralSpecialFundInvestment;
+
+    @NotBlank(message = "鐪佺骇鎶曡祫鎬婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐪佺骇鎶曡祫鎬婚")
+    private String provincialInvestmentTotal;
+
+    @NotBlank(message = "鐪侀绠楀唴鎶曡祫涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐪侀绠楀唴鎶曡祫")
+    private String provincialBudgetInvestment;
+
+    @NotBlank(message = "鐪佽储鏀挎�у缓璁炬姇璧勪笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐪佽储鏀挎�у缓璁炬姇璧�")
+    private String provincialFiscalInvestment;
+
+    @NotBlank(message = "鐪佷笓椤瑰缓璁捐祫閲戜笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐪佷笓椤瑰缓璁捐祫閲�")
+    private String provincialSpecialFundInvestment;
+
+    @NotBlank(message = "甯傦紙宸烇級鎶曡祫鎬婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("甯傦紙宸烇級鎶曡祫鎬婚")
+    private String cityInvestmentTotal;
+
+    @NotBlank(message = "甯傦紙宸烇級棰勭畻鍐呮姇璧勪笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("甯傦紙宸烇級棰勭畻鍐呮姇璧�")
+    private String cityBudgetInvestment;
+
+    @NotBlank(message = "甯傦紙宸烇級璐㈡斂鎬ф姇璧勪笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("甯傦紙宸烇級璐㈡斂鎬ф姇璧�")
+    private String cityFiscalInvestment;
+
+    @NotBlank(message = "甯傦紙宸烇級涓撻」璧勯噾涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("甯傦紙宸烇級涓撻」璧勯噾")
+    private String citySpecialFundInvestment;
+
+    @NotBlank(message = "鍘匡紙甯傘�佸尯锛夋姇璧勬�婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘匡紙甯傘�佸尯锛夋姇璧勬�婚")
+    private String countyInvestmentTotal;
+
+    @NotBlank(message = "鍘匡紙甯傘�佸尯锛夐绠楀唴鎶曡祫涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘匡紙甯傘�佸尯锛夐绠楀唴鎶曡祫")
+    private String countyBudgetInvestment;
+
+    @NotBlank(message = "鍘匡紙甯傘�佸尯锛夎储鏀挎�у缓璁捐祫閲戜笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘匡紙甯傘�佸尯锛夎储鏀挎�у缓璁捐祫閲�")
+    private String countyFiscalInvestment;
+
+    @NotBlank(message = "鍘匡紙甯傘�佸尯锛変笓椤硅祫閲戜笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍘匡紙甯傘�佸尯锛変笓椤硅祫閲�")
+    private String countySpecialFundInvestment;
+
+    @NotBlank(message = "鍥藉唴璐锋鎬婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍥藉唴璐锋鎬婚")
+    private String domesticLoanTotal;
+
+    @NotBlank(message = "閾惰璐锋涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("閾惰璐锋")
+    private String bankLoan;
+
+    @NotBlank(message = "澶栧晢鎶曡祫鎬婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("澶栧晢鎶曡祫鎬婚")
+    private String foreignInvestmentTotal;
+
+    @NotBlank(message = "浼佷笟鑷鎬婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("浼佷笟鑷鎬婚")
+    private String enterpriseSelfRaisedTotal;
+
+    @NotBlank(message = "鍏朵粬鎶曡祫鎬婚涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍏朵粬鎶曡祫鎬婚")
+    private String otherInvestmentTotal;
+
+    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    @NotNull(message = "鍒涘缓浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓浜�")
+    private Long createBy;
+
+    @NotNull(message = "鏇存柊鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date gmtUpdateTime;
+
+    @NotNull(message = "鏇存柊浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏇存柊浜�")
+    private Long updateBy;
+
+    public static ProjectInvestmentFunding getEntityByForm(@NonNull ProjectInvestmentFundingForm form, ProjectInvestmentFunding entity) {
+        if(entity == null) {
+          entity = new ProjectInvestmentFunding();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectInvestmentInfoForm.java b/business/src/main/java/com/ycl/domain/form/ProjectInvestmentInfoForm.java
new file mode 100644
index 0000000..eaad73a
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectInvestmentInfoForm.java
@@ -0,0 +1,110 @@
+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.ProjectInvestmentInfo;
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "ProjectInvestmentInfo琛ㄥ崟", description = "鎶曡祫椤圭洰鍩虹淇℃伅琛ㄨ〃鍗�")
+public class ProjectInvestmentInfoForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
+
+    @NotNull(message = "寤鸿鍦扮偣鏄惁璺ㄥ煙涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("寤鸿鍦扮偣鏄惁璺ㄥ煙")
+    private Integer beCrossRegion;
+
+    @NotBlank(message = "椤圭洰寤鸿鍦扮偣涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰寤鸿鍦扮偣")
+    private String constructionLocation;
+
+    @NotBlank(message = "寤鸿璇︾粏鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("寤鸿璇︾粏鍦板潃")
+    private String detailedAddress;
+
+    @NotNull(message = "鏄惁鏄ˉ鐮侀」鐩笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏄惁鏄ˉ鐮侀」鐩�")
+    private Integer beCompensationProject;
+
+    @NotBlank(message = "琛ョ爜鍘熷洜涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("琛ョ爜鍘熷洜")
+    private String compensationReason;
+
+    @NotNull(message = "璁″垝寮�宸ユ椂闂翠笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("璁″垝寮�宸ユ椂闂�")
+    private Date plannedStartDate;
+
+    @NotNull(message = "鎷熷缓鎴愭椂闂翠笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎷熷缓鎴愭椂闂�")
+    private Date expectedCompletionDate;
+
+    @NotBlank(message = "鍥芥爣琛屼笟鍒嗙被涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍥芥爣琛屼笟鍒嗙被")
+    private String nationalIndustryClassification;
+
+    @NotBlank(message = "鎵�灞炶涓氬垎绫讳笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎵�灞炶涓氬垎绫�")
+    private String industryClassification;
+
+    @NotBlank(message = "椤圭洰寤鸿鎬ц川涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰寤鸿鎬ц川")
+    private String projectNature;
+
+    @NotBlank(message = "椤圭洰灞炴�т笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰灞炴��")
+    private String projectAttribute;
+
+    @NotNull(message = "鏄惁浣跨敤鍦熷湴涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏄惁浣跨敤鍦熷湴")
+    private Integer useEarth;
+
+    @NotBlank(message = "涓昏寤鸿鍐呭鍙婅妯′笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓昏寤鸿鍐呭鍙婅妯�")
+    private String contentScale;
+
+    @NotBlank(message = "寤虹骞冲彴浠g爜涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("寤虹骞冲彴浠g爜")
+    private String code;
+
+    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    @NotNull(message = "鍒涘缓浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓浜�")
+    private Long createBy;
+
+    @NotNull(message = "鏇存柊鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date gmtUpdateTime;
+
+    @NotNull(message = "鏇存柊浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏇存柊浜�")
+    private Long updateBy;
+
+    public static ProjectInvestmentInfo getEntityByForm(@NonNull ProjectInvestmentInfoForm form, ProjectInvestmentInfo entity) {
+        if(entity == null) {
+          entity = new ProjectInvestmentInfo();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectInvestmentPolicyComplianceForm.java b/business/src/main/java/com/ycl/domain/form/ProjectInvestmentPolicyComplianceForm.java
new file mode 100644
index 0000000..87130cf
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectInvestmentPolicyComplianceForm.java
@@ -0,0 +1,106 @@
+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.ProjectInvestmentPolicyCompliance;
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "ProjectInvestmentPolicyCompliance琛ㄥ崟", description = "鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛ㄨ〃鍗�")
+public class ProjectInvestmentPolicyComplianceForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
+
+    @NotBlank(message = "绗﹀悎浜т笟鏀跨瓥闄勪欢涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("绗﹀悎浜т笟鏀跨瓥闄勪欢")
+    private String policyComplianceAttachment;
+
+    @NotBlank(message = "鏄惁灞炰簬銆婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬩笅鐨勯」鐩笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏄惁灞炰簬銆婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬩笅鐨勯」鐩�")
+    private Boolean belongsToIndustryAdjustmentDirectory;
+
+    @NotBlank(message = "鏄惁灞炰簬鏈垪鍏ャ�婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬬殑鍏佽绫婚」鐩笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏄惁灞炰簬鏈垪鍏ャ�婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬬殑鍏佽绫婚」鐩�")
+    private Boolean belongsToAllowedProjects;
+
+    @NotNull(message = "鏄惁灞炰簬銆婅タ閮ㄥ湴鍖洪紦鍔辩被浜т笟鐩綍銆嬬殑椤圭洰涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏄惁灞炰簬銆婅タ閮ㄥ湴鍖洪紦鍔辩被浜т笟鐩綍銆嬬殑椤圭洰")
+    private Boolean belongsToWesternEncouragedDirectory;
+
+    @NotNull(message = "鏄惁涓嶅睘浜庝骇涓氭斂绛栫姝㈡姇璧勫缓璁炬垨瀹炶鏍稿噯銆佸鎵圭鐞嗙殑椤圭洰涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏄惁涓嶅睘浜庝骇涓氭斂绛栫姝㈡姇璧勫缓璁炬垨瀹炶鏍稿噯銆佸鎵圭鐞嗙殑椤圭洰")
+    private Boolean notBannedOrControlledProject;
+
+    @NotNull(message = "濉姤淇℃伅鏄惁鐪熷疄涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("濉姤淇℃伅鏄惁鐪熷疄")
+    private Boolean informationIsTrue;
+
+    @NotBlank(message = "涓撻」瑙勫垝澶嶅悎鎯呭喌涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓撻」瑙勫垝澶嶅悎鎯呭喌")
+    private String specialPlanningCompliance;
+
+    @NotBlank(message = "椤圭洰鑳借�楁儏鍐典笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰鑳借�楁儏鍐�")
+    private String energyConsumption;
+
+    @NotBlank(message = "椤圭洰骞寸患鍚堣兘婧愭秷璐归噺锛堟爣鍑嗙叅褰撻噺鍊硷級涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰骞寸患鍚堣兘婧愭秷璐归噺锛堟爣鍑嗙叅褰撻噺鍊硷級")
+    private String annualEnergyConsumption;
+
+    @NotBlank(message = "椤圭洰骞寸數鍔涙秷鑰楅噺锛堟爣鍑嗙叅褰撻噺鍊硷級涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰骞寸數鍔涙秷鑰楅噺锛堟爣鍑嗙叅褰撻噺鍊硷級")
+    private String annualElectricityConsumption;
+
+    @NotBlank(message = "鑺傝兘瀹℃煡锛�1闇�瑕侊紝0涓嶉渶瑕侊級涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鑺傝兘瀹℃煡锛�1闇�瑕侊紝0涓嶉渶瑕侊級")
+    private String energyCheck;
+
+    @NotBlank(message = "涓嶅啀鍗曠嫭杩涜鑺傝兘瀹℃煡鐨勭被鍨嬩笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓嶅啀鍗曠嫭杩涜鑺傝兘瀹℃煡鐨勭被鍨�")
+    private String noOnlyCheckType;
+
+    @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("澶囨敞")
+    private String remarks;
+
+    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    @NotNull(message = "鏇存柊鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date gmtUpdateTime;
+
+    @NotNull(message = "鍒涘缓浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓浜�")
+    private Long createBy;
+
+    @NotNull(message = "鏇存柊浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏇存柊浜�")
+    private Long updateBy;
+
+    public static ProjectInvestmentPolicyCompliance getEntityByForm(@NonNull ProjectInvestmentPolicyComplianceForm form, ProjectInvestmentPolicyCompliance entity) {
+        if(entity == null) {
+          entity = new ProjectInvestmentPolicyCompliance();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectInvestmentFundingQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectInvestmentFundingQuery.java
new file mode 100644
index 0000000..fc59a7c
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectInvestmentFundingQuery.java
@@ -0,0 +1,22 @@
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "ProjectInvestmentFunding鏌ヨ鍙傛暟", description = "椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃鏌ヨ鍙傛暟")
+public class ProjectInvestmentFundingQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectInvestmentInfoQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectInvestmentInfoQuery.java
new file mode 100644
index 0000000..0ee8406
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectInvestmentInfoQuery.java
@@ -0,0 +1,22 @@
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "ProjectInvestmentInfo鏌ヨ鍙傛暟", description = "鎶曡祫椤圭洰鍩虹淇℃伅琛ㄦ煡璇㈠弬鏁�")
+public class ProjectInvestmentInfoQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectInvestmentPolicyComplianceQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectInvestmentPolicyComplianceQuery.java
new file mode 100644
index 0000000..66d6f10
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectInvestmentPolicyComplianceQuery.java
@@ -0,0 +1,22 @@
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "ProjectInvestmentPolicyCompliance鏌ヨ鍙傛暟", description = "鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛ㄦ煡璇㈠弬鏁�")
+public class ProjectInvestmentPolicyComplianceQuery extends AbsQuery {
+}
+
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 d985ea8..2fc8f32 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java
@@ -5,11 +5,16 @@
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.lang.NonNull;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 椤圭洰绠$悊鍩虹淇℃伅琛ㄥ睍绀�
@@ -59,23 +64,20 @@
 
     /** 涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id) */
     @ApiModelProperty("涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id)")
-    private Integer competentDepartment;
+    private List<Long> competentDepartmentList;
 
     /** 琛屾斂鍖哄煙 */
     @ApiModelProperty("琛屾斂鍖哄煙")
-    private String areaCode;
+    private String area;
 
     /** 绠$悊褰掑彛  (0鍩烘湰寤鸿(鍙戞敼),  1鏇存柊鏀归��(缁忎俊),  2鍗曠函璐疆(鍙戞敼),  3淇℃伅鍖�(鍙戞敼),  4鍏朵粬鎶曡祫) */
     @ApiModelProperty("绠$悊褰掑彛  (0鍩烘湰寤鸿(鍙戞敼),  1鏇存柊鏀归��(缁忎俊),  2鍗曠函璐疆(鍙戞敼),  3淇℃伅鍖�(鍙戞敼),  4鍏朵粬鎶曡祫)")
-    private String managementCentralization;
+    private List<String> managementCentralizationList;
 
     /** 椤圭洰瀹℃壒绫诲瀷 */
     @ApiModelProperty("椤圭洰瀹℃壒绫诲瀷")
     private String projectApprovalType;
 
-    /** 鎶曡祫鐩綍(锛�) */
-    @ApiModelProperty("鎶曡祫鐩綍(锛�)")
-    private String investmentCatalogue;
 
     /** 閲嶇偣鍒嗙被  (0鐪侀噸鐐归」鐩�,  1閬傚畞甯傞噸鐐归」鐩�,  2.灏勬椽甯傞噸鐐归」鐩�,  3.涓�鑸」鐩�) */
     @ApiModelProperty("閲嶇偣鍒嗙被  (0鐪侀噸鐐归」鐩�,  1閬傚畞甯傞噸鐐归」鐩�,  2.灏勬椽甯傞噸鐐归」鐩�,  3.涓�鑸」鐩�)")
@@ -137,14 +139,6 @@
     @ApiModelProperty("鑱旂郴鏂瑰紡")
     private String contact;
 
-    /** 鍒涘缓鏃堕棿 */
-    @ApiModelProperty("鍒涘缓鏃堕棿")
-    private Date gmtCreateTime;
-
-    /** 鏇存柊鏃堕棿 */
-    @ApiModelProperty("鏇存柊鏃堕棿")
-    private Date gmtUpdateTime;
-
     /** 鏇存柊浜� */
     @ApiModelProperty("鏇存柊浜�")
     private Long updateBy;
@@ -153,13 +147,24 @@
     @ApiModelProperty("鍒涘缓浜�")
     private Long createBy;
 
-    // TODO 鍏宠仈鍏跺畠鍑犲紶琛�
-
     public static ProjectInfoVO getVoByEntity(@NonNull ProjectInfo entity, ProjectInfoVO vo) {
         if(vo == null) {
             vo = new ProjectInfoVO();
         }
         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)){
+            vo.setManagementCentralizationList(Arrays.asList(managementCentralization.split(",")));
+        }
         return vo;
     }
 
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java
new file mode 100644
index 0000000..b8369f8
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentFundingVO.java
@@ -0,0 +1,151 @@
+package com.ycl.domain.vo;
+
+import com.ycl.system.domain.base.AbsVo;
+import com.ycl.domain.entity.ProjectInvestmentFunding;
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃鍝嶅簲鏁版嵁", description = "椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃鍝嶅簲鏁版嵁")
+public class ProjectInvestmentFundingVO extends AbsVo {
+
+    /** 椤圭洰id */
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
+
+    /** 椤圭洰鎬绘姇璧勯 */
+    @ApiModelProperty("椤圭洰鎬绘姇璧勯")
+    private String totalInvestment;
+
+    /** 椤圭洰鏈噾 */
+    @ApiModelProperty("椤圭洰鏈噾")
+    private String principal;
+
+    /** 鏀垮簻鎶曡祫鎬婚 */
+    @ApiModelProperty("鏀垮簻鎶曡祫鎬婚")
+    private String governmentInvestmentTotal;
+
+    /** 涓ぎ鎶曡祫鎬婚 */
+    @ApiModelProperty("涓ぎ鎶曡祫鎬婚")
+    private String centralInvestmentTotal;
+
+    /** 涓ぎ棰勭畻鎶曡祫 */
+    @ApiModelProperty("涓ぎ棰勭畻鎶曡祫")
+    private String centralBudgetInvestment;
+
+    /** 涓ぎ璐㈡斂 */
+    @ApiModelProperty("涓ぎ璐㈡斂")
+    private String centralFiscalInvestment;
+
+    /** 涓ぎ涓撻」鍊哄埜绛归泦鐨勪笓椤瑰缓璁捐祫閲� */
+    @ApiModelProperty("涓ぎ涓撻」鍊哄埜绛归泦鐨勪笓椤瑰缓璁捐祫閲�")
+    private String centralSpecialBondInvestment;
+
+    /** 涓ぎ涓撻」寤鸿鍩洪噾 */
+    @ApiModelProperty("涓ぎ涓撻」寤鸿鍩洪噾")
+    private String centralSpecialFundInvestment;
+
+    /** 鐪佺骇鎶曡祫鎬婚 */
+    @ApiModelProperty("鐪佺骇鎶曡祫鎬婚")
+    private String provincialInvestmentTotal;
+
+    /** 鐪侀绠楀唴鎶曡祫 */
+    @ApiModelProperty("鐪侀绠楀唴鎶曡祫")
+    private String provincialBudgetInvestment;
+
+    /** 鐪佽储鏀挎�у缓璁炬姇璧� */
+    @ApiModelProperty("鐪佽储鏀挎�у缓璁炬姇璧�")
+    private String provincialFiscalInvestment;
+
+    /** 鐪佷笓椤瑰缓璁捐祫閲� */
+    @ApiModelProperty("鐪佷笓椤瑰缓璁捐祫閲�")
+    private String provincialSpecialFundInvestment;
+
+    /** 甯傦紙宸烇級鎶曡祫鎬婚 */
+    @ApiModelProperty("甯傦紙宸烇級鎶曡祫鎬婚")
+    private String cityInvestmentTotal;
+
+    /** 甯傦紙宸烇級棰勭畻鍐呮姇璧� */
+    @ApiModelProperty("甯傦紙宸烇級棰勭畻鍐呮姇璧�")
+    private String cityBudgetInvestment;
+
+    /** 甯傦紙宸烇級璐㈡斂鎬ф姇璧� */
+    @ApiModelProperty("甯傦紙宸烇級璐㈡斂鎬ф姇璧�")
+    private String cityFiscalInvestment;
+
+    /** 甯傦紙宸烇級涓撻」璧勯噾 */
+    @ApiModelProperty("甯傦紙宸烇級涓撻」璧勯噾")
+    private String citySpecialFundInvestment;
+
+    /** 鍘匡紙甯傘�佸尯锛夋姇璧勬�婚 */
+    @ApiModelProperty("鍘匡紙甯傘�佸尯锛夋姇璧勬�婚")
+    private String countyInvestmentTotal;
+
+    /** 鍘匡紙甯傘�佸尯锛夐绠楀唴鎶曡祫 */
+    @ApiModelProperty("鍘匡紙甯傘�佸尯锛夐绠楀唴鎶曡祫")
+    private String countyBudgetInvestment;
+
+    /** 鍘匡紙甯傘�佸尯锛夎储鏀挎�у缓璁捐祫閲� */
+    @ApiModelProperty("鍘匡紙甯傘�佸尯锛夎储鏀挎�у缓璁捐祫閲�")
+    private String countyFiscalInvestment;
+
+    /** 鍘匡紙甯傘�佸尯锛変笓椤硅祫閲� */
+    @ApiModelProperty("鍘匡紙甯傘�佸尯锛変笓椤硅祫閲�")
+    private String countySpecialFundInvestment;
+
+    /** 鍥藉唴璐锋鎬婚 */
+    @ApiModelProperty("鍥藉唴璐锋鎬婚")
+    private String domesticLoanTotal;
+
+    /** 閾惰璐锋 */
+    @ApiModelProperty("閾惰璐锋")
+    private String bankLoan;
+
+    /** 澶栧晢鎶曡祫鎬婚 */
+    @ApiModelProperty("澶栧晢鎶曡祫鎬婚")
+    private String foreignInvestmentTotal;
+
+    /** 浼佷笟鑷鎬婚 */
+    @ApiModelProperty("浼佷笟鑷鎬婚")
+    private String enterpriseSelfRaisedTotal;
+
+    /** 鍏朵粬鎶曡祫鎬婚 */
+    @ApiModelProperty("鍏朵粬鎶曡祫鎬婚")
+    private String otherInvestmentTotal;
+
+    /** 鍒涘缓鏃堕棿 */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    /** 鍒涘缓浜� */
+    @ApiModelProperty("鍒涘缓浜�")
+    private Long createBy;
+
+    /** 鏇存柊鏃堕棿 */
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date gmtUpdateTime;
+
+    /** 鏇存柊浜� */
+    @ApiModelProperty("鏇存柊浜�")
+    private Long updateBy;
+
+    public static ProjectInvestmentFundingVO getVoByEntity(@NonNull ProjectInvestmentFunding entity, ProjectInvestmentFundingVO vo) {
+        if(vo == null) {
+            vo = new ProjectInvestmentFundingVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentInfoVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentInfoVO.java
new file mode 100644
index 0000000..4cd10ec
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentInfoVO.java
@@ -0,0 +1,107 @@
+package com.ycl.domain.vo;
+
+import com.ycl.system.domain.base.AbsVo;
+import com.ycl.domain.entity.ProjectInvestmentInfo;
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "鎶曡祫椤圭洰鍩虹淇℃伅琛ㄥ搷搴旀暟鎹�", description = "鎶曡祫椤圭洰鍩虹淇℃伅琛ㄥ搷搴旀暟鎹�")
+public class ProjectInvestmentInfoVO extends AbsVo {
+
+    /** 椤圭洰id */
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
+
+    /** 寤鸿鍦扮偣鏄惁璺ㄥ煙 */
+    @ApiModelProperty("寤鸿鍦扮偣鏄惁璺ㄥ煙")
+    private Integer beCrossRegion;
+
+    /** 椤圭洰寤鸿鍦扮偣 */
+    @ApiModelProperty("椤圭洰寤鸿鍦扮偣")
+    private String constructionLocation;
+
+    /** 寤鸿璇︾粏鍦板潃 */
+    @ApiModelProperty("寤鸿璇︾粏鍦板潃")
+    private String detailedAddress;
+
+    /** 鏄惁鏄ˉ鐮侀」鐩� */
+    @ApiModelProperty("鏄惁鏄ˉ鐮侀」鐩�")
+    private Integer beCompensationProject;
+
+    /** 琛ョ爜鍘熷洜 */
+    @ApiModelProperty("琛ョ爜鍘熷洜")
+    private String compensationReason;
+
+    /** 璁″垝寮�宸ユ椂闂� */
+    @ApiModelProperty("璁″垝寮�宸ユ椂闂�")
+    private Date plannedStartDate;
+
+    /** 鎷熷缓鎴愭椂闂� */
+    @ApiModelProperty("鎷熷缓鎴愭椂闂�")
+    private Date expectedCompletionDate;
+
+    /** 鍥芥爣琛屼笟鍒嗙被 */
+    @ApiModelProperty("鍥芥爣琛屼笟鍒嗙被")
+    private String nationalIndustryClassification;
+
+    /** 鎵�灞炶涓氬垎绫� */
+    @ApiModelProperty("鎵�灞炶涓氬垎绫�")
+    private String industryClassification;
+
+    /** 椤圭洰寤鸿鎬ц川 */
+    @ApiModelProperty("椤圭洰寤鸿鎬ц川")
+    private String projectNature;
+
+    /** 椤圭洰灞炴�� */
+    @ApiModelProperty("椤圭洰灞炴��")
+    private String projectAttribute;
+
+    /** 鏄惁浣跨敤鍦熷湴 */
+    @ApiModelProperty("鏄惁浣跨敤鍦熷湴")
+    private Integer useEarth;
+
+    /** 涓昏寤鸿鍐呭鍙婅妯� */
+    @ApiModelProperty("涓昏寤鸿鍐呭鍙婅妯�")
+    private String contentScale;
+
+    /** 寤虹骞冲彴浠g爜 */
+    @ApiModelProperty("寤虹骞冲彴浠g爜")
+    private String code;
+
+    /** 鍒涘缓鏃堕棿 */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    /** 鍒涘缓浜� */
+    @ApiModelProperty("鍒涘缓浜�")
+    private Long createBy;
+
+    /** 鏇存柊鏃堕棿 */
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date gmtUpdateTime;
+
+    /** 鏇存柊浜� */
+    @ApiModelProperty("鏇存柊浜�")
+    private Long updateBy;
+
+    public static ProjectInvestmentInfoVO getVoByEntity(@NonNull ProjectInvestmentInfo entity, ProjectInvestmentInfoVO vo) {
+        if(vo == null) {
+            vo = new ProjectInvestmentInfoVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentPolicyComplianceVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentPolicyComplianceVO.java
new file mode 100644
index 0000000..a1406c6
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectInvestmentPolicyComplianceVO.java
@@ -0,0 +1,103 @@
+package com.ycl.domain.vo;
+
+import com.ycl.system.domain.base.AbsVo;
+import com.ycl.domain.entity.ProjectInvestmentPolicyCompliance;
+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 flq
+ * @since 2024-11-27
+ */
+@Data
+@ApiModel(value = "鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛ㄥ搷搴旀暟鎹�", description = "鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛ㄥ搷搴旀暟鎹�")
+public class ProjectInvestmentPolicyComplianceVO extends AbsVo {
+
+    /** 椤圭洰id */
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
+
+    /** 绗﹀悎浜т笟鏀跨瓥闄勪欢 */
+    @ApiModelProperty("绗﹀悎浜т笟鏀跨瓥闄勪欢")
+    private String policyComplianceAttachment;
+
+    /** 鏄惁灞炰簬銆婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬩笅鐨勯」鐩� */
+    @ApiModelProperty("鏄惁灞炰簬銆婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬩笅鐨勯」鐩�")
+    private Boolean belongsToIndustryAdjustmentDirectory;
+
+    /** 鏄惁灞炰簬鏈垪鍏ャ�婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬬殑鍏佽绫婚」鐩� */
+    @ApiModelProperty("鏄惁灞炰簬鏈垪鍏ャ�婁骇涓氱粨鏋勮皟鏁存寚瀵肩洰褰曘�嬬殑鍏佽绫婚」鐩�")
+    private Boolean belongsToAllowedProjects;
+
+    /** 鏄惁灞炰簬銆婅タ閮ㄥ湴鍖洪紦鍔辩被浜т笟鐩綍銆嬬殑椤圭洰 */
+    @ApiModelProperty("鏄惁灞炰簬銆婅タ閮ㄥ湴鍖洪紦鍔辩被浜т笟鐩綍銆嬬殑椤圭洰")
+    private Boolean belongsToWesternEncouragedDirectory;
+
+    /** 鏄惁涓嶅睘浜庝骇涓氭斂绛栫姝㈡姇璧勫缓璁炬垨瀹炶鏍稿噯銆佸鎵圭鐞嗙殑椤圭洰 */
+    @ApiModelProperty("鏄惁涓嶅睘浜庝骇涓氭斂绛栫姝㈡姇璧勫缓璁炬垨瀹炶鏍稿噯銆佸鎵圭鐞嗙殑椤圭洰")
+    private Boolean notBannedOrControlledProject;
+
+    /** 濉姤淇℃伅鏄惁鐪熷疄 */
+    @ApiModelProperty("濉姤淇℃伅鏄惁鐪熷疄")
+    private Integer informationIsTrue;
+
+    /** 涓撻」瑙勫垝澶嶅悎鎯呭喌 */
+    @ApiModelProperty("涓撻」瑙勫垝澶嶅悎鎯呭喌")
+    private String specialPlanningCompliance;
+
+    /** 椤圭洰鑳借�楁儏鍐� */
+    @ApiModelProperty("椤圭洰鑳借�楁儏鍐�")
+    private String energyConsumption;
+
+    /** 椤圭洰骞寸患鍚堣兘婧愭秷璐归噺锛堟爣鍑嗙叅褰撻噺鍊硷級 */
+    @ApiModelProperty("椤圭洰骞寸患鍚堣兘婧愭秷璐归噺锛堟爣鍑嗙叅褰撻噺鍊硷級")
+    private String annualEnergyConsumption;
+
+    /** 椤圭洰骞寸數鍔涙秷鑰楅噺锛堟爣鍑嗙叅褰撻噺鍊硷級 */
+    @ApiModelProperty("椤圭洰骞寸數鍔涙秷鑰楅噺锛堟爣鍑嗙叅褰撻噺鍊硷級")
+    private String annualElectricityConsumption;
+
+    /** 鑺傝兘瀹℃煡锛�1闇�瑕侊紝0涓嶉渶瑕侊級 */
+    @ApiModelProperty("鑺傝兘瀹℃煡锛�1闇�瑕侊紝0涓嶉渶瑕侊級")
+    private String energyCheck;
+
+    /** 涓嶅啀鍗曠嫭杩涜鑺傝兘瀹℃煡鐨勭被鍨� */
+    @ApiModelProperty("涓嶅啀鍗曠嫭杩涜鑺傝兘瀹℃煡鐨勭被鍨�")
+    private String noOnlyCheckType;
+
+    /** 澶囨敞 */
+    @ApiModelProperty("澶囨敞")
+    private String remarks;
+
+    /** 鍒涘缓鏃堕棿 */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    /** 鏇存柊鏃堕棿 */
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date gmtUpdateTime;
+
+    /** 鍒涘缓浜� */
+    @ApiModelProperty("鍒涘缓浜�")
+    private Long createBy;
+
+    /** 鏇存柊浜� */
+    @ApiModelProperty("鏇存柊浜�")
+    private Long updateBy;
+
+    public static ProjectInvestmentPolicyComplianceVO getVoByEntity(@NonNull ProjectInvestmentPolicyCompliance entity, ProjectInvestmentPolicyComplianceVO vo) {
+        if(vo == null) {
+            vo = new ProjectInvestmentPolicyComplianceVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/FileMapper.java b/business/src/main/java/com/ycl/mapper/FileMapper.java
new file mode 100644
index 0000000..226d6fc
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/FileMapper.java
@@ -0,0 +1,23 @@
+package com.ycl.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.entity.File;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 椤圭洰鏂囦欢鍏宠仈琛� Mapper 鎺ュ彛
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Mapper
+public interface FileMapper extends BaseMapper<File> {
+
+    /**
+     * id鏌ユ壘椤圭洰鏂囦欢鍏宠仈琛�
+     * @param id
+     * @return
+     */
+    File getById(Integer id);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectInvestmentFundingMapper.java b/business/src/main/java/com/ycl/mapper/ProjectInvestmentFundingMapper.java
new file mode 100644
index 0000000..78e91ef
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectInvestmentFundingMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectInvestmentFunding;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.vo.ProjectInvestmentFundingVO;
+import com.ycl.domain.form.ProjectInvestmentFundingForm;
+import com.ycl.domain.query.ProjectInvestmentFundingQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃 Mapper 鎺ュ彛
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Mapper
+public interface ProjectInvestmentFundingMapper extends BaseMapper<ProjectInvestmentFunding> {
+
+    /**
+     * id鏌ユ壘椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃
+     * @param id
+     * @return
+     */
+    ProjectInvestmentFundingVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectInvestmentFundingQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectInvestmentInfoMapper.java b/business/src/main/java/com/ycl/mapper/ProjectInvestmentInfoMapper.java
new file mode 100644
index 0000000..27d927c
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectInvestmentInfoMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectInvestmentInfo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.vo.ProjectInvestmentInfoVO;
+import com.ycl.domain.form.ProjectInvestmentInfoForm;
+import com.ycl.domain.query.ProjectInvestmentInfoQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鎶曡祫椤圭洰鍩虹淇℃伅琛� Mapper 鎺ュ彛
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Mapper
+public interface ProjectInvestmentInfoMapper extends BaseMapper<ProjectInvestmentInfo> {
+
+    /**
+     * id鏌ユ壘鎶曡祫椤圭洰鍩虹淇℃伅琛�
+     * @param id
+     * @return
+     */
+    ProjectInvestmentInfoVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectInvestmentInfoQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectInvestmentPolicyComplianceMapper.java b/business/src/main/java/com/ycl/mapper/ProjectInvestmentPolicyComplianceMapper.java
new file mode 100644
index 0000000..8ab10af
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectInvestmentPolicyComplianceMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectInvestmentPolicyCompliance;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.vo.ProjectInvestmentPolicyComplianceVO;
+import com.ycl.domain.form.ProjectInvestmentPolicyComplianceForm;
+import com.ycl.domain.query.ProjectInvestmentPolicyComplianceQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛� Mapper 鎺ュ彛
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Mapper
+public interface ProjectInvestmentPolicyComplianceMapper extends BaseMapper<ProjectInvestmentPolicyCompliance> {
+
+    /**
+     * id鏌ユ壘鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛�
+     * @param id
+     * @return
+     */
+    ProjectInvestmentPolicyComplianceVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectInvestmentPolicyComplianceQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/service/FileService.java b/business/src/main/java/com/ycl/service/FileService.java
new file mode 100644
index 0000000..04891c9
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/FileService.java
@@ -0,0 +1,46 @@
+package com.ycl.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.File;
+
+import java.util.List;
+
+/**
+ * 椤圭洰鏂囦欢鍏宠仈琛� 鏈嶅姟绫�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+public interface FileService extends IService<File> {
+
+    /**
+     * 娣诲姞
+     * @param file
+     * @return
+     */
+    Result add(File file);
+
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+}
diff --git a/business/src/main/java/com/ycl/service/ProjectInvestmentFundingService.java b/business/src/main/java/com/ycl/service/ProjectInvestmentFundingService.java
new file mode 100644
index 0000000..9c91a45
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectInvestmentFundingService.java
@@ -0,0 +1,65 @@
+package com.ycl.service;
+
+import com.ycl.domain.entity.ProjectInvestmentFunding;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectInvestmentFundingForm;
+import com.ycl.domain.query.ProjectInvestmentFundingQuery;
+import java.util.List;
+
+/**
+ * 椤圭洰鎶曡祫鍙婅祫閲戞潵婧愭儏鍐佃〃 鏈嶅姟绫�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+public interface ProjectInvestmentFundingService extends IService<ProjectInvestmentFunding> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectInvestmentFundingForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectInvestmentFundingForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectInvestmentFundingQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/ProjectInvestmentInfoService.java b/business/src/main/java/com/ycl/service/ProjectInvestmentInfoService.java
new file mode 100644
index 0000000..0989923
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectInvestmentInfoService.java
@@ -0,0 +1,65 @@
+package com.ycl.service;
+
+import com.ycl.domain.entity.ProjectInvestmentInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectInvestmentInfoForm;
+import com.ycl.domain.query.ProjectInvestmentInfoQuery;
+import java.util.List;
+
+/**
+ * 鎶曡祫椤圭洰鍩虹淇℃伅琛� 鏈嶅姟绫�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+public interface ProjectInvestmentInfoService extends IService<ProjectInvestmentInfo> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectInvestmentInfoForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectInvestmentInfoForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectInvestmentInfoQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/ProjectInvestmentPolicyComplianceService.java b/business/src/main/java/com/ycl/service/ProjectInvestmentPolicyComplianceService.java
new file mode 100644
index 0000000..46aab3c
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectInvestmentPolicyComplianceService.java
@@ -0,0 +1,65 @@
+package com.ycl.service;
+
+import com.ycl.domain.entity.ProjectInvestmentPolicyCompliance;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectInvestmentPolicyComplianceForm;
+import com.ycl.domain.query.ProjectInvestmentPolicyComplianceQuery;
+import java.util.List;
+
+/**
+ * 鎶曡祫椤圭洰浜т笟鏀跨瓥绗﹀悎鎯呭喌琛� 鏈嶅姟绫�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+public interface ProjectInvestmentPolicyComplianceService extends IService<ProjectInvestmentPolicyCompliance> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectInvestmentPolicyComplianceForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectInvestmentPolicyComplianceForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectInvestmentPolicyComplianceQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/impl/FileServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FileServiceImpl.java
new file mode 100644
index 0000000..7bced1f
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/FileServiceImpl.java
@@ -0,0 +1,72 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.File;
+import com.ycl.mapper.FileMapper;
+import com.ycl.service.FileService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.util.List;
+
+/**
+ * 椤圭洰鏂囦欢鍏宠仈琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author flq
+ * @since 2024-11-27
+ */
+@Service
+@RequiredArgsConstructor
+public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements FileService {
+
+    private final FileMapper fileMapper;
+
+    /**
+     * 娣诲姞
+     * @param
+     * @return
+     */
+    @Override
+    public Result add(File file) {
+        baseMapper.insert(file);
+        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("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        File vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+}
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 585dfd0..5c18d4a 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.common.base.Result;
+import com.ycl.domain.entity.File;
 import com.ycl.domain.entity.ProjectInfo;
 import com.ycl.domain.form.ProjectInfoForm;
 import com.ycl.domain.query.ProjectInfoQuery;
@@ -13,6 +14,7 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
 import java.util.ArrayList;
@@ -40,9 +42,14 @@
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result add(ProjectInfoForm form) {
+        //娣诲姞鍩烘湰淇℃伅
         ProjectInfo entity = ProjectInfoForm.getEntityByForm(form, null);
-        baseMapper.insert(entity);
+//        baseMapper.insert(entity);
+        //娣诲姞鏂囦欢
+        List<File> fileList = form.getFileList();
+
         return Result.ok("娣诲姞鎴愬姛");
     }
 
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java
new file mode 100644
index 0000000..d77109b
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectInvestmentFundingServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.domain.entity.ProjectInvestmentFunding;
+import com.ycl.mapper.ProjectInvestmentFundingMapper;
+import com.ycl.service.ProjectInvestmentFundingService;
+import com.ycl.common.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectInvestmentFundingForm;
+import com.ycl.domain.vo.ProjectInvestmentFundingVO;
+import com.ycl.domain.query.ProjectInvestmentFundingQuery;
+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 flq
+ * @since 2024-11-27
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectInvestmentFundingServiceImpl extends ServiceImpl<ProjectInvestmentFundingMapper, ProjectInvestmentFunding> implements ProjectInvestmentFundingService {
+
+    private final ProjectInvestmentFundingMapper projectInvestmentFundingMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectInvestmentFundingForm form) {
+        ProjectInvestmentFunding entity = ProjectInvestmentFundingForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectInvestmentFundingForm form) {
+        ProjectInvestmentFunding 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(ProjectInvestmentFundingQuery query) {
+        IPage<ProjectInvestmentFundingVO> page = PageUtil.getPage(query, ProjectInvestmentFundingVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProjectInvestmentFundingVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectInvestmentFunding> entities = baseMapper.selectList(null);
+        List<ProjectInvestmentFundingVO> vos = entities.stream()
+                .map(entity -> ProjectInvestmentFundingVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectInvestmentInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectInvestmentInfoServiceImpl.java
new file mode 100644
index 0000000..064a4b9
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectInvestmentInfoServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.domain.entity.ProjectInvestmentInfo;
+import com.ycl.mapper.ProjectInvestmentInfoMapper;
+import com.ycl.service.ProjectInvestmentInfoService;
+import com.ycl.common.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectInvestmentInfoForm;
+import com.ycl.domain.vo.ProjectInvestmentInfoVO;
+import com.ycl.domain.query.ProjectInvestmentInfoQuery;
+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 flq
+ * @since 2024-11-27
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectInvestmentInfoServiceImpl extends ServiceImpl<ProjectInvestmentInfoMapper, ProjectInvestmentInfo> implements ProjectInvestmentInfoService {
+
+    private final ProjectInvestmentInfoMapper projectInvestmentInfoMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectInvestmentInfoForm form) {
+        ProjectInvestmentInfo entity = ProjectInvestmentInfoForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectInvestmentInfoForm form) {
+        ProjectInvestmentInfo 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(ProjectInvestmentInfoQuery query) {
+        IPage<ProjectInvestmentInfoVO> page = PageUtil.getPage(query, ProjectInvestmentInfoVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProjectInvestmentInfoVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectInvestmentInfo> entities = baseMapper.selectList(null);
+        List<ProjectInvestmentInfoVO> vos = entities.stream()
+                .map(entity -> ProjectInvestmentInfoVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectInvestmentPolicyComplianceServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectInvestmentPolicyComplianceServiceImpl.java
new file mode 100644
index 0000000..8299d67
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectInvestmentPolicyComplianceServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.domain.entity.ProjectInvestmentPolicyCompliance;
+import com.ycl.mapper.ProjectInvestmentPolicyComplianceMapper;
+import com.ycl.service.ProjectInvestmentPolicyComplianceService;
+import com.ycl.common.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectInvestmentPolicyComplianceForm;
+import com.ycl.domain.vo.ProjectInvestmentPolicyComplianceVO;
+import com.ycl.domain.query.ProjectInvestmentPolicyComplianceQuery;
+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 flq
+ * @since 2024-11-27
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectInvestmentPolicyComplianceServiceImpl extends ServiceImpl<ProjectInvestmentPolicyComplianceMapper, ProjectInvestmentPolicyCompliance> implements ProjectInvestmentPolicyComplianceService {
+
+    private final ProjectInvestmentPolicyComplianceMapper projectInvestmentPolicyComplianceMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectInvestmentPolicyComplianceForm form) {
+        ProjectInvestmentPolicyCompliance entity = ProjectInvestmentPolicyComplianceForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectInvestmentPolicyComplianceForm form) {
+        ProjectInvestmentPolicyCompliance 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(ProjectInvestmentPolicyComplianceQuery query) {
+        IPage<ProjectInvestmentPolicyComplianceVO> page = PageUtil.getPage(query, ProjectInvestmentPolicyComplianceVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProjectInvestmentPolicyComplianceVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectInvestmentPolicyCompliance> entities = baseMapper.selectList(null);
+        List<ProjectInvestmentPolicyComplianceVO> vos = entities.stream()
+                .map(entity -> ProjectInvestmentPolicyComplianceVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/resources/mapper/FileMapper.xml b/business/src/main/resources/mapper/FileMapper.xml
new file mode 100644
index 0000000..686e6c2
--- /dev/null
+++ b/business/src/main/resources/mapper/FileMapper.xml
@@ -0,0 +1,30 @@
+<?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.FileMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.entity.File">
+        <result column="url" property="url" />
+        <result column="bus_id" property="busId" />
+        <result column="type" property="type" />
+        <result column="name" property="name" />
+        <result column="original_name" property="originalName" />
+    </resultMap>
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TF.url,
+            TF.bus_id,
+            TF.type,
+            TF.name,
+            TF.original_name,
+            TF.id
+        FROM
+            t_file TF
+        WHERE
+            TF.id = #{id} AND TF.deleted = 0
+    </select>
+
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectInfoMapper.xml b/business/src/main/resources/mapper/ProjectInfoMapper.xml
index 39be98b..4beeb90 100644
--- a/business/src/main/resources/mapper/ProjectInfoMapper.xml
+++ b/business/src/main/resources/mapper/ProjectInfoMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.ycl.mapper.ProjectInfoMapper">
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectInfoVO">
+    <resultMap id="BaseResultMap" type="com.ycl.domain.entity.ProjectInfo">
         <id column="id" property="id"/>
         <result column="project_name" property="projectName" />
         <result column="project_code" property="projectCode" />
@@ -15,10 +15,9 @@
         <result column="project_phase" property="projectPhase" />
         <result column="tag" property="tag" />
         <result column="competent_department" property="competentDepartment" />
-        <result column="area_code" property="areaCode" />
+        <result column="area" property="area" />
         <result column="management_centralization" property="managementCentralization" />
         <result column="project_approval_type" property="projectApprovalType" />
-        <result column="investment_catalogue" property="investmentCatalogue" />
         <result column="importance_type" property="importanceType" />
         <result column="year" property="year" />
         <result column="year_invest_amount" property="yearInvestAmount" />
@@ -34,16 +33,11 @@
         <result column="project_owner_unit" property="projectOwnerUnit" />
         <result column="project_contact_person" property="projectContactPerson" />
         <result column="contact" property="contact" />
-        <result column="gmt_create_time" property="gmtCreateTime" />
-        <result column="gmt_update_time" property="gmtUpdateTime" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_update" property="gmtUpdate" />
         <result column="update_by" property="updateBy" />
         <result column="create_by" property="createBy" />
     </resultMap>
-
-
-
-
-
 
 
     <select id="getById" resultMap="BaseResultMap">
@@ -58,10 +52,9 @@
             TPI.project_phase,
             TPI.tag,
             TPI.competent_department,
-            TPI.area_code,
+            TPI.area,
             TPI.management_centralization,
             TPI.project_approval_type,
-            TPI.investment_catalogue,
             TPI.importance_type,
             TPI.year,
             TPI.year_invest_amount,
@@ -77,8 +70,8 @@
             TPI.project_owner_unit,
             TPI.project_contact_person,
             TPI.contact,
-            TPI.gmt_create_time,
-            TPI.gmt_update_time,
+            TPI.gmt_create,
+            TPI.gmt_update,
             TPI.update_by,
             TPI.create_by,
             TPI.id
@@ -101,10 +94,9 @@
             TPI.project_phase,
             TPI.tag,
             TPI.competent_department,
-            TPI.area_code,
+            TPI.area,
             TPI.management_centralization,
             TPI.project_approval_type,
-            TPI.investment_catalogue,
             TPI.importance_type,
             TPI.year,
             TPI.year_invest_amount,
@@ -120,8 +112,8 @@
             TPI.project_owner_unit,
             TPI.project_contact_person,
             TPI.contact,
-            TPI.gmt_create_time,
-            TPI.gmt_update_time,
+            TPI.gmt_create,
+            TPI.gmt_update,
             TPI.update_by,
             TPI.create_by,
             TPI.id
diff --git a/business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml b/business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml
new file mode 100644
index 0000000..fbe5946
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectInvestmentFundingMapper.xml
@@ -0,0 +1,124 @@
+<?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.ProjectInvestmentFundingMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectInvestmentFundingVO">
+        <result column="project_id" property="projectId" />
+        <result column="total_investment" property="totalInvestment" />
+        <result column="principal" property="principal" />
+        <result column="government_investment_total" property="governmentInvestmentTotal" />
+        <result column="central_investment_total" property="centralInvestmentTotal" />
+        <result column="central_budget_investment" property="centralBudgetInvestment" />
+        <result column="central_fiscal_investment" property="centralFiscalInvestment" />
+        <result column="central_special_bond_investment" property="centralSpecialBondInvestment" />
+        <result column="central_special_fund_investment" property="centralSpecialFundInvestment" />
+        <result column="provincial_investment_total" property="provincialInvestmentTotal" />
+        <result column="provincial_budget_investment" property="provincialBudgetInvestment" />
+        <result column="provincial_fiscal_investment" property="provincialFiscalInvestment" />
+        <result column="provincial_special_fund_investment" property="provincialSpecialFundInvestment" />
+        <result column="city_investment_total" property="cityInvestmentTotal" />
+        <result column="city_budget_investment" property="cityBudgetInvestment" />
+        <result column="city_fiscal_investment" property="cityFiscalInvestment" />
+        <result column="city_special_fund_investment" property="citySpecialFundInvestment" />
+        <result column="county_investment_total" property="countyInvestmentTotal" />
+        <result column="county_budget_investment" property="countyBudgetInvestment" />
+        <result column="county_fiscal_investment" property="countyFiscalInvestment" />
+        <result column="county_special_fund_investment" property="countySpecialFundInvestment" />
+        <result column="domestic_loan_total" property="domesticLoanTotal" />
+        <result column="bank_loan" property="bankLoan" />
+        <result column="foreign_investment_total" property="foreignInvestmentTotal" />
+        <result column="enterprise_self_raised_total" property="enterpriseSelfRaisedTotal" />
+        <result column="other_investment_total" property="otherInvestmentTotal" />
+        <result column="gmt_create_time" property="gmtCreateTime" />
+        <result column="create_by" property="createBy" />
+        <result column="gmt_update_time" property="gmtUpdateTime" />
+        <result column="update_by" property="updateBy" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            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,
+            TPIF.central_special_fund_investment,
+            TPIF.provincial_investment_total,
+            TPIF.provincial_budget_investment,
+            TPIF.provincial_fiscal_investment,
+            TPIF.provincial_special_fund_investment,
+            TPIF.city_investment_total,
+            TPIF.city_budget_investment,
+            TPIF.city_fiscal_investment,
+            TPIF.city_special_fund_investment,
+            TPIF.county_investment_total,
+            TPIF.county_budget_investment,
+            TPIF.county_fiscal_investment,
+            TPIF.county_special_fund_investment,
+            TPIF.domestic_loan_total,
+            TPIF.bank_loan,
+            TPIF.foreign_investment_total,
+            TPIF.enterprise_self_raised_total,
+            TPIF.other_investment_total,
+            TPIF.gmt_create_time,
+            TPIF.create_by,
+            TPIF.gmt_update_time,
+            TPIF.update_by,
+            TPIF.id
+        FROM
+            t_project_investment_funding TPIF
+        WHERE
+            TPIF.id = #{id} AND TPIF.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            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,
+            TPIF.central_special_fund_investment,
+            TPIF.provincial_investment_total,
+            TPIF.provincial_budget_investment,
+            TPIF.provincial_fiscal_investment,
+            TPIF.provincial_special_fund_investment,
+            TPIF.city_investment_total,
+            TPIF.city_budget_investment,
+            TPIF.city_fiscal_investment,
+            TPIF.city_special_fund_investment,
+            TPIF.county_investment_total,
+            TPIF.county_budget_investment,
+            TPIF.county_fiscal_investment,
+            TPIF.county_special_fund_investment,
+            TPIF.domestic_loan_total,
+            TPIF.bank_loan,
+            TPIF.foreign_investment_total,
+            TPIF.enterprise_self_raised_total,
+            TPIF.other_investment_total,
+            TPIF.gmt_create_time,
+            TPIF.create_by,
+            TPIF.gmt_update_time,
+            TPIF.update_by,
+            TPIF.id
+        FROM
+            t_project_investment_funding TPIF
+        WHERE
+            TPIF.deleted = 0
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectInvestmentInfoMapper.xml b/business/src/main/resources/mapper/ProjectInvestmentInfoMapper.xml
new file mode 100644
index 0000000..826486c
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectInvestmentInfoMapper.xml
@@ -0,0 +1,91 @@
+<?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.ProjectInvestmentInfoMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectInvestmentInfoVO">
+        <result column="project_id" property="projectId" />
+        <result column="be_cross_region" property="beCrossRegion" />
+        <result column="construction_location" property="constructionLocation" />
+        <result column="detailed_address" property="detailedAddress" />
+        <result column="be_compensation_project" property="beCompensationProject" />
+        <result column="compensation_reason" property="compensationReason" />
+        <result column="planned_start_date" property="plannedStartDate" />
+        <result column="expected_completion_date" property="expectedCompletionDate" />
+        <result column="national_industry_classification" property="nationalIndustryClassification" />
+        <result column="industry_classification" property="industryClassification" />
+        <result column="project_nature" property="projectNature" />
+        <result column="project_attribute" property="projectAttribute" />
+        <result column="use_earth" property="useEarth" />
+        <result column="content_scale" property="contentScale" />
+        <result column="code" property="code" />
+        <result column="gmt_create_time" property="gmtCreateTime" />
+        <result column="create_by" property="createBy" />
+        <result column="gmt_update_time" property="gmtUpdateTime" />
+        <result column="update_by" property="updateBy" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            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_time,
+            TPII.create_by,
+            TPII.gmt_update_time,
+            TPII.update_by,
+            TPII.id
+        FROM
+            t_project_investment_info TPII
+        WHERE
+            TPII.id = #{id} AND TPII.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            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_time,
+            TPII.create_by,
+            TPII.gmt_update_time,
+            TPII.update_by,
+            TPII.id
+        FROM
+            t_project_investment_info TPII
+        WHERE
+            TPII.deleted = 0
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectInvestmentPolicyComplianceMapper.xml b/business/src/main/resources/mapper/ProjectInvestmentPolicyComplianceMapper.xml
new file mode 100644
index 0000000..f6df228
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectInvestmentPolicyComplianceMapper.xml
@@ -0,0 +1,88 @@
+<?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.ProjectInvestmentPolicyComplianceMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectInvestmentPolicyComplianceVO">
+        <result column="project_id" property="projectId" />
+        <result column="policy_compliance_attachment" property="policyComplianceAttachment" />
+        <result column="belongs_to_industry_adjustment_directory" property="belongsToIndustryAdjustmentDirectory" />
+        <result column="belongs_to_allowed_projects" property="belongsToAllowedProjects" />
+        <result column="belongs_to_western_encouraged_directory" property="belongsToWesternEncouragedDirectory" />
+        <result column="not_banned_or_controlled_project" property="notBannedOrControlledProject" />
+        <result column="information_is_true" property="informationIsTrue" />
+        <result column="special_planning_compliance" property="specialPlanningCompliance" />
+        <result column="energy_consumption" property="energyConsumption" />
+        <result column="annual_energy_consumption" property="annualEnergyConsumption" />
+        <result column="annual_electricity_consumption" property="annualElectricityConsumption" />
+        <result column="energy_check" property="energyCheck" />
+        <result column="no_only_check_type" property="noOnlyCheckType" />
+        <result column="remarks" property="remarks" />
+        <result column="gmt_create_time" property="gmtCreateTime" />
+        <result column="gmt_update_time" property="gmtUpdateTime" />
+        <result column="create_by" property="createBy" />
+        <result column="update_by" property="updateBy" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TPIPC.project_id,
+            TPIPC.policy_compliance_attachment,
+            TPIPC.belongs_to_industry_adjustment_directory,
+            TPIPC.belongs_to_allowed_projects,
+            TPIPC.belongs_to_western_encouraged_directory,
+            TPIPC.not_banned_or_controlled_project,
+            TPIPC.information_is_true,
+            TPIPC.special_planning_compliance,
+            TPIPC.energy_consumption,
+            TPIPC.annual_energy_consumption,
+            TPIPC.annual_electricity_consumption,
+            TPIPC.energy_check,
+            TPIPC.no_only_check_type,
+            TPIPC.remarks,
+            TPIPC.gmt_create_time,
+            TPIPC.gmt_update_time,
+            TPIPC.create_by,
+            TPIPC.update_by,
+            TPIPC.id
+        FROM
+            t_project_investment_policy_compliance TPIPC
+        WHERE
+            TPIPC.id = #{id} AND TPIPC.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TPIPC.project_id,
+            TPIPC.policy_compliance_attachment,
+            TPIPC.belongs_to_industry_adjustment_directory,
+            TPIPC.belongs_to_allowed_projects,
+            TPIPC.belongs_to_western_encouraged_directory,
+            TPIPC.not_banned_or_controlled_project,
+            TPIPC.information_is_true,
+            TPIPC.special_planning_compliance,
+            TPIPC.energy_consumption,
+            TPIPC.annual_energy_consumption,
+            TPIPC.annual_electricity_consumption,
+            TPIPC.energy_check,
+            TPIPC.no_only_check_type,
+            TPIPC.remarks,
+            TPIPC.gmt_create_time,
+            TPIPC.gmt_update_time,
+            TPIPC.create_by,
+            TPIPC.update_by,
+            TPIPC.id
+        FROM
+            t_project_investment_policy_compliance TPIPC
+        WHERE
+            TPIPC.deleted = 0
+    </select>
+
+</mapper>
diff --git a/common/src/main/java/com/ycl/common/utils/ProjectCodeGenerator.java b/common/src/main/java/com/ycl/common/utils/ProjectCodeGenerator.java
new file mode 100644
index 0000000..30bf6e7
--- /dev/null
+++ b/common/src/main/java/com/ycl/common/utils/ProjectCodeGenerator.java
@@ -0,0 +1,49 @@
+package com.ycl.common.utils;
+
+import java.util.Random;
+
+/**
+ * 椤圭洰浠g爜鐢熸垚宸ュ叿绫�
+ *
+ * @Author: ljx
+ * @CreateTime: 2024-11-04 15:06
+ */
+
+public class ProjectCodeGenerator {
+
+    private static final String PROJECT_PREFIX = "SHXM-"; // 椤圭洰缂栧彿鍓嶇紑
+    private static final String ENGINEERING_PREFIX = "SHGC-";
+    private static final Random RANDOM = new Random();
+
+    /**
+     * 鏍规嵁褰撳墠鏃堕棿鎴冲拰鐗瑰畾浠g爜鐢熸垚椤圭洰缂栧彿
+     * @return 鐢熸垚鐨勯」鐩紪鍙�
+     */
+    public static String generateProjectCode() {
+        // 鑾峰彇褰撳墠鏃堕棿鐨勬椂闂存埑
+        long timestamp = System.currentTimeMillis();
+        // 鐢熸垚闅忔満鏁帮紝澧炲姞鍞竴鎬�
+        int randomNum = RANDOM.nextInt(1000);
+        // 鎷兼帴鍓嶇紑銆佹椂闂存埑鍜岄殢鏈烘暟鐢熸垚椤圭洰缂栧彿
+        return PROJECT_PREFIX + timestamp + String.format("%03d", randomNum);
+    }
+
+    /**
+     * 鐢熸垚宸ョ▼缂栫爜
+     * @return 鐢熸垚宸ョ▼缂栧彿
+     */
+    public static String generateEngineeringCode() {
+        // 鑾峰彇褰撳墠鏃堕棿鐨勬椂闂存埑
+        long timestamp = System.currentTimeMillis();
+        // 鐢熸垚闅忔満鏁帮紝澧炲姞鍞竴鎬�
+        int randomNum = RANDOM.nextInt(1000);
+        // 鎷兼帴鍓嶇紑銆佹椂闂存埑鍜岄殢鏈烘暟鐢熸垚宸ョ▼缂栧彿
+        return ENGINEERING_PREFIX + timestamp + String.format("%03d", randomNum);
+    }
+
+    public static void main(String[] args) {
+        // 娴嬭瘯鐢熸垚椤圭洰缂栧彿
+        String projectCode = generateEngineeringCode();
+        System.out.println("Generated Project Code: " + projectCode);
+    }
+}
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 f4d4b87..9eb0cea 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
@@ -2,6 +2,8 @@
 
 import java.util.List;
 
+import com.ycl.common.base.Result;
+import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,7 +37,10 @@
 public class SysDeptController extends BaseController {
 
     private final ISysDeptService deptService;
-
+    //涓氫富绔痠d
+    private final static Long userPortId = 101L;
+    //瀹℃壒绔痠d
+    private final static Long approvalPortId = 102L;
     /**
      * 鑾峰彇閮ㄩ棬鍒楄〃
      */
@@ -131,4 +136,12 @@
         deptService.checkDeptDataScope(deptId);
         return toAjax(deptService.deleteDeptById(deptId));
     }
+
+    @GetMapping("/approvalList")
+    @ApiOperation(value = "瀹℃壒閮ㄩ棬涓嬫媺鍒楄〃", notes = "瀹℃壒閮ㄩ棬涓嬫媺鍒楄〃")
+    public Result approvalList() {
+        SysDept dept = new SysDept();
+        dept.setParentId(approvalPortId);
+        return deptService.all(dept);
+    }
 }
diff --git a/start/src/main/resources/application-dev.yml b/start/src/main/resources/application-dev.yml
index 77a2e7d..4c99180 100644
--- a/start/src/main/resources/application-dev.yml
+++ b/start/src/main/resources/application-dev.yml
@@ -1,3 +1,19 @@
+# 椤圭洰鐩稿叧閰嶇疆
+ycl:
+    # 鍚嶇О
+    name: projectManagement
+    # 鐗堟湰
+    version: 1.0.0
+    # 鐗堟潈骞翠唤
+    copyrightYear: 2024
+    # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/projectManagement/uploadPath锛孡inux閰嶇疆 /home/projectManagement/uploadPath锛�
+    profile: D:/projectManagement/uploadPath
+    # 鑾峰彇ip鍦板潃寮�鍏�
+    addressEnabled: false
+    # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
+    captchaType: math
+
+
 # 鏁版嵁婧愰厤缃�
 spring:
     # redis 閰嶇疆
diff --git a/start/src/main/resources/application-prod.yml b/start/src/main/resources/application-prod.yml
index 1eac87f..8ae2b8e 100644
--- a/start/src/main/resources/application-prod.yml
+++ b/start/src/main/resources/application-prod.yml
@@ -1,3 +1,17 @@
+# 椤圭洰鐩稿叧閰嶇疆
+ycl:
+    # 鍚嶇О
+    name: projectManagement
+    # 鐗堟湰
+    version: 1.0.0
+    # 鐗堟潈骞翠唤
+    copyrightYear: 2024
+    # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/projectManagement/uploadPath锛孡inux閰嶇疆 /home/projectManagement/uploadPath锛�
+    profile: /home/projectManagement/uploadPath
+    # 鑾峰彇ip鍦板潃寮�鍏�
+    addressEnabled: false
+    # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
+    captchaType: math
 
 # 鏁版嵁婧愰厤缃�
 spring:
diff --git a/start/src/main/resources/application.yml b/start/src/main/resources/application.yml
index 80c9de9..f70d518 100644
--- a/start/src/main/resources/application.yml
+++ b/start/src/main/resources/application.yml
@@ -1,18 +1,3 @@
-# 椤圭洰鐩稿叧閰嶇疆
-ycl:
-  # 鍚嶇О
-  name: RuoYi
-  # 鐗堟湰
-  version: 1.0.0
-  # 鐗堟潈骞翠唤
-  copyrightYear: 2024
-  # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
-  profile: D:/ruoyi/uploadPath
-  # 鑾峰彇ip鍦板潃寮�鍏�
-  addressEnabled: false
-  # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
-  captchaType: math
-
 
 # mybatis plus閰嶇疆
 mybatis-plus:
@@ -93,7 +78,7 @@
   # 浠ょ墝瀵嗛挜
   secret: gfabcdefghijklmnopqrstuvwxyz12
   # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
-  expireTime: 30
+  expireTime: 1200
 
 # PageHelper鍒嗛〉鎻掍欢
 pagehelper:
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 7e09ebe..1b608dc 100644
--- a/system/src/main/java/com/ycl/system/service/ISysDeptService.java
+++ b/system/src/main/java/com/ycl/system/service/ISysDeptService.java
@@ -1,6 +1,8 @@
 package com.ycl.system.service;
 
 import java.util.List;
+
+import com.ycl.common.base.Result;
 import com.ycl.common.core.domain.TreeSelect;
 import com.ycl.common.core.domain.entity.SysDept;
 
@@ -121,4 +123,10 @@
      * @return 缁撴灉
      */
     public int deleteDeptById(Long deptId);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all(SysDept 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 a54ad3f..f356ada 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
@@ -4,6 +4,9 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
+
+import com.ycl.common.base.Result;
+import com.ycl.system.domain.base.BaseSelect;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ycl.common.annotation.DataScope;
@@ -335,4 +338,20 @@
     {
         return getChildList(list, t).size() > 0;
     }
+
+    /**
+     * 閮ㄩ棬涓嬫媺鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all(SysDept dept) {
+        List<BaseSelect> vos = deptMapper.selectDeptList(dept).stream().map(sysDept -> {
+                    BaseSelect baseSelect = new BaseSelect();
+                    baseSelect.setId(Integer.parseInt(sysDept.getDeptId() + ""));
+                    baseSelect.setValue(sysDept.getDeptName());
+                    return baseSelect;
+                }
+        ).collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
 }

--
Gitblit v1.8.0