feat: 立项变更草稿和草稿办理接口

This commit is contained in:
2023-11-22 11:21:58 +08:00
parent 1e26fddcd8
commit fcc7b77cbf
5 changed files with 154 additions and 40 deletions
@@ -1,5 +1,7 @@
package com.jero.modules.activiti.process.common.service;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
@@ -7,13 +9,17 @@ import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.mapper.ProcessNodeMapper;
import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.entity.StandTypeVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.sys.utils.UserUtils;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
@@ -60,6 +66,9 @@ public class ActFlowCommonService {
@Resource
private EnterpriseStandardPlanService espService;
@Resource
private ProcessDraftService processDraftService;
/**
* 启动流程实例
*/
@@ -150,6 +159,15 @@ public class ActFlowCommonService {
processApprovalRecordService.updateById(approvalRecord);
}
public String getNodeIdByTaskId(String taskId) {
ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
if (approvalRecord == null) {
throw new JeroBootException("找不到对应的审批记录");
} else {
return approvalRecord.getNodeId();
}
}
/**
* 完成提交任务
*/
@@ -273,6 +291,9 @@ public class ActFlowCommonService {
}
public String getProcessInstanceIdByTaskId(String taskId) {
if (StrUtil.isBlank(taskId)) {
return null;
}
// 使用流程引擎根据taskId找到流程实例Id
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
return task.getProcessInstanceId();
@@ -322,4 +343,65 @@ public class ActFlowCommonService {
}
return standTypeVO;
}
public String getNewBusinessId() {
return UUID.randomUUID().toString().replace("-", "");
}
public ProcessDraft getExistDraft(String draftId, String businessId, ProcessTypeEnum processTypeEnum) {
String userId = UserUtils.getUserId();
LambdaQueryWrapper<ProcessDraft> draftWrapper = new LambdaQueryWrapper<>();
draftWrapper.eq(ProcessDraft::getPrcType, ProcessTypeEnum.ES_INIT_CHANGE.getValue());
draftWrapper.eq(ProcessDraft::getUserId, userId);
draftWrapper.eq(ProcessDraft::getId, draftId);
draftWrapper.eq(ProcessDraft::getProjectId, businessId);
return processDraftService.getOne(draftWrapper);
}
public ProcessDraft getExistDraftAndRemove(CommonVO common, ProcessTypeEnum processTypeEnum) {
String taskId = common.getTaskId();
String userId = UserUtils.getUserId();
String processInstanceId = common.getProcessInstanceId();
LambdaQueryWrapper<ProcessDraft> draftWrapper = new LambdaQueryWrapper<>();
draftWrapper.eq(ProcessDraft::getPrcType, processTypeEnum.getValue());
draftWrapper.eq(ProcessDraft::getUserId, userId);
draftWrapper.eq(StrUtil.isNotBlank(processInstanceId), ProcessDraft::getProcessInstanceId, processInstanceId);
draftWrapper.eq(StrUtil.isNotBlank(taskId), ProcessDraft::getTaskId, taskId);
ProcessDraft draft = processDraftService.getOne(draftWrapper);
// 删除草稿表数据
processDraftService.remove(draftWrapper);
return draft;
}
public void addDraft(CommonVO common, ProcessTypeEnum processTypeEnum, String newBusinessId) {
String taskId = common.getTaskId();
String processInstanceId = common.getProcessInstanceId();
// 新增草稿表数据
ProcessDraft draft = new ProcessDraft();
if (StrUtil.isNotBlank(taskId) && StrUtil.isNotBlank(processInstanceId)) {
draft.setProcessInstanceId(processInstanceId);
draft.setTaskId(taskId);
}
draft.setPrcName(common.getPrcName());
draft.setPrcType(processTypeEnum.getValue());
draft.setHandleText(common.getCommitText()); // 流程审批信息-备注
draft.setHandleFile(common.getCommitFile()); // 流程审批信息-附件
draft.setUserId(CurrentUserUtil.getId()); // 用户id
draft.setProjectId(newBusinessId);
processDraftService.save(draft);
}
public CommonVO getDraftCommon(ProcessDraft draft) {
String taskId = draft.getTaskId();
CommonVO commonVO = new CommonVO();
commonVO.setPrcName(draft.getPrcName());
commonVO.setCommitText(draft.getHandleText());
commonVO.setCommitFile(draft.getHandleFile());
commonVO.setTaskId(taskId);
commonVO.setProcessInstanceId(draft.getProcessInstanceId());
if (StrUtil.isNotBlank(taskId)) {
commonVO.setNodeId(this.getNodeIdByTaskId(taskId));
}
return commonVO;
}
}
@@ -14,6 +14,7 @@ import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -96,6 +97,20 @@ public class ProcessESInitChangeController {
return Result.OK(initChangeService.getHandleData(taskId));
}
/**
* 保存到待办
* @param draftId
* @param projectId
*/
@AutoLog(value = "企标立项变更流程-草稿办理")
@ApiOperation(value="企标立项变更流程-草稿办理", notes="企标立项变更流程-草稿办理")
@GetMapping("/draftHandle")
@Translation
public Result<?> draftHandle(@RequestParam("draftId") @ApiParam("草稿Id") String draftId,
@RequestParam("projectId") @ApiParam("业务数据Id") String projectId) {
return Result.OK(initChangeService.getDraftData(draftId, projectId));
}
/**
* 同意
*
@@ -534,6 +534,12 @@ public class ProcessEsInitChange implements Serializable {
@ApiModelProperty(value = "配合单位")
private String cooperationUnit;
/**
* 流程业务统一Id
*/
@ApiModelProperty(value = "流程业务统一Id")
private String businessId;
@TableField(exist = false)
private static final long serialVersionUID = 1781238971297838971L;
}
@@ -47,4 +47,12 @@ public interface ProcessEsInitChangeService extends IService<ProcessEsInitChange
* @return
*/
InitChangeDataVO getHandleData(String taskId);
/**
* 获取草稿数据
* @param draftId
* @return
*/
InitChangeDataVO getDraftData(String draftId, String businessId);
}
@@ -20,7 +20,6 @@ import com.jero.modules.activiti.process.esInitChange.service.ProcessEsInitChang
import com.jero.modules.activiti.process.esInitChange.mapper.ProcessEsInitChangeMapper;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.enterprise.service.ESSequenceNumberProvider;
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
import com.jero.modules.sys.utils.UserUtils;
@@ -54,9 +53,6 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Resource
private EnterpriseStandardUtil esUtil;
@Resource
private ProcessDraftService processDraftService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@@ -89,6 +85,10 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId, commonVO);
// 设置流程实例Id
esInitChangeList.forEach(e -> e.setProcessInstanceId(processInstanceId));
// 生成唯一的businessId
String newBusinessId = actFlowCommonService.getNewBusinessId();
// 新增业务表数据
esInitChangeList.forEach(e -> e.setBusinessId(newBusinessId));
// 保存到业务流程表
saveBatch(esInitChangeList);
// 保存选人信息
@@ -143,7 +143,8 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
commonVO.setDueTime(process.getDueTime());
commonVO.setProcessDefinitionId(processDefinitionId);
commonVO.setProcessInstanceId(processInstanceId);
commonVO.setNodeId(process.getNodeId());
// 获取节点ID
commonVO.setNodeId(actFlowCommonService.getNodeIdByTaskId(taskId));
initChangeDataVO.setCommonVO(commonVO);
// 获取流程实例数据
LambdaQueryWrapper<ProcessEsInitChange> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -154,6 +155,25 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
return initChangeDataVO;
}
@Override
public InitChangeDataVO getDraftData(String draftId, String businessId) {
ProcessDraft draft = actFlowCommonService.getExistDraft(draftId, businessId, ProcessTypeEnum.ES_INIT_CHANGE);
if (draft != null) {
InitChangeDataVO initChangeDataVO = new InitChangeDataVO();
// 获取流程通用数据
CommonVO commonVO = actFlowCommonService.getDraftCommon(draft);
initChangeDataVO.setCommonVO(commonVO);
// 获取流程实例数据
LambdaQueryWrapper<ProcessEsInitChange> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ProcessEsInitChange::getBusinessId, businessId);
lambdaQueryWrapper.eq(ProcessEsInitChange::getDelFlag, YesOrNoEnum.NO.getValue());
List<ProcessEsInitChange> dataList = list(lambdaQueryWrapper);
initChangeDataVO.setDataList(dataList);
return initChangeDataVO;
}
return null;
}
@Override
public void approvalInitChange(InitChangeDataVO initChangeDataVO, boolean pass) {
String userId = UserUtils.getUserId();
@@ -189,43 +209,26 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Override
public void saveToDraft(InitChangeDataVO initChangeData) {
CommonVO commonVO = initChangeData.getCommonVO();
String taskId = commonVO.getTaskId();
List<ProcessEsInitChange> esInitChange = initChangeData.getDataList();
saveOrUpdateBatch(esInitChange);
List<ProcessEsInitChange> dataList = initChangeData.getDataList();
// 先删后增
LambdaUpdateWrapper<ProcessDraft> draftWrapper = new LambdaUpdateWrapper<>();
if (StrUtil.isBlank(taskId)) {
// 第一个节点点击保存没有taskId
List<ProcessDraft> draftList = new ArrayList<>();
for (ProcessEsInitChange esInitChangeItem : esInitChange) {
ProcessDraft draft = new ProcessDraft();
draft.setProjectId(esInitChangeItem.getId());
draft.setPrcName(commonVO.getPrcName());
draft.setPrcType(ProcessTypeEnum.ES_INIT_CHANGE.getValue());
draft.setHandleText(commonVO.getCommitText()); // 流程审批信息-备注
draft.setHandleFile(commonVO.getCommitFile()); // 流程审批信息-附件
draftList.add(draft);
}
processDraftService.saveBatch(draftList);
} else {
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
draftWrapper.in(ProcessDraft::getProjectId, esInitChange.stream().map(ProcessEsInitChange::getId).collect(Collectors.toList()));
processDraftService.remove(draftWrapper);
List<ProcessDraft> draftList = new ArrayList<>();
for (ProcessEsInitChange esInitChangeItem : esInitChange) {
ProcessDraft draft = new ProcessDraft();
draft.setProjectId(esInitChangeItem.getId());
draft.setProcessInstanceId(processInstanceId);
draft.setPrcName(commonVO.getPrcName());
draft.setPrcType(ProcessTypeEnum.ES_INIT_CHANGE.getValue());
draft.setTaskId(taskId); // 任务id
draft.setHandleText(commonVO.getCommitText()); // 流程审批信息-备注
draft.setHandleFile(commonVO.getCommitFile()); // 流程审批信息-附件
draft.setUserId(CurrentUserUtil.getId()); // 用户id
draftList.add(draft);
}
processDraftService.saveBatch(draftList);
// 先找到原来的businessId
ProcessDraft existDraft = actFlowCommonService.getExistDraftAndRemove(commonVO, ProcessTypeEnum.ES_INIT_CHANGE);
if (existDraft != null) {
// 根据原来的businessId删除业务主表数据
String businessId = existDraft.getProjectId();
LambdaUpdateWrapper<ProcessEsInitChange> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ProcessEsInitChange::getBusinessId, businessId);
updateWrapper.set(ProcessEsInitChange::getDelFlag, YesOrNoEnum.YES.getValue());
update(updateWrapper);
}
// 生成唯一的businessId
String newBusinessId = actFlowCommonService.getNewBusinessId();
// 新增业务表数据
dataList.forEach(e -> e.setBusinessId(newBusinessId));
saveBatch(dataList);
// 新增草稿表数据
actFlowCommonService.addDraft(commonVO, ProcessTypeEnum.ES_INIT_CHANGE, newBusinessId);
}
public void startRunTask(InitChangeDataVO initChangeData) {