Browse Source

[feat]

1、联调预警相关功能
2、开发流程部门关系设置功能
pull/1/head
杨威 3 months ago
parent
commit
d5441f5235
  1. 2
      dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java
  2. 8
      dk-common/common-core/src/main/java/org/dromara/common/core/enums/BusinessStatusEnum.java
  3. 18
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  4. 19
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java
  5. 19
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java
  6. 4
      dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java
  7. 16
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  8. 4
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  9. 57
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  10. 18
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  11. 5
      dk-modules/system/src/main/java/org/dromara/system/domain/SysDept.java
  12. 5
      dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java
  13. 15
      dk-modules/workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java
  14. 16
      dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java
  15. 5
      dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java
  16. 14
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

2
dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java

@ -15,5 +15,5 @@ public interface RemoteBusinessAlertService {
* @param businessId 业务id(预警工单) * @param businessId 业务id(预警工单)
* @param flowStatus 流程状态 * @param flowStatus 流程状态
*/ */
void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType); void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType,String message,String assignName);
} }

8
dk-common/common-core/src/main/java/org/dromara/common/core/enums/BusinessStatusEnum.java

@ -32,10 +32,16 @@ public enum BusinessStatusEnum {
* 草稿 * 草稿
*/ */
DRAFT("draft", "草稿"), DRAFT("draft", "草稿"),
/**
* 处理中
*/
WAITING("waiting", "处理中"),
/** /**
* 待审核 * 待审核
*/ */
WAITING("waiting", "待审核"), TODO("todo", "待审核"),
/** /**
* 已完成 * 已完成
*/ */

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

@ -165,6 +165,24 @@ public class BusinessAlert extends BaseEntity {
*/ */
private String jobName; private String jobName;
/**
* 指派人员
*/
private String assignUserId;
/**
* 指派人员名称
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assignUserId")
private String assignUserName;
/**
* 指派时间
*/
private Date assignDate;
/** /**
* 处理时间 * 处理时间
*/ */

19
dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java

@ -10,6 +10,9 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -224,5 +227,21 @@ public class BusinessAlertBo {
*/ */
private String postCode; private String postCode;
/**
* 指派人员
*/
private String assignUserId;
/**
* 指派人员名称
*/
private String assignUserName;
/**
* 指派时间
*/
private Date assignDate;
} }

19
dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java

@ -6,6 +6,8 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.BusinessAlert;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -233,4 +235,21 @@ public class BusinessAlertVo implements Serializable {
@ExcelProperty(value = "来源:0:平台 1:小程序") @ExcelProperty(value = "来源:0:平台 1:小程序")
private Long handleSource; private Long handleSource;
/**
* 指派人员
*/
private String assignUserId;
/**
* 指派人员名称
*/
private String assignUserName;
/**
* 指派时间
*/
private Date assignDate;
} }

4
dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java

@ -23,7 +23,7 @@ public class RemoteBusinessAlertServiceImpl implements RemoteBusinessAlertServic
* @param flowStatus 流程状态 * @param flowStatus 流程状态
*/ */
@Override @Override
public void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType) { public void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType,String message,String assignName) {
businessAlertService.updateAlertStatus(businessId,flowStatus,isIllegal,alertType); businessAlertService.updateAlertStatus(businessId,flowStatus,isIllegal,alertType,message,assignName);
} }
} }

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

@ -29,10 +29,22 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
Page<BusinessAlert> pageAlertFinish(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
* @param ew
* @return
*/
Page<BusinessAlert> pageAlertTodo(Page<BusinessAlert> page, QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageAlertTodo(Page<BusinessAlert> page, QueryWrapper<BusinessAlert> ew);
Page<BusinessAlert> pageBusinessAlertCancel(Page<BusinessAlert> build, QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageBusinessAlertCancel(Page<BusinessAlert> build, QueryWrapper<BusinessAlert> ew);
@DataPermission( @DataPermission(

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

@ -20,6 +20,8 @@ public interface IBusinessAlertService {
TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery); TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageAlertAssign(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery); TableDataInfo<BusinessAlert> pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertCancel(BusinessAlertBo bo, PageQuery pageQuery); TableDataInfo<BusinessAlert> pageBusinessAlertCancel(BusinessAlertBo bo, PageQuery pageQuery);
@ -62,7 +64,7 @@ public interface IBusinessAlertService {
* @param businessId * @param businessId
* @param flowStatus * @param flowStatus
*/ */
void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType); void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType,String message,String assignName);
TableDataInfo<BusinessAlert> getInfo(BusinessAlertBo bo, PageQuery pageQuery, String alertCode); TableDataInfo<BusinessAlert> getInfo(BusinessAlertBo bo, PageQuery pageQuery, String alertCode);
} }

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

@ -26,10 +26,7 @@ import org.dromara.workflow.api.RemoteWorkflowService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Collections; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -109,7 +106,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
* @param flowStatus * @param flowStatus
*/ */
@Override @Override
public void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType) { public void updateAlertStatus(String businessId, String flowStatus,Boolean isIllegal,String alertType,String message,String assignName) {
LambdaUpdateWrapper<BusinessAlert> wrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<BusinessAlert> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(BusinessAlert::getHandleType, BusinessStatusEnum.getByStatus(flowStatus).getStatus()); wrapper.set(BusinessAlert::getHandleType, BusinessStatusEnum.getByStatus(flowStatus).getStatus());
if (ObjectUtil.isNotEmpty(isIllegal)){ if (ObjectUtil.isNotEmpty(isIllegal)){
@ -118,6 +115,17 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
if (ObjectUtil.isNotEmpty(alertType)){ if (ObjectUtil.isNotEmpty(alertType)){
wrapper.set(BusinessAlert::getAlertType, alertType); wrapper.set(BusinessAlert::getAlertType, alertType);
} }
if (ObjectUtil.isNotEmpty(message)){
wrapper.set(BusinessAlert::getReason, message);
}
//判断指派人员是否为空
if (ObjectUtil.isNotEmpty(assignName)){
wrapper.set(BusinessAlert::getAssignUserId, assignName);
wrapper.set(BusinessAlert::getAssignDate, new Date());
}
wrapper.eq(BusinessAlert::getId, businessId); wrapper.eq(BusinessAlert::getId, businessId);
this.baseMapper.update(wrapper); this.baseMapper.update(wrapper);
@ -189,6 +197,45 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return TableDataInfo.build(page); 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);
}
/** /**
* 查询当前用户待办预警 * 查询当前用户待办预警

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

@ -73,6 +73,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </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
${ew.getCustomSqlSegment}
</select>
<select id="listMonthAlert" resultType="java.util.Map"> <select id="listMonthAlert" resultType="java.util.Map">
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -11 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -11 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 0 MONTH), '%Y-%m') where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 0 MONTH), '%Y-%m')

5
dk-modules/system/src/main/java/org/dromara/system/domain/SysDept.java

@ -87,4 +87,9 @@ public class SysDept extends TenantEntity {
*/ */
private String shpNo; private String shpNo;
/**
* 是否需要指派
*/
private Boolean assign;
} }

5
dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java

@ -78,4 +78,9 @@ public class SysDeptBo extends BaseEntity {
*/ */
private String shpNo; private String shpNo;
/**
* 是否指派
*/
private Boolean assign;
} }

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

@ -79,6 +79,21 @@ public class CompleteTaskBo implements Serializable {
*/ */
private String alertTypeContent; private String alertTypeContent;
/**
* 网关判断(是否需要介入)
*/
private Boolean flag = true;
/**
* 动态负责人
*/
private String handler;
/**
* 是否需要指派
*/
private Boolean assign = true;
public Map<String, Object> getVariables() { public Map<String, Object> getVariables() {
if (variables == null) { if (variables == null) {
return new HashMap<>(16); return new HashMap<>(16);

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

@ -1,5 +1,6 @@
package org.dromara.workflow.handler; package org.dromara.workflow.handler;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.api.RemoteBusinessAlertService; import org.dromara.business.api.RemoteBusinessAlertService;
@ -12,6 +13,8 @@ import org.dromara.workflow.common.handler.FlwCommonHandler;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Map;
/** /**
* 流程预警扩展业务 * 流程预警扩展业务
*/ */
@ -31,7 +34,16 @@ public class FlwAlertHandler implements FlwCommonHandler {
@EventListener(condition = "#processEvent.flowCode.startsWith('alert')") @EventListener(condition = "#processEvent.flowCode.startsWith('alert')")
@Override @Override
public void processHandler(ProcessEvent processEvent) { public void processHandler(ProcessEvent processEvent) {
alertService.updateAlertStatus(processEvent.getBusinessId(),processEvent.getStatus(),processEvent.getIsIllegal(),processEvent.getAlertType()); 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);
} }
/** /**
@ -43,7 +55,7 @@ public class FlwAlertHandler implements FlwCommonHandler {
@EventListener(condition = "#processCreateTaskEvent.flowCode.startsWith('alert')") @EventListener(condition = "#processCreateTaskEvent.flowCode.startsWith('alert')")
@Override @Override
public void processCreateTaskHandler(ProcessCreateTaskEvent processCreateTaskEvent) { public void processCreateTaskHandler(ProcessCreateTaskEvent processCreateTaskEvent) {
alertService.updateAlertStatus(processCreateTaskEvent.getBusinessId(), BusinessStatusEnum.WAITING.getStatus(),processCreateTaskEvent.getIsIllegal(),processCreateTaskEvent.getAlertType()); alertService.updateAlertStatus(processCreateTaskEvent.getBusinessId(), BusinessStatusEnum.WAITING.getStatus(),processCreateTaskEvent.getIsIllegal(),processCreateTaskEvent.getAlertType(),null,null);
} }
/** /**

5
dk-modules/workflow/src/main/java/org/dromara/workflow/handler/WorkflowPermissionHandler.java

@ -41,7 +41,7 @@ public class WorkflowPermissionHandler implements PermissionHandler {
return new ArrayList<>(); return new ArrayList<>();
} }
// 使用一个流来构建权限列表 // 使用一个流来构建权限列表
return Stream.of( List<String> permissionList = Stream.of(
// 角色权限前缀 // 角色权限前缀
loginUser.getRoles().stream() loginUser.getRoles().stream()
.map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()), .map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()),
@ -58,6 +58,9 @@ public class WorkflowPermissionHandler implements PermissionHandler {
) )
.flatMap(stream -> stream) .flatMap(stream -> stream)
.collect(Collectors.toList()); .collect(Collectors.toList());
permissionList.add("${handler}");
return permissionList;
} }
/** /**

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

@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.api.RemoteBusinessAlertService;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
@ -96,6 +97,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
@Autowired @Autowired
private ApplicationContext applicationContext; private ApplicationContext applicationContext;
@Autowired
private RemoteBusinessAlertService remoteBusinessAlertService;
/** /**
* 启动任务 * 启动任务
* *
@ -127,6 +131,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.flowCode(startProcessBo.getFlowCode()); flowParams.flowCode(startProcessBo.getFlowCode());
flowParams.variable(startProcessBo.getVariables()); flowParams.variable(startProcessBo.getVariables());
flowParams.flowStatus(BusinessStatusEnum.DRAFT.getStatus()); flowParams.flowStatus(BusinessStatusEnum.DRAFT.getStatus());
Instance instance; Instance instance;
try { try {
@ -143,8 +149,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
dto.setProcessInstanceId(instance.getId()); dto.setProcessInstanceId(instance.getId());
dto.setTaskId(taskList.get(0).getId()); dto.setTaskId(taskList.get(0).getId());
//创建任务 remoteBusinessAlertService.updateAlertStatus(startProcessBo.getBusinessId(),flowParams.getFlowStatus(),null,null,null,null);
executeTask(taskList.get(0).getId());
return dto; return dto;
} }
@ -176,6 +181,11 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
} }
// 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息 // 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
// 流程变量
completeTaskBo.getVariables().put("flag",completeTaskBo.getFlag());
completeTaskBo.getVariables().put("assign",completeTaskBo.getAssign());
completeTaskBo.getVariables().put("handler", completeTaskBo.getHandler());
flowParams.variable(completeTaskBo.getVariables()); flowParams.variable(completeTaskBo.getVariables());
flowParams.skipType(SkipType.PASS.getKey()); flowParams.skipType(SkipType.PASS.getKey());
flowParams.message(completeTaskBo.getMessage()); flowParams.message(completeTaskBo.getMessage());

Loading…
Cancel
Save