From c0bc55a9ea098a512f79a3a619e4a7d0a2dc9c3b Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 10 四月 2025 18:22:58 +0800
Subject: [PATCH] yml修改
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java | 187 +++++++++++++++++++++++++++++++++++++---------
1 files changed, 148 insertions(+), 39 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java
index afbd802..162decb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java
@@ -22,10 +22,12 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.ImmutableMap;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.BaseModel;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.domain.model.LoginUserApplet;
import com.ruoyi.common.enums.StateProcessActionEnum;
import com.ruoyi.common.enums.TaskEventType;
import com.ruoyi.common.exception.GlobalException;
@@ -299,6 +301,83 @@
}
/**
+ * 启动流程
+ * @param processStartBO
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public Boolean startApplet(ProcessStartBO processStartBO) {
+ String userId = "1";
+ String nickName = "admin";
+ FlowCreator creator = FlowCreator.of(userId, nickName);
+ //查询流程绑定
+ StateProcessModule stateProcessModule = stateProcessModuleService.getOne(Wrappers.<StateProcessModule>lambdaQuery()
+ .eq(StateProcessModule::getCategory, processStartBO.getCategory()));
+ if (ObjectUtil.isNull(stateProcessModule) || ObjectUtil.isEmpty(stateProcessModule.getTemplateId())) {
+ throw new GlobalException("请先配置流程引擎模版!");
+ }
+ //查询模版,准备启动
+ StateProcessTemplate template = this.getById(stateProcessModule.getTemplateId());
+ StateProcessTemplate lastTemplate = this.getOne(Wrappers.<StateProcessTemplate>lambdaQuery()
+ .eq(StateProcessTemplate::getTemplateKey, template.getTemplateKey())
+ .apply("(template_key, template_version) in(" +
+ "SELECT template_key, MAX(template_version) " +
+ "FROM state_process_template " +
+ "GROUP BY template_key)")
+ );
+
+ if (ObjectUtil.isNull(lastTemplate)) {
+ throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_NOT_EXISTS.getValue());
+ }
+ FlwProcess flwProcess = flowLongEngine.processService().getProcessById(lastTemplate.getWorkFlowId());
+ if (ObjectUtil.isNull(flwProcess)) {
+ throw new GlobalException(StateErrorCode.PROCESS_NOT_DEPLOY.getValue());
+ }
+ if (!Objects.equals(lastTemplate.getWorkflowVersion(), flwProcess.getProcessVersion())) {
+ throw new GlobalException(StateErrorCode.PROCESS_VERSION_ERROR.getValue());
+ }
+ //监听器参数补全
+ processStartBO.getVariable().put("category", processStartBO.getCategory());
+ // 开启流程
+ Optional<FlwInstance> flwInstanceOptional = flowLongEngine.startInstanceById(flwProcess.getId(), creator, processStartBO.getVariable());
+ if(flwInstanceOptional.isPresent()){
+ FlwInstance instance = flwInstanceOptional.get();
+ //存储任务中心信息
+ StateTaskCenter stateTaskCenter = new StateTaskCenter();
+ stateTaskCenter.setId(IdUtils.simpleUUID());
+ stateTaskCenter.setName(processStartBO.getName());
+ stateTaskCenter.setModuleName(processStartBO.getModuleName());
+ stateTaskCenter.setCategory(processStartBO.getCategory());
+ stateTaskCenter.setFlowId(instance.getId().toString());
+ stateTaskCenter.setRemark(processStartBO.getRemark());
+ stateTaskCenter.setCreateBy(nickName);
+ stateTaskCenter.setVariable(JSONUtil.toJsonStr(processStartBO.getVariable()));
+ stateTaskCenter.setProjectId(JSONObject.parseObject(JSONUtil.toJsonStr(processStartBO.getVariable())).getString("projectId"));
+ stateTaskCenterService.save(stateTaskCenter);
+
+ // action记录
+ StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction();
+ stateProcessInstanceAction.setId(IdUtils.simpleUUID());
+ stateProcessInstanceAction.setInstanceId(instance.getId().toString());
+ stateProcessInstanceAction.setActionType(StateProcessActionEnum.START.getValue());
+ stateProcessInstanceAction.setAuditorId(creator.getCreateId());
+ stateProcessInstanceActionService.save(stateProcessInstanceAction);
+
+ // 添加拓展信息
+ StateProcessExtInstance stateProcessExtInstance = new StateProcessExtInstance();
+ stateProcessExtInstance.setId(instance.getId().toString());
+ stateProcessExtInstance.setTemplateId(lastTemplate.getId());
+ stateProcessExtInstance.setProcessId(flwProcess.getId().toString());
+
+ //保存version
+ stateProcessExtInstance.setProcessVersion(flwProcess.getProcessVersion());
+ stateProcessExtInstanceService.save(stateProcessExtInstance);
+ }
+ return true;
+ }
+
+ /**
* 待办
* @param processTaskListBO
* @return
@@ -501,6 +580,14 @@
if (processTaskListBO.getSortBy() == 2) {
stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
}
+ // 查询合同信息
+ List<TContract> tContracts = contractMapper.selectList(Wrappers.<TContract>lambdaQuery()
+ .in(TContract::getStatus, 2,3,4,9));
+ List<String> contractIds = tContracts.stream().map(TContract::getId).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty(contractIds)){
+ return new PageInfo<>();
+ }
+ stateTaskQuery.in(StateTaskCenter::getProjectId, contractIds);
stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds);
PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery);
@@ -580,40 +667,29 @@
new PageInfo<>();
}
- List<String> instanceId = flwHisTaskList.stream().map(FlwTask::getInstanceId)
+ List<String> instanceIds = flwHisTaskList.stream().map(FlwTask::getInstanceId)
.map(String::valueOf).collect(Collectors.toList());
//分页查询任务中心任务
- LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>();
- if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) {
- stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName());
- }
- if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) {
- stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName());
- }
- if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) {
- stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy());
- }
- if (ObjectUtil.isEmpty(instanceId)) {
- return new PageInfo<>();
- }
- stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId);
- stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
- PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
- PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery);
- //转换类
- List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class);
-
- // 查询合同信息
- for (ProcessTaskListVO processTaskListVO : processTaskListVOS) {
- // 查询合同信息
- TContract contract = contractMapper.selectById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId"));
- processTaskListVO.setContract(contract);
- }
-
- pageInfo.setRecords(processTaskListVOS);
+// LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>();
+// if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) {
+// stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName());
+// }
+// if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) {
+// stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName());
+// }
+// if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) {
+// stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy());
+// }
+// if (ObjectUtil.isEmpty(instanceId)) {
+// return new PageInfo<>();
+// }
+// stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId);
+// stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
+ processTaskListBO.setInstanceIds(instanceIds);
+ PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO);
if (ObjectUtil.isEmpty(processTaskListVOS)) {
- return pageInfo;
+ return new PageInfo<>();
}
Map<Long, List<FlwHisTask>> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId));
//查询原因
@@ -622,7 +698,7 @@
Wrappers.<StateProcessInstanceAction>lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds));
Map<String, StateProcessInstanceAction> actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity()));
- List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
+ List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
Map<Long, SysUser> sysUserMap;
if (!CollectionUtils.isEmpty(updateUserId)) {
List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId);
@@ -636,7 +712,7 @@
sysUserMap = new HashMap<>();
}
- for (ProcessTaskListVO processTaskListVO : processTaskListVOS) {
+ for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) {
List<FlwHisTask> flwHisTasks = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId()));
if (ObjectUtil.isNotEmpty(flwHisTaskMap)) {
//当某个用户在同一个模块审批流的多个节点都存在时,多次审核后,已审核列表页报错
@@ -659,7 +735,7 @@
processTaskListVO.setCreateBy(sysUser.getNickName());
}
}
- return pageInfo;
+ return processTaskListVOS;
}
@Override
public PageInfo<ProcessTaskListVO> dealTaskPageApplet(ProcessTaskListBO processTaskListBO) {
@@ -735,6 +811,14 @@
if (processTaskListBO.getSortBy() == 2) {
stateTaskQuery.orderByDesc(BaseModel::getCreateTime);
}
+ // 查询合同信息
+ List<TContract> tContracts = contractMapper.selectList(Wrappers.<TContract>lambdaQuery()
+ .in(TContract::getStatus, 2,3,4,9));
+ List<String> contractIds = tContracts.stream().map(TContract::getId).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty(contractIds)){
+ return new PageInfo<>();
+ }
+ stateTaskQuery.in(StateTaskCenter::getProjectId, contractIds);
stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId);
PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery);
@@ -912,12 +996,17 @@
if (ObjectUtil.isNull(flwTask)) {
throw new GlobalException("任务已处理或者不存在");
}
- flowLongEngine.executeTask(taskId, currentFlowCreator());
- // 动作执行记录
StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction();
+ if(Objects.nonNull(processAgreeBO.getUserId())){
+ flowLongEngine.executeTask(taskId, currentFlowCreator(processAgreeBO.getUserId()));
+ stateProcessInstanceAction.setAuditorId(String.valueOf(processAgreeBO.getUserId()));
+ }else {
+ stateProcessInstanceAction.setAuditorId(String.valueOf(SecurityUtils.getUserId()));
+ flowLongEngine.executeTask(taskId, currentFlowCreator());
+ }
+ // 动作执行记录
stateProcessInstanceAction.setId(IdUtils.simpleUUID());
stateProcessInstanceAction.setInstanceId(flwTask.getInstanceId().toString());
- stateProcessInstanceAction.setAuditorId(String.valueOf(SecurityUtils.getUserId()));
stateProcessInstanceAction.setActionType(StateProcessActionEnum.APPROVED.getValue());
stateProcessInstanceAction.setNodeId(processAgreeBO.getTaskId());
stateProcessInstanceAction.setRemark(processAgreeBO.getRemark());
@@ -931,6 +1020,7 @@
FlwTask flwTask = flwTaskMapper.selectById(taskId);
// 直接拒绝当前流程
flowLongEngine.runtimeService().reject(flwTask.getInstanceId(), currentFlowCreator());
+ flwTaskMapper.deleteById(taskId);
// 动作执行记录
StateProcessInstanceAction record = new StateProcessInstanceAction();
record.setId(IdUtils.simpleUUID());
@@ -1208,6 +1298,7 @@
// 查询历史任务
List<FlwHisTask> flwHisTasks = flwHisTaskMapper.selectList(Wrappers.<FlwHisTask>lambdaQuery().eq(FlwHisTask::getInstanceId, instanceId));
+ processDetailVO.setInstanceId(String.valueOf(instanceId));
processDetailVO.setFlwHisTasks(flwHisTasks);
List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, instanceId)
@@ -1260,6 +1351,17 @@
if (processTaskListBO.getSortBy() == 2) {
stateTaskQuery.orderByDesc(FlwHisTask::getCreateTime);
}
+ List<TContract> tContracts = contractMapper.selectList(Wrappers.<TContract>lambdaQuery()
+ .in(TContract::getStatus, 2,3,4,9));
+ List<String> contractIds = tContracts.stream().map(TContract::getId).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty(contractIds)){
+ return new PageInfo<>();
+ }
+ List<StateTaskCenter> list = stateTaskCenterService.list(Wrappers.<StateTaskCenter>lambdaQuery().in(StateTaskCenter::getProjectId, contractIds));
+ if(!CollectionUtils.isEmpty(list)){
+ List<String> flowIds = list.stream().map(StateTaskCenter::getFlowId).collect(Collectors.toList());
+ stateTaskQuery.in(FlwHisTask::getInstanceId, flowIds);
+ }
stateTaskQuery.eq(FlwHisTask::getParentTaskId, 0L);
stateTaskQuery.like(FlwHisTask::getCreateId, userId);
PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize());
@@ -1273,8 +1375,6 @@
TContract contract = contractMapper.selectById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId"));
processTaskListVO.setContract(contract);
}
-
- pageInfo.setRecords(processTaskListVOS);
if (ObjectUtil.isEmpty(processTaskListVOS)) {
return pageInfo;
@@ -1292,13 +1392,15 @@
} else {
sysUserMap = new HashMap<>();
}
-
for (ProcessTaskListVO processTaskListVO : processTaskListVOS) {
+ processTaskListVO.setStatus(processTaskListVO.getTaskState() == 10 ? "2" : processTaskListVO.getTaskState().toString());
+ processTaskListVO.setTaskId(processTaskListVO.getId());
SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy());
if (Objects.nonNull(sysUser)) {
processTaskListVO.setCreateBy(sysUser.getNickName());
}
}
+ pageInfo.setRecords(processTaskListVOS);
return pageInfo;
}
@@ -1309,5 +1411,12 @@
}
return FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName());
}
+ private FlowCreator currentFlowCreator(Long userId) {
+ if (null == userId) {
+ throw new GlobalException("非法用户");
+ }
+ SysUser sysUser = sysUserService.selectUserById(userId);
+ return FlowCreator.of(String.valueOf(sysUser.getUserId()), sysUser.getNickName());
+ }
}
--
Gitblit v1.7.1