Skip to content

Commit

Permalink
feat: 提供获取所有基于quartz的任务的接口
Browse files Browse the repository at this point in the history
  • Loading branch information
damingerdai committed Feb 29, 2024
1 parent 625d109 commit cb48a0d
Show file tree
Hide file tree
Showing 8 changed files with 198 additions and 76 deletions.
2 changes: 1 addition & 1 deletion src/main/angular
Submodule angular updated 92 files
+22 −22 package.json
+4 −3 src/_app-theme.scss
+3 −0 src/app/app.config.ts
+148 −153 src/app/app.route.ts
+223 −140 src/app/routes/customer/customer-list/customer-list.component.html
+0 −10 src/app/routes/customer/customer-list/customer-list.component.scss
+14 −2 src/app/routes/customer/customer-list/customer-list.component.ts
+0 −16 src/app/routes/dashboard/dashboard-routing.module.ts
+0 −21 src/app/routes/dashboard/dashboard.module.ts
+9 −0 src/app/routes/dashboard/dashboard.routes.ts
+49 −26 src/app/routes/dashboard/dashboard/dashboard.component.html
+1 −0 src/app/routes/dashboard/dashboard/dashboard.component.scss
+2 −2 src/app/routes/dashboard/dashboard/dashboard.component.spec.ts
+26 −9 src/app/routes/dashboard/dashboard/dashboard.component.ts
+2 −2 src/app/routes/dashboard/dialog/add-user-room/add-user-room.component.spec.ts
+26 −8 src/app/routes/dashboard/dialog/add-user-room/add-user-room.component.ts
+0 −18 src/app/routes/forbidden/forbidden-routing.module.ts
+2 −1 src/app/routes/forbidden/forbidden.component.spec.ts
+8 −7 src/app/routes/forbidden/forbidden.component.ts
+0 −17 src/app/routes/forbidden/forbidden.module.ts
+11 −0 src/app/routes/forbidden/forbidden.routes.ts
+0 −16 src/app/routes/login/login-routing.module.ts
+3 −1 src/app/routes/login/login.component.spec.ts
+12 −3 src/app/routes/login/login.component.ts
+0 −21 src/app/routes/login/login.module.ts
+9 −0 src/app/routes/login/login.routes.ts
+0 −17 src/app/routes/not-found/not-found-routing.module.ts
+5 −1 src/app/routes/not-found/not-found.component.spec.ts
+6 −1 src/app/routes/not-found/not-found.component.ts
+0 −19 src/app/routes/not-found/not-found.module.ts
+10 −0 src/app/routes/not-found/not-found.routes.ts
+0 −16 src/app/routes/register/register-routing.module.ts
+1 −1 src/app/routes/register/register.component.spec.ts
+14 −3 src/app/routes/register/register.component.ts
+0 −22 src/app/routes/register/register.module.ts
+9 −0 src/app/routes/register/register.routes.ts
+1 −1 src/app/routes/room/_room-theme.scss
+14 −14 src/app/routes/room/customizer/customizer.component.html
+3 −3 src/app/routes/room/customizer/customizer.component.spec.ts
+9 −1 src/app/routes/room/customizer/customizer.component.ts
+2 −2 src/app/routes/room/dialog/add-customer-room-dialog/add-customer-room-dialog.component.spec.ts
+20 −3 src/app/routes/room/dialog/add-customer-room-dialog/add-customer-room-dialog.component.ts
+26 −26 src/app/routes/room/dialog/create-room-dialog/create-room-dialog.component.html
+2 −2 src/app/routes/room/dialog/create-room-dialog/create-room-dialog.component.spec.ts
+17 −6 src/app/routes/room/dialog/create-room-dialog/create-room-dialog.component.ts
+33 −33 src/app/routes/room/dialog/update-room-dialog/update-room-dialog.component.html
+2 −2 src/app/routes/room/dialog/update-room-dialog/update-room-dialog.component.spec.ts
+19 −7 src/app/routes/room/dialog/update-room-dialog/update-room-dialog.component.ts
+0 −140 src/app/routes/room/room-list/room-list.component.html
+0 −49 src/app/routes/room/room-list/room-list.component.spec.ts
+0 −16 src/app/routes/room/room-routing.module.ts
+167 −0 src/app/routes/room/room.component.html
+1 −11 src/app/routes/room/room.component.scss
+44 −14 src/app/routes/room/room.component.ts
+0 −29 src/app/routes/room/room.module.ts
+9 −0 src/app/routes/room/room.routes.ts
+0 −16 src/app/routes/settings/settings-routing.module.ts
+3 −1 src/app/routes/settings/settings.component.spec.ts
+7 −5 src/app/routes/settings/settings.component.ts
+0 −19 src/app/routes/settings/settings.module.ts
+9 −0 src/app/routes/settings/settings.routes.ts
+0 −17 src/app/routes/unauthorized/unauthorized-routing.module.ts
+5 −1 src/app/routes/unauthorized/unauthorized.component.spec.ts
+8 −6 src/app/routes/unauthorized/unauthorized.component.ts
+0 −17 src/app/routes/unauthorized/unauthorized.module.ts
+10 −0 src/app/routes/unauthorized/unauthorized.routes.ts
+13 −14 src/app/shared/components/banner/banner.component.spec.ts
+2 −4 src/app/shared/components/banner/banner.component.ts
+5 −2 src/app/shared/components/carousel/carousel-item.directive.ts
+19 −12 src/app/shared/components/carousel/carousel.component.ts
+13 −47 src/app/shared/components/confirm/confirm.component.spec.ts
+8 −7 src/app/shared/components/confirm/confirm.component.ts
+26 −2 src/app/shared/components/error-code/error-code.component.spec.ts
+10 −6 src/app/shared/components/error-code/error-code.component.ts
+1 −0 src/app/shared/components/loading-shade/index.ts
+3 −0 src/app/shared/components/loading-shade/loading-shade.component.html
+9 −0 src/app/shared/components/loading-shade/loading-shade.component.scss
+23 −0 src/app/shared/components/loading-shade/loading-shade.component.spec.ts
+16 −0 src/app/shared/components/loading-shade/loading-shade.component.ts
+71 −71 src/app/shared/components/navbar/navbar.component.html
+9 −3 src/app/shared/components/navbar/navbar.component.spec.ts
+12 −1 src/app/shared/components/navbar/navbar.component.ts
+1 −1 src/app/shared/components/page-header/page-header.component.spec.ts
+4 −6 src/app/shared/components/page-header/page-header.component.ts
+6 −2 src/app/shared/components/skeleton-loader/skeleton-loader.component.spec.ts
+6 −0 src/app/shared/components/skeleton-loader/skeleton-loader.component.ts
+5 −3 src/app/shared/components/theme-picker/theme-picker.component.spec.ts
+7 −0 src/app/shared/components/theme-picker/theme-picker.component.ts
+26 −14 src/app/shared/shared.module.ts
+4 −3 src/main.ts
+17 −0 src/unregister-service-workers.ts
+183 −183 yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -61,17 +61,20 @@ protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletRe
try {
var requestUrl = request.getRequestURI();
logger.debug("url: " + requestUrl + "\t" + isFilter(requestUrl));
if (!isFilter(requestUrl) && !requestUrl.contains("token") && !requestUrl.contains("/api/v1/job")) {
logger.info("verify url: " + requestUrl);
// verifyHttpHeaders(request);
var context = new HotelerContext();
ThreadLocalContextHolder.put(context);
context.setIn(in);
context.setRequestId(UUID.randomUUID().toString());
verifyToken(request, context);
} else {
logger.info("url: " + requestUrl + " is ignored");
}
var context = new HotelerContext();
ThreadLocalContextHolder.put(context);
context.setIn(in);
context.setRequestId(UUID.randomUUID().toString());
// if (!isFilter(requestUrl)
// && !requestUrl.contains("token")
// && (!requestUrl.contains("/api/v1/job") || requestUrl.contains("/api/v1/job/jobinfos"))) {
// logger.info("verify url: " + requestUrl);
// // verifyHttpHeaders(request);
// verifyToken(request, context);
// } else {
// logger.info("url: " + requestUrl + " is ignored");
// }
verifyToken(context, request);
filterChain.doFilter(servletRequest, servletResponse);
} catch (ExpiredJwtException ex) {
SecurityContextHolder.clearContext();
Expand All @@ -86,7 +89,6 @@ protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletRe
}
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, ex.getMessage());
} catch (Exception ex) {
ex.printStackTrace();
SecurityContextHolder.clearContext();
if (logger.isErrorEnabled()) {
logger.error("<{}> ErrorMsg: {}", ex.getClass().getSimpleName(), ex.getMessage());
Expand Down Expand Up @@ -139,7 +141,7 @@ private boolean isFilter(String url) {
return !r.matcher(url).matches();
}

private void verifyToken(HttpServletRequest httpRequest, HotelerContext context) {
private void verifyToken(HotelerContext context, HttpServletRequest httpRequest) {
final String requestTokenHeader = httpRequest.getHeader("Authorization");
if (Objects.isNull(requestTokenHeader) || !requestTokenHeader.startsWith("Bearer ")) {
throw ExceptionBuilder.buildException(600002, "访问拒绝.");
Expand Down
28 changes: 25 additions & 3 deletions src/main/java/org/daming/hoteler/api/web/JobController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,15 @@
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.field.expression.FieldExpression;
import com.cronutils.model.field.expression.FieldExpressionFactory;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.daming.hoteler.base.exceptions.HotelerException;
import org.daming.hoteler.base.logger.LoggerManager;
import org.daming.hoteler.pojo.JobInfo;
import org.daming.hoteler.pojo.request.AddPingJobTaskRequest;
import org.daming.hoteler.pojo.response.ListResponse;
import org.daming.hoteler.service.IErrorService;
import org.daming.hoteler.service.IQuartzService;
import org.daming.hoteler.task.CustomerTask;
import org.daming.hoteler.task.job.CheckInTimeEventJob;
Expand All @@ -30,9 +36,11 @@
@RequestMapping("api/v1/job")
public class JobController {

private CustomerTask customerTask;
private final CustomerTask customerTask;

private IQuartzService quartzService;
private final IQuartzService quartzService;

private final IErrorService errorService;

@GetMapping("update-crpyto-customer-id")
public String updateCrpytoCustomerId() {
Expand Down Expand Up @@ -66,9 +74,23 @@ public String addPingTask(@RequestBody AddPingJobTaskRequest request) {

}

public JobController(CustomerTask customerTask, IQuartzService quartzService) {
@Operation(summary = "get all quartz jobs", security = { @SecurityRequirement(name = "bearer-key") })
@GetMapping("jobinfos")
public ListResponse<JobInfo> listQuartzJobs() throws HotelerException {
try {
System.out.println("jobinfos");
var jobs = this.quartzService.listJob();
System.out.println(jobs);
return new ListResponse<>(jobs);
} catch (Exception ex) {
throw this.errorService.createHotelerSystemException(ex.getMessage(), ex);
}
}

public JobController(CustomerTask customerTask, IQuartzService quartzService, IErrorService errorService) {
super();
this.customerTask = customerTask;
this.quartzService = quartzService;
this.errorService = errorService;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,9 @@ public SecurityFilterChain filterChain(
.requestMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/img/**", "/icon/**", "/assets/**").anonymous()
.requestMatchers("/**.js", "/**.css", "/**.ico", "/**.woff2", "/**.svg").anonymous()
.requestMatchers("/api/v1/token").anonymous()//普通用户权限
.requestMatchers("/api/**").hasRole("USERS")//普通用户权限
.requestMatchers("/api/v1/job/jobinfos").hasRole("USERS")//普通用户权限
.requestMatchers("/api/login").permitAll()
.requestMatchers("/api/**").hasRole("USERS")//普通用户权限
.requestMatchers(authWhiteList).permitAll()
//其他的需要授权后访问
.anyRequest().anonymous();
Expand Down
92 changes: 92 additions & 0 deletions src/main/java/org/daming/hoteler/pojo/JobInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package org.daming.hoteler.pojo;

import java.util.StringJoiner;

/**
* @author gming001
* @version 2024-02-29 15:00
*/
public class JobInfo {

private String name;

private String group;

private String cron;

private String state;

private String timeZone;

private String className;

public String getName() {
return name;
}

public JobInfo setName(String name) {
this.name = name;
return this;
}

public String getGroup() {
return group;
}

public JobInfo setGroup(String group) {
this.group = group;
return this;
}

public String getCron() {
return cron;
}

public JobInfo setCron(String cron) {
this.cron = cron;
return this;
}

public String getState() {
return state;
}

public JobInfo setState(String state) {
this.state = state;
return this;
}

public String getTimeZone() {
return timeZone;
}

public JobInfo setTimeZone(String timeZone) {
this.timeZone = timeZone;
return this;
}

public String getClassName() {
return className;
}

public JobInfo setClassName(String className) {
this.className = className;
return this;
}

public JobInfo() {
super();
}

@Override
public String toString() {
return new StringJoiner(", ", JobInfo.class.getSimpleName() + "[", "]")
.add("name='" + name + "'")
.add("group='" + group + "'")
.add("cron='" + cron + "'")
.add("state='" + state + "'")
.add("timeZone='" + timeZone + "'")
.add("className='" + className + "'")
.toString();
}
}
5 changes: 3 additions & 2 deletions src/main/java/org/daming/hoteler/service/IQuartzService.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.daming.hoteler.service;

import org.daming.hoteler.pojo.JobInfo;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.SchedulerException;
Expand All @@ -19,7 +20,7 @@ public interface IQuartzService {

void addJob(String name, String group, String cron, Class<? extends Job> clazz, JobDataMap jobDataMap) throws SchedulerException;

// JobInfo getJob(String name, String group) throws SchedulerException;
JobInfo getJob(String name, String group) throws SchedulerException;

boolean modifyJob(String name, String group, String cron) throws SchedulerException;

Expand All @@ -29,5 +30,5 @@ public interface IQuartzService {

boolean resumeJob(String name, String group) throws SchedulerException;

// List<JobInfo> listJob() throws SchedulerException;
List<JobInfo> listJob() throws SchedulerException;
}
114 changes: 59 additions & 55 deletions src/main/java/org/daming/hoteler/service/impl/QuartzServiceImpl.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.daming.hoteler.service.impl;

import org.daming.hoteler.pojo.JobInfo;
import org.daming.hoteler.service.IQuartzService;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
Expand All @@ -12,8 +14,10 @@
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
Expand Down Expand Up @@ -61,24 +65,24 @@ public void addJob(String name, String group, String cron, Class<? extends Job>
}
}

// @Override
// public JobInfo getJob(String name, String group) throws SchedulerException {
// var triggerKey = TriggerKey.triggerKey(name, group);
// var jobKey = JobKey.jobKey(name, group);
// var jobDetail = scheduler.getJobDetail(jobKey);
// var triggers = scheduler.getTriggersOfJob(jobKey);
// if (triggers.isEmpty()) {
// throw new SchedulerException("no trigger");
// }
// var trigger = triggers.get(0);
// var triggerState = scheduler.getTriggerState(trigger.getKey());
// if (!(trigger instanceof CronTrigger)) {
// throw new SchedulerException("no cronTrigger");
// }
// var cronTrigger = (CronTrigger)trigger;
// return new JobInfo().setName(name).setGroup(group).setState(triggerState.name()).setCron(cronTrigger.getCronExpression()).setTimezone(cronTrigger.getTimeZone().getID()).setClassName(jobDetail.getJobClass().getName());
//
// }
@Override
public JobInfo getJob(String name, String group) throws SchedulerException {
var triggerKey = TriggerKey.triggerKey(name, group);
var jobKey = JobKey.jobKey(name, group);
var jobDetail = scheduler.getJobDetail(jobKey);
var triggers = scheduler.getTriggersOfJob(jobKey);
if (triggers.isEmpty()) {
throw new SchedulerException("no trigger");
}
var trigger = triggers.getFirst();
var triggerState = scheduler.getTriggerState(trigger.getKey());
if (!(trigger instanceof CronTrigger)) {
throw new SchedulerException("no cronTrigger");
}
var cronTrigger = (CronTrigger)trigger;
return new JobInfo().setName(name).setGroup(group).setState(triggerState.name()).setCron(cronTrigger.getCronExpression()).setTimeZone(cronTrigger.getTimeZone().getID()).setClassName(jobDetail.getJobClass().getName());

}

@Override
public boolean modifyJob(String name, String group, String cron) throws SchedulerException {
Expand Down Expand Up @@ -113,43 +117,43 @@ public boolean resumeJob(String name, String group) throws SchedulerException {
return true;
}

// @Override
// public List<JobInfo> listJob() throws SchedulerException {
// var groupNames = scheduler.getJobGroupNames();
// var jobInfos = new ArrayList<JobInfo>(groupNames.size());
// groupNames.forEach(groupName -> {
// try {
// var jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));
// jobKeys.forEach(jobKey -> {
// try {
// var jobName = jobKey.getName();
// var jobGroup = jobKey.getGroup();
// var jobDetail = scheduler.getJobDetail(jobKey);
// var triggers = scheduler.getTriggersOfJob(jobKey);
// triggers.forEach(trigger -> {
// try {
// var triggerState = scheduler.getTriggerState(trigger.getKey());
// if (trigger instanceof CronTrigger) {
// var cronTrigger = (CronTrigger)trigger;
// jobInfos.add(new JobInfo().setName(jobName).setGroup(jobGroup).setState(triggerState.name()).setCron(cronTrigger.getCronExpression()).setTimezone(cronTrigger.getTimeZone().getID()).setClassName(jobDetail.getJobClass().getName()));
// }
// } catch (SchedulerException e) {
// // TODO add logger
// e.printStackTrace();
// }
// });
// } catch (SchedulerException e) {
// // TODO add logger
// e.printStackTrace();
// }
// });
// } catch (SchedulerException e) {
// // TODO add logger
// e.printStackTrace();
// }
// });
// return jobInfos;
// }
@Override
public List<JobInfo> listJob() throws SchedulerException {
var groupNames = scheduler.getJobGroupNames();
var jobInfos = new ArrayList<JobInfo>(groupNames.size());
groupNames.forEach(groupName -> {
try {
var jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));
jobKeys.forEach(jobKey -> {
try {
var jobName = jobKey.getName();
var jobGroup = jobKey.getGroup();
var jobDetail = scheduler.getJobDetail(jobKey);
var triggers = scheduler.getTriggersOfJob(jobKey);
triggers.forEach(trigger -> {
try {
var triggerState = scheduler.getTriggerState(trigger.getKey());
if (trigger instanceof CronTrigger) {
var cronTrigger = (CronTrigger)trigger;
jobInfos.add(new JobInfo().setName(jobName).setGroup(jobGroup).setState(triggerState.name()).setCron(cronTrigger.getCronExpression()).setTimeZone(cronTrigger.getTimeZone().getID()).setClassName(jobDetail.getJobClass().getName()));
}
} catch (SchedulerException e) {
// TODO add logger
e.printStackTrace();
}
});
} catch (SchedulerException e) {
// TODO add logger
e.printStackTrace();
}
});
} catch (SchedulerException e) {
// TODO add logger
e.printStackTrace();
}
});
return jobInfos;
}


public QuartzServiceImpl(Scheduler scheduler) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ secret:
key: damingerdai

logger:
level: info
level: debug

springdoc:
packagesToScan: org.daming.hoteler.api.web
Expand Down

0 comments on commit cb48a0d

Please sign in to comment.