yitonglei 3 years ago
parent 12970e4a33
commit 86fba72cfe
  1. 5
      lab-common/src/main/java/org/springblade/common/constant/TenantConstant.java
  2. 19
      lab-ops/lab-xxljob/src/main/java/org/springblade/job/executor/client/IRemindClient.java
  3. 30
      lab-ops/lab-xxljob/src/main/java/org/springblade/job/executor/jobhandler/RemindXxlJob.java
  4. 6
      lab-plugin/lab-workflow/pom.xml
  5. 2
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/controller/HomePageController.java
  6. 2
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/enumutil/TaskTypeColorEnum.java
  7. 12
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/impl/HomePageServiceImpl.java
  8. 12
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/controller/WorkBenchController.java
  9. 45
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/enumutil/RemindTypeEnum.java
  10. 2
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IWorkBenchService.java
  11. 76
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/WorkBenchServiceImpl.java
  12. 22
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/util/RemindIntervalDayClass.java
  13. 19
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/util/RemindNoClass.java
  14. 14
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/util/RemindOperation.java
  15. 40
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/util/RemindTueClass.java

@ -48,4 +48,9 @@ public interface TenantConstant {
"desk", "flow", "work", "monitor", "resource", "role", "user", "dept", "dictbiz", "topmenu"
);
/**
* 默认租户id
*/
String DEFAULT_TENANT_ID = "000000";
}

@ -0,0 +1,19 @@
package org.springblade.job.executor.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @Description 调用提醒模式接口类
* @Author ytl
* @Date 2023/2/18 0018 18:04
*/
@FeignClient(
value = "blade-workflow"
)
public interface IRemindClient {
String API_PREFIX = "/workBench/remind";
@GetMapping(API_PREFIX)
void remind();
}

@ -0,0 +1,30 @@
package org.springblade.job.executor.jobhandler;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.job.executor.client.IRemindClient;
import org.springframework.stereotype.Component;
/**
* @Description
* @Author ytl
* @Date 2023/2/18 0018 18:10
*/
@Component("remindXxlJob")
@AllArgsConstructor
@Slf4j
public class RemindXxlJob {
private final IRemindClient remindClient;
@XxlJob("remindToComplateJob")
public ReturnT<String> remindToComplateJob(String param) throws Exception {
log.info("执行工作流提醒任务。。。。");
remindClient.remind();
return ReturnT.SUCCESS;
}
}

@ -70,6 +70,12 @@
<artifactId>flowable-json-converter</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>lab-resource-api</artifactId>
<version>2.8.1.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

@ -54,7 +54,7 @@ public class HomePageController extends BladeController {
result.put("todayFinishNum", todayFinishNum.get());
return R.data(result);
// return homePageService.aboutMy();
// return homePageService.aboutMy();
}

@ -38,7 +38,7 @@ public enum TaskTypeColorEnum {
Map<String,String> re = new HashMap<>();
TaskTypeColorEnum[] values = values();
for(TaskTypeColorEnum r:values){
re.put(r.code, r.getValue());
re.put(r.getCode(), r.getValue());
}
return re;
}

@ -167,7 +167,8 @@ public class HomePageServiceImpl implements IHomePageService {
.taskTenantId(WfTaskUtil.getTenantId())
.active();
taskQuery.taskCandidateOrAssigned(taskUser)
.taskCandidateGroupIn(Func.toStrList(taskGroup));
//.taskCandidateGroupIn(Func.toStrList(taskGroup))
;
List<Task> listNeedDo = taskQuery.list();
@ -206,7 +207,8 @@ public class HomePageServiceImpl implements IHomePageService {
.taskTenantId(WfTaskUtil.getTenantId())
.active();
taskQuery.taskCandidateOrAssigned(taskUser)
.taskCandidateGroupIn(Func.toStrList(taskGroup));
//.taskCandidateGroupIn(Func.toStrList(taskGroup))
;
List<Task> listNeedDo = taskQuery.list();
return new AsyncResult<>(listNeedDo.size());
@ -215,8 +217,7 @@ public class HomePageServiceImpl implements IHomePageService {
@Async
@Override
public Future<Integer> todayAddNum(){
String taskUser = WfTaskUtil.getTaskUser();
String taskGroup = WfTaskUtil.getCandidateGroup();
//当前获取登录人deptid
String deptId = AuthUtil.getDeptId();
List<Long> nowUserDepts = Func.toLongList(deptId);
@ -252,8 +253,7 @@ public class HomePageServiceImpl implements IHomePageService {
@Async
@Override
public Future<Integer> todayFinishNum(){
String taskUser = WfTaskUtil.getTaskUser();
String taskGroup = WfTaskUtil.getCandidateGroup();
//当前获取登录人deptid
String deptId = AuthUtil.getDeptId();
List<Long> nowUserDepts = Func.toLongList(deptId);

@ -1,9 +1,13 @@
package org.springblade.plugin.workbench.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.plugin.workbench.service.IWorkBenchService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -19,6 +23,14 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/workBench")
@Api(value = "工作台", tags = "工作台")
public class WorkBenchController extends BladeController {
private final IWorkBenchService workBenchService;
@GetMapping("/remind")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "调用提醒任务", notes = "调用提醒任务")
public void remind(){
System.out.println("执行工作台调度任务。。。。。。");
workBenchService.getTaskToRemind();
}
}

@ -0,0 +1,45 @@
package org.springblade.plugin.workbench.enumutil;
import org.springblade.plugin.homepage.enumutil.TaskTypeColorEnum;
import java.util.HashMap;
import java.util.Map;
/**
* @Description 提醒模式
* @Author ytl
* @Date 2023/2/18 0018 17:28
*/
public enum RemindTypeEnum {
不提醒("1624975489913384962","remindNoClass"),
每周一("1624975573531029506","remindTueClass"),
每隔一天("1624975644792254466", "remindIntervalDayClass"),
到期前2天("1624975688895361025", "remindBeforeTwoDayClass");
//表dict_biz中code = reminde_mode 的id
private String code;
//表dict_biz中code = reminde_mode 的dict_value
private String name;
RemindTypeEnum(String code, String name){
this.name = name;
this.code = code;
}
public String getCode(){
return code;
}
public String getName(){
return name;
}
public static Map<String,String> getAllToMap() {
Map<String,String> re = new HashMap<>();
RemindTypeEnum[] values = values();
for(RemindTypeEnum r:values){
re.put(r.getCode(), r.getName());
}
return re;
}
}

@ -7,5 +7,5 @@ package org.springblade.plugin.workbench.service;
*/
public interface IWorkBenchService {
void getTaskToRemind();
}

@ -1,18 +1,24 @@
package org.springblade.plugin.workbench.service.impl;
import lombok.AllArgsConstructor;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.constant.TenantConstant;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.plugin.workbench.enumutil.RemindTypeEnum;
import org.springblade.plugin.workbench.service.IWorkBenchService;
import org.springblade.plugin.workbench.util.RemindOperation;
import org.springblade.plugin.workflow.core.utils.WfTaskUtil;
import org.springblade.system.cache.DictBizCache;
import org.springblade.system.entity.DictBiz;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -26,19 +32,32 @@ public class WorkBenchServiceImpl implements IWorkBenchService {
private final TaskService taskService;
public void getTask(){
//获取正在运行的任务
List<Task> list = taskService.createTaskQuery().taskTenantId(WfTaskUtil.getTenantId()).list();
private final RuntimeService runtimeService;
@Override
public void getTaskToRemind(){
List<Task> list = new ArrayList<>();
//获取正在运行的任务 WfTaskUtil.getTenantId()
String tenantId = WfTaskUtil.getTenantId();
if(Func.isEmpty(tenantId) || Func.isBlank(tenantId)){
list = taskService.createTaskQuery().taskTenantId(TenantConstant.DEFAULT_TENANT_ID).list();
}
Map<String,List<Task>> taskRemindMap = new HashMap<>();
//筛选出到期的任务
List<Task> collect = list.stream().filter(ts -> {
Map<String, Object> variableMap = ts.getProcessVariables();
if(Func.isNotEmpty(variableMap.get("qiwangwanchengshijian")) && Func.isNotBlank(variableMap.get("qiwangwanchengshijian").toString())){
Date qiwangwanchengshijian = DateUtil.parse(variableMap.get("qiwangwanchengshijian").toString(), "yyyy-MM-dd HH:mm:ss");
if(DateUtil.between(DateUtil.now(), qiwangwanchengshijian).isNegative()){
return true;
Map<String, Object> variableMap = runtimeService.getVariables(ts.getProcessInstanceId());
if(Func.isNotEmpty(variableMap)){
if(Func.isNotEmpty(variableMap.get("qiwangwanchengshijian")) && Func.isNotBlank(variableMap.get("qiwangwanchengshijian").toString())){
Date qiwangwanchengshijian = DateUtil.parse(variableMap.get("qiwangwanchengshijian").toString(), "yyyy-MM-dd HH:mm:ss");
if(DateUtil.between(DateUtil.now(), qiwangwanchengshijian).isNegative()){
return true;
}else{
return false;
}
}else{
return false;
}
@ -47,14 +66,33 @@ public class WorkBenchServiceImpl implements IWorkBenchService {
}
}).collect(Collectors.toList());
List<DictBiz> reminde_mode = DictBizCache.getList("reminde_mode");
Map<String,List<Task>> map = new HashMap<>();
//将到期任务按照提醒类型分类
collect.forEach(cl ->{
Map<String, Object> variableMap = runtimeService.getVariables(cl.getProcessInstanceId());
if(Func.isNotEmpty(variableMap.get("tixingmoshi")) && Func.isNotBlank(variableMap.get("tixingmoshi").toString())){
DictBiz tixingmoshi = DictBizCache.getById(Long.parseLong(variableMap.get("tixingmoshi").toString()));
List<Task> tasks;
if(map.get(tixingmoshi.getDictValue()) == null){
tasks = new ArrayList<Task>();
}else{
tasks = map.get(tixingmoshi.getDictValue());
}
tasks.add(cl);
map.put(tixingmoshi.getDictValue(), tasks);
}
});
//遍历map并根据具体的操作类去执行提醒
Iterator<Map.Entry<String, List<Task>>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, List<Task>> next = iterator.next();
List<Task> tasks = next.getValue();
String key = next.getKey();
// //将到期任务按照提醒类型分类
// collect.forEach(cl ->{
// Map<String, Object> variableMap = cl.getProcessVariables();
// if(Func.isNotEmpty(variableMap.get("tixingmoshi")) && Func.isNotBlank(variableMap.get("tixingmoshi").toString())){
//
// }
// });
RemindOperation bean = SpringUtil.getContext().getBean(RemindTypeEnum.valueOf(key).getName(), RemindOperation.class);
bean.remind(tasks);
}
}
}

@ -0,0 +1,22 @@
package org.springblade.plugin.workbench.util;
import lombok.AllArgsConstructor;
import org.flowable.task.api.Task;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @Description
* @Author ytl
* @Date 2023/2/20 0020 13:10
*/
@Component(value = "remindTueClass")
@AllArgsConstructor
public class RemindIntervalDayClass implements RemindOperation{
@Override
public void remind(List<Task> list) {
}
}

@ -0,0 +1,19 @@
package org.springblade.plugin.workbench.util;
import org.flowable.task.api.Task;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @Description
* @Author ytl
* @Date 2023/2/18 0018 17:54
*/
@Component(value = "remindNoClass")
public class RemindNoClass implements RemindOperation{
@Override
public void remind(List<Task> list) {
System.out.println("不执行提醒");
}
}

@ -0,0 +1,14 @@
package org.springblade.plugin.workbench.util;
import org.flowable.task.api.Task;
import java.util.List;
/**
* @Description 提醒操作
* @Author ytl
* @Date 2023/2/18 0018 17:51
*/
public interface RemindOperation {
public void remind(List<Task> list);
}

@ -0,0 +1,40 @@
package org.springblade.plugin.workbench.util;
import lombok.AllArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.flowable.task.api.Task;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.resource.enums.SysTypeEnum;
import org.springblade.resource.feign.IMessageClient;
import org.springframework.stereotype.Component;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.util.List;
/**
* @Description
* @Author ytl
* @Date 2023/2/18 0018 17:55
*/
@Component(value = "remindTueClass")
@AllArgsConstructor
public class RemindTueClass implements RemindOperation {
private final IMessageClient messageClient;
@Override
public void remind(List<Task> list) {
System.out.println("每周一提醒");
String s = DateUtil.fromDate(DateUtil.now()).getDayOfWeek().toString();
if(StringUtils.isNotBlank(s) && StringUtils.equals("MONDAY",s)){
list.forEach(task ->{
// 发送提示消息
messageClient.event(SysTypeEnum.INFORM.getValue(), "任务",
"你有新的任务(审批),请及时处理", 1, 5, task.getAssignee() == null ? "" : task.getAssignee(), "");
});
}
}
}
Loading…
Cancel
Save