From 10fe05319209797d23e360ec3fad9f30c5b96f58 Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期五, 22 十一月 2024 14:20:15 +0800
Subject: [PATCH] 项目计划初始化

---
 business/src/main/java/com/ycl/domain/query/PlanQuery.java                              |   17 
 business/src/main/java/com/ycl/service/ProjectPlanRecordService.java                    |   66 
 business/src/main/java/com/ycl/controller/ProjectUnitRegistrationInfoController.java    |   83 +
 business/src/main/java/com/ycl/domain/entity/ProjectPlanProgressReport.java             |   44 
 business/src/main/java/com/ycl/controller/ProjectPlanRecordController.java              |   83 +
 business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java |  119 +
 business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml                   |   70 
 business/src/main/resources/mapper/PlanMapper.xml                                       |   55 
 business/src/main/java/com/ycl/mapper/ProjectPlanRecordMapper.java                      |   34 
 business/src/main/java/com/ycl/service/ProjectPlanExamineRecordService.java             |   66 
 business/src/main/java/com/ycl/domain/entity/ProjectPlanRecord.java                     |   51 
 business/src/main/java/com/ycl/domain/query/ProjectPlanRecordQuery.java                 |   18 
 business/src/main/java/com/ycl/domain/vo/ProjectPlanExamineRecordVO.java                |   80 +
 business/src/main/java/com/ycl/domain/vo/ProjectPlanProgressReportVO.java               |   53 
 business/src/main/java/com/ycl/mapper/ProjectUnitRegistrationInfoMapper.java            |   34 
 business/src/main/java/com/ycl/domain/vo/ProgressPlanVO.java                            |   60 
 business/src/main/java/com/ycl/mapper/ProjectPlanExamineRecordMapper.java               |   34 
 business/src/main/java/com/ycl/domain/query/ProjectUnitRegistrationInfoQuery.java       |   22 
 business/src/main/java/com/ycl/mapper/PlanMapper.java                                   |   32 
 business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml                  |   49 
 business/src/main/java/com/ycl/domain/vo/ProjectUnitRegistrationInfoVO.java             |  129 +
 business/src/main/java/com/ycl/controller/ProjectPlanExamineRecordController.java       |   82 +
 business/src/main/java/com/ycl/domain/form/ProjectUnitRegistrationInfoForm.java         |  132 +
 business/src/main/java/com/ycl/service/impl/ProjectPlanRecordServiceImpl.java           |  119 +
 business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java                       |   43 
 business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java             |  119 +
 business/src/main/java/com/ycl/domain/form/ProjectPlanProgressReportForm.java           |   57 
 business/src/main/java/com/ycl/service/PlanService.java                                 |   73 +
 business/src/main/java/com/ycl/domain/form/ProgressPlanForm.java                        |   63 
 business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java   |  120 +
 business/src/main/java/com/ycl/service/impl/ProgressPlanServiceImpl.java                |  119 +
 business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java    |  121 +
 business/src/main/java/com/ycl/domain/vo/PlanVO.java                                    |   61 
 business/src/main/java/com/ycl/mapper/ProgressPlanMapper.java                           |   32 
 business/src/main/java/com/ycl/controller/ProgressPlanController.java                   |   83 +
 business/src/main/java/com/ycl/domain/vo/ProjectPlanRecordVO.java                       |   67 
 business/src/main/java/com/ycl/domain/query/ProjectPlanInfoQuery.java                   |   18 
 business/src/main/java/com/ycl/domain/form/ProjectPlanExamineRecordForm.java            |   84 +
 business/src/main/resources/mapper/ProjectPlanRecordMapper.xml                          |   58 
 business/src/main/java/com/ycl/domain/form/ProjectPlanInfoForm.java                     |   56 
 business/src/main/resources/mapper/ProgressPlanMapper.xml                               |   55 
 business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java            |   66 
 business/src/main/java/com/ycl/service/ProgressPlanService.java                         |   65 
 business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java      |   83 +
 business/src/main/java/com/ycl/domain/form/PlanForm.java                                |   63 
 business/src/main/java/com/ycl/domain/entity/ProjectUnitRegistrationInfo.java           |  120 +
 business/src/main/java/com/ycl/service/ProjectUnitRegistrationInfoService.java          |   65 
 business/src/main/java/com/ycl/domain/query/ProjectPlanProgressReportQuery.java         |   17 
 business/src/main/java/com/ycl/controller/PlanController.java                           |   83 +
 business/src/main/java/com/ycl/domain/entity/Plan.java                                  |   51 
 business/src/main/java/com/ycl/domain/entity/ProjectPlanExamineRecord.java              |   72 +
 business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java                         |   52 
 business/src/main/java/com/ycl/controller/ProjectPlanInfoController.java                |   83 +
 business/src/main/java/com/ycl/mapper/ProjectPlanProgressReportMapper.java              |   34 
 business/src/main/java/com/ycl/service/ProjectPlanInfoService.java                      |   66 
 business/src/main/resources/mapper/ProjectUnitRegistrationInfoMapper.xml                |  106 +
 business/src/main/java/com/ycl/mapper/ProjectPlanInfoMapper.java                        |   34 
 business/src/main/java/com/ycl/domain/query/ProjectPlanExamineRecordQuery.java          |   18 
 /dev/null                                                                               |   61 
 business/src/main/java/com/ycl/domain/form/ProjectPlanRecordForm.java                   |   68 
 business/src/main/resources/mapper/ProjectPlanInfoMapper.xml                            |   49 
 business/src/main/java/com/ycl/domain/entity/ProgressPlan.java                          |   51 
 business/src/main/java/com/ycl/domain/query/ProgressPlanQuery.java                      |   18 
 business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java                        |  119 +
 64 files changed, 4,144 insertions(+), 61 deletions(-)

diff --git a/business/src/main/java/com/ycl/controller/PlanController.java b/business/src/main/java/com/ycl/controller/PlanController.java
new file mode 100644
index 0000000..1e30b2c
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/PlanController.java
@@ -0,0 +1,83 @@
+package com.ycl.controller;
+
+
+import com.ycl.common.base.Result;
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.form.PlanForm;
+import com.ycl.domain.query.PlanQuery;
+import com.ycl.service.PlanService;
+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.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 椤圭洰璁″垝琛� 鍓嶇鎺у埗鍣�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "椤圭洰璁″垝琛�", tags = "椤圭洰璁″垝琛ㄧ鐞�")
+@RestController
+@RequestMapping("/api/plan")
+public class PlanController {
+
+    private final PlanService planService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('plan:add')")
+    public Result add(@RequestBody @Validated(Add.class) PlanForm form) {
+        return planService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('plan:edit')")
+    public Result update(@RequestBody @Validated(Update.class) PlanForm form) {
+        return planService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('plan:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return planService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('plan:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return planService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('plan:page')")
+    public Result page(PlanQuery query) {
+        return planService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('plan:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return planService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('plan:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return planService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/controller/ProgressPlanController.java b/business/src/main/java/com/ycl/controller/ProgressPlanController.java
new file mode 100644
index 0000000..ace5749
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProgressPlanController.java
@@ -0,0 +1,83 @@
+package com.ycl.controller;
+
+
+import com.ycl.common.base.Result;
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.form.ProgressPlanForm;
+import com.ycl.domain.query.ProgressPlanQuery;
+import com.ycl.service.ProgressPlanService;
+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.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 椤圭洰璁″垝杩涘害 鍓嶇鎺у埗鍣�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "椤圭洰璁″垝杩涘害", tags = "椤圭洰璁″垝杩涘害绠$悊")
+@RestController
+@RequestMapping("/api/progress-plan")
+public class ProgressPlanController {
+
+    private final ProgressPlanService progressPlanService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('progressPlan:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProgressPlanForm form) {
+        return progressPlanService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('progressPlan:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProgressPlanForm form) {
+        return progressPlanService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('progressPlan:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return progressPlanService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('progressPlan:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return progressPlanService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('progressPlan:page')")
+    public Result page(ProgressPlanQuery query) {
+        return progressPlanService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('progressPlan:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return progressPlanService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('progressPlan:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return progressPlanService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/controller/ProjectPlanExamineRecordController.java b/business/src/main/java/com/ycl/controller/ProjectPlanExamineRecordController.java
new file mode 100644
index 0000000..5aadef2
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectPlanExamineRecordController.java
@@ -0,0 +1,82 @@
+package com.ycl.controller;
+
+import com.ycl.common.base.Result;
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.form.ProjectPlanExamineRecordForm;
+import com.ycl.domain.query.ProjectPlanExamineRecordQuery;
+import com.ycl.service.ProjectPlanExamineRecordService;
+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.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 椤圭洰瀹℃牳璁板綍琛� 鍓嶇鎺у埗鍣�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "椤圭洰瀹℃牳璁板綍琛�", tags = "椤圭洰瀹℃牳璁板綍琛ㄧ鐞�")
+@RestController
+@RequestMapping("/api/project-plan-examine-record")
+public class ProjectPlanExamineRecordController {
+
+    private final ProjectPlanExamineRecordService projectPlanExamineRecordService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('projectPlanExamineRecord:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectPlanExamineRecordForm form) {
+        return projectPlanExamineRecordService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('projectPlanExamineRecord:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectPlanExamineRecordForm form) {
+        return projectPlanExamineRecordService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectPlanExamineRecord:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectPlanExamineRecordService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectPlanExamineRecord:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectPlanExamineRecordService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('projectPlanExamineRecord:page')")
+    public Result page(ProjectPlanExamineRecordQuery query) {
+        return projectPlanExamineRecordService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('projectPlanExamineRecord:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return projectPlanExamineRecordService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('projectPlanExamineRecord:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectPlanExamineRecordService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/controller/ProjectPlanInfoController.java b/business/src/main/java/com/ycl/controller/ProjectPlanInfoController.java
new file mode 100644
index 0000000..e92a71f
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectPlanInfoController.java
@@ -0,0 +1,83 @@
+package com.ycl.controller;
+
+
+import com.ycl.common.base.Result;
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.form.ProjectPlanInfoForm;
+import com.ycl.domain.query.ProjectPlanInfoQuery;
+import com.ycl.service.ProjectPlanInfoService;
+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.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 椤圭洰璁″垝椤� 鍓嶇鎺у埗鍣�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "椤圭洰璁″垝椤�", tags = "椤圭洰璁″垝椤圭鐞�")
+@RestController
+@RequestMapping("/api/project-plan-info")
+public class ProjectPlanInfoController {
+
+    private final ProjectPlanInfoService projectPlanInfoService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('projectPlanInfo:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectPlanInfoForm form) {
+        return projectPlanInfoService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('projectPlanInfo:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectPlanInfoForm form) {
+        return projectPlanInfoService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectPlanInfo:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectPlanInfoService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectPlanInfo:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectPlanInfoService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('projectPlanInfo:page')")
+    public Result page(ProjectPlanInfoQuery query) {
+        return projectPlanInfoService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('projectPlanInfo:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return projectPlanInfoService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('projectPlanInfo:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectPlanInfoService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java b/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java
new file mode 100644
index 0000000..913fa2e
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectPlanProgressReportController.java
@@ -0,0 +1,83 @@
+package com.ycl.controller;
+
+
+import com.ycl.common.base.Result;
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.form.ProjectPlanProgressReportForm;
+import com.ycl.domain.query.ProjectPlanProgressReportQuery;
+import com.ycl.service.ProjectPlanProgressReportService;
+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.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 杩涘害涓婃姤鍐呭 鍓嶇鎺у埗鍣�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "杩涘害涓婃姤鍐呭", tags = "杩涘害涓婃姤鍐呭绠$悊")
+@RestController
+@RequestMapping("/api/project-plan-progress-report")
+public class ProjectPlanProgressReportController {
+
+    private final ProjectPlanProgressReportService projectPlanProgressReportService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('projectPlanProgressReport:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectPlanProgressReportForm form) {
+        return projectPlanProgressReportService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('projectPlanProgressReport:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectPlanProgressReportForm form) {
+        return projectPlanProgressReportService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectPlanProgressReport:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectPlanProgressReportService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectPlanProgressReport:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectPlanProgressReportService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('projectPlanProgressReport:page')")
+    public Result page(ProjectPlanProgressReportQuery query) {
+        return projectPlanProgressReportService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('projectPlanProgressReport:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return projectPlanProgressReportService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('projectPlanProgressReport:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectPlanProgressReportService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/controller/ProjectPlanRecordController.java b/business/src/main/java/com/ycl/controller/ProjectPlanRecordController.java
new file mode 100644
index 0000000..e8cdc8e
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectPlanRecordController.java
@@ -0,0 +1,83 @@
+package com.ycl.controller;
+
+
+import com.ycl.common.base.Result;
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.form.ProjectPlanRecordForm;
+import com.ycl.domain.query.ProjectPlanRecordQuery;
+import com.ycl.service.ProjectPlanRecordService;
+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.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 椤圭洰璁″垝璁板綍 鍓嶇鎺у埗鍣�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "椤圭洰璁″垝璁板綍", tags = "椤圭洰璁″垝璁板綍绠$悊")
+@RestController
+@RequestMapping("/api/project-plan-record")
+public class ProjectPlanRecordController {
+
+    private final ProjectPlanRecordService projectPlanRecordService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('projectPlanRecord:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectPlanRecordForm form) {
+        return projectPlanRecordService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('projectPlanRecord:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectPlanRecordForm form) {
+        return projectPlanRecordService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectPlanRecord:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectPlanRecordService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectPlanRecord:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectPlanRecordService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('projectPlanRecord:page')")
+    public Result page(ProjectPlanRecordQuery query) {
+        return projectPlanRecordService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('projectPlanRecord:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return projectPlanRecordService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('projectPlanRecord:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectPlanRecordService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/controller/ProjectUnitRegistrationInfoController.java b/business/src/main/java/com/ycl/controller/ProjectUnitRegistrationInfoController.java
new file mode 100644
index 0000000..4fe5396
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/ProjectUnitRegistrationInfoController.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.ProjectUnitRegistrationInfoService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectUnitRegistrationInfoForm;
+import com.ycl.domain.query.ProjectUnitRegistrationInfoQuery;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛� 鍓嶇鎺у埗鍣�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛�", tags = "椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛ㄧ鐞�")
+@RestController
+@RequestMapping("/project-unit-registration-info")
+public class ProjectUnitRegistrationInfoController {
+
+    private final ProjectUnitRegistrationInfoService projectUnitRegistrationInfoService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('projectUnitRegistrationInfo:add')")
+    public Result add(@RequestBody @Validated(Add.class) ProjectUnitRegistrationInfoForm form) {
+        return projectUnitRegistrationInfoService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('projectUnitRegistrationInfo:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ProjectUnitRegistrationInfoForm form) {
+        return projectUnitRegistrationInfoService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectUnitRegistrationInfo:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return projectUnitRegistrationInfoService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('projectUnitRegistrationInfo:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return projectUnitRegistrationInfoService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('projectUnitRegistrationInfo:page')")
+    public Result page(ProjectUnitRegistrationInfoQuery query) {
+        return projectUnitRegistrationInfoService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('projectUnitRegistrationInfo:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return projectUnitRegistrationInfoService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('projectUnitRegistrationInfo:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return projectUnitRegistrationInfoService.all();
+    }
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/Plan.java b/business/src/main/java/com/ycl/domain/entity/Plan.java
new file mode 100644
index 0000000..bca52e4
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/Plan.java
@@ -0,0 +1,51 @@
+package com.ycl.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.time.LocalDateTime;
+import com.ycl.system.domain.base.AbsEntity;
+import lombok.Data;
+
+/**
+ * 椤圭洰璁″垝琛�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@TableName("t_plan")
+public class Plan extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_info_id")
+    /** 椤圭洰璇︽儏琛╥d */
+    private Long projectInfoId;
+
+    @TableField("report_status")
+    /** 涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    private Integer reportStatus;
+
+    @TableField("month_status")
+    /** 鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    private Integer monthStatus;
+
+    @TableField("season_status")
+    /** 瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    private Integer seasonStatus;
+
+    @TableField("year_status")
+    /** 骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    private Integer yearStatus;
+
+    @TableField("gmt_create_time")
+    /** 鍒涘缓鏃堕棿 */
+    private LocalDateTime gmtCreateTime;
+
+    @TableField("gmt_update_time")
+    /** 淇敼鏃堕棿 */
+    private LocalDateTime gmtUpdateTime;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProgressPlan.java b/business/src/main/java/com/ycl/domain/entity/ProgressPlan.java
new file mode 100644
index 0000000..97a25aa
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProgressPlan.java
@@ -0,0 +1,51 @@
+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 lhr
+ * @since 2024-11-22
+ */
+@Data
+@TableName("t_progress_plan")
+public class ProgressPlan extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_info_id")
+    /** 椤圭洰淇℃伅琛╥d */
+    private Long projectInfoId;
+
+    @TableField("report_status")
+    /** 涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    private Integer reportStatus;
+
+    @TableField("month_status")
+    /** 鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    private Integer monthStatus;
+
+    @TableField("season_status")
+    /** 瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    private Integer seasonStatus;
+
+    @TableField("year_status")
+    /** 骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    private Integer yearStatus;
+
+    @TableField("gmt_create_time")
+    /** 鍒涘缓鏃堕棿 */
+    private LocalDateTime gmtCreateTime;
+
+    @TableField("gmt_update_time")
+    /** 淇敼鏃堕棿 */
+    private LocalDateTime gmtUpdateTime;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectPlanExamineRecord.java b/business/src/main/java/com/ycl/domain/entity/ProjectPlanExamineRecord.java
new file mode 100644
index 0000000..9f6c861
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectPlanExamineRecord.java
@@ -0,0 +1,72 @@
+package com.ycl.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.time.LocalDateTime;
+
+import com.ycl.system.domain.base.AbsEntity;
+import lombok.Data;
+
+/**
+ * 椤圭洰瀹℃牳璁板綍琛�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@TableName("t_project_plan_examine_record")
+public class ProjectPlanExamineRecord extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_plan_record_id")
+    /** 椤圭洰璁″垝璁板綍id */
+    private Long projectPlanRecordId;
+
+    @TableField("department_user_id")
+    /** 涓婄骇閮ㄩ棬瀹℃牳浜� */
+    private Long departmentUserId;
+
+    @TableField("manager_user_id")
+    /** 涓荤閮ㄩ棬瀹℃牳浜� */
+    private Long managerUserId;
+
+    @TableField("department_examine")
+    /** 涓婄骇瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1) */
+    private Integer departmentExamine;
+
+    @TableField("department_approval")
+    /** 涓婄骇鎵瑰 */
+    private String departmentApproval;
+
+    @TableField("department_approval_reply")
+    /** 涓婄骇鎵瑰鍥炲 */
+    private String departmentApprovalReply;
+
+    @TableField("manage_examine")
+    /** 涓荤閮ㄩ棬瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1) */
+    private Integer manageExamine;
+
+    @TableField("manage_approval")
+    /** 涓荤閮ㄩ棬鎵瑰 */
+    private String manageApproval;
+
+    @TableField("manage_approval_reply")
+    /** 涓荤閮ㄩ棬鎵瑰鍥炲 */
+    private String manageApprovalReply;
+
+    @TableField("event_type")
+    /** 璁″垝涓婃姤/寤舵湡/杩涘害涓婃姤锛�0/1/2锛� */
+    private Integer eventType;
+
+    @TableField("delay_start_time")
+    /** 寤舵湡寮�濮嬫椂闂� */
+    private LocalDateTime delayStartTime;
+
+    @TableField("delay_end_time")
+    /** 寤舵湡缁撴潫鏃堕棿 */
+    private LocalDateTime delayEndTime;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java b/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java
new file mode 100644
index 0000000..421f60b
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java
@@ -0,0 +1,43 @@
+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 lhr
+ * @since 2024-11-22
+ */
+@Data
+@TableName("t_project_plan_info")
+public class ProjectPlanInfo extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_plan_record_id")
+    /** 椤圭洰璁″垝璁板綍id */
+    private Long projectPlanRecordId;
+
+    @TableField("title")
+    /** 浜嬮」鍚嶇О */
+    private String title;
+
+    @TableField("progress_status")
+    /** 鐘舵��(0锛氭湭瀹屾垚锛�1锛氬緟瀹℃牳锛�2锛氬凡椹冲洖锛�3锛氬凡瀹屾垚) */
+    private Integer progressStatus;
+
+    @TableField("start_time")
+    /** 璁″垝寮�濮嬫椂闂� */
+    private LocalDateTime startTime;
+
+    @TableField("end_time")
+    /** 璁″垝瀹屾垚鏃堕棿 */
+    private LocalDateTime endTime;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectPlanProgressReport.java b/business/src/main/java/com/ycl/domain/entity/ProjectPlanProgressReport.java
new file mode 100644
index 0000000..7e51dcb
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectPlanProgressReport.java
@@ -0,0 +1,44 @@
+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.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 杩涘害涓婃姤鍐呭
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@TableName("t_project_plan_progress_report")
+public class ProjectPlanProgressReport extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_plan_info_id")
+    /** 椤圭洰璁″垝椤筰d */
+    private Long projectPlanInfoId;
+
+    @TableField("start_time")
+    /** 瀹為檯寮�濮嬫椂闂� */
+    private LocalDateTime startTime;
+
+    @TableField("end_time")
+    /** 瀹為檯瀹屾垚鏃堕棿 */
+    private LocalDateTime endTime;
+
+    @TableField("progress_status")
+    /** 杩涘害鎯呭喌 */
+    private String progressStatus;
+
+    @TableField("actual_invest")
+    /** 褰撳墠瀹為檯鎶曡祫 */
+    private BigDecimal actualInvest;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectPlanRecord.java b/business/src/main/java/com/ycl/domain/entity/ProjectPlanRecord.java
new file mode 100644
index 0000000..379ec2d
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectPlanRecord.java
@@ -0,0 +1,51 @@
+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.math.BigDecimal;
+
+/**
+ * 椤圭洰璁″垝璁板綍
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@TableName("t_project_plan_record")
+public class ProjectPlanRecord extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_info_id")
+    /** 椤圭洰淇℃伅id */
+    private Long projectInfoId;
+
+    @TableField("plan_id")
+    /** 椤圭洰璁″垝id */
+    private Long planId;
+
+    @TableField("engineering_info_id")
+    /** 宸ョ▼id */
+    private Long engineeringInfoId;
+
+    @TableField("plan_time")
+    /** 璁″垝鏈� */
+    private Integer planTime;
+
+    @TableField("plan_time_flag")
+    /** 鏈堝害/瀛e害/骞村害  0/1/2 */
+    private Integer planTimeFlag;
+
+    @TableField("report_status")
+    /** 涓婃姤鐘舵�� 宸蹭笂鎶�/鏈笂鎶�  0/1 */
+    private Integer reportStatus;
+
+    @TableField("actual_invest")
+    /** 鎶曡祫 */
+    private BigDecimal actualInvest;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectUnitRegistrationInfo.java b/business/src/main/java/com/ycl/domain/entity/ProjectUnitRegistrationInfo.java
new file mode 100644
index 0000000..7785a52
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectUnitRegistrationInfo.java
@@ -0,0 +1,120 @@
+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.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@TableName("t_project_unit_registration_info")
+public class ProjectUnitRegistrationInfo extends AbsEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("project_id")
+    /** 椤圭洰id */
+    private Long projectId;
+
+    @TableField("total_investment")
+    /** 椤圭洰鎬绘姇璧勯 */
+    private BigDecimal totalInvestment;
+
+    @TableField("project_unit")
+    /** 椤圭洰鍗曚綅 */
+    private String projectUnit;
+
+    @TableField("project_unit_type")
+    /** 椤圭洰鍗曚綅绫诲瀷 */
+    private String projectUnitType;
+
+    @TableField("registration_type")
+    /** 鐧昏娉ㄥ唽绫诲瀷 */
+    private String registrationType;
+
+    @TableField("holding_situation")
+    /** 鎺ц偂鎯呭喌 */
+    private String holdingSituation;
+
+    @TableField("certificate_type")
+    /** 璇佺収绫诲瀷 */
+    private String certificateType;
+
+    @TableField("certificate_number")
+    /** 璇佺収鍙风爜 */
+    private String certificateNumber;
+
+    @TableField("registered_address")
+    /** 娉ㄥ唽鍦板潃 */
+    private String registeredAddress;
+
+    @TableField("registered_capital")
+    /** 娉ㄥ唽璧勯噾 */
+    private BigDecimal registeredCapital;
+
+    @TableField("legal_representative")
+    /** 娉曚汉浠h〃 */
+    private String legalRepresentative;
+
+    @TableField("fixed_phone")
+    /** 鍥哄畾鐢佃瘽 */
+    private String fixedPhone;
+
+    @TableField("legal_person_idcard")
+    /** 娉曚汉韬唤璇� */
+    private String legalPersonIdcard;
+
+    @TableField("project_contact_person")
+    /** 椤圭洰鑱旂郴浜� */
+    private String projectContactPerson;
+
+    @TableField("phone")
+    /** 绉诲姩鐢佃瘽 */
+    private String phone;
+
+    @TableField("contact_idcard")
+    /** 鑱旂郴浜鸿韩浠借瘉 */
+    private String contactIdcard;
+
+    @TableField("wechat")
+    /** 寰俊鍙� */
+    private String wechat;
+
+    @TableField("contact_address")
+    /** 鑱旂郴浜洪�氳鍦板潃 */
+    private String contactAddress;
+
+    @TableField("post_code")
+    /** 閭斂缂栫爜 */
+    private String postCode;
+
+    @TableField("email")
+    /** 鐢靛瓙閭 */
+    private String email;
+
+    @TableField("create_by")
+    /** 鍒涘缓浜� */
+    private Long createBy;
+
+    @TableField("update_by")
+    /** 鏇存柊浜� */
+    private Long updateBy;
+
+    @TableField("gmt_create_time")
+    /** 鍒涘缓鏃堕棿 */
+    private LocalDateTime gmtCreateTime;
+
+    @TableField("gmt_update_time")
+    /** 鏇存柊鏃堕棿 */
+    private LocalDateTime gmtUpdateTime;
+
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/PlanForm.java b/business/src/main/java/com/ycl/domain/form/PlanForm.java
new file mode 100644
index 0000000..1c79ee4
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/PlanForm.java
@@ -0,0 +1,63 @@
+package com.ycl.domain.form;
+
+
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.entity.Plan;
+import com.ycl.system.domain.base.AbsForm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 椤圭洰璁″垝琛ㄨ〃鍗�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "Plan琛ㄥ崟", description = "椤圭洰璁″垝琛ㄨ〃鍗�")
+public class PlanForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰璇︽儏琛╥d涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰璇︽儏琛╥d")
+    private Long projectInfoId;
+
+    @NotNull(message = "涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer reportStatus;
+
+    @NotNull(message = "鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer monthStatus;
+
+    @NotNull(message = "瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer seasonStatus;
+
+    @NotNull(message = "骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer yearStatus;
+
+    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    @NotNull(message = "淇敼鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("淇敼鏃堕棿")
+    private Date gmtUpdateTime;
+
+    public static Plan getEntityByForm(@NonNull PlanForm form, Plan entity) {
+        if(entity == null) {
+          entity = new Plan();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProgressPlanForm.java b/business/src/main/java/com/ycl/domain/form/ProgressPlanForm.java
new file mode 100644
index 0000000..c8b9e1b
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProgressPlanForm.java
@@ -0,0 +1,63 @@
+package com.ycl.domain.form;
+
+
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.entity.ProgressPlan;
+import com.ycl.system.domain.base.AbsForm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 椤圭洰璁″垝杩涘害琛ㄥ崟
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProgressPlan琛ㄥ崟", description = "椤圭洰璁″垝杩涘害琛ㄥ崟")
+public class ProgressPlanForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰淇℃伅琛╥d涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰淇℃伅琛╥d")
+    private Long projectInfoId;
+
+    @NotNull(message = "涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer reportStatus;
+
+    @NotNull(message = "鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer monthStatus;
+
+    @NotNull(message = "瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer seasonStatus;
+
+    @NotNull(message = "骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer yearStatus;
+
+    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    @NotNull(message = "淇敼鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("淇敼鏃堕棿")
+    private Date gmtUpdateTime;
+
+    public static ProgressPlan getEntityByForm(@NonNull ProgressPlanForm form, ProgressPlan entity) {
+        if(entity == null) {
+          entity = new ProgressPlan();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectPlanExamineRecordForm.java b/business/src/main/java/com/ycl/domain/form/ProjectPlanExamineRecordForm.java
new file mode 100644
index 0000000..f792303
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectPlanExamineRecordForm.java
@@ -0,0 +1,84 @@
+package com.ycl.domain.form;
+
+
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.entity.ProjectPlanExamineRecord;
+import com.ycl.system.domain.base.AbsForm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 椤圭洰瀹℃牳璁板綍琛ㄨ〃鍗�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectPlanExamineRecord琛ㄥ崟", description = "椤圭洰瀹℃牳璁板綍琛ㄨ〃鍗�")
+public class ProjectPlanExamineRecordForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰璁″垝璁板綍id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰璁″垝璁板綍id")
+    private Long projectPlanRecordId;
+
+    @NotNull(message = "涓婄骇閮ㄩ棬瀹℃牳浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓婄骇閮ㄩ棬瀹℃牳浜�")
+    private Long departmentUserId;
+
+    @NotNull(message = "涓荤閮ㄩ棬瀹℃牳浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓荤閮ㄩ棬瀹℃牳浜�")
+    private Long managerUserId;
+
+    @NotNull(message = "涓婄骇瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓婄骇瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1)")
+    private Integer departmentExamine;
+
+    @NotBlank(message = "涓婄骇鎵瑰涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓婄骇鎵瑰")
+    private String departmentApproval;
+
+    @NotBlank(message = "涓婄骇鎵瑰鍥炲涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓婄骇鎵瑰鍥炲")
+    private String departmentApprovalReply;
+
+    @NotNull(message = "涓荤閮ㄩ棬瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓荤閮ㄩ棬瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1)")
+    private Integer manageExamine;
+
+    @NotBlank(message = "涓荤閮ㄩ棬鎵瑰涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓荤閮ㄩ棬鎵瑰")
+    private String manageApproval;
+
+    @NotBlank(message = "涓荤閮ㄩ棬鎵瑰鍥炲涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓荤閮ㄩ棬鎵瑰鍥炲")
+    private String manageApprovalReply;
+
+    @NotNull(message = "璁″垝涓婃姤/寤舵湡/杩涘害涓婃姤锛�0/1/2锛変笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("璁″垝涓婃姤/寤舵湡/杩涘害涓婃姤锛�0/1/2锛�")
+    private Integer eventType;
+
+    @NotNull(message = "寤舵湡寮�濮嬫椂闂翠笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("寤舵湡寮�濮嬫椂闂�")
+    private Date delayStartTime;
+
+    @NotNull(message = "寤舵湡缁撴潫鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("寤舵湡缁撴潫鏃堕棿")
+    private Date delayEndTime;
+
+    public static ProjectPlanExamineRecord getEntityByForm(@NonNull ProjectPlanExamineRecordForm form, ProjectPlanExamineRecord entity) {
+        if(entity == null) {
+          entity = new ProjectPlanExamineRecord();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectPlanInfoForm.java b/business/src/main/java/com/ycl/domain/form/ProjectPlanInfoForm.java
new file mode 100644
index 0000000..34d7de3
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectPlanInfoForm.java
@@ -0,0 +1,56 @@
+package com.ycl.domain.form;
+
+
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.entity.ProjectPlanInfo;
+import com.ycl.system.domain.base.AbsForm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 椤圭洰璁″垝椤硅〃鍗�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectPlanInfo琛ㄥ崟", description = "椤圭洰璁″垝椤硅〃鍗�")
+public class ProjectPlanInfoForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰璁″垝璁板綍id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰璁″垝璁板綍id")
+    private Long projectPlanRecordId;
+
+    @NotBlank(message = "浜嬮」鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("浜嬮」鍚嶇О")
+    private String title;
+
+    @NotNull(message = "鐘舵��(0锛氭湭瀹屾垚锛�1锛氬緟瀹℃牳锛�2锛氬凡椹冲洖锛�3锛氬凡瀹屾垚)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐘舵��(0锛氭湭瀹屾垚锛�1锛氬緟瀹℃牳锛�2锛氬凡椹冲洖锛�3锛氬凡瀹屾垚)")
+    private Integer progressStatus;
+
+    @NotNull(message = "璁″垝寮�濮嬫椂闂翠笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("璁″垝寮�濮嬫椂闂�")
+    private Date startTime;
+
+    @NotNull(message = "璁″垝瀹屾垚鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("璁″垝瀹屾垚鏃堕棿")
+    private Date endTime;
+
+    public static ProjectPlanInfo getEntityByForm(@NonNull ProjectPlanInfoForm form, ProjectPlanInfo entity) {
+        if(entity == null) {
+          entity = new ProjectPlanInfo();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectPlanProgressReportForm.java b/business/src/main/java/com/ycl/domain/form/ProjectPlanProgressReportForm.java
new file mode 100644
index 0000000..f343b62
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectPlanProgressReportForm.java
@@ -0,0 +1,57 @@
+package com.ycl.domain.form;
+
+
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.entity.ProjectPlanProgressReport;
+import com.ycl.system.domain.base.AbsForm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 杩涘害涓婃姤鍐呭琛ㄥ崟
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectPlanProgressReport琛ㄥ崟", description = "杩涘害涓婃姤鍐呭琛ㄥ崟")
+public class ProjectPlanProgressReportForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰璁″垝椤筰d涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰璁″垝椤筰d")
+    private Long projectPlanInfoId;
+
+    @NotNull(message = "瀹為檯寮�濮嬫椂闂翠笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("瀹為檯寮�濮嬫椂闂�")
+    private Date startTime;
+
+    @NotNull(message = "瀹為檯瀹屾垚鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("瀹為檯瀹屾垚鏃堕棿")
+    private Date endTime;
+
+    @NotBlank(message = "杩涘害鎯呭喌涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("杩涘害鎯呭喌")
+    private String progressStatus;
+
+    @NotNull(message = "褰撳墠瀹為檯鎶曡祫涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("褰撳墠瀹為檯鎶曡祫")
+    private BigDecimal actualInvest;
+
+    public static ProjectPlanProgressReport getEntityByForm(@NonNull ProjectPlanProgressReportForm form, ProjectPlanProgressReport entity) {
+        if(entity == null) {
+          entity = new ProjectPlanProgressReport();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectPlanRecordForm.java b/business/src/main/java/com/ycl/domain/form/ProjectPlanRecordForm.java
new file mode 100644
index 0000000..38a1086
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectPlanRecordForm.java
@@ -0,0 +1,68 @@
+package com.ycl.domain.form;
+
+
+import com.ycl.common.group.Add;
+import com.ycl.common.group.Update;
+import com.ycl.domain.entity.ProjectPlanRecord;
+import com.ycl.system.domain.base.AbsForm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 椤圭洰璁″垝璁板綍琛ㄥ崟
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectPlanRecord琛ㄥ崟", description = "椤圭洰璁″垝璁板綍琛ㄥ崟")
+public class ProjectPlanRecordForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰淇℃伅id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰淇℃伅id")
+    private Long projectInfoId;
+
+    @NotNull(message = "椤圭洰璁″垝id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰璁″垝id")
+    private Long planId;
+
+    @NotNull(message = "宸ョ▼id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("宸ョ▼id")
+    private Long engineeringInfoId;
+
+    @NotNull(message = "璁″垝鏈熶笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("璁″垝鏈�")
+    private Integer planTime;
+
+    @NotNull(message = "鏈堝害/瀛e害/骞村害  0/1/2涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏈堝害/瀛e害/骞村害  0/1/2")
+    private Integer planTimeFlag;
+
+    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date createTime;
+
+    @NotNull(message = "涓婃姤鐘舵�� 宸蹭笂鎶�/鏈笂鎶�  0/1涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("涓婃姤鐘舵�� 宸蹭笂鎶�/鏈笂鎶�  0/1")
+    private Integer reportStatus;
+
+    @NotNull(message = "鎶曡祫涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎶曡祫")
+    private BigDecimal actualInvest;
+
+    public static ProjectPlanRecord getEntityByForm(@NonNull ProjectPlanRecordForm form, ProjectPlanRecord entity) {
+        if(entity == null) {
+          entity = new ProjectPlanRecord();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectUnitRegistrationInfoForm.java b/business/src/main/java/com/ycl/domain/form/ProjectUnitRegistrationInfoForm.java
new file mode 100644
index 0000000..d3fe887
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectUnitRegistrationInfoForm.java
@@ -0,0 +1,132 @@
+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.ProjectUnitRegistrationInfo;
+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.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛ㄨ〃鍗�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectUnitRegistrationInfo琛ㄥ崟", description = "椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛ㄨ〃鍗�")
+public class ProjectUnitRegistrationInfoForm extends AbsForm {
+
+    @NotNull(message = "椤圭洰id涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
+
+    @NotNull(message = "椤圭洰鎬绘姇璧勯涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰鎬绘姇璧勯")
+    private BigDecimal totalInvestment;
+
+    @NotBlank(message = "椤圭洰鍗曚綅涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰鍗曚綅")
+    private String projectUnit;
+
+    @NotBlank(message = "椤圭洰鍗曚綅绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰鍗曚綅绫诲瀷")
+    private String projectUnitType;
+
+    @NotBlank(message = "鐧昏娉ㄥ唽绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐧昏娉ㄥ唽绫诲瀷")
+    private String registrationType;
+
+    @NotBlank(message = "鎺ц偂鎯呭喌涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎺ц偂鎯呭喌")
+    private String holdingSituation;
+
+    @NotBlank(message = "璇佺収绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("璇佺収绫诲瀷")
+    private String certificateType;
+
+    @NotBlank(message = "璇佺収鍙风爜涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("璇佺収鍙风爜")
+    private String certificateNumber;
+
+    @NotBlank(message = "娉ㄥ唽鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("娉ㄥ唽鍦板潃")
+    private String registeredAddress;
+
+    @NotNull(message = "娉ㄥ唽璧勯噾涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("娉ㄥ唽璧勯噾")
+    private BigDecimal registeredCapital;
+
+    @NotBlank(message = "娉曚汉浠h〃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("娉曚汉浠h〃")
+    private String legalRepresentative;
+
+    @NotBlank(message = "鍥哄畾鐢佃瘽涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍥哄畾鐢佃瘽")
+    private String fixedPhone;
+
+    @NotBlank(message = "娉曚汉韬唤璇佷笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("娉曚汉韬唤璇�")
+    private String legalPersonIdcard;
+
+    @NotBlank(message = "椤圭洰鑱旂郴浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("椤圭洰鑱旂郴浜�")
+    private String projectContactPerson;
+
+    @NotBlank(message = "绉诲姩鐢佃瘽涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("绉诲姩鐢佃瘽")
+    private String phone;
+
+    @NotBlank(message = "鑱旂郴浜鸿韩浠借瘉涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鑱旂郴浜鸿韩浠借瘉")
+    private String contactIdcard;
+
+    @NotBlank(message = "寰俊鍙蜂笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("寰俊鍙�")
+    private String wechat;
+
+    @NotBlank(message = "鑱旂郴浜洪�氳鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鑱旂郴浜洪�氳鍦板潃")
+    private String contactAddress;
+
+    @NotBlank(message = "閭斂缂栫爜涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("閭斂缂栫爜")
+    private String postCode;
+
+    @NotBlank(message = "鐢靛瓙閭涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐢靛瓙閭")
+    private String email;
+
+    @NotNull(message = "鍒涘缓浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓浜�")
+    private Long createBy;
+
+    @NotNull(message = "鏇存柊浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏇存柊浜�")
+    private Long updateBy;
+
+    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    @NotNull(message = "鏇存柊鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date gmtUpdateTime;
+
+    public static ProjectUnitRegistrationInfo getEntityByForm(@NonNull ProjectUnitRegistrationInfoForm form, ProjectUnitRegistrationInfo entity) {
+        if(entity == null) {
+          entity = new ProjectUnitRegistrationInfo();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/query/PlanQuery.java b/business/src/main/java/com/ycl/domain/query/PlanQuery.java
new file mode 100644
index 0000000..b75fc38
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/PlanQuery.java
@@ -0,0 +1,17 @@
+package com.ycl.domain.query;
+
+import com.ycl.system.domain.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 椤圭洰璁″垝琛ㄦ煡璇�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "Plan鏌ヨ鍙傛暟", description = "椤圭洰璁″垝琛ㄦ煡璇㈠弬鏁�")
+public class PlanQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProgressPlanQuery.java b/business/src/main/java/com/ycl/domain/query/ProgressPlanQuery.java
new file mode 100644
index 0000000..5ed84c9
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProgressPlanQuery.java
@@ -0,0 +1,18 @@
+package com.ycl.domain.query;
+
+
+import com.ycl.system.domain.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 椤圭洰璁″垝杩涘害鏌ヨ
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProgressPlan鏌ヨ鍙傛暟", description = "椤圭洰璁″垝杩涘害鏌ヨ鍙傛暟")
+public class ProgressPlanQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectPlanExamineRecordQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectPlanExamineRecordQuery.java
new file mode 100644
index 0000000..6b56c46
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectPlanExamineRecordQuery.java
@@ -0,0 +1,18 @@
+package com.ycl.domain.query;
+
+
+import com.ycl.system.domain.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 椤圭洰瀹℃牳璁板綍琛ㄦ煡璇�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectPlanExamineRecord鏌ヨ鍙傛暟", description = "椤圭洰瀹℃牳璁板綍琛ㄦ煡璇㈠弬鏁�")
+public class ProjectPlanExamineRecordQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectPlanInfoQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectPlanInfoQuery.java
new file mode 100644
index 0000000..8010810
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectPlanInfoQuery.java
@@ -0,0 +1,18 @@
+package com.ycl.domain.query;
+
+
+import com.ycl.system.domain.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 椤圭洰璁″垝椤规煡璇�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectPlanInfo鏌ヨ鍙傛暟", description = "椤圭洰璁″垝椤规煡璇㈠弬鏁�")
+public class ProjectPlanInfoQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectPlanProgressReportQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectPlanProgressReportQuery.java
new file mode 100644
index 0000000..d608dd3
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectPlanProgressReportQuery.java
@@ -0,0 +1,17 @@
+package com.ycl.domain.query;
+
+import com.ycl.system.domain.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 杩涘害涓婃姤鍐呭鏌ヨ
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectPlanProgressReport鏌ヨ鍙傛暟", description = "杩涘害涓婃姤鍐呭鏌ヨ鍙傛暟")
+public class ProjectPlanProgressReportQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectPlanRecordQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectPlanRecordQuery.java
new file mode 100644
index 0000000..d80b6df
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectPlanRecordQuery.java
@@ -0,0 +1,18 @@
+package com.ycl.domain.query;
+
+
+import com.ycl.system.domain.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 椤圭洰璁″垝璁板綍鏌ヨ
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectPlanRecord鏌ヨ鍙傛暟", description = "椤圭洰璁″垝璁板綍鏌ヨ鍙傛暟")
+public class ProjectPlanRecordQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectUnitRegistrationInfoQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectUnitRegistrationInfoQuery.java
new file mode 100644
index 0000000..dc544eb
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectUnitRegistrationInfoQuery.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 lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "ProjectUnitRegistrationInfo鏌ヨ鍙傛暟", description = "椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛ㄦ煡璇㈠弬鏁�")
+public class ProjectUnitRegistrationInfoQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/vo/PlanVO.java b/business/src/main/java/com/ycl/domain/vo/PlanVO.java
new file mode 100644
index 0000000..38bd9b6
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/PlanVO.java
@@ -0,0 +1,61 @@
+package com.ycl.domain.vo;
+
+
+import com.ycl.domain.entity.Plan;
+import java.util.List;
+
+import com.ycl.system.domain.base.AbsVo;
+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 lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "椤圭洰璁″垝琛ㄥ搷搴旀暟鎹�", description = "椤圭洰璁″垝琛ㄥ搷搴旀暟鎹�")
+public class PlanVO extends AbsVo {
+
+    /** 椤圭洰璇︽儏琛╥d */
+    @ApiModelProperty("椤圭洰璇︽儏琛╥d")
+    private Long projectInfoId;
+
+    /** 涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    @ApiModelProperty("涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer reportStatus;
+
+    /** 鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    @ApiModelProperty("鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer monthStatus;
+
+    /** 瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    @ApiModelProperty("瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer seasonStatus;
+
+    /** 骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    @ApiModelProperty("骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer yearStatus;
+
+    /** 鍒涘缓鏃堕棿 */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    /** 淇敼鏃堕棿 */
+    @ApiModelProperty("淇敼鏃堕棿")
+    private Date gmtUpdateTime;
+
+    public static PlanVO getVoByEntity(@NonNull Plan entity, PlanVO vo) {
+        if(vo == null) {
+            vo = new PlanVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProgressPlanVO.java b/business/src/main/java/com/ycl/domain/vo/ProgressPlanVO.java
new file mode 100644
index 0000000..daa1dac
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProgressPlanVO.java
@@ -0,0 +1,60 @@
+package com.ycl.domain.vo;
+
+
+import com.ycl.domain.entity.ProgressPlan;
+import com.ycl.system.domain.base.AbsVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import java.util.Date;
+
+/**
+ * 椤圭洰璁″垝杩涘害灞曠ず
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "椤圭洰璁″垝杩涘害鍝嶅簲鏁版嵁", description = "椤圭洰璁″垝杩涘害鍝嶅簲鏁版嵁")
+public class ProgressPlanVO extends AbsVo {
+
+    /** 椤圭洰淇℃伅琛╥d */
+    @ApiModelProperty("椤圭洰淇℃伅琛╥d")
+    private Long projectInfoId;
+
+    /** 涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    @ApiModelProperty("涓婃姤鐘舵�侊紙0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer reportStatus;
+
+    /** 鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    @ApiModelProperty("鏈堝害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer monthStatus;
+
+    /** 瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    @ApiModelProperty("瀛e害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer seasonStatus;
+
+    /** 骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
+    @ApiModelProperty("骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
+    private Integer yearStatus;
+
+    /** 鍒涘缓鏃堕棿 */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    /** 淇敼鏃堕棿 */
+    @ApiModelProperty("淇敼鏃堕棿")
+    private Date gmtUpdateTime;
+
+    public static ProgressPlanVO getVoByEntity(@NonNull ProgressPlan entity, ProgressPlanVO vo) {
+        if(vo == null) {
+            vo = new ProgressPlanVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectPlanExamineRecordVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanExamineRecordVO.java
new file mode 100644
index 0000000..f8eab36
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanExamineRecordVO.java
@@ -0,0 +1,80 @@
+package com.ycl.domain.vo;
+
+
+import com.ycl.domain.entity.ProjectPlanExamineRecord;
+import com.ycl.system.domain.base.AbsVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import java.util.Date;
+
+/**
+ * 椤圭洰瀹℃牳璁板綍琛ㄥ睍绀�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "椤圭洰瀹℃牳璁板綍琛ㄥ搷搴旀暟鎹�", description = "椤圭洰瀹℃牳璁板綍琛ㄥ搷搴旀暟鎹�")
+public class ProjectPlanExamineRecordVO extends AbsVo {
+
+    /** 椤圭洰璁″垝璁板綍id */
+    @ApiModelProperty("椤圭洰璁″垝璁板綍id")
+    private Long projectPlanRecordId;
+
+    /** 涓婄骇閮ㄩ棬瀹℃牳浜� */
+    @ApiModelProperty("涓婄骇閮ㄩ棬瀹℃牳浜�")
+    private Long departmentUserId;
+
+    /** 涓荤閮ㄩ棬瀹℃牳浜� */
+    @ApiModelProperty("涓荤閮ㄩ棬瀹℃牳浜�")
+    private Long managerUserId;
+
+    /** 涓婄骇瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1) */
+    @ApiModelProperty("涓婄骇瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1)")
+    private Integer departmentExamine;
+
+    /** 涓婄骇鎵瑰 */
+    @ApiModelProperty("涓婄骇鎵瑰")
+    private String departmentApproval;
+
+    /** 涓婄骇鎵瑰鍥炲 */
+    @ApiModelProperty("涓婄骇鎵瑰鍥炲")
+    private String departmentApprovalReply;
+
+    /** 涓荤閮ㄩ棬瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1) */
+    @ApiModelProperty("涓荤閮ㄩ棬瀹℃牳(鍚屾剰锛�0锛岄┏鍥烇細1)")
+    private Integer manageExamine;
+
+    /** 涓荤閮ㄩ棬鎵瑰 */
+    @ApiModelProperty("涓荤閮ㄩ棬鎵瑰")
+    private String manageApproval;
+
+    /** 涓荤閮ㄩ棬鎵瑰鍥炲 */
+    @ApiModelProperty("涓荤閮ㄩ棬鎵瑰鍥炲")
+    private String manageApprovalReply;
+
+    /** 璁″垝涓婃姤/寤舵湡/杩涘害涓婃姤锛�0/1/2锛� */
+    @ApiModelProperty("璁″垝涓婃姤/寤舵湡/杩涘害涓婃姤锛�0/1/2锛�")
+    private Integer eventType;
+
+    /** 寤舵湡寮�濮嬫椂闂� */
+    @ApiModelProperty("寤舵湡寮�濮嬫椂闂�")
+    private Date delayStartTime;
+
+    /** 寤舵湡缁撴潫鏃堕棿 */
+    @ApiModelProperty("寤舵湡缁撴潫鏃堕棿")
+    private Date delayEndTime;
+
+    public static ProjectPlanExamineRecordVO getVoByEntity(@NonNull ProjectPlanExamineRecord entity, ProjectPlanExamineRecordVO vo) {
+        if(vo == null) {
+            vo = new ProjectPlanExamineRecordVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java
new file mode 100644
index 0000000..6343fd5
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoVO.java
@@ -0,0 +1,52 @@
+package com.ycl.domain.vo;
+
+
+import com.ycl.domain.entity.ProjectPlanInfo;
+import com.ycl.system.domain.base.AbsVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import java.util.Date;
+
+/**
+ * 椤圭洰璁″垝椤瑰睍绀�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "椤圭洰璁″垝椤瑰搷搴旀暟鎹�", description = "椤圭洰璁″垝椤瑰搷搴旀暟鎹�")
+public class ProjectPlanInfoVO extends AbsVo {
+
+    /** 椤圭洰璁″垝璁板綍id */
+    @ApiModelProperty("椤圭洰璁″垝璁板綍id")
+    private Long projectPlanRecordId;
+
+    /** 浜嬮」鍚嶇О */
+    @ApiModelProperty("浜嬮」鍚嶇О")
+    private String title;
+
+    /** 鐘舵��(0锛氭湭瀹屾垚锛�1锛氬緟瀹℃牳锛�2锛氬凡椹冲洖锛�3锛氬凡瀹屾垚) */
+    @ApiModelProperty("鐘舵��(0锛氭湭瀹屾垚锛�1锛氬緟瀹℃牳锛�2锛氬凡椹冲洖锛�3锛氬凡瀹屾垚)")
+    private Integer progressStatus;
+
+    /** 璁″垝寮�濮嬫椂闂� */
+    @ApiModelProperty("璁″垝寮�濮嬫椂闂�")
+    private Date startTime;
+
+    /** 璁″垝瀹屾垚鏃堕棿 */
+    @ApiModelProperty("璁″垝瀹屾垚鏃堕棿")
+    private Date endTime;
+
+    public static ProjectPlanInfoVO getVoByEntity(@NonNull ProjectPlanInfo entity, ProjectPlanInfoVO vo) {
+        if(vo == null) {
+            vo = new ProjectPlanInfoVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectPlanProgressReportVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanProgressReportVO.java
new file mode 100644
index 0000000..8b66ac8
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanProgressReportVO.java
@@ -0,0 +1,53 @@
+package com.ycl.domain.vo;
+
+
+import com.ycl.domain.entity.ProjectPlanProgressReport;
+import com.ycl.system.domain.base.AbsVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 杩涘害涓婃姤鍐呭灞曠ず
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "杩涘害涓婃姤鍐呭鍝嶅簲鏁版嵁", description = "杩涘害涓婃姤鍐呭鍝嶅簲鏁版嵁")
+public class ProjectPlanProgressReportVO extends AbsVo {
+
+    /** 椤圭洰璁″垝椤筰d */
+    @ApiModelProperty("椤圭洰璁″垝椤筰d")
+    private Long projectPlanInfoId;
+
+    /** 瀹為檯寮�濮嬫椂闂� */
+    @ApiModelProperty("瀹為檯寮�濮嬫椂闂�")
+    private Date startTime;
+
+    /** 瀹為檯瀹屾垚鏃堕棿 */
+    @ApiModelProperty("瀹為檯瀹屾垚鏃堕棿")
+    private Date endTime;
+
+    /** 杩涘害鎯呭喌 */
+    @ApiModelProperty("杩涘害鎯呭喌")
+    private String progressStatus;
+
+    /** 褰撳墠瀹為檯鎶曡祫 */
+    @ApiModelProperty("褰撳墠瀹為檯鎶曡祫")
+    private BigDecimal actualInvest;
+
+    public static ProjectPlanProgressReportVO getVoByEntity(@NonNull ProjectPlanProgressReport entity, ProjectPlanProgressReportVO vo) {
+        if(vo == null) {
+            vo = new ProjectPlanProgressReportVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectPlanRecordVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanRecordVO.java
new file mode 100644
index 0000000..2897350
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanRecordVO.java
@@ -0,0 +1,67 @@
+package com.ycl.domain.vo;
+
+
+import com.ycl.domain.entity.ProjectPlanRecord;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import com.ycl.system.domain.base.AbsVo;
+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 lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "椤圭洰璁″垝璁板綍鍝嶅簲鏁版嵁", description = "椤圭洰璁″垝璁板綍鍝嶅簲鏁版嵁")
+public class ProjectPlanRecordVO extends AbsVo {
+
+    /** 椤圭洰淇℃伅id */
+    @ApiModelProperty("椤圭洰淇℃伅id")
+    private Long projectInfoId;
+
+    /** 椤圭洰璁″垝id */
+    @ApiModelProperty("椤圭洰璁″垝id")
+    private Long planId;
+
+    /** 宸ョ▼id */
+    @ApiModelProperty("宸ョ▼id")
+    private Long engineeringInfoId;
+
+    /** 璁″垝鏈� */
+    @ApiModelProperty("璁″垝鏈�")
+    private Integer planTime;
+
+    /** 鏈堝害/瀛e害/骞村害  0/1/2 */
+    @ApiModelProperty("鏈堝害/瀛e害/骞村害  0/1/2")
+    private Integer planTimeFlag;
+
+    /** 鍒涘缓鏃堕棿 */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date createTime;
+
+    /** 涓婃姤鐘舵�� 宸蹭笂鎶�/鏈笂鎶�  0/1 */
+    @ApiModelProperty("涓婃姤鐘舵�� 宸蹭笂鎶�/鏈笂鎶�  0/1")
+    private Integer reportStatus;
+
+    /** 鎶曡祫 */
+    @ApiModelProperty("鎶曡祫")
+    private BigDecimal actualInvest;
+
+    public static ProjectPlanRecordVO getVoByEntity(@NonNull ProjectPlanRecord entity, ProjectPlanRecordVO vo) {
+        if(vo == null) {
+            vo = new ProjectPlanRecordVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectUnitRegistrationInfoVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectUnitRegistrationInfoVO.java
new file mode 100644
index 0000000..1558401
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectUnitRegistrationInfoVO.java
@@ -0,0 +1,129 @@
+package com.ycl.domain.vo;
+
+import com.ycl.system.domain.base.AbsVo;
+import com.ycl.domain.entity.ProjectUnitRegistrationInfo;
+
+import java.math.BigDecimal;
+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 lhr
+ * @since 2024-11-22
+ */
+@Data
+@ApiModel(value = "椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛ㄥ搷搴旀暟鎹�", description = "椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛ㄥ搷搴旀暟鎹�")
+public class ProjectUnitRegistrationInfoVO extends AbsVo {
+
+    /** 椤圭洰id */
+    @ApiModelProperty("椤圭洰id")
+    private Long projectId;
+
+    /** 椤圭洰鎬绘姇璧勯 */
+    @ApiModelProperty("椤圭洰鎬绘姇璧勯")
+    private BigDecimal totalInvestment;
+
+    /** 椤圭洰鍗曚綅 */
+    @ApiModelProperty("椤圭洰鍗曚綅")
+    private String projectUnit;
+
+    /** 椤圭洰鍗曚綅绫诲瀷 */
+    @ApiModelProperty("椤圭洰鍗曚綅绫诲瀷")
+    private String projectUnitType;
+
+    /** 鐧昏娉ㄥ唽绫诲瀷 */
+    @ApiModelProperty("鐧昏娉ㄥ唽绫诲瀷")
+    private String registrationType;
+
+    /** 鎺ц偂鎯呭喌 */
+    @ApiModelProperty("鎺ц偂鎯呭喌")
+    private String holdingSituation;
+
+    /** 璇佺収绫诲瀷 */
+    @ApiModelProperty("璇佺収绫诲瀷")
+    private String certificateType;
+
+    /** 璇佺収鍙风爜 */
+    @ApiModelProperty("璇佺収鍙风爜")
+    private String certificateNumber;
+
+    /** 娉ㄥ唽鍦板潃 */
+    @ApiModelProperty("娉ㄥ唽鍦板潃")
+    private String registeredAddress;
+
+    /** 娉ㄥ唽璧勯噾 */
+    @ApiModelProperty("娉ㄥ唽璧勯噾")
+    private BigDecimal registeredCapital;
+
+    /** 娉曚汉浠h〃 */
+    @ApiModelProperty("娉曚汉浠h〃")
+    private String legalRepresentative;
+
+    /** 鍥哄畾鐢佃瘽 */
+    @ApiModelProperty("鍥哄畾鐢佃瘽")
+    private String fixedPhone;
+
+    /** 娉曚汉韬唤璇� */
+    @ApiModelProperty("娉曚汉韬唤璇�")
+    private String legalPersonIdcard;
+
+    /** 椤圭洰鑱旂郴浜� */
+    @ApiModelProperty("椤圭洰鑱旂郴浜�")
+    private String projectContactPerson;
+
+    /** 绉诲姩鐢佃瘽 */
+    @ApiModelProperty("绉诲姩鐢佃瘽")
+    private String phone;
+
+    /** 鑱旂郴浜鸿韩浠借瘉 */
+    @ApiModelProperty("鑱旂郴浜鸿韩浠借瘉")
+    private String contactIdcard;
+
+    /** 寰俊鍙� */
+    @ApiModelProperty("寰俊鍙�")
+    private String wechat;
+
+    /** 鑱旂郴浜洪�氳鍦板潃 */
+    @ApiModelProperty("鑱旂郴浜洪�氳鍦板潃")
+    private String contactAddress;
+
+    /** 閭斂缂栫爜 */
+    @ApiModelProperty("閭斂缂栫爜")
+    private String postCode;
+
+    /** 鐢靛瓙閭 */
+    @ApiModelProperty("鐢靛瓙閭")
+    private String email;
+
+    /** 鍒涘缓浜� */
+    @ApiModelProperty("鍒涘缓浜�")
+    private Long createBy;
+
+    /** 鏇存柊浜� */
+    @ApiModelProperty("鏇存柊浜�")
+    private Long updateBy;
+
+    /** 鍒涘缓鏃堕棿 */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date gmtCreateTime;
+
+    /** 鏇存柊鏃堕棿 */
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date gmtUpdateTime;
+
+    public static ProjectUnitRegistrationInfoVO getVoByEntity(@NonNull ProjectUnitRegistrationInfo entity, ProjectUnitRegistrationInfoVO vo) {
+        if(vo == null) {
+            vo = new ProjectUnitRegistrationInfoVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/vue/ProjectInfoDialog.vue b/business/src/main/java/com/ycl/domain/vue/ProjectInfoDialog.vue
deleted file mode 100644
index 099b884..0000000
--- a/business/src/main/java/com/ycl/domain/vue/ProjectInfoDialog.vue
+++ /dev/null
@@ -1,315 +0,0 @@
-<template>
-  <div>
-    <el-dialog width="35%" :title="dialogTitle" @close="closeDialog" :visible.sync="dialogFormVisible" :destroy-on-close="true" :append-to-body="true" :close-on-click-modal="false">
-      <el-form :model="projectInfoForm" :rules="projectInfoRules" ref="projectInfoForm">
-        <el-form-item label="椤圭洰鍚嶇О" :label-width="formLabelWidth" prop="projectName">
-          <el-input v-model="projectInfoForm.projectName" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="椤圭洰浠g爜" :label-width="formLabelWidth" prop="projectCode">
-          <el-input v-model="projectInfoForm.projectCode" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="寤鸿鍐呭" :label-width="formLabelWidth" prop="content">
-          <el-input v-model="projectInfoForm.content" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="椤圭洰绫诲瀷锛�0鎴垮眿寤虹瓚锛�1鍩庡競鍩虹璁炬柦锛�2浜ら�氳繍杈擄紝3姘村埄锛�4鑳芥簮锛�5闈炵叅鐭垮北锛�6鍏朵粬锛�" :label-width="formLabelWidth" prop="projectType">
-          <el-input v-model="projectInfoForm.projectType" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="椤圭洰鐘舵��  (0鏈紑宸ワ紝1宸插紑宸ワ紝2宸茬宸ワ紝3鏆傚仠)" :label-width="formLabelWidth" prop="projectStatus">
-          <el-input v-model="projectInfoForm.projectStatus" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="璧勯噾绫诲瀷锛�0涓璧勯噾锛�1鍥藉�鸿祫閲戯紝2瓒呴暱鏈熷浗鍊猴紝3鍦版柟鏀垮簻涓撻」鍊猴級" :label-width="formLabelWidth" prop="fundType">
-          <el-input v-model="projectInfoForm.fundType" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛�" :label-width="formLabelWidth" prop="investType">
-          <el-input v-model="projectInfoForm.investType" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵)" :label-width="formLabelWidth" prop="projectPhase">
-          <el-input v-model="projectInfoForm.projectPhase" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="鏍囩" :label-width="formLabelWidth" prop="tag">
-          <el-input v-model="projectInfoForm.tag" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id)" :label-width="formLabelWidth" prop="competentDepartment">
-          <el-input v-model="projectInfoForm.competentDepartment" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="琛屾斂鍖哄煙" :label-width="formLabelWidth" prop="areaCode">
-          <el-input v-model="projectInfoForm.areaCode" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="绠$悊褰掑彛  (0鍩烘湰寤鸿(鍙戞敼),  1鏇存柊鏀归��(缁忎俊),  2鍗曠函璐疆(鍙戞敼),  3淇℃伅鍖�(鍙戞敼),  4鍏朵粬鎶曡祫)" :label-width="formLabelWidth" prop="managementCentralization">
-          <el-input v-model="projectInfoForm.managementCentralization" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="椤圭洰瀹℃壒绫诲瀷" :label-width="formLabelWidth" prop="projectApprovalType">
-          <el-input v-model="projectInfoForm.projectApprovalType" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="鎶曡祫鐩綍(锛�)" :label-width="formLabelWidth" prop="investmentCatalogue">
-          <el-input v-model="projectInfoForm.investmentCatalogue" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="閲嶇偣鍒嗙被  (0鐪侀噸鐐归」鐩�,  1閬傚畞甯傞噸鐐归」鐩�,  2.灏勬椽甯傞噸鐐归」鐩�,  3.涓�鑸」鐩�)" :label-width="formLabelWidth" prop="importanceType">
-          <el-input v-model="projectInfoForm.importanceType" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="骞村害鎶曡祫璁″垝" :label-width="formLabelWidth" prop="year">
-          <el-input v-model="projectInfoForm.year" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="骞村害鎶曡祫閲戦" :label-width="formLabelWidth" prop="yearInvestAmount">
-          <el-input v-model="projectInfoForm.yearInvestAmount" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="绔嬮」鏃堕棿" :label-width="formLabelWidth" prop="createProjectTime">
-          <el-input v-model="projectInfoForm.createProjectTime" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="璁″垝寮�宸ユ椂闂�" :label-width="formLabelWidth" prop="planStartTime">
-          <el-input v-model="projectInfoForm.planStartTime" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="璁″垝绔e伐鏃堕棿" :label-width="formLabelWidth" prop="planCompleteTime">
-          <el-input v-model="projectInfoForm.planCompleteTime" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="涓爣鍗曚綅" :label-width="formLabelWidth" prop="winUnit">
-          <el-input v-model="projectInfoForm.winUnit" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="涓爣閲戦" :label-width="formLabelWidth" prop="winAmount">
-          <el-input v-model="projectInfoForm.winAmount" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="涓爣鏃堕棿" :label-width="formLabelWidth" prop="winTime">
-          <el-input v-model="projectInfoForm.winTime" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="璇︾粏鍦板潃" :label-width="formLabelWidth" prop="projectAddress">
-          <el-input v-model="projectInfoForm.projectAddress" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="缁忓害" :label-width="formLabelWidth" prop="longitude">
-          <el-input v-model="projectInfoForm.longitude" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="绾害" :label-width="formLabelWidth" prop="latitude">
-          <el-input v-model="projectInfoForm.latitude" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="椤圭洰涓氫富鍗曚綅" :label-width="formLabelWidth" prop="projectOwnerUnit">
-          <el-input v-model="projectInfoForm.projectOwnerUnit" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="椤圭洰鑱旂郴浜�" :label-width="formLabelWidth" prop="projectContactPerson">
-          <el-input v-model="projectInfoForm.projectContactPerson" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="鑱旂郴鏂瑰紡" :label-width="formLabelWidth" prop="contact">
-          <el-input v-model="projectInfoForm.contact" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="鍒涘缓鏃堕棿" :label-width="formLabelWidth" prop="gmtCreateTime">
-          <el-input v-model="projectInfoForm.gmtCreateTime" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="鏇存柊鏃堕棿" :label-width="formLabelWidth" prop="gmtUpdateTime">
-          <el-input v-model="projectInfoForm.gmtUpdateTime" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="鏇存柊浜�" :label-width="formLabelWidth" prop="updateBy">
-          <el-input v-model="projectInfoForm.updateBy" autocomplete="off"></el-input>
-        </el-form-item>
-        <el-form-item label="鍒涘缓浜�" :label-width="formLabelWidth" prop="createBy">
-          <el-input v-model="projectInfoForm.createBy" autocomplete="off"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="closeDialog">鍙� 娑�</el-button>
-        <el-button type="primary" @click="addOrEditProjectInfo">纭� 瀹�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import {Message} from "element-ui";
-  import {getDictDataByType} from "@/api/dict-data";
-  import {addProjectInfo, editProjectInfo, getProjectInfos} from "@/api/projectInfo";
-  export default {
-    name: "ProjectInfoDialog",
-    data() {
-      return {
-        formLabelWidth: '120px',
-        projectInfoRules: {
-            projectName: [
-              { required: true, message: '璇疯緭鍏ラ」鐩悕绉�', trigger: 'blur' }
-            ],
-            projectCode: [
-              { required: true, message: '璇疯緭鍏ラ」鐩唬鐮�', trigger: 'blur' }
-            ],
-            content: [
-              { required: true, message: '璇疯緭鍏ュ缓璁惧唴瀹�', trigger: 'blur' }
-            ],
-            projectType: [
-              { required: true, message: '璇疯緭鍏ラ」鐩被鍨嬶紙0鎴垮眿寤虹瓚锛�1鍩庡競鍩虹璁炬柦锛�2浜ら�氳繍杈擄紝3姘村埄锛�4鑳芥簮锛�5闈炵叅鐭垮北锛�6鍏朵粬锛�', trigger: 'blur' }
-            ],
-            projectStatus: [
-              { required: true, message: '璇疯緭鍏ラ」鐩姸鎬�  (0鏈紑宸ワ紝1宸插紑宸ワ紝2宸茬宸ワ紝3鏆傚仠)', trigger: 'blur' }
-            ],
-            fundType: [
-              { required: true, message: '璇疯緭鍏ヨ祫閲戠被鍨嬶紙0涓璧勯噾锛�1鍥藉�鸿祫閲戯紝2瓒呴暱鏈熷浗鍊猴紝3鍦版柟鏀垮簻涓撻」鍊猴級', trigger: 'blur' }
-            ],
-            investType: [
-              { required: true, message: '璇疯緭鍏ユ姇璧勭被鍒紙0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛�', trigger: 'blur' }
-            ],
-            projectPhase: [
-              { required: true, message: '璇疯緭鍏ラ」鐩樁娈�(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵)', trigger: 'blur' }
-            ],
-            tag: [
-              { required: true, message: '璇疯緭鍏ユ爣绛�', trigger: 'blur' }
-            ],
-            competentDepartment: [
-              { required: true, message: '璇疯緭鍏ヤ富绠¢儴闂�(瀵瑰簲瀹℃壒閮ㄩ棬id)', trigger: 'blur' }
-            ],
-            areaCode: [
-              { required: true, message: '璇疯緭鍏ヨ鏀垮尯鍩�', trigger: 'blur' }
-            ],
-            managementCentralization: [
-              { required: true, message: '璇疯緭鍏ョ鐞嗗綊鍙�  (0鍩烘湰寤鸿(鍙戞敼),  1鏇存柊鏀归��(缁忎俊),  2鍗曠函璐疆(鍙戞敼),  3淇℃伅鍖�(鍙戞敼),  4鍏朵粬鎶曡祫)', trigger: 'blur' }
-            ],
-            projectApprovalType: [
-              { required: true, message: '璇疯緭鍏ラ」鐩鎵圭被鍨�', trigger: 'blur' }
-            ],
-            investmentCatalogue: [
-              { required: true, message: '璇疯緭鍏ユ姇璧勭洰褰�(锛�)', trigger: 'blur' }
-            ],
-            importanceType: [
-              { required: true, message: '璇疯緭鍏ラ噸鐐瑰垎绫�  (0鐪侀噸鐐归」鐩�,  1閬傚畞甯傞噸鐐归」鐩�,  2.灏勬椽甯傞噸鐐归」鐩�,  3.涓�鑸」鐩�)', trigger: 'blur' }
-            ],
-            year: [
-              { required: true, message: '璇疯緭鍏ュ勾搴︽姇璧勮鍒�', trigger: 'blur' }
-            ],
-            yearInvestAmount: [
-              { required: true, message: '璇疯緭鍏ュ勾搴︽姇璧勯噾棰�', trigger: 'blur' }
-            ],
-            createProjectTime: [
-              { required: true, message: '璇疯緭鍏ョ珛椤规椂闂�', trigger: 'blur' }
-            ],
-            planStartTime: [
-              { required: true, message: '璇疯緭鍏ヨ鍒掑紑宸ユ椂闂�', trigger: 'blur' }
-            ],
-            planCompleteTime: [
-              { required: true, message: '璇疯緭鍏ヨ鍒掔宸ユ椂闂�', trigger: 'blur' }
-            ],
-            winUnit: [
-              { required: true, message: '璇疯緭鍏ヤ腑鏍囧崟浣�', trigger: 'blur' }
-            ],
-            winAmount: [
-              { required: true, message: '璇疯緭鍏ヤ腑鏍囬噾棰�', trigger: 'blur' }
-            ],
-            winTime: [
-              { required: true, message: '璇疯緭鍏ヤ腑鏍囨椂闂�', trigger: 'blur' }
-            ],
-            projectAddress: [
-              { required: true, message: '璇疯緭鍏ヨ缁嗗湴鍧�', trigger: 'blur' }
-            ],
-            longitude: [
-              { required: true, message: '璇疯緭鍏ョ粡搴�', trigger: 'blur' }
-            ],
-            latitude: [
-              { required: true, message: '璇疯緭鍏ョ含搴�', trigger: 'blur' }
-            ],
-            projectOwnerUnit: [
-              { required: true, message: '璇疯緭鍏ラ」鐩笟涓诲崟浣�', trigger: 'blur' }
-            ],
-            projectContactPerson: [
-              { required: true, message: '璇疯緭鍏ラ」鐩仈绯讳汉', trigger: 'blur' }
-            ],
-            contact: [
-              { required: true, message: '璇疯緭鍏ヨ仈绯绘柟寮�', trigger: 'blur' }
-            ],
-            gmtCreateTime: [
-              { required: true, message: '璇疯緭鍏ュ垱寤烘椂闂�', trigger: 'blur' }
-            ],
-            gmtUpdateTime: [
-              { required: true, message: '璇疯緭鍏ユ洿鏂版椂闂�', trigger: 'blur' }
-            ],
-            updateBy: [
-              { required: true, message: '璇疯緭鍏ユ洿鏂颁汉', trigger: 'blur' }
-            ],
-            createBy: [
-              { required: true, message: '璇疯緭鍏ュ垱寤轰汉', trigger: 'blur' }
-            ],
-      }
-      }
-    },
-    computed: {
-      dialogFormVisible: {
-        get() {
-          return this.$store.state.projectInfo.dialogFormVisible;
-        },
-        set(value) {
-          this.$store.state.projectInfo.dialogFormVisible = value;
-        }
-      },
-      dialogTitle: {
-        get() {
-          return this.$store.state.projectInfo.dialogTitle;
-        },
-        set(value) {
-          this.$store.state.projectInfo.dialogTitle = value;
-        }
-
-      },
-      projectInfoForm: {
-        get() {
-          return this.$store.state.projectInfo.projectInfoForm;
-        },
-        set(value) {
-          this.$store.state.projectInfo.projectInfoForm = value;
-        }
-      }
-    },
-    mounted() {
-    },
-    methods: {
-      getDictData(value) {
-        let params = {
-          keyword: value,
-          dictTypeId: value,
-          current: 1,
-          size: 200
-        }
-        getDictDataByType(params).then(res => {
-          this.dictTypeList = res.data.data
-        })
-      },
-      refreshData() {
-        var params = {
-          "current": this.$store.state.projectInfo.currentPage,
-          "size": this.$store.state.projectInfo.pageSize
-        };
-        // 鍒锋柊
-        getProjectInfos(params).then((res) => {
-          this.$store.state.projectInfo.tableData = res.data.data;
-          this.$store.state.projectInfo.total = res.data.total;
-          this.clearForm();
-        })
-      },
-      clearForm() {
-        Object.keys(this.projectInfoForm).forEach((key) => {
-          this.projectInfoForm[key] = null;
-        })
-      },
-      closeDialog() {
-        this.$store.state.projectInfo.dialogFormVisible = false;
-        this.clearForm();
-      },
-      addOrEditProjectInfo() {
-        this.$refs["projectInfoForm"].validate((valid) => {
-          if (valid) {
-            if (this.dialogTitle === "娣诲姞椤圭洰绠$悊鍩虹淇℃伅琛�") {
-              addProjectInfo(this.projectInfoForm).then((res) => {
-                Message.success(res.data.msg);
-                this.dialogFormVisible = false;
-                this.refreshData();
-              })
-            } else {
-              editProjectInfo(this.projectInfoForm).then((res) => {
-                Message.success(res.data.msg);
-                this.dialogFormVisible = false;
-                this.refreshData();
-              })
-            }
-        } else {
-          console.log('error submit!!');
-          return false;
-        }
-        });
-      }
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/business/src/main/java/com/ycl/domain/vue/ProjectInfoTable.vue b/business/src/main/java/com/ycl/domain/vue/ProjectInfoTable.vue
deleted file mode 100644
index 77d0c07..0000000
--- a/business/src/main/java/com/ycl/domain/vue/ProjectInfoTable.vue
+++ /dev/null
@@ -1,320 +0,0 @@
-<template>
-  <div>
-    <el-table
-        :data="tableData"
-        :class="{tableTopLevel1: topLevel === 1, tableTopLevel2: topLevel === 2, tableTopLevel3: topLevel === 3, tableTopLevelDefault: topLevel === -1}"
-        row-key="id"
-        border
-        @selection-change="handleSelectionChange">
-      <el-table-column
-          type="selection"
-          width="55">
-      </el-table-column>
-      <el-table-column
-          prop="projectName"
-          label="椤圭洰鍚嶇О"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="projectCode"
-          label="椤圭洰浠g爜"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="content"
-          label="寤鸿鍐呭"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="projectType"
-          label="椤圭洰绫诲瀷锛�0鎴垮眿寤虹瓚锛�1鍩庡競鍩虹璁炬柦锛�2浜ら�氳繍杈擄紝3姘村埄锛�4鑳芥簮锛�5闈炵叅鐭垮北锛�6鍏朵粬锛�"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="projectStatus"
-          label="椤圭洰鐘舵��  (0鏈紑宸ワ紝1宸插紑宸ワ紝2宸茬宸ワ紝3鏆傚仠)"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="fundType"
-          label="璧勯噾绫诲瀷锛�0涓璧勯噾锛�1鍥藉�鸿祫閲戯紝2瓒呴暱鏈熷浗鍊猴紝3鍦版柟鏀垮簻涓撻」鍊猴級"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="investType"
-          label="鎶曡祫绫诲埆锛�0浼佷笟鎶曡祫锛�1鏀垮簻鎶曡祫锛�2澶栧晢鎶曡祫锛�3澧冨鎶曡祫锛�"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="projectPhase"
-          label="椤圭洰闃舵(0鍌ㄥ瑙勫垝闃舵,  1椤圭洰鍓嶆湡闃舵,  2瀹炴柦闃舵,  3绔e伐鎶曠敤闃舵)"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="tag"
-          label="鏍囩"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="competentDepartment"
-          label="涓荤閮ㄩ棬(瀵瑰簲瀹℃壒閮ㄩ棬id)"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="areaCode"
-          label="琛屾斂鍖哄煙"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="managementCentralization"
-          label="绠$悊褰掑彛  (0鍩烘湰寤鸿(鍙戞敼),  1鏇存柊鏀归��(缁忎俊),  2鍗曠函璐疆(鍙戞敼),  3淇℃伅鍖�(鍙戞敼),  4鍏朵粬鎶曡祫)"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="projectApprovalType"
-          label="椤圭洰瀹℃壒绫诲瀷"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="investmentCatalogue"
-          label="鎶曡祫鐩綍(锛�)"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="importanceType"
-          label="閲嶇偣鍒嗙被  (0鐪侀噸鐐归」鐩�,  1閬傚畞甯傞噸鐐归」鐩�,  2.灏勬椽甯傞噸鐐归」鐩�,  3.涓�鑸」鐩�)"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="year"
-          label="骞村害鎶曡祫璁″垝"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="yearInvestAmount"
-          label="骞村害鎶曡祫閲戦"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="createProjectTime"
-          label="绔嬮」鏃堕棿"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="planStartTime"
-          label="璁″垝寮�宸ユ椂闂�"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="planCompleteTime"
-          label="璁″垝绔e伐鏃堕棿"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="winUnit"
-          label="涓爣鍗曚綅"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="winAmount"
-          label="涓爣閲戦"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="winTime"
-          label="涓爣鏃堕棿"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="projectAddress"
-          label="璇︾粏鍦板潃"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="longitude"
-          label="缁忓害"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="latitude"
-          label="绾害"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="projectOwnerUnit"
-          label="椤圭洰涓氫富鍗曚綅"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="projectContactPerson"
-          label="椤圭洰鑱旂郴浜�"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="contact"
-          label="鑱旂郴鏂瑰紡"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="gmtCreateTime"
-          label="鍒涘缓鏃堕棿"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="gmtUpdateTime"
-          label="鏇存柊鏃堕棿"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="updateBy"
-          label="鏇存柊浜�"
-          >
-      </el-table-column>
-      <el-table-column
-          prop="createBy"
-          label="鍒涘缓浜�"
-          >
-      </el-table-column>
-      <el-table-column
-          label="鎿嶄綔">
-        <template slot-scope="scope">
-          <el-button v-if="editShow" type="primary" @click="editProjectInfo(scope.row.id)" size="mini">淇敼</el-button>
-          <el-button v-if="delShow" type="primary" @click="deleteProjectInfo(scope.row.id)" size="mini">鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <PageC
-            :top-level="topLevel"
-            :handleSizeChange="handleSizeChange"
-            :handleCurrentChange="handleCurrentChange"
-            :pageSize="pageSize"
-            :total="total"
-            :currentPage="currentPage"></PageC>
-  </div>
-</template>
-
-<script>
-  import PageC from "@/components/PageC";
-  import {deleteProjectInfoById, getProjectInfos} from "@/api/projectInfo";
-  import {Message} from "element-ui";
-  export default {
-    name: "ProjectInfoTable",
-    components: {PageC},
-    computed: {
-      tableData: {
-        get() {
-          return this.$store.state.projectInfo.tableData;
-        },
-        set(value) {
-          this.$store.state.projectInfo.tableData = value;
-        }
-      },
-      // 閫変腑琛宨d
-      multipleSelection: {
-        get() {
-          return this.$store.state.projectInfo.multipleSelection;
-        },
-        set(value) {
-          this.$store.state.projectInfo.multipleSelection = value;
-        }
-      },
-      total: {
-        get() {
-          return this.$store.state.projectInfo.total;
-        },
-        set(value) {
-          this.$store.state.projectInfo.total = value;
-        }
-      },
-      pageSize: {
-        get() {
-          return this.$store.state.projectInfo.pageSize;
-        },
-        set(value) {
-          this.$store.state.projectInfo.pageSize = value;
-        }
-      },
-      currentPage: {
-        get() {
-          return this.$store.state.projectInfo.currentPage;
-        },
-        set(value) {
-          this.$store.state.projectInfo.currentPage = value;
-        }
-      }
-    },
-    props: {
-      topLevel: {
-        required: false,
-        default: -1,
-        type: Number
-      },
-      editShow: {
-        required: true,
-        default: false,
-        type: Boolean
-      },
-      delShow: {
-        required: true,
-        default: false,
-        type: Boolean
-      },
-    },
-    methods: {
-      handleSelectionChange(val) {
-        this.multipleSelection = val.map((item) => {return item.id;})
-      },
-      getProjectInfos(params) {
-        if (! params) {
-          params = {
-            "current": this.currentPage,
-            "size": this.pageSize
-          };
-        } else {
-          params.current = this.currentPage;
-          params.size = this.pageSize;
-        }
-        // 鍒锋柊
-        getProjectInfos(params).then((res) => {
-          this.tableData = res.data.data;
-          this.total = res.data.total;
-        })
-      },
-      editProjectInfo(id) {
-        this.$store.dispatch("projectInfo/editProjectInfo", id);
-      },
-      deleteProjectInfo(id) {
-        this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ヨ褰�, 鏄惁缁х画?', '鎻愮ず', {
-          confirmButtonText: '纭畾',
-          cancelButtonText: '鍙栨秷',
-          type: 'warning'
-        }).then(() => {
-          deleteProjectInfoById(id).then((res) => {
-            Message.success(res.data.msg);
-            this.getProjectInfos();
-          })
-        }).catch(() => {
-          this.$message({
-            type: 'info',
-            message: '宸插彇娑堝垹闄�'
-          });
-        });
-      },
-      handleSizeChange(val) {
-        this.pageSize = val;
-        this.getProjectInfos();
-      },
-      handleCurrentChange(val) {
-        this.currentPage = val;
-        this.getProjectInfos();
-      }
-    },
-    created() {
-      this.getProjectInfos();
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/business/src/main/java/com/ycl/domain/vue/ProjectInfoView.vue b/business/src/main/java/com/ycl/domain/vue/ProjectInfoView.vue
deleted file mode 100644
index ef6223b..0000000
--- a/business/src/main/java/com/ycl/domain/vue/ProjectInfoView.vue
+++ /dev/null
@@ -1,102 +0,0 @@
-<template>
-  <div class="view">
-    <div class="search-warp">
-      <el-form :inline="true" :model="searchForm" class="demo-form-inline">
-        <el-form-item>
-          <el-button size="small" type="primary" @click="search">鏌ユ壘</el-button>
-        </el-form-item>
-      </el-form>
-    </div>
-    <OperateC
-            :top-level="topLevel"
-            :add="addProjectInfo"
-            :edit="editProjectInfo"
-            :remove="removeProjectInfo"
-            :add-show="this.$getButtonAuth('projectInfo:add')"
-            :remove-show="this.$getButtonAuth('projectInfo:del:batch')"
-    ></OperateC>
-    <ProjectInfoTable
-            :top-level="topLevel"
-            ref="ProjectInfoTableRef"
-            :edit-show="this.$getButtonAuth('projectInfo:edit')"
-            :del-show="this.$getButtonAuth('projectInfo:del')"
-    ></ProjectInfoTable>
-    <ProjectInfoDialog></ProjectInfoDialog>
-  </div>
-</template>
-
-<script>
-  import ProjectInfoDialog from "@/components/dialog/ProjectInfoDialog";
-  import OperateC from "@/components/OperateC";
-  import ProjectInfoTable from "@/components/table/ProjectInfoTable";
-  import {deleteProjectInfoByIds, getProjectInfos} from "@/api/projectInfo";
-  export default {
-    name: "ProjectInfoView",
-    components: {ProjectInfoDialog, OperateC, ProjectInfoTable},
-    data() {
-      return {
-        searchForm: {
-        },
-        topLevel: -1
-      }
-    },
-    methods: {
-      search() {
-        this.$refs.ProjectInfoTableRef.getProjectInfos(this.searchForm)
-      },
-      addProjectInfo() {
-        let params = {
-          dialogFormVisible: true,
-          dialogTitle: "娣诲姞椤圭洰绠$悊鍩虹淇℃伅琛�"
-        }
-        this.$store.commit("projectInfo/openDialogForm", params);
-      },
-      editProjectInfo() {
-        let selected = this.$store.state.projectInfo.multipleSelection;
-        if (selected.length < 1) {
-          this.$message.warning("浣犺繕娌℃湁閫変腑鏁版嵁鍝︼紒");
-          return;
-        }
-        if (selected.length > 1) {
-          this.$message.warning("涓�娆″彧鑳戒慨鏀逛竴鏉℃暟鎹摝锛�")
-          return;
-        }
-        this.$store.dispatch("projectInfo/editProjectInfo", selected[0]);
-      },
-      removeProjectInfo() {
-        let selected = this.$store.state.projectInfo.multipleSelection;
-        if (selected.length < 1) {
-          this.$message.warning("璇峰厛閫夋嫨瑕佸垹闄ょ殑鏁版嵁鍝︼紒");
-          return;
-        }
-        this.$confirm('纭畾鍒犻櫎鍚�?', '鎻愮ず', {
-          confirmButtonText: '纭畾',
-          cancelButtonText: '鍙栨秷',
-          type: 'warning'
-        }).then(() => {
-          deleteProjectInfoByIds(selected).then((res) => {
-            this.$message.success(res.data.msg);
-            // 鍒锋柊
-            let params = {
-              "current": this.$store.state.projectInfo.currentPage,
-              "size": this.$store.state.projectInfo.pageSize
-            };
-            getProjectInfos(params).then((res) => {
-              this.$store.state.projectInfo.tableData = res.data.data;
-              this.$store.state.projectInfo.total = res.data.total;
-            })
-          })
-        }).catch(() => {
-          this.$message({
-            type: 'info',
-            message: '宸插彇娑堝垹闄�'
-          });
-        });
-      },
-    }
-  }
-</script>
-
-<style scoped>
-
-</style>
diff --git a/business/src/main/java/com/ycl/domain/vue/index.js b/business/src/main/java/com/ycl/domain/vue/index.js
deleted file mode 100644
index c1218ea..0000000
--- a/business/src/main/java/com/ycl/domain/vue/index.js
+++ /dev/null
@@ -1,79 +0,0 @@
-import {getProjectInfoById} from "@/api/projectInfo";
-
-export default {
-    namespaced: true,
-    state: {
-        dialogFormVisible: false,
-        dialogTitle: '',
-        pageSize: 10,
-        currentPage: 1,
-        total: 0,
-        // 淇敼娣诲姞鐨勮〃鍗曟暟鎹�
-        projectInfoForm: {
-            id: null,
-            projectName: "" ,
-            projectCode: "" ,
-            content: "" ,
-            projectType: "" ,
-            projectStatus: "" ,
-            fundType: "" ,
-            investType: "" ,
-            projectPhase: "" ,
-            tag: "" ,
-            competentDepartment: null ,
-            areaCode: "" ,
-            managementCentralization: "" ,
-            projectApprovalType: "" ,
-            investmentCatalogue: "" ,
-            importanceType: "" ,
-            year: "" ,
-            yearInvestAmount: null ,
-            createProjectTime: null ,
-            planStartTime: null ,
-            planCompleteTime: null ,
-            winUnit: "" ,
-            winAmount: "" ,
-            winTime: null ,
-            projectAddress: "" ,
-            longitude: "" ,
-            latitude: "" ,
-            projectOwnerUnit: "" ,
-            projectContactPerson: "" ,
-            contact: "" ,
-            gmtCreateTime: null ,
-            gmtUpdateTime: null ,
-            updateBy: null ,
-            createBy: null ,
-        },
-        // 琛ㄦ牸鏁版嵁
-        tableData: [],
-        // 琛ㄦ牸閫変腑鏁版嵁
-        multipleSelection: [],
-    },
-    getters: {},
-    mutations: {
-        openDialogForm(state, value) {
-            state.dialogFormVisible = value.dialogFormVisible;
-            state.dialogTitle = value.dialogTitle;
-        },
-        EditProjectInfo(state, value) {
-            state.dialogFormVisible = value.dialogFormVisible;
-            state.dialogTitle = value.dialogTitle;
-            Object.keys(state.projectInfoForm).forEach((key) => {
-                state.projectInfoForm[key] = value.projectInfoForm[key]
-            })
-        }
-    },
-    actions: {
-        editProjectInfo(state, id) {
-            getProjectInfoById(id).then((res) => {
-                var params = {
-                    dialogFormVisible: true,
-                    dialogTitle: "淇敼椤圭洰绠$悊鍩虹淇℃伅琛�",
-                    projectInfoForm: res.data.data
-                }
-                state.commit("EditProjectInfo", params);
-            })
-        }
-    },
-}
diff --git a/business/src/main/java/com/ycl/domain/vue/projectInfo.js b/business/src/main/java/com/ycl/domain/vue/projectInfo.js
deleted file mode 100644
index d31ccab..0000000
--- a/business/src/main/java/com/ycl/domain/vue/projectInfo.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import axios from "./request";
-
-// 鑾峰彇椤圭洰绠$悊鍩虹淇℃伅琛ㄥ垎椤�
-export const getProjectInfos = (params) => {
-    return axios({
-        url: "/api/project-info/page",
-        method: "GET",
-        params: params
-    })
-}
-
-// 鑾峰彇椤圭洰绠$悊鍩虹淇℃伅琛ㄥ垪琛�
-export const getProjectInfoList = () => {
-    return axios({
-        url: "/api/project-info/list",
-        method: "GET"
-    })
-}
-
-// 閫氳繃id鑾峰彇椤圭洰绠$悊鍩虹淇℃伅琛�
-export const getProjectInfoById = (params) => {
-    return axios({
-        url: "/api/project-info/" + params,
-        method: "GET"
-    })
-}
-
-// 閫氳繃id鍒犻櫎椤圭洰绠$悊鍩虹淇℃伅琛�
-export const deleteProjectInfoById = (params) => {
-    return axios({
-        url: "/api/project-info/" + params,
-        method: "DELETE"
-    })
-}
-
-// 鎵归噺鍒犻櫎椤圭洰绠$悊鍩虹淇℃伅琛�
-export const deleteProjectInfoByIds = (params) => {
-    return axios({
-        url: "/api/project-info/batch",
-        method: "DELETE",
-        data: params
-    })
-}
-
-// 淇敼椤圭洰绠$悊鍩虹淇℃伅琛�
-export const editProjectInfo = (params) => {
-    return axios({
-        url: "/api/project-info/",
-        method: "PUT",
-        data: params
-    })
-}
-
-// 娣诲姞椤圭洰绠$悊鍩虹淇℃伅琛�
-export const addProjectInfo = (params) => {
-    return axios({
-        url: "/api/project-info/",
-        method: "POST",
-        data: params
-    })
-}
diff --git a/business/src/main/java/com/ycl/mapper/PlanMapper.java b/business/src/main/java/com/ycl/mapper/PlanMapper.java
new file mode 100644
index 0000000..0f30ffb
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/PlanMapper.java
@@ -0,0 +1,32 @@
+package com.ycl.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.domain.entity.Plan;
+import com.ycl.domain.query.PlanQuery;
+import com.ycl.domain.vo.PlanVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 椤圭洰璁″垝琛� Mapper 鎺ュ彛
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Mapper
+public interface PlanMapper extends BaseMapper<Plan> {
+
+    /**
+     * id鏌ユ壘椤圭洰璁″垝琛�
+     * @param id
+     * @return
+     */
+    PlanVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") PlanQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProgressPlanMapper.java b/business/src/main/java/com/ycl/mapper/ProgressPlanMapper.java
new file mode 100644
index 0000000..6a8f8a1
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProgressPlanMapper.java
@@ -0,0 +1,32 @@
+package com.ycl.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.domain.entity.ProgressPlan;
+import com.ycl.domain.query.ProgressPlanQuery;
+import com.ycl.domain.vo.ProgressPlanVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 椤圭洰璁″垝杩涘害 Mapper 鎺ュ彛
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Mapper
+public interface ProgressPlanMapper extends BaseMapper<ProgressPlan> {
+
+    /**
+     * id鏌ユ壘椤圭洰璁″垝杩涘害
+     * @param id
+     * @return
+     */
+    ProgressPlanVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProgressPlanQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectPlanExamineRecordMapper.java b/business/src/main/java/com/ycl/mapper/ProjectPlanExamineRecordMapper.java
new file mode 100644
index 0000000..3a8736d
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectPlanExamineRecordMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectPlanExamineRecord;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.query.ProjectPlanExamineRecordQuery;
+import com.ycl.domain.vo.ProjectPlanExamineRecordVO;
+import com.ycl.domain.form.ProjectPlanExamineRecordForm;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 椤圭洰瀹℃牳璁板綍琛� Mapper 鎺ュ彛
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Mapper
+public interface ProjectPlanExamineRecordMapper extends BaseMapper<ProjectPlanExamineRecord> {
+
+    /**
+     * id鏌ユ壘椤圭洰瀹℃牳璁板綍琛�
+     * @param id
+     * @return
+     */
+    ProjectPlanExamineRecordVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectPlanExamineRecordQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectPlanInfoMapper.java b/business/src/main/java/com/ycl/mapper/ProjectPlanInfoMapper.java
new file mode 100644
index 0000000..36005d1
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectPlanInfoMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectPlanInfo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.query.ProjectPlanInfoQuery;
+import com.ycl.domain.vo.ProjectPlanInfoVO;
+import com.ycl.domain.form.ProjectPlanInfoForm;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 椤圭洰璁″垝椤� Mapper 鎺ュ彛
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Mapper
+public interface ProjectPlanInfoMapper extends BaseMapper<ProjectPlanInfo> {
+
+    /**
+     * id鏌ユ壘椤圭洰璁″垝椤�
+     * @param id
+     * @return
+     */
+    ProjectPlanInfoVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectPlanInfoQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectPlanProgressReportMapper.java b/business/src/main/java/com/ycl/mapper/ProjectPlanProgressReportMapper.java
new file mode 100644
index 0000000..08f3ee4
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectPlanProgressReportMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectPlanProgressReport;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.query.ProjectPlanProgressReportQuery;
+import com.ycl.domain.vo.ProjectPlanProgressReportVO;
+import com.ycl.domain.form.ProjectPlanProgressReportForm;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 杩涘害涓婃姤鍐呭 Mapper 鎺ュ彛
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Mapper
+public interface ProjectPlanProgressReportMapper extends BaseMapper<ProjectPlanProgressReport> {
+
+    /**
+     * id鏌ユ壘杩涘害涓婃姤鍐呭
+     * @param id
+     * @return
+     */
+    ProjectPlanProgressReportVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectPlanProgressReportQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectPlanRecordMapper.java b/business/src/main/java/com/ycl/mapper/ProjectPlanRecordMapper.java
new file mode 100644
index 0000000..2931072
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectPlanRecordMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectPlanRecord;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.query.ProjectPlanRecordQuery;
+import com.ycl.domain.vo.ProjectPlanRecordVO;
+import com.ycl.domain.form.ProjectPlanRecordForm;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 椤圭洰璁″垝璁板綍 Mapper 鎺ュ彛
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Mapper
+public interface ProjectPlanRecordMapper extends BaseMapper<ProjectPlanRecord> {
+
+    /**
+     * id鏌ユ壘椤圭洰璁″垝璁板綍
+     * @param id
+     * @return
+     */
+    ProjectPlanRecordVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectPlanRecordQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectUnitRegistrationInfoMapper.java b/business/src/main/java/com/ycl/mapper/ProjectUnitRegistrationInfoMapper.java
new file mode 100644
index 0000000..4f847d7
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectUnitRegistrationInfoMapper.java
@@ -0,0 +1,34 @@
+package com.ycl.mapper;
+
+import com.ycl.domain.entity.ProjectUnitRegistrationInfo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.vo.ProjectUnitRegistrationInfoVO;
+import com.ycl.domain.form.ProjectUnitRegistrationInfoForm;
+import com.ycl.domain.query.ProjectUnitRegistrationInfoQuery;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛� Mapper 鎺ュ彛
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Mapper
+public interface ProjectUnitRegistrationInfoMapper extends BaseMapper<ProjectUnitRegistrationInfo> {
+
+    /**
+     * id鏌ユ壘椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛�
+     * @param id
+     * @return
+     */
+    ProjectUnitRegistrationInfoVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ProjectUnitRegistrationInfoQuery query);
+
+}
diff --git a/business/src/main/java/com/ycl/service/PlanService.java b/business/src/main/java/com/ycl/service/PlanService.java
new file mode 100644
index 0000000..6b39151
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/PlanService.java
@@ -0,0 +1,73 @@
+package com.ycl.service;
+
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.Plan;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.domain.form.PlanForm;
+import com.ycl.domain.query.PlanQuery;
+
+import java.util.List;
+
+/**
+ * 椤圭洰璁″垝琛� 鏈嶅姟绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+public interface PlanService extends IService<Plan> {
+
+    /**
+     * 娣诲姞
+     *
+     * @param form
+     * @return
+     */
+    Result add(PlanForm form);
+
+    /**
+     * 淇敼
+     *
+     * @param form
+     * @return
+     */
+    Result update(PlanForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param query
+     * @return
+     */
+    Result page(PlanQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     *
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     *
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/ProgressPlanService.java b/business/src/main/java/com/ycl/service/ProgressPlanService.java
new file mode 100644
index 0000000..2b0b005
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProgressPlanService.java
@@ -0,0 +1,65 @@
+package com.ycl.service;
+
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProgressPlan;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.domain.form.ProgressPlanForm;
+import com.ycl.domain.query.ProgressPlanQuery;
+import java.util.List;
+
+/**
+ * 椤圭洰璁″垝杩涘害 鏈嶅姟绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+public interface ProgressPlanService extends IService<ProgressPlan> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProgressPlanForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProgressPlanForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProgressPlanQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/ProjectPlanExamineRecordService.java b/business/src/main/java/com/ycl/service/ProjectPlanExamineRecordService.java
new file mode 100644
index 0000000..85ff607
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectPlanExamineRecordService.java
@@ -0,0 +1,66 @@
+package com.ycl.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProjectPlanExamineRecord;
+import com.ycl.domain.form.ProjectPlanExamineRecordForm;
+import com.ycl.domain.query.ProjectPlanExamineRecordQuery;
+
+import java.util.List;
+
+/**
+ * 椤圭洰瀹℃牳璁板綍琛� 鏈嶅姟绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+public interface ProjectPlanExamineRecordService extends IService<ProjectPlanExamineRecord> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectPlanExamineRecordForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectPlanExamineRecordForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectPlanExamineRecordQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/ProjectPlanInfoService.java b/business/src/main/java/com/ycl/service/ProjectPlanInfoService.java
new file mode 100644
index 0000000..ef8c612
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectPlanInfoService.java
@@ -0,0 +1,66 @@
+package com.ycl.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProjectPlanInfo;
+import com.ycl.domain.form.ProjectPlanInfoForm;
+import com.ycl.domain.query.ProjectPlanInfoQuery;
+
+import java.util.List;
+
+/**
+ * 椤圭洰璁″垝椤� 鏈嶅姟绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+public interface ProjectPlanInfoService extends IService<ProjectPlanInfo> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectPlanInfoForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectPlanInfoForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectPlanInfoQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java b/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java
new file mode 100644
index 0000000..0a9802c
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectPlanProgressReportService.java
@@ -0,0 +1,66 @@
+package com.ycl.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProjectPlanProgressReport;
+import com.ycl.domain.form.ProjectPlanProgressReportForm;
+import com.ycl.domain.query.ProjectPlanProgressReportQuery;
+
+import java.util.List;
+
+/**
+ * 杩涘害涓婃姤鍐呭 鏈嶅姟绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+public interface ProjectPlanProgressReportService extends IService<ProjectPlanProgressReport> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectPlanProgressReportForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectPlanProgressReportForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectPlanProgressReportQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/ProjectPlanRecordService.java b/business/src/main/java/com/ycl/service/ProjectPlanRecordService.java
new file mode 100644
index 0000000..1481c01
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectPlanRecordService.java
@@ -0,0 +1,66 @@
+package com.ycl.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProjectPlanRecord;
+import com.ycl.domain.form.ProjectPlanRecordForm;
+import com.ycl.domain.query.ProjectPlanRecordQuery;
+
+import java.util.List;
+
+/**
+ * 椤圭洰璁″垝璁板綍 鏈嶅姟绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+public interface ProjectPlanRecordService extends IService<ProjectPlanRecord> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectPlanRecordForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectPlanRecordForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectPlanRecordQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/ProjectUnitRegistrationInfoService.java b/business/src/main/java/com/ycl/service/ProjectUnitRegistrationInfoService.java
new file mode 100644
index 0000000..6e92ad5
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectUnitRegistrationInfoService.java
@@ -0,0 +1,65 @@
+package com.ycl.service;
+
+import com.ycl.domain.entity.ProjectUnitRegistrationInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectUnitRegistrationInfoForm;
+import com.ycl.domain.query.ProjectUnitRegistrationInfoQuery;
+import java.util.List;
+
+/**
+ * 椤圭洰锛堟硶浜猴級鍗曚綅鐧昏淇℃伅琛� 鏈嶅姟绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+public interface ProjectUnitRegistrationInfoService extends IService<ProjectUnitRegistrationInfo> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ProjectUnitRegistrationInfoForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ProjectUnitRegistrationInfoForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ProjectUnitRegistrationInfoQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java b/business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java
new file mode 100644
index 0000000..9dba0cd
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.Plan;
+import com.ycl.framework.utils.PageUtil;
+import com.ycl.mapper.PlanMapper;
+import com.ycl.service.PlanService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.PlanForm;
+import com.ycl.domain.vo.PlanVO;
+import com.ycl.domain.query.PlanQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 椤圭洰璁″垝琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Service
+@RequiredArgsConstructor
+public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements PlanService {
+
+    private final PlanMapper planMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(PlanForm form) {
+        Plan entity = PlanForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(PlanForm form) {
+        Plan 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(PlanQuery query) {
+        IPage<PlanVO> page = PageUtil.getPage(query, PlanVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        PlanVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<Plan> entities = baseMapper.selectList(null);
+        List<PlanVO> vos = entities.stream()
+                .map(entity -> PlanVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProgressPlanServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProgressPlanServiceImpl.java
new file mode 100644
index 0000000..cb52f7d
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProgressPlanServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+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.ProgressPlan;
+import com.ycl.domain.form.ProgressPlanForm;
+import com.ycl.domain.query.ProgressPlanQuery;
+import com.ycl.domain.vo.ProgressPlanVO;
+import com.ycl.framework.utils.PageUtil;
+import com.ycl.mapper.ProgressPlanMapper;
+import com.ycl.service.ProgressPlanService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 椤圭洰璁″垝杩涘害 鏈嶅姟瀹炵幇绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Service
+@RequiredArgsConstructor
+public class ProgressPlanServiceImpl extends ServiceImpl<ProgressPlanMapper, ProgressPlan> implements ProgressPlanService {
+
+    private final ProgressPlanMapper progressPlanMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProgressPlanForm form) {
+        ProgressPlan entity = ProgressPlanForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProgressPlanForm form) {
+        ProgressPlan 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(ProgressPlanQuery query) {
+        IPage<ProgressPlanVO> page = PageUtil.getPage(query, ProgressPlanVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProgressPlanVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProgressPlan> entities = baseMapper.selectList(null);
+        List<ProgressPlanVO> vos = entities.stream()
+                .map(entity -> ProgressPlanVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java
new file mode 100644
index 0000000..5f124ab
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanExamineRecordServiceImpl.java
@@ -0,0 +1,121 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProjectPlanExamineRecord;
+import com.ycl.framework.utils.PageUtil;
+import com.ycl.mapper.ProjectPlanExamineRecordMapper;
+import com.ycl.service.ProjectPlanExamineRecordService;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectPlanExamineRecordForm;
+import com.ycl.domain.vo.ProjectPlanExamineRecordVO;
+import com.ycl.domain.query.ProjectPlanExamineRecordQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 椤圭洰瀹℃牳璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectPlanExamineRecordServiceImpl extends ServiceImpl<ProjectPlanExamineRecordMapper, ProjectPlanExamineRecord> implements ProjectPlanExamineRecordService {
+
+    private final ProjectPlanExamineRecordMapper projectPlanExamineRecordMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectPlanExamineRecordForm form) {
+        ProjectPlanExamineRecord entity = ProjectPlanExamineRecordForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectPlanExamineRecordForm form) {
+        ProjectPlanExamineRecord 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(ProjectPlanExamineRecordQuery query) {
+        IPage<ProjectPlanExamineRecordVO> page = PageUtil.getPage(query, ProjectPlanExamineRecordVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProjectPlanExamineRecordVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectPlanExamineRecord> entities = baseMapper.selectList(null);
+        List<ProjectPlanExamineRecordVO> vos = entities.stream()
+                .map(entity -> ProjectPlanExamineRecordVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java
new file mode 100644
index 0000000..6c533f0
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+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.ProjectPlanInfo;
+import com.ycl.domain.form.ProjectPlanInfoForm;
+import com.ycl.domain.query.ProjectPlanInfoQuery;
+import com.ycl.domain.vo.ProjectPlanInfoVO;
+import com.ycl.framework.utils.PageUtil;
+import com.ycl.mapper.ProjectPlanInfoMapper;
+import com.ycl.service.ProjectPlanInfoService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 椤圭洰璁″垝椤� 鏈嶅姟瀹炵幇绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectPlanInfoServiceImpl extends ServiceImpl<ProjectPlanInfoMapper, ProjectPlanInfo> implements ProjectPlanInfoService {
+
+    private final ProjectPlanInfoMapper projectPlanInfoMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectPlanInfoForm form) {
+        ProjectPlanInfo entity = ProjectPlanInfoForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectPlanInfoForm form) {
+        ProjectPlanInfo 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(ProjectPlanInfoQuery query) {
+        IPage<ProjectPlanInfoVO> page = PageUtil.getPage(query, ProjectPlanInfoVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProjectPlanInfoVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectPlanInfo> entities = baseMapper.selectList(null);
+        List<ProjectPlanInfoVO> vos = entities.stream()
+                .map(entity -> ProjectPlanInfoVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java
new file mode 100644
index 0000000..fe9851a
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanProgressReportServiceImpl.java
@@ -0,0 +1,120 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProjectPlanProgressReport;
+import com.ycl.framework.utils.PageUtil;
+import com.ycl.mapper.ProjectPlanProgressReportMapper;
+import com.ycl.service.ProjectPlanProgressReportService;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectPlanProgressReportForm;
+import com.ycl.domain.vo.ProjectPlanProgressReportVO;
+import com.ycl.domain.query.ProjectPlanProgressReportQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 杩涘害涓婃姤鍐呭 鏈嶅姟瀹炵幇绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectPlanProgressReportServiceImpl extends ServiceImpl<ProjectPlanProgressReportMapper, ProjectPlanProgressReport> implements ProjectPlanProgressReportService {
+
+    private final ProjectPlanProgressReportMapper projectPlanProgressReportMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectPlanProgressReportForm form) {
+        ProjectPlanProgressReport entity = ProjectPlanProgressReportForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectPlanProgressReportForm form) {
+        ProjectPlanProgressReport 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(ProjectPlanProgressReportQuery query) {
+        IPage<ProjectPlanProgressReportVO> page = PageUtil.getPage(query, ProjectPlanProgressReportVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProjectPlanProgressReportVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectPlanProgressReport> entities = baseMapper.selectList(null);
+        List<ProjectPlanProgressReportVO> vos = entities.stream()
+                .map(entity -> ProjectPlanProgressReportVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectPlanRecordServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectPlanRecordServiceImpl.java
new file mode 100644
index 0000000..dafefc2
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectPlanRecordServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProjectPlanRecord;
+import com.ycl.framework.utils.PageUtil;
+import com.ycl.mapper.ProjectPlanRecordMapper;
+import com.ycl.service.ProjectPlanRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectPlanRecordForm;
+import com.ycl.domain.vo.ProjectPlanRecordVO;
+import com.ycl.domain.query.ProjectPlanRecordQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 椤圭洰璁″垝璁板綍 鏈嶅姟瀹炵幇绫�
+ *
+ * @author lhr
+ * @since 2024-11-22
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectPlanRecordServiceImpl extends ServiceImpl<ProjectPlanRecordMapper, ProjectPlanRecord> implements ProjectPlanRecordService {
+
+    private final ProjectPlanRecordMapper projectPlanRecordMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectPlanRecordForm form) {
+        ProjectPlanRecord entity = ProjectPlanRecordForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectPlanRecordForm form) {
+        ProjectPlanRecord 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(ProjectPlanRecordQuery query) {
+        IPage<ProjectPlanRecordVO> page = PageUtil.getPage(query, ProjectPlanRecordVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProjectPlanRecordVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectPlanRecord> entities = baseMapper.selectList(null);
+        List<ProjectPlanRecordVO> vos = entities.stream()
+                .map(entity -> ProjectPlanRecordVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java
new file mode 100644
index 0000000..13893b9
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectUnitRegistrationInfoServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.domain.entity.ProjectUnitRegistrationInfo;
+import com.ycl.mapper.ProjectUnitRegistrationInfoMapper;
+import com.ycl.service.ProjectUnitRegistrationInfoService;
+import com.ycl.common.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectUnitRegistrationInfoForm;
+import com.ycl.domain.vo.ProjectUnitRegistrationInfoVO;
+import com.ycl.domain.query.ProjectUnitRegistrationInfoQuery;
+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 lhr
+ * @since 2024-11-22
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectUnitRegistrationInfoServiceImpl extends ServiceImpl<ProjectUnitRegistrationInfoMapper, ProjectUnitRegistrationInfo> implements ProjectUnitRegistrationInfoService {
+
+    private final ProjectUnitRegistrationInfoMapper projectUnitRegistrationInfoMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ProjectUnitRegistrationInfoForm form) {
+        ProjectUnitRegistrationInfo entity = ProjectUnitRegistrationInfoForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ProjectUnitRegistrationInfoForm form) {
+        ProjectUnitRegistrationInfo 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(ProjectUnitRegistrationInfoQuery query) {
+        IPage<ProjectUnitRegistrationInfoVO> page = PageUtil.getPage(query, ProjectUnitRegistrationInfoVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ProjectUnitRegistrationInfoVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok().data(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ProjectUnitRegistrationInfo> entities = baseMapper.selectList(null);
+        List<ProjectUnitRegistrationInfoVO> vos = entities.stream()
+                .map(entity -> ProjectUnitRegistrationInfoVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+}
diff --git a/business/src/main/resources/mapper/PlanMapper.xml b/business/src/main/resources/mapper/PlanMapper.xml
new file mode 100644
index 0000000..f257919
--- /dev/null
+++ b/business/src/main/resources/mapper/PlanMapper.xml
@@ -0,0 +1,55 @@
+<?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.PlanMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.PlanVO">
+        <result column="project_info_id" property="projectInfoId" />
+        <result column="report_status" property="reportStatus" />
+        <result column="month_status" property="monthStatus" />
+        <result column="season_status" property="seasonStatus" />
+        <result column="year_status" property="yearStatus" />
+        <result column="gmt_create_time" property="gmtCreateTime" />
+        <result column="gmt_update_time" property="gmtUpdateTime" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TP.project_info_id,
+            TP.report_status,
+            TP.month_status,
+            TP.season_status,
+            TP.year_status,
+            TP.gmt_create_time,
+            TP.gmt_update_time,
+            TP.id
+        FROM
+            t_plan TP
+        WHERE
+            TP.id = #{id} AND TP.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TP.project_info_id,
+            TP.report_status,
+            TP.month_status,
+            TP.season_status,
+            TP.year_status,
+            TP.gmt_create_time,
+            TP.gmt_update_time,
+            TP.id
+        FROM
+            t_plan TP
+        WHERE
+            TP.deleted = 0
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProgressPlanMapper.xml b/business/src/main/resources/mapper/ProgressPlanMapper.xml
new file mode 100644
index 0000000..4d1c63d
--- /dev/null
+++ b/business/src/main/resources/mapper/ProgressPlanMapper.xml
@@ -0,0 +1,55 @@
+<?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.ProgressPlanMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProgressPlanVO">
+        <result column="project_info_id" property="projectInfoId" />
+        <result column="report_status" property="reportStatus" />
+        <result column="month_status" property="monthStatus" />
+        <result column="season_status" property="seasonStatus" />
+        <result column="year_status" property="yearStatus" />
+        <result column="gmt_create_time" property="gmtCreateTime" />
+        <result column="gmt_update_time" property="gmtUpdateTime" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TPP.project_info_id,
+            TPP.report_status,
+            TPP.month_status,
+            TPP.season_status,
+            TPP.year_status,
+            TPP.gmt_create_time,
+            TPP.gmt_update_time,
+            TPP.id
+        FROM
+            t_progress_plan TPP
+        WHERE
+            TPP.id = #{id} AND TPP.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TPP.project_info_id,
+            TPP.report_status,
+            TPP.month_status,
+            TPP.season_status,
+            TPP.year_status,
+            TPP.gmt_create_time,
+            TPP.gmt_update_time,
+            TPP.id
+        FROM
+            t_progress_plan TPP
+        WHERE
+            TPP.deleted = 0
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml b/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml
new file mode 100644
index 0000000..2e4cb87
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectPlanExamineRecordMapper.xml
@@ -0,0 +1,70 @@
+<?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.ProjectPlanExamineRecordMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectPlanExamineRecordVO">
+        <result column="project_plan_record_id" property="projectPlanRecordId" />
+        <result column="department_user_id" property="departmentUserId" />
+        <result column="manager_user_id" property="managerUserId" />
+        <result column="department_examine" property="departmentExamine" />
+        <result column="department_approval" property="departmentApproval" />
+        <result column="department_approval_reply" property="departmentApprovalReply" />
+        <result column="manage_examine" property="manageExamine" />
+        <result column="manage_approval" property="manageApproval" />
+        <result column="manage_approval_reply" property="manageApprovalReply" />
+        <result column="event_type" property="eventType" />
+        <result column="delay_start_time" property="delayStartTime" />
+        <result column="delay_end_time" property="delayEndTime" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TPPER.project_plan_record_id,
+            TPPER.department_user_id,
+            TPPER.manager_user_id,
+            TPPER.department_examine,
+            TPPER.department_approval,
+            TPPER.department_approval_reply,
+            TPPER.manage_examine,
+            TPPER.manage_approval,
+            TPPER.manage_approval_reply,
+            TPPER.event_type,
+            TPPER.delay_start_time,
+            TPPER.delay_end_time,
+            TPPER.id
+        FROM
+            t_project_plan_examine_record TPPER
+        WHERE
+            TPPER.id = #{id} AND TPPER.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TPPER.project_plan_record_id,
+            TPPER.department_user_id,
+            TPPER.manager_user_id,
+            TPPER.department_examine,
+            TPPER.department_approval,
+            TPPER.department_approval_reply,
+            TPPER.manage_examine,
+            TPPER.manage_approval,
+            TPPER.manage_approval_reply,
+            TPPER.event_type,
+            TPPER.delay_start_time,
+            TPPER.delay_end_time,
+            TPPER.id
+        FROM
+            t_project_plan_examine_record TPPER
+        WHERE
+            TPPER.deleted = 0
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml b/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml
new file mode 100644
index 0000000..2ea53cc
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectPlanInfoMapper.xml
@@ -0,0 +1,49 @@
+<?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.ProjectPlanInfoMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectPlanInfoVO">
+        <result column="project_plan_record_id" property="projectPlanRecordId" />
+        <result column="title" property="title" />
+        <result column="progress_status" property="progressStatus" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TPPI.project_plan_record_id,
+            TPPI.title,
+            TPPI.progress_status,
+            TPPI.start_time,
+            TPPI.end_time,
+            TPPI.id
+        FROM
+            t_project_plan_info TPPI
+        WHERE
+            TPPI.id = #{id} AND TPPI.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TPPI.project_plan_record_id,
+            TPPI.title,
+            TPPI.progress_status,
+            TPPI.start_time,
+            TPPI.end_time,
+            TPPI.id
+        FROM
+            t_project_plan_info TPPI
+        WHERE
+            TPPI.deleted = 0
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml b/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml
new file mode 100644
index 0000000..8a6d576
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectPlanProgressReportMapper.xml
@@ -0,0 +1,49 @@
+<?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.ProjectPlanProgressReportMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectPlanProgressReportVO">
+        <result column="project_plan_info_id" property="projectPlanInfoId" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="progress_status" property="progressStatus" />
+        <result column="actual_invest" property="actualInvest" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TPPPR.project_plan_info_id,
+            TPPPR.start_time,
+            TPPPR.end_time,
+            TPPPR.progress_status,
+            TPPPR.actual_invest,
+            TPPPR.id
+        FROM
+            t_project_plan_progress_report TPPPR
+        WHERE
+            TPPPR.id = #{id} AND TPPPR.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TPPPR.project_plan_info_id,
+            TPPPR.start_time,
+            TPPPR.end_time,
+            TPPPR.progress_status,
+            TPPPR.actual_invest,
+            TPPPR.id
+        FROM
+            t_project_plan_progress_report TPPPR
+        WHERE
+            TPPPR.deleted = 0
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectPlanRecordMapper.xml b/business/src/main/resources/mapper/ProjectPlanRecordMapper.xml
new file mode 100644
index 0000000..e6e6c5a
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectPlanRecordMapper.xml
@@ -0,0 +1,58 @@
+<?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.ProjectPlanRecordMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectPlanRecordVO">
+        <result column="project_info_id" property="projectInfoId" />
+        <result column="plan_id" property="planId" />
+        <result column="engineering_info_id" property="engineeringInfoId" />
+        <result column="plan_time" property="planTime" />
+        <result column="plan_time_flag" property="planTimeFlag" />
+        <result column="create_time" property="createTime" />
+        <result column="report_status" property="reportStatus" />
+        <result column="actual_invest" property="actualInvest" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TPPR.project_info_id,
+            TPPR.plan_id,
+            TPPR.engineering_info_id,
+            TPPR.plan_time,
+            TPPR.plan_time_flag,
+            TPPR.create_time,
+            TPPR.report_status,
+            TPPR.actual_invest,
+            TPPR.id
+        FROM
+            t_project_plan_record TPPR
+        WHERE
+            TPPR.id = #{id} AND TPPR.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TPPR.project_info_id,
+            TPPR.plan_id,
+            TPPR.engineering_info_id,
+            TPPR.plan_time,
+            TPPR.plan_time_flag,
+            TPPR.create_time,
+            TPPR.report_status,
+            TPPR.actual_invest,
+            TPPR.id
+        FROM
+            t_project_plan_record TPPR
+        WHERE
+            TPPR.deleted = 0
+    </select>
+
+</mapper>
diff --git a/business/src/main/resources/mapper/ProjectUnitRegistrationInfoMapper.xml b/business/src/main/resources/mapper/ProjectUnitRegistrationInfoMapper.xml
new file mode 100644
index 0000000..e72c4c9
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectUnitRegistrationInfoMapper.xml
@@ -0,0 +1,106 @@
+<?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.ProjectUnitRegistrationInfoMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectUnitRegistrationInfoVO">
+        <result column="project_id" property="projectId" />
+        <result column="total_investment" property="totalInvestment" />
+        <result column="project_unit" property="projectUnit" />
+        <result column="project_unit_type" property="projectUnitType" />
+        <result column="registration_type" property="registrationType" />
+        <result column="holding_situation" property="holdingSituation" />
+        <result column="certificate_type" property="certificateType" />
+        <result column="certificate_number" property="certificateNumber" />
+        <result column="registered_address" property="registeredAddress" />
+        <result column="registered_capital" property="registeredCapital" />
+        <result column="legal_representative" property="legalRepresentative" />
+        <result column="fixed_phone" property="fixedPhone" />
+        <result column="legal_person_idcard" property="legalPersonIdcard" />
+        <result column="project_contact_person" property="projectContactPerson" />
+        <result column="phone" property="phone" />
+        <result column="contact_idcard" property="contactIdcard" />
+        <result column="wechat" property="wechat" />
+        <result column="contact_address" property="contactAddress" />
+        <result column="post_code" property="postCode" />
+        <result column="email" property="email" />
+        <result column="create_by" property="createBy" />
+        <result column="update_by" property="updateBy" />
+        <result column="gmt_create_time" property="gmtCreateTime" />
+        <result column="gmt_update_time" property="gmtUpdateTime" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TPURI.project_id,
+            TPURI.total_investment,
+            TPURI.project_unit,
+            TPURI.project_unit_type,
+            TPURI.registration_type,
+            TPURI.holding_situation,
+            TPURI.certificate_type,
+            TPURI.certificate_number,
+            TPURI.registered_address,
+            TPURI.registered_capital,
+            TPURI.legal_representative,
+            TPURI.fixed_phone,
+            TPURI.legal_person_idcard,
+            TPURI.project_contact_person,
+            TPURI.phone,
+            TPURI.contact_idcard,
+            TPURI.wechat,
+            TPURI.contact_address,
+            TPURI.post_code,
+            TPURI.email,
+            TPURI.create_by,
+            TPURI.update_by,
+            TPURI.gmt_create_time,
+            TPURI.gmt_update_time,
+            TPURI.id
+        FROM
+            t_project_unit_registration_info TPURI
+        WHERE
+            TPURI.id = #{id} AND TPURI.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TPURI.project_id,
+            TPURI.total_investment,
+            TPURI.project_unit,
+            TPURI.project_unit_type,
+            TPURI.registration_type,
+            TPURI.holding_situation,
+            TPURI.certificate_type,
+            TPURI.certificate_number,
+            TPURI.registered_address,
+            TPURI.registered_capital,
+            TPURI.legal_representative,
+            TPURI.fixed_phone,
+            TPURI.legal_person_idcard,
+            TPURI.project_contact_person,
+            TPURI.phone,
+            TPURI.contact_idcard,
+            TPURI.wechat,
+            TPURI.contact_address,
+            TPURI.post_code,
+            TPURI.email,
+            TPURI.create_by,
+            TPURI.update_by,
+            TPURI.gmt_create_time,
+            TPURI.gmt_update_time,
+            TPURI.id
+        FROM
+            t_project_unit_registration_info TPURI
+        WHERE
+            TPURI.deleted = 0
+    </select>
+
+</mapper>

--
Gitblit v1.8.0