[feat] 新增合同管理的流程管理 新增合同历史管理

This commit is contained in:
wyw 2024-08-21 11:05:57 +08:00
parent 30fccdb444
commit 33240916f9
9 changed files with 66 additions and 87 deletions
yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms

@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractPageReqV
import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractProcessInstanceRespVO; import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractProcessInstanceRespVO;
import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractRespVO; import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractRespVO;
import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractSaveReqVO; import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractSaveReqVO;
import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractProcessInstanceRespVO;
import cn.iocoder.yudao.module.cms.dal.dataobject.contract.ContractDetailDO; import cn.iocoder.yudao.module.cms.dal.dataobject.contract.ContractDetailDO;
import cn.iocoder.yudao.module.cms.service.contract.ContractService; import cn.iocoder.yudao.module.cms.service.contract.ContractService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -113,7 +112,7 @@ public class ContractController {
@PostMapping("/get_process") @PostMapping("/get_process")
@Operation(summary = "查询流程") @Operation(summary = "查询流程")
@PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:create')") @PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:create')")
public CommonResult<ContractProcessInstanceRespVO> getExtContractProcessInstance(@RequestParam("id") Long id) { public CommonResult<ContractProcessInstanceRespVO> getContractProcessInstance(@RequestParam("id") Long id) {
ContractProcessInstanceRespVO process = contractService.getProcess(id); ContractProcessInstanceRespVO process = contractService.getProcess(id);
return success(process); return success(process);
} }

@ -1,5 +1,10 @@
package cn.iocoder.yudao.module.cms.controller.admin.contractHistory; 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 cn.iocoder.yudao.module.cms.service.contractHistory.ContractHistoryService;
import org.checkerframework.checker.units.qual.C;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -51,8 +56,13 @@ public class ContractHistoryController {
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('cms:contract-history:query')") @PreAuthorize("@ss.hasPermission('cms:contract-history:query')")
public CommonResult<ContractHistoryRespVO> getContractHistory(@RequestParam("id") Long id) { public CommonResult<ContractHistoryRespVO> getContractHistory(@RequestParam("id") Long id) {
ContractHistoryRespVO contractHistory = contractHistoryService.getContractHistory(id); ContractHistoryDetailDO contractHistoryDetailDO = contractHistoryService.getContractDetail(id);
return success(contractHistory); ContractHistoryRespVO contractHistoryRespVO = new ContractHistoryRespVO();
org.springframework.beans.BeanUtils.copyProperties(contractHistoryDetailDO, contractHistoryRespVO, "contractFileUrl", "reviewFileUrl");
contractHistoryRespVO.setReviewFileUrl(FileUtils.covertJSONStringToFile(contractHistoryDetailDO.getReviewFileUrl()));
contractHistoryRespVO.setContractFileUrl(FileUtils.covertJSONStringToFile(contractHistoryDetailDO.getContractFileUrl()));
return success(contractHistoryRespVO);
} }
@GetMapping("/page") @GetMapping("/page")

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.cms.controller.admin.contractHistory.vo; package cn.iocoder.yudao.module.cms.controller.admin.contractHistory.vo;
import cn.iocoder.yudao.framework.common.pojo.FileDTO; import cn.iocoder.yudao.framework.common.pojo.FileDTO;
import cn.iocoder.yudao.module.cms.enums.DictTypeConstants;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
@ -64,7 +65,7 @@ public class ContractHistoryRespVO {
@Schema(description = "合同类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @Schema(description = "合同类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty(value = "合同类型", converter = DictConvert.class) @ExcelProperty(value = "合同类型", converter = DictConvert.class)
@DictFormat("contract_type") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中 @DictFormat(DictTypeConstants.CONTRACT_TYPE)
private String type; private String type;
@Schema(description = "合同进展", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "合同进展", requiredMode = Schema.RequiredMode.REQUIRED)
@ -89,12 +90,12 @@ public class ContractHistoryRespVO {
@Schema(description = "合同状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @Schema(description = "合同状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "合同状态", converter = DictConvert.class) @ExcelProperty(value = "合同状态", converter = DictConvert.class)
@DictFormat("contract_status") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中 @DictFormat(DictTypeConstants.CONTRACT_STATUS)
private String status; private String status;
@Schema(description = "计费方式", example = "2") @Schema(description = "计费方式", example = "2")
@ExcelProperty(value = "计费方式", converter = DictConvert.class) @ExcelProperty(value = "计费方式", converter = DictConvert.class)
@DictFormat("contract_billing_type") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中 @DictFormat(DictTypeConstants.CONTRACT_TYPE)
private String countType; private String countType;
@Schema(description = "合同url", example = "https://www.iocoder.cn") @Schema(description = "合同url", example = "https://www.iocoder.cn")
@ -107,7 +108,7 @@ public class ContractHistoryRespVO {
@Schema(description = "资金来源") @Schema(description = "资金来源")
@ExcelProperty(value = "资金来源", converter = DictConvert.class) @ExcelProperty(value = "资金来源", converter = DictConvert.class)
@DictFormat("funds_source") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中 @DictFormat(DictTypeConstants.SOURCE)
private String source; private String source;
@Schema(description = "是否联合体") @Schema(description = "是否联合体")
@ -126,25 +127,6 @@ public class ContractHistoryRespVO {
@ExcelProperty("审核文件url") @ExcelProperty("审核文件url")
private List<FileDTO> reviewFileUrl; private List<FileDTO> reviewFileUrl;
@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 = "24897")
@ExcelProperty("租户编号")
private Long tenantId;
@Schema(description = "签订合同总额") @Schema(description = "签订合同总额")
@ExcelProperty("签订合同总额") @ExcelProperty("签订合同总额")
@ -152,7 +134,7 @@ public class ContractHistoryRespVO {
@Schema(description = "流程状态", example = "2") @Schema(description = "流程状态", example = "2")
@ExcelProperty(value = "流程状态", converter = DictConvert.class) @ExcelProperty(value = "流程状态", converter = DictConvert.class)
@DictFormat("bpm_process_instance_status") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中 @DictFormat(DictTypeConstants.PROCESS_STATUS)
private Integer processStatus; private Integer processStatus;
@Schema(description = "版本") @Schema(description = "版本")

@ -101,7 +101,7 @@ public class ContractHistorySaveReqVO {
@Schema(description = "最后编辑人") @Schema(description = "最后编辑人")
private String finalEditor; private String finalEditor;
@Schema(description = "合同", requiredMode = Schema.RequiredMode.REQUIRED, example = "24519") @Schema(description = "合同id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24519")
@NotNull(message = "合同不能为空") @NotNull(message = "合同不能为空")
private Long contractId; private Long contractId;

@ -53,12 +53,12 @@ public class ExtContractHistoryController {
@PreAuthorize("@ss.hasPermission('cms:ext-contract-history:query')") @PreAuthorize("@ss.hasPermission('cms:ext-contract-history:query')")
public CommonResult<ExtContractHistoryRespVO> getExtContractHistory(@RequestParam("id") Long id) { public CommonResult<ExtContractHistoryRespVO> getExtContractHistory(@RequestParam("id") Long id) {
ExtContractHistoryDetailDO extContractHistoryDetail = extContractHistoryService.getContractDetail(id); ExtContractHistoryDetailDO extContractHistoryDetail = extContractHistoryService.getContractDetail(id);
ExtContractHistoryRespVO contractHistoryRespVO = new ExtContractHistoryRespVO(); ExtContractHistoryRespVO extContractHistoryRespVO = new ExtContractHistoryRespVO();
org.springframework.beans.BeanUtils.copyProperties(extContractHistoryDetail, contractHistoryRespVO, "contractFileUrl", "reviewFileUrl"); org.springframework.beans.BeanUtils.copyProperties(extContractHistoryDetail, extContractHistoryRespVO, "contractFileUrl", "reviewFileUrl");
contractHistoryRespVO.setReviewFileUrl(FileUtils.covertJSONStringToFile(extContractHistoryDetail.getReviewFileUrl())); extContractHistoryRespVO.setReviewFileUrl(FileUtils.covertJSONStringToFile(extContractHistoryDetail.getReviewFileUrl()));
contractHistoryRespVO.setContractFileUrl(FileUtils.covertJSONStringToFile(extContractHistoryDetail.getContractFileUrl())); extContractHistoryRespVO.setContractFileUrl(FileUtils.covertJSONStringToFile(extContractHistoryDetail.getContractFileUrl()));
return success(contractHistoryRespVO); return success(extContractHistoryRespVO);
} }
@GetMapping("/page") @GetMapping("/page")

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.cms.service.contractHistory; package cn.iocoder.yudao.module.cms.service.contractHistory;
import cn.iocoder.yudao.module.cms.dal.dataobject.contractHistory.ContractHistoryDetailDO;
import jakarta.validation.*; import jakarta.validation.*;
import cn.iocoder.yudao.module.cms.controller.admin.contractHistory.vo.*; import cn.iocoder.yudao.module.cms.controller.admin.contractHistory.vo.*;
import cn.iocoder.yudao.module.cms.dal.dataobject.contractHistory.ContractHistoryDO; import cn.iocoder.yudao.module.cms.dal.dataobject.contractHistory.ContractHistoryDO;
@ -19,14 +20,13 @@ public interface ContractHistoryService {
*/ */
void updateContractHistory(Long loginUserId,@Valid ContractHistorySaveReqVO updateReqVO); void updateContractHistory(Long loginUserId,@Valid ContractHistorySaveReqVO updateReqVO);
/**
* 获得历史合同
*
* @param contractId 现有合同编号
* @return 历史合同
*/
ContractHistoryRespVO getContractHistory(Long contractId);
/**
* 获得历史合同基本信息
* @param id 合同id
* @return 历史合同基本信息
*/
ContractHistoryDetailDO getContractDetail(Long id);
/** /**
* 获得历史合同分页 * 获得历史合同分页
* *

@ -1,6 +1,11 @@
package cn.iocoder.yudao.module.cms.service.contractHistory; package cn.iocoder.yudao.module.cms.service.contractHistory;
import cn.hutool.core.bean.BeanUtil;
import cn.iocoder.yudao.module.cms.dal.dataobject.contractHistory.ContractHistoryDetailDO;
import cn.iocoder.yudao.module.cms.service.extContract.ExtContractService; import cn.iocoder.yudao.module.cms.service.extContract.ExtContractService;
import cn.iocoder.yudao.module.pms.api.projectschedule.ProjectScheduleApi;
import cn.iocoder.yudao.module.pms.api.projectschedule.dto.ProjectScheduleDetailDTO;
import cn.iocoder.yudao.module.pms.api.projecttracking.ProjectTrackingApi; import cn.iocoder.yudao.module.pms.api.projecttracking.ProjectTrackingApi;
import cn.iocoder.yudao.module.pms.api.projecttracking.dto.ProjectTrackingDetailDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -38,6 +43,9 @@ public class ContractHistoryServiceImpl implements ContractHistoryService {
@Resource @Resource
private ProjectTrackingApi projectTrackingApi; private ProjectTrackingApi projectTrackingApi;
@Resource
private ProjectScheduleApi projectScheduleApi;
@Override @Override
public void updateContractHistory(Long loginUserId,ContractHistorySaveReqVO updateReqVO) { public void updateContractHistory(Long loginUserId,ContractHistorySaveReqVO updateReqVO) {
@ -52,35 +60,42 @@ public class ContractHistoryServiceImpl implements ContractHistoryService {
contractHistoryMapper.updateById(updateObj); contractHistoryMapper.updateById(updateObj);
} }
@Override @Override
public ContractHistoryRespVO getContractHistory(Long id) { public ContractHistoryDetailDO getContractDetail(Long id) {
return null; ContractHistoryDetailDO contractHistoryDetailDO = new ContractHistoryDetailDO();
ContractHistoryDO contractHistoryDO = contractHistoryMapper.selectById(id);
//校验
if (contractHistoryDO == null) {
throw exception(CONTRACT_NOT_EXISTS);
}
Long extContractId = contractHistoryDO.getExtContractId();
Long projectId = contractHistoryDO.getProjectId();
projectTrackingApi.validateProjectExists(projectId);
ProjectScheduleDetailDTO projectScheduleDetail = projectScheduleApi.getProjectScheduleDetail(projectId);
ProjectTrackingDetailDTO projectTracking = projectTrackingApi.getProjectTracking(projectId);
contractHistoryDetailDO.setReminderTime(extContractService.getContractDetail(extContractId).getReminderTime());
BeanUtil.copyProperties(contractHistoryDO, contractHistoryDetailDO);
BeanUtil.copyProperties(projectTracking, contractHistoryDetailDO);
BeanUtil.copyProperties(projectScheduleDetail, contractHistoryDetailDO);
return contractHistoryDetailDO;
} }
@Override @Override
public PageResult<ContractHistoryRespVO> getContractHistoryPage(ContractHistoryPageReqVO pageReqVO) { public PageResult<ContractHistoryRespVO> getContractHistoryPage(ContractHistoryPageReqVO pageReqVO) {
//校验 PageResult<ContractHistoryDO> contractHistoryList = contractHistoryMapper.selectPage(pageReqVO);
if (pageReqVO == null) { List<ContractHistoryDO> list = contractHistoryList.getList();
throw exception(PARAM_NOT_EXISTS); List<ContractHistoryDetailDO> contractRespVOList = new ArrayList<>();
}
Long projectId = pageReqVO.getProjectId(); for (ContractHistoryDO contractHistoryDO : list) {
PageResult<ContractHistoryDO> contractHistoryDOPageResult = contractHistoryMapper.selectPage(pageReqVO);
List<ContractHistoryDO> pageResultList = contractHistoryDOPageResult.getList();
List<ContractHistoryRespVO> contractHistoryRespVOS = new ArrayList<>();
for (ContractHistoryDO contractHistoryDO : pageResultList) {
Long id = contractHistoryDO.getId(); Long id = contractHistoryDO.getId();
ContractHistoryRespVO contractHistory = getContractHistory(id); ContractHistoryDetailDO contractDetail = getContractDetail(id);
contractHistoryRespVOS.add(contractHistory); contractRespVOList.add(contractDetail);
} }
List<ContractHistoryRespVO> respVOList = BeanUtils.toBean(contractRespVOList, ContractHistoryRespVO.class);
PageResult<ContractHistoryRespVO> pageResult = new PageResult<>(); PageResult<ContractHistoryRespVO> pageResult = new PageResult<>();
pageResult.setList(contractHistoryRespVOS); pageResult.setList(respVOList);
return pageResult; return pageResult;
} }

@ -17,14 +17,6 @@ public interface ExtContractHistoryService {
* @param updateReqVO 更新信息 * @param updateReqVO 更新信息
*/ */
void updateExtContractHistory(Long loginUserId,@Valid ExtContractHistorySaveReqVO updateReqVO); void updateExtContractHistory(Long loginUserId,@Valid ExtContractHistorySaveReqVO updateReqVO);
/**
* 获得外部合同历史历史
*
* @param id 编号
* @return 外部合同历史历史
*/
ExtContractHistoryRespVO getExtContractHistory(Long id);
/** /**
* 获得外部合同历史历史分页 * 获得外部合同历史历史分页
* *

@ -66,25 +66,6 @@ public class ExtContractHistoryServiceImpl implements ExtContractHistoryService
extContractHistoryMapper.updateById(updateObj); 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();
return null;
}
@Override @Override
public PageResult<ExtContractHistoryRespVO> getExtContractHistoryPage(ExtContractHistoryPageReqVO pageReqVO) { public PageResult<ExtContractHistoryRespVO> getExtContractHistoryPage(ExtContractHistoryPageReqVO pageReqVO) {
PageResult<ExtContractHistoryDO> extContractHistoryPage = extContractHistoryMapper.selectPage(pageReqVO); PageResult<ExtContractHistoryDO> extContractHistoryPage = extContractHistoryMapper.selectPage(pageReqVO);