Browse Source

chore: workflow compose

master
wangxiang 2 years ago
parent
commit
8a94ba1e50
No known key found for this signature in database
GPG Key ID: 1BA7946AB6B232E4
  1. 5
      kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/AuthUtils.java
  2. 12
      kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/SecurityUtils.java
  3. 6
      kicc-platform/kicc-platform-api/kicc-workflow-api/src/main/java/com/cloud/kicc/workflow/api/constant/SqlConstants.java
  4. 2
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/cmd/RollBackUserTaskCmd.java
  5. 14
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowFormController.java
  6. 13
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowModelController.java
  7. 9
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowProcessController.java
  8. 9
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowTaskController.java
  9. 2
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionDataController.java
  10. 2
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionPropertyController.java
  11. 15
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/interceptor/ModelHandlerInterceptor.java
  12. 18
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/UiTenantProvider.java
  13. 2
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableSequenceFlowJsonConverter.java
  14. 4
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableStartEventJsonConverter.java
  15. 8
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableUserTaskJsonConverter.java
  16. 23
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/ExtendUserTaskActivityBehavior.java
  17. 7
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/MultiInstanceHandler.java
  18. 22
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowModelServiceImpl.java
  19. 64
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowProcessServiceImpl.java
  20. 96
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowTaskServiceImpl.java
  21. 10
      kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/util/WorkflowUtil.java

5
kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/AuthUtils.java

@ -6,6 +6,7 @@ import lombok.SneakyThrows; @@ -6,6 +6,7 @@ import lombok.SneakyThrows;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import javax.servlet.http.HttpServletRequest;
@ -65,4 +66,8 @@ public class AuthUtils { @@ -65,4 +66,8 @@ public class AuthUtils {
return extractAndDecodeHeader(header);
}
public static void main(String[] args) {
System.out.println(new BCryptPasswordEncoder().encode("123456"));
}
}

12
kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/SecurityUtils.java

@ -174,8 +174,16 @@ public class SecurityUtils { @@ -174,8 +174,16 @@ public class SecurityUtils {
return (T) user;
}
public static void main(String[] args) {
System.out.println(new BCryptPasswordEncoder().encode("123456"));
public String getTenantIdLike() {
CasUser casUser = getCasUser();
if (casUser == null) return null;
return StrUtil.format("%{}%", casUser.getTenantId());
}
public String getTenantId() {
CasUser casUser = getCasUser();
if (casUser == null) return null;
return casUser.getTenantId();
}
}

6
kicc-platform/kicc-platform-api/kicc-workflow-api/src/main/java/com/cloud/kicc/workflow/api/constant/SqlConstants.java

@ -12,10 +12,10 @@ public interface SqlConstants { @@ -12,10 +12,10 @@ public interface SqlConstants {
String QUERY_ACT_HI_COMMENT= "select * from ACT_HI_COMMENT where TYPE_ like ? and TASK_ID_ = ? order by TIME_ desc";
String QUERY_USER_BY_ID = "select csu.id, csu.user_name userName, csu.nick_name nickName, csu.password, u.dept_id deptId, u.status from sys_user u join cas_sso_user_view csu on u.cas_user_id = csu.id where csu.id = ?";
String QUERY_USER_BY_ID = "select id, user_name userName, nick_name nickName, password, dept_id deptId, status from sso_enhanced_user_view where id = ? and tenant_id like ?";
String QUERY_USER_BY_DEPT_ID = "select csu.id, csu.user_name userName, csu.nick_name nickName, csu.password, u.dept_id deptId, u.status from sys_user u join cas_sso_user_view csu on u.cas_user_id = csu.id where u.dept_id = ?";
String QUERY_USER_BY_DEPT_ID = "select id, user_name userName, nick_name nickName, password, dept_id deptId, status from sso_enhanced_user_view where u.dept_id = ? and tenant_id like ?";
String QUERY_USER_BY_ROLE_ID = "select distinct csu.id, csu.user_name userName, csu.nick_name nickName, csu.password, u.dept_id deptId, u.status from sys_user u join cas_sso_user_view csu on u.cas_user_id = csu.id join sys_user_role b on csu.id = b.user_id where b.role_id = ?";
String QUERY_USER_BY_ROLE_ID = "select distinct id, user_name userName, nick_name nickName, password, dept_id deptId, status from sso_enhanced_user_view u join sys_user_role r on u.id = r.user_id where r.role_id = ? and u.tenant_id like ?";
}

2
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/cmd/RollBackUserTaskCmd.java

@ -50,7 +50,7 @@ public class RollBackUserTaskCmd implements Command<String>, Serializable { @@ -50,7 +50,7 @@ public class RollBackUserTaskCmd implements Command<String>, Serializable {
@Override
public String execute(CommandContext commandContext) {
if (targetActivityId == null || targetActivityId.length() == 0) {
if (targetActivityId == null || targetActivityId.isEmpty()) {
throw new FlowableException("targetActivityId不能为空");
}
TaskEntity task = CommandContextUtil.getTaskService().getTask(taskId);

14
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowFormController.java

@ -10,6 +10,7 @@ import com.cloud.kicc.workflow.api.entity.Workflow; @@ -10,6 +10,7 @@ import com.cloud.kicc.workflow.api.entity.Workflow;
import com.cloud.kicc.workflow.service.WorkflowTaskService;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.StartEvent;
@ -36,6 +37,7 @@ import java.util.Map; @@ -36,6 +37,7 @@ import java.util.Map;
* @Author: wangxiang4
* @Date: 2022/1/4
*/
@Slf4j
@RestController
@RequestMapping(AppConstants.APP_WORKFLOW + "/form")
@AllArgsConstructor
@ -88,7 +90,9 @@ public class WorkflowFormController { @@ -88,7 +90,9 @@ public class WorkflowFormController {
// 指定下一步处理人
if(StringUtils.isNotBlank(assignee)){
Task task = taskService.createTaskQuery().processInstanceId(processInsId).active().singleResult();
Task task = taskService.createTaskQuery()
.processInstanceId(processInsId)
.taskTenantIdLike(SecurityUtils.getTenantIdLike()).active().singleResult();
if(task != null){
taskService.setAssignee(task.getId(), assignee);
}
@ -141,7 +145,9 @@ public class WorkflowFormController { @@ -141,7 +145,9 @@ public class WorkflowFormController {
// 指定下一步处理人
if(StringUtils.isNotBlank(assignee)){
Task task = taskService.createTaskQuery().processInstanceId(processInsId).active().singleResult();
Task task = taskService.createTaskQuery()
.processInstanceId(processInsId)
.taskTenantIdLike(SecurityUtils.getTenantIdLike()).active().singleResult();
if(task != null){
taskService.setAssignee(task.getId(), assignee);
}
@ -180,7 +186,7 @@ public class WorkflowFormController { @@ -180,7 +186,7 @@ public class WorkflowFormController {
formPropertyMap.put("readable", true);
list.add(formPropertyMap);
}
}catch (Exception e){ e.printStackTrace(); }
}catch (Exception e){ log.error("An error occurred", e); }
}
}else{
List<FormProperty> formPropertyList = formService.getStartFormData(processDefId).getFormProperties();
@ -196,7 +202,7 @@ public class WorkflowFormController { @@ -196,7 +202,7 @@ public class WorkflowFormController {
formPropertyMap.put("readable", true);
list.add(formPropertyMap);
}
}catch (Exception e){ e.printStackTrace(); }
}catch (Exception e){ log.error("An error occurred", e); }
}
}
return R.ok(list);

13
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowModelController.java

@ -39,10 +39,9 @@ import org.springframework.web.bind.annotation.*; @@ -39,10 +39,9 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@ -82,11 +81,13 @@ public class WorkflowModelController { @@ -82,11 +81,13 @@ public class WorkflowModelController {
IPage<WorkflowModel> result = workflowModelService.page(page, getLambdaQueryWrapper(workflowModel));
// 存储流程实例
result.getRecords().forEach(item -> {
List<String> modelKeyList = StrUtil.split(item.getModelKey(), new Character(','));
List<String> modelKeyList = StrUtil.split(item.getModelKey(), ',');
ProcessDefinition processDefinition = workflowProcessService.getProcessDefinitionByKey(modelKeyList.get(0));
if(processDefinition != null){
String deploymentId = processDefinition.getDeploymentId();
Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
Deployment deployment = repositoryService.createDeploymentQuery()
.deploymentId(deploymentId)
.deploymentTenantIdLike(com.cloud.kicc.common.security.util.SecurityUtils.getTenantIdLike()).singleResult();
item.setProcessDefinition(new ProcessDefinitionInfoVo()
.setId(processDefinition.getId())
.setCategory(processDefinition.getCategory())
@ -113,7 +114,7 @@ public class WorkflowModelController { @@ -113,7 +114,7 @@ public class WorkflowModelController {
/** 删除模型 */
@DeleteMapping("/remove/{ids}")
public R remove(@PathVariable String[] ids) {
Arrays.asList(ids).forEach(id -> workflowModelService.remove(id));
Arrays.asList(ids).forEach(workflowModelService::remove);
return R.ok("删除成功");
}
@ -214,7 +215,7 @@ public class WorkflowModelController { @@ -214,7 +215,7 @@ public class WorkflowModelController {
/** 修改模型 */
private ModelRepresentation updateModel(Model model, MultiValueMap<String, String> values, boolean forceNewVersion) {
String name = values.getFirst("name"),
key = values.getFirst("key").replaceAll(" ", ""),
key = Objects.requireNonNull(values.getFirst("key")).replaceAll(" ", ""),
description = values.getFirst("description"),
isNewVersionString = values.getFirst("newVersion"),
newVersionComment = null;

9
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowProcessController.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.workflow.api.entity.Workflow;
import com.cloud.kicc.workflow.api.enums.ExtendMessage;
import com.cloud.kicc.workflow.api.extension.entity.WorkflowCopy;
@ -123,7 +124,7 @@ public class WorkflowProcessController { @@ -123,7 +124,7 @@ public class WorkflowProcessController {
/** 删除部署的流程 */
@DeleteMapping("/removeDeployment/{deploymentIds}")
public R removeDeployment(@PathVariable String[] deploymentIds) {
Arrays.asList(deploymentIds).forEach(id -> workflowProcessService.deleteDeployment(id));
Arrays.asList(deploymentIds).forEach(workflowProcessService::deleteDeployment);
return R.ok("删除成功");
}
@ -174,7 +175,9 @@ public class WorkflowProcessController { @@ -174,7 +175,9 @@ public class WorkflowProcessController {
// 指定下一步处理人,不设置就使用默认处理人
if (StringUtils.isNotBlank(workflow.getAssignee())) {
Task task = taskService.createTaskQuery().processInstanceId(processInsId).active().singleResult();
Task task = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).active().singleResult();
if (task != null) {
taskService.setAssignee(task.getId(), workflow.getAssignee());
}
@ -189,7 +192,7 @@ public class WorkflowProcessController { @@ -189,7 +192,7 @@ public class WorkflowProcessController {
historyService.deleteHistoricProcessInstance(id);
workflowCopyService.remove(new LambdaUpdateWrapper<WorkflowCopy>().eq(WorkflowCopy::getProcessInsId, id));
});
return R.ok("删除成功,流程实例ID=" + ids);
return R.ok("删除成功,流程实例ID=" + Arrays.toString(ids));
}
}

9
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowTaskController.java

@ -17,6 +17,7 @@ import com.cloud.kicc.workflow.extension.service.ActivityExtensionPropertyServic @@ -17,6 +17,7 @@ import com.cloud.kicc.workflow.extension.service.ActivityExtensionPropertyServic
import com.cloud.kicc.workflow.service.WorkflowProcessService;
import com.cloud.kicc.workflow.service.WorkflowTaskService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.HistoryService;
@ -37,6 +38,7 @@ import java.util.Map; @@ -37,6 +38,7 @@ import java.util.Map;
* @Author: wangxiang4
* @Date: 2022/1/4
*/
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping(AppConstants.APP_WORKFLOW + "/task")
@ -151,7 +153,9 @@ public class WorkflowTaskController { @@ -151,7 +153,9 @@ public class WorkflowTaskController {
workflowTaskService.auditTask(workflow);
//指定下一步处理人
if(StringUtils.isNotBlank(workflow.getAssignee())){
Task task = taskService.createTaskQuery().processInstanceId(workflow.getProcessInsId()).active().singleResult();
Task task = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(workflow.getProcessInsId()).active().singleResult();
if(task != null){
taskService.setAssignee(task.getId(), workflow.getAssignee());
}
@ -171,6 +175,7 @@ public class WorkflowTaskController { @@ -171,6 +175,7 @@ public class WorkflowTaskController {
// 取得流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult();
if (processInstance == null) return R.error("流程已经结束");
@ -187,7 +192,7 @@ public class WorkflowTaskController { @@ -187,7 +192,7 @@ public class WorkflowTaskController {
historyService.deleteHistoricTaskInstance(currentTaskId);
return R.ok("取回成功");
} catch (Exception e) {
e.printStackTrace();
log.error("An error occurred", e);
return R.ok("流程取回失败,未知错误.");
}
}

2
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionDataController.java

@ -60,7 +60,7 @@ public class ActivityExtensionDataController { @@ -60,7 +60,7 @@ public class ActivityExtensionDataController {
@DeleteMapping("/remove/{ids}")
public R remove(@PathVariable String[] ids) {
Arrays.asList(ids).forEach(id -> activityExtensionDataService.delete(id));
Arrays.asList(ids).forEach(activityExtensionDataService::delete);
return R.ok();
}

2
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionPropertyController.java

@ -47,7 +47,7 @@ public class ActivityExtensionPropertyController { @@ -47,7 +47,7 @@ public class ActivityExtensionPropertyController {
.remove(new LambdaUpdateWrapper<ActivityExtensionProperty>()
.eq(ActivityExtensionProperty::getProcessDefId,taskExtensionProperty.getProcessDefId())
.eq(ActivityExtensionProperty::getActivityDefId,taskExtensionProperty.getActivityDefId())));
activityExtensionPropertyList.forEach(taskExtensionProperty -> activityExtensionPropertyService.save(taskExtensionProperty));
activityExtensionPropertyList.forEach(activityExtensionPropertyService::save);
return R.ok();
}

15
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/interceptor/ModelHandlerInterceptor.java

@ -1,7 +1,9 @@ @@ -1,7 +1,9 @@
package com.cloud.kicc.workflow.interceptor;
import cn.hutool.core.util.StrUtil;
import com.cloud.kicc.common.data.entity.CasUser;
import com.cloud.kicc.common.data.entity.KiccUser;
import io.micrometer.core.lang.NonNullApi;
import lombok.SneakyThrows;
import org.flowable.idm.api.User;
import org.flowable.idm.engine.impl.persistence.entity.UserEntityImpl;
@ -21,20 +23,21 @@ import javax.servlet.http.HttpServletResponse; @@ -21,20 +23,21 @@ import javax.servlet.http.HttpServletResponse;
* @Author: wangxiang4
* @Date: 2022/1/6
*/
@NonNullApi
public class ModelHandlerInterceptor implements HandlerInterceptor {
@SneakyThrows
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
KiccUser kiccUser = com.cloud.kicc.common.security.util.SecurityUtils.getUser();
CasUser casUser = com.cloud.kicc.common.security.util.SecurityUtils.getCasUser();
User currentUserObject = SecurityUtils.getCurrentUserObject();
if (currentUserObject == null || StrUtil.isBlank(currentUserObject.getId())) {
User user = new UserEntityImpl();
user.setId(kiccUser.getId());
user.setFirstName(kiccUser.getUsername());
user.setId(casUser.getId());
user.setFirstName(casUser.getUsername());
user.setLastName("");
user.setTenantId(kiccUser.getTenantId());
user.setEmail(kiccUser.getEmail());
user.setDisplayName(kiccUser.getNickName());
user.setTenantId(casUser.getTenantId());
user.setEmail(casUser.getEmail());
user.setDisplayName(casUser.getNickName());
SecurityUtils.assumeUser(user);
}
return true;

18
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/UiTenantProvider.java

@ -1,9 +1,8 @@ @@ -1,9 +1,8 @@
package com.cloud.kicc.workflow.override;
import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.common.data.entity.CasUser;
import lombok.extern.slf4j.Slf4j;
import org.flowable.ui.common.tenant.TenantProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
@ -15,23 +14,22 @@ import org.springframework.stereotype.Component; @@ -15,23 +14,22 @@ import org.springframework.stereotype.Component;
* @Author: wangxiang4
* @Since: 2023/9/27
*/
@Slf4j
@Primary
@Component
public class UiTenantProvider implements TenantProvider {
private static final Logger LOGGER = LoggerFactory.getLogger(UiTenantProvider.class);
@Override
public String getTenantId() {
KiccUser kiccUser = com.cloud.kicc.common.security.util.SecurityUtils.getUser();
if(kiccUser != null) {
CasUser user = com.cloud.kicc.common.security.util.SecurityUtils.getCasUser();
if(user != null) {
// quotes can help solve whitespace issues, trimming here would not
// help solve the problem at source which is in user database
LOGGER.debug("Using user tenantId: '{}'", kiccUser.getTenantId());
return kiccUser.getTenantId();
log.debug("Using user tenantId: '{}'", user.getTenantId());
return user.getTenantId();
}
LOGGER.debug("No tenantId");
log.debug("No tenantId");
return null;
}

2
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableSequenceFlowJsonConverter.java

@ -38,7 +38,7 @@ public class FlowableSequenceFlowJsonConverter extends SequenceFlowJsonConverter @@ -38,7 +38,7 @@ public class FlowableSequenceFlowJsonConverter extends SequenceFlowJsonConverter
List<ActivityExtensionData> list = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class)
.list(new LambdaQueryWrapper<ActivityExtensionData>().eq(ActivityExtensionData::getProcessDefId, procDefId)
.eq(ActivityExtensionData::getActivityDefId, taskDefId));
if (list.size() > 0) {
if (!list.isEmpty()) {
ActivityExtensionData activityExtensionData = list.get(0);
List<WorkflowCondition> workflowConditionList = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class)
.findById(activityExtensionData.getId()).getWorkflowConditionList();

4
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableStartEventJsonConverter.java

@ -31,10 +31,10 @@ public class FlowableStartEventJsonConverter extends StartEventJsonConverter{ @@ -31,10 +31,10 @@ public class FlowableStartEventJsonConverter extends StartEventJsonConverter{
super.convertElementToJson (propertiesNode, baseElement);
if (baseElement instanceof StartEvent) {
//读取自定义扩展属性
if (baseElement.getAttributes ().get ("formType") != null && baseElement.getAttributes ().get ("formType").size () > 0) {
if (baseElement.getAttributes ().get ("formType") != null && !baseElement.getAttributes().get("formType").isEmpty()) {
propertiesNode.put ("formType", baseElement.getAttributes ().get ("formType").get (0).getValue ());
}
if (baseElement.getAttributes ().get ("formReadOnly") != null && baseElement.getAttributes ().get ("formReadOnly").size () > 0) {
if (baseElement.getAttributes ().get ("formReadOnly") != null && !baseElement.getAttributes().get("formReadOnly").isEmpty()) {
propertiesNode.put ("formReadOnly", baseElement.getAttributes ().get ("formReadOnly").get (0).getValue ());
}
}

8
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableUserTaskJsonConverter.java

@ -113,10 +113,10 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter { @@ -113,10 +113,10 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter {
super.convertElementToJson (propertiesNode, baseElement);
if (baseElement instanceof UserTask) {
//读取自定义扩展属性
if (baseElement.getAttributes ().get ("formType") != null && baseElement.getAttributes ().get ("formType").size () > 0) {
if (baseElement.getAttributes ().get ("formType") != null && !baseElement.getAttributes().get("formType").isEmpty()) {
propertiesNode.put ("formType", baseElement.getAttributes ().get ("formType").get (0).getValue ());
}
if (baseElement.getAttributes ().get ("formReadOnly") != null && baseElement.getAttributes ().get ("formReadOnly").size () > 0) {
if (baseElement.getAttributes ().get ("formReadOnly") != null && !baseElement.getAttributes().get("formReadOnly").isEmpty()) {
propertiesNode.put ("formReadOnly", baseElement.getAttributes ().get ("formReadOnly").get (0).getValue ());
}
@ -141,7 +141,7 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter { @@ -141,7 +141,7 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter {
protected void addAssigneeProperties(List<ExtensionElement> elements, ObjectNode propertiesNode) {
if (elements.size () == 0)
if (elements.isEmpty())
return;
ArrayNode propertiesArrayNode = objectMapper.createArrayNode ();
@ -170,7 +170,7 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter { @@ -170,7 +170,7 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter {
}
protected void addButtonProperties(List<ExtensionElement> elements, ObjectNode propertiesNode) {
if (elements.size () == 0)
if (elements.isEmpty())
return;
ArrayNode propertiesArrayNode = objectMapper.createArrayNode ();

23
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/ExtendUserTaskActivityBehavior.java

@ -24,6 +24,7 @@ import org.flowable.task.service.TaskService; @@ -24,6 +24,7 @@ import org.flowable.task.service.TaskService;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.Types;
import java.util.*;
import java.util.stream.Collectors;
@ -43,7 +44,8 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -43,7 +44,8 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
super(userTask);
}
@Override /** 处理分配任务处理人 */
/** 处理分配任务处理人 */
@Override
protected void handleAssignments(TaskService taskService,
String assignee,
String owner,
@ -55,7 +57,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -55,7 +57,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
Process process = SpringContextHolderUtil.getBean(RepositoryService.class).getBpmnModel(task.getProcessDefinitionId()).getMainProcess();
FlowElement flowElement = process.getFlowElement(task.getTaskDefinitionKey());
Boolean isMultiInstance = WorkflowUtil.isFlowElementMultiInstance(flowElement);
boolean isMultiInstance = WorkflowUtil.isFlowElementMultiInstance(flowElement);
// 如果当前任务是多实例则移交给MultiInstanceHandler处理
if(isMultiInstance){
super.handleAssignments(
@ -71,10 +73,10 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -71,10 +73,10 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
}
List<ActivityExtensionData> list = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class)
.list(new LambdaQueryWrapper<ActivityExtensionData>()
.eq(ActivityExtensionData::getActivityDefId, task.getTaskDefinitionKey())
.eq(ActivityExtensionData::getProcessDefId, process.getId()));
.eq(ActivityExtensionData::getActivityDefId, task.getTaskDefinitionKey())
.eq(ActivityExtensionData::getProcessDefId, process.getId()));
HashSet<String> candidateUserIds = new HashSet();
if (list.size () > 0) {
if (!list.isEmpty()) {
ActivityExtensionData activityExtensionData = list.get(0);
List<WorkflowAssignee> workflowAssigneeList = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class)
.findById(activityExtensionData.getId()).getWorkflowAssigneeList();
@ -87,7 +89,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -87,7 +89,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
case "company":
// 获取公司下的人员进行候选
if (StrUtil.isNotBlank(workflowAssignee.getValue())) {
List<Map<String, Object>> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_DEPT_ID, workflowAssignee.getValue());
List<Map<String, Object>> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_DEPT_ID, workflowAssignee.getValue(), SecurityUtils.getTenantIdLike());
candidateUserIds.addAll(userList.stream().map(user -> MapUtil.getStr(user, "id")).collect(Collectors.toList()));
}
break;
@ -96,7 +98,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -96,7 +98,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
if (StrUtil.isNotBlank(workflowAssignee.getValue())) {
String[] roleIds = workflowAssignee.getValue().split (",");
for(String roleId: roleIds){
List<Map<String, Object>> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_ROLE_ID, roleId);
List<Map<String, Object>> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_ROLE_ID, roleId, SecurityUtils.getTenantIdLike());
candidateUserIds.addAll(userList.stream().map(user -> MapUtil.getStr(user, "id")).collect(Collectors.toList()));
}
}
@ -108,6 +110,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -108,6 +110,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
case "previousExecutor":
// 查询上一个任务的处理人进行候选
HistoricTaskInstance historicTaskInstance = SpringContextHolderUtil.getBean(HistoryService.class).createHistoricTaskInstanceQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(task.getProcessInstanceId()).finished()
.includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc().list().get(0);
candidateUserIds.add(historicTaskInstance.getAssignee());
@ -118,7 +121,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -118,7 +121,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
break;
case "sql":
// 查询sql中指定的id用户进行候选
Map<String, Object> user = jdbcTemplate.queryForMap(workflowAssignee.getValue());
Map<String, Object> user = jdbcTemplate.queryForMap(workflowAssignee.getValue(), new String[]{ SecurityUtils.getTenantIdLike() }, new int[]{ Types.VARCHAR });
candidateUserIds.add(MapUtil.getStr(user,"id"));
break;
case "custom":
@ -129,7 +132,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -129,7 +132,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
}
List<String> candidateIds = new ArrayList(candidateUserIds);
// 此处可以根据业务逻辑自定义
if (candidateIds.size () == 0) {
if (candidateIds.isEmpty()) {
super.handleAssignments(
taskService,
null,
@ -149,7 +152,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { @@ -149,7 +152,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior {
task,
expressionManager,
execution);
} else if (candidateIds.size () > 1) {
} else {
super.handleAssignments(
taskService,
null,

7
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/MultiInstanceHandler.java

@ -44,7 +44,7 @@ public class MultiInstanceHandler { @@ -44,7 +44,7 @@ public class MultiInstanceHandler {
.eq(ActivityExtensionData::getActivityDefId, taskDefId)
.eq(ActivityExtensionData::getProcessDefId, process.getId()));
HashSet<String> candidateUserIds = new HashSet();
if (list.size () > 0) {
if (!list.isEmpty()) {
ActivityExtensionData activityExtensionData = list.get(0);
List<WorkflowAssignee> workflowAssigneeList = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class)
.findById(activityExtensionData.getId()).getWorkflowAssigneeList();
@ -57,7 +57,7 @@ public class MultiInstanceHandler { @@ -57,7 +57,7 @@ public class MultiInstanceHandler {
case "company":
// 获取公司下的人员进行候选
if (StrUtil.isNotBlank(workflowAssignee.getValue())) {
List<Map<String, Object>> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_DEPT_ID, workflowAssignee.getValue());
List<Map<String, Object>> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_DEPT_ID, workflowAssignee.getValue(), SecurityUtils.getTenantIdLike());
candidateUserIds.addAll(userList.stream().map(user -> MapUtil.getStr(user, "id")).collect(Collectors.toList()));
}
break;
@ -66,7 +66,7 @@ public class MultiInstanceHandler { @@ -66,7 +66,7 @@ public class MultiInstanceHandler {
if (StrUtil.isNotBlank(workflowAssignee.getValue())) {
String[] roleIds = workflowAssignee.getValue().split (",");
for(String roleId: roleIds){
List<Map<String, Object>> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_ROLE_ID, roleId);
List<Map<String, Object>> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_ROLE_ID, roleId, SecurityUtils.getTenantIdLike());
candidateUserIds.addAll(userList.stream().map(user -> MapUtil.getStr(user, "id")).collect(Collectors.toList()));
}
}
@ -77,6 +77,7 @@ public class MultiInstanceHandler { @@ -77,6 +77,7 @@ public class MultiInstanceHandler {
case "previousExecutor":
// 查询上一个任务的处理人进行候选
HistoricTaskInstance historicTaskInstance = SpringContextHolderUtil.getBean(HistoryService.class).createHistoricTaskInstanceQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(execution.getProcessInstanceId()).finished()
.includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc().list().get(0);
candidateUserIds.add(historicTaskInstance.getAssignee());

22
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowModelServiceImpl.java

@ -3,6 +3,7 @@ package com.cloud.kicc.workflow.service.impl; @@ -3,6 +3,7 @@ package com.cloud.kicc.workflow.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.workflow.api.entity.WorkflowModel;
import com.cloud.kicc.workflow.api.extension.entity.ActivityExtensionProperty;
import com.cloud.kicc.workflow.extension.service.ActivityExtensionDataService;
@ -33,6 +34,7 @@ import javax.xml.stream.XMLInputFactory; @@ -33,6 +34,7 @@ import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
@ -77,8 +79,8 @@ public class WorkflowModelServiceImpl extends ServiceImpl<WorkflowModelMapper, W @@ -77,8 +79,8 @@ public class WorkflowModelServiceImpl extends ServiceImpl<WorkflowModelMapper, W
public void remove(String id) {
Model model = modelService.getModel(id);
try {
List<String> modelKeyList = StrUtil.split(model.getKey(), new Character(','));
modelKeyList.forEach(modelKey -> this.deleteDeployment(modelKey));
List<String> modelKeyList = StrUtil.split(model.getKey(), ',');
modelKeyList.forEach(this::deleteDeployment);
this.modelService.deleteModel(model.getId());
activityExtensionDataService.deleteByProcessDefId(model.getKey());
activityExtensionPropertyService.remove(new LambdaUpdateWrapper<ActivityExtensionProperty>()
@ -103,7 +105,7 @@ public class WorkflowModelServiceImpl extends ServiceImpl<WorkflowModelMapper, W @@ -103,7 +105,7 @@ public class WorkflowModelServiceImpl extends ServiceImpl<WorkflowModelMapper, W
@Override
public String deploy(String id, String category) {
String message = "";
StringBuilder message = new StringBuilder();
try {
Model model = modelService.getModel(id);
byte[] bpmnBytes = modelService.getBpmnXML(model);
@ -112,12 +114,14 @@ public class WorkflowModelServiceImpl extends ServiceImpl<WorkflowModelMapper, W @@ -112,12 +114,14 @@ public class WorkflowModelServiceImpl extends ServiceImpl<WorkflowModelMapper, W
if (!StringUtils.endsWith(processName, ".bpmn20.xml")) processName += ".bpmn20.xml";
Deployment deployment = repositoryService.createDeployment()
.tenantId(SecurityUtils.getUser().getTenantId())
.addBytes(processName, bpmnBytes)
.name(model.getName())
.key(model.getKey())
.deploy();
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
.processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike())
.deploymentId(deployment.getId()).list();
// 设置流程分类
@ -125,30 +129,30 @@ public class WorkflowModelServiceImpl extends ServiceImpl<WorkflowModelMapper, W @@ -125,30 +129,30 @@ public class WorkflowModelServiceImpl extends ServiceImpl<WorkflowModelMapper, W
if (StringUtils.isNotBlank(category)) {
repositoryService.setProcessDefinitionCategory(processDefinition.getId(), category);
}
message += "部署成功,流程ID=" + processDefinition.getId() ;
message.append("部署成功,流程ID=").append(processDefinition.getId());
}
if (list.size() == 0) {
message = "部署失败,没有流程。";
if (list.isEmpty()) {
message = new StringBuilder("部署失败,没有流程。");
}
} catch (Exception e) {
throw new FlowableException("设计模型图不正确,检查模型正确性,模型ID=" + id, e);
}
return message;
return message.toString();
}
@Override
public String changeXmlToJson(String xml) {
try {
XMLInputFactory xif = XmlUtil.createSafeXmlInputFactory();
InputStreamReader xmlIn = new InputStreamReader(new ByteArrayInputStream(xml.getBytes("UTF-8")), "UTF-8");
InputStreamReader xmlIn = new InputStreamReader(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8);
XMLStreamReader xsr = xif.createXMLStreamReader(xmlIn);
// bpmn模型转换
BpmnModel bpmnModel = this.bpmnXmlConverter.convertToBpmnModel(xsr);
if (CollectionUtils.isEmpty(bpmnModel.getProcesses())) {
throw new BadRequestException("在定义中没有发现进程" );
} else {
if (bpmnModel.getLocationMap().size() == 0) {
if (bpmnModel.getLocationMap().isEmpty()) {
BpmnAutoLayout bpmnLayout = new BpmnAutoLayout(bpmnModel);
bpmnLayout.execute();
}

64
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowProcessServiceImpl.java

@ -82,6 +82,7 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -82,6 +82,7 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
@Override
public IPage<ProcessDefinitionInfoVo> list(Map<String, Object> params) {
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery()
.processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike())
.active().latestVersion().orderByProcessDefinitionKey().asc();
String name = MapUtil.getStr(params, "name"),
@ -103,7 +104,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -103,7 +104,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
List<ProcessDefinition> processDefinitionList = query.listPage((current - 1) * size, size);
for (ProcessDefinition processDefinition : processDefinitionList) {
if(this.validateProcessAuth(SecurityUtils.getUser(), processDefinition.getId())){
Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(processDefinition.getDeploymentId()).singleResult();
Deployment deployment = repositoryService.createDeploymentQuery()
.deploymentTenantIdLike(SecurityUtils.getTenantIdLike())
.deploymentId(processDefinition.getDeploymentId()).singleResult();
ProcessDefinitionInfoVo processDefinitionInfo =new ProcessDefinitionInfoVo();
processDefinitionInfo.setId(processDefinition.getId());
processDefinitionInfo.setCategory(processDefinition.getCategory());
@ -129,10 +132,12 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -129,10 +132,12 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
@Override
public IPage<ProcessInstanceInfoVo> runList(Map<String, Object> params) {
ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery().includeProcessVariables();
ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.includeProcessVariables();
String processInsId = MapUtil.getStr(params, "processInsId"),
processDefKey = MapUtil.getStr(params, "processDefKey");
processDefKey = MapUtil.getStr(params, "processDefKey");
if (StrUtil.isNotBlank(processInsId)) {
query.processInstanceId(processInsId);
@ -163,7 +168,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -163,7 +168,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
@Override
public IPage<ProcessInstanceInfoVo> historyList(Map<String, Object> params) {
HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().finished()
HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.includeProcessVariables().finished()
.orderByProcessInstanceEndTime().desc();
String processInsId = MapUtil.getStr(params, "processInsId"),
@ -203,11 +210,13 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -203,11 +210,13 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
public InputStream readResource(String processInsId, String processDefId, String fileType) {
if (StrUtil.isBlank(processDefId)) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult();
processDefId = processInstance.getProcessDefinitionId();
}
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike())
.processDefinitionId(processDefId).singleResult();
String resourceName = "";
@ -217,8 +226,7 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -217,8 +226,7 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
resourceName = processDefinition.getResourceName();
}
InputStream resourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName);
return resourceAsStream;
return repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName);
}
@Override
@ -242,9 +250,13 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -242,9 +250,13 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
@Override
public void stopProcessInstance(String processInsId, ExtendMessage extendMessage, String comment) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult();
if (processInstance != null) {
Task task = taskService.createTaskQuery().processInstanceId(processInsId).list().get(0);
Task task = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).list().get(0);
// 设置审批记录
ActivityCommentInfoVo activityCommentInfo = new ActivityCommentInfoVo();
@ -264,7 +276,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -264,7 +276,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
String endId = endNodes.get(0).getId();
// 执行终止流程
List<Execution> executions = runtimeService.createExecutionQuery().parentId(processInsId).list();
List<Execution> executions = runtimeService.createExecutionQuery()
.executionTenantIdLike(SecurityUtils.getTenantIdLike())
.parentId(processInsId).list();
List<String> executionIds = new ArrayList<>();
executions.forEach(execution -> executionIds.add(execution.getId()));
this.moveExecutionsToSingleActivityId(executionIds, endId);
@ -295,7 +309,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -295,7 +309,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
public ProcessInstanceInfoVo queryProcessState(String processInstanceId) {
ProcessInstanceInfoVo processInstanceInfo = new ProcessInstanceInfoVo();
// 通过流程实例ID查询流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInstanceId).singleResult();
if (processInstance != null) {
if (processInstance.isSuspended()) {
//挂起实例
@ -303,16 +319,21 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -303,16 +319,21 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
} else {
//执行实例
processInstanceInfo.setExtendMessage(ExtendMessage.PROCESS_WAITING);
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).list().get(0);
Task task = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInstanceId).list().get(0);
processInstanceInfo.setTaskInfo(new TaskInfoVo(task));
processInstanceInfo.setTaskName(task.getName());
}
return processInstanceInfo;
} else {
HistoricProcessInstance historicProcessInstance =
historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInstanceId).singleResult();
//查询历史流程完整历史活动
HistoricActivityInstance historicActivityInstance = historyService.createHistoricActivityInstanceQuery()
.activityTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInstanceId).finished()
.orderByHistoricActivityInstanceEndTime().desc().list().stream()
.filter(activity ->
@ -356,37 +377,42 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -356,37 +377,42 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
@Override
public ProcessDefinition getProcessDefinition(String processDefId) {
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery()
.processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike())
.latestVersion().orderByProcessDefinitionKey().asc();
if (StrUtil.isNotBlank(processDefId)) {
processDefinitionQuery.processDefinitionId(processDefId);
}
ProcessDefinition processDefinition = processDefinitionQuery.singleResult();
return processDefinition;
return processDefinitionQuery.singleResult();
}
public ProcessDefinition getProcessDefinitionByKey(String processDefKey) {
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery()
.processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike())
.latestVersion().orderByProcessDefinitionKey().asc();
if (StrUtil.isNotBlank(processDefKey)) {
processDefinitionQuery.processDefinitionKey(processDefKey);
}
ProcessDefinition processDefinition = processDefinitionQuery.singleResult();
return processDefinition;
return processDefinitionQuery.singleResult();
}
@Override
public ProcessInstance getProcessInstance(String processInsId) {
return runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
return runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult();
}
@Override
public HistoricProcessInstance getFinishedProcessInstance(String processInsId) {
return historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult();
return historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult();
}
@Override
public IPage<ProcessInstanceInfoVo> selfProcessInstanceList(Map<String, Object> params) {
HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.startedBy(SecurityUtils.getUser().getId()).includeProcessVariables().orderByProcessInstanceStartTime().desc();
String title = MapUtil.getStr(params, " title");
@ -452,7 +478,7 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @@ -452,7 +478,7 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService {
// 启动流程实例
String processInsId = runtimeService
.startProcessInstanceByKey(processDefKey, String.join(":",businessTable,businessId), vars)
.startProcessInstanceByKeyAndTenantId(processDefKey, String.join(":",businessTable,businessId), vars, SecurityUtils.getTenantId())
.getProcessInstanceId();
// 更新业务表流程实例ID,确保业务表字段process_ins_id存在

96
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowTaskServiceImpl.java

@ -2,6 +2,7 @@ package com.cloud.kicc.workflow.service.impl; @@ -2,6 +2,7 @@ package com.cloud.kicc.workflow.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -41,6 +42,7 @@ import org.springframework.jdbc.core.JdbcTemplate; @@ -41,6 +42,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.sql.ResultSet;
import java.sql.Types;
import java.util.*;
import java.util.stream.Collectors;
@ -80,6 +82,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -80,6 +82,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
public IPage<ProcessInstanceInfoVo> list(Map<String, Object> params) {
// =============== 已经签收或者等待签收的任务 ===============
TaskQuery query = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.taskCandidateOrAssigned(SecurityUtils.getUser().getId()).active()
.includeProcessVariables().orderByTaskCreateTime().desc();
@ -112,6 +115,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -112,6 +115,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
for (Task task : taskList) {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike())
.processDefinitionId(task.getProcessDefinitionId()).singleResult();
ProcessInstanceInfoVo processInstanceInfo = new ProcessInstanceInfoVo();
TaskInfoVo taskInfo = new TaskInfoVo(task);
@ -130,6 +134,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -130,6 +134,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
@Override
public IPage<HistoryTaskInfoVo> historyList(Map<String, Object> params) {
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.taskAssignee(SecurityUtils.getUser().getId()).finished()
.includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc();
@ -162,18 +167,21 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -162,18 +167,21 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
for (HistoricTaskInstance historicTask : historicTaskList) {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike())
.processDefinitionId(historicTask.getProcessDefinitionId()).singleResult();
HistoryTaskInfoVo HistoryTaskInfo = new HistoryTaskInfoVo(historicTask);
HistoryTaskInfo.setProcessDefName(processDefinition.getName());
HistoryTaskInfo.setRollBack(this.rollBackTask(historicTask));
List<Task> taskList = taskService.createTaskQuery().processInstanceId(historicTask.getProcessInstanceId()).list();
if (taskList.size() > 0) {
List<Task> taskList = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(historicTask.getProcessInstanceId()).list();
if (!taskList.isEmpty()) {
TaskInfoVo taskInfo = new TaskInfoVo(taskList.get(0));
HistoryTaskInfo.setTaskInfo(taskInfo);
}
// 获取意见评论内容
List<ActivityCommentInfoVo> activityCommentInfoList = this.getTaskComments(historicTask.getId());
if (activityCommentInfoList.size() > 0) {
if (!activityCommentInfoList.isEmpty()) {
ActivityCommentInfoVo activityCommentInfo = activityCommentInfoList.get(activityCommentInfoList.size()-1);
HistoryTaskInfo.setComment(activityCommentInfo.getMessage());
HistoryTaskInfo.setMesLevel(activityCommentInfo.getMesLevel());
@ -188,15 +196,15 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -188,15 +196,15 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
@Override
public List<Workflow> historyFlowChangeList(String processInsId) {
List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery()
.activityTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).orderByHistoricActivityInstanceStartTime().asc()
.orderByHistoricActivityInstanceEndTime().asc().list();
List<Workflow> historicFlowChangeList = new ArrayList();
for (int i = 0; i < historicActivityInstances.size(); i++) {
HistoricActivityInstance historicActivityInstance = historicActivityInstances.get(i);
for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
// 只显示开始节点和结束节点,并且执行人不为空的任务
if (StrUtil.isNotBlank(historicActivityInstance.getAssignee())
&& historyService.createHistoricTaskInstanceQuery().taskId(historicActivityInstance.getTaskId()).count() != 0
&& historyService.createHistoricTaskInstanceQuery().taskTenantIdLike(SecurityUtils.getTenantIdLike()).taskId(historicActivityInstance.getTaskId()).count() != 0
|| BpmnXMLConstants.ELEMENT_TASK_USER.equals(historicActivityInstance.getActivityType())
&& historicActivityInstance.getEndTime() == null
|| BpmnXMLConstants.ELEMENT_EVENT_START.equals(historicActivityInstance.getActivityType())
@ -259,7 +267,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -259,7 +267,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
processVars.put(WorkflowConstant.TITLE, workFlow.getTitle());
}
Task task = taskService.createTaskQuery().taskId(workFlow.getTaskId()).singleResult();
Task task = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.taskId(workFlow.getTaskId()).singleResult();
// owner不为空说明可能存在委托任务
if (StrUtil.isNotBlank(task.getOwner())){
DelegationState delegationState = task.getDelegationState();
@ -292,15 +302,20 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -292,15 +302,20 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
public Map getPaintDiagramXml(String processInsId) {
Map result = MapUtil.newHashMap();
String processDefId;
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult();
// 获取流程定义ID
if(processInstance == null) {
processDefId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult().getProcessDefinitionId();
processDefId = historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult().getProcessDefinitionId();
} else {
processDefId = processInstance.getProcessDefinitionId();
}
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId);
List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery()
.activityTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).finished()
.orderByHistoricActivityInstanceEndTime().asc().list();
@ -312,14 +327,16 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -312,14 +327,16 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
if (activityType.equals(BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW) || activityType.equals(BpmnXMLConstants.ELEMENT_GATEWAY_EXCLUSIVE)) {
flows.add(historicActivityInstance.getActivityId());
} else if (StrUtil.isNotBlank(historicActivityInstance.getAssignee())
&& historyService.createHistoricTaskInstanceQuery().taskId(historicActivityInstance.getTaskId()).count() != 0
&& historyService.createHistoricTaskInstanceQuery().taskTenantIdLike(SecurityUtils.getTenantIdLike()).taskId(historicActivityInstance.getTaskId()).count() != 0
|| BpmnXMLConstants.ELEMENT_TASK_USER.equals(historicActivityInstance.getActivityType()) && historicActivityInstance.getEndTime() == null
|| BpmnXMLConstants.ELEMENT_EVENT_START.equals(historicActivityInstance.getActivityType())
|| BpmnXMLConstants.ELEMENT_EVENT_END.equals(historicActivityInstance.getActivityType())) {
activityIds.add(historicActivityInstance.getActivityId());
}
}
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInsId).list();
List<Task> tasks = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).list();
for (Task task : tasks) {
activityIds.add(task.getTaskDefinitionKey());
}
@ -337,13 +354,16 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -337,13 +354,16 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
@Override
public void rollBackTask(String rollBackTaskDefKey, String currentTaskId, ActivityCommentInfoVo activityCommentInfo) {
Task task = taskService.createTaskQuery().taskId(currentTaskId).singleResult();
Task task = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.taskId(currentTaskId).singleResult();
if(StrUtil.isBlank(task.getAssignee())){
//代理人为空自己签收任务
taskService.claim(currentTaskId, SecurityUtils.getUser().getId());
}
// 退回发起者处理,退回到发起者,默认设置任务执行人为发起者
ActivityInstance targetRealActivityInstance = runtimeService.createActivityInstanceQuery()
.activityTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(task.getProcessInstanceId()).activityId(rollBackTaskDefKey).list().get(0);
if (targetRealActivityInstance.getActivityType().equals(BpmnXMLConstants.ELEMENT_EVENT_START)) {
workflowProcessServices.stopProcessInstance(task.getProcessInstanceId(), ExtendMessage.PROCESS_REJECT, activityCommentInfo.getMessage());
@ -355,7 +375,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -355,7 +375,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
@Override
public List<Workflow> rollBackTaskList(String taskId) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Task task = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.taskId(taskId).singleResult();
String processInstanceId = task.getProcessInstanceId();
String currentActivityId = task.getTaskDefinitionKey();
String processDefinitionId = task.getProcessDefinitionId();
@ -364,14 +386,15 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -364,14 +386,15 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
//获取已经完成的活动节点
List<ActivityInstance> activityInstanceList = runtimeService.createActivityInstanceQuery()
.activityTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInstanceId).finished().orderByActivityInstanceStartTime().asc().list();
//获取已经完成节点的活动ID
List<String> activityIds = activityInstanceList.stream().filter(activity -> activity.getActivityType()
.equals(BpmnXMLConstants.ELEMENT_TASK_USER) || activity.getActivityType()
.equals(BpmnXMLConstants.ELEMENT_EVENT_START))
.filter(activity ->!activity.getActivityId().equals(currentActivityId))
.map(ActivityInstance::getActivityId).distinct().collect(Collectors.toList());
.map(ActivityInstance::getActivityId)
.filter(activityId ->!activityId.equals(currentActivityId)).distinct().collect(Collectors.toList());
List<Workflow> result = CollectionUtil.newArrayList();
for (String activityId : activityIds) {
@ -394,16 +417,21 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -394,16 +417,21 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
Map result = new HashMap ();
try {
String processDefId;
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult();
//流程走完的不显示图
if (pi == null) {
processDefId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult().getProcessDefinitionId();
processDefId = historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).singleResult().getProcessDefinitionId();
} else {
processDefId = pi.getProcessDefinitionId();
}
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId);
List<HistoricActivityInstance> historyProcess = historyService // 历史相关Service
.createHistoricActivityInstanceQuery() // 创建历史活动实例查询
.activityTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId) // 执行流程实例id
.finished().orderByHistoricActivityInstanceEndTime().asc()
.list();
@ -411,7 +439,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -411,7 +439,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
Set<String> runActivityIds = new LinkedHashSet();
for (HistoricActivityInstance hi : historyProcess) {
if (StrUtil.isNotBlank(hi.getAssignee())
&& historyService.createHistoricTaskInstanceQuery().taskId(hi.getTaskId()).count() != 0
&& historyService.createHistoricTaskInstanceQuery().taskTenantIdLike(SecurityUtils.getTenantIdLike()).taskId(hi.getTaskId()).count() != 0
|| BpmnXMLConstants.ELEMENT_TASK_USER.equals(hi.getActivityType()) && hi.getEndTime() == null
|| BpmnXMLConstants.ELEMENT_EVENT_START.equals(hi.getActivityType())
|| BpmnXMLConstants.ELEMENT_EVENT_END.equals(hi.getActivityType())
@ -420,7 +448,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -420,7 +448,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
activityIds.add(hi.getActivityId());
}
}
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list();
List<Task> taskList = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(processInsId).list();
for (Task task : taskList) {
runActivityIds.add(task.getTaskDefinitionKey());
}
@ -430,7 +460,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -430,7 +460,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
result.put("runActivityIds", runActivityIds);
return result;
} catch(Exception e) {
e.printStackTrace();
log.error("An error occurred", e);
}
return null;
}
@ -438,15 +468,19 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -438,15 +468,19 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
/** 是否可以回滚任务 */
private boolean rollBackTask(HistoricTaskInstance historicTaskInstance) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(historicTaskInstance.getProcessInstanceId()).singleResult();
if (processInstance != null) {
if (!processInstance.isSuspended()) {
Task currentTask = taskService.createTaskQuery().processInstanceId(historicTaskInstance.getProcessInstanceId()).list().get(0);
Task currentTask = taskService.createTaskQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(historicTaskInstance.getProcessInstanceId()).list().get(0);
HistoricTaskInstance lastHisTask = historyService.createHistoricTaskInstanceQuery()
.taskTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(historicTaskInstance.getProcessInstanceId()).finished().includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc().list().get(0);
// 用户已签收
if (currentTask.getClaimTime() != null) return false;
if (historicTaskInstance.getId().equals(lastHisTask.getId())) return true;
return historicTaskInstance.getId().equals(lastHisTask.getId());
}
}
return false;
@ -454,7 +488,10 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -454,7 +488,10 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
/** 获取任务意见评论内容 */
private List<ActivityCommentInfoVo> getTaskComments(String taskId) {
return jdbcTemplate.query(SqlConstants.QUERY_ACT_HI_COMMENT, new String[]{ WorkflowConstant.COMMENT_TYPE_PREFIX + "%", taskId } ,(ResultSet rs, int rowNum) -> {
return jdbcTemplate.query(SqlConstants.QUERY_ACT_HI_COMMENT,
new String[]{ WorkflowConstant.COMMENT_TYPE_PREFIX + "%", taskId },
new int[]{ Types.VARCHAR, Types.VARCHAR },
(ResultSet rs, int rowNum) -> {
ActivityCommentInfoVo activityCommentInfo = new ActivityCommentInfoVo();
activityCommentInfo.setExtendMessage(rs.getString("TYPE_"));
activityCommentInfo.setCombinationMessage(new String(rs.getBytes("FULL_MSG_")));
@ -470,12 +507,13 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -470,12 +507,13 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
// 获取开始事件流程发起人名称
if (BpmnXMLConstants.ELEMENT_EVENT_START.equals(historicActivityInstance.getActivityType())) {
List<HistoricProcessInstance> historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantIdLike(SecurityUtils.getTenantIdLike())
.processInstanceId(historicActivityInstance.getProcessInstanceId())
.orderByProcessInstanceStartTime().asc().list();
if (historicProcessInstanceList.size() > 0) {
if (!historicProcessInstanceList.isEmpty()) {
if (StrUtil.isNotBlank(historicProcessInstanceList.get(0).getStartUserId())) {
Map<String, Object> user = jdbcTemplate.queryForMap(SqlConstants.QUERY_USER_BY_ID, historicProcessInstanceList.get(0).getStartUserId());
if (user != null) {
Map<String, Object> user = jdbcTemplate.queryForMap(SqlConstants.QUERY_USER_BY_ID, historicProcessInstanceList.get(0).getStartUserId(), SecurityUtils.getTenantIdLike());
if (ObjectUtil.isNotEmpty(user)) {
workflow.setAssignee(historicActivityInstance.getAssignee());
workflow.setAssigneeName(MapUtil.getStr(user, "userName"));
}
@ -500,8 +538,8 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -500,8 +538,8 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
// 获取任务执行人名称
if (StrUtil.isNotEmpty(historicActivityInstance.getAssignee())) {
Map<String, Object> user = jdbcTemplate.queryForMap(SqlConstants.QUERY_USER_BY_ID,historicActivityInstance.getAssignee());
if (user != null) {
Map<String, Object> user = jdbcTemplate.queryForMap(SqlConstants.QUERY_USER_BY_ID, historicActivityInstance.getAssignee(), SecurityUtils.getTenantIdLike());
if (ObjectUtil.isNotEmpty(user)) {
workflow.setAssignee(historicActivityInstance.getAssignee());
workflow.setAssigneeName(MapUtil.getStr(user, "userName"));
}
@ -510,7 +548,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @@ -510,7 +548,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService {
// 获取意见评论内容
if (StrUtil.isNotBlank(historicActivityInstance.getTaskId())) {
List<ActivityCommentInfoVo> activityCommentInfoList = this.getTaskComments(historicActivityInstance.getTaskId());
if (activityCommentInfoList.size() > 0) {
if (!activityCommentInfoList.isEmpty()) {
ActivityCommentInfoVo activityCommentInfo = activityCommentInfoList.get(activityCommentInfoList.size()-1);
workflow.setActivityCommentInfo((activityCommentInfo));
}

10
kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/util/WorkflowUtil.java

@ -37,7 +37,7 @@ public class WorkflowUtil { @@ -37,7 +37,7 @@ public class WorkflowUtil {
return false;
}
// 没有流出的seq流:可能是结束。流程或嵌入的子流程
if (sourceElement.getOutgoingFlows().size() == 0) {
if (sourceElement.getOutgoingFlows().isEmpty()) {
visitedElements.add(sourceElement.getId());
FlowElementsContainer parentElement = process.findParent(sourceElement);
if (parentElement instanceof SubProcess) {
@ -61,7 +61,7 @@ public class WorkflowUtil { @@ -61,7 +61,7 @@ public class WorkflowUtil {
return true;
}
List<SequenceFlow> sequenceFlows = sourceElement.getOutgoingFlows();
if (sequenceFlows != null && sequenceFlows.size() > 0) {
if (sequenceFlows != null && !sequenceFlows.isEmpty()) {
for (SequenceFlow sequenceFlow : sequenceFlows) {
String targetRef = sequenceFlow.getTargetRef();
FlowNode sequenceFlowTarget = (FlowNode) process.getFlowElement(targetRef, true);
@ -77,7 +77,7 @@ public class WorkflowUtil { @@ -77,7 +77,7 @@ public class WorkflowUtil {
}
/** 当前元素是否是事件子流程 */
protected boolean isInEventSubprocess(FlowNode flowNode) {
private boolean isInEventSubprocess(FlowNode flowNode) {
FlowElementsContainer flowElementsContainer = flowNode.getParentContainer();
while (flowElementsContainer != null) {
if (flowElementsContainer instanceof EventSubProcess) {
@ -207,7 +207,7 @@ public class WorkflowUtil { @@ -207,7 +207,7 @@ public class WorkflowUtil {
//收集节点ID
elements.add(specialGatewayBegin.getId());
List<SequenceFlow> sequenceFlows = ((FlowNode) specialGatewayBegin).getOutgoingFlows();
if (sequenceFlows != null && sequenceFlows.size() > 0) {
if (sequenceFlows != null && !sequenceFlows.isEmpty()) {
for (SequenceFlow sequenceFlow : sequenceFlows) {
FlowElement targetFlowElement = sequenceFlow.getTargetFlowElement();
String targetFlowElementId = targetFlowElement.getId();
@ -295,7 +295,7 @@ public class WorkflowUtil { @@ -295,7 +295,7 @@ public class WorkflowUtil {
}
taskParentExecution = taskParentExecution.getParent();
}
if (realParentExecutionId == null || realParentExecutionId.length() == 0) {
if (realParentExecutionId == null || realParentExecutionId.isEmpty()) {
throw new FlowableException("无法找到带有executionId的父执行" + execution.getId());
}
return realParentExecutionId;

Loading…
Cancel
Save