Browse Source

[feat]

1、联调预警相关功能
2、开发流程部门关系设置功能
pull/1/head
杨威 3 months ago
parent
commit
2b991dcc70
  1. 12
      dk-api/api-workflow/src/main/java/org/dromara/workflow/api/event/ProcessCreateTaskEvent.java
  2. 8
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  3. 9
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  4. 12
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  5. 2
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  6. 121
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  7. 105
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  8. 19
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteLabelPostServicelmpl.java
  9. 3
      dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelPostService.java
  10. 2
      dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java
  11. 7
      dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java
  12. 8
      dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLablePostServiceImpl.java
  13. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java
  14. 6
      dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java
  15. 18
      dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java
  16. 4
      dk-modules/workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java
  17. 9
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java
  18. 1
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java
  19. 1
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java
  20. 20
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
  21. 4
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java

12
dk-api/api-workflow/src/main/java/org/dromara/workflow/api/event/ProcessCreateTaskEvent.java

@ -6,6 +6,7 @@ import org.dromara.common.core.utils.SpringUtils;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import java.io.Serial;
import java.util.Map;
/**
* 流程创建任务监听
@ -54,6 +55,17 @@ public class ProcessCreateTaskEvent extends RemoteApplicationEvent {
*/
private Boolean isIllegal;
/**
* 办理参数
*/
private Map<String, Object> params;
/**
* 审核意见
*/
private String message;
public ProcessCreateTaskEvent() {
super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));
}

8
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java

@ -10,10 +10,10 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 预警服务

9
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java

@ -264,4 +264,13 @@ public class BusinessAlert extends BaseEntity {
@TableField(exist = false)
private String permissions;
/**
* 显示处置人员已办理预警状态
*/
@TableField(exist = false)
private String flowTaskStatus;
@TableField(exist = false)
private String alertId;
}

12
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java

@ -23,20 +23,14 @@ import java.util.Map;
*/
public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, BusinessAlertVo> {
@DataPermission(
@DataColumn(key = "deptName", value = "ba.dept_id")
)
Page<BusinessAlert> pageBusinessAlert(Page<BusinessAlert> page, QueryWrapper<BusinessAlert> ew);
Page<BusinessAlert> pageAlertFinish(Page<BusinessAlert> page, QueryWrapper<BusinessAlert> ew);
/**
* 待指派
* @param page
* @param ew
* @return
*/
Page<BusinessAlert> pageAlertAssign(Page<BusinessAlert> page, QueryWrapper<BusinessAlert> ew);
/**
* 处理中
* @param page

2
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java

@ -20,8 +20,6 @@ public interface IBusinessAlertService {
TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageAlertAssign(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertCancel(BusinessAlertBo bo, PageQuery pageQuery);

121
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java

@ -19,11 +19,16 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteLabelPostService;
import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.springframework.stereotype.Service;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
@ -139,9 +144,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
public TableDataInfo<BusinessAlert> pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
// if (ObjectUtil.isEmpty(wrapper)){
// return new TableDataInfo<>();
// }
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlert(pageQuery.build(), wrapper);
@ -159,11 +164,11 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
bo.setHandleType(BusinessStatusEnum.INVALID.getStatus());
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
// if (ObjectUtil.isEmpty(wrapper)){
// return new TableDataInfo<>();
// }
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
wrapper.in("b.flow_status", BusinessStatusEnum.INVALID.getStatus());
wrapper.in("t.flowStatus", BusinessStatusEnum.INVALID.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper);
@ -181,58 +186,17 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
public TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
// if (ObjectUtil.isEmpty(wrapper)){
// return new TableDataInfo<>();
// }
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
buildCommonQueryWrapper(wrapper);
wrapper.apply(" EXISTS(select * from dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)");
wrapper.in("a.approver", LoginHelper.getUserId());
wrapper.in("b.flow_status", BusinessStatusEnum.FINISH.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageAlertFinish(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
/**
* 查询当前用户待办预警
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<BusinessAlert> pageAlertAssign(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
// if (ObjectUtil.isEmpty(wrapper)){
// return new TableDataInfo<>();
// }
buildCommonQueryWrapper(wrapper);
wrapper.eq("uu.del_flag", 0);
wrapper.in("uu.type", 1,2,3);
wrapper.in("uu.processed_by", remoteWorkflowService.getPermissions());
wrapper.eq("b.flow_status", BusinessStatusEnum.DRAFT.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageAlertTodo(pageQuery.build(), wrapper);
List<BusinessAlert> records = page.getRecords();
if (CollUtil.isNotEmpty(records)) {
List<Long> taskIds = StreamUtils.toList(records, BusinessAlert::getFlowTaskId);
Map<Long, List<RemoteUserVo>> listMap = remoteWorkflowService.currentTaskAllUser(taskIds);
records.forEach(t -> {
List<RemoteUserVo> userList = listMap.getOrDefault(t.getId(), Collections.emptyList());
if (CollUtil.isNotEmpty(userList)) {
t.setApprover(StreamUtils.join(userList, e -> String.valueOf(e.getUserId())));
t.setApproveName(StreamUtils.join(userList, RemoteUserVo::getNickName));
}
});
}
return TableDataInfo.build(page);
}
/**
* 查询当前用户待办预警
@ -244,17 +208,13 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
public TableDataInfo<BusinessAlert> pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
// if (ObjectUtil.isEmpty(wrapper)){
// return new TableDataInfo<>();
// }
buildCommonQueryWrapper(wrapper);
wrapper.eq("uu.del_flag", 0);
wrapper.in("uu.type", 1,2,3);
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
wrapper.in("uu.processed_by", remoteWorkflowService.getPermissions());
wrapper.eq("b.flow_status", BusinessStatusEnum.WAITING.getStatus());
wrapper.eq("t.node_type", 1);
wrapper.in("t.approver", remoteWorkflowService.getPermissions());
wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
Page<BusinessAlert> page = this.baseMapper.pageAlertTodo(pageQuery.build(), wrapper);
@ -270,6 +230,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
}
});
}
return TableDataInfo.build(page);
}
@ -283,38 +244,34 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
QueryWrapper<BusinessAlert> wrapper = new QueryWrapper<>();
//根据当前用户职能获取识别类型
// List<RemoteAiLabelPostVo> postVoList = remoteLablePostService.selectLableByList(bo.getPostCode(), LoginHelper.getDeptId());
List<RemoteAiLabelPostVo> postVoList = remoteLablePostService.selectLabelByList(bo.getPostCode(), LoginHelper.getDeptId());
// if (ObjectUtil.isEmpty(postVoList)) {
// return null;
// }
//
//
// wrapper.in("ba.label_en",StreamUtils.toList(postVoList, RemoteAiLabelPostVo::getLabelEn));
if (ObjectUtil.isEmpty(postVoList)) {
return null;
}
wrapper.in("t.label_en",StreamUtils.toList(postVoList, RemoteAiLabelPostVo::getLabelEn));
//排除状态为验证状态预警
wrapper.ne("ba.handle_type", BusinessStatusEnum.VERIFY.getStatus());
wrapper.ne("t.handle_type", BusinessStatusEnum.VERIFY.getStatus());
if (ObjectUtil.isNotEmpty(bo.getHandleType())){
wrapper.eq("ba.handle_type", bo.getHandleType());
wrapper.eq("t.handle_type", bo.getHandleType());
}
if (ObjectUtil.isNotEmpty(bo.getJobName())){
wrapper.like("t.job_name", bo.getJobName());
}
wrapper.orderByAsc("ba.create_time");
if (ObjectUtil.isNotEmpty(bo.getCreateTime())){
wrapper.eq("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getCreateTime());
}
wrapper.orderByAsc("t.create_time");
return wrapper;
}
/**
* 构建通用流程wrapper
* @param wrapper
*/
private void buildCommonQueryWrapper(QueryWrapper<BusinessAlert> wrapper) {
wrapper.eq("a.del_flag",0);
wrapper.eq("b.del_flag",0);
wrapper.eq("c.del_flag",0);
wrapper.in("a.node_type",1,3,4);
}
/**
* 保存前的数据校验

105
dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml

@ -18,76 +18,67 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql>
<select id="pageBusinessAlert" resultType="org.dromara.business.domain.BusinessAlert">
select
ba.*,
b.flow_status flowStatus,
b.business_id businessId,
b.id instanceId
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id
select t.* from (select
ba.*,
b.flow_status flowStatus,
b.business_id businessId,
b.id instanceId
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id) t
${ew.getCustomSqlSegment}
</select>
<select id="pageBusinessAlertCancel" resultType="org.dromara.business.domain.BusinessAlert">
select
ba.*,
b.flow_status flowStatus,
b.business_id businessId,
b.id instanceId
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id
select t.* from (
select
ba.*,
b.flow_status flowStatus,
b.business_id businessId,
b.id instanceId
from dk_business.business_alert ba
inner join dk_workflow.flow_instance b on ba.id = b.business_id
) t
${ew.getCustomSqlSegment}
</select>
<select id="pageAlertFinish" resultType="org.dromara.business.domain.BusinessAlert">
select
ba.*,
b.flow_status flowStatus,
b.business_id businessId,
a.approver,
a.id flowTaskId,
b.id instanceId
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_his_task a on a.instance_id = b.id
left join dk_workflow.flow_definition c on a.definition_id = c.id
select t.* from (
select
ba.*,
b.flow_status flowStatus,
b.business_id businessId,
b.id instanceId
from dk_business.business_alert ba
inner join dk_workflow.flow_instance b on ba.id = b.business_id
where
b.del_flag = '0'
) t
${ew.getCustomSqlSegment}
</select>
<select id="pageAlertTodo" resultType="org.dromara.business.domain.BusinessAlert">
select
ba.*,
b.flow_status,
b.business_id,
uu.processed_by approver,
a.id flowTaskId,
b.id instanceId,
fn.permissions
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_task a on a.instance_id = b.id
left join dk_workflow.flow_user uu on uu.associated = a.id
left join dk_workflow.flow_definition c on a.definition_id = c.id
left join dk_workflow.flow_node fn on fn.node_code = b.node_code
${ew.getCustomSqlSegment}
</select>
<select id="pageAlertAssign" resultType="org.dromara.business.domain.BusinessAlert">
select
ba.*,
b.flow_status,
b.business_id,
uu.processed_by approver,
a.id flowTaskId,
b.id instanceId,
fn.permissions
from dk_business.business_alert ba
left join dk_workflow.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_task a on a.instance_id = b.id
left join dk_workflow.flow_user uu on uu.associated = a.id
left join dk_workflow.flow_definition c on a.definition_id = c.id
left join dk_workflow.flow_node fn on fn.node_code = b.node_code
select t.* from (
select
ba.*,
b.flow_status,
b.business_id,
uu.processed_by approver,
a.id flowTaskId,
b.id instanceId,
fn.permissions,
a.node_type
from dk_business.business_alert ba
inner join dk_workflow.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_task a on a.instance_id = b.id
left join dk_workflow.flow_user uu on uu.associated = a.id
left join dk_workflow.flow_definition c on a.definition_id = c.id
left join dk_workflow.flow_node fn on fn.node_code = b.node_code
where a.node_type = 1
and a.del_flag = '0'
and uu.del_flag = '0'
and uu.type in ('1','2','3')
) t
${ew.getCustomSqlSegment}
</select>

19
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteLabelPostServicelmpl.java

@ -3,16 +3,21 @@ package org.dromara.system.dubbo;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.system.api.RemoteLabelPostService;
import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo;
import org.dromara.system.domain.AiLabel;
import org.dromara.system.domain.AiLabelPost;
import org.dromara.system.domain.vo.AiLabelPostVo;
import org.dromara.system.domain.vo.SysPostVo;
import org.dromara.system.service.IAiLabelPostService;
import org.dromara.system.service.IAiLabelService;
import org.dromara.system.service.ISysPostService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @auther yq
@ -25,13 +30,23 @@ public class RemoteLabelPostServicelmpl implements RemoteLabelPostService {
private final ISysPostService sysPostService;
private final IAiLabelPostService aiLabelPostService;
private final IAiLabelService aiLabelService;
@Override
public List<RemoteAiLabelPostVo> selectLabelByList(String postCode, Long deptId) {
SysPostVo sysPostVo = sysPostService.selectLableByList(postCode, deptId);
if(sysPostVo != null){
List<AiLabelPostVo> aiLablePostVos = aiLabelPostService.queryListByLabel(sysPostVo.getPostId());
return MapstructUtils.convert(aiLablePostVos, RemoteAiLabelPostVo.class);
List<AiLabelPost> aiLablePostVos = aiLabelPostService.queryListByLabel(sysPostVo.getPostId());
List<AiLabel> aiLabelList = aiLabelService.queryListByLabel(StreamUtils.toList(aiLablePostVos,AiLabelPost::getLabelId));
return aiLabelList.stream()
.map(aiLabel -> {
RemoteAiLabelPostVo remoteAiLabelPostVo = new RemoteAiLabelPostVo();
remoteAiLabelPostVo.setLableId(aiLabel.getLabelId());
remoteAiLabelPostVo.setLabelEn(aiLabel.getLabelEn());
remoteAiLabelPostVo.setLabelCn(aiLabel.getLabelCn());
return remoteAiLabelPostVo;
})
.collect(Collectors.toList());
}
return new ArrayList<>();
}

3
dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelPostService.java

@ -1,5 +1,6 @@
package org.dromara.system.service;
import org.dromara.system.domain.AiLabelPost;
import org.dromara.system.domain.bo.AiLabelPostBo;
import org.dromara.system.domain.vo.AiLabelPostVo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -66,5 +67,5 @@ public interface IAiLabelPostService {
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<AiLabelPostVo> queryListByLabel(Long postId);
List<AiLabelPost> queryListByLabel(Long postId);
}

2
dk-modules/system/src/main/java/org/dromara/system/service/IAiLabelService.java

@ -70,4 +70,6 @@ public interface IAiLabelService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<AiLabel> queryListByLabel(List<Long> labelIds);
}

7
dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLabelServiceImpl.java

@ -135,4 +135,11 @@ public class AiLabelServiceImpl implements IAiLabelService {
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public List<AiLabel> queryListByLabel(List<Long> labelIds) {
LambdaQueryWrapper<AiLabel> wrapper = new LambdaQueryWrapper<>();
wrapper.in(AiLabel::getLabelId, labelIds);
return this.baseMapper.selectList(wrapper);
}
}

8
dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLablePostServiceImpl.java

@ -130,7 +130,11 @@ public class AiLablePostServiceImpl implements IAiLabelPostService {
}
@Override
public List<AiLabelPostVo> queryListByLabel(Long postId) {
return List.of();
public List<AiLabelPost> queryListByLabel(Long postId) {
LambdaQueryWrapper<AiLabelPost> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AiLabelPost::getPostId, postId);
return this.baseMapper.selectList(wrapper);
}
}

2
dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java

@ -92,7 +92,7 @@ public class CompleteTaskBo implements Serializable {
/**
* 是否需要指派
*/
private Boolean assign = true;
private Boolean assign = false;
public Map<String, Object> getVariables() {
if (variables == null) {

6
dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java

@ -3,12 +3,14 @@ package org.dromara.workflow.handler;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.workflow.api.event.ProcessCreateTaskEvent;
import org.dromara.workflow.api.event.ProcessDeleteEvent;
import org.dromara.workflow.api.event.ProcessEvent;
import org.dromara.workflow.common.ConditionalOnEnable;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
@ -51,7 +53,7 @@ public class FlowProcessEventHandler {
* @param taskId 任务id
* @param businessId 业务id
*/
public void processCreateTaskHandler(String flowCode, String nodeCode, Long taskId, String businessId) {
public void processCreateTaskHandler(String flowCode, String nodeCode, Long taskId, String businessId, Map<String, Object> variable, String message) {
String tenantId = TenantHelper.getTenantId();
log.info("发布流程任务事件, 租户ID: {}, 流程编码: {}, 节点编码: {}, 任务ID: {}, 业务ID: {}", tenantId, flowCode, nodeCode, taskId, businessId);
ProcessCreateTaskEvent processCreateTaskEvent = new ProcessCreateTaskEvent();
@ -60,6 +62,8 @@ public class FlowProcessEventHandler {
processCreateTaskEvent.setNodeCode(nodeCode);
processCreateTaskEvent.setTaskId(taskId);
processCreateTaskEvent.setBusinessId(businessId);
processCreateTaskEvent.setParams(variable);
processCreateTaskEvent.setMessage(message);
SpringUtils.context().publishEvent(processCreateTaskEvent);
}

18
dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java

@ -34,16 +34,7 @@ public class FlwAlertHandler implements FlwCommonHandler {
@EventListener(condition = "#processEvent.flowCode.startsWith('alert')")
@Override
public void processHandler(ProcessEvent processEvent) {
String message = null;
String assignName = null;
if (ObjectUtil.isNotEmpty(processEvent.getParams())){
message = ObjectUtil.isNotEmpty(processEvent.getParams().get("message"))?(String)processEvent.getParams().get("message"):null;
if ((Boolean) processEvent.getParams().get("assign")) {
assignName = ObjectUtil.isNotEmpty(processEvent.getParams().get("handler"))?(String)processEvent.getParams().get("handler"):null;
}
}
alertService.updateAlertStatus(processEvent.getBusinessId(),processEvent.getStatus(),processEvent.getIsIllegal(),processEvent.getAlertType(),message,assignName);
alertService.updateAlertStatus(processEvent.getBusinessId(),processEvent.getStatus(),processEvent.getIsIllegal(),processEvent.getAlertType(),null,null);
}
/**
@ -55,7 +46,12 @@ public class FlwAlertHandler implements FlwCommonHandler {
@EventListener(condition = "#processCreateTaskEvent.flowCode.startsWith('alert')")
@Override
public void processCreateTaskHandler(ProcessCreateTaskEvent processCreateTaskEvent) {
alertService.updateAlertStatus(processCreateTaskEvent.getBusinessId(), BusinessStatusEnum.WAITING.getStatus(),processCreateTaskEvent.getIsIllegal(),processCreateTaskEvent.getAlertType(),null,null);
String assignName = null;
if (ObjectUtil.isNotEmpty(processCreateTaskEvent.getParams())){
assignName = ObjectUtil.isNotEmpty(processCreateTaskEvent.getParams().get("handler"))?(String)processCreateTaskEvent.getParams().get("handler"):null;
}
alertService.updateAlertStatus(processCreateTaskEvent.getBusinessId(), BusinessStatusEnum.WAITING.getStatus(),processCreateTaskEvent.getIsIllegal(),processCreateTaskEvent.getAlertType(),processCreateTaskEvent.getMessage(),assignName);
}
/**

4
dk-modules/workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java

@ -50,9 +50,11 @@ public class WorkflowGlobalListener implements GlobalListener {
String businessId = instance.getBusinessId();
String flowStatus = instance.getFlowStatus();
Task task = listenerVariable.getTask();
Map<String, Object> variable = listenerVariable.getVariable();
FlowParams flowParams = listenerVariable.getFlowParams();
if (task != null && BusinessStatusEnum.WAITING.getStatus().equals(flowStatus)) {
// 判断流程状态(发布审批中事件)
flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), task.getNodeCode(), task.getId(), businessId);
flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), task.getNodeCode(), task.getId(), businessId,variable,flowParams.getMessage());
}
}

9
dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java

@ -15,6 +15,7 @@ import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -202,4 +203,12 @@ public interface IFlwTaskService {
*/
List<String> getPermissions();
/**
* 获取所有审批节点
* @param nodeCode
* @param definitionId
* @return
*/
List<Node> getByNodeCodes(String nodeCode,Long definitionId);
}

1
dk-modules/workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java

@ -93,4 +93,5 @@ public interface WorkflowService {
boolean processInvalid(Long instanceId);
List<RemoteUserVo> currentTaskAllUser(Long taskId);
}

1
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java

@ -25,7 +25,6 @@ public class FlwDepartServiceImpl extends ServiceImpl<FlwDepartMapper, FlowDepar
@Transactional(rollbackFor = Exception.class)
@Override
public FlowDepart bindDepart(FlowDepart flowDepart) {
//首先清楚原来的
LambdaQueryWrapper<FlowDepart> updateWrapper = new LambdaQueryWrapper<>();
updateWrapper.eq(FlowDepart::getFlowCode, flowDepart.getFlowCode());
this.baseMapper.delete(updateWrapper);

20
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@ -97,9 +97,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
@Autowired
private ApplicationContext applicationContext;
@Autowired
private RemoteBusinessAlertService remoteBusinessAlertService;
/**
* 启动任务
*
@ -149,7 +146,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
dto.setProcessInstanceId(instance.getId());
dto.setTaskId(taskList.get(0).getId());
remoteBusinessAlertService.updateAlertStatus(startProcessBo.getBusinessId(),flowParams.getFlowStatus(),null,null,null,null);
executeTask(taskList.get(0).getId());
return dto;
}
@ -181,12 +178,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
}
// 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息
FlowParams flowParams = new FlowParams();
Map<String, Object> variables = completeTaskBo.getVariables();
// 流程变量
completeTaskBo.getVariables().put("flag",completeTaskBo.getFlag());
completeTaskBo.getVariables().put("assign",completeTaskBo.getAssign());
completeTaskBo.getVariables().put("handler", completeTaskBo.getHandler());
variables.put("flag",completeTaskBo.getFlag());
variables.put("assign",completeTaskBo.getAssign());
variables.put("handler", completeTaskBo.getHandler());
flowParams.variable(completeTaskBo.getVariables());
flowParams.variable(variables);
flowParams.skipType(SkipType.PASS.getKey());
flowParams.message(completeTaskBo.getMessage());
flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.PASS.getStatus());
@ -320,6 +319,11 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return SpringUtils.getBean(WorkflowPermissionHandler.class).permissions();
}
@Override
public List<Node> getByNodeCodes(String nodeCode, Long definitionId) {
return nodeService.getByNodeCodes(Collections.singletonList(nodeCode), definitionId);
}
/**
* 查询当前用户的已办任务
*

4
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java

@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.warm.flow.core.entity.Node;
import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess;
@ -19,8 +20,11 @@ import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.service.WorkflowService;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 通用 工作流服务实现

Loading…
Cancel
Save