From 6d4885c051fe990e9f692d4f742b7a2aac81c701 Mon Sep 17 00:00:00 2001 From: wyw <13885678+wyw0828@user.noreply.gitee.com> Date: Fri, 2 Aug 2024 13:25:17 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E6=96=B0=E5=A2=9E=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=8E=86=E5=8F=B2=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extContract/vo/ExtContractPageReqVO.java | 66 ------- .../extContract/vo/ExtContractSaveReqVO.java | 3 +- .../ExtContractHistoryController.java | 79 ++++++++ .../vo/ExtContractHistoryPageReqVO.java | 44 +++++ .../vo/ExtContractHistoryRespVO.java | 170 ++++++++++++++++++ .../vo/ExtContractHistorySaveReqVO.java | 145 +++++++++++++++ .../ExtContractHistoryDO.java | 166 +++++++++++++++++ .../mysql/extcontract/ExtContractMapper.java | 24 +-- .../ExtContractHistoryMapper.java | 32 ++++ .../extContract/ExtContractService.java | 10 +- .../extContract/ExtContractServiceImpl.java | 160 +++++++++++++++-- .../ExtContractHistoryService.java | 35 ++++ .../ExtContractHistoryServiceImpl.java | 155 ++++++++++++++++ 13 files changed, 978 insertions(+), 111 deletions(-) create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/ExtContractHistoryController.java create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryPageReqVO.java create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryRespVO.java create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistorySaveReqVO.java create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/extcontracthistory/ExtContractHistoryDO.java create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extcontracthistory/ExtContractHistoryMapper.java create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontracthistory/ExtContractHistoryService.java create mode 100644 yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontracthistory/ExtContractHistoryServiceImpl.java diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractPageReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractPageReqVO.java index 04de4bcde..4fc4adbab 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractPageReqVO.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractPageReqVO.java @@ -30,76 +30,10 @@ public class ExtContractPageReqVO extends PageParam { @Schema(description = "合同进展") private String progress; - @Schema(description = "预计签订时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] expectedTime; - - @Schema(description = "签订时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] signingTime; - - @Schema(description = "归档时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] archiveTime; @Schema(description = "状态", example = "2") private String status; - @Schema(description = "合同金额") - private BigDecimal amount; - - @Schema(description = "前期费用") - private BigDecimal preAmount; - - @Schema(description = "设计费") - private BigDecimal designFee; - - @Schema(description = "勘测费") - private BigDecimal surveyFees; - - @Schema(description = "检测费") - private BigDecimal testingFee; - - @Schema(description = "其他费") - private String otherFee; - - @Schema(description = "计费方式", example = "1") - private String countType; - - @Schema(description = "备注", example = "你猜") - private String remark; - - @Schema(description = "合同附件url", example = "https://www.iocoder.cn") - private String contractFileUrl; - - @Schema(description = "建安费") - private BigDecimal constructionCost; - - @Schema(description = "资金来源") - private String source; - - @Schema(description = "收费标准") - private String chargingStandard; - - @Schema(description = "优惠", example = "15529") - private String discount; - - @Schema(description = "是否联合体") - private Boolean consortium; - - @Schema(description = "联合体单位") - private String consortiumCompany; - - @Schema(description = "分包合同提示时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] reminderTime; - - @Schema(description = "审定金额") - private BigDecimal approvedAmount; - - @Schema(description = "审核文件url", example = "https://www.iocoder.cn") - private String reviewFileUrl; - @Schema(description = "合同id", example = "27460") private Long contractId; diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractSaveReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractSaveReqVO.java index 2a1387fe2..67d5ec89c 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractSaveReqVO.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractSaveReqVO.java @@ -39,11 +39,10 @@ public class ExtContractSaveReqVO { @ExcelProperty("合同提示时间") private LocalDateTime exReminderTime; + @Schema(description = "客户公司id", example = "25191") private Long customerCompanyId; - - @Schema(description = "合同名称", example = "芋艿") @ExcelProperty("合同名称") private String name; diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/ExtContractHistoryController.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/ExtContractHistoryController.java new file mode 100644 index 000000000..a54ba2d41 --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/ExtContractHistoryController.java @@ -0,0 +1,79 @@ +package cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory; + +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.*; +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 static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +import cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory.vo.*; +import cn.iocoder.yudao.module.cms.service.extcontracthistory.ExtContractHistoryService; + +@Tag(name = "管理后台 - 外部合同历史") +@RestController +@RequestMapping("/cms/ext-contract-history") +@Validated +public class ExtContractHistoryController { + + + + @Resource + private ExtContractHistoryService extContractHistoryService; + + @PutMapping("/update") + @Operation(summary = "更新外部合同历史历史") + @PreAuthorize("@ss.hasPermission('cms:ext-contract-history:update')") + public CommonResult updateExtContractHistory(@Valid @RequestBody ExtContractHistorySaveReqVO updateReqVO) { + extContractHistoryService.updateExtContractHistory(getLoginUserId(),updateReqVO); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得外部合同历史历史") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('cms:ext-contract-history:query')") + public CommonResult getExtContractHistory(@RequestParam("id") Long id) { + ExtContractHistoryRespVO extContractHistory = extContractHistoryService.getExtContractHistory(id); + return success(extContractHistory); + } + + @GetMapping("/page") + @Operation(summary = "获得外部合同历史历史分页") + @PreAuthorize("@ss.hasPermission('cms:ext-contract-history:query')") + public CommonResult> getExtContractHistoryPage(@Valid ExtContractHistoryPageReqVO pageReqVO) { + PageResult pageResult = extContractHistoryService.getExtContractHistoryPage(pageReqVO); + return success(pageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出外部合同历史历史 Excel") + @PreAuthorize("@ss.hasPermission('cms:ext-contract-history:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportExtContractHistoryExcel(@Valid ExtContractHistoryPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = extContractHistoryService.getExtContractHistoryPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "外部合同历史历史.xls", "数据", ExtContractHistoryRespVO.class, + BeanUtils.toBean(list, ExtContractHistoryRespVO.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/extcontracthistory/vo/ExtContractHistoryPageReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryPageReqVO.java new file mode 100644 index 000000000..19c243ce0 --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryPageReqVO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory.vo; + +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + + +@Schema(description = "管理后台 - 外部合同分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ExtContractHistoryPageReqVO extends PageParam { + + + @Schema(description = "项目id", example = "6935") + private Long projectId; + + @Schema(description = "合同名称", example = "张三") + private String name; + + @Schema(description = "合同类型", example = "1") + private String type; + + @Schema(description = "客户公司id", example = "28989") + private Long customerCompanyId; + + @Schema(description = "状态", example = "1") + private String status; + + + @Schema(description = "流程实体id", example = "8911") + private String processInstanceId; + + @Schema(description = "流程状态", example = "2") + private String processStatus; + + @Schema(description = "合同id", example = "26795") + private Long contractId; + + @Schema(description = "外部合同id", example = "12093") + private Long extContractId; + + +} \ 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/extcontracthistory/vo/ExtContractHistoryRespVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryRespVO.java new file mode 100644 index 000000000..098b59fe6 --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistoryRespVO.java @@ -0,0 +1,170 @@ +package cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.math.BigDecimal; + +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 ExtContractHistoryRespVO { + + + @Schema(description = "项目编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "SJ24001") + @ExcelProperty("项目编号") + private String code; + + @Schema(description = "客户名称") + @ExcelProperty("客户名称") + private String customerCompanyName; + + @Schema(description = "主控部门", requiredMode = Schema.RequiredMode.REQUIRED, example = "生产一部") + @ExcelProperty("主控部门") + private String trackingDep; + + @Schema(description = "项目经理", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("项目经理") + private String projectManager; + + @Schema(description = "合同提示时间") + @ExcelProperty("合同提示时间") + private LocalDateTime exReminderTime; + + @Schema(description = "客户公司id", example = "28989") + @ExcelProperty("客户公司id") + private Long customerCompanyId; + + @Schema(description = "合同金额", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("合同金额") + private BigDecimal amount; + + + @Schema(description = "合同名称", example = "张三") + @ExcelProperty("合同名称") + private String name; + + @Schema(description = "合同类型", example = "1") + @ExcelProperty("合同类型") + private String type; + + + + @Schema(description = "合同进展") + @ExcelProperty("合同进展") + private String progress; + + @Schema(description = "预计签订时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("预计签订时间") + private LocalDateTime expectedTime; + + @Schema(description = "签订时间") + @ExcelProperty("签订时间") + private LocalDateTime signingTime; + + @Schema(description = "归档时间") + @ExcelProperty("归档时间") + private LocalDateTime archiveTime; + + @Schema(description = "状态", example = "1") + @ExcelProperty("状态") + private String status; + + + + @Schema(description = "前期费用") + @ExcelProperty("前期费用") + private BigDecimal preAmount; + + @Schema(description = "设计费") + @ExcelProperty("设计费") + private BigDecimal designFee; + + @Schema(description = "勘测费") + @ExcelProperty("勘测费") + private BigDecimal surveyFees; + + @Schema(description = "检测费") + @ExcelProperty("检测费") + private BigDecimal testingFee; + + @Schema(description = "其他费") + @ExcelProperty("其他费") + private String otherFee; + + @Schema(description = "计费方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty(value = "计费方式", converter = DictConvert.class) + @DictFormat("contract_billing_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String countType; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "合同附件url", example = "https://www.iocoder.cn") + @ExcelProperty("合同附件url") + private String contractFileUrl; + + @Schema(description = "建安费") + @ExcelProperty("建安费") + private BigDecimal constructionCost; + + @Schema(description = "资金来源") + @ExcelProperty(value = "资金来源", converter = DictConvert.class) + @DictFormat("funds_source") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String source; + + @Schema(description = "收费标准", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("收费标准") + private String chargingStandard; + + @Schema(description = "优惠", example = "7511") + @ExcelProperty("优惠") + private String discount; + + @Schema(description = "是否联合体", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否联合体") + private Boolean consortium; + + @Schema(description = "联合体单位") + @ExcelProperty("联合体单位") + private String consortiumCompany; + + @Schema(description = "合同提示时间") + @ExcelProperty("合同提示时间") + private LocalDateTime reminderTime; + + @Schema(description = "审定金额") + @ExcelProperty("审定金额") + private BigDecimal approvedAmount; + + @Schema(description = "审核文件url", example = "https://www.iocoder.cn") + @ExcelProperty("审核文件url") + private String reviewFileUrl; + + @Schema(description = "流程实体id", example = "8911") + @ExcelProperty("流程实体id") + private String processInstanceId; + + @Schema(description = "流程状态", example = "2") + @ExcelProperty(value = "流程状态", converter = DictConvert.class) + @DictFormat("bpm_process_instance_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String processStatus; + + @Schema(description = "合同id", example = "26795") + @ExcelProperty("合同id") + private Long contractId; + + @Schema(description = "外部合同id", example = "12093") + @ExcelProperty("外部合同id") + private Long extContractId; + + @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/extcontracthistory/vo/ExtContractHistorySaveReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistorySaveReqVO.java new file mode 100644 index 000000000..8e0c57b14 --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extcontracthistory/vo/ExtContractHistorySaveReqVO.java @@ -0,0 +1,145 @@ +package cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +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 ExtContractHistorySaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "17790") + private Long id; + + @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6935") + @NotNull(message = "项目id不能为空") + private Long projectId; + + + @Schema(description = "流程实体id", example = "8911") + private String processInstanceId; + + @Schema(description = "项目编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "SJ24001") + @ExcelProperty("项目编号") + private String code; + + @Schema(description = "客户名称") + @ExcelProperty("客户名称") + private String customerCompanyName; + + @Schema(description = "主控部门", requiredMode = Schema.RequiredMode.REQUIRED, example = "生产一部") + @ExcelProperty("主控部门") + private String trackingDep; + + @Schema(description = "项目经理", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("项目经理") + private String projectManager; + + @Schema(description = "合同提示时间") + @ExcelProperty("合同提示时间") + private LocalDateTime exReminderTime; + + @Schema(description = "客户公司id", example = "28989") + private Long customerCompanyId; + + @Schema(description = "合同名称", example = "张三") + private String name; + + @Schema(description = "合同类型", example = "1") + private String type; + + + + @Schema(description = "合同进展") + private String progress; + + @Schema(description = "预计签订时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "预计签订时间不能为空") + private LocalDateTime expectedTime; + + @Schema(description = "签订时间") + private LocalDateTime signingTime; + + @Schema(description = "归档时间") + private LocalDateTime archiveTime; + + @Schema(description = "状态", example = "1") + private String status; + + @Schema(description = "合同金额", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "合同金额不能为空") + private BigDecimal amount; + + @Schema(description = "前期费用") + private BigDecimal preAmount; + + @Schema(description = "设计费") + private BigDecimal designFee; + + @Schema(description = "勘测费") + private BigDecimal surveyFees; + + @Schema(description = "检测费") + private BigDecimal testingFee; + + @Schema(description = "其他费") + private String otherFee; + + @Schema(description = "计费方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotEmpty(message = "计费方式不能为空") + private String countType; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "合同附件url", example = "https://www.iocoder.cn") + private String contractFileUrl; + + @Schema(description = "建安费") + private BigDecimal constructionCost; + + @Schema(description = "资金来源") + private String source; + + @Schema(description = "收费标准", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "收费标准不能为空") + private String chargingStandard; + + @Schema(description = "优惠", example = "7511") + private String discount; + + @Schema(description = "是否联合体", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否联合体不能为空") + private Boolean consortium; + + @Schema(description = "联合体单位") + private String consortiumCompany; + + @Schema(description = "合同提示时间") + private LocalDateTime reminderTime; + + @Schema(description = "审定金额") + private BigDecimal approvedAmount; + + @Schema(description = "审核文件url", example = "https://www.iocoder.cn") + private String reviewFileUrl; + + + @Schema(description = "流程状态", example = "2") + private String processStatus; + + @Schema(description = "合同id", example = "26795") + private Long contractId; + + @Schema(description = "外部合同id", example = "12093") + private Long extContractId; + + @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/extcontracthistory/ExtContractHistoryDO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/extcontracthistory/ExtContractHistoryDO.java new file mode 100644 index 000000000..ee4ec7b9a --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/extcontracthistory/ExtContractHistoryDO.java @@ -0,0 +1,166 @@ +package cn.iocoder.yudao.module.cms.dal.dataobject.extcontracthistory; + +import lombok.*; + +import java.time.LocalDateTime; +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 外部合同 DO + * + * @author 管理员 + */ +@TableName("cms_ext_contract_history") +@KeySequence("cms_ext_contract_history_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ExtContractHistoryDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + /** + * 项目id + */ + private Long projectId; + /** + * 合同名称 + */ + private String name; + /** + * 合同类型 + */ + private String type; + /** + * 客户公司id + */ + private Long customerCompanyId; + /** + * 合同进展 + */ + private String progress; + /** + * 预计签订时间 + */ + private LocalDateTime expectedTime; + /** + * 签订时间 + */ + private LocalDateTime signingTime; + /** + * 归档时间 + */ + private LocalDateTime archiveTime; + /** + * 状态 + */ + private String status; + /** + * 合同金额 + */ + private BigDecimal amount; + /** + * 前期费用 + */ + private BigDecimal preAmount; + /** + * 设计费 + */ + private BigDecimal designFee; + /** + * 勘测费 + */ + private BigDecimal surveyFees; + /** + * 检测费 + */ + private BigDecimal testingFee; + /** + * 其他费 + */ + private String otherFee; + /** + * 计费方式 + * + * 枚举 {@link //TODO contract_billing_type 对应的类} + */ + private String countType; + /** + * 备注 + */ + private String remark; + /** + * 合同附件url + */ + private String contractFileUrl; + /** + * 建安费 + */ + private BigDecimal constructionCost; + /** + * 资金来源 + * + * 枚举 {@link //TODO funds_source 对应的类} + */ + private String source; + /** + * 收费标准 + */ + private String chargingStandard; + /** + * 优惠 + */ + private String discount; + /** + * 是否联合体 + */ + private Boolean consortium; + /** + * 联合体单位 + */ + private String consortiumCompany; + /** + * 合同提示时间 + */ + private LocalDateTime reminderTime; + /** + * 审定金额 + */ + private BigDecimal approvedAmount; + /** + * 审核文件url + */ + private String reviewFileUrl; + /** + * 流程实体id + */ + private String processInstanceId; + /** + * 流程状态 + * + * 枚举 {@link //TODO bpm_process_instance_status 对应的类} + */ + private String processStatus; + /** + * 合同id + */ + private Long contractId; + /** + * 外部合同id + */ + private Long extContractId; + /** + * 版本 + */ + 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/extcontract/ExtContractMapper.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extcontract/ExtContractMapper.java index f10e27dc4..f2122eca3 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 @@ -21,30 +21,8 @@ public interface ExtContractMapper extends BaseMapperX { .eqIfPresent(ExtContractDO::getType, reqVO.getType()) .eqIfPresent(ExtContractDO::getCustomerCompanyId, reqVO.getCustomerCompanyId()) .eqIfPresent(ExtContractDO::getProgress, reqVO.getProgress()) - .betweenIfPresent(ExtContractDO::getExpectedTime, reqVO.getExpectedTime()) - .betweenIfPresent(ExtContractDO::getSigningTime, reqVO.getSigningTime()) - .betweenIfPresent(ExtContractDO::getArchiveTime, reqVO.getArchiveTime()) .eqIfPresent(ExtContractDO::getStatus, reqVO.getStatus()) - .eqIfPresent(ExtContractDO::getAmount, reqVO.getAmount()) - .eqIfPresent(ExtContractDO::getPreAmount, reqVO.getPreAmount()) - .eqIfPresent(ExtContractDO::getDesignFee, reqVO.getDesignFee()) - .eqIfPresent(ExtContractDO::getSurveyFees, reqVO.getSurveyFees()) - .eqIfPresent(ExtContractDO::getTestingFee, reqVO.getTestingFee()) - .eqIfPresent(ExtContractDO::getOtherFee, reqVO.getOtherFee()) - .eqIfPresent(ExtContractDO::getCountType, reqVO.getCountType()) - .eqIfPresent(ExtContractDO::getRemark, reqVO.getRemark()) - .eqIfPresent(ExtContractDO::getContractFileUrl, reqVO.getContractFileUrl()) - .eqIfPresent(ExtContractDO::getConstructionCost, reqVO.getConstructionCost()) - .eqIfPresent(ExtContractDO::getSource, reqVO.getSource()) - .eqIfPresent(ExtContractDO::getChargingStandard, reqVO.getChargingStandard()) - .eqIfPresent(ExtContractDO::getDiscount, reqVO.getDiscount()) - .eqIfPresent(ExtContractDO::getConsortium, reqVO.getConsortium()) - .eqIfPresent(ExtContractDO::getConsortiumCompany, reqVO.getConsortiumCompany()) - .eqIfPresent(ExtContractDO::getApprovedAmount, reqVO.getApprovedAmount()) - .eqIfPresent(ExtContractDO::getReviewFileUrl, reqVO.getReviewFileUrl()) - .eqIfPresent(ExtContractDO::getContractId, reqVO.getContractId()) - - ); + .eqIfPresent(ExtContractDO::getContractId, reqVO.getContractId())); } } \ 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/extcontracthistory/ExtContractHistoryMapper.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extcontracthistory/ExtContractHistoryMapper.java new file mode 100644 index 000000000..db968b29b --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extcontracthistory/ExtContractHistoryMapper.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.cms.dal.mysql.extcontracthistory; + + +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.extcontracthistory.ExtContractHistoryDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory.vo.*; + +/** + * 外部合同 Mapper + * + * @author 管理员 + */ +@Mapper +public interface ExtContractHistoryMapper extends BaseMapperX { + + default PageResult selectPage(ExtContractHistoryPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ExtContractHistoryDO::getProjectId, reqVO.getProjectId()) + .likeIfPresent(ExtContractHistoryDO::getName, reqVO.getName()) + .eqIfPresent(ExtContractHistoryDO::getType, reqVO.getType()) + .eqIfPresent(ExtContractHistoryDO::getCustomerCompanyId, reqVO.getCustomerCompanyId()) + .eqIfPresent(ExtContractHistoryDO::getStatus, reqVO.getStatus()) + .eqIfPresent(ExtContractHistoryDO::getProcessInstanceId, reqVO.getProcessInstanceId()) + .eqIfPresent(ExtContractHistoryDO::getProcessStatus, reqVO.getProcessStatus()) + .eqIfPresent(ExtContractHistoryDO::getContractId, reqVO.getContractId()) + .eqIfPresent(ExtContractHistoryDO::getExtContractId, reqVO.getExtContractId())); + } + +} \ 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/extContract/ExtContractService.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java index 55f96c2d1..3c1b29219 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java @@ -56,8 +56,14 @@ public interface ExtContractService { /** * 合同总金额 - * @param id + * @param id 通过id计算 * @return */ - BigDecimal getContractAmount(Long id); + BigDecimal getContractAmountById(Long id); + /** + * 合同总金额 + * @param createReqVO 通过对象计算 + * @return + */ + BigDecimal getContractAmount(ExtContractSaveReqVO createReqVO); } \ 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/extContract/ExtContractServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java index f92af7fda..944da9772 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 @@ -1,12 +1,16 @@ package cn.iocoder.yudao.module.cms.service.extContract; +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractPageReqVO; import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractRespVO; import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractSaveReqVO; 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.dataobject.extcontracthistory.ExtContractHistoryDO; 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.cms.dal.mysql.extcontracthistory.ExtContractHistoryMapper; 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; @@ -18,9 +22,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import java.math.BigDecimal; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*; @@ -35,6 +39,16 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_E @Validated public class ExtContractServiceImpl implements ExtContractService { + /** + * 外部合同立项审批流程定义 + */ + public static final String PROCESS_KEY = "ext_contract_init"; + + /** + * 版本 + */ + public static String VERSION = "1"; + @Resource private ExtContractMapper extContractMapper; @@ -47,38 +61,137 @@ public class ExtContractServiceImpl implements ExtContractService { @Resource private AdminUserApi adminUserApi; + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Resource + private ExtContractHistoryMapper extContractHistoryMapper; + + @Override - public Long createExtContract(Long loginUserId,ExtContractSaveReqVO createReqVO) { - if (createReqVO == null){ + public Long createExtContract(Long loginUserId, ExtContractSaveReqVO createReqVO) { + + + if (createReqVO == null) { + throw exception(PARAM_NOT_EXISTS); + } + if (loginUserId == null) { throw exception(PARAM_NOT_EXISTS); } - ExtContractDO extContract = BeanUtils.toBean(createReqVO, ExtContractDO.class); - //校验 - projectApi.validProjectExist(extContract.getProjectId()); - String userName = adminUserApi.getUser(loginUserId).getNickname(); - if (userName == null){ + if (userName == null) { throw exception(USER_NOT_EXISTS); } - extContract.setCreator(userName); - extContract.setUpdater(userName); - extContractMapper.insert(extContract); + + ExtContractDO extContract = BeanUtils.toBean(createReqVO, ExtContractDO.class); + //校验 + Long projectId = extContract.getProjectId(); + projectApi.validProjectExist(projectId); + + + //校验联表的字段是否和所联系的表内容相同 + ProjectRespDTO project = projectApi.getProject(projectId); + ProjectDetailRespDTO projectDetail = projectApi.getProjectDetailById(projectId); + + // 需要联表查询 + // 1.项目编号 pms_project 直接 √ + // 2.主控部门(跟踪部门) pms_project找到的是id 需要联表 √ + // 3.项目经理 pms_project找到的是id 需要联表 √ + // 4.客户公司名称 pms_project 联表 √ + // 5.合同总金额 √ + // 6.合同商议提示(和分包提示不一样)√ + + //todo 待提取 + String code = createReqVO.getCode(); + String trackingDep = createReqVO.getTrackingDep(); + String projectManager = createReqVO.getProjectManager(); + String customerCompanyName = createReqVO.getCustomerCompanyName(); + //LocalDateTime exReminderTime = createReqVO.getExReminderTime(); + BigDecimal amount = createReqVO.getAmount(); + + + if (!project.getCode().equals(code)){ + throw exception(PARAM_ERROR); + } + if (!projectDetail.getTrackingDepName().equals(trackingDep)){ + throw exception(PARAM_ERROR); + } + if (!projectDetail.getProjectManagerName().equals(projectManager)){ + throw exception(PARAM_ERROR); + } + String name = customerCompanyMapper.selectById(createReqVO.getCustomerCompanyId()).getName(); + if (!name.equals(customerCompanyName)){ + throw exception(PARAM_ERROR); + } + if (!Objects.equals(amount, getContractAmount(createReqVO))){ + throw exception(PARAM_ERROR); + } + + + ExtContractDO extContractDO = BeanUtils.toBean(createReqVO, ExtContractDO.class); + ExtContractRespVO contractRespVO = BeanUtils.toBean(extContractDO, ExtContractRespVO.class); + extContractDO.setCreator(userName); + extContractDO.setUpdater(userName); + + + + //判断该合同是否已经存在,比较各个字段值是否完全一样 + //得到所有的合同?逐个比较? + + + List extContractList = extContractMapper.selectList("project_id",projectId); + List respVOList = BeanUtils.toBean(extContractList, ExtContractRespVO.class); + + for (ExtContractRespVO respVO : respVOList) { + if (respVO.equals(contractRespVO)){ + throw exception(CONTRACT_ALREADY_EXISTS); + } + } + extContractMapper.insert(extContractDO); + + + Long extContractId = extContractDO.getId(); + ExtContractHistoryDO extContractHistory = BeanUtils.toBean(extContractDO, ExtContractHistoryDO.class); + + + // 启动流程,同时写入历史合同 + if (createReqVO.getId() == null) { + String processInstanceId = processInstanceApi.createProcessInstance(loginUserId, + new BpmProcessInstanceCreateReqDTO() + .setProcessDefinitionKey(PROCESS_KEY).setBusinessKey(String.valueOf(extContractId))); + + // 写入工作流编号 + extContractHistory.setProcessInstanceId(processInstanceId); + extContractHistory.setExtContractId(extContractId); + + Long count = extContractHistoryMapper.selectCount("project_id", projectId); + if (count < 1) { + extContractHistory.setVersion(VERSION); + } else { + extContractHistory.setVersion(String.valueOf(count+1)); + } + + extContractHistory.setProcessStatus("0"); + extContractHistoryMapper.insert(extContractHistory); + } + + //返回 return extContract.getId(); } @Override - public void updateExtContract(Long loginUserId,ExtContractSaveReqVO updateReqVO) { + public void updateExtContract(Long loginUserId, ExtContractSaveReqVO updateReqVO) { //校验 - if (updateReqVO == null){ + if (updateReqVO == null) { throw exception(PARAM_NOT_EXISTS); } validateExtContractExists(updateReqVO.getId()); projectApi.validProjectExist(updateReqVO.getProjectId()); String userName = adminUserApi.getUser(loginUserId).getNickname(); - if (userName == null){ + if (userName == null) { throw exception(USER_NOT_EXISTS); } // 更新 @@ -139,18 +252,18 @@ public class ExtContractServiceImpl implements ExtContractService { //合同总金额 - BigDecimal contractAmount = getContractAmount(id); + BigDecimal contractAmount = getContractAmountById(id); extContractRespVO.setAmount(contractAmount); //合同商议提示 // TODO 待优化 - extContractRespVO.setExReminderTime(LocalDateTime.now()); + extContractRespVO.setExReminderTime(null); return extContractRespVO; } @Override public PageResult getExtContractPage(ExtContractPageReqVO pageReqVO) { - if (pageReqVO == null){ + if (pageReqVO == null) { throw exception(PARAM_NOT_EXISTS); } @@ -170,7 +283,7 @@ public class ExtContractServiceImpl implements ExtContractService { } @Override - public BigDecimal getContractAmount(Long id) { + public BigDecimal getContractAmountById(Long id) { //前期+设计+地勘+其他+检测 ExtContractDO extContract = extContractMapper.selectById(id); BigDecimal preAmount = new BigDecimal(String.valueOf(extContract.getPreAmount())); @@ -181,6 +294,17 @@ public class ExtContractServiceImpl implements ExtContractService { return preAmount.add(designFee).add(surveyFees).add(testingFee).add(other); } + @Override + public BigDecimal getContractAmount(ExtContractSaveReqVO extContractSaveReqVO) { + //前期+设计+地勘+其他+检测 + BigDecimal preAmount = new BigDecimal(String.valueOf(extContractSaveReqVO.getPreAmount())); + BigDecimal designFee = new BigDecimal(String.valueOf(extContractSaveReqVO.getDesignFee())); + BigDecimal surveyFees = new BigDecimal(String.valueOf(extContractSaveReqVO.getSurveyFees())); + BigDecimal testingFee = new BigDecimal(String.valueOf(extContractSaveReqVO.getTestingFee())); + BigDecimal other = new BigDecimal(extContractSaveReqVO.getOtherFee()); + return preAmount.add(designFee).add(surveyFees).add(testingFee).add(other); + } + private void validateExtContractExists(Long id) { if (extContractMapper.selectById(id) == null) { diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontracthistory/ExtContractHistoryService.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontracthistory/ExtContractHistoryService.java new file mode 100644 index 000000000..7347dd080 --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontracthistory/ExtContractHistoryService.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.cms.service.extcontracthistory; + +import jakarta.validation.*; +import cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory.vo.*; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +/** + * 外部合同历史历史 Service 接口 + * + * @author 管理员 + */ +public interface ExtContractHistoryService { + /** + * 更新外部合同历史历史 + * + * @param updateReqVO 更新信息 + */ + void updateExtContractHistory(Long loginUserId,@Valid ExtContractHistorySaveReqVO updateReqVO); + /** + * 获得外部合同历史历史 + * + * @param id 编号 + * @return 外部合同历史历史 + */ + ExtContractHistoryRespVO getExtContractHistory(Long id); + + /** + * 获得外部合同历史历史分页 + * + * @param pageReqVO 分页查询 + * @return 外部合同历史历史分页 + */ + PageResult getExtContractHistoryPage(ExtContractHistoryPageReqVO 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/extcontracthistory/ExtContractHistoryServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontracthistory/ExtContractHistoryServiceImpl.java new file mode 100644 index 000000000..a1f63d711 --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extcontracthistory/ExtContractHistoryServiceImpl.java @@ -0,0 +1,155 @@ +package cn.iocoder.yudao.module.cms.service.extcontracthistory; + +import cn.iocoder.yudao.module.cms.dal.dataobject.customerCompany.CustomerCompanyDO; +import cn.iocoder.yudao.module.cms.dal.mysql.customerCompany.CustomerCompanyMapper; +import cn.iocoder.yudao.module.cms.service.extContract.ExtContractService; +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.system.api.user.AdminUserApi; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory.vo.*; +import cn.iocoder.yudao.module.cms.dal.dataobject.extcontracthistory.ExtContractHistoryDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.cms.dal.mysql.extcontracthistory.ExtContractHistoryMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS; + +/** + * 外部合同历史 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class ExtContractHistoryServiceImpl implements ExtContractHistoryService { + + @Resource + private ExtContractHistoryMapper extContractHistoryMapper; + + @Resource + private ProjectApi projectApi; + + @Resource + private AdminUserApi adminUserApi; + + @Resource + private CustomerCompanyMapper customerCompanyMapper; + + @Resource + private ExtContractService extContractService; + + @Override + public void updateExtContractHistory(Long loginUserId,ExtContractHistorySaveReqVO updateReqVO) { + //校验 + if (updateReqVO == null) { + throw exception(PARAM_NOT_EXISTS); + } + + validateExtContractHistoryExists(updateReqVO.getId()); + projectApi.validProjectExist(updateReqVO.getProjectId()); + String userName = adminUserApi.getUser(loginUserId).getNickname(); + if (userName == null) { + throw exception(USER_NOT_EXISTS); + } + //校验customer_id contract_id extract_id + + + // 更新 + ExtContractHistoryDO updateObj = BeanUtils.toBean(updateReqVO, ExtContractHistoryDO.class); + updateObj.setUpdater(userName); + extContractHistoryMapper.updateById(updateObj); + } + + @Override + public ExtContractHistoryRespVO getExtContractHistory(Long id) { + //校验 + if (id == null) { + throw exception(EXT_CONTRACT_NOT_EXISTS); + } + + ExtContractHistoryDO extContractHistoryDO = extContractHistoryMapper.selectById(id); + if (extContractHistoryDO == null) { + throw exception(EXT_CONTRACT_NOT_EXISTS); + } + + Long projectId = extContractHistoryDO.getProjectId(); + if (projectApi.getProject(projectId) == null) { + throw exception(PROJECT_NOT_EXISTS); + } + + Long customerCompanyId = extContractHistoryDO.getCustomerCompanyId(); + ExtContractHistoryRespVO HistoryResp = BeanUtils.toBean(extContractHistoryDO, ExtContractHistoryRespVO.class); + + + ProjectRespDTO project = projectApi.getProject(projectId); + HistoryResp.setCode(project.getCode()); + + ProjectDetailRespDTO projectDetail = projectApi.getProjectDetailById(projectId); + HistoryResp.setTrackingDep(projectDetail.getTrackingDepName()); + HistoryResp.setProjectManager(projectDetail.getProjectManagerName()); + + //用客户公司id查询 + CustomerCompanyDO customerCompanyDO = customerCompanyMapper.selectById(customerCompanyId); + String name = customerCompanyDO.getName(); + HistoryResp.setCustomerCompanyName(name); + + + //合同总金额 + + BigDecimal contractAmount = extContractService.getContractAmountById(id); + HistoryResp.setAmount(contractAmount); + + //合同商议提示 // TODO 待优化 + HistoryResp.setExReminderTime(null); + + return HistoryResp; + } + + @Override + public PageResult getExtContractHistoryPage(ExtContractHistoryPageReqVO pageReqVO) { + //校验 + if (pageReqVO == null) { + throw exception(PARAM_NOT_EXISTS); + } + + Long projectId = pageReqVO.getProjectId(); + ProjectRespDTO project = projectApi.getProject(projectId); + if (project == null) { + throw exception(PROJECT_NOT_EXISTS); + } + + PageResult extContractHistoryPageResult = extContractHistoryMapper.selectPage(pageReqVO); + List pageResultList = extContractHistoryPageResult.getList(); + List contractHistoryRespVOS = new ArrayList<>(); + + + for (ExtContractHistoryDO extContractHistoryDO : pageResultList) { + Long id = extContractHistoryDO.getId(); + ExtContractHistoryRespVO extContractHistory = getExtContractHistory(id); + contractHistoryRespVOS.add(extContractHistory); + } + + PageResult pageResult = new PageResult<>(); + pageResult.setList(contractHistoryRespVOS); + return pageResult; + } + + + private void validateExtContractHistoryExists(Long id) { + if (extContractHistoryMapper.selectById(id) == null) { + throw exception(EXT_CONTRACT_HISTORY_NOT_EXISTS); + } + } +} \ No newline at end of file