1.删除多余无用的代码

main
yitonglei 3 years ago
parent 43289cdb45
commit 2138517a35
  1. 30
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/AsyncPoolConfig.java
  2. 134
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/config/TaskConfig.java
  3. 8
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/listener/ProcessEndListener.java
  4. 2
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/controller/WorkBenchController.java
  5. 45
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/enumutil/RemindTypeEnum.java
  6. 4
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IAutoStartModelService.java
  7. 1
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IWorkBenchService.java
  8. 83
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/AutoStartModelServiceImpl.java
  9. 138
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/WorkBenchServiceImpl.java

@ -1,30 +0,0 @@
package org.springblade.plugin.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @Description 异步调度任务的线程池配置
* @Author ytl
* @Date 2023/3/2 0002 11:28
*/
@EnableAsync
@Configuration
public class AsyncPoolConfig {
@Bean("taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(1);
executor.setMaxPoolSize(1);
executor.setQueueCapacity(200);
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("taskExecutor-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}

@ -1,134 +0,0 @@
package org.springblade.plugin.config;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.plugin.operation.workorder.entity.WorkOrder;
import org.springblade.plugin.operation.workorder.service.IWorkOrderService;
import org.springblade.plugin.workbench.entity.AutoStartModel;
import org.springblade.plugin.workbench.enumutil.RepeatEnum;
import org.springblade.plugin.workbench.service.IAutoStartModelService;
import org.springblade.plugin.workflow.core.utils.WfTaskUtil;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
* @Description 定时任务异步执行
* @Author ytl
* @Date 2023/3/1 0001 17:35
*/
@Component
@EnableScheduling
@AllArgsConstructor
@Slf4j
public class TaskConfig {
private final IAutoStartModelService autoStartModelService;
private final IWorkOrderService workOrderService;
/**
* 重复执行新建工单
* *只要autoStartModel中存在 next_flag = 0 is_break = 0 status = 10
* *然后 next_Start_time <= 当前时间就生成新工单并修改next_flag = 1
*/
// @Scheduled(fixedDelay = 90*1000)//上次任务结束后10分钟执行一次
// @Transactional(rollbackFor = Exception.class)
// @Async("taskExecutor")
public void autoStartWorkOrder(){
System.out.println("重复执行工单任务要开始了。。..");
LocalDate nowDay = LocalDate.now();
LambdaQueryWrapper<AutoStartModel> wrapper = Wrappers.lambdaQuery();
wrapper.eq(AutoStartModel::getIsBreak,0).eq(AutoStartModel::getStatus,10);
List<AutoStartModel> list = autoStartModelService.list(wrapper);
if(list.size() > 0){
for(AutoStartModel autoStartModel : list){
if(autoStartModel.getNextFlag() == 1){//说明是首次工作流结束后已经自动生成工单了
autoStartModel.setNextFlag(0);
}else{
Date nextStartTime = autoStartModel.getNextStartTime();
LocalDateTime localDateTime = DateUtil.fromDate(nextStartTime);
LocalDate nextStartDay = LocalDate.of(localDateTime.getYear(),localDateTime.getMonth(),localDateTime.getDayOfMonth());
if(nowDay.equals(nextStartDay) || nowDay.isAfter(nextStartDay)){
WorkOrder workOrder = new WorkOrder();
workOrder.setApplyUser(autoStartModel.getApplyUser().toString());
workOrder.setMaintenanceCompany(autoStartModel.getMaintenanceCompany().toString());
workOrder.setManagement(autoStartModel.getManagement().toString());
workOrder.setTaskParent(autoStartModel.getTaskParent().toString());
workOrder.setTaskType(autoStartModel.getTaskType().toString());
workOrder.setTaskLevel(autoStartModel.getTaskLevel().toString());
workOrder.setRepeatMode(autoStartModel.getRepeatMode().toString());
workOrder.setOperateSys(autoStartModel.getOperateSys().toString());
workOrder.setOperateModule(autoStartModel.getOperateModule().toString());
workOrder.setProcessInstanceId(autoStartModel.getProcessInstanceId());
workOrder.setType(autoStartModel.getType());
workOrder.setTenantId(autoStartModel.getTenantId());
workOrder.setUploadRecord(autoStartModel.getUploadRecord());
workOrder.setExpectedCompletionTime(autoStartModel.getNextEndTime());
//新增
workOrderService.save(workOrder);
log.info("TaskConfig生成新工单的流程id:{},生成时间是:{}",autoStartModel.getProcessInstanceId(),autoStartModel.getNextEndTime());
}
}
//修改下次开始时间
this.updateNextDateOfOrder(autoStartModel);
}
}
}
/**
* 修改下次工单开始结束时间
* @param autoStartModel
*/
private void updateNextDateOfOrder(AutoStartModel autoStartModel){
Long repeatMode = autoStartModel.getRepeatMode();
if(StringUtils.equals(RepeatEnum.每周.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusWeeks(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusWeeks(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每月.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMonths(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMonths(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每季度.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMonths(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMonths(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每天.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusDays(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusDays(autoStartModel.getNextEndTime(),1));
}else if(StringUtils.equals(RepeatEnum.每分钟.getCode(),repeatMode.toString())){
autoStartModel.setNextStartTime(DateUtil.plusMinutes(autoStartModel.getNextStartTime(),1));
autoStartModel.setNextEndTime(DateUtil.plusMinutes(autoStartModel.getNextEndTime(),1));
}
else{
return;
}
autoStartModel.setNextFlag(0);
autoStartModelService.updateById(autoStartModel);
log.info("TaskConfig修改工单的下次结束时间{},流程id:{}",autoStartModel.getNextEndTime(),autoStartModel.getProcessInstanceId());
}
/**
* 新增工单并计算下次的时间
* @param autoStartModel
*/
private void newWorkOrderAndComputeNextTime(AutoStartModel autoStartModel){
}
}

@ -14,6 +14,7 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@ -44,7 +45,12 @@ public class ProcessEndListener implements ExecutionListener {
IAutoStartModelService autoStartModelService = (IAutoStartModelService) SpringContextHolder.getBean(AutoStartModelServiceImpl.class);
//判断工作流的的重复模式1
if (Func.isNotEmpty(variablesMap.get("chongfumoshi")) && !StringUtils.equals(RepeatEnum.不重复.getCode(), variablesMap.get("chongfumoshi").toString())) {
autoStartModelService.saveStartProcess(processInstanceId, variablesMap);
String s = autoStartModelService.saveStartProcess(processInstanceId, variablesMap);
try {
response.sendError(500,s);
} catch (IOException e) {
e.printStackTrace();
}
} else {//不重复任务
autoStartModelService.newWorkOrder(processInstanceId, variablesMap);
}

@ -39,8 +39,6 @@ import java.util.stream.Collectors;
@Api(value = "工作台", tags = "工作台")
public class WorkBenchController extends BladeController {
private final IWorkBenchService workBenchService;
private final IAutoStartModelService bladeManMadeService;
private final IAutoStartModelService autoStartModelService;

@ -1,45 +0,0 @@
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 的
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;
}
}

@ -24,11 +24,11 @@ public interface IAutoStartModelService extends BaseService<AutoStartModel> {
boolean breakAutoStartModel(String ids);
void updateAutoStartModel(String processinstanceId,Map<String,Object> variables);
// void updateAutoStartModel(String processinstanceId,Map<String,Object> variables);
String saveStartProcess(String processinstanceId,Map<String,Object> variables);
void newWorkOrder(String processInstanceId,Map<String,Object> variables);
boolean newWorkOrder(String processInstanceId,Map<String,Object> variables);
String newWorkOrderAndSaveModel(String processinstanceId,Map<String,Object> variables);

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

@ -3,6 +3,7 @@ package org.springblade.plugin.workbench.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import liquibase.pro.packaged.E;
import liquibase.pro.packaged.N;
import lombok.AllArgsConstructor;
import lombok.NonNull;
@ -30,37 +31,25 @@ import org.springblade.plugin.operation.system.entity.ModuleInfo;
import org.springblade.plugin.operation.system.entity.ProjectInfo;
import org.springblade.plugin.operation.system.service.IModuleInfoService;
import org.springblade.plugin.operation.system.service.IProjectInfoService;
import org.springblade.plugin.operation.task.entity.TaskInfo;
import org.springblade.plugin.operation.task.service.ITaskInfoService;
import org.springblade.plugin.operation.workorder.entity.WorkOrder;
import org.springblade.plugin.operation.workorder.service.IWorkOrderService;
import org.springblade.plugin.workbench.cache.FlowCache;
import org.springblade.plugin.workbench.entity.AutoStartModel;
import org.springblade.plugin.workbench.enumutil.RepeatEnum;
import org.springblade.plugin.workbench.enumutil.RepeatTypeEnum;
import org.springblade.plugin.workbench.mapper.BladeManMadeMapper;
import org.springblade.plugin.workbench.service.IAutoStartModelService;
import org.springblade.plugin.workbench.util.MyDateUtil;
import org.springblade.plugin.workbench.vo.AutoStartModelVO;
import org.springblade.plugin.workflow.core.utils.WfTaskUtil;
import org.springblade.system.cache.DictBizCache;
import org.springblade.system.cache.DictCache;
import org.springblade.system.cache.SysCache;
import org.springblade.system.entity.Dept;
import org.springblade.system.entity.Dict;
import org.springblade.system.entity.DictBiz;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.cache.UserCache;
import org.springblade.system.user.entity.User;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.constraints.NotEmpty;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
@ -184,31 +173,31 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
* @param processinstanceId
* @param variables
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateAutoStartModel(String processinstanceId,Map<String,Object> variables){
try{
Thread.sleep(200);
}catch (Exception e){
e.printStackTrace();
}
//查询AutoStartModel status = 10 isBreak = 0的数据
LambdaQueryWrapper<AutoStartModel> autoStartModelWrapper = Wrappers.lambdaQuery();
autoStartModelWrapper.eq(AutoStartModel::getProcessInstanceId,processinstanceId).eq(AutoStartModel::getIsBreak,0)
.ne(AutoStartModel::getNextFlag,0).eq(AutoStartModel::getStatus,1);
AutoStartModel autoStartModel = baseMapper.selectOne(autoStartModelWrapper);
if(Func.isNotEmpty(autoStartModel)){
//生成工单
//this.newWorkOrder(autoStartModel);
//更新autostartModel,使该条记录可以重复执行
// autoStartModel.setNextFlag(1);
autoStartModel.setStatus(10);
baseMapper.updateById(autoStartModel);
}
}
// @Override
// @Transactional(rollbackFor = Exception.class)
// public void updateAutoStartModel(String processinstanceId,Map<String,Object> variables){
// try{
// Thread.sleep(200);
// }catch (Exception e){
// e.printStackTrace();
// }
//
// //查询AutoStartModel status = 10 isBreak = 0的数据
// LambdaQueryWrapper<AutoStartModel> autoStartModelWrapper = Wrappers.lambdaQuery();
// autoStartModelWrapper.eq(AutoStartModel::getProcessInstanceId,processinstanceId).eq(AutoStartModel::getIsBreak,0)
// .ne(AutoStartModel::getNextFlag,0).eq(AutoStartModel::getStatus,1);
// AutoStartModel autoStartModel = baseMapper.selectOne(autoStartModelWrapper);
//
// if(Func.isNotEmpty(autoStartModel)){
// //生成工单
// //this.newWorkOrder(autoStartModel);
//
// //更新autostartModel,使该条记录可以重复执行
// // autoStartModel.setNextFlag(1);
// autoStartModel.setStatus(10);
// baseMapper.updateById(autoStartModel);
// }
// }
/**
* 不重复任务直接生成工单
@ -216,7 +205,7 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
* @param variables
*/
@Override
public void newWorkOrder(String processInstanceId,Map<String,Object> variables){
public boolean newWorkOrder(String processInstanceId,Map<String,Object> variables){
WorkOrder workOrder = new WorkOrder();
workOrder.setUploadRecord(JSON.toJSONString(variables.get("uploadrecord")));
@ -244,8 +233,20 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
workOrder.setIsFinish(1);
workOrder.setFinishTime(new Date());
}
workOrderService.save(workOrder);
boolean save = false;
save = workOrderService.save(workOrder);
int retryNum = 0;
while(retryNum < 5 && !save){
try{
save = workOrderService.save(workOrder);
}catch (Exception e){
e.printStackTrace();
}finally {
retryNum ++;
}
}
return save;
}
/**
@ -337,6 +338,7 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
saveOrder = this.newWorkOrder(autoStartModel);
}catch (Exception e){
e.printStackTrace();
}finally {
retrySaveOrder ++;
}
}
@ -359,7 +361,8 @@ public class AutoStartModelServiceImpl extends BaseServiceImpl<BladeManMadeMappe
insertModel = baseMapper.insert(autoStartModel);
}catch (Exception e){
e.printStackTrace();
retrySaveModel ++;
}finally {
retrySaveOrder ++;
}
}

@ -32,142 +32,4 @@ import java.util.*;
@AllArgsConstructor
public class WorkBenchServiceImpl implements IWorkBenchService {
private final TaskService taskService;
private final RuntimeService runtimeService;
private final IAutoStartModelService bladeManMadeService;
private final HistoryService historyService;
// @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 = 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;
// }
// }else{
// return false;
// }
// }).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();
//
// RemindOperation bean = SpringUtil.getContext().getBean(RemindTypeEnum.valueOf(key).getName(), RemindOperation.class);
// bean.remind(tasks);
// }
// }
@Override
public void getTaskToRepeat(){
LambdaQueryWrapper<AutoStartModel> wrapper = Wrappers.lambdaQuery();
wrapper.eq(AutoStartModel::getIsBreak, 0).eq(AutoStartModel::getStatus,10);
List<AutoStartModel> list = bladeManMadeService.list(wrapper);
Map<String,List<Map<String,Object>>> maps = new HashMap<>();
if(list.size() > 0){
for(AutoStartModel bl : list){
//历史流程变量
Map<String,Object> processVariables = new HashMap<>();
List<HistoricVariableInstance> list1 = historyService.createHistoricVariableInstanceQuery().processInstanceId(bl.getProcessInstanceId()).list();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(bl.getProcessInstanceId()).singleResult();
list1.forEach(l ->{
processVariables.put(l.getVariableName(),l.getValue());
});
if(Func.isNotEmpty(processVariables)){
//获取流程定义id key
processVariables.put("defid",historicProcessInstance.getProcessDefinitionId());
processVariables.put("defkey",historicProcessInstance.getProcessDefinitionKey());
//将当前BladeManMade表的processinstanceid和repeatnum传入
processVariables.put("processinstanceid",historicProcessInstance.getId());
User applyUser = UserCache.getUser(Long.parseLong(processVariables.get("applyUser").toString()));
processVariables.put("createRoleName",applyUser.getRealName());
//设置期望完成时间
processVariables.put("qiwangwanchengshijian", DateUtil.plusSeconds(DateUtil.now(),bl.getProcessSeconds()));
//同意设置isauto = 1
processVariables.put("isauto","1");
//负责人改为运维公司
Object yunweigongsi = processVariables.get("yunweigongsi");
processVariables.put("assignee",yunweigongsi);
Object chongfumoshi = processVariables.get("chongfumoshi");
if(Func.isNotEmpty(chongfumoshi)){
DictBiz chongfuDic = DictBizCache.getById(Long.valueOf(chongfumoshi.toString()));
if(Func.isNotEmpty(chongfuDic)){
if(Func.isNotEmpty(maps.get(chongfuDic.getDictValue()))){
List<Map<String, Object>> variableList = maps.get(chongfuDic.getDictValue());
variableList.add(processVariables);
maps.put(chongfuDic.getDictValue(),variableList);
}else{
List<Map<String, Object>> variableList01 = new ArrayList<>();
variableList01.add(processVariables);
maps.put(chongfuDic.getDictValue(),variableList01);
}
}
}
}
}
}
//遍历maps,调用具体的重复模式去执行重复新建工作流
if(Func.isNotEmpty(maps)){
Iterator<Map.Entry<String, List<Map<String, Object>>>> iterator = maps.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, List<Map<String, Object>>> next = iterator.next();
RepeatOperation repeatType = SpringUtil.getContext().getBean(RepeatTypeEnum.valueOf(next.getKey()).getName(), RepeatOperation.class);
repeatType.repeat(next.getValue());
}
}
}
}

Loading…
Cancel
Save