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