From e16a34bc3935d04dbd1502ab9d3e316b60987c1e Mon Sep 17 00:00:00 2001 From: anthonywj Date: Fri, 25 Aug 2023 09:25:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A1=E6=A3=80=E8=AE=A1=E5=88=92=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E8=A1=A5=E5=85=85=EF=BC=88=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/dao/inv/DeviceInspectPlanDao.java | 5 +- .../entity/inv/DeviceInspectPlanEntity.java | 5 + .../service/inv/DeviceInspectPlanService.java | 5 +- .../impl/DeviceInspectPlanServiceImpl.java | 14 +- .../com/glxp/api/task/DevicePlanTask.java | 122 ++++++++++++++++++ src/main/java/com/glxp/api/util/IntUtil.java | 11 ++ .../basic/BasicProductCategoryMapper.xml | 2 +- 7 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/glxp/api/task/DevicePlanTask.java diff --git a/src/main/java/com/glxp/api/dao/inv/DeviceInspectPlanDao.java b/src/main/java/com/glxp/api/dao/inv/DeviceInspectPlanDao.java index 7d81dd0a8..a95d366cb 100644 --- a/src/main/java/com/glxp/api/dao/inv/DeviceInspectPlanDao.java +++ b/src/main/java/com/glxp/api/dao/inv/DeviceInspectPlanDao.java @@ -1,6 +1,7 @@ package com.glxp.api.dao.inv; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.glxp.api.dao.BaseMapperPlus; import com.glxp.api.entity.inv.DeviceInspectPlanEntity; import com.glxp.api.req.inv.FilterDeviceInspectPlanRequest; import com.glxp.api.res.inv.DeviceInspectPlanResponse; @@ -11,7 +12,7 @@ import java.util.List; /** * 科室设备巡检计划Dao */ -public interface DeviceInspectPlanDao extends BaseMapper { +public interface DeviceInspectPlanDao extends BaseMapperPlus { /** * 根据单号查询巡检计划 @@ -28,4 +29,4 @@ public interface DeviceInspectPlanDao extends BaseMapper filterList(FilterDeviceInspectPlanRequest filterDeviceInspectPlanRequest); -} \ No newline at end of file +} diff --git a/src/main/java/com/glxp/api/entity/inv/DeviceInspectPlanEntity.java b/src/main/java/com/glxp/api/entity/inv/DeviceInspectPlanEntity.java index e0e6dbe85..93fd2d4c4 100644 --- a/src/main/java/com/glxp/api/entity/inv/DeviceInspectPlanEntity.java +++ b/src/main/java/com/glxp/api/entity/inv/DeviceInspectPlanEntity.java @@ -126,4 +126,9 @@ public class DeviceInspectPlanEntity { private Date nextTime; + /** + * 使用频率 + */ + private Integer useFrequency; + } diff --git a/src/main/java/com/glxp/api/service/inv/DeviceInspectPlanService.java b/src/main/java/com/glxp/api/service/inv/DeviceInspectPlanService.java index 26ddf372c..3dfe99abf 100644 --- a/src/main/java/com/glxp/api/service/inv/DeviceInspectPlanService.java +++ b/src/main/java/com/glxp/api/service/inv/DeviceInspectPlanService.java @@ -53,7 +53,7 @@ public interface DeviceInspectPlanService { * @param status * @return */ - BaseResponse updateStatus(String orderId, Integer status, String inspectUser, Date expectedTime,Integer planStatus); + BaseResponse updateStatus(String orderId, Integer status, String inspectUser, Date expectedTime, Integer planStatus); /** * 删除巡检计划 @@ -63,4 +63,7 @@ public interface DeviceInspectPlanService { */ BaseResponse deletePlan(String id); + + void genTaskDev(DeviceInspectPlanEntity deviceInspectPlanEntity); + } diff --git a/src/main/java/com/glxp/api/service/inv/impl/DeviceInspectPlanServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/DeviceInspectPlanServiceImpl.java index 72d3b3ba0..15614c9e0 100644 --- a/src/main/java/com/glxp/api/service/inv/impl/DeviceInspectPlanServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inv/impl/DeviceInspectPlanServiceImpl.java @@ -107,7 +107,7 @@ public class DeviceInspectPlanServiceImpl implements DeviceInspectPlanService { } @Override - public BaseResponse updateStatus(String orderId, Integer status, String inspectUser,Date expectedTime,Integer planStatus) { + public BaseResponse updateStatus(String orderId, Integer status, String inspectUser, Date expectedTime, Integer planStatus) { if (StrUtil.isBlank(orderId) || null == status) { return ResultVOUtils.paramVerifyFail(); } @@ -122,7 +122,7 @@ public class DeviceInspectPlanServiceImpl implements DeviceInspectPlanService { // //审核通过,生成任务单 // deviceInspectOrderService.addByPlanOrderId(orderId); //生成计划主表 - DeviceInspectTaskEntity deviceInspectTaskEntity = getDeviceInspectTaskEntity(orderId,expectedTime); + DeviceInspectTaskEntity deviceInspectTaskEntity = getDeviceInspectTaskEntity(orderId, expectedTime); //生成计划详情主表 getDeviceInspectTaskDetailEntity(orderId, deviceInspectTaskEntity.getOrderId()); } @@ -139,8 +139,16 @@ public class DeviceInspectPlanServiceImpl implements DeviceInspectPlanService { return ResultVOUtils.success(); } + @Override + public void genTaskDev(DeviceInspectPlanEntity deviceInspectPlanEntity) { + //生成计划主表 + DeviceInspectTaskEntity deviceInspectTaskEntity = getDeviceInspectTaskEntity(deviceInspectPlanEntity.getOrderId(), null); + //生成计划详情主表 + getDeviceInspectTaskDetailEntity(deviceInspectPlanEntity.getOrderId(), deviceInspectTaskEntity.getOrderId()); + } + //组装任务实体 - public DeviceInspectTaskEntity getDeviceInspectTaskEntity(String orderId,Date expectedTime) { + public DeviceInspectTaskEntity getDeviceInspectTaskEntity(String orderId, Date expectedTime) { //查询计划单 DeviceInspectPlanEntity deviceInspectPlanEntity = deviceInspectPlanDao.selectByOrderId(orderId); if (deviceInspectPlanEntity == null) { diff --git a/src/main/java/com/glxp/api/task/DevicePlanTask.java b/src/main/java/com/glxp/api/task/DevicePlanTask.java new file mode 100644 index 000000000..12520b0b9 --- /dev/null +++ b/src/main/java/com/glxp/api/task/DevicePlanTask.java @@ -0,0 +1,122 @@ +package com.glxp.api.task; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.glxp.api.dao.inv.DeviceInspectPlanDao; +import com.glxp.api.dao.schedule.ScheduledDao; +import com.glxp.api.entity.inv.DeviceInspectPlanEntity; +import com.glxp.api.entity.system.ScheduledEntity; +import com.glxp.api.req.system.ScheduledRequest; +import com.glxp.api.service.inv.DeviceInspectPlanService; +import com.glxp.api.util.IntUtil; +import com.glxp.api.util.RedisUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@EnableScheduling +public class DevicePlanTask implements SchedulingConfigurer { + + + @Resource + private ScheduledDao scheduledDao; + @Resource + RedisUtil redisUtil; + @Resource + private DeviceInspectPlanService deviceInspectPlanService; + + @Resource + private DeviceInspectPlanDao deviceInspectPlanDao; + + @Override + public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { + scheduledTaskRegistrar.addTriggerTask(() -> process(), + triggerContext -> { + ScheduledRequest scheduledRequest = new ScheduledRequest(); + scheduledRequest.setCronName("devPlanTask"); + ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); + if (scheduledEntity == null) + return null; + String cron = scheduledEntity.getCron(); + if (cron.isEmpty()) { + log.error("cron is null"); + } + return new CronTrigger(cron).nextExecutionTime(triggerContext); + }); + } + + private void process() { + + //查询已运行巡检计划 + List deviceInspectTaskEntities = + deviceInspectPlanDao.selectList(new QueryWrapper().eq("planStatus", 2)); + + if (CollUtil.isNotEmpty(deviceInspectTaskEntities)) { + for (DeviceInspectPlanEntity deviceInspectPlanEntity : deviceInspectTaskEntities) { + //计划已结束 + if (deviceInspectPlanEntity.getEndTime().compareTo(new Date()) < 0) { + deviceInspectPlanEntity.setPlanStatus(3); + deviceInspectPlanDao.updateById(deviceInspectPlanEntity); + continue; + } + if (deviceInspectPlanEntity.getLastTime() == null) { + genTask(deviceInspectPlanEntity); + } else if (StrUtil.isNotEmpty(deviceInspectPlanEntity.getFrequency())) { + long time = 0; + //按时间频率生成任务 + switch (deviceInspectPlanEntity.getFrequencyUnit()) { + case 1://年 + time = IntUtil.value(deviceInspectPlanEntity.getFrequency()) * 365 * 24 * 60 * 60 * 1000 * 1l; + break; + case 2://月 + time = IntUtil.value(deviceInspectPlanEntity.getFrequency()) * 30 * 24 * 60 * 60 * 1000 * 1l; + break; + case 3://日 + time = IntUtil.value(deviceInspectPlanEntity.getFrequency()) * 24 * 60 * 60 * 1000 * 1l; + break; + case 4://小时 + time = IntUtil.value(deviceInspectPlanEntity.getFrequency()) * 60 * 60 * 1000 * 1l; + break; + case 5://分 + time = IntUtil.value(deviceInspectPlanEntity.getFrequency()) * 60 * 1000 * 1l; + break; + case 6://秒 + time = IntUtil.value(deviceInspectPlanEntity.getFrequency()) * 1000 * 1l; + break; + default: + break; + } + long interval = new Date().getTime() - deviceInspectPlanEntity.getLastTime().getTime(); + if (interval > time) { + genTask(deviceInspectPlanEntity); + } + + } else if (deviceInspectPlanEntity.getUseFrequency() != null) { + //按使用频率生成任务 + + } + + } + } + + + } + + /** + * 生成任务 + */ + public void genTask(DeviceInspectPlanEntity deviceInspectPlanEntity) { + deviceInspectPlanService.genTaskDev(deviceInspectPlanEntity); + } + +} diff --git a/src/main/java/com/glxp/api/util/IntUtil.java b/src/main/java/com/glxp/api/util/IntUtil.java index 9e8804887..397b316c2 100644 --- a/src/main/java/com/glxp/api/util/IntUtil.java +++ b/src/main/java/com/glxp/api/util/IntUtil.java @@ -1,5 +1,7 @@ package com.glxp.api.util; +import cn.hutool.core.util.StrUtil; + public class IntUtil { public static int value(Integer value) { @@ -23,4 +25,13 @@ public class IntUtil { else return value; } + + public static int value(String value) { + if (StrUtil.isEmpty(value)) + return 0; + else + return Integer.parseInt(value); + } + + } diff --git a/src/main/resources/mybatis/mapper/basic/BasicProductCategoryMapper.xml b/src/main/resources/mybatis/mapper/basic/BasicProductCategoryMapper.xml index 027fab02b..ceca264d7 100644 --- a/src/main/resources/mybatis/mapper/basic/BasicProductCategoryMapper.xml +++ b/src/main/resources/mybatis/mapper/basic/BasicProductCategoryMapper.xml @@ -3,7 +3,7 @@ - +