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<String> execute(String executorName, String jobParameter) { try { // æ ¹æ®æ‰§è¡Œå™¨key,查找执行器的方法(入å‚:String jobParameter,返å‚:ExecutedResult<String>) Method method = QuartzExecutor.class.getMethod(executorName, String.class); return (ExecutedResult<String>)method.invoke(this, jobParameter); } catch (Exception e) { return ExecutedResult.failed(e.toString()); } } /*** * job执行器-æŸ¥è¯¢æœ€æ–°å¯æ³µæ•°æ® * @param jobParameter æ‰§è¡Œå‚æ•° */ public ExecutedResult<String> getNewDataPump(String jobParameter) { try { waterFacilityParameterService.getNewDataPump(); return ExecutedResult.success(); } catch (Exception e) { return ExecutedResult.failed(e.toString()); } } /*** * job执行器-定时关é—ç›´æ’æµ */ public ExecutedResult<String> stopVideo(String jobParameter) { try { //查询æ£åœ¨ç›´æ’的列表 List<MonitorVideoStreamingPO> list = streamingMapper.list4WaitingStop(); if (ListUtil.isNotNullOrEmpty(list)) { for (MonitorVideoStreamingPO po : list) { ExecutedResult<MonitorVideoStreamingPO> 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<String> 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()); } } }