src/main/java/com/ruoyi/inspectiontask/mapper/TimingTaskMapper.java
@@ -2,10 +2,16 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.inspectiontask.pojo.TimingTask; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * @author :yys * @date : 2025/9/19 10:47 */ @Mapper public interface TimingTaskMapper extends BaseMapper<TimingTask> { TimingTask getTaskById(@Param("id") Long id); } src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
@@ -26,8 +26,11 @@ @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "å·¡æ£ä»»å¡åç§°") @ApiModelProperty(value = "设å¤åç§°") private String taskName; @ApiModelProperty(value = "设å¤id") private Integer taskId; @ApiModelProperty(value = "å·¡æ£äººID") private String inspectorId; @@ -76,6 +79,6 @@ @ApiModelProperty(value = "ç§æ·") @TableField(fill = FieldFill.INSERT) private Integer tenantId; private Long tenantId; } src/main/java/com/ruoyi/inspectiontask/pojo/QrCode.java
@@ -37,7 +37,7 @@ @ApiModelProperty(value = "ç§æ·IDï¼ç¨äºå¤ç§æ·é离") @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT) private Integer tenantId; private Long tenantId; @ApiModelProperty(value = "软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤") private Integer deleted; src/main/java/com/ruoyi/inspectiontask/pojo/QrCodeScanRecord.java
@@ -32,6 +32,12 @@ @ApiModelProperty(value = "æ«ç äººç¨æ·ID") private Long scannerId; @ApiModelProperty(value = "设å¤åç§°") private String deviceName; @ApiModelProperty(value = "设å¤id") private Integer deviceId; @ApiModelProperty(value = "å®é æ«ç æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -30,8 +30,11 @@ @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "ä»»å¡åç§°") @ApiModelProperty(value = "设å¤åç§°") private String taskName; @ApiModelProperty(value = "设å¤id") private Integer taskId; @ApiModelProperty(value = "å·¡æ£äºº") private String inspectorIds; @@ -92,6 +95,6 @@ @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT) private Integer tenantId; private Long tenantId; } src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,50 @@ package com.ruoyi.inspectiontask.service.impl; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.scheduling.quartz.SpringBeanJobFactory; @Configuration public class QuartzConfig { @Autowired private ApplicationContext applicationContext; @Bean public SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean(); // é ç½®SpringBeanJobFactoryï¼ç¨äºæ¯æJobä¸çä¾èµæ³¨å ¥ AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); jobFactory.setApplicationContext(applicationContext); schedulerFactory.setJobFactory(jobFactory); // å ¶ä»é ç½®... return schedulerFactory; } // èªå®ä¹JobFactoryï¼æ¯æèªå¨æ³¨å ¥ public static class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private transient AutowireCapableBeanFactory beanFactory; @Override public void setApplicationContext(ApplicationContext applicationContext) { this.beanFactory = applicationContext.getAutowireCapableBeanFactory(); } @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { Object jobInstance = super.createJobInstance(bundle); // å°Jobå®ä¾äº¤ç»Spring容å¨ç®¡çï¼ä½¿å ¶è½å¤è¿è¡ä¾èµæ³¨å ¥ beanFactory.autowireBean(jobInstance); return jobInstance; } } } src/main/java/com/ruoyi/inspectiontask/service/impl/SpringContextHolder.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.inspectiontask.service.impl; import org.quartz.JobExecutionContext; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class SpringContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext context) { applicationContext = context; } public static <T> T getBean(Class<T> clazz) { return applicationContext.getBean(clazz); } } src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -1,42 +1,97 @@ package com.ruoyi.inspectiontask.service.impl; import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper; import com.ruoyi.inspectiontask.mapper.TimingTaskMapper; import com.ruoyi.inspectiontask.pojo.InspectionTask; import com.ruoyi.inspectiontask.pojo.TimingTask; import com.ruoyi.inspectiontask.service.TimingTaskService; import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.sql.DataSource; import java.time.DayOfWeek; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.YearMonth; import java.util.HashSet; import java.util.List; import java.util.Set; @Component @DisallowConcurrentExecution // ç¦æ¢å¹¶åæ§è¡åä¸ä¸ªJob public class TimingTaskJob implements Job { @Autowired private TimingTaskService timingTaskService; private TimingTaskMapper timingTaskMapper; @Autowired private TimingTaskService timingTaskService; @Autowired private InspectionTaskMapper inspectionTaskMapper; @Autowired private JdbcTemplate jdbcTemplate; @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); // ä¿®å¤ç±»å转æ¢éè¯¯ï¼æ£ç¡®è·åtaskId Long taskId = jobDataMap.getLong("taskId"); try { // 1. è·å宿¶ä»»å¡è¯¦æ TimingTask timingTask = timingTaskService.getById(taskId); if (timingTask == null || !timingTask.isActive()) { return; // 3. å°è¯æ¥è¯¢ä½ çä¸å¡æ°æ® // éè¿JDBCæ¨¡æ¿æ¥è¯¢å®æ¶ä»»å¡ä¿¡æ¯ï¼ä½¿ç¨åæ°åæ¥è¯¢é²æ¢SQLæ³¨å ¥ String yourSql = "SELECT * FROM timing_task where id = ?"; List<TimingTask> tasks = jdbcTemplate.query( yourSql, new BeanPropertyRowMapper<>(TimingTask.class), taskId ); TimingTask timingTask = tasks.isEmpty() ? null : tasks.get(0); if (timingTask == null) { throw new JobExecutionException("æ¾ä¸å°å®æ¶ä»»å¡: " + taskId); } // if (!timingTask.isActive()) { // throw new JobExecutionException("宿¶ä»»å¡å·²ç¦ç¨: " + taskId); // } // 2. å建并ä¿åå·¡æ£ä»»å¡è®°å½ - è¿å°±æ¯æ¨æä¾ç代ç åºè¯¥æ¾çä½ç½® InspectionTask inspectionTask = createInspectionTask(timingTask); inspectionTaskMapper.insert(inspectionTask); // 3. æ´æ°å®æ¶ä»»å¡çæ§è¡æ¶é´ timingTaskService.updateTaskExecutionTime(taskId); if (!tasks.isEmpty()) { TimingTask task = tasks.get(0); // æ´æ°æåæ§è¡æ¶é´ä¸ºå½åæ¶é´ LocalDateTime lastExecutionTime = LocalDateTime.now(); // 计ç®ä¸æ¬¡æ§è¡æ¶é´ LocalDateTime nextExecutionTime = calculateNextExecutionTime( task.getFrequencyType(), task.getFrequencyDetail(), lastExecutionTime ); // æ§è¡æ´æ°æä½ String updateSql = "UPDATE timing_task " + "SET last_execution_time = ?, next_execution_time = ? " + "WHERE id = ?"; jdbcTemplate.update( updateSql, lastExecutionTime, nextExecutionTime, taskId ); } // timingTaskService.updateTaskExecutionTime(taskId); // 4. è®°å½æ§è¡æ¥å¿ // timingTaskService.recordExecutionLog(taskId, true, "任塿§è¡æåï¼çæå·¡æ£ä»»å¡ID: " + inspectionTask.getId()); @@ -53,13 +108,152 @@ // å¤å¶åºæ¬å±æ§ inspectionTask.setTaskName(timingTask.getTaskName()); inspectionTask.setTaskId(timingTask.getTaskId()); inspectionTask.setInspectorId(timingTask.getInspectorIds()); inspectionTask.setInspectionLocation(timingTask.getInspectionLocation()); inspectionTask.setRemarks("èªå¨çæèªå®æ¶ä»»å¡ID: " + timingTask.getId()); inspectionTask.setRegistrantId(timingTask.getRegistrantId()); inspectionTask.setFrequencyType(timingTask.getFrequencyType()); inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail()); inspectionTask.setTenantId(timingTask.getTenantId()); return inspectionTask; } /** * 计ç®ä¸æ¬¡æ§è¡æ¶é´ */ private LocalDateTime calculateNextExecutionTime(String frequencyType, String frequencyDetail, LocalDateTime currentTime) { try { switch (frequencyType) { case "DAILY": return calculateDailyNextTime(frequencyDetail, currentTime); case "WEEKLY": return calculateWeeklyNextTime(frequencyDetail, currentTime); case "MONTHLY": return calculateMonthlyNextTime(frequencyDetail, currentTime); case "QUARTERLY": return calculateQuarterlyNextTime(frequencyDetail, currentTime); default: throw new IllegalArgumentException("䏿¯æçé¢çç±»å: " + frequencyType); } } catch (Exception e) { throw new RuntimeException("计ç®ä¸æ¬¡æ§è¡æ¶é´å¤±è´¥: " + e.getMessage(), e); } } /** * è®¡ç®æ¯æ¥ä»»å¡ç䏿¬¡æ§è¡æ¶é´ */ private LocalDateTime calculateDailyNextTime(String timeStr, LocalDateTime current) { LocalTime executionTime = LocalTime.parse(timeStr); // è§£ææ ¼å¼ "HH:mm" LocalDateTime nextTime = LocalDateTime.of(current.toLocalDate(), executionTime); // 妿ä»å¤©çæ¶é´å·²è¿ï¼å宿æå¤© return current.isBefore(nextTime) ? nextTime : nextTime.plusDays(1); } /** * è®¡ç®æ¯å¨ä»»å¡ç䏿¬¡æ§è¡æ¶é´ */ private LocalDateTime calculateWeeklyNextTime(String detail, LocalDateTime current) { String[] parts = detail.split(","); String dayOfWeekStr = parts[0]; // å¦ "MON" æ "MON|WED|FRI" LocalTime time = LocalTime.parse(parts[1]); // æ¶é´é¨å // è§£æææå (æ¯æå¤ä¸ªææ) Set<DayOfWeek> targetDays = parseDayOfWeeks(dayOfWeekStr); // ä»å½åæ¶é´å¼å§æ¾ä¸ä¸ä¸ªç¬¦åæ¡ä»¶çææå LocalDateTime nextTime = current; while (true) { nextTime = nextTime.plusDays(1); if (targetDays.contains(nextTime.getDayOfWeek())) { return LocalDateTime.of(nextTime.toLocalDate(), time); } // 鲿¢æ é循ç¯(ç论ä¸ä¸ä¼åç) if (nextTime.isAfter(current.plusYears(1))) { throw new RuntimeException("æ æ³æ¾å°ä¸æ¬¡æ§è¡æ¶é´"); } } } /** * è®¡ç®æ¯æä»»å¡ç䏿¬¡æ§è¡æ¶é´ */ private LocalDateTime calculateMonthlyNextTime(String detail, LocalDateTime current) { String[] parts = detail.split(","); int dayOfMonth = Integer.parseInt(parts[0]); LocalTime time = LocalTime.parse(parts[1]); // ä»ä¸ä¸ªæå¼å§è®¡ç® LocalDateTime nextTime = current.plusMonths(1) .withDayOfMonth(Math.min(dayOfMonth, current.plusMonths(1).toLocalDate().lengthOfMonth())) .with(time); return nextTime; } /** * è®¡ç®æ¯å£åº¦ä»»å¡ç䏿¬¡æ§è¡æ¶é´ */ private LocalDateTime calculateQuarterlyNextTime(String detail, LocalDateTime current) { String[] parts = detail.split(","); int quarterMonth = Integer.parseInt(parts[0]); // 1=第1个æï¼2=第2个æï¼3=第3个æ int dayOfMonth = Integer.parseInt(parts[1]); LocalTime time = LocalTime.parse(parts[2]); // 计ç®å½åå£åº¦ int currentQuarter = (current.getMonthValue() - 1) / 3 + 1; int currentMonthInQuarter = (current.getMonthValue() - 1) % 3 + 1; YearMonth targetYearMonth; if (currentMonthInQuarter < quarterMonth) { // æ¬å£åº¦å è¿ææ§è¡æºä¼ targetYearMonth = YearMonth.from(current) .plusMonths(quarterMonth - currentMonthInQuarter); } else { // éè¦å°ä¸ä¸ªå£åº¦ targetYearMonth = YearMonth.from(current) .plusMonths(3 - currentMonthInQuarter + quarterMonth); } // å¤çææ«æ¥æ int adjustedDay = Math.min(dayOfMonth, targetYearMonth.lengthOfMonth()); return LocalDateTime.of( targetYearMonth.getYear(), targetYearMonth.getMonthValue(), adjustedDay, time.getHour(), time.getMinute() ); } /** * è§£æææå å符串 */ private Set<DayOfWeek> parseDayOfWeeks(String dayOfWeekStr) { Set<DayOfWeek> days = new HashSet<>(); String[] dayStrs = dayOfWeekStr.split("\\|"); for (String dayStr : dayStrs) { switch (dayStr) { case "MON": days.add(DayOfWeek.MONDAY); break; case "TUE": days.add(DayOfWeek.TUESDAY); break; case "WED": days.add(DayOfWeek.WEDNESDAY); break; case "THU": days.add(DayOfWeek.THURSDAY); break; case "FRI": days.add(DayOfWeek.FRIDAY); break; case "SAT": days.add(DayOfWeek.SATURDAY); break; case "SUN": days.add(DayOfWeek.SUNDAY); break; default: throw new IllegalArgumentException("æ æçææå : " + dayStr); } } return days; } } src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -19,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional; import java.time.*; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -76,7 +77,7 @@ // 4. æ¹éæ¥è¯¢ç¨æ·ä¿¡æ¯ Map<Long, String> userNickNameMap = new HashMap<>(); if (!userIds.isEmpty()) { List<SysUser> users = sysUserMapper.selectUserByIds((List<Long>) userIds); List<SysUser> users = sysUserMapper.selectUserByIds((new ArrayList<>(userIds))); users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName())); } @@ -173,12 +174,107 @@ return now.isBefore(todayExecution) ? todayExecution : todayExecution.plusDays(1); } // æ å°ææç®åä¸DayOfWeek private static final Map<String, DayOfWeek> WEEK_DAY_MAP = new HashMap<>(); static { WEEK_DAY_MAP.put("MON", DayOfWeek.MONDAY); WEEK_DAY_MAP.put("TUE", DayOfWeek.TUESDAY); WEEK_DAY_MAP.put("WED", DayOfWeek.WEDNESDAY); WEEK_DAY_MAP.put("THU", DayOfWeek.THURSDAY); WEEK_DAY_MAP.put("FRI", DayOfWeek.FRIDAY); WEEK_DAY_MAP.put("SAT", DayOfWeek.SATURDAY); WEEK_DAY_MAP.put("SUN", DayOfWeek.SUNDAY); } private LocalDateTime calculateWeeklyFirstExecution(String frequencyDetail) { return null; // è§£æè¾å ¥åæ° String[] parts = frequencyDetail.split(","); if (parts.length != 2) { throw new IllegalArgumentException("åæ°æ ¼å¼é误ï¼åºä¸º'MON,13:43'æ ¼å¼"); } String weekDayStr = parts[0].trim(); String timeStr = parts[1].trim(); // è·å对åºçææå DayOfWeek targetDay = WEEK_DAY_MAP.get(weekDayStr); if (targetDay == null) { throw new IllegalArgumentException("æ æçææç®å: " + weekDayStr); } // è§£ææ¶é´ LocalTime targetTime = LocalTime.parse(timeStr, DateTimeFormatter.ofPattern("HH:mm")); // è·åå½åæ¶é´ LocalDateTime now = LocalDateTime.now(); LocalDateTime targetDateTime = now.with(targetDay).with(targetTime); // å¦æè®¡ç®åºçæ¶é´å¨å½åæ¶é´ä¹åï¼åå ä¸å¨ if (targetDateTime.isBefore(now)) { targetDateTime = targetDateTime.plusWeeks(1); } return targetDateTime; } private LocalDateTime calculateMonthlyFirstExecution(String frequencyDetail) { return null; // è§£æè¾å ¥åæ° String[] parts = frequencyDetail.split(","); if (parts.length != 2) { throw new IllegalArgumentException("åæ°æ ¼å¼é误ï¼åºä¸º'03,17:00'æ ¼å¼"); } String dayStr = parts[0].trim(); String timeStr = parts[1].trim(); // è§£ææ¥æ int dayOfMonth; try { dayOfMonth = Integer.parseInt(dayStr); } catch (NumberFormatException e) { throw new IllegalArgumentException("æ æçæ¥ææ ¼å¼: " + dayStr, e); } // éªè¯æ¥ææææ§ï¼1-31ä¹é´ï¼ if (dayOfMonth < 1 || dayOfMonth > 31) { throw new IllegalArgumentException("æ¥æå¿ é¡»å¨1-31ä¹é´: " + dayOfMonth); } // è§£ææ¶é´ LocalTime targetTime; try { targetTime = LocalTime.parse(timeStr, DateTimeFormatter.ofPattern("HH:mm")); } catch (DateTimeException e) { throw new IllegalArgumentException("æ æçæ¶é´æ ¼å¼: " + timeStr, e); } // è·åå½åæ¶é´ LocalDateTime now = LocalDateTime.now(); LocalDateTime targetDateTime = now.withDayOfMonth(dayOfMonth).with(targetTime); // æ£æ¥æ¥ææ¯å¦è¢«èªå¨è°æ´ï¼å¦31æ¥å¨å°æä¼è¢«è°æ´ï¼ boolean isDateAdjusted = targetDateTime.getDayOfMonth() != dayOfMonth; // å¦æç®æ æ¶é´å¨å½åæ¶é´ä¹åï¼æè æ¥æè¢«ç³»ç»èªå¨è°æ´äº if (targetDateTime.isBefore(now) || isDateAdjusted) { // 计ç®ä¸ä¸ªæçæ¥æ LocalDateTime nextMonth = now.plusMonths(1); // å°è¯è®¾ç½®ä¸ä¸ªæçç®æ æ¥æ LocalDateTime nextMonthTarget = nextMonth.withDayOfMonth(dayOfMonth).with(targetTime); // 妿ä¸ä¸ªæçæ¥æä¹è¢«è°æ´äºï¼å°±ç¨ä¸ä¸ªæçæåä¸å¤© if (nextMonthTarget.getDayOfMonth() != dayOfMonth) { // æ£ç¡®è·åä¸ä¸ªæçæåä¸å¤©ï¼ä¿®å¤isLeapYearè°ç¨é®é¢ï¼ int lastDayOfMonth = nextMonth.getMonth().length( Year.of(nextMonth.getYear()).isLeap() ); nextMonthTarget = nextMonth.withDayOfMonth(lastDayOfMonth).with(targetTime); } targetDateTime = nextMonthTarget; } return targetDateTime; } private LocalDateTime calculateCustomFirstExecution(String frequencyDetail) { src/main/resources/application-hckx.yml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,219 @@ # 项ç®ç¸å ³é ç½® ruoyi: # åç§° name: RuoYi # çæ¬ version: 3.8.9 # çæå¹´ä»½ copyrightYear: 2025 # æä»¶è·¯å¾ 示ä¾ï¼ Windowsé ç½®D:/ruoyi/uploadPathï¼Linuxé ç½® /home/ruoyi/uploadPathï¼ profile: /javaWork/product-inventory-management/file # è·åipå°åå¼å ³ addressEnabled: false # éªè¯ç ç±»å math æ°åè®¡ç® char å符éªè¯ captchaType: math # å¼åç¯å¢é ç½® server: # æå¡å¨çHTTP端å£ï¼é»è®¤ä¸º8080 port: 9090 servlet: # åºç¨ç访é®è·¯å¾ context-path: / tomcat: # tomcatçURIç¼ç uri-encoding: UTF-8 # è¿æ¥æ°æ»¡åçæéæ°ï¼é»è®¤ä¸º100 accept-count: 1000 threads: # tomcatæå¤§çº¿ç¨æ°ï¼é»è®¤ä¸º200 max: 800 # Tomcatå¯å¨åå§åççº¿ç¨æ°ï¼é»è®¤å¼10 min-spare: 100 # æ¥å¿é ç½® logging: level: com.ruoyi: warn org.springframework: warn minio: endpoint: http://114.132.189.42/ port: 7019 secure: false accessKey: admin secretKey: 12345678 preview-expiry: 24 # é¢è§å°åé»è®¤24å°æ¶ default-bucket: uploadPath # ç¨æ·é ç½® user: password: # å¯ç æå¤§éè¯¯æ¬¡æ° maxRetryCount: 5 # å¯ç é宿¶é´ï¼é»è®¤10åéï¼ lockTime: 10 # Springé ç½® spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: # ä¸»åºæ°æ®æº master: url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hckx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: xd@123456.. # ä»åºæ°æ®æº slave: # 仿°æ®æºå¼å ³/é»è®¤å ³é enabled: false url: username: password: # åå§è¿æ¥æ° initialSize: 5 # æå°è¿æ¥æ± æ°é minIdle: 10 # æå¤§è¿æ¥æ± æ°é maxActive: 20 # é ç½®è·åè¿æ¥çå¾ è¶ æ¶çæ¶é´ maxWait: 60000 # é ç½®è¿æ¥è¶ æ¶æ¶é´ connectTimeout: 30000 # é ç½®ç½ç»è¶ æ¶æ¶é´ socketTimeout: 60000 # é ç½®é´éå¤ä¹ æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å ³éç空é²è¿æ¥ï¼å使¯æ¯«ç§ timeBetweenEvictionRunsMillis: 60000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§ minEvictableIdleTimeMillis: 300000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿大çåçæ¶é´ï¼å使¯æ¯«ç§ maxEvictableIdleTimeMillis: 900000 # é ç½®æ£æµè¿æ¥æ¯å¦ææ validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置ç½ååï¼ä¸å¡«åå 许ææè®¿é® allow: url-pattern: /druid/* # æ§å¶å°ç®¡çç¨æ·ååå¯ç login-username: ruoyi login-password: 123456 filter: stat: enabled: true # æ ¢SQLè®°å½ log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true # èµæºä¿¡æ¯ messages: # å½é åèµæºæä»¶è·¯å¾ basename: i18n/messages # æä»¶ä¸ä¼ servlet: multipart: # å个æä»¶å¤§å° max-file-size: 1GB # 设置æ»ä¸ä¼ çæä»¶å¤§å° max-request-size: 2GB # æå¡æ¨¡å devtools: restart: # çé¨ç½²å¼å ³ enabled: false # redis é ç½® redis: # å°å # host: 127.0.0.1 host: 192.168.1.185 # 端å£ï¼é»è®¤ä¸º6379 port: 6379 # æ°æ®åºç´¢å¼ database: 12 # å¯ç # password: root2022! password: # è¿æ¥è¶ æ¶æ¶é´ timeout: 10s lettuce: pool: # è¿æ¥æ± ä¸çæå°ç©ºé²è¿æ¥ min-idle: 0 # è¿æ¥æ± ä¸çæå¤§ç©ºé²è¿æ¥ max-idle: 8 # è¿æ¥æ± çæå¤§æ°æ®åºè¿æ¥æ° max-active: 8 # #è¿æ¥æ± æå¤§é»å¡çå¾ æ¶é´ï¼ä½¿ç¨è´å¼è¡¨ç¤ºæ²¡æéå¶ï¼ max-wait: -1ms # tokené ç½® token: # 令çèªå®ä¹æ è¯ header: Authorization # 令çå¯é¥ secret: abcdefghijklmnopqrstuvwxyz # ä»¤çæææï¼é»è®¤30åéï¼ expireTime: 450 # MyBatis Plusé ç½® mybatis-plus: # æç´¢æå®å å«å æ ¹æ®èªå·±çé¡¹ç®æ¥ typeAliasesPackage: com.ruoyi.**.pojo # é ç½®mapperçæ«æï¼æ¾å°ææçmapper.xmlæ å°æä»¶ mapperLocations: classpath*:mapper/**/*Mapper.xml # å è½½å ¨å±çé ç½®æä»¶ configLocation: classpath:mybatis/mybatis-config.xml global-config: enable-sql-runner: true db-config: id-type: auto # PageHelperå页æä»¶ pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swaggeré ç½® swagger: # æ¯å¦å¼å¯swagger enabled: true # 请æ±åç¼ pathMapping: /dev-api # 鲿¢XSSæ»å» xss: # è¿æ»¤å¼å ³ enabled: true # æé¤é¾æ¥ï¼å¤ä¸ªç¨éå·åéï¼ excludes: /system/notice # å¹é 龿¥ urlPatterns: /system/*,/monitor/*,/tool/* # 代ç çæ gen: # ä½è author: ruoyi # é»è®¤çæå è·¯å¾ system éæ¹æèªå·±ç模ååç§° å¦ system monitor tool packageName: com.ruoyi.project.system # èªå¨å»é¤è¡¨åç¼ï¼é»è®¤æ¯true autoRemovePre: false # 表åç¼ï¼çæç±»åä¸ä¼å å«è¡¨åç¼ï¼å¤ä¸ªç¨éå·åéï¼ tablePrefix: sys_ # æ¯å¦å è®¸çææä»¶è¦çå°æ¬å°ï¼èªå®ä¹è·¯å¾ï¼ï¼é»è®¤ä¸å 许 allowOverwrite: false file: temp-dir: /javaWork/product-inventory-management/file/temp/uploads upload-dir: /javaWork/product-inventory-management/file/prod/uploads src/main/resources/mapper/inspectiontask/TimingTaskMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.inspectiontask.mapper.TimingTaskMapper"> <select id="getTaskById" resultType="com.ruoyi.inspectiontask.pojo.TimingTask" useCache="false"> SELECT * FROM timing_task WHERE id = #{id} </select> </mapper>