From b0ff4a7666c90b18ce23e2c082e6c95c86289bf4 Mon Sep 17 00:00:00 2001
From: wyw <13885678+wyw0828@user.noreply.gitee.com>
Date: Thu, 25 Jul 2024 17:06:00 +0800
Subject: [PATCH 01/10] =?UTF-8?q?[fix]=20=E6=9B=B4=E6=96=B0ui?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../contracthistory/ContractHistoryForm.vue | 4 ++--
.../src/views/cms/contracthistory/index.vue | 18 ------------------
.../cms-ext/extcontract/ExtContractForm.vue | 4 ++--
.../src/views/cms-ext/extcontract/index.vue | 18 ------------------
.../src/views/cms/contract/ContractForm.vue | 2 +-
.../src/views/cms/contract/index.vue | 9 ---------
6 files changed, 5 insertions(+), 50 deletions(-)
diff --git a/yudao-ui/yudao-ui-admin-vue3-ContractHistory/src/views/cms/contracthistory/ContractHistoryForm.vue b/yudao-ui/yudao-ui-admin-vue3-ContractHistory/src/views/cms/contracthistory/ContractHistoryForm.vue
index 990199991..0ac5bcce9 100644
--- a/yudao-ui/yudao-ui-admin-vue3-ContractHistory/src/views/cms/contracthistory/ContractHistoryForm.vue
+++ b/yudao-ui/yudao-ui-admin-vue3-ContractHistory/src/views/cms/contracthistory/ContractHistoryForm.vue
@@ -77,7 +77,7 @@
-
+
@@ -110,7 +110,7 @@
-
+
diff --git a/yudao-ui/yudao-ui-admin-vue3-ContractHistory/src/views/cms/contracthistory/index.vue b/yudao-ui/yudao-ui-admin-vue3-ContractHistory/src/views/cms/contracthistory/index.vue
index 607c9987c..d72a12619 100644
--- a/yudao-ui/yudao-ui-admin-vue3-ContractHistory/src/views/cms/contracthistory/index.vue
+++ b/yudao-ui/yudao-ui-admin-vue3-ContractHistory/src/views/cms/contracthistory/index.vue
@@ -128,15 +128,6 @@
class="!w-240px"
/>
-
-
-
-
-
-
-
+
@@ -135,7 +135,7 @@
-
+
diff --git a/yudao-ui/yudao-ui-admin-vue3-ExtContract/src/views/cms-ext/extcontract/index.vue b/yudao-ui/yudao-ui-admin-vue3-ExtContract/src/views/cms-ext/extcontract/index.vue
index 16737fea9..a04b76dd7 100644
--- a/yudao-ui/yudao-ui-admin-vue3-ExtContract/src/views/cms-ext/extcontract/index.vue
+++ b/yudao-ui/yudao-ui-admin-vue3-ExtContract/src/views/cms-ext/extcontract/index.vue
@@ -171,15 +171,6 @@
class="!w-240px"
/>
-
-
-
-
-
-
-
+
diff --git a/yudao-ui/yudao-ui-admin-vue3-contract/src/views/cms/contract/index.vue b/yudao-ui/yudao-ui-admin-vue3-contract/src/views/cms/contract/index.vue
index df3f8a0e0..01ccd5b0e 100644
--- a/yudao-ui/yudao-ui-admin-vue3-contract/src/views/cms/contract/index.vue
+++ b/yudao-ui/yudao-ui-admin-vue3-contract/src/views/cms/contract/index.vue
@@ -119,15 +119,6 @@
class="!w-240px"
/>
-
-
-
Date: Fri, 26 Jul 2024 09:46:18 +0800
Subject: [PATCH 02/10] =?UTF-8?q?[feat]=E6=B7=BB=E5=8A=A0=E5=8D=9A?=
=?UTF-8?q?=E7=88=B1=E9=94=99=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 1 +
.../module/cms/enums/ErrorCodeConstants.java | 4 +-
.../outscontract/OutsContractController.java | 95 +++++++++++++++++++
.../vo/OutsContractPageReqVO.java | 54 +++++++++++
.../outscontract/vo/OutsContractRespVO.java | 68 +++++++++++++
.../vo/OutsContractSaveReqVO.java | 49 ++++++++++
.../admin/project/ProjectController.java | 1 +
.../resources/mapper/budget/BudgetMapper.xml | 12 +++
.../budgethistory/BudgetHistoryMapper.xml | 12 +++
.../src/main/resources/application-local.yaml | 6 +-
10 files changed, 298 insertions(+), 4 deletions(-)
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/OutsContractController.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractPageReqVO.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractRespVO.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractSaveReqVO.java
create mode 100644 yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/budget/BudgetMapper.xml
create mode 100644 yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/budgethistory/BudgetHistoryMapper.xml
diff --git a/.gitignore b/.gitignore
index 09ec36308..e3c9eced6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,4 +50,5 @@ rebel.xml
application-my.yaml
+application-local.yaml
/yudao-ui-app/unpackage/
diff --git a/yudao-module-cms/yudao-module-cms-api/src/main/java/cn/iocoder/yudao/module/cms/enums/ErrorCodeConstants.java b/yudao-module-cms/yudao-module-cms-api/src/main/java/cn/iocoder/yudao/module/cms/enums/ErrorCodeConstants.java
index a1760b150..72353662e 100644
--- a/yudao-module-cms/yudao-module-cms-api/src/main/java/cn/iocoder/yudao/module/cms/enums/ErrorCodeConstants.java
+++ b/yudao-module-cms/yudao-module-cms-api/src/main/java/cn/iocoder/yudao/module/cms/enums/ErrorCodeConstants.java
@@ -13,7 +13,9 @@ public interface ErrorCodeConstants {
ErrorCode EXT_CONTRACT_NOT_EXISTS = new ErrorCode(2_021_000_000, "外部合同不存在");
+ ErrorCode CONTRACT_OUTS_NOT_EXISTS = new ErrorCode(2_022_000_000, "外部合同不存在");
+ ErrorCode OUTS_CONTRACT_NOT_EXISTS = new ErrorCode(2_022_000_000, "外部合同不存在");
-
+ ErrorCode OUTS_CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(2_022_000_000, "外部合同不存在");
}
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/OutsContractController.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/OutsContractController.java
new file mode 100644
index 000000000..1bf70f01a
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/OutsContractController.java
@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.cms.controller.admin.outscontract;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.*;
+import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO;
+import cn.iocoder.yudao.module.cms.service.outscontract.OutsContractService;
+
+@Tag(name = "管理后台 - 外包合同")
+@RestController
+@RequestMapping("/cms/outs-contract")
+@Validated
+public class OutsContractController {
+
+ @Resource
+ private OutsContractService outsContractService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建外包合同")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract:create')")
+ public CommonResult createOutsContract(@Valid @RequestBody OutsContractSaveReqVO createReqVO) {
+ return success(outsContractService.createOutsContract(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新外包合同")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract:update')")
+ public CommonResult updateOutsContract(@Valid @RequestBody OutsContractSaveReqVO updateReqVO) {
+ outsContractService.updateOutsContract(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除外包合同")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract:delete')")
+ public CommonResult deleteOutsContract(@RequestParam("id") Long id) {
+ outsContractService.deleteOutsContract(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得外包合同")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract:query')")
+ public CommonResult getOutsContract(@RequestParam("id") Long id) {
+ OutsContractDO outsContract = outsContractService.getOutsContract(id);
+ return success(BeanUtils.toBean(outsContract, OutsContractRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得外包合同分页")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract:query')")
+ public CommonResult> getOutsContractPage(@Valid OutsContractPageReqVO pageReqVO) {
+ PageResult pageResult = outsContractService.getOutsContractPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, OutsContractRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出外包合同 Excel")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportOutsContractExcel(@Valid OutsContractPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = outsContractService.getOutsContractPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "外包合同.xls", "数据", OutsContractRespVO.class,
+ BeanUtils.toBean(list, OutsContractRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractPageReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractPageReqVO.java
new file mode 100644
index 000000000..06951ed4f
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractPageReqVO.java
@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 外包合同分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class OutsContractPageReqVO extends PageParam {
+
+ @Schema(description = "项目id", example = "27415")
+ private Long projectId;
+
+ @Schema(description = "合同名称", example = "张三")
+ private String name;
+
+ @Schema(description = "主合同id", example = "19816")
+ private Long contractId;
+
+ @Schema(description = "类型", example = "2")
+ private String countType;
+
+ @Schema(description = "合同金额")
+ private BigDecimal amount;
+
+ @Schema(description = "编号")
+ private String code;
+
+ @Schema(description = "专业")
+ private String major;
+
+ @Schema(description = "签订时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] signingTime;
+
+ @Schema(description = "结算数")
+ private BigDecimal settlementAmount;
+
+ @Schema(description = "合同文件url", example = "https://www.iocoder.cn")
+ private String contractFileUrl;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractRespVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractRespVO.java
new file mode 100644
index 000000000..031c5cec9
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractRespVO.java
@@ -0,0 +1,68 @@
+package cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+
+@Schema(description = "管理后台 - 外包合同 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class OutsContractRespVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2034")
+ @ExcelProperty("主键")
+ private Long id;
+
+ @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27415")
+ @ExcelProperty("项目id")
+ private Long projectId;
+
+ @Schema(description = "合同名称", example = "张三")
+ @ExcelProperty("合同名称")
+ private String name;
+
+ @Schema(description = "主合同id", example = "19816")
+ @ExcelProperty("主合同id")
+ private Long contractId;
+
+ @Schema(description = "类型", example = "2")
+ @ExcelProperty(value = "类型", converter = DictConvert.class)
+ @DictFormat("contract_billing_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+ private String countType;
+
+ @Schema(description = "合同金额")
+ @ExcelProperty("合同金额")
+ private BigDecimal amount;
+
+ @Schema(description = "编号")
+ @ExcelProperty("编号")
+ private String code;
+
+ @Schema(description = "专业")
+ @ExcelProperty(value = "专业", converter = DictConvert.class)
+ @DictFormat("major") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+ private String major;
+
+ @Schema(description = "签订时间")
+ @ExcelProperty("签订时间")
+ private LocalDateTime signingTime;
+
+ @Schema(description = "结算数")
+ @ExcelProperty("结算数")
+ private BigDecimal settlementAmount;
+
+ @Schema(description = "合同文件url", example = "https://www.iocoder.cn")
+ @ExcelProperty("合同文件url")
+ private String contractFileUrl;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractSaveReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractSaveReqVO.java
new file mode 100644
index 000000000..c8642c911
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractSaveReqVO.java
@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 外包合同新增/修改 Request VO")
+@Data
+public class OutsContractSaveReqVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2034")
+ private Long id;
+
+ @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27415")
+ @NotNull(message = "项目id不能为空")
+ private Long projectId;
+
+ @Schema(description = "合同名称", example = "张三")
+ private String name;
+
+ @Schema(description = "主合同id", example = "19816")
+ private Long contractId;
+
+ @Schema(description = "类型", example = "2")
+ private String countType;
+
+ @Schema(description = "合同金额")
+ private BigDecimal amount;
+
+ @Schema(description = "编号")
+ private String code;
+
+ @Schema(description = "专业")
+ private String major;
+
+ @Schema(description = "签订时间")
+ private LocalDateTime signingTime;
+
+ @Schema(description = "结算数")
+ private BigDecimal settlementAmount;
+
+ @Schema(description = "合同文件url", example = "https://www.iocoder.cn")
+ private String contractFileUrl;
+
+}
\ No newline at end of file
diff --git a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/project/ProjectController.java b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/project/ProjectController.java
index 4516fb40b..2dc71f791 100644
--- a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/project/ProjectController.java
+++ b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/project/ProjectController.java
@@ -66,6 +66,7 @@ public class ProjectController {
return success(true);
}
+ // 点击编辑页面后显示的内容
@GetMapping("/get")
@Operation(summary = "获得项目基本信息")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
diff --git a/yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/budget/BudgetMapper.xml b/yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/budget/BudgetMapper.xml
new file mode 100644
index 000000000..88629a3bb
--- /dev/null
+++ b/yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/budget/BudgetMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/budgethistory/BudgetHistoryMapper.xml b/yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/budgethistory/BudgetHistoryMapper.xml
new file mode 100644
index 000000000..e0c46a655
--- /dev/null
+++ b/yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/budgethistory/BudgetHistoryMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml
index aebad3541..63f281490 100644
--- a/yudao-server/src/main/resources/application-local.yaml
+++ b/yudao-server/src/main/resources/application-local.yaml
@@ -45,7 +45,7 @@ spring:
primary: master
datasource:
master:
- url: jdbc:mysql://127.0.0.1:3307/hhyykk?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
+ url: jdbc:mysql://127.0.0.1:3306/hhyykk?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
# url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例
# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
@@ -54,7 +54,7 @@ spring:
# url: jdbc:kingbase8://127.0.0.1:54321/test # 人大金仓 KingbaseES 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/postgres # OpenGauss 连接的示例
username: root
- password: root
+ password: we9085@z
# username: sa # SQL Server 连接的示例
# password: Yudao@2024 # SQL Server 连接的示例
# username: SYSDBA # DM 连接的示例
@@ -63,7 +63,7 @@ spring:
# password: Yudao@2024 # OpenGauss 连接的示例
slave: # 模拟从库,可根据自己需要修改
lazy: true # 开启懒加载,保证启动速度
- url: jdbc:mysql://127.0.0.1:3307/db1?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
+ url: jdbc:mysql://127.0.0.1:3306/db1?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root
password: root
From 504f7f7615ad20f23e96c0bfd5a8501019ca6112 Mon Sep 17 00:00:00 2001
From: Qiancheng Zhao <15226586396@163.com>
Date: Tue, 30 Jul 2024 09:30:17 +0800
Subject: [PATCH 03/10] =?UTF-8?q?[feat]=E5=90=88=E5=B9=B6=E5=88=86?=
=?UTF-8?q?=E6=94=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../module/cms/enums/ErrorCodeConstants.java | 13 +-
.../outscontract/OutsContractController.java | 190 +++++++++---------
.../OutsContractHistoryController.java | 95 +++++++++
.../vo/OutsContractHistoryPageReqVO.java | 66 ++++++
.../vo/OutsContractHistoryRespVO.java | 84 ++++++++
.../vo/OutsContractHistorySaveReqVO.java | 61 ++++++
.../outscontract/OutsContractDO.java | 78 +++++++
.../OutsContractHistoryDO.java | 94 +++++++++
.../outscontract/OutsContractMapper.java | 36 ++++
.../OutsContractHistoryMapper.java | 40 ++++
.../service/contract/ContractServiceImpl.java | 2 +-
.../extcontract/ExtContractServiceImpl.java | 2 +-
.../outscontract/OutsContractService.java | 55 +++++
.../outscontract/OutsContractServiceImpl.java | 74 +++++++
.../OutsContractHistoryService.java | 55 +++++
.../OutsContractHistoryServiceImpl.java | 74 +++++++
.../module/pms/api/budegt/BudgetApi.java | 16 ++
.../api/budegt/dto/BudegtDetailRespDTO.java | 49 +++++
.../pms/api/budegt/dto/BudegtResDTO.java | 50 +++++
.../pms/api/{ => project}/ProjectApi.java | 2 +-
.../module/pms/api/project/BudgetImpl.java | 32 +++
.../module/pms/api/project/ProjectImpl.java | 1 -
22 files changed, 1065 insertions(+), 104 deletions(-)
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/OutsContractHistoryController.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistoryPageReqVO.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistoryRespVO.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistorySaveReqVO.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontract/OutsContractDO.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontracthistory/OutsContractHistoryDO.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/outscontract/OutsContractMapper.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/outscontracthistory/OutsContractHistoryMapper.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractService.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractServiceImpl.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontracthistory/OutsContractHistoryService.java
create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontracthistory/OutsContractHistoryServiceImpl.java
create mode 100644 yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/BudgetApi.java
create mode 100644 yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/dto/BudegtDetailRespDTO.java
create mode 100644 yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/dto/BudegtResDTO.java
rename yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/{ => project}/ProjectApi.java (88%)
create mode 100644 yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/api/project/BudgetImpl.java
diff --git a/yudao-module-cms/yudao-module-cms-api/src/main/java/cn/iocoder/yudao/module/cms/enums/ErrorCodeConstants.java b/yudao-module-cms/yudao-module-cms-api/src/main/java/cn/iocoder/yudao/module/cms/enums/ErrorCodeConstants.java
index 72353662e..22e07ce51 100644
--- a/yudao-module-cms/yudao-module-cms-api/src/main/java/cn/iocoder/yudao/module/cms/enums/ErrorCodeConstants.java
+++ b/yudao-module-cms/yudao-module-cms-api/src/main/java/cn/iocoder/yudao/module/cms/enums/ErrorCodeConstants.java
@@ -8,14 +8,17 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
* @date 2024/7/3
*/
public interface ErrorCodeConstants {
-
+ ErrorCode CUSTOMER_COMPANY_NOT_EXISTS = new ErrorCode(2_019_000_000, "客户信息表不存在");
ErrorCode CONTRACT_NOT_EXISTS = new ErrorCode(2_020_000_000, "合同不存在");
+ ErrorCode CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(2_021_000_000, "历史合同不存在");
- ErrorCode EXT_CONTRACT_NOT_EXISTS = new ErrorCode(2_021_000_000, "外部合同不存在");
+ ErrorCode EXT_CONTRACT_NOT_EXISTS = new ErrorCode(2_022_000_000, "外部合同不存在");
- ErrorCode CONTRACT_OUTS_NOT_EXISTS = new ErrorCode(2_022_000_000, "外部合同不存在");
+ ErrorCode CONTRACT_OUTS_NOT_EXISTS = new ErrorCode(2_023_000_000, "外部合同不存在");
+
+ ErrorCode OUTS_CONTRACT_NOT_EXISTS = new ErrorCode(2_024_000_000, "外包合同不存在");
+
+ ErrorCode OUTS_CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(2_025_000_000, "外包合同不存在");
- ErrorCode OUTS_CONTRACT_NOT_EXISTS = new ErrorCode(2_022_000_000, "外部合同不存在");
- ErrorCode OUTS_CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(2_022_000_000, "外部合同不存在");
}
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/OutsContractController.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/OutsContractController.java
index 1bf70f01a..d94753557 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/OutsContractController.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/OutsContractController.java
@@ -1,95 +1,95 @@
-package cn.iocoder.yudao.module.cms.controller.admin.outscontract;
-
-import org.springframework.web.bind.annotation.*;
-import jakarta.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import jakarta.validation.constraints.*;
-import jakarta.validation.*;
-import jakarta.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-
-import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
-import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
-
-import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.*;
-import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO;
-import cn.iocoder.yudao.module.cms.service.outscontract.OutsContractService;
-
-@Tag(name = "管理后台 - 外包合同")
-@RestController
-@RequestMapping("/cms/outs-contract")
-@Validated
-public class OutsContractController {
-
- @Resource
- private OutsContractService outsContractService;
-
- @PostMapping("/create")
- @Operation(summary = "创建外包合同")
- @PreAuthorize("@ss.hasPermission('cms:outs-contract:create')")
- public CommonResult createOutsContract(@Valid @RequestBody OutsContractSaveReqVO createReqVO) {
- return success(outsContractService.createOutsContract(createReqVO));
- }
-
- @PutMapping("/update")
- @Operation(summary = "更新外包合同")
- @PreAuthorize("@ss.hasPermission('cms:outs-contract:update')")
- public CommonResult updateOutsContract(@Valid @RequestBody OutsContractSaveReqVO updateReqVO) {
- outsContractService.updateOutsContract(updateReqVO);
- return success(true);
- }
-
- @DeleteMapping("/delete")
- @Operation(summary = "删除外包合同")
- @Parameter(name = "id", description = "编号", required = true)
- @PreAuthorize("@ss.hasPermission('cms:outs-contract:delete')")
- public CommonResult deleteOutsContract(@RequestParam("id") Long id) {
- outsContractService.deleteOutsContract(id);
- return success(true);
- }
-
- @GetMapping("/get")
- @Operation(summary = "获得外包合同")
- @Parameter(name = "id", description = "编号", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('cms:outs-contract:query')")
- public CommonResult getOutsContract(@RequestParam("id") Long id) {
- OutsContractDO outsContract = outsContractService.getOutsContract(id);
- return success(BeanUtils.toBean(outsContract, OutsContractRespVO.class));
- }
-
- @GetMapping("/page")
- @Operation(summary = "获得外包合同分页")
- @PreAuthorize("@ss.hasPermission('cms:outs-contract:query')")
- public CommonResult> getOutsContractPage(@Valid OutsContractPageReqVO pageReqVO) {
- PageResult pageResult = outsContractService.getOutsContractPage(pageReqVO);
- return success(BeanUtils.toBean(pageResult, OutsContractRespVO.class));
- }
-
- @GetMapping("/export-excel")
- @Operation(summary = "导出外包合同 Excel")
- @PreAuthorize("@ss.hasPermission('cms:outs-contract:export')")
- @ApiAccessLog(operateType = EXPORT)
- public void exportOutsContractExcel(@Valid OutsContractPageReqVO pageReqVO,
- HttpServletResponse response) throws IOException {
- pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
- List list = outsContractService.getOutsContractPage(pageReqVO).getList();
- // 导出 Excel
- ExcelUtils.write(response, "外包合同.xls", "数据", OutsContractRespVO.class,
- BeanUtils.toBean(list, OutsContractRespVO.class));
- }
-
-}
\ No newline at end of file
+//package cn.iocoder.yudao.module.cms.controller.admin.outscontract;
+//
+//import org.springframework.web.bind.annotation.*;
+//import jakarta.annotation.Resource;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.security.access.prepost.PreAuthorize;
+//import io.swagger.v3.oas.annotations.tags.Tag;
+//import io.swagger.v3.oas.annotations.Parameter;
+//import io.swagger.v3.oas.annotations.Operation;
+//
+//import jakarta.validation.constraints.*;
+//import jakarta.validation.*;
+//import jakarta.servlet.http.*;
+//import java.util.*;
+//import java.io.IOException;
+//
+//import cn.iocoder.yudao.framework.common.pojo.PageParam;
+//import cn.iocoder.yudao.framework.common.pojo.PageResult;
+//import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+//import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+//import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+//
+//import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+//
+//import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+//import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+//
+//import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.*;
+//import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO;
+//import cn.iocoder.yudao.module.cms.service.outscontract.OutsContractService;
+//
+//@Tag(name = "管理后台 - 外包合同")
+//@RestController
+//@RequestMapping("/cms/outs-contract")
+//@Validated
+//public class OutsContractController {
+//
+// @Resource
+// private OutsContractService outsContractService;
+//
+// @PostMapping("/create")
+// @Operation(summary = "创建外包合同")
+// @PreAuthorize("@ss.hasPermission('cms:outs-contract:create')")
+// public CommonResult createOutsContract(@Valid @RequestBody OutsContractSaveReqVO createReqVO) {
+// return success(outsContractService.createOutsContract(createReqVO));
+// }
+//
+// @PutMapping("/update")
+// @Operation(summary = "更新外包合同")
+// @PreAuthorize("@ss.hasPermission('cms:outs-contract:update')")
+// public CommonResult updateOutsContract(@Valid @RequestBody OutsContractSaveReqVO updateReqVO) {
+// outsContractService.updateOutsContract(updateReqVO);
+// return success(true);
+// }
+//
+// @DeleteMapping("/delete")
+// @Operation(summary = "删除外包合同")
+// @Parameter(name = "id", description = "编号", required = true)
+// @PreAuthorize("@ss.hasPermission('cms:outs-contract:delete')")
+// public CommonResult deleteOutsContract(@RequestParam("id") Long id) {
+// outsContractService.deleteOutsContract(id);
+// return success(true);
+// }
+//
+// @GetMapping("/get")
+// @Operation(summary = "获得外包合同")
+// @Parameter(name = "id", description = "编号", required = true, example = "1024")
+// @PreAuthorize("@ss.hasPermission('cms:outs-contract:query')")
+// public CommonResult getOutsContract(@RequestParam("id") Long id) {
+// OutsContractDO outsContract = outsContractService.getOutsContract(id);
+// return success(BeanUtils.toBean(outsContract, OutsContractRespVO.class));
+// }
+//
+// @GetMapping("/page")
+// @Operation(summary = "获得外包合同分页")
+// @PreAuthorize("@ss.hasPermission('cms:outs-contract:query')")
+// public CommonResult> getOutsContractPage(@Valid OutsContractPageReqVO pageReqVO) {
+// PageResult pageResult = outsContractService.getOutsContractPage(pageReqVO);
+// return success(BeanUtils.toBean(pageResult, OutsContractRespVO.class));
+// }
+//
+// @GetMapping("/export-excel")
+// @Operation(summary = "导出外包合同 Excel")
+// @PreAuthorize("@ss.hasPermission('cms:outs-contract:export')")
+// @ApiAccessLog(operateType = EXPORT)
+// public void exportOutsContractExcel(@Valid OutsContractPageReqVO pageReqVO,
+// HttpServletResponse response) throws IOException {
+// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+// List list = outsContractService.getOutsContractPage(pageReqVO).getList();
+// // 导出 Excel
+// ExcelUtils.write(response, "外包合同.xls", "数据", OutsContractRespVO.class,
+// BeanUtils.toBean(list, OutsContractRespVO.class));
+// }
+//
+//}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/OutsContractHistoryController.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/OutsContractHistoryController.java
new file mode 100644
index 000000000..ba7b70a50
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/OutsContractHistoryController.java
@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.vo.*;
+import cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory.OutsContractHistoryDO;
+import cn.iocoder.yudao.module.cms.service.outscontracthistory.OutsContractHistoryService;
+
+@Tag(name = "管理后台 - 外包合同历史")
+@RestController
+@RequestMapping("/cms/outs-contract-history")
+@Validated
+public class OutsContractHistoryController {
+
+ @Resource
+ private OutsContractHistoryService outsContractHistoryService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建外包合同历史")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract-history:create')")
+ public CommonResult createOutsContractHistory(@Valid @RequestBody OutsContractHistorySaveReqVO createReqVO) {
+ return success(outsContractHistoryService.createOutsContractHistory(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新外包合同历史")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract-history:update')")
+ public CommonResult updateOutsContractHistory(@Valid @RequestBody OutsContractHistorySaveReqVO updateReqVO) {
+ outsContractHistoryService.updateOutsContractHistory(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除外包合同历史")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract-history:delete')")
+ public CommonResult deleteOutsContractHistory(@RequestParam("id") Long id) {
+ outsContractHistoryService.deleteOutsContractHistory(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得外包合同历史")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract-history:query')")
+ public CommonResult getOutsContractHistory(@RequestParam("id") Long id) {
+ OutsContractHistoryDO outsContractHistory = outsContractHistoryService.getOutsContractHistory(id);
+ return success(BeanUtils.toBean(outsContractHistory, OutsContractHistoryRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得外包合同历史分页")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract-history:query')")
+ public CommonResult> getOutsContractHistoryPage(@Valid OutsContractHistoryPageReqVO pageReqVO) {
+ PageResult pageResult = outsContractHistoryService.getOutsContractHistoryPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, OutsContractHistoryRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出外包合同历史 Excel")
+ @PreAuthorize("@ss.hasPermission('cms:outs-contract-history:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportOutsContractHistoryExcel(@Valid OutsContractHistoryPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = outsContractHistoryService.getOutsContractHistoryPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "外包合同历史.xls", "数据", OutsContractHistoryRespVO.class,
+ BeanUtils.toBean(list, OutsContractHistoryRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistoryPageReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistoryPageReqVO.java
new file mode 100644
index 000000000..723d65fc5
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistoryPageReqVO.java
@@ -0,0 +1,66 @@
+package cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 外包合同历史分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class OutsContractHistoryPageReqVO extends PageParam {
+
+ @Schema(description = "项目id", example = "31803")
+ private Long projectId;
+
+ @Schema(description = "合同名称", example = "芋艿")
+ private String name;
+
+ @Schema(description = "主合同id", example = "19949")
+ private Long contractId;
+
+ @Schema(description = "类型", example = "1")
+ private String countType;
+
+ @Schema(description = "合同金额")
+ private BigDecimal amount;
+
+ @Schema(description = "编号")
+ private String code;
+
+ @Schema(description = "专业")
+ private String major;
+
+ @Schema(description = "流程实体id", example = "32397")
+ private String processInstanceId;
+
+ @Schema(description = "签订时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] signingTime;
+
+ @Schema(description = "结算数")
+ private BigDecimal settlementAmount;
+
+ @Schema(description = "合同文件url", example = "https://www.iocoder.cn")
+ private String contractFileUrl;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "流程状态", example = "2")
+ private String processStatus;
+
+ @Schema(description = "外包合同id", example = "24736")
+ private Long outsContractId;
+
+ @Schema(description = "版本")
+ private String version;
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistoryRespVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistoryRespVO.java
new file mode 100644
index 000000000..9fe006ec2
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistoryRespVO.java
@@ -0,0 +1,84 @@
+package cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
+
+@Schema(description = "管理后台 - 外包合同历史 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class OutsContractHistoryRespVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "16040")
+ @ExcelProperty("主键")
+ private Long id;
+
+ @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31803")
+ @ExcelProperty("项目id")
+ private Long projectId;
+
+ @Schema(description = "合同名称", example = "芋艿")
+ @ExcelProperty("合同名称")
+ private String name;
+
+ @Schema(description = "主合同id", example = "19949")
+ @ExcelProperty("主合同id")
+ private Long contractId;
+
+ @Schema(description = "类型", example = "1")
+ @ExcelProperty(value = "类型", converter = DictConvert.class)
+ @DictFormat("contract_billing_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+ private String countType;
+
+ @Schema(description = "合同金额")
+ @ExcelProperty("合同金额")
+ private BigDecimal amount;
+
+ @Schema(description = "编号")
+ @ExcelProperty("编号")
+ private String code;
+
+ @Schema(description = "专业")
+ @ExcelProperty(value = "专业", converter = DictConvert.class)
+ @DictFormat("major") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+ private String major;
+
+ @Schema(description = "流程实体id", example = "32397")
+ @ExcelProperty("流程实体id")
+ private String processInstanceId;
+
+ @Schema(description = "签订时间")
+ @ExcelProperty("签订时间")
+ private LocalDateTime signingTime;
+
+ @Schema(description = "结算数")
+ @ExcelProperty("结算数")
+ private BigDecimal settlementAmount;
+
+ @Schema(description = "合同文件url", example = "https://www.iocoder.cn")
+ @ExcelProperty("合同文件url")
+ private String contractFileUrl;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "流程状态", example = "2")
+ @ExcelProperty("流程状态")
+ private String processStatus;
+
+ @Schema(description = "外包合同id", example = "24736")
+ @ExcelProperty("外包合同id")
+ private Long outsContractId;
+
+ @Schema(description = "版本")
+ @ExcelProperty("版本")
+ private String version;
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistorySaveReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistorySaveReqVO.java
new file mode 100644
index 000000000..1007dffcc
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontracthistory/vo/OutsContractHistorySaveReqVO.java
@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 外包合同历史新增/修改 Request VO")
+@Data
+public class OutsContractHistorySaveReqVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "16040")
+ private Long id;
+
+ @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31803")
+ @NotNull(message = "项目id不能为空")
+ private Long projectId;
+
+ @Schema(description = "合同名称", example = "芋艿")
+ private String name;
+
+ @Schema(description = "主合同id", example = "19949")
+ private Long contractId;
+
+ @Schema(description = "类型", example = "1")
+ private String countType;
+
+ @Schema(description = "合同金额")
+ private BigDecimal amount;
+
+ @Schema(description = "编号")
+ private String code;
+
+ @Schema(description = "专业")
+ private String major;
+
+ @Schema(description = "流程实体id", example = "32397")
+ private String processInstanceId;
+
+ @Schema(description = "签订时间")
+ private LocalDateTime signingTime;
+
+ @Schema(description = "结算数")
+ private BigDecimal settlementAmount;
+
+ @Schema(description = "合同文件url", example = "https://www.iocoder.cn")
+ private String contractFileUrl;
+
+ @Schema(description = "流程状态", example = "2")
+ private String processStatus;
+
+ @Schema(description = "外包合同id", example = "24736")
+ private Long outsContractId;
+
+ @Schema(description = "版本")
+ private String version;
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontract/OutsContractDO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontract/OutsContractDO.java
new file mode 100644
index 000000000..89e326e14
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontract/OutsContractDO.java
@@ -0,0 +1,78 @@
+package cn.iocoder.yudao.module.cms.dal.dataobject.outscontract;
+
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 外包合同 DO
+ *
+ * @author zqc
+ */
+@TableName("cms_outs_contract")
+@KeySequence("cms_outs_contract_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OutsContractDO extends BaseDO {
+
+ /**
+ * 主键
+ */
+ @TableId
+ private Long id;
+ /**
+ * 项目id
+ */
+ private Long projectId;
+ /**
+ * 合同名称
+ */
+ private String name;
+ /**
+ * 主合同id
+ */
+ private Long contractId;
+ /**
+ * 类型
+ *
+ * 枚举 {@link TODO contract_billing_type 对应的类}
+ */
+ private String countType;
+ /**
+ * 合同金额
+ */
+ private BigDecimal amount;
+ /**
+ * 编号
+ */
+ private String code;
+ /**
+ * 专业
+ *
+ * 枚举 {@link TODO major 对应的类}
+ */
+ private String major;
+ /**
+ * 签订时间
+ */
+ private LocalDateTime signingTime;
+ /**
+ * 结算数
+ */
+ private BigDecimal settlementAmount;
+ /**
+ * 合同文件url
+ */
+ private String contractFileUrl;
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontracthistory/OutsContractHistoryDO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontracthistory/OutsContractHistoryDO.java
new file mode 100644
index 000000000..7ce200da2
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontracthistory/OutsContractHistoryDO.java
@@ -0,0 +1,94 @@
+package cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory;
+
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 外包合同历史 DO
+ *
+ * @author zqc
+ */
+@TableName("cms_outs_contract_history")
+@KeySequence("cms_outs_contract_history_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OutsContractHistoryDO extends BaseDO {
+
+ /**
+ * 主键
+ */
+ @TableId
+ private Long id;
+ /**
+ * 项目id
+ */
+ private Long projectId;
+ /**
+ * 合同名称
+ */
+ private String name;
+ /**
+ * 主合同id
+ */
+ private Long contractId;
+ /**
+ * 类型
+ *
+ * 枚举 {@link TODO contract_billing_type 对应的类}
+ */
+ private String countType;
+ /**
+ * 合同金额
+ */
+ private BigDecimal amount;
+ /**
+ * 编号
+ */
+ private String code;
+ /**
+ * 专业
+ *
+ * 枚举 {@link TODO major 对应的类}
+ */
+ private String major;
+ /**
+ * 流程实体id
+ */
+ private String processInstanceId;
+ /**
+ * 签订时间
+ */
+ private LocalDateTime signingTime;
+ /**
+ * 结算数
+ */
+ private BigDecimal settlementAmount;
+ /**
+ * 合同文件url
+ */
+ private String contractFileUrl;
+ /**
+ * 流程状态
+ */
+ private String processStatus;
+ /**
+ * 外包合同id
+ */
+ private Long outsContractId;
+ /**
+ * 版本
+ */
+ private String version;
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/outscontract/OutsContractMapper.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/outscontract/OutsContractMapper.java
new file mode 100644
index 000000000..91108ed73
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/outscontract/OutsContractMapper.java
@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.cms.dal.mysql.outscontract;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.*;
+
+/**
+ * 外包合同 Mapper
+ *
+ * @author zqc
+ */
+@Mapper
+public interface OutsContractMapper extends BaseMapperX {
+
+ default PageResult selectPage(OutsContractPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(OutsContractDO::getProjectId, reqVO.getProjectId())
+ .likeIfPresent(OutsContractDO::getName, reqVO.getName())
+ .eqIfPresent(OutsContractDO::getContractId, reqVO.getContractId())
+ .eqIfPresent(OutsContractDO::getCountType, reqVO.getCountType())
+ .eqIfPresent(OutsContractDO::getAmount, reqVO.getAmount())
+ .eqIfPresent(OutsContractDO::getCode, reqVO.getCode())
+ .eqIfPresent(OutsContractDO::getMajor, reqVO.getMajor())
+ .betweenIfPresent(OutsContractDO::getSigningTime, reqVO.getSigningTime())
+ .eqIfPresent(OutsContractDO::getSettlementAmount, reqVO.getSettlementAmount())
+ .eqIfPresent(OutsContractDO::getContractFileUrl, reqVO.getContractFileUrl())
+ .betweenIfPresent(OutsContractDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(OutsContractDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/outscontracthistory/OutsContractHistoryMapper.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/outscontracthistory/OutsContractHistoryMapper.java
new file mode 100644
index 000000000..9f0017b72
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/outscontracthistory/OutsContractHistoryMapper.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.cms.dal.mysql.outscontracthistory;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory.OutsContractHistoryDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.vo.*;
+
+/**
+ * 外包合同历史 Mapper
+ *
+ * @author zqc
+ */
+@Mapper
+public interface OutsContractHistoryMapper extends BaseMapperX {
+
+ default PageResult selectPage(OutsContractHistoryPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(OutsContractHistoryDO::getProjectId, reqVO.getProjectId())
+ .likeIfPresent(OutsContractHistoryDO::getName, reqVO.getName())
+ .eqIfPresent(OutsContractHistoryDO::getContractId, reqVO.getContractId())
+ .eqIfPresent(OutsContractHistoryDO::getCountType, reqVO.getCountType())
+ .eqIfPresent(OutsContractHistoryDO::getAmount, reqVO.getAmount())
+ .eqIfPresent(OutsContractHistoryDO::getCode, reqVO.getCode())
+ .eqIfPresent(OutsContractHistoryDO::getMajor, reqVO.getMajor())
+ .eqIfPresent(OutsContractHistoryDO::getProcessInstanceId, reqVO.getProcessInstanceId())
+ .betweenIfPresent(OutsContractHistoryDO::getSigningTime, reqVO.getSigningTime())
+ .eqIfPresent(OutsContractHistoryDO::getSettlementAmount, reqVO.getSettlementAmount())
+ .eqIfPresent(OutsContractHistoryDO::getContractFileUrl, reqVO.getContractFileUrl())
+ .betweenIfPresent(OutsContractHistoryDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(OutsContractHistoryDO::getProcessStatus, reqVO.getProcessStatus())
+ .eqIfPresent(OutsContractHistoryDO::getOutsContractId, reqVO.getOutsContractId())
+ .eqIfPresent(OutsContractHistoryDO::getVersion, reqVO.getVersion())
+ .orderByDesc(OutsContractHistoryDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/contract/ContractServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/contract/ContractServiceImpl.java
index fd3824b24..910de7a32 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/contract/ContractServiceImpl.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/contract/ContractServiceImpl.java
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.cms.service.contract;
import cn.iocoder.yudao.module.cms.dal.mysql.contract.ContractMapper;
import cn.iocoder.yudao.module.cms.dal.mysql.extContract.ExtContractMapper;
-import cn.iocoder.yudao.module.pms.api.ProjectApi;
+import cn.iocoder.yudao.module.pms.api.project.ProjectApi;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectDetailRespDTO;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectRespDTO;
import org.slf4j.Logger;
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontract/ExtContractServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontract/ExtContractServiceImpl.java
index 95d79bdc6..657230955 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontract/ExtContractServiceImpl.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontract/ExtContractServiceImpl.java
@@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.cms.dal.dataobject.customerCompany.CustomerCompan
import cn.iocoder.yudao.module.cms.dal.dataobject.extContract.ExtContractDO;
import cn.iocoder.yudao.module.cms.dal.mysql.customerCompany.CustomerCompanyMapper;
import cn.iocoder.yudao.module.cms.dal.mysql.extContract.ExtContractMapper;
-import cn.iocoder.yudao.module.pms.api.ProjectApi;
+import cn.iocoder.yudao.module.pms.api.project.ProjectApi;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectDetailRespDTO;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectRespDTO;
import org.springframework.stereotype.Service;
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractService.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractService.java
new file mode 100644
index 000000000..3ae3a594c
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractService.java
@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.cms.service.outscontract;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.*;
+import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 外包合同 Service 接口
+ *
+ * @author zqc
+ */
+public interface OutsContractService {
+
+ /**
+ * 创建外包合同
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createOutsContract(@Valid OutsContractSaveReqVO createReqVO);
+
+ /**
+ * 更新外包合同
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateOutsContract(@Valid OutsContractSaveReqVO updateReqVO);
+
+ /**
+ * 删除外包合同
+ *
+ * @param id 编号
+ */
+ void deleteOutsContract(Long id);
+
+ /**
+ * 获得外包合同
+ *
+ * @param id 编号
+ * @return 外包合同
+ */
+ OutsContractDO getOutsContract(Long id);
+
+ /**
+ * 获得外包合同分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 外包合同分页
+ */
+ PageResult getOutsContractPage(OutsContractPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractServiceImpl.java
new file mode 100644
index 000000000..e6f4cb8c0
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractServiceImpl.java
@@ -0,0 +1,74 @@
+package cn.iocoder.yudao.module.cms.service.outscontract;
+
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.*;
+import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.cms.dal.mysql.outscontract.OutsContractMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*;
+
+/**
+ * 外包合同 Service 实现类
+ *
+ * @author zqc
+ */
+@Service
+@Validated
+public class OutsContractServiceImpl implements OutsContractService {
+
+ @Resource
+ private OutsContractMapper outsContractMapper;
+
+ @Override
+ public Long createOutsContract(OutsContractSaveReqVO createReqVO) {
+ // 插入
+ OutsContractDO outsContract = BeanUtils.toBean(createReqVO, OutsContractDO.class);
+ outsContractMapper.insert(outsContract);
+ // 返回
+ return outsContract.getId();
+ }
+
+ @Override
+ public void updateOutsContract(OutsContractSaveReqVO updateReqVO) {
+ // 校验存在
+ validateOutsContractExists(updateReqVO.getId());
+ // 更新
+ OutsContractDO updateObj = BeanUtils.toBean(updateReqVO, OutsContractDO.class);
+ outsContractMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteOutsContract(Long id) {
+ // 校验存在
+ validateOutsContractExists(id);
+ // 删除
+ outsContractMapper.deleteById(id);
+ }
+
+ private void validateOutsContractExists(Long id) {
+ if (outsContractMapper.selectById(id) == null) {
+ throw exception(OUTS_CONTRACT_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public OutsContractDO getOutsContract(Long id) {
+ return outsContractMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getOutsContractPage(OutsContractPageReqVO pageReqVO) {
+ return outsContractMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontracthistory/OutsContractHistoryService.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontracthistory/OutsContractHistoryService.java
new file mode 100644
index 000000000..19fde3506
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontracthistory/OutsContractHistoryService.java
@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.cms.service.outscontracthistory;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.vo.*;
+import cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory.OutsContractHistoryDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 外包合同历史 Service 接口
+ *
+ * @author zqc
+ */
+public interface OutsContractHistoryService {
+
+ /**
+ * 创建外包合同历史
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createOutsContractHistory(@Valid OutsContractHistorySaveReqVO createReqVO);
+
+ /**
+ * 更新外包合同历史
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateOutsContractHistory(@Valid OutsContractHistorySaveReqVO updateReqVO);
+
+ /**
+ * 删除外包合同历史
+ *
+ * @param id 编号
+ */
+ void deleteOutsContractHistory(Long id);
+
+ /**
+ * 获得外包合同历史
+ *
+ * @param id 编号
+ * @return 外包合同历史
+ */
+ OutsContractHistoryDO getOutsContractHistory(Long id);
+
+ /**
+ * 获得外包合同历史分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 外包合同历史分页
+ */
+ PageResult getOutsContractHistoryPage(OutsContractHistoryPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontracthistory/OutsContractHistoryServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontracthistory/OutsContractHistoryServiceImpl.java
new file mode 100644
index 000000000..b521705ce
--- /dev/null
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontracthistory/OutsContractHistoryServiceImpl.java
@@ -0,0 +1,74 @@
+package cn.iocoder.yudao.module.cms.service.outscontracthistory;
+
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.vo.*;
+import cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory.OutsContractHistoryDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.cms.dal.mysql.outscontracthistory.OutsContractHistoryMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*;
+
+/**
+ * 外包合同历史 Service 实现类
+ *
+ * @author zqc
+ */
+@Service
+@Validated
+public class OutsContractHistoryServiceImpl implements OutsContractHistoryService {
+
+ @Resource
+ private OutsContractHistoryMapper outsContractHistoryMapper;
+
+ @Override
+ public Long createOutsContractHistory(OutsContractHistorySaveReqVO createReqVO) {
+ // 插入
+ OutsContractHistoryDO outsContractHistory = BeanUtils.toBean(createReqVO, OutsContractHistoryDO.class);
+ outsContractHistoryMapper.insert(outsContractHistory);
+ // 返回
+ return outsContractHistory.getId();
+ }
+
+ @Override
+ public void updateOutsContractHistory(OutsContractHistorySaveReqVO updateReqVO) {
+ // 校验存在
+ validateOutsContractHistoryExists(updateReqVO.getId());
+ // 更新
+ OutsContractHistoryDO updateObj = BeanUtils.toBean(updateReqVO, OutsContractHistoryDO.class);
+ outsContractHistoryMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteOutsContractHistory(Long id) {
+ // 校验存在
+ validateOutsContractHistoryExists(id);
+ // 删除
+ outsContractHistoryMapper.deleteById(id);
+ }
+
+ private void validateOutsContractHistoryExists(Long id) {
+ if (outsContractHistoryMapper.selectById(id) == null) {
+ throw exception(OUTS_CONTRACT_HISTORY_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public OutsContractHistoryDO getOutsContractHistory(Long id) {
+ return outsContractHistoryMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getOutsContractHistoryPage(OutsContractHistoryPageReqVO pageReqVO) {
+ return outsContractHistoryMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/BudgetApi.java b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/BudgetApi.java
new file mode 100644
index 000000000..917fa2003
--- /dev/null
+++ b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/BudgetApi.java
@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.pms.api.budegt;
+
+import cn.iocoder.yudao.module.pms.api.budegt.dto.BudegtDetailRespDTO;
+import cn.iocoder.yudao.module.pms.api.budegt.dto.BudegtResDTO;
+
+public interface BudgetApi {
+ /**
+ * 获得应收款的部分信息
+ */
+ BudegtResDTO getBudegt(Long id);
+
+ /**
+ * 获得应收款的detail信息
+ */
+ BudegtDetailRespDTO getBudegtDetail(Long id);
+}
diff --git a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/dto/BudegtDetailRespDTO.java b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/dto/BudegtDetailRespDTO.java
new file mode 100644
index 000000000..e8c3cb2f2
--- /dev/null
+++ b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/dto/BudegtDetailRespDTO.java
@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.pms.api.budegt.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class BudegtDetailRespDTO {
+ /**
+ * 合同管理
+ */
+ private Long contractId;
+ /**
+ * 预算文件url
+ */
+ private String budgetFileUrl;
+ /**
+ * 预算外包成本
+ */
+ private BigDecimal outsourcingCosts;
+ /**
+ * 人力成本
+ */
+ private BigDecimal laborCosts;
+ /**
+ * 累计人力成本
+ */
+ private BigDecimal accumulatedLaborCosts;
+ /**
+ * 生产成本
+ */
+ private BigDecimal productCosts;
+ /**
+ * 累计生产成本
+ */
+ private BigDecimal accumulatedProductCosts;
+ /**
+ * 财务成本
+ */
+ private BigDecimal financialCosts;
+ /**
+ * 累计财务成本
+ */
+ private BigDecimal accumulatedFinancialCosts;
+ /**
+ * 回款情况
+ */
+ private String collectionSituation;
+}
diff --git a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/dto/BudegtResDTO.java b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/dto/BudegtResDTO.java
new file mode 100644
index 000000000..5d9c898ad
--- /dev/null
+++ b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/budegt/dto/BudegtResDTO.java
@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.pms.api.budegt.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class BudegtResDTO {
+
+ /**
+ * 合同管理
+ */
+ private Long contractId;
+ /**
+ * 预算文件url
+ */
+ private String budgetFileUrl;
+ /**
+ * 预算外包成本
+ */
+ private BigDecimal outsourcingCosts;
+ /**
+ * 人力成本
+ */
+ private BigDecimal laborCosts;
+ /**
+ * 累计人力成本
+ */
+ private BigDecimal accumulatedLaborCosts;
+ /**
+ * 生产成本
+ */
+ private BigDecimal productCosts;
+ /**
+ * 累计生产成本
+ */
+ private BigDecimal accumulatedProductCosts;
+ /**
+ * 财务成本
+ */
+ private BigDecimal financialCosts;
+ /**
+ * 累计财务成本
+ */
+ private BigDecimal accumulatedFinancialCosts;
+ /**
+ * 回款情况
+ */
+ private String collectionSituation;
+}
diff --git a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/ProjectApi.java b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/project/ProjectApi.java
similarity index 88%
rename from yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/ProjectApi.java
rename to yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/project/ProjectApi.java
index 01f9482cf..5a4ac776a 100644
--- a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/ProjectApi.java
+++ b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/project/ProjectApi.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.pms.api;
+package cn.iocoder.yudao.module.pms.api.project;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectDetailRespDTO;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectRespDTO;
diff --git a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/api/project/BudgetImpl.java b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/api/project/BudgetImpl.java
new file mode 100644
index 000000000..811142c3b
--- /dev/null
+++ b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/api/project/BudgetImpl.java
@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.pms.api.project;
+
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.pms.api.budegt.BudgetApi;
+import cn.iocoder.yudao.module.pms.api.budegt.dto.BudegtDetailRespDTO;
+import cn.iocoder.yudao.module.pms.api.budegt.dto.BudegtResDTO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.budget.BudgetDO;
+import cn.iocoder.yudao.module.pms.dal.mysql.budget.BudgetMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+@Service
+@Validated
+public class BudgetImpl implements BudgetApi {
+
+ @Resource
+ private BudgetMapper budgetMapper;
+
+ @Override
+ public BudegtResDTO getBudegt(Long id) {
+ BudgetDO budgetDO = budgetMapper.selectById(id);
+ BudegtResDTO budegtResDTO = BeanUtils.toBean(budgetDO, BudegtResDTO.class);
+ return budegtResDTO;
+ }
+
+ @Override
+ public BudegtDetailRespDTO getBudegtDetail(Long id) {
+// budgetMapper.
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/api/project/ProjectImpl.java b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/api/project/ProjectImpl.java
index f03131aa0..173367782 100644
--- a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/api/project/ProjectImpl.java
+++ b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/api/project/ProjectImpl.java
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.pms.api.project;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.pms.api.ProjectApi;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectDetailRespDTO;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectRespDTO;
import cn.iocoder.yudao.module.pms.dal.dataobject.project.ProjectDO;
From 44c6558602614a78a2d392bf0e3f6aab9bb0d08f Mon Sep 17 00:00:00 2001
From: Qiancheng Zhao <15226586396@163.com>
Date: Wed, 31 Jul 2024 09:34:53 +0800
Subject: [PATCH 04/10] =?UTF-8?q?[feat]=E5=90=88=E5=B9=B6wyw-7.25=E5=A4=96?=
=?UTF-8?q?=E9=83=A8=E5=90=88=E5=90=8C=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mysql/{extcontract => extContract}/ExtContractMapper.java | 2 +-
.../cms/service/extcontract/ExtContractServiceImpl.java | 4 ++--
.../main/resources/mapper/extContract/ExtContractMapper.xml | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
rename yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/{extcontract => extContract}/ExtContractMapper.java (98%)
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extcontract/ExtContractMapper.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extContract/ExtContractMapper.java
similarity index 98%
rename from yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extcontract/ExtContractMapper.java
rename to yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extContract/ExtContractMapper.java
index 5811556ef..d31fb793d 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extcontract/ExtContractMapper.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extContract/ExtContractMapper.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.cms.dal.mysql.extcontract;
+package cn.iocoder.yudao.module.cms.dal.mysql.extContract;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontract/ExtContractServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontract/ExtContractServiceImpl.java
index 5035231a1..510bf12b7 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontract/ExtContractServiceImpl.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontract/ExtContractServiceImpl.java
@@ -6,8 +6,8 @@ import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractSa
import cn.iocoder.yudao.module.cms.dal.dataobject.customerCompany.CustomerCompanyDO;
import cn.iocoder.yudao.module.cms.dal.dataobject.extContract.ExtContractDO;
import cn.iocoder.yudao.module.cms.dal.mysql.customerCompany.CustomerCompanyMapper;
-import cn.iocoder.yudao.module.cms.dal.mysql.extcontract.ExtContractMapper;
-import cn.iocoder.yudao.module.pms.api.ProjectApi;
+import cn.iocoder.yudao.module.cms.dal.mysql.extContract.ExtContractMapper;
+import cn.iocoder.yudao.module.pms.api.project.ProjectApi;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectDetailRespDTO;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectRespDTO;
import org.springframework.stereotype.Service;
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/resources/mapper/extContract/ExtContractMapper.xml b/yudao-module-cms/yudao-module-cms-biz/src/main/resources/mapper/extContract/ExtContractMapper.xml
index a122ca19f..85486ea5f 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/resources/mapper/extContract/ExtContractMapper.xml
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/resources/mapper/extContract/ExtContractMapper.xml
@@ -1,6 +1,6 @@
-
+