package com.nanjing.water.service.quartz; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.nanjing.water.common.ConstantFactory; import com.nanjing.water.common.ExecutedResult; import com.nanjing.water.common.util.ListUtil; import com.nanjing.water.common.util.LocalDateTimeUtil; import com.nanjing.water.common.util.NumericUtil; import com.nanjing.water.common.util.StringUtil; import com.nanjing.water.repository.impl.MonitorVideoStreamingMapperImpl; import com.nanjing.water.repository.impl.QuartzTaskErrorMapperImpl; import com.nanjing.water.repository.impl.QuartzTaskRecordMapperImpl; import com.nanjing.water.repository.po.MonitorVideoStreamingPO; import com.nanjing.water.service.MonitorVideoStreamingService; import com.nanjing.water.service.WaterFacilityParameterService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.lang.reflect.Method; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; @Service public class QuartzExecutor { private static Logger logger = LoggerFactory.getLogger(QuartzExecutor.class); @Autowired private QuartzTaskRecordMapperImpl taskRecordsDao; @Autowired private QuartzTaskErrorMapperImpl taskErrorsDao; @Autowired private WaterFacilityParameterService waterFacilityParameterService; @Autowired private MonitorVideoStreamingService streamingService; @Autowired private MonitorVideoStreamingMapperImpl streamingMapper; /** * 执行job * @param executorName 执行器名称(方法名) * @param jobParameter 执行参数 */ public ExecutedResult execute(String executorName, String jobParameter) { try { // 根据执行器key,查找执行器的方法(入参:String jobParameter,返参:ExecutedResult) Method method = QuartzExecutor.class.getMethod(executorName, String.class); return (ExecutedResult)method.invoke(this, jobParameter); } catch (Exception e) { return ExecutedResult.failed(e.toString()); } } /*** * job执行器-查询最新启泵数据 * @param jobParameter 执行参数 */ public ExecutedResult getNewDataPump(String jobParameter) { try { waterFacilityParameterService.getNewDataPump(); return ExecutedResult.success(); } catch (Exception e) { return ExecutedResult.failed(e.toString()); } } /*** * job执行器-定时关闭直播流 */ public ExecutedResult stopVideo(String jobParameter) { try { //查询正在直播的列表 List list = streamingMapper.list4WaitingStop(); if (ListUtil.isNotNullOrEmpty(list)) { for (MonitorVideoStreamingPO po : list) { ExecutedResult stop = streamingService.stop(po.getDeviceId(), po.getChannelId(), "无人观看,主动断开"); if (stop.isFailed() || Objects.isNull(stop.getData())) { ExecutedResult.failed("停止点播定时任务调用接口失败!"); } } } return ExecutedResult.success(); } catch (Exception e) { return ExecutedResult.failed(e.toString()); } } /*** * job执行器-清理任务调度日志 * @param jobParameter 执行参数 */ public ExecutedResult clearQuartzLog(String jobParameter) { try { int keepDays = ConstantFactory.NUM15; if (StringUtil.isNotNullOrEmpty(jobParameter)) { JsonElement element = new JsonParser().parse(jobParameter); if (Objects.nonNull(element) && !element.isJsonNull()) { JsonObject data = element.getAsJsonObject(); if (data.has("keepDays") && !data.get("keepDays").isJsonNull()) { keepDays = NumericUtil.tryParseInt(data.get("keepDays").getAsString(), ConstantFactory.NUM15); } } } LocalDateTime today = LocalDateTimeUtil.todayFirst(); LocalDateTime limitDate = LocalDateTimeUtil.dateTimeAddDay(today, -1L * keepDays); taskRecordsDao.clear4DateTime(LocalDateTimeUtil.getTimeStamp(limitDate).getTime()); taskErrorsDao.clear4DateTime(LocalDateTimeUtil.getTimeStamp(limitDate).getTime()); return ExecutedResult.success(); } catch (Exception e) { return ExecutedResult.failed(e.toString()); } } }