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());
|
}
|
}
|
}
|