parent
43289cdb45
commit
2138517a35
9 changed files with 52 additions and 393 deletions
@ -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){ |
||||
|
||||
} |
||||
} |
||||
@ -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; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue