diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/contractHistory/ContractHistoryController.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/contractHistory/ContractHistoryController.java index cc52ac736..58eac8050 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/contractHistory/ContractHistoryController.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/contractHistory/ContractHistoryController.java @@ -1,10 +1,7 @@ package cn.iocoder.yudao.module.cms.controller.admin.contractHistory; import cn.iocoder.yudao.framework.common.util.file.FileUtils; -import cn.iocoder.yudao.module.cms.controller.admin.extcontracthistory.vo.ExtContractHistoryRespVO; import cn.iocoder.yudao.module.cms.dal.dataobject.contractHistory.ContractHistoryDetailDO; -import cn.iocoder.yudao.module.cms.dal.dataobject.extcontracthistory.ExtContractHistoryDetailDO; import cn.iocoder.yudao.module.cms.service.contractHistory.ContractHistoryService; -import org.checkerframework.checker.units.qual.C; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; 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 bc1f4d3aa..ca539019e 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 @@ -7,11 +7,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.file.FileUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractRespVO; +import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractProcessInstanceRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractPageReqVO; +import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractProcessInstanceRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractSaveReqVO; -import cn.iocoder.yudao.module.cms.dal.dataobject.extcontract.ExtContractDetailDO; import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDetailDO; import cn.iocoder.yudao.module.cms.service.outscontract.OutsContractService; import io.swagger.v3.oas.annotations.Operation; @@ -97,4 +97,19 @@ public class OutsContractController { ExcelUtils.write(response, "外包合同.xls", "数据", OutsContractRespVO.class, BeanUtils.toBean(list, OutsContractRespVO.class)); } + @PostMapping("/create_process") + @Operation(summary = "创建流程") + @PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:create')") + public CommonResult createExtContractProcess(@RequestParam("id") Long id) { + String processId = outsContractService.createProcess(getLoginUserId(), id); + return success(processId); + } + + @PostMapping("/get_process") + @Operation(summary = "查询流程") + @PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:create')") + public CommonResult getExtContractProcessInstance(@RequestParam("id") Long id) { + OutsContractProcessInstanceRespVO process = outsContractService.getProcess(id); + return success(process); + } } \ 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/OutsContractProcessInstanceRespVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractProcessInstanceRespVO.java new file mode 100644 index 000000000..605d4ead5 --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/outscontract/vo/OutsContractProcessInstanceRespVO.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 外部合同 Response VO") +@Data +@ExcelIgnoreUnannotated +public class OutsContractProcessInstanceRespVO { + + + @Schema(description = "流程名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String processName; + + @Schema(description = "流程实例的状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer processStatus; // 参见 BpmProcessInstanceStatusEnum 枚举 + + @Schema(description = "发起时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime startTime; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime endTime; + + @Schema(description = "持续时间", example = "1000") + private Long durationInMillis; + + /** + * 发起流程的用户 + */ + private User startUser; + + /** + * 当前审批中的任务 + */ + private List tasks; // 仅在流程实例分页才返回 + + @Schema(description = "用户信息") + @Data + public static class User { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + private String nickname; + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long deptId; + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部") + private String deptName; + + } + + @Schema(description = "流程任务") + @Data + public static class Task { + + @Schema(description = "流程任务的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + } +} \ 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 index 8143e15c7..1117e7f4f 100644 --- 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 @@ -80,7 +80,7 @@ public class OutsContractRespVO { @Schema(description = "外包合同编号") @ExcelProperty("外包合同编号") - private Integer OutsCode; + private Integer outsCode; @Schema(description = "最终外包金额") @ExcelProperty("最终外包金额") 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 index 469987c9a..36a02f1f2 100644 --- 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 @@ -60,7 +60,7 @@ public class OutsContractSaveReqVO { @Schema(description = "外包合同编号") @ExcelProperty("外包合同编号") - private Integer OutsCode; + private Integer outsCode; @Schema(description = "最终外包金额") @ExcelProperty("最终外包金额") 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..d06b51077 --- /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,80 @@ +package cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory; + +import cn.iocoder.yudao.module.cms.service.outscontracthistory.OutsContractHistoryService; +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.outscontracthistory.vo.*; +import cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory.OutsContractHistoryDO; + +@Tag(name = "管理后台 - 外包合同历史") +@RestController +@RequestMapping("/cms/outs-contract-history") +@Validated +public class OutsContractHistoryController { + + @Resource + private OutsContractHistoryService outsContractHistoryService; + + + @PutMapping("/update") + @Operation(summary = "更新外包合同历史") + @PreAuthorize("@ss.hasPermission('cms:outs-contract-history:update')") + public CommonResult updateOutsContractHistory(@Valid @RequestBody OutsContractHistorySaveReqVO updateReqVO) { + outsContractHistoryService.updateOutsContractHistory(getLoginUserId(),updateReqVO); + 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..637fe6854 --- /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,39 @@ +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 = "主合同id", example = "19949") + private Long contractId; + + @Schema(description = "类型", example = "1") + private String countType; + + @Schema(description = "专业") + private String major; + + + @Schema(description = "流程状态", example = "2") + private Integer processStatus; + + @Schema(description = "外包合同id", example = "24736") + private Long outsContractId; + + +} \ 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..6e85bf8f1 --- /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,107 @@ +package cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.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 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 = "主合同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(value = "专业", converter = DictConvert.class) + @DictFormat("major") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String major; + + @Schema(description = "签订时间") + @ExcelProperty("签订时间") + private LocalDateTime signingTime; + + @Schema(description = "合同文件url", example = "https://www.iocoder.cn") + @ExcelProperty("合同文件url") + private String contractFileUrl; + + @Schema(description = "创建者") + @ExcelProperty("创建者") + private String creator; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "更新者") + @ExcelProperty("更新者") + private String updater; + + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("更新时间") + private LocalDateTime updateTime; + + @Schema(description = "是否删除", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否删除") + private Boolean deleted; + + @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5952") + @ExcelProperty("租户编号") + private Long tenantId; + + @Schema(description = "流程状态", example = "2") + @ExcelProperty("流程状态") + private Integer processStatus; + + @Schema(description = "外包合同id", example = "24736") + @ExcelProperty("外包合同id") + private Long outsContractId; + + @Schema(description = "版本") + @ExcelProperty("版本") + private String version; + + @Schema(description = "外包单位") + @ExcelProperty("外包单位") + private String outsCompany; + + @Schema(description = "外包合同金额") + @ExcelProperty("外包合同金额") + private BigDecimal outsAmount; + + @Schema(description = "外包合同编号") + @ExcelProperty("外包合同编号") + private Integer outsCode; + + @Schema(description = "最终外包金额") + @ExcelProperty("最终外包金额") + private BigDecimal finalAmount; + + @Schema(description = "最后编辑人") + @ExcelProperty("最后编辑人") + private String finalEditor; + + @Schema(description = "流程实体id", example = "542") + @ExcelProperty("流程实体id") + private String processInstanceId; + +} \ 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..3850bd9b2 --- /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,62 @@ +package cn.iocoder.yudao.module.cms.controller.admin.outscontracthistory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +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 = "主合同id", example = "19949") + private Long contractId; + + @Schema(description = "类型", example = "1") + private String countType; + + @Schema(description = "专业") + private String major; + + @Schema(description = "签订时间") + private LocalDateTime signingTime; + + @Schema(description = "合同文件url", example = "https://www.iocoder.cn") + private String contractFileUrl; + + @Schema(description = "流程状态", example = "2") + private Integer processStatus; + + @Schema(description = "外包合同id", example = "24736") + private Long outsContractId; + + @Schema(description = "版本") + private String version; + + @Schema(description = "外包单位") + private String outsCompany; + + @Schema(description = "外包合同金额") + private BigDecimal outsAmount; + + @Schema(description = "外包合同编号") + private Integer outsCode; + + @Schema(description = "最终外包金额") + private BigDecimal finalAmount; + + @Schema(description = "最后编辑人") + private String finalEditor; + + @Schema(description = "流程实体id", example = "542") + private String processInstanceId; + +} \ 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 index adb1a31a5..ae0cff63d 100644 --- 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 @@ -38,12 +38,10 @@ public class OutsContractDO extends BaseDO { private Long contractId; /** * 类型 - * 枚举 {@link cn.iocoder.yudao.module.cms.enums.DictTypeConstants} */ private String countType; /** * 专业 - * 枚举 {@link cn.iocoder.yudao.module.cms.enums.DictTypeConstants}3 */ private String major; /** @@ -65,7 +63,7 @@ public class OutsContractDO extends BaseDO { /** * 外包合同编号 */ - private Integer OutsCode; + private Integer outsCode; /** * 最终外包金额 */ 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 index b4f2624b9..3bb07ca57 100644 --- 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 @@ -1,13 +1,12 @@ package cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; -import java.math.BigDecimal; import java.time.LocalDateTime; +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; /** * 外包合同历史 DO @@ -33,47 +32,23 @@ public class OutsContractHistoryDO extends BaseDO { * 项目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 */ @@ -81,7 +56,7 @@ public class OutsContractHistoryDO extends BaseDO { /** * 流程状态 */ - private String processStatus; + private Integer processStatus; /** * 外包合同id */ @@ -90,5 +65,29 @@ public class OutsContractHistoryDO extends BaseDO { * 版本 */ private String version; + /** + * 外包单位 + */ + private String outsCompany; + /** + * 外包合同金额 + */ + private BigDecimal outsAmount; + /** + * 外包合同编号 + */ + private Integer outsCode; + /** + * 最终外包金额 + */ + private BigDecimal finalAmount; + /** + * 最后编辑人 + */ + private String finalEditor; + /** + * 流程实体id + */ + private String processInstanceId; } \ 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/OutsContractHistoryDetailDO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontracthistory/OutsContractHistoryDetailDO.java new file mode 100644 index 000000000..6d76a7728 --- /dev/null +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/outscontracthistory/OutsContractHistoryDetailDO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 外包合同 DO + * + * @author zqc + */ +@Data +public class OutsContractHistoryDetailDO extends OutsContractHistoryDO { + /** + * 合同名称 + */ + private String name; + + /** + * 主控部门 + */ + private String trackingDep; + + /** + * 项目经理 + */ + private String projectManager; + + /** + * 签订合同总额 + */ + private BigDecimal amount; + + +} \ 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..60ff4faef --- /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,31 @@ +package cn.iocoder.yudao.module.cms.dal.mysql.outscontracthistory; + + +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()) + .eqIfPresent(OutsContractHistoryDO::getContractId, reqVO.getContractId()) + .eqIfPresent(OutsContractHistoryDO::getCountType, reqVO.getCountType()) + .eqIfPresent(OutsContractHistoryDO::getMajor, reqVO.getMajor()) + .eqIfPresent(OutsContractHistoryDO::getProcessStatus, reqVO.getProcessStatus()) + .eqIfPresent(OutsContractHistoryDO::getOutsContractId, reqVO.getOutsContractId()) + + ); + } + +} \ 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 44ee1b9c1..1d088f06f 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 @@ -216,7 +216,8 @@ public class ContractServiceImpl implements ContractService { BpmProcessInstanceGetRespDTO processInstance = processInstanceApi.getProcessInstance(processInstanceId); ContractProcessInstanceRespVO contractProcessInstanceRespVO = new ContractProcessInstanceRespVO(); BeanUtil.copyProperties(processInstance, contractProcessInstanceRespVO); - contractHistoryDO.setProcessStatus(processInstance.getStatus()); + + contractHistoryMapper.updateById(contractHistoryDO.setProcessStatus(processInstance.getStatus())); //其他具体信息可以从bpm里面调用 diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/contractHistory/ContractHistoryService.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/contractHistory/ContractHistoryService.java index 6a057237d..ba9e4963e 100644 --- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/contractHistory/ContractHistoryService.java +++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/contractHistory/ContractHistoryService.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.cms.service.contractHistory; import cn.iocoder.yudao.module.cms.dal.dataobject.contractHistory.ContractHistoryDetailDO; import jakarta.validation.*; import cn.iocoder.yudao.module.cms.controller.admin.contractHistory.vo.*; -import cn.iocoder.yudao.module.cms.dal.dataobject.contractHistory.ContractHistoryDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; /** @@ -19,8 +18,6 @@ public interface ContractHistoryService { * @param updateReqVO 更新信息 */ void updateContractHistory(Long loginUserId,@Valid ContractHistorySaveReqVO updateReqVO); - - /** * 获得历史合同基本信息 * @param id 合同id 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 b5f628854..479e371eb 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 @@ -200,7 +200,8 @@ public class ExtContractServiceImpl implements ExtContractService { BpmProcessInstanceGetRespDTO processInstance = processInstanceApi.getProcessInstance(processInstanceId); ExtContractProcessInstanceRespVO extContractProcessInstanceRespVO = new ExtContractProcessInstanceRespVO(); BeanUtil.copyProperties(processInstance, extContractProcessInstanceRespVO); - extContractHistoryDO.setProcessStatus(processInstance.getStatus()); + + extContractHistoryMapper.updateById(extContractHistoryDO.setProcessStatus(processInstance.getStatus())); //其他具体信息可以从bpm里面调用 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 index dc98ce871..2e4f5572e 100644 --- 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 @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.cms.service.outscontract; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractPageReqVO; +import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractProcessInstanceRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractSaveReqVO; import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDetailDO; @@ -22,14 +23,14 @@ public interface OutsContractService { * @param createReqVO 创建信息 * @return 编号 */ - Long createOutsContract(Long loginUserId,@Valid OutsContractSaveReqVO createReqVO); + Long createOutsContract(Long loginUserId, @Valid OutsContractSaveReqVO createReqVO); /** * 更新外包合同 * * @param updateReqVO 更新信息 */ - void updateOutsContract(Long loginUserId,@Valid OutsContractSaveReqVO updateReqVO); + void updateOutsContract(Long loginUserId, @Valid OutsContractSaveReqVO updateReqVO); /** * 删除外包合同 @@ -55,4 +56,18 @@ public interface OutsContractService { PageResult getOutsContractPage(OutsContractPageReqVO pageReqVO); + /** + * 创建流程 + * @param loginUserId 当前登录用户id + * @param id 外包合同id + * @return 新的流程id + */ + String createProcess(Long loginUserId, Long id); + + /** + * 查询流程 + * @param id 外包合同id + * @return + */ + OutsContractProcessInstanceRespVO getProcess(Long id); } \ 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 index 5e761cac7..b80b2f9b8 100644 --- 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 @@ -2,14 +2,23 @@ package cn.iocoder.yudao.module.cms.service.outscontract; import cn.hutool.core.bean.BeanUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.file.FileUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceGetRespDTO; +import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractProcessInstanceRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractPageReqVO; +import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractProcessInstanceRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractSaveReqVO; import cn.iocoder.yudao.module.cms.dal.dataobject.contract.ContractDO; +import cn.iocoder.yudao.module.cms.dal.dataobject.extcontracthistory.ExtContractHistoryDO; import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO; import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDetailDO; +import cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory.OutsContractHistoryDO; import cn.iocoder.yudao.module.cms.dal.mysql.outscontract.OutsContractMapper; +import cn.iocoder.yudao.module.cms.dal.mysql.outscontracthistory.OutsContractHistoryMapper; import cn.iocoder.yudao.module.cms.service.contract.ContractService; import cn.iocoder.yudao.module.pms.api.projectschedule.ProjectScheduleApi; import cn.iocoder.yudao.module.pms.api.projectschedule.dto.ProjectScheduleDetailDTO; @@ -24,6 +33,7 @@ import java.util.ArrayList; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_INSTANCE_NOT_END; import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*; /** @@ -34,6 +44,12 @@ import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*; @Service @Validated public class OutsContractServiceImpl implements OutsContractService { + + /** + * 外包合同合同审批流程定义 + */ + public static final String PROCESS_KEY = "outs_contract_init"; + @Resource private OutsContractMapper outsContractMapper; @@ -49,26 +65,58 @@ public class OutsContractServiceImpl implements OutsContractService { @Resource private ProjectScheduleApi projectScheduleApi; + @Resource + private OutsContractHistoryMapper outsContractHistoryMapper; + + @Resource + private BpmProcessInstanceApi bpmProcessInstanceApi; + @Override public Long createOutsContract(Long loginUserId,OutsContractSaveReqVO createReqVO) { String userName = adminUserApi.getUser(loginUserId).getNickname(); - //校验,项目是否存在 + //校验合同是否存在 Long contractId = createReqVO.getContractId(); - List outsContractList = outsContractMapper.selectList("contract_id", contractId); - for (OutsContractDO outsContractDO : outsContractList) { - String major = outsContractDO.getMajor(); - if (createReqVO.getMajor().equals(major)){ + contractService.validateContractExists(contractId); + String major = createReqVO.getMajor(); + ////校验项目是否存在 + Long projectId = createReqVO.getProjectId(); + projectTrackingApi.validateProjectExists(projectId); + List outsContractDOList = outsContractMapper.selectList("contract_id", contractId); + for (OutsContractDO outsContractDO : outsContractDOList) { + if (outsContractDO.getMajor().equals(major)) { throw exception(OUTS_CONTRACT_EXISTS); } } + OutsContractDO outsContract = BeanUtils.toBean(createReqVO, OutsContractDO.class); + outsContract.setContractFileUrl(FileUtils.covertFileToJSONString(createReqVO.getContractFileUrl())); + outsContract.setCreator(userName); + outsContract.setUpdater(userName); + //也要插入历史 + OutsContractHistoryDO outsContractHistoryDO = BeanUtils.toBean(outsContract, OutsContractHistoryDO.class); + outsContractMapper.insert(outsContract); + outsContractHistoryDO.setOutsContractId(outsContract.getId()); + //版本 + if (outsContractHistoryMapper.selectCount("project_id", createReqVO.getProjectId()) < 1) { + outsContractHistoryDO.setVersion("1"); + } else { + outsContractHistoryDO.setVersion(String.valueOf(outsContractHistoryMapper.selectCount("project_id", createReqVO.getProjectId()) + 1)); + } + //状态 + outsContractHistoryDO.setProcessStatus(1); + outsContractHistoryMapper.insert(outsContractHistoryDO); + + // 启动流程 + if (createReqVO.getId() == null) { + String processInstanceId = bpmProcessInstanceApi.createProcessInstance(loginUserId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setBusinessKey(String.valueOf(outsContract.getId()))); + // 写入工作流编号 + outsContractHistoryMapper.updateById(outsContractHistoryDO.setProcessInstanceId(processInstanceId)); + } - OutsContractDO outsContractDO = BeanUtils.toBean(createReqVO, OutsContractDO.class); - outsContractDO.setCreator(userName); - outsContractDO.setUpdater(userName); - outsContractMapper.insert(outsContractDO); //返回 - return outsContractDO.getId(); + return outsContract.getId(); } @Override @@ -130,12 +178,50 @@ public class OutsContractServiceImpl implements OutsContractService { OutsContractDetailDO outsContractDetail = getOutsContractDetail(id); outsContractDetailDOS.add(outsContractDetail); } + List respVOS = BeanUtils.toBean(outsContractDetailDOS, OutsContractRespVO.class); PageResult pageResult = new PageResult<>(); pageResult.setList(respVOS); return pageResult; } + @Override + public String createProcess(Long loginUserId, Long id) { + //拿出该合同的当前流程 + OutsContractHistoryDO outsContractHistoryDO = outsContractHistoryMapper.selectOne("outs_contract_id", id); + String processInstanceId0 = outsContractHistoryDO.getProcessInstanceId(); + //流程引擎里的最新状态 + Integer status = bpmProcessInstanceApi.getProcessInstance(processInstanceId0).getStatus(); + if (status == 1) { + throw exception(PROCESS_INSTANCE_NOT_END); + } + + //创建新的流程 + String processInstanceId = bpmProcessInstanceApi.createProcessInstance(loginUserId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setBusinessKey(String.valueOf(id))); + // 写入工作流编号 + outsContractHistoryMapper.updateById(outsContractHistoryDO.setProcessInstanceId(processInstanceId).setProcessStatus(1)); + + return processInstanceId; + } + + @Override + public OutsContractProcessInstanceRespVO getProcess(Long id) { + OutsContractHistoryDO outsContractHistory = outsContractHistoryMapper.selectOne("outs_contract_id", id); + String processInstanceId = outsContractHistory.getProcessInstanceId(); + BpmProcessInstanceGetRespDTO processInstance = bpmProcessInstanceApi.getProcessInstance(processInstanceId); + + OutsContractProcessInstanceRespVO outsContractProcessInstanceRespVO = new OutsContractProcessInstanceRespVO(); + BeanUtil.copyProperties(processInstance, outsContractProcessInstanceRespVO); + + outsContractHistoryMapper.updateById(outsContractHistory.setProcessStatus(processInstance.getStatus())); + + //其他具体信息可以从bpm里面调用 + + return outsContractProcessInstanceRespVO; + } + private void validateOutsContractExists(Long id) { if (outsContractMapper.selectById(id) == null) { 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..78f904006 --- /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,36 @@ +package cn.iocoder.yudao.module.cms.service.outscontracthistory; + +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; + +/** + * 外包合同历史 Service 接口 + * + * @author zqc + */ +public interface OutsContractHistoryService { + /** + * 更新外包合同历史 + * + * @param updateReqVO 更新信息 + */ + void updateOutsContractHistory(Long loginUserId,@Valid OutsContractHistorySaveReqVO updateReqVO); + /** + * 获得外包合同历史 + * + * @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..736cf4be5 --- /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,70 @@ +package cn.iocoder.yudao.module.cms.service.outscontracthistory; + +import cn.iocoder.yudao.module.cms.service.contract.ContractService; +import cn.iocoder.yudao.module.pms.api.projecttracking.ProjectTrackingApi; +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 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.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; + + @Resource + private ProjectTrackingApi projectTrackingApi; + + @Resource + private AdminUserApi adminUserApi; + + @Resource + private ContractService contractService; + + @Override + public void updateOutsContractHistory(Long loginUserId,OutsContractHistorySaveReqVO updateReqVO) { + //校验 + validateOutsContractHistoryExists(updateReqVO.getId()); + contractService.validateContractExists(updateReqVO.getContractId()); + projectTrackingApi.validateProjectExists(updateReqVO.getProjectId()); + String userName = adminUserApi.getUser(loginUserId).getNickname(); + // 更新 + OutsContractHistoryDO updateObj = BeanUtils.toBean(updateReqVO, OutsContractHistoryDO.class); + updateObj.setUpdater(userName); + outsContractHistoryMapper.updateById(updateObj); + } + + @Override + public OutsContractHistoryDO getOutsContractHistory(Long id) { + return outsContractHistoryMapper.selectById(id); + } + + @Override + public PageResult getOutsContractHistoryPage(OutsContractHistoryPageReqVO pageReqVO) { + return outsContractHistoryMapper.selectPage(pageReqVO); + } + + private void validateOutsContractHistoryExists(Long id) { + if (outsContractHistoryMapper.selectById(id) == null) { + throw exception(OUTS_CONTRACT_HISTORY_NOT_EXISTS); + } + } + +} \ No newline at end of file