getModelData() {
+ return modelData;
+ }
+
+ public void setEntNumber(String entNumber) {
+ this.entNumber = entNumber;
+ }
+ public String getEntNumber() {
+ return entNumber;
+ }
+
+ public void setCnName(String cnName) {
+ this.cnName = cnName;
+ }
+ public String getCnName() {
+ return cnName;
+ }
+
+ public void setEnName(String enName) {
+ this.enName = enName;
+ }
+ public String getEnName() {
+ return enName;
+ }
+
+ public void setEntCategory(String entCategory) {
+ this.entCategory = entCategory;
+ }
+ public String getEntCategory() {
+ return entCategory;
+ }
+
+ public void setReplaceNumber(String replaceNumber) {
+ this.replaceNumber = replaceNumber;
+ }
+ public String getReplaceNumber() {
+ return replaceNumber;
+ }
+
+ public void setReplacedNumber(String replacedNumber) {
+ this.replacedNumber = replacedNumber;
+ }
+ public String getReplacedNumber() {
+ return replacedNumber;
+ }
+
+ public void setReleaseDate(String releaseDate) {
+ this.releaseDate = releaseDate;
+ }
+ public String getReleaseDate() {
+ return releaseDate;
+ }
+
+ public void setImplementDate(String implementDate) {
+ this.implementDate = implementDate;
+ }
+ public String getImplementDate() {
+ return implementDate;
+ }
+
+ public void setReviewDate(String reviewDate) {
+ this.reviewDate = reviewDate;
+ }
+ public String getReviewDate() {
+ return reviewDate;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/standState/RoleForm.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/standState/RoleForm.java
new file mode 100644
index 00000000..98b184ea
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/standState/RoleForm.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright 2022 bejson.com
+ */
+package com.ydw.bat.wkflow.business_main.datas.entity.standState;
+
+/**
+ * Auto-generated: 2022-06-23 15:31:2
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class RoleForm {
+
+ private String prcCreateUserName = "";
+ private String prcCreateUser= "";
+ private String dockUser= "";
+ private String dockUserName= "";
+ private String bussFsSubUser2= "";
+ private String bussFsSubUser2Name= "";
+ private String bussFsUser2= "";
+ private String bussFsUser2Name= "";
+ private String bussFsUserC2= "";
+ private String bussFsUserC2Name= "";
+ private String bussFsUser3= "";
+ private String bussFsUser3Name= "";
+ public void setPrcCreateUserName(String prcCreateUserName) {
+ this.prcCreateUserName = prcCreateUserName;
+ }
+ public String getPrcCreateUserName() {
+ return prcCreateUserName;
+ }
+
+ public void setPrcCreateUser(String prcCreateUser) {
+ this.prcCreateUser = prcCreateUser;
+ }
+ public String getPrcCreateUser() {
+ return prcCreateUser;
+ }
+
+ public void setDockUser(String dockUser) {
+ this.dockUser = dockUser;
+ }
+ public String getDockUser() {
+ return dockUser;
+ }
+
+ public void setDockUserName(String dockUserName) {
+ this.dockUserName = dockUserName;
+ }
+ public String getDockUserName() {
+ return dockUserName;
+ }
+
+ public void setBussFsSubUser2(String bussFsSubUser2) {
+ this.bussFsSubUser2 = bussFsSubUser2;
+ }
+ public String getBussFsSubUser2() {
+ return bussFsSubUser2;
+ }
+
+ public void setBussFsSubUser2Name(String bussFsSubUser2Name) {
+ this.bussFsSubUser2Name = bussFsSubUser2Name;
+ }
+ public String getBussFsSubUser2Name() {
+ return bussFsSubUser2Name;
+ }
+
+ public void setBussFsUser2(String bussFsUser2) {
+ this.bussFsUser2 = bussFsUser2;
+ }
+ public String getBussFsUser2() {
+ return bussFsUser2;
+ }
+
+ public void setBussFsUser2Name(String bussFsUser2Name) {
+ this.bussFsUser2Name = bussFsUser2Name;
+ }
+ public String getBussFsUser2Name() {
+ return bussFsUser2Name;
+ }
+
+ public void setBussFsUserC2(String bussFsUserC2) {
+ this.bussFsUserC2 = bussFsUserC2;
+ }
+ public String getBussFsUserC2() {
+ return bussFsUserC2;
+ }
+
+ public void setBussFsUserC2Name(String bussFsUserC2Name) {
+ this.bussFsUserC2Name = bussFsUserC2Name;
+ }
+ public String getBussFsUserC2Name() {
+ return bussFsUserC2Name;
+ }
+
+ public void setBussFsUser3(String bussFsUser3) {
+ this.bussFsUser3 = bussFsUser3;
+ }
+ public String getBussFsUser3() {
+ return bussFsUser3;
+ }
+
+ public void setBussFsUser3Name(String bussFsUser3Name) {
+ this.bussFsUser3Name = bussFsUser3Name;
+ }
+ public String getBussFsUser3Name() {
+ return bussFsUser3Name;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/standState/StandStateDraft.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/standState/StandStateDraft.java
new file mode 100644
index 00000000..4b887ee3
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/entity/standState/StandStateDraft.java
@@ -0,0 +1,46 @@
+/**
+ * Copyright 2022 bejson.com
+ */
+package com.ydw.bat.wkflow.business_main.datas.entity.standState;
+
+/**
+ * Auto-generated: 2022-06-23 15:31:2
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class StandStateDraft {
+
+ private String taskInfo="起草";
+ private RoleForm roleForm;
+ private QbfsForm qbfsForm;
+ private String commentText= "";
+ public void setTaskInfo(String taskInfo) {
+ this.taskInfo = taskInfo;
+ }
+ public String getTaskInfo() {
+ return taskInfo;
+ }
+
+ public void setRoleForm(RoleForm roleForm) {
+ this.roleForm = roleForm;
+ }
+ public RoleForm getRoleForm() {
+ return roleForm;
+ }
+
+ public void setQbfsForm(QbfsForm qbfsForm) {
+ this.qbfsForm = qbfsForm;
+ }
+ public QbfsForm getQbfsForm() {
+ return qbfsForm;
+ }
+
+ public void setCommentText(String commentText) {
+ this.commentText = commentText;
+ }
+ public String getCommentText() {
+ return commentText;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/mapper/TbTaskMapper.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/mapper/TbTaskMapper.java
new file mode 100644
index 00000000..284cd61a
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/mapper/TbTaskMapper.java
@@ -0,0 +1,18 @@
+package com.ydw.bat.wkflow.business_main.datas.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydw.bat.wkflow.business_main.datas.entity.TbTask;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * 动态定时任务表 Mapper 接口
+ *
+ *
+ * @author super_liu
+ * @since 2022-05-27
+ */
+@Repository
+public interface TbTaskMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/ITbTaskService.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/ITbTaskService.java
new file mode 100644
index 00000000..27ba3271
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/ITbTaskService.java
@@ -0,0 +1,16 @@
+package com.ydw.bat.wkflow.business_main.datas.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydw.bat.wkflow.business_main.datas.entity.TbTask;
+
+/**
+ *
+ * 动态定时任务表 服务类
+ *
+ *
+ * @author super_liu
+ * @since 2022-05-27
+ */
+public interface ITbTaskService extends IService {
+
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/impl/TbTaskServiceImpl.java b/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/impl/TbTaskServiceImpl.java
new file mode 100644
index 00000000..ecafaef1
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/business_main/datas/service/impl/TbTaskServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ydw.bat.wkflow.business_main.datas.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydw.bat.wkflow.business_main.datas.entity.TbTask;
+import com.ydw.bat.wkflow.business_main.datas.mapper.TbTaskMapper;
+import com.ydw.bat.wkflow.business_main.datas.service.ITbTaskService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 动态定时任务表 服务实现类
+ *
+ *
+ * @author super_liu
+ * @since 2022-05-27
+ */
+@Service
+public class TbTaskServiceImpl extends ServiceImpl implements ITbTaskService {
+
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/config/GetBeanUtil.java b/src/main/java/com/ydw/bat/wkflow/config/GetBeanUtil.java
new file mode 100644
index 00000000..18f6ecb6
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/config/GetBeanUtil.java
@@ -0,0 +1,28 @@
+package com.ydw.bat.wkflow.config;
+
+/**
+ * @Description: TODO
+ * @author: super_liu
+ * @date: 2022年05月27日 14:26
+ */
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class GetBeanUtil implements ApplicationContextAware {
+ private static ApplicationContext applicationContext;
+
+ public void setApplicationContext(ApplicationContext context) {
+ GetBeanUtil.applicationContext = context;
+ }
+
+ public static Object getBean(String name) {
+ return applicationContext.getBean(name);
+ }
+
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/config/ScheduledJobStandState.java b/src/main/java/com/ydw/bat/wkflow/config/ScheduledJobStandState.java
new file mode 100644
index 00000000..1d4786d9
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/config/ScheduledJobStandState.java
@@ -0,0 +1,112 @@
+package com.ydw.bat.wkflow.config;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.ydw.bat.wkflow.business_auth.LawsUserInfoService;
+import com.ydw.bat.wkflow.business_main.datas.entity.*;
+import com.ydw.bat.wkflow.business_main.datas.entity.standState.ModelData;
+import com.ydw.bat.wkflow.business_main.datas.entity.standState.QbfsForm;
+import com.ydw.bat.wkflow.business_main.datas.entity.standState.RoleForm;
+import com.ydw.bat.wkflow.business_main.datas.entity.standState.StandStateDraft;
+import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNameService;
+import com.ydw.bat.wkflow.business_main.datas.service.IOaTaskExecService;
+import com.ydw.bat.wkflow.business_mq.service.CreateMQService;
+import com.ydw.bat.wkflow.business_oa.webService.service.WebServiceOAService;
+import com.ydw.bat.wkflow.util.SpringContextUtil;
+import lombok.extern.slf4j.Slf4j;
+import net.sf.json.JSONObject;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.history.HistoricTaskInstance;
+import org.activiti.engine.history.HistoricTaskInstanceQuery;
+import org.activiti.engine.task.Task;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+
+@Slf4j
+public class ScheduledJobStandState implements Runnable {
+
+ Logger logger = LoggerFactory.getLogger(ScheduledJobStandState.class);
+
+ /**
+ * 根据配置文件设置是否开启定时器
+ *
+ */
+
+ private LawsUserInfoService lawsUserInfoService;
+
+ private IBusProcessNameService iBusProcessNameService;
+
+ @Value("${isNotScheduled}")
+ private boolean isNotScheduled; //是否开启定时器
+
+
+ public ScheduledJobStandState(){
+ lawsUserInfoService = GetBeanUtil.getApplicationContext().getBean(LawsUserInfoService.class);
+ iBusProcessNameService = GetBeanUtil.getApplicationContext().getBean(IBusProcessNameService.class);
+ }
+
+ @Override
+ public void run() {
+ /**
+ * 创建草稿参数 buss3 复审流程
+ * id:
+ * createUser:
+ * createUserName:
+ * prcType: buss3
+ * json:
+ */
+ try{
+ Thread.sleep(2000);
+ logger.info("每天0点1分执行 自动发起复审流程自动存入草稿:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---START-01");
+
+ StandStateDraft standStateDraft = new StandStateDraft();
+ RoleForm roleForm = new RoleForm();
+ QbfsForm qbfsForm = new QbfsForm();
+ SarBussionessStandStatePage page = new SarBussionessStandStatePage();
+ List modelDataList = lawsUserInfoService.getSarBussionessStandStateProcessList(page);
+ qbfsForm.setModelData(modelDataList);
+ standStateDraft.setQbfsForm(qbfsForm);
+ standStateDraft.setRoleForm(roleForm);
+ String json = toJson(standStateDraft);
+ System.out.println(json);
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String time = sdf.format(new Date());
+ BusProcessName busProcessName = new BusProcessName();
+ busProcessName.setPrcType("buss3");
+ busProcessName.setCreatUser("chenchunmei");
+ busProcessName.setCreatTime(time);
+ busProcessName.setMes(json);
+ busProcessName.setCreatUserName("陈春梅");
+ iBusProcessNameService.save(busProcessName);
+
+ logger.info("每天0点1分执行 自动发起复审流程自动存入草稿:"+Thread.currentThread().getName() + " cron=0 1 0 * * ? --- " + new Date()+"---End-01");
+ }catch(Exception e){
+ logger.info(e.getMessage());
+ }
+ }
+
+ public static String toJson(StandStateDraft standStateDraft){
+ GsonBuilder gsonBuilder = getGsonBuilder();
+ Gson json = gsonBuilder.create();
+ return json.toJson(standStateDraft);
+ }
+
+ private static GsonBuilder getGsonBuilder() {
+ return new GsonBuilder().disableHtmlEscaping().serializeNulls().enableComplexMapKeySerialization().serializeSpecialFloatingPointValues().setLenient();
+ }
+}
diff --git a/src/main/java/com/ydw/bat/wkflow/config/SchedulerConf.java b/src/main/java/com/ydw/bat/wkflow/config/SchedulerConf.java
new file mode 100644
index 00000000..e39ddb27
--- /dev/null
+++ b/src/main/java/com/ydw/bat/wkflow/config/SchedulerConf.java
@@ -0,0 +1,119 @@
+package com.ydw.bat.wkflow.config;
+
+/**
+ * @Description: TODO
+ * @author: super_liu
+ * @date: 2022年05月27日 10:17
+ */
+
+import com.ydw.bat.wkflow.business_main.datas.entity.TbTask;
+import com.ydw.bat.wkflow.business_main.datas.mapper.TbTaskMapper;
+import com.ydw.bat.wkflow.business_main.datas.service.ITbTaskService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.support.CronTrigger;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ScheduledFuture;
+
+/**
+ * 动态定时器
+ */
+@Slf4j
+@Component
+public class SchedulerConf {
+
+ //数据库的任务
+ public static ConcurrentHashMap tasks = new ConcurrentHashMap<>(50);
+
+ //正在运行的任务
+ public static ConcurrentHashMap runTasks = new ConcurrentHashMap<>(50);
+
+ //线程池任务调度
+ private ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
+
+ @Autowired
+ TbTaskMapper tbTaskDao;
+
+ @Autowired
+ ITbTaskService iTbTaskService;
+
+ /**
+ * 初始化线程池任务调度
+ */
+ @Autowired
+ public SchedulerConf(){
+ this.threadPoolTaskScheduler.setPoolSize(50);
+ this.threadPoolTaskScheduler.setThreadNamePrefix("task-thread-");
+ this.threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
+ this.threadPoolTaskScheduler.initialize();
+ }
+
+ /**
+ * 获取所有数据库里的定时任务
+ */
+ private void getAllTbTask(){
+ //查询所有,并put到tasks
+ SchedulerConf.tasks.clear();
+ List list = iTbTaskService.list();
+ list.forEach((task)-> SchedulerConf.tasks.put(task.getId(),task));
+ }
+
+ /**
+ * 根据定时任务id,启动定时任务
+ */
+ public void start(String taskId){
+ try {
+ //重新获取最新执行任务周期
+ this.getAllTbTask();
+
+ TbTask tbTask = SchedulerConf.tasks.get(taskId);
+
+ //获取并实例化Runnable任务类
+ Class> clazz = Class.forName(tbTask.getTaskClass());
+ Runnable runnable = (Runnable)clazz.newInstance();
+
+ //Cron表达式
+ CronTrigger cron = new CronTrigger(tbTask.getTaskExp());
+
+ //执行,并put到runTasks
+ SchedulerConf.runTasks.put(taskId, Objects.requireNonNull(this.threadPoolTaskScheduler.schedule(runnable, cron)));
+
+ this.updateTaskStatus(taskId,1);
+
+ log.info("{},任务启动!",taskId);
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
+ log.error("{},任务启动失败...",taskId);
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * 根据定时任务id,停止定时任务
+ */
+ public void stop(String taskId){
+ SchedulerConf.runTasks.get(taskId).cancel(true);
+
+ SchedulerConf.runTasks.remove(taskId);
+
+ this.updateTaskStatus(taskId,0);
+
+ log.info("{},任务停止...",taskId);
+ }
+
+ /**
+ * 更新数据库动态定时任务状态
+ */
+ private void updateTaskStatus(String taskId,int status){
+ TbTask task = iTbTaskService.getById(taskId);
+ task.setTaskStatus(status);
+ task.setUpdateTime(new Date());
+ iTbTaskService.updateById(task);
+ }
+}