From e1060984241e92148fbc51df656f9705ec714c5e Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 22 十一月 2024 14:24:50 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 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 
 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 +
 63 files changed, 4,144 insertions(+), 0 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/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