diff --git a/.gitignore b/.gitignore
index dae179b..d9949e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,11 @@
-/target/
-/.idea/
-**/logs
+## ide
+**/.idea
 *.iml
-rebel.xml
\ No newline at end of file
+rebel.xml
+
+## backend
+**/target
+**/logs
+
+## front
+**/*.lock
diff --git a/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java b/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
deleted file mode 100644
index b2dd151..0000000
--- a/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//package com.xxl.job.admin.core.jobbean;
-//
-//import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
-//import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-//import org.quartz.JobExecutionContext;
-//import org.quartz.JobExecutionException;
-//import org.quartz.JobKey;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.scheduling.quartz.QuartzJobBean;
-//
-///**
-// * http job bean
-// * “@DisallowConcurrentExecution” disable concurrent, thread size can not be only one, better given more
-// * @author xuxueli 2015-12-17 18:20:34
-// */
-////@DisallowConcurrentExecution
-//public class RemoteHttpJobBean extends QuartzJobBean {
-//	private static Logger logger = LoggerFactory.getLogger(RemoteHttpJobBean.class);
-//
-//	@Override
-//	protected void executeInternal(JobExecutionContext context)
-//			throws JobExecutionException {
-//
-//		// load jobId
-//		JobKey jobKey = context.getTrigger().getJobKey();
-//		Integer jobId = Integer.valueOf(jobKey.getName());
-//
-//
-//	}
-//
-//}
\ No newline at end of file
diff --git a/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java b/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
deleted file mode 100644
index 1e62aa1..0000000
--- a/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
+++ /dev/null
@@ -1,413 +0,0 @@
-//package com.xxl.job.admin.core.schedule;
-//
-//import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-//import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
-//import com.xxl.job.admin.core.model.XxlJobInfo;
-//import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
-//import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
-//import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
-//import com.xxl.job.admin.core.util.I18nUtil;
-//import com.xxl.job.core.biz.AdminBiz;
-//import com.xxl.job.core.biz.ExecutorBiz;
-//import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-//import com.xxl.rpc.remoting.invoker.XxlRpcInvokerFactory;
-//import com.xxl.rpc.remoting.invoker.call.CallType;
-//import com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean;
-//import com.xxl.rpc.remoting.invoker.route.LoadBalance;
-//import com.xxl.rpc.remoting.net.NetEnum;
-//import com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler;
-//import com.xxl.rpc.remoting.provider.XxlRpcProviderFactory;
-//import com.xxl.rpc.serialize.Serializer;
-//import org.quartz.*;
-//import org.quartz.Trigger.TriggerState;
-//import org.quartz.impl.triggers.CronTriggerImpl;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.util.Assert;
-//
-//import javax.servlet.ServletException;
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.util.Date;
-//import java.util.concurrent.ConcurrentHashMap;
-//
-///**
-// * base quartz scheduler util
-// * @author xuxueli 2015-12-19 16:13:53
-// */
-//public final class XxlJobDynamicScheduler {
-//    private static final Logger logger = LoggerFactory.getLogger(XxlJobDynamicScheduler_old.class);
-//
-//    // ---------------------- param ----------------------
-//
-//    // scheduler
-//    private static Scheduler scheduler;
-//    public void setScheduler(Scheduler scheduler) {
-//		XxlJobDynamicScheduler_old.scheduler = scheduler;
-//	}
-//
-//
-//    // ---------------------- init + destroy ----------------------
-//    public void start() throws Exception {
-//        // valid
-//        Assert.notNull(scheduler, "quartz scheduler is null");
-//
-//        // init i18n
-//        initI18n();
-//
-//        // admin registry monitor run
-//        JobRegistryMonitorHelper.getInstance().start();
-//
-//        // admin monitor run
-//        JobFailMonitorHelper.getInstance().start();
-//
-//        // admin-server
-//        initRpcProvider();
-//
-//        logger.info(">>>>>>>>> init xxl-job admin success.");
-//    }
-//
-//
-//    public void destroy() throws Exception {
-//        // admin trigger pool stop
-//        JobTriggerPoolHelper.toStop();
-//
-//        // admin registry stop
-//        JobRegistryMonitorHelper.getInstance().toStop();
-//
-//        // admin monitor stop
-//        JobFailMonitorHelper.getInstance().toStop();
-//
-//        // admin-server
-//        stopRpcProvider();
-//    }
-//
-//
-//    // ---------------------- I18n ----------------------
-//
-//    private void initI18n(){
-//        for (ExecutorBlockStrategyEnum item:ExecutorBlockStrategyEnum.values()) {
-//            item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name())));
-//        }
-//    }
-//
-//
-//    // ---------------------- admin rpc provider (no server version) ----------------------
-//    private static ServletServerHandler servletServerHandler;
-//    private void initRpcProvider(){
-//        // init
-//        XxlRpcProviderFactory xxlRpcProviderFactory = new XxlRpcProviderFactory();
-//        xxlRpcProviderFactory.initConfig(
-//                NetEnum.NETTY_HTTP,
-//                Serializer.SerializeEnum.HESSIAN.getSerializer(),
-//                null,
-//                0,
-//                XxlJobAdminConfig.getAdminConfig().getAccessToken(),
-//                null,
-//                null);
-//
-//        // add services
-//        xxlRpcProviderFactory.addService(AdminBiz.class.getName(), null, XxlJobAdminConfig.getAdminConfig().getAdminBiz());
-//
-//        // servlet handler
-//        servletServerHandler = new ServletServerHandler(xxlRpcProviderFactory);
-//    }
-//    private void stopRpcProvider() throws Exception {
-//        XxlRpcInvokerFactory.getInstance().stop();
-//    }
-//    public static void invokeAdminService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
-//        servletServerHandler.handle(null, request, response);
-//    }
-//
-//
-//    // ---------------------- executor-client ----------------------
-//    private static ConcurrentHashMap<String, ExecutorBiz> executorBizRepository = new ConcurrentHashMap<String, ExecutorBiz>();
-//    public static ExecutorBiz getExecutorBiz(String address) throws Exception {
-//        // valid
-//        if (address==null || address.trim().length()==0) {
-//            return null;
-//        }
-//
-//        // load-cache
-//        address = address.trim();
-//        ExecutorBiz executorBiz = executorBizRepository.get(address);
-//        if (executorBiz != null) {
-//            return executorBiz;
-//        }
-//
-//        // set-cache
-//        executorBiz = (ExecutorBiz) new XxlRpcReferenceBean(
-//                NetEnum.NETTY_HTTP,
-//                Serializer.SerializeEnum.HESSIAN.getSerializer(),
-//                CallType.SYNC,
-//                LoadBalance.ROUND,
-//                ExecutorBiz.class,
-//                null,
-//                5000,
-//                address,
-//                XxlJobAdminConfig.getAdminConfig().getAccessToken(),
-//                null,
-//                null).getObject();
-//
-//        executorBizRepository.put(address, executorBiz);
-//        return executorBiz;
-//    }
-//
-//
-//    // ---------------------- schedule util ----------------------
-//
-//    /**
-//     * fill job info
-//     *
-//     * @param jobInfo
-//     */
-//	public static void fillJobInfo(XxlJobInfo jobInfo) {
-//
-//        String name = String.valueOf(jobInfo.getId());
-//
-//        // trigger key
-//        TriggerKey triggerKey = TriggerKey.triggerKey(name);
-//        try {
-//
-//            // trigger cron
-//			Trigger trigger = scheduler.getTrigger(triggerKey);
-//			if (trigger!=null && trigger instanceof CronTriggerImpl) {
-//				String cronExpression = ((CronTriggerImpl) trigger).getCronExpression();
-//				jobInfo.setJobCron(cronExpression);
-//			}
-//
-//            // trigger state
-//            TriggerState triggerState = scheduler.getTriggerState(triggerKey);
-//			if (triggerState!=null) {
-//				jobInfo.setJobStatus(triggerState.name());
-//			}
-//
-//            //JobKey jobKey = new JobKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup()));
-//            //JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-//            //String jobClass = jobDetail.getJobClass().getName();
-//
-//		} catch (SchedulerException e) {
-//			logger.error(e.getMessage(), e);
-//		}
-//	}
-//
-//
-//    /**
-//     * add trigger + job
-//     *
-//     * @param jobName
-//     * @param cronExpression
-//     * @return
-//     * @throws SchedulerException
-//     */
-//	public static boolean addJob(String jobName, String cronExpression) throws SchedulerException {
-//    	// 1、job key
-//        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//        JobKey jobKey = new JobKey(jobName);
-//
-//        // 2、valid
-//        if (scheduler.checkExists(triggerKey)) {
-//            return true;    // PASS
-//        }
-//
-//        // 3、corn trigger
-//        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();   // withMisfireHandlingInstructionDoNothing 忽略掉调度终止过程中忽略的调度
-//        CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
-//
-//        // 4、job detail
-//		Class<? extends Job> jobClass_ = RemoteHttpJobBean.class;   // Class.forName(jobInfo.getJobClass());
-//		JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build();
-//
-//        /*if (jobInfo.getJobData()!=null) {
-//        	JobDataMap jobDataMap = jobDetail.getJobDataMap();
-//        	jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));
-//        	// JobExecutionContext context.getMergedJobDataMap().get("mailGuid");
-//		}*/
-//
-//        // 5、schedule job
-//        Date date = scheduler.scheduleJob(jobDetail, cronTrigger);
-//
-//        logger.info(">>>>>>>>>>> addJob success(quartz), jobDetail:{}, cronTrigger:{}, date:{}", jobDetail, cronTrigger, date);
-//        return true;
-//    }
-//
-//
-//    /**
-//     * remove trigger + job
-//     *
-//     * @param jobName
-//     * @return
-//     * @throws SchedulerException
-//     */
-//    public static boolean removeJob(String jobName) throws SchedulerException {
-//
-//        JobKey jobKey = new JobKey(jobName);
-//        scheduler.deleteJob(jobKey);
-//
-//        /*TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//        if (scheduler.checkExists(triggerKey)) {
-//            scheduler.unscheduleJob(triggerKey);    // trigger + job
-//        }*/
-//
-//        logger.info(">>>>>>>>>>> removeJob success(quartz), jobKey:{}", jobKey);
-//        return true;
-//    }
-//
-//
-//    /**
-//     * updateJobCron
-//     *
-//     * @param jobName
-//     * @param cronExpression
-//     * @return
-//     * @throws SchedulerException
-//     */
-//	public static boolean updateJobCron(String jobName, String cronExpression) throws SchedulerException {
-//
-//        // 1、job key
-//        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-//        // 2、valid
-//        if (!scheduler.checkExists(triggerKey)) {
-//            return true;    // PASS
-//        }
-//
-//        CronTrigger oldTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
-//
-//        // 3、avoid repeat cron
-//        String oldCron = oldTrigger.getCronExpression();
-//        if (oldCron.equals(cronExpression)){
-//            return true;    // PASS
-//        }
-//
-//        // 4、new cron trigger
-//        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();
-//        oldTrigger = oldTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
-//
-//        // 5、rescheduleJob
-//        scheduler.rescheduleJob(triggerKey, oldTrigger);
-//
-//        /*
-//        JobKey jobKey = new JobKey(jobName);
-//
-//        // old job detail
-//        JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-//
-//        // new trigger
-//        HashSet<Trigger> triggerSet = new HashSet<Trigger>();
-//        triggerSet.add(cronTrigger);
-//        // cover trigger of job detail
-//        scheduler.scheduleJob(jobDetail, triggerSet, true);*/
-//
-//        logger.info(">>>>>>>>>>> resumeJob success, JobName:{}", jobName);
-//        return true;
-//    }
-//
-//
-//    /**
-//     * pause
-//     *
-//     * @param jobName
-//     * @return
-//     * @throws SchedulerException
-//     */
-//    /*public static boolean pauseJob(String jobName) throws SchedulerException {
-//
-//    	TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-//        boolean result = false;
-//        if (scheduler.checkExists(triggerKey)) {
-//            scheduler.pauseTrigger(triggerKey);
-//            result =  true;
-//        }
-//
-//        logger.info(">>>>>>>>>>> pauseJob {}, triggerKey:{}", (result?"success":"fail"),triggerKey);
-//        return result;
-//    }*/
-//
-//
-//    /**
-//     * resume
-//     *
-//     * @param jobName
-//     * @return
-//     * @throws SchedulerException
-//     */
-//    /*public static boolean resumeJob(String jobName) throws SchedulerException {
-//
-//        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-//        boolean result = false;
-//        if (scheduler.checkExists(triggerKey)) {
-//            scheduler.resumeTrigger(triggerKey);
-//            result = true;
-//        }
-//
-//        logger.info(">>>>>>>>>>> resumeJob {}, triggerKey:{}", (result?"success":"fail"), triggerKey);
-//        return result;
-//    }*/
-//
-//
-//    /**
-//     * run
-//     *
-//     * @param jobName
-//     * @return
-//     * @throws SchedulerException
-//     */
-//    /*public static boolean triggerJob(String jobName) throws SchedulerException {
-//    	// TriggerKey : name + group
-//    	JobKey jobKey = new JobKey(jobName);
-//        TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-//        boolean result = false;
-//        if (scheduler.checkExists(triggerKey)) {
-//            scheduler.triggerJob(jobKey);
-//            result = true;
-//            logger.info(">>>>>>>>>>> runJob success, jobKey:{}", jobKey);
-//        } else {
-//        	logger.info(">>>>>>>>>>> runJob fail, jobKey:{}", jobKey);
-//        }
-//        return result;
-//    }*/
-//
-//
-//    /**
-//     * finaAllJobList
-//     *
-//     * @return
-//     *//*
-//    @Deprecated
-//    public static List<Map<String, Object>> finaAllJobList(){
-//        List<Map<String, Object>> jobList = new ArrayList<Map<String,Object>>();
-//
-//        try {
-//            if (scheduler.getJobGroupNames()==null || scheduler.getJobGroupNames().size()==0) {
-//                return null;
-//            }
-//            String groupName = scheduler.getJobGroupNames().get(0);
-//            Set<JobKey> jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));
-//            if (jobKeys!=null && jobKeys.size()>0) {
-//                for (JobKey jobKey : jobKeys) {
-//                    TriggerKey triggerKey = TriggerKey.triggerKey(jobKey.getName(), Scheduler.DEFAULT_GROUP);
-//                    Trigger trigger = scheduler.getTrigger(triggerKey);
-//                    JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-//                    TriggerState triggerState = scheduler.getTriggerState(triggerKey);
-//                    Map<String, Object> jobMap = new HashMap<String, Object>();
-//                    jobMap.put("TriggerKey", triggerKey);
-//                    jobMap.put("Trigger", trigger);
-//                    jobMap.put("JobDetail", jobDetail);
-//                    jobMap.put("TriggerState", triggerState);
-//                    jobList.add(jobMap);
-//                }
-//            }
-//
-//        } catch (SchedulerException e) {
-//            logger.error(e.getMessage(), e);
-//            return null;
-//        }
-//        return jobList;
-//    }*/
-//
-//}
\ No newline at end of file
diff --git a/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java b/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java
deleted file mode 100644
index ad07430..0000000
--- a/jeecg-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java
+++ /dev/null
@@ -1,58 +0,0 @@
-//package com.xxl.job.admin.core.quartz;
-//
-//import org.quartz.SchedulerConfigException;
-//import org.quartz.spi.ThreadPool;
-//
-///**
-// * single thread pool, for async trigger
-// *
-// * @author xuxueli 2019-03-06
-// */
-//public class XxlJobThreadPool implements ThreadPool {
-//
-//    @Override
-//    public boolean runInThread(Runnable runnable) {
-//
-//        // async run
-//        runnable.run();
-//        return true;
-//
-//        //return false;
-//    }
-//
-//    @Override
-//    public int blockForAvailableThreads() {
-//        return 1;
-//    }
-//
-//    @Override
-//    public void initialize() throws SchedulerConfigException {
-//
-//    }
-//
-//    @Override
-//    public void shutdown(boolean waitForJobsToComplete) {
-//
-//    }
-//
-//    @Override
-//    public int getPoolSize() {
-//        return 1;
-//    }
-//
-//    @Override
-//    public void setInstanceId(String schedInstId) {
-//
-//    }
-//
-//    @Override
-//    public void setInstanceName(String schedName) {
-//
-//    }
-//
-//    // support
-//    public void setThreadCount(int count) {
-//        //
-//    }
-//
-//}