fix:设备管理-任务管理-新增corn表达式不能小于一小时

hhk
HuangHuiKang 9 hours ago
parent 23bb0016ba
commit 1e060796a0

@ -52,6 +52,12 @@
<artifactId>yudao-spring-boot-starter-mybatis</artifactId>
</dependency>
<dependency>
<groupId>com.cronutils</groupId>
<artifactId>cron-utils</artifactId>
<version>9.2.0</version>
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>

@ -143,6 +143,8 @@ public interface ErrorCodeConstants {
ErrorCode SUBJECT_EXISTS = new ErrorCode(1002000010, "项目编码已存在");
ErrorCode TASK_MANAGEMENT_NOT_EXISTS = new ErrorCode(1002000011, "设备类型不存在");
ErrorCode TASK_CORN_NOT_EXISTS = new ErrorCode(1002000011, "设备corn表达式为空");
ErrorCode TASK_CORN_NOT_LE_HOUR = new ErrorCode(1002000011, "corn表达式不能小于一小时");
ErrorCode TICKET_MANAGEMENT_NOT_EXISTS = new ErrorCode(1002000012, "工单管理不存在");
ErrorCode TICKET_RESULTS_NOT_EXISTS = new ErrorCode(1002000013, "工单检验结果不存在");
ErrorCode TICKET_RESULTS_ID_NOT_NULL = new ErrorCode(1002000014, "工单检验结果Id不存在");

@ -16,6 +16,11 @@ import cn.iocoder.yudao.module.mes.dal.mysql.ticketmanagement.TicketManagementMa
import cn.iocoder.yudao.module.mes.dal.mysql.ticketresults.TicketResultsMapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cronutils.model.Cron;
import com.cronutils.model.CronType;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -23,6 +28,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.*;
import java.util.stream.Collectors;
@ -73,6 +80,12 @@ public class TaskManagementServiceImpl implements TaskManagementService {
@Override
public Long createTaskManagement(TaskManagementSaveReqVO createReqVO) {
String cronExpr = createReqVO.getCronExpression();
// 校验 cron 表达式最小间隔
isCronIntervalAtLeastOneHour(cronExpr);
// 插入
TaskManagementDO taskManagement = BeanUtils.toBean(createReqVO, TaskManagementDO.class);
taskManagementMapper.insert(taskManagement);
@ -80,6 +93,35 @@ public class TaskManagementServiceImpl implements TaskManagementService {
return taskManagement.getId();
}
private void isCronIntervalAtLeastOneHour(String cronExpr) {
try {
if (StringUtils.isBlank(cronExpr)){
return;
}
CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ));
Cron cron = parser.parse(cronExpr);
cron.validate();
ExecutionTime executionTime = ExecutionTime.forCron(cron);
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime next1 = executionTime.nextExecution(now).get();
ZonedDateTime next2 = executionTime.nextExecution(next1).get();
Duration duration = Duration.between(next1, next2);
if (duration.toHours() < 1) {
throw exception(TASK_CORN_NOT_LE_HOUR);
}
} catch (Exception e) {
throw exception(TASK_CORN_NOT_LE_HOUR);
}
}
@Override
public void updateTaskManagement(TaskManagementSaveReqVO updateReqVO) {
// 校验存在

Loading…
Cancel
Save