parent
3109a64a7e
commit
70842e9c76
8 changed files with 295 additions and 21 deletions
@ -0,0 +1,30 @@ |
||||
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(10); |
||||
executor.setMaxPoolSize(50); |
||||
executor.setQueueCapacity(200); |
||||
executor.setKeepAliveSeconds(60); |
||||
executor.setThreadNamePrefix("taskExecutor-"); |
||||
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); |
||||
return executor; |
||||
} |
||||
} |
||||
@ -0,0 +1,123 @@ |
||||
package org.springblade.plugin.config; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import lombok.AllArgsConstructor; |
||||
import org.apache.commons.lang3.StringUtils; |
||||
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 |
||||
public class TaskConfig { |
||||
private final IAutoStartModelService autoStartModelService; |
||||
private final IWorkOrderService workOrderService; |
||||
|
||||
/** |
||||
* 重复执行新建工单 |
||||
* *只要autoStartModel中存在 next_flag = 0 且 is_break = 0 |
||||
* *然后 next_Start_time <= 当前时间就生成新工单并修改next_flag = 1 |
||||
*/ |
||||
@Scheduled(fixedDelay = 6000*1000)//上次任务结束后10分钟执行一次
|
||||
@Transactional(rollbackFor = Exception.class) |
||||
@Async("taskExecutor") |
||||
public void autoStartWorkOrder(){ |
||||
|
||||
LocalDate nowDay = LocalDate.now(); |
||||
LambdaQueryWrapper<AutoStartModel> wrapper = Wrappers.lambdaQuery(); |
||||
wrapper.eq(AutoStartModel::getNextFlag, 0).eq(AutoStartModel::getIsBreak,0); |
||||
List<AutoStartModel> list = autoStartModelService.list(wrapper); |
||||
|
||||
if(list.size() > 0){ |
||||
for(AutoStartModel autoStartModel : list){ |
||||
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(WfTaskUtil.getTenantId()); |
||||
//新增
|
||||
workOrderService.save(workOrder); |
||||
//修改nextFlag = 1,表示已经生成新工单了
|
||||
autoStartModel.setNextFlag(1); |
||||
autoStartModelService.updateById(autoStartModel); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 自动计算下一次的开始和结束时间 |
||||
*/ |
||||
@Scheduled(fixedDelay = 6000*1000) |
||||
@Transactional(rollbackFor = Exception.class) |
||||
@Async("taskExecutor") |
||||
public void computerNextDateOfOrder(){ |
||||
|
||||
LambdaQueryWrapper<AutoStartModel> wrapper = Wrappers.lambdaQuery(); |
||||
wrapper.eq(AutoStartModel::getNextFlag, 1).eq(AutoStartModel::getIsBreak,0); |
||||
List<AutoStartModel> list = autoStartModelService.list(wrapper); |
||||
|
||||
if(list.size() > 0){ |
||||
list.forEach(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); |
||||
}); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,30 @@ |
||||
package org.springblade.plugin.workbench.enumutil; |
||||
|
||||
/** |
||||
* @Description |
||||
* @Author ytl |
||||
* @Date 2023/3/1 0001 18:04 |
||||
*/ |
||||
public enum RepeatEnum { |
||||
不重复("1627589799957266433"), |
||||
每周("1627589960532000769"), |
||||
每月("1627590001325801474"), |
||||
每季度("1627590044137062402"), |
||||
每天("1631099324142473218"), |
||||
每分钟("1631111669916913665"); |
||||
|
||||
//表dict_biz中code = reminde_mode 的id
|
||||
private String code; |
||||
|
||||
|
||||
RepeatEnum(String code){ |
||||
|
||||
this.code = code; |
||||
} |
||||
|
||||
public String getCode(){ |
||||
return code; |
||||
} |
||||
|
||||
|
||||
} |
||||
Loading…
Reference in new issue