diff --git a/wfc-modules/wfc-modules-user/pom.xml b/wfc-modules/wfc-modules-user/pom.xml
new file mode 100644
index 0000000..0c294df
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/pom.xml
@@ -0,0 +1,87 @@
+
+
+
+ org.wfc
+ wfc-modules
+ 3.6.4
+
+ 4.0.0
+ wfc-modules-user
+
+
+ wfc-modules-user 用户平台模块
+
+
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.fox.version}
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ org.wfc
+ wfc-common-log
+
+
+
+
+ org.wfc
+ wfc-common-swagger
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/WfcUserApplication.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/WfcUserApplication.java
new file mode 100644
index 0000000..d1e7d79
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/WfcUserApplication.java
@@ -0,0 +1,23 @@
+package org.wfc.user;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.wfc.common.security.annotation.EnableCustomConfig;
+import org.wfc.common.security.annotation.EnableRyFeignClients;
+import org.wfc.common.swagger.annotation.EnableCustomSwagger2;
+
+/**
+ * 用户平台模块
+ */
+@EnableCustomConfig
+@EnableCustomSwagger2
+@EnableRyFeignClients
+@SpringBootApplication
+public class WfcUserApplication
+{
+ public static void main(String[] args)
+ {
+ SpringApplication.run(WfcUserApplication.class, args);
+ System.out.println("(♥◠‿◠)ノ゙ 用户平台模块启动成功 ლ(´ڡ`ლ)゙ \n" );
+ }
+}
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/SysJobController.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/SysJobController.java
new file mode 100644
index 0000000..656967a
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/SysJobController.java
@@ -0,0 +1,158 @@
+package org.wfc.user.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.wfc.common.core.constant.Constants;
+import org.wfc.common.core.exception.job.TaskException;
+import org.wfc.common.core.utils.StringUtils;
+import org.wfc.common.core.utils.poi.ExcelUtil;
+import org.wfc.common.core.web.controller.BaseController;
+import org.wfc.common.core.web.domain.AjaxResult;
+import org.wfc.common.core.web.page.TableDataInfo;
+import org.wfc.common.log.annotation.Log;
+import org.wfc.common.log.enums.BusinessType;
+import org.wfc.common.security.annotation.RequiresPermissions;
+import org.wfc.common.security.utils.SecurityUtils;
+import org.wfc.user.domain.SysJob;
+import org.wfc.user.service.ISysJobService;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 调度任务信息操作处理
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/job")
+public class SysJobController extends BaseController
+{
+ @Autowired
+ private ISysJobService jobService;
+
+ /**
+ * 查询定时任务列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(SysJob sysJob)
+ {
+ startPage();
+ List list = jobService.selectJobList(sysJob);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出定时任务列表
+ */
+ @RequiresPermissions("monitor:job:export")
+ @Log(title = "定时任务", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, SysJob sysJob)
+ {
+ List list = jobService.selectJobList(sysJob);
+ ExcelUtil util = new ExcelUtil(SysJob.class);
+ util.exportExcel(response, list, "定时任务");
+ }
+
+ /**
+ * 获取定时任务详细信息
+ */
+ @RequiresPermissions("monitor:job:query")
+ @GetMapping(value = "/{jobId}")
+ public AjaxResult getInfo(@PathVariable("jobId") Long jobId)
+ {
+ return success(jobService.selectJobById(jobId));
+ }
+
+ /**
+ * 新增定时任务
+ */
+ @RequiresPermissions("monitor:job:add")
+ @Log(title = "定时任务", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody SysJob job) throws TaskException
+ {
+ if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
+ {
+ return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi'调用");
+ }
+ else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS }))
+ {
+ return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap(s)'调用");
+ }
+ else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
+ {
+ return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)'调用");
+ }
+ else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR))
+ {
+ return error("新增任务'" + job.getJobName() + "'失败,目标字符串存在违规");
+ }
+ job.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(1);
+ }
+
+ /**
+ * 修改定时任务
+ */
+ @RequiresPermissions("monitor:job:edit")
+ @Log(title = "定时任务", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody SysJob job) throws TaskException
+ {
+ if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
+ {
+ return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi'调用");
+ }
+ else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS }))
+ {
+ return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap(s)'调用");
+ }
+ else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
+ {
+ return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)'调用");
+ }
+ else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR))
+ {
+ return error("修改任务'" + job.getJobName() + "'失败,目标字符串存在违规");
+ }
+ job.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(false);
+ }
+
+ /**
+ * 定时任务状态修改
+ */
+ @RequiresPermissions("monitor:job:changeStatus")
+ @Log(title = "定时任务", businessType = BusinessType.UPDATE)
+ @PutMapping("/changeStatus")
+ public AjaxResult changeStatus(@RequestBody SysJob job)
+ {
+ return toAjax(false);
+ }
+
+ /**
+ * 定时任务立即执行一次
+ */
+ @RequiresPermissions("monitor:job:changeStatus")
+ @Log(title = "定时任务", businessType = BusinessType.UPDATE)
+ @PutMapping("/run")
+ public AjaxResult run(@RequestBody SysJob job)
+ {
+
+ return error("任务不存在或已过期!");
+ }
+
+ /**
+ * 删除定时任务
+ */
+ @RequiresPermissions("monitor:job:remove")
+ @Log(title = "定时任务", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{jobIds}")
+ public AjaxResult remove(@PathVariable Long[] jobIds)
+ {
+
+ return success();
+ }
+}
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/SysJobLogController.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/SysJobLogController.java
new file mode 100644
index 0000000..a357b1e
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/SysJobLogController.java
@@ -0,0 +1,87 @@
+package org.wfc.user.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.wfc.common.core.utils.poi.ExcelUtil;
+import org.wfc.common.core.web.controller.BaseController;
+import org.wfc.common.core.web.domain.AjaxResult;
+import org.wfc.common.core.web.page.TableDataInfo;
+import org.wfc.common.log.annotation.Log;
+import org.wfc.common.log.enums.BusinessType;
+import org.wfc.common.security.annotation.RequiresPermissions;
+import org.wfc.user.domain.SysJobLog;
+import org.wfc.user.service.ISysJobLogService;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 调度日志操作处理
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/job/log")
+public class SysJobLogController extends BaseController
+{
+ @Autowired
+ private ISysJobLogService jobLogService;
+
+ /**
+ * 查询定时任务调度日志列表
+ */
+ @RequiresPermissions("monitor:job:list")
+ @GetMapping("/list")
+ public TableDataInfo list(SysJobLog sysJobLog)
+ {
+ startPage();
+ List list = jobLogService.selectJobLogList(sysJobLog);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出定时任务调度日志列表
+ */
+ @RequiresPermissions("monitor:job:export")
+ @Log(title = "任务调度日志", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, SysJobLog sysJobLog)
+ {
+ List list = jobLogService.selectJobLogList(sysJobLog);
+ ExcelUtil util = new ExcelUtil(SysJobLog.class);
+ util.exportExcel(response, list, "调度日志");
+ }
+
+ /**
+ * 根据调度编号获取详细信息
+ */
+ @RequiresPermissions("monitor:job:query")
+ @GetMapping(value = "/{jobLogId}")
+ public AjaxResult getInfo(@PathVariable Long jobLogId)
+ {
+ return success(jobLogService.selectJobLogById(jobLogId));
+ }
+
+ /**
+ * 删除定时任务调度日志
+ */
+ @RequiresPermissions("monitor:job:remove")
+ @Log(title = "定时任务调度日志", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{jobLogIds}")
+ public AjaxResult remove(@PathVariable Long[] jobLogIds)
+ {
+ return toAjax(jobLogService.deleteJobLogByIds(jobLogIds));
+ }
+
+ /**
+ * 清空定时任务调度日志
+ */
+ @RequiresPermissions("monitor:job:remove")
+ @Log(title = "调度日志", businessType = BusinessType.CLEAN)
+ @DeleteMapping("/clean")
+ public AjaxResult clean()
+ {
+ jobLogService.cleanJobLog();
+ return success();
+ }
+}
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/SysJob.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/SysJob.java
new file mode 100644
index 0000000..bd39414
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/SysJob.java
@@ -0,0 +1,170 @@
+package org.wfc.user.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.wfc.common.core.annotation.Excel;
+import org.wfc.common.core.annotation.Excel.ColumnType;
+import org.wfc.common.core.constant.ScheduleConstants;
+import org.wfc.common.core.utils.StringUtils;
+import org.wfc.common.core.web.domain.BaseEntity;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.Date;
+
+/**
+ * 定时任务调度表 sys_job
+ *
+ * @author ruoyi
+ */
+public class SysJob extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 任务ID */
+ @Excel(name = "任务序号", cellType = ColumnType.NUMERIC)
+ private Long jobId;
+
+ /** 任务名称 */
+ @Excel(name = "任务名称")
+ private String jobName;
+
+ /** 任务组名 */
+ @Excel(name = "任务组名")
+ private String jobGroup;
+
+ /** 调用目标字符串 */
+ @Excel(name = "调用目标字符串")
+ private String invokeTarget;
+
+ /** cron执行表达式 */
+ @Excel(name = "执行表达式 ")
+ private String cronExpression;
+
+ /** cron计划策略 */
+ @Excel(name = "计划策略 ", readConverterExp = "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行")
+ private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT;
+
+ /** 是否并发执行(0允许 1禁止) */
+ @Excel(name = "并发执行", readConverterExp = "0=允许,1=禁止")
+ private String concurrent;
+
+ /** 任务状态(0正常 1暂停) */
+ @Excel(name = "任务状态", readConverterExp = "0=正常,1=暂停")
+ private String status;
+
+ public Long getJobId()
+ {
+ return jobId;
+ }
+
+ public void setJobId(Long jobId)
+ {
+ this.jobId = jobId;
+ }
+
+ @NotBlank(message = "任务名称不能为空")
+ @Size(min = 0, max = 64, message = "任务名称不能超过64个字符")
+ public String getJobName()
+ {
+ return jobName;
+ }
+
+ public void setJobName(String jobName)
+ {
+ this.jobName = jobName;
+ }
+
+ public String getJobGroup()
+ {
+ return jobGroup;
+ }
+
+ public void setJobGroup(String jobGroup)
+ {
+ this.jobGroup = jobGroup;
+ }
+
+ @NotBlank(message = "调用目标字符串不能为空")
+ @Size(min = 0, max = 500, message = "调用目标字符串长度不能超过500个字符")
+ public String getInvokeTarget()
+ {
+ return invokeTarget;
+ }
+
+ public void setInvokeTarget(String invokeTarget)
+ {
+ this.invokeTarget = invokeTarget;
+ }
+
+ @NotBlank(message = "Cron执行表达式不能为空")
+ @Size(min = 0, max = 255, message = "Cron执行表达式不能超过255个字符")
+ public String getCronExpression()
+ {
+ return cronExpression;
+ }
+
+ public void setCronExpression(String cronExpression)
+ {
+ this.cronExpression = cronExpression;
+ }
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ public Date getNextValidTime()
+ {
+ if (StringUtils.isNotEmpty(cronExpression))
+ {
+ }
+ return null;
+ }
+
+ public String getMisfirePolicy()
+ {
+ return misfirePolicy;
+ }
+
+ public void setMisfirePolicy(String misfirePolicy)
+ {
+ this.misfirePolicy = misfirePolicy;
+ }
+
+ public String getConcurrent()
+ {
+ return concurrent;
+ }
+
+ public void setConcurrent(String concurrent)
+ {
+ this.concurrent = concurrent;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("jobId", getJobId())
+ .append("jobName", getJobName())
+ .append("jobGroup", getJobGroup())
+ .append("cronExpression", getCronExpression())
+ .append("nextValidTime", getNextValidTime())
+ .append("misfirePolicy", getMisfirePolicy())
+ .append("concurrent", getConcurrent())
+ .append("status", getStatus())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .append("remark", getRemark())
+ .toString();
+ }
+}
\ No newline at end of file
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/SysJobLog.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/SysJobLog.java
new file mode 100644
index 0000000..203052d
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/SysJobLog.java
@@ -0,0 +1,156 @@
+package org.wfc.user.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.wfc.common.core.annotation.Excel;
+import org.wfc.common.core.web.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 定时任务调度日志表 sys_job_log
+ *
+ * @author ruoyi
+ */
+public class SysJobLog extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** ID */
+ @Excel(name = "日志序号")
+ private Long jobLogId;
+
+ /** 任务名称 */
+ @Excel(name = "任务名称")
+ private String jobName;
+
+ /** 任务组名 */
+ @Excel(name = "任务组名")
+ private String jobGroup;
+
+ /** 调用目标字符串 */
+ @Excel(name = "调用目标字符串")
+ private String invokeTarget;
+
+ /** 日志信息 */
+ @Excel(name = "日志信息")
+ private String jobMessage;
+
+ /** 执行状态(0正常 1失败) */
+ @Excel(name = "执行状态", readConverterExp = "0=正常,1=失败")
+ private String status;
+
+ /** 异常信息 */
+ @Excel(name = "异常信息")
+ private String exceptionInfo;
+
+ /** 开始时间 */
+ private Date startTime;
+
+ /** 停止时间 */
+ private Date stopTime;
+
+ public Long getJobLogId()
+ {
+ return jobLogId;
+ }
+
+ public void setJobLogId(Long jobLogId)
+ {
+ this.jobLogId = jobLogId;
+ }
+
+ public String getJobName()
+ {
+ return jobName;
+ }
+
+ public void setJobName(String jobName)
+ {
+ this.jobName = jobName;
+ }
+
+ public String getJobGroup()
+ {
+ return jobGroup;
+ }
+
+ public void setJobGroup(String jobGroup)
+ {
+ this.jobGroup = jobGroup;
+ }
+
+ public String getInvokeTarget()
+ {
+ return invokeTarget;
+ }
+
+ public void setInvokeTarget(String invokeTarget)
+ {
+ this.invokeTarget = invokeTarget;
+ }
+
+ public String getJobMessage()
+ {
+ return jobMessage;
+ }
+
+ public void setJobMessage(String jobMessage)
+ {
+ this.jobMessage = jobMessage;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ public String getExceptionInfo()
+ {
+ return exceptionInfo;
+ }
+
+ public void setExceptionInfo(String exceptionInfo)
+ {
+ this.exceptionInfo = exceptionInfo;
+ }
+
+ public Date getStartTime()
+ {
+ return startTime;
+ }
+
+ public void setStartTime(Date startTime)
+ {
+ this.startTime = startTime;
+ }
+
+ public Date getStopTime()
+ {
+ return stopTime;
+ }
+
+ public void setStopTime(Date stopTime)
+ {
+ this.stopTime = stopTime;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("jobLogId", getJobLogId())
+ .append("jobName", getJobName())
+ .append("jobGroup", getJobGroup())
+ .append("jobMessage", getJobMessage())
+ .append("status", getStatus())
+ .append("exceptionInfo", getExceptionInfo())
+ .append("startTime", getStartTime())
+ .append("stopTime", getStopTime())
+ .toString();
+ }
+}
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/SysJobLogMapper.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/SysJobLogMapper.java
new file mode 100644
index 0000000..4bcccdd
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/SysJobLogMapper.java
@@ -0,0 +1,65 @@
+package org.wfc.user.mapper;
+
+import org.wfc.user.domain.SysJobLog;
+
+import java.util.List;
+
+/**
+ * 调度任务日志信息 数据层
+ *
+ * @author ruoyi
+ */
+public interface SysJobLogMapper
+{
+ /**
+ * 获取quartz调度器日志的计划任务
+ *
+ * @param jobLog 调度日志信息
+ * @return 调度任务日志集合
+ */
+ public List selectJobLogList(SysJobLog jobLog);
+
+ /**
+ * 查询所有调度任务日志
+ *
+ * @return 调度任务日志列表
+ */
+ public List selectJobLogAll();
+
+ /**
+ * 通过调度任务日志ID查询调度信息
+ *
+ * @param jobLogId 调度任务日志ID
+ * @return 调度任务日志对象信息
+ */
+ public SysJobLog selectJobLogById(Long jobLogId);
+
+ /**
+ * 新增任务日志
+ *
+ * @param jobLog 调度日志信息
+ * @return 结果
+ */
+ public int insertJobLog(SysJobLog jobLog);
+
+ /**
+ * 批量删除调度日志信息
+ *
+ * @param logIds 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteJobLogByIds(Long[] logIds);
+
+ /**
+ * 删除任务日志
+ *
+ * @param jobId 调度日志ID
+ * @return 结果
+ */
+ public int deleteJobLogById(Long jobId);
+
+ /**
+ * 清空任务日志
+ */
+ public void cleanJobLog();
+}
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/SysJobMapper.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/SysJobMapper.java
new file mode 100644
index 0000000..d0f5c76
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/SysJobMapper.java
@@ -0,0 +1,68 @@
+package org.wfc.user.mapper;
+
+import org.wfc.user.domain.SysJob;
+
+import java.util.List;
+
+/**
+ * 调度任务信息 数据层
+ *
+ * @author ruoyi
+ */
+public interface SysJobMapper
+{
+ /**
+ * 查询调度任务日志集合
+ *
+ * @param job 调度信息
+ * @return 操作日志集合
+ */
+ public List selectJobList(SysJob job);
+
+ /**
+ * 查询所有调度任务
+ *
+ * @return 调度任务列表
+ */
+ public List selectJobAll();
+
+ /**
+ * 通过调度ID查询调度任务信息
+ *
+ * @param jobId 调度ID
+ * @return 角色对象信息
+ */
+ public SysJob selectJobById(Long jobId);
+
+ /**
+ * 通过调度ID删除调度任务信息
+ *
+ * @param jobId 调度ID
+ * @return 结果
+ */
+ public int deleteJobById(Long jobId);
+
+ /**
+ * 批量删除调度任务信息
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteJobByIds(Long[] ids);
+
+ /**
+ * 修改调度任务信息
+ *
+ * @param job 调度任务信息
+ * @return 结果
+ */
+ public int updateJob(SysJob job);
+
+ /**
+ * 新增调度任务信息
+ *
+ * @param job 调度任务信息
+ * @return 结果
+ */
+ public int insertJob(SysJob job);
+}
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/ISysJobLogService.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/ISysJobLogService.java
new file mode 100644
index 0000000..62a2b49
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/ISysJobLogService.java
@@ -0,0 +1,57 @@
+package org.wfc.user.service;
+
+import org.wfc.user.domain.SysJobLog;
+
+import java.util.List;
+
+/**
+ * 定时任务调度日志信息信息 服务层
+ *
+ * @author ruoyi
+ */
+public interface ISysJobLogService
+{
+ /**
+ * 获取quartz调度器日志的计划任务
+ *
+ * @param jobLog 调度日志信息
+ * @return 调度任务日志集合
+ */
+ public List selectJobLogList(SysJobLog jobLog);
+
+ /**
+ * 通过调度任务日志ID查询调度信息
+ *
+ * @param jobLogId 调度任务日志ID
+ * @return 调度任务日志对象信息
+ */
+ public SysJobLog selectJobLogById(Long jobLogId);
+
+ /**
+ * 新增任务日志
+ *
+ * @param jobLog 调度日志信息
+ */
+ public void addJobLog(SysJobLog jobLog);
+
+ /**
+ * 批量删除调度日志信息
+ *
+ * @param logIds 需要删除的日志ID
+ * @return 结果
+ */
+ public int deleteJobLogByIds(Long[] logIds);
+
+ /**
+ * 删除任务日志
+ *
+ * @param jobId 调度日志ID
+ * @return 结果
+ */
+ public int deleteJobLogById(Long jobId);
+
+ /**
+ * 清空任务日志
+ */
+ public void cleanJobLog();
+}
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/ISysJobService.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/ISysJobService.java
new file mode 100644
index 0000000..e173cdf
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/ISysJobService.java
@@ -0,0 +1,31 @@
+package org.wfc.user.service;
+
+import org.wfc.common.core.exception.job.TaskException;
+import org.wfc.user.domain.SysJob;
+
+import java.util.List;
+
+/**
+ * 定时任务调度信息信息 服务层
+ *
+ * @author ruoyi
+ */
+public interface ISysJobService
+{
+ /**
+ * 获取quartz调度器的计划任务
+ *
+ * @param job 调度信息
+ * @return 调度任务集合
+ */
+ public List selectJobList(SysJob job);
+
+ /**
+ * 通过调度任务ID查询调度信息
+ *
+ * @param jobId 调度任务ID
+ * @return 调度任务对象信息
+ */
+ public SysJob selectJobById(Long jobId);
+
+}
\ No newline at end of file
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/SysJobLogServiceImpl.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/SysJobLogServiceImpl.java
new file mode 100644
index 0000000..8cc48fc
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/SysJobLogServiceImpl.java
@@ -0,0 +1,87 @@
+package org.wfc.user.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.wfc.user.domain.SysJobLog;
+import org.wfc.user.mapper.SysJobLogMapper;
+
+import java.util.List;
+
+/**
+ * 定时任务调度日志信息 服务层
+ *
+ * @author ruoyi
+ */
+@Service
+public class SysJobLogServiceImpl implements ISysJobLogService
+{
+ @Autowired
+ private SysJobLogMapper jobLogMapper;
+
+ /**
+ * 获取quartz调度器日志的计划任务
+ *
+ * @param jobLog 调度日志信息
+ * @return 调度任务日志集合
+ */
+ @Override
+ public List selectJobLogList(SysJobLog jobLog)
+ {
+ return jobLogMapper.selectJobLogList(jobLog);
+ }
+
+ /**
+ * 通过调度任务日志ID查询调度信息
+ *
+ * @param jobLogId 调度任务日志ID
+ * @return 调度任务日志对象信息
+ */
+ @Override
+ public SysJobLog selectJobLogById(Long jobLogId)
+ {
+ return jobLogMapper.selectJobLogById(jobLogId);
+ }
+
+ /**
+ * 新增任务日志
+ *
+ * @param jobLog 调度日志信息
+ */
+ @Override
+ public void addJobLog(SysJobLog jobLog)
+ {
+ jobLogMapper.insertJobLog(jobLog);
+ }
+
+ /**
+ * 批量删除调度日志信息
+ *
+ * @param logIds 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteJobLogByIds(Long[] logIds)
+ {
+ return jobLogMapper.deleteJobLogByIds(logIds);
+ }
+
+ /**
+ * 删除任务日志
+ *
+ * @param jobId 调度日志ID
+ */
+ @Override
+ public int deleteJobLogById(Long jobId)
+ {
+ return jobLogMapper.deleteJobLogById(jobId);
+ }
+
+ /**
+ * 清空任务日志
+ */
+ @Override
+ public void cleanJobLog()
+ {
+ jobLogMapper.cleanJobLog();
+ }
+}
diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/SysJobServiceImpl.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/SysJobServiceImpl.java
new file mode 100644
index 0000000..fdf0a32
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/service/SysJobServiceImpl.java
@@ -0,0 +1,48 @@
+package org.wfc.user.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.wfc.user.domain.SysJob;
+import org.wfc.user.mapper.SysJobMapper;
+
+import java.util.List;
+
+/**
+ * 定时任务调度信息 服务层
+ *
+ * @author ruoyi
+ */
+@Service
+public class SysJobServiceImpl implements ISysJobService
+{
+
+ @Autowired
+ private SysJobMapper jobMapper;
+
+
+ /**
+ * 获取quartz调度器的计划任务列表
+ *
+ * @param job 调度信息
+ * @return
+ */
+ @Override
+ public List selectJobList(SysJob job)
+ {
+ return jobMapper.selectJobList(job);
+ }
+
+ /**
+ * 通过调度任务ID查询调度信息
+ *
+ * @param jobId 调度任务ID
+ * @return 调度任务对象信息
+ */
+ @Override
+ public SysJob selectJobById(Long jobId)
+ {
+ return jobMapper.selectJobById(jobId);
+ }
+
+
+}
\ No newline at end of file
diff --git a/wfc-modules/wfc-modules-user/src/main/resources/application.yml b/wfc-modules/wfc-modules-user/src/main/resources/application.yml
new file mode 100644
index 0000000..6c2314d
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/resources/application.yml
@@ -0,0 +1,24 @@
+# spring配置
+spring:
+ redis:
+ host: 192.168.2.248
+ port: 6379
+ password:
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://192.168.2.248:3306/wfc-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ username: root
+ password: 123456
+
+# mybatis配置
+mybatis:
+ # 搜索指定包别名
+ typeAliasesPackage: org.wfc.user.domain
+ # 配置mapper的扫描,找到所有的mapper.xml映射文件
+ mapperLocations: classpath:mapper/**/*.xml
+
+# swagger配置
+swagger:
+ title: 用户平台接口文档
+ license: Powered By wfc
+ licenseUrl: https://wfc.vip
diff --git a/wfc-modules/wfc-modules-user/src/main/resources/banner.txt b/wfc-modules/wfc-modules-user/src/main/resources/banner.txt
new file mode 100644
index 0000000..cc13de2
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/resources/banner.txt
@@ -0,0 +1,3 @@
+Spring Boot Version: ${spring-boot.version}
+Spring Application Name: ${spring.application.name}
+ __ _ _
diff --git a/wfc-modules/wfc-modules-user/src/main/resources/bootstrap.yml b/wfc-modules/wfc-modules-user/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..6a8e745
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/resources/bootstrap.yml
@@ -0,0 +1,27 @@
+# Tomcat
+server:
+ port: 9208
+
+# Spring
+spring:
+ application:
+ # 应用名称
+ name: wfc-modules-user
+ profiles:
+ # 环境配置
+ active: '@profileName@'
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: '@nacosServerAddr@'
+ namespace: '@nacosNamespace@'
+ config:
+ # 配置中心地址
+ server-addr: '@nacosServerAddr@'
+ namespace: '@nacosNamespace@'
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
diff --git a/wfc-modules/wfc-modules-user/src/main/resources/logback.xml b/wfc-modules/wfc-modules-user/src/main/resources/logback.xml
new file mode 100644
index 0000000..73c3c56
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/resources/logback.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wfc-modules/wfc-modules-user/src/main/resources/mapper/user/SysJobLogMapper.xml b/wfc-modules/wfc-modules-user/src/main/resources/mapper/user/SysJobLogMapper.xml
new file mode 100644
index 0000000..d11afdd
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/resources/mapper/user/SysJobLogMapper.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select job_log_id, job_name, job_group, invoke_target, job_message, status, exception_info, create_time
+ from sys_job_log
+
+
+
+
+
+
+
+
+
+ delete from sys_job_log where job_log_id = #{jobLogId}
+
+
+
+ delete from sys_job_log where job_log_id in
+
+ #{jobLogId}
+
+
+
+
+ truncate table sys_job_log
+
+
+
+ insert into sys_job_log(
+ job_log_id,
+ job_name,
+ job_group,
+ invoke_target,
+ job_message,
+ status,
+ exception_info,
+ create_time
+ )values(
+ #{jobLogId},
+ #{jobName},
+ #{jobGroup},
+ #{invokeTarget},
+ #{jobMessage},
+ #{status},
+ #{exceptionInfo},
+ sysdate()
+ )
+
+
+
\ No newline at end of file
diff --git a/wfc-modules/wfc-modules-user/src/main/resources/mapper/user/SysJobMapper.xml b/wfc-modules/wfc-modules-user/src/main/resources/mapper/user/SysJobMapper.xml
new file mode 100644
index 0000000..da6876b
--- /dev/null
+++ b/wfc-modules/wfc-modules-user/src/main/resources/mapper/user/SysJobMapper.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark
+ from sys_job
+
+
+
+
+
+
+
+
+
+ delete from sys_job where job_id = #{jobId}
+
+
+
+ delete from sys_job where job_id in
+
+ #{jobId}
+
+
+
+
+ update sys_job
+
+ job_name = #{jobName},
+ job_group = #{jobGroup},
+ invoke_target = #{invokeTarget},
+ cron_expression = #{cronExpression},
+ misfire_policy = #{misfirePolicy},
+ concurrent = #{concurrent},
+ status = #{status},
+ remark = #{remark},
+ update_by = #{updateBy},
+ update_time = sysdate()
+
+ where job_id = #{jobId}
+
+
+
+ insert into sys_job(
+ job_id,
+ job_name,
+ job_group,
+ invoke_target,
+ cron_expression,
+ misfire_policy,
+ concurrent,
+ status,
+ remark,
+ create_by,
+ create_time
+ )values(
+ #{jobId},
+ #{jobName},
+ #{jobGroup},
+ #{invokeTarget},
+ #{cronExpression},
+ #{misfirePolicy},
+ #{concurrent},
+ #{status},
+ #{remark},
+ #{createBy},
+ sysdate()
+ )
+
+
+
\ No newline at end of file