[feat] 新增合同管理中的流程查询功能

This commit is contained in:
wyw 2024-08-06 16:05:31 +08:00
parent fff41eda04
commit 579a647566
22 changed files with 671 additions and 31 deletions

View File

@ -2,8 +2,12 @@ package cn.iocoder.yudao.module.bpm.api.task;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceRespDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmTaskRespDTO;
import jakarta.validation.Valid;
import java.util.List;
/**
* 流程实例 Api 接口
*
@ -20,4 +24,20 @@ public interface BpmProcessInstanceApi {
*/
String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO);
/**
* 查询流程
*
* @param id 流程id
* @return
*/
BpmProcessInstanceRespDTO getProcessInstance(String id);
/**
* 查询指定流程的任务
* @param id 流程id
* @return
*/
List<BpmTaskRespDTO> getTask(String id);
}

View File

@ -0,0 +1,115 @@
package cn.iocoder.yudao.module.bpm.api.task.dto;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 流程定义
*/
@Data
public class BpmProcessDefinitionRespDTO {
/**
* 编号
*/
private String id;
/**
* 版本
*/
private Integer version;
/**
* 流程名称
*/
private String name;
/**
* 流程标识
*/
private String key;
/**
* 流程图标
*/
private String icon;
/**
* 流程描述
*/
private String description;
/**
* 流程分类
*/
private String category;
/**
* 流程分类名字
*/
private String categoryName;
/**
* 表单类型
*/
private Integer formType;
/**
* 表单编号
*/
private Long formId;
/**
* 表单名字
*/
private String formName;
/**
* 表单的配置
*/
private String formConf;
/**
* 表单项的数组
*/
private List<String> formFields;
/**
* 自定义表单的提交路径
*/
private String formCustomCreatePath;
/**
* 自定义表单的查看路径
*/
private String formCustomViewPath;
/**
* 中断状态-参见 SuspensionState 枚举
*/
private Integer suspensionState; // 参见 SuspensionState 枚举
/**
* 部署时间
*/
private LocalDateTime deploymentTime; // 需要从对应的 Deployment 读取非必须返回
/**
* BPMN XML
*/
private String bpmnXml; // 需要从对应的 BpmnModel 读取非必须返回
/**
* 发起用户需要选择审批人的任务数组
*/
private List<UserTask> startUserSelectTasks; // 需要从对应的 BpmnModel 读取非必须返回
@Data
public static class UserTask {
private String id;
private String name;
}
}

View File

@ -0,0 +1,118 @@
package cn.iocoder.yudao.module.bpm.api.task.dto;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 流程实例的获得 Resp DTO
*/
@Data
public class BpmProcessInstanceRespDTO {
/**
* 流程实例编号
*/
private String id;
/**
* 流程实例名称
*/
private String name;
/**
* 流程分类
*/
private String category;
/**
* 流程分类名称
*/
private String categoryName;
/**
* 流程实例状态
*/
private Integer status; // 参见 BpmProcessInstanceStatusEnum 枚举
/**
* 发起时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 持续时间
*/
private Long durationInMillis;
/**
* 发起流程的用户
*/
private User startUser;
/**
* 流程定义编号
*/
private String processDefinitionId;
/**
* 流程定义
*/
private BpmProcessDefinitionRespDTO processDefinition;
/**
* 当前审批中的任务
*/
private List<Task> tasks; // 仅在流程实例分页才返回
/**
* 用户信息
*/
@Data
public static class User {
/**
* 用户编号
*/
private Long id;
/**
* 用户名称
*/
private String nickname;
/**
* 部门编号
*/
private Long deptId;
/**
* 部门名称
*/
private String deptName;
}
/**
* 流程任务
*/
@Data
public static class Task {
/**
* 流程任务编号
*/
private String id;
/**
* 任务名称
*/
private String name;
}
}

View File

@ -0,0 +1,144 @@
package cn.iocoder.yudao.module.bpm.api.task.dto;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* 指定流程实例的任务
*/
@Data
public class BpmTaskRespDTO {
/**
* 任务编号
*/
private String id;
/**
* 任务名字
*/
private String name;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 持续时间
*/
private Long durationInMillis;
/**
* 任务状态
*/
private Integer status; // 参见 BpmTaskStatusEnum 枚举
/**
* 审批理由
*/
private String reason;
/**
* 负责人的用户信息
*/
private BpmProcessInstanceRespDTO.User ownerUser;
/**
* 审核的用户信息
*/
private BpmProcessInstanceRespDTO.User assigneeUser;
/**
* 任务定义的标识
*/
private String taskDefinitionKey;
/**
* 所属流程实例编号
*/
private String processInstanceId;
/**
* 所属流程实例
*/
private ProcessInstance processInstance;
/**
* 父任务编号
*/
private String parentTaskId;
/**
* 子任务列表由加签生成
*/
private List<BpmTaskRespDTO> children;
/**
* 表单编号
*/
private Long formId;
/**
* 表单名字
*/
private String formName;
/**
* 表单的配置-JSON 字符串
*/
private String formConf;
/**
* 表单项的数组
*/
private List<String> formFields;
/**
* 提交的表单值
*/
private Map<String, Object> formVariables;
/**
* 流程实例
*/
@Data
public static class ProcessInstance {
/**
* 流程实例编号
*/
private String id;
/**
* 流程实例名称
*/
private String name;
/**
* 提交时间
*/
private LocalDateTime createTime;
/**
* 流程定义的编号
*/
private String processDefinitionId;
/**
* 发起人的用户信息
*/
private BpmProcessInstanceRespDTO.User startUser;
}
}

View File

@ -1,13 +1,42 @@
package cn.iocoder.yudao.module.bpm.api.task;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceRespDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmTaskRespDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert;
import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService;
import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap;
/**
* Flowable 流程实例 Api 实现类
*
@ -21,8 +50,80 @@ public class BpmProcessInstanceApiImpl implements BpmProcessInstanceApi {
@Resource
private BpmProcessInstanceService processInstanceService;
@Resource
private AdminUserApi adminUserApi;
@Resource
private DeptApi deptApi;
@Resource
private BpmProcessDefinitionService processDefinitionService;
@Resource
private BpmTaskService taskService;
@Resource
private BpmFormService formService;
@Override
public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO) {
return processInstanceService.createProcessInstance(userId, reqDTO);
}
@Override
public BpmProcessInstanceRespDTO getProcessInstance(String id) {
HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(id);
if (processInstance == null) {
return null;
}
// 拼接返回
ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(
processInstance.getProcessDefinitionId());
BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.getProcessDefinitionInfo(
processInstance.getProcessDefinitionId());
String bpmnXml = BpmnModelUtils.getBpmnXml(
processDefinitionService.getProcessDefinitionBpmnModel(processInstance.getProcessDefinitionId()));
AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId()));
DeptRespDTO dept = null;
if (startUser != null) {
dept = deptApi.getDept(startUser.getDeptId());
}
BpmProcessInstanceRespVO bpmProcessInstanceRespVO = BpmProcessInstanceConvert.INSTANCE.buildProcessInstance(processInstance,
processDefinition, processDefinitionInfo, bpmnXml, startUser, dept);
return BeanUtils.toBean(bpmProcessInstanceRespVO, BpmProcessInstanceRespDTO.class);
}
//List<BpmTaskRespVO>
@Override
public List<BpmTaskRespDTO> getTask(String id) {
List<HistoricTaskInstance> taskList = taskService.getTaskListByProcessInstanceId(id);
if (CollUtil.isEmpty(taskList)) {
return null;
}
// 拼接数据
HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(id);
// 获得 User Dept Map
Set<Long> userIds = convertSetByFlatMap(taskList, task ->
Stream.of(NumberUtils.parseLong(task.getAssignee()), NumberUtils.parseLong(task.getOwner())));
userIds.add(NumberUtils.parseLong(processInstance.getStartUserId()));
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(
convertSet(userMap.values(), AdminUserRespDTO::getDeptId));
// 获得 Form Map
Map<Long, BpmFormDO> formMap = formService.getFormMap(
convertSet(taskList, task -> NumberUtils.parseLong(task.getFormKey())));
List<BpmTaskRespVO> bpmTaskRespVOS = BpmTaskConvert.INSTANCE.buildTaskListByProcessInstanceId(taskList, processInstance,
formMap, userMap, deptMap);
return BeanUtils.toBean(bpmTaskRespVOS, BpmTaskRespDTO.class);
}
}

View File

@ -20,6 +20,7 @@ public class BpmProcessInstanceRespVO {
@Schema(description = "流程分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private String category;
@Schema(description = "流程分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "请假")
private String categoryName;

View File

@ -12,11 +12,11 @@ import lombok.Getter;
@AllArgsConstructor
public enum ChargingStandardEnum {
//厦建设
XIA_BUILDING("xia_building","XB"),
XIA_BUILDING("0","xia_building"),
//包干价
LUMP("lump","LU"),
LUMP("1","lump"),
//其他省份
OTHER("other","OT");
OTHER("2","other");
/**
* 类型编号

View File

@ -12,15 +12,15 @@ import lombok.Getter;
@AllArgsConstructor
public enum ContractStatusEnum {
//应签未签
NO_SIGN("no_sign","NS"),
NO_SIGN("0","no_sign"),
//已拟定
PREPARED("prepared","PP"),
PREPARED("1","prepared"),
//已盖章
STAMP("stamp","ST"),
STAMP("2","stamp"),
//已签订
SIGN("sign","SI"),
SIGN("3","sign"),
//已终止
TERMINATION("termination","TE"),;
TERMINATION("4","termination"),;
/**
* 类型编号

View File

@ -12,13 +12,13 @@ import lombok.Getter;
@AllArgsConstructor
public enum ContractTypeEnum {
//勘察设计
SURVEY("survey","KS"),
SURVEY("0","survey"),
//检测
DETECTION("detection","JC"),
DETECTION("1","detection"),
//总承包合同
GENERAL_CONTRACT("general_contract","GC"),
GENERAL_CONTRACT("2","general_contract"),
//全过程咨询
PROCESS_CONSULTATION("process_consultation","PC");
PROCESS_CONSULTATION("3","process_consultation");
/**

View File

@ -12,9 +12,9 @@ import lombok.Getter;
@AllArgsConstructor
public enum CountTypeEnum {
//费率合同
RATE_CONTRACT("rate_contract","RC"),
RATE_CONTRACT("0","rate_contract"),
//包干合同
RES_CONTRACT("res_contract","RC");
RES_CONTRACT("1","res_contract");
/**
* 类型编号
*/

View File

@ -12,15 +12,15 @@ import lombok.Getter;
@AllArgsConstructor
public enum OutsContractMajorEnum {
//地勘
GROUND_SERVICE("ground_service","GE"),
GROUND_SERVICE("0","ground_service"),
//景观
SCENERY("scenery","SC"),
SCENERY("1","scenery"),
//建筑
ARCHITECTURE("architecture","AR"),
ARCHITECTURE("2","architecture"),
//测量
MEASURE("measure","ME"),
MEASURE("3","measure"),
//效果图
EFFECT_PICTURE("effect_picture","EF");
EFFECT_PICTURE("4","effect_picture");
/**
* 类型编号

View File

@ -12,11 +12,11 @@ import lombok.Getter;
@AllArgsConstructor
public enum ProcessStatusEnum {
//未执行
NO_EXECUTION("0","NO_EXECUTION"),
NO_EXECUTION("0","no_execution"),
//正在执行
EXECUTING("1","EXECUTING"),
EXECUTING("1","executing"),
//执行完成
COMPLETED("2","COMPLETED");
COMPLETED("2","completed");
/**
* 类型编号

View File

@ -12,11 +12,11 @@ import lombok.Getter;
@AllArgsConstructor
public enum SourceEnum {
//市财政
MUNICIPAL_FINANCE("municipal_finance","MF"),
MUNICIPAL_FINANCE("0","municipal_finance"),
//区财政
DISTRICT_FINANCE("district_finance","DF"),
DISTRICT_FINANCE("1","district_finance"),
//业主自筹
OWNER_FINANCE("owner_finance","OF");
OWNER_FINANCE("2","owner_finance");
/**
* 类型编号
*/

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.cms.controller.admin.contract;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractProcessInstanceRespVO;
import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractPageReqVO;
import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractRespVO;
import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractSaveReqVO;
@ -39,6 +40,8 @@ public class ContractController {
@Resource
private ContractService contractService;
@PostMapping("/create")
@Operation(summary = "创建合同")
@PreAuthorize("@ss.hasPermission('cms:contract:create')")
@ -92,4 +95,17 @@ public class ContractController {
ExcelUtils.write(response, "合同.xls", "数据", ContractRespVO.class,
BeanUtils.toBean(list, ContractRespVO.class));
}
@GetMapping("/get_process")
@Operation(summary = "查询流程")
@Parameter(name = "id", description = "合同id", required = true)
@PreAuthorize("@ss.hasPermission('cms:contract:process')")
public CommonResult<ContractProcessInstanceRespVO> getContractProcess(@RequestParam("id") Long id) {
ContractProcessInstanceRespVO contractProcessInstance = contractService.getContractProcess(id);
return success(contractProcessInstance);
}
}

View File

@ -0,0 +1,82 @@
package cn.iocoder.yudao.module.cms.controller.admin.contract.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@Schema(description = "管理后台 - 流程实例的 Response VO")
@Data
public class ContractProcessInstanceRespVO {
@Schema(description = "流程实例的编号", requiredMode = Schema.RequiredMode.REQUIRED)
private String id;
@Schema(description = "流程名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String name;
@Schema(description = "流程分类", requiredMode = Schema.RequiredMode.REQUIRED)
private String category;
@Schema(description = "流程分类名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String categoryName;
@Schema(description = "流程实例的状态", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer status; // 参见 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;
@Schema(description = "提交的表单值", requiredMode = Schema.RequiredMode.REQUIRED)
private Map<String, Object> formVariables;
@Schema(description = "业务的唯一标识-例如说,请假申请的编号", example = "1")
private String businessKey;
/**
* 发起流程的用户
*/
private User startUser;
/**
* 当前审批中的任务
*/
private List<Task> 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;
}
}

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.cms.service.contract;
import jakarta.validation.*;
import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.*;
import cn.iocoder.yudao.module.cms.dal.dataobject.contract.ContractDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import java.math.BigDecimal;
@ -73,4 +72,10 @@ public interface ContractService {
void validateContractExists(Long id);
/**
* 查询流程
* @param id 合同id
*/
ContractProcessInstanceRespVO getContractProcess(Long id);
}

View File

@ -2,9 +2,12 @@ package cn.iocoder.yudao.module.cms.service.contract;
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.BpmProcessInstanceRespDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmTaskRespDTO;
import cn.iocoder.yudao.module.cms.dal.dataobject.contractHistory.ContractHistoryDO;
import cn.iocoder.yudao.module.cms.dal.mysql.contract.ContractMapper;
import cn.iocoder.yudao.module.cms.dal.mysql.contractHistory.ContractHistoryMapper;
import cn.iocoder.yudao.module.cms.enums.ContractTypeEnum;
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;
@ -61,6 +64,9 @@ public class ContractServiceImpl implements ContractService {
@Resource
private ContractHistoryMapper contractHistoryMapper;
@Resource
private BpmProcessInstanceApi bpmProcessInstanceApi;
@Override
public Long createContract(Long loginUserId, ContractSaveReqVO createReqVO) {
@ -83,7 +89,6 @@ public class ContractServiceImpl implements ContractService {
ProjectDetailRespDTO projectDetail = projectApi.getProjectDetailById(projectId);
//todo 待提取
String code = createReqVO.getCode();
String trackingDep = createReqVO.getTrackingDep();
String projectManager = createReqVO.getProjectManager();
@ -224,6 +229,8 @@ public class ContractServiceImpl implements ContractService {
contractRespVO.setTrackingDep(projectDetail.getTrackingDepName());
contractRespVO.setProjectManager(projectDetail.getProjectManagerName());
// TODO 枚举优化
contractRespVO.setType(ContractTypeEnum.getNoByCode(contractRespVO.getType()));
//分包合同商议提示 TODO 待优化
// ExtContractDO extContractDO = extContractMapper.selectOne("project_id", projectId);
// LocalDateTime reminderTime = extContractDO.getReminderTime();
@ -265,6 +272,36 @@ public class ContractServiceImpl implements ContractService {
return pageResult;
}
@Override
public ContractProcessInstanceRespVO getContractProcess(Long id) {
validateContractExists(id);
//去历史里面找
ContractHistoryDO contractHistory = contractHistoryMapper.selectOne("contract_id", id);
if (contractHistory == null) {
throw exception(CONTRACT_NOT_EXISTS);
}
//拿到历史之后 找到process_instance_id status
String processInstanceId = contractHistory.getProcessInstanceId();
String processStatus = contractHistory.getProcessStatus();
//与当前流程里的进行比较
String status = String.valueOf(bpmProcessInstanceApi.getProcessInstance(processInstanceId).getStatus());
//如果不相等
if (!status.equals(processStatus)){
//更新当前合同对应历史表里面的状态
contractHistory.setProcessStatus(status);
contractHistoryMapper.updateById(contractHistory);
}
//返回给前端必要的数据 当前流程里面对应的数据
BpmProcessInstanceRespDTO processInstance = bpmProcessInstanceApi.getProcessInstance(processInstanceId);
List<BpmTaskRespDTO> tasks = bpmProcessInstanceApi.getTask(processInstanceId);
List<BpmProcessInstanceRespDTO.Task> taskList = BeanUtils.toBean(tasks, BpmProcessInstanceRespDTO.Task.class);
processInstance.setTasks(taskList);
return BeanUtils.toBean(processInstance, ContractProcessInstanceRespVO.class);
}
@Override
public BigDecimal getProvisionalSettlementById(Long id) {
ContractDO contractDO = contractMapper.selectById(id);

View File

@ -95,6 +95,7 @@ public class ContractHistoryServiceImpl implements cn.iocoder.yudao.module.cms.s
// 6.分包合同商议提示
// 7.暂定结算数
// TODO 枚举优化
ProjectRespDTO project = projectApi.getProject(projectId);
contractHistoryRespVO.setCode(project.getCode());
contractHistoryRespVO.setDrawingCompany(project.getDrawingCompany());

View File

@ -102,7 +102,7 @@ public class ExtContractServiceImpl implements ExtContractService {
// 5.合同总金额
// 6.合同商议提示和分包提示不一样
//todo 待提取
//todo 待提取 枚举优化
String code = createReqVO.getCode();
String trackingDep = createReqVO.getTrackingDep();
String projectManager = createReqVO.getProjectManager();

View File

@ -104,7 +104,7 @@ public class ExtContractHistoryServiceImpl implements ExtContractHistoryService
CustomerCompanyDO customerCompanyDO = customerCompanyMapper.selectById(customerCompanyId);
String name = customerCompanyDO.getName();
HistoryResp.setCustomerCompanyName(name);
// TODO 枚举优化
//合同总金额

View File

@ -94,7 +94,7 @@ public class OutsContractServiceImpl implements OutsContractService {
// 3.项目经理
// 4.签订合同总额
//todo 待提取
//todo 待提取 枚举优化
String name = createReqVO.getName();
String trackingDep = createReqVO.getTrackingDep();
String projectManager = createReqVO.getProjectManager();

View File

@ -65,7 +65,7 @@ public class OutsContractHistoryServiceImpl implements OutsContractHistoryServic
OutsContractHistoryRespVO outsContractHistoryResp = BeanUtils.toBean(outsContractHistoryDO, OutsContractHistoryRespVO.class);
Long contractId = outsContractHistoryResp.getContractId();
ContractRespVO contract = contractService.getContract(contractId);
// TODO 枚举优化
outsContractHistoryResp.setName(contract.getName());
outsContractHistoryResp.setTrackingDep(contract.getTrackingDep());
outsContractHistoryResp.setProjectManager(contract.getProjectManager());