From 51a208c7715ecfea9faeccd5ee56ed2d0a697c95 Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期六, 20 四月 2024 15:24:28 +0800
Subject: [PATCH] 工作调度
---
server/dmvisit_admin/src/main/java/com/doumee/api/timer/QuartzController.java | 54 ++++
server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/JobState.java | 29 ++
server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/LogState.java | 28 ++
server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/QuartzJob.java | 50 ++++
server/dmvisit_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java | 146 ++++++++++++
server/dmvisit_service/src/main/java/com/doumee/dao/timer/mapper/QuartzJobMapper.java | 10
server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/TimerJob.java | 24 ++
/dev/null | 81 ------
server/dmvisit_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzRecord.java | 50 ++++
server/dmvisit_service/src/main/java/com/doumee/service/timer/QuartzJobService.java | 111 +++++++++
server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/JobService.java | 11
server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/PrintJob.java | 20 +
server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/QuartzLog.java | 38 +++
server/dmvisit_service/src/main/java/com/doumee/dao/timer/mapper/QuartzLogMapper.java | 10
server/dmvisit_service/src/main/java/com/doumee/service/timer/QuartzLogService.java | 23 +
15 files changed, 604 insertions(+), 81 deletions(-)
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/timer/QuartzController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/timer/QuartzController.java
new file mode 100644
index 0000000..0291c32
--- /dev/null
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/timer/QuartzController.java
@@ -0,0 +1,54 @@
+package com.doumee.api.timer1;
+
+import com.doumee.entity.QuartzJob;
+import com.doumee.service.QuartzJobService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/business/quartz")
+@Api(tags = "瀹氭椂浠诲姟鎺ュ彛")
+public class QuartzController {
+
+ @Resource
+ private QuartzJobService quartzJobService ;
+
+ @ApiOperation( "浠诲姟鏌ヨ")
+ @GetMapping("/job/{id}")
+ public QuartzJob getById(@PathVariable Integer id){
+ return quartzJobService.getById(id) ;
+ }
+
+ @ApiOperation( "浠诲姟鏂板")
+ @PostMapping("/job")
+ public Integer insert(@RequestBody QuartzJob quartzJob){
+ return quartzJobService.insert(quartzJob) ;
+ }
+
+ @ApiOperation( "鏇存柊浠诲姟")
+ @PostMapping("/job/update")
+ public Integer update(@RequestBody QuartzJob quartzJob){
+ return quartzJobService.update(quartzJob) ;
+ }
+
+ @ApiOperation( "鍋滄浠诲姟")
+ @PostMapping("/job/pause/{id}")
+ public void pause(@PathVariable("id") Integer id) {
+ quartzJobService.pause(id);
+ }
+
+ @ApiOperation( "鎭㈠浠诲姟")
+ @PostMapping("/job/resume/{id}")
+ public void resume(@PathVariable("id") Integer id) {
+ quartzJobService.resume(id) ;
+ }
+
+ @ApiOperation( "鎵ц涓�娆�")
+ @GetMapping("/job/runOnce/{id}")
+ public void runOnce(@PathVariable("id") Integer id) {
+ quartzJobService.runOnce(id) ;
+ }
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/JobState.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/JobState.java
new file mode 100644
index 0000000..a4c325c
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/JobState.java
@@ -0,0 +1,29 @@
+package com.doumee.constant;
+
+/**
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 10:05
+ */
+public enum JobState {
+
+ JOB_RUN(1, "杩愯"),
+ JOB_STOP(2, "鏆傚仠"),
+ JOB_DEL(3, "鍒犻櫎");
+
+ private int status;
+ private String desc;
+
+ JobState(int status, String desc) {
+ this.status = status;
+ this.desc = desc;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/LogState.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/LogState.java
new file mode 100644
index 0000000..f8cfd30
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/LogState.java
@@ -0,0 +1,28 @@
+package com.doumee.constant;
+
+/**
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 10:06
+ */
+public enum LogState {
+
+ LOG_SUS(1, "鎴愬姛"),
+ LOG_FAIL(2, "澶辫触");
+
+ private int status;
+ private String desc;
+
+ LogState(int status, String desc) {
+ this.status = status;
+ this.desc = desc;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/QuartzJob.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/QuartzJob.java
new file mode 100644
index 0000000..05c1f32
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/QuartzJob.java
@@ -0,0 +1,50 @@
+package com.doumee.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 11:04
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(description = "QuartzJob瀹炰綋绫�")
+public class QuartzJob implements Serializable {
+ private static final long serialVersionUID = 1L;
+ /**
+ * 浠诲姟璋冨害鍙傛暟key
+ */
+ public static final String JOB_PARAM_KEY = "BOOT_JOB_PARAM_KEY";
+
+ @Schema(description = "浠诲姟id")
+ @TableId(value = "id",type = IdType.AUTO)
+ private Integer id;
+
+ @Schema(description = "Bean鍚嶇О")
+ private String beanName;
+
+ @Schema(description = "鎵ц鍙傛暟")
+ private String params;
+
+ @Schema(description = "Cron琛ㄨ揪寮�")
+ private String cronExpres;
+
+ @Schema(description = "浠诲姟鐘舵�侊細1姝e父锛�2鏆傚仠锛�3鍒犻櫎")
+ private Integer state;
+
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ private Date createTime;
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/QuartzLog.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/QuartzLog.java
new file mode 100644
index 0000000..40cfb92
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/entity/QuartzLog.java
@@ -0,0 +1,38 @@
+package com.doumee.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ *
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 11:04
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class QuartzLog {
+
+ @TableId(value = "id",type = IdType.AUTO)
+ private Long id;
+
+ private Integer jobId;
+
+ private String beanName;
+
+ private String params;
+
+ private Integer state;
+
+ private String error;
+
+ private Integer times;
+
+ private Date createTime;
+
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/JobService.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/JobService.java
new file mode 100644
index 0000000..754e1ba
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/JobService.java
@@ -0,0 +1,11 @@
+package com.doumee.job;
+
+/**
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 11:43
+ */
+public interface JobService {
+
+ void run(String params);
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/PrintJob.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/PrintJob.java
new file mode 100644
index 0000000..40f67b9
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/PrintJob.java
@@ -0,0 +1,20 @@
+package com.doumee.job;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 11:44
+ */
+@Component("printJob")
+public class PrintJob implements JobService {
+
+ private static final Logger log = LoggerFactory.getLogger(PrintJob.class);
+
+ @Override
+ public void run(String params) {
+ log.info("\n ======== \n print-job-params:{} \n ========",params);
+ }
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/TimerJob.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/TimerJob.java
new file mode 100644
index 0000000..2b75c41
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/job/TimerJob.java
@@ -0,0 +1,24 @@
+package com.doumee.job;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 14:51
+ */
+@Component("timerJob")
+public class TimerJob implements JobService {
+
+ private static final Logger log = LoggerFactory.getLogger(TimerJob.class);
+ private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
+
+ @Override
+ public void run(String params) {
+ log.info("\n ======== \n timer-job-params:{} \n ========",params);
+ log.info("time-now:{}",format.format(new Date()));
+ }
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/mapper/QuartzJobMapper.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/mapper/QuartzJobMapper.java
new file mode 100644
index 0000000..8c0a355
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/mapper/QuartzJobMapper.java
@@ -0,0 +1,10 @@
+package com.doumee.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.entity.QuartzJob;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface QuartzJobMapper extends BaseMapper<QuartzJob> {
+
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/mapper/QuartzLogMapper.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/mapper/QuartzLogMapper.java
new file mode 100644
index 0000000..70f6159
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/mapper/QuartzLogMapper.java
@@ -0,0 +1,10 @@
+package com.doumee.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.entity.QuartzLog;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface QuartzLogMapper extends BaseMapper<QuartzLog> {
+
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java
new file mode 100644
index 0000000..50ad1f9
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java
@@ -0,0 +1,146 @@
+package com.doumee.scheduler;
+
+import com.doumee.constant.JobState;
+import com.doumee.entity.QuartzJob;
+import org.quartz.*;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 浠诲姟鎿嶄綔鍩虹灏佽
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 14:04
+ */
+@Component
+public class QuartzManage {
+
+ private static final String SCHEDULE_NAME = "BOOT_JOB_" ;
+
+ @Resource
+ private Scheduler scheduler ;
+
+ /**
+ * 瑙﹀彂鍣� KEY
+ */
+ public TriggerKey getTriggerKey(Integer jobId){
+ return TriggerKey.triggerKey(SCHEDULE_NAME+jobId) ;
+ }
+
+ /**
+ * 瀹氭椂浠诲姟 Key
+ */
+ public JobKey getJobKey (Integer jobId){
+ return JobKey.jobKey(SCHEDULE_NAME+jobId) ;
+ }
+
+ /**
+ * 琛ㄨ揪寮忚Е鍙戝櫒
+ */
+ public org.quartz.CronTrigger getCronTrigger (Integer jobId){
+ try {
+ return (CronTrigger) this.scheduler.getTrigger(getTriggerKey(jobId)) ;
+ } catch (SchedulerException e){
+ throw new RuntimeException("getCronTrigger Fail",e) ;
+ }
+ }
+
+ /**
+ * 鍒涘缓瀹氭椂鍣�
+ */
+ public void createJob (QuartzJob quartzJob){
+ try {
+ // 鏋勫缓浠诲姟
+ JobDetail jobDetail = JobBuilder.newJob(QuartzRecord.class)
+ .withIdentity(getJobKey(quartzJob.getId())).build() ;
+
+ // 鏋勫缓Cron璋冨害鍣�
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
+ .cronSchedule(quartzJob.getCronExpres())
+ .withMisfireHandlingInstructionDoNothing() ;
+ // 浠诲姟瑙﹀彂鍣�
+ org.quartz.CronTrigger trigger = TriggerBuilder.newTrigger()
+ .withIdentity(getTriggerKey(quartzJob.getId()))
+ .withSchedule(scheduleBuilder).build() ;
+ jobDetail.getJobDataMap().put(QuartzJob.JOB_PARAM_KEY,quartzJob);
+ scheduler.scheduleJob(jobDetail,trigger) ;
+ // 鐘舵�佹牎楠�
+ checkStop(quartzJob) ;
+ } catch (SchedulerException e){
+ throw new RuntimeException("createJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 鏇存柊瀹氭椂浠诲姟
+ */
+ public void updateJob(QuartzJob quartzJob) {
+ try {
+ // 鏌ヨ瑙﹀彂鍣↘ey
+ TriggerKey triggerKey = getTriggerKey(quartzJob.getId());
+ // 鏋勫缓Cron璋冨害鍣�
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
+ .cronSchedule(quartzJob.getCronExpres())
+ .withMisfireHandlingInstructionDoNothing();
+ // 浠诲姟瑙﹀彂鍣�
+ org.quartz.CronTrigger trigger = getCronTrigger(quartzJob.getId())
+ .getTriggerBuilder().withIdentity(triggerKey)
+ .withSchedule(scheduleBuilder).build();
+ trigger.getJobDataMap().put(QuartzJob.JOB_PARAM_KEY, quartzJob);
+ scheduler.rescheduleJob(triggerKey, trigger);
+ // 鐘舵�佹牎楠�
+ checkStop(quartzJob) ;
+ } catch (SchedulerException e) {
+ throw new RuntimeException("updateJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 鎭㈠瀹氭椂鍣�
+ */
+ public void resumeJob (Integer jobId){
+ try {
+ this.scheduler.resumeJob(getJobKey(jobId));
+ } catch (SchedulerException e){
+ throw new RuntimeException("resumeJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 鍒犻櫎瀹氭椂鍣�
+ */
+ public void deleteJob (Integer jobId){
+ try {
+ scheduler.deleteJob(getJobKey(jobId));
+ } catch (SchedulerException e){
+ throw new RuntimeException("deleteJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 鎵ц瀹氭椂鍣�
+ */
+ public void run (QuartzJob quartzJob){
+ try {
+ JobDataMap dataMap = new JobDataMap() ;
+ dataMap.put(QuartzJob.JOB_PARAM_KEY,quartzJob);
+ this.scheduler.triggerJob(getJobKey(quartzJob.getId()),dataMap);
+ } catch (SchedulerException e){
+ throw new RuntimeException("run Fail",e) ;
+ }
+ }
+
+ /**
+ * 鏍¢獙鍋滄瀹氭椂鍣�
+ */
+ public void checkStop (QuartzJob quartzJob){
+ try {
+ if(quartzJob.getState() != JobState.JOB_RUN.getStatus()){
+ this.scheduler.pauseJob(getJobKey(quartzJob.getId()));
+ }
+ } catch (SchedulerException e){
+ throw new RuntimeException("pauseJob Fail",e) ;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzRecord.java b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzRecord.java
new file mode 100644
index 0000000..f8889af
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzRecord.java
@@ -0,0 +1,50 @@
+package com.doumee.scheduler;
+
+import com.doumee.constant.LogState;
+import com.doumee.entity.QuartzJob;
+import com.doumee.entity.QuartzLog;
+import com.doumee.service.QuartzLogService;
+import org.quartz.JobExecutionContext;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.lang.reflect.Method;
+import java.util.Date;
+
+/**
+ * 浠诲姟璁板綍
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 10:21
+ */
+public class QuartzRecord extends QuartzJobBean {
+
+ @Override
+ protected void executeInternal(JobExecutionContext context) {
+ QuartzJob quartzJob = (QuartzJob)context.getMergedJobDataMap().get(QuartzJob.JOB_PARAM_KEY) ;
+ QuartzLogService quartzLogService = (QuartzLogService)SpringContextUtil.getBean("quartzLogService") ;
+ // 瀹氭椂鍣ㄦ棩蹇楄褰�
+ QuartzLog quartzLog = new QuartzLog () ;
+ quartzLog.setJobId(quartzJob.getId());
+ quartzLog.setBeanName(quartzJob.getBeanName());
+ quartzLog.setParams(quartzJob.getParams());
+ quartzLog.setCreateTime(new Date());
+ long beginTime = System.currentTimeMillis() ;
+ try {
+ // 鍔犺浇骞舵墽琛�
+ Object target = SpringContextUtil.getBean(quartzJob.getBeanName());
+ Method method = target.getClass().getDeclaredMethod("run", String.class);
+ method.invoke(target, quartzJob.getParams());
+ long executeTime = System.currentTimeMillis() - beginTime;
+ quartzLog.setTimes((int)executeTime);
+ quartzLog.setState(LogState.LOG_SUS.getStatus());
+ } catch (Exception e){
+ // 寮傚父淇℃伅
+ long executeTime = System.currentTimeMillis() - beginTime;
+ quartzLog.setTimes((int)executeTime);
+ quartzLog.setState(LogState.LOG_FAIL.getStatus());
+ quartzLog.setError(e.getMessage());
+ } finally {
+ // 淇濆瓨鎵ц鏃ュ織
+ quartzLogService.insert(quartzLog) ;
+ }
+ }
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/timer/QuartzJobService.java b/server/dmvisit_service/src/main/java/com/doumee/service/timer/QuartzJobService.java
new file mode 100644
index 0000000..efc2738
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/timer/QuartzJobService.java
@@ -0,0 +1,111 @@
+package com.doumee.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.doumee.constant.JobState;
+import com.doumee.entity.QuartzJob;
+import com.doumee.mapper.QuartzJobMapper;
+import com.doumee.scheduler.QuartzManage;
+import org.quartz.CronTrigger;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 11:08
+ */
+@Service
+public class QuartzJobService {
+
+ @Resource
+ private QuartzJobMapper quartzJobMapper ;
+
+ @Resource
+ private QuartzManage quartzManage;
+
+ /**
+ * 鍒濆鍖栧姞杞藉畾鏃朵换鍔�
+ */
+ @PostConstruct
+ public void init () {
+ LambdaQueryWrapper<QuartzJob> queryWrapper = new LambdaQueryWrapper<>() ;
+ queryWrapper.in(QuartzJob::getState, JobState.JOB_RUN.getStatus(),JobState.JOB_STOP.getStatus());
+ List<QuartzJob> jobList = quartzJobMapper.selectList(queryWrapper);
+ jobList.forEach(quartzJob -> {
+ CronTrigger cronTrigger = quartzManage.getCronTrigger(quartzJob.getId()) ;
+ if (Objects.isNull(cronTrigger)){
+ quartzManage.createJob(quartzJob);
+ } else {
+ quartzManage.updateJob(quartzJob);
+ }
+ });
+ }
+
+ /**
+ * 浠诲姟涓婚敭鏌ヨ
+ */
+ public QuartzJob getById(Integer id) {
+ return quartzJobMapper.selectById(id) ;
+ }
+
+ /**
+ * 鏂板浠诲姟
+ */
+ public int insert(QuartzJob quartzJob) {
+ int flag = quartzJobMapper.insert(quartzJob) ;
+ if (flag > 0){
+ quartzManage.createJob(quartzJob) ;
+ }
+ return flag;
+ }
+
+ /**
+ * 鏇存柊浠诲姟
+ */
+ public int update(QuartzJob quartzJob) {
+ int flag = quartzJobMapper.updateById(quartzJob);
+ if (flag > 0){
+ quartzManage.updateJob(quartzJob);
+ }
+ return flag ;
+ }
+
+ /**
+ * 鏆傚仠浠诲姟
+ */
+ public void pause(Integer id) {
+ QuartzJob quartzJob = quartzJobMapper.selectById(id) ;
+ if (!Objects.isNull(quartzJob)){
+ quartzJob.setState(JobState.JOB_STOP.getStatus());
+ if (quartzJobMapper.updateById(quartzJob)>0){
+ quartzManage.checkStop(quartzJob);
+ }
+ }
+ }
+
+ /**
+ * 鎭㈠浠诲姟
+ */
+ public void resume(Integer id) {
+ QuartzJob quartzJob = quartzJobMapper.selectById(id) ;
+ if (!Objects.isNull(quartzJob)){
+ quartzJob.setState(JobState.JOB_RUN.getStatus());
+ if (quartzJobMapper.updateById(quartzJob)>0){
+ quartzManage.resumeJob(id);
+ }
+ }
+ }
+
+ /**
+ * 鎵ц浠诲姟涓�娆�
+ */
+ public void runOnce(Integer id) {
+ QuartzJob quartzJob = quartzJobMapper.selectById(id) ;
+ if (!Objects.isNull(quartzJob) && quartzJob.getState() != JobState.JOB_DEL.getStatus()){
+ quartzManage.run(quartzJob);
+ }
+ }
+}
\ No newline at end of file
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/timer/QuartzLogService.java b/server/dmvisit_service/src/main/java/com/doumee/service/timer/QuartzLogService.java
new file mode 100644
index 0000000..93a4ec4
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/timer/QuartzLogService.java
@@ -0,0 +1,23 @@
+package com.doumee.service;
+
+import com.doumee.entity.QuartzLog;
+import com.doumee.mapper.QuartzLogMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ *
+ * @author 鍏紬鍙�:鐭ヤ簡涓�绗�
+ * @since 2023-07-26 11:02
+ */
+@Service("quartzLogService")
+public class QuartzLogService {
+
+ @Resource
+ private QuartzLogMapper quartzLogMapper ;
+
+ public Integer insert(QuartzLog quartzLog) {
+ return quartzLogMapper.insert(quartzLog);
+ }
+}
diff --git a/server/dmvisit_service/src/main/resources/application-proHS.yml b/server/dmvisit_service/src/main/resources/application-proHS.yml
deleted file mode 100644
index 05e27a4..0000000
--- a/server/dmvisit_service/src/main/resources/application-proHS.yml
+++ /dev/null
@@ -1,81 +0,0 @@
-spring:
- # 鏁版嵁婧愰厤缃�
- datasource:
- url: jdbc:mysql://10.10.99.68:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
- username: root
- password: Hs@20240307
- driver-class-name: com.mysql.cj.jdbc.Driver
- type: com.alibaba.druid.pool.DruidDataSource
- redis:
- # database: 0
- host: 127.0.0.1
- port: 6379
- password:
- timeout: 5000 # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
- jackson:
- time-zone: GMT+8
- date-format: yyyy-MM-dd HH:mm:ss
-
-#rocketmq:
-# namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080
-# groupId: GID-wakatest
-# topic: waka-test
-# username: 4derRb4Sw5EkqUMI
-# password: v50N97wf4av8Q8I4
-
-knife4j:
- enable: true
- basic:
- enable: true
- username: admin
- password: 111111
-
-debug_model: false
-
-# Swagger閰嶇疆
-swagger:
- host: dmtest.ahapp.net
- title: ${project.name}鎺ュ彛鏂囨。
- description: ${project.name}鎺ュ彛鏂囨。
- enabled: true
- context-path: /erp_interface
- # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
- redirect-uri: /
-
-########################鍚屾鏁版嵁妯″紡 ########################
-data-sync:
- org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
- visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
- need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
-
-########################寰俊鏀粯鐩稿叧閰嶇疆########################
-wx:
- pay:
- appId: wxfab6da18632e28de
- appSecret: 4ee3b22afa90287834319fc3c1635271
- mchId: 1229817002
- mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
- notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify
- keyPath: /usr/local/apiclient_cert.p12
-
-tencent:
- map:
- remoteHost: https://apis.map.qq.com
- appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ
-
-
-des_pwd: 123456SDFKDJF
-
-## MQTT##
-mqtt:
- host: tcp://192.168.10.198:1883
- userName: root
- passWord: 123456
- qos: 1
- clientId: ClientId_local #ClientId_local蹇呴』鍞竴 姣斿浣犲凡缁忓畾浜嗗彨ABC 閭d綘灏变竴鐩村彨ABC 鍏朵粬鍦版柟灏变笉瑕佷娇鐢ˋBC浜�
- timeout: 10
- keepalive: 20
- topic1: A/pick/warn/# #绗﹀彿鏄唬琛ㄦ暣涓獁arn涓嬮潰鐨勫叏閮ㄥ瓙涓婚 娌℃湁鐞嗚В鐨勮瘽 鍙互鐧惧害浠旂粏鐞嗚В涓�涓�
- topic2: A/cmd/resp
- topic3: ABCF
- topic4: ABCH
diff --git a/server/dmvisit_service/src/main/resources/application-testHS.yml b/server/dmvisit_service/src/main/resources/application-testHS.yml
deleted file mode 100644
index 2680b48..0000000
--- a/server/dmvisit_service/src/main/resources/application-testHS.yml
+++ /dev/null
@@ -1,81 +0,0 @@
-spring:
- # 鏁版嵁婧愰厤缃�
- datasource:
- url: jdbc:mysql://10.10.99.63:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
- username: root
- password: HS!20240227
- driver-class-name: com.mysql.cj.jdbc.Driver
- type: com.alibaba.druid.pool.DruidDataSource
- redis:
- # database: 0
- host: 127.0.0.1
- port: 6379
- password: huasun618
- timeout: 5000 # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
- jackson:
- time-zone: GMT+8
- date-format: yyyy-MM-dd HH:mm:ss
-
-#rocketmq:
-# namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080
-# groupId: GID-wakatest
-# topic: waka-test
-# username: 4derRb4Sw5EkqUMI
-# password: v50N97wf4av8Q8I4
-
-knife4j:
- enable: true
- basic:
- enable: true
- username: admin
- password: 111111
-
-debug_model: true
-
-# Swagger閰嶇疆
-swagger:
- host: dmtest.ahapp.net
- title: ${project.name}鎺ュ彛鏂囨。
- description: ${project.name}鎺ュ彛鏂囨。
- enabled: true
- context-path: /erp_interface
- # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
- redirect-uri: /
-
-########################鍚屾鏁版嵁妯″紡 ########################
-data-sync:
- org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
- visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
- need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
-
-########################寰俊鏀粯鐩稿叧閰嶇疆########################
-wx:
- pay:
- appId: wxfab6da18632e28de
- appSecret: 4ee3b22afa90287834319fc3c1635271
- mchId: 1229817002
- mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
- notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify
- keyPath: /usr/local/apiclient_cert.p12
-
-tencent:
- map:
- remoteHost: https://apis.map.qq.com
- appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ
-
-
-des_pwd: 123456SDFKDJF
-
-## MQTT##
-mqtt:
- host: tcp://192.168.10.198:1883
- userName: root
- passWord: 123456
- qos: 1
- clientId: ClientId_local #ClientId_local蹇呴』鍞竴 姣斿浣犲凡缁忓畾浜嗗彨ABC 閭d綘灏变竴鐩村彨ABC 鍏朵粬鍦版柟灏变笉瑕佷娇鐢ˋBC浜�
- timeout: 10
- keepalive: 20
- topic1: A/pick/warn/# #绗﹀彿鏄唬琛ㄦ暣涓獁arn涓嬮潰鐨勫叏閮ㄥ瓙涓婚 娌℃湁鐞嗚В鐨勮瘽 鍙互鐧惧害浠旂粏鐞嗚В涓�涓�
- topic2: A/cmd/resp
- topic3: ABCF
- topic4: ABCH
--
Gitblit v1.9.3