111 lines
6.4 KiB
Java
111 lines
6.4 KiB
Java
|
package com.xkrs.straw.utils;
|
|||
|
|
|||
|
import com.xkrs.straw.model.bean.FirePointChannelConfigBean;
|
|||
|
import com.xkrs.straw.model.entity.FirePointChannelConfigEntity;
|
|||
|
import com.xkrs.straw.service.impl.DispatchFirePointServiceImpl;
|
|||
|
import com.xkrs.utils.DateTimeUtils;
|
|||
|
import org.apache.hc.core5.util.TextUtils;
|
|||
|
import org.slf4j.Logger;
|
|||
|
import org.slf4j.LoggerFactory;
|
|||
|
|
|||
|
import java.time.LocalDateTime;
|
|||
|
import java.util.List;
|
|||
|
|
|||
|
public class DispatchFirePointUtils {
|
|||
|
|
|||
|
public static Logger log = LoggerFactory.getLogger(DispatchFirePointServiceImpl.class);
|
|||
|
|
|||
|
private DispatchFirePointUtils() {
|
|||
|
}
|
|||
|
|
|||
|
public static boolean checkIfInPreciseTimeRange(LocalDateTime satelliteLocalDateTime, List<FirePointChannelConfigEntity> firePointChannelConfigEntityList) {
|
|||
|
if (firePointChannelConfigEntityList == null || firePointChannelConfigEntityList.size() == 0) {
|
|||
|
//TODO 报错,发短信通知我
|
|||
|
log.info("系统报错:checkIfInPreciseTimeRange firePointChannelConfigEntityList == null || firePointChannelConfigEntityList.size() == 0");
|
|||
|
return true;
|
|||
|
}
|
|||
|
for (FirePointChannelConfigEntity firePointChannelConfigEntity : firePointChannelConfigEntityList) {
|
|||
|
String jsonContent = firePointChannelConfigEntity.getJsonContent();
|
|||
|
FirePointChannelConfigBean firePointChannelConfigBean = JsonUtils.deserialize(jsonContent, FirePointChannelConfigBean.class);
|
|||
|
if (FirePointChannelConfigBean.Precise.equals(firePointChannelConfigBean.getChannelName())) {
|
|||
|
List<FirePointChannelConfigBean.ChannelConfig> channelConfigList = firePointChannelConfigBean.getConfigList();
|
|||
|
if (channelConfigList == null || channelConfigList.size() == 0) {
|
|||
|
//TODO 报错,发短信通知我
|
|||
|
log.info("系统报错:checkIfInPreciseTimeRange channelConfigList == null || channelConfigList.size() == 0");
|
|||
|
return true;
|
|||
|
}
|
|||
|
for (FirePointChannelConfigBean.ChannelConfig channelConfig : channelConfigList) {
|
|||
|
//预处理开始时间
|
|||
|
String startTime = channelConfig.getStartTime();//获取精准火点渠道的开始时间
|
|||
|
boolean needCheckStartTime = !TextUtils.isEmpty(startTime);
|
|||
|
LocalDateTime thisYearStartTime = null;
|
|||
|
if (needCheckStartTime) {
|
|||
|
thisYearStartTime = obtainLocalDateTimeThisYear(startTime);
|
|||
|
needCheckStartTime = thisYearStartTime != null;
|
|||
|
}
|
|||
|
//预处理结束时间
|
|||
|
String endTime = channelConfig.getEndTime();//获取精准火点渠道的结束时间
|
|||
|
boolean needCheckEndTime = !TextUtils.isEmpty(endTime);
|
|||
|
LocalDateTime thisYearEndTime = null;
|
|||
|
if (needCheckEndTime) {
|
|||
|
thisYearEndTime = obtainLocalDateTimeThisYear(endTime);
|
|||
|
needCheckEndTime = thisYearEndTime != null;
|
|||
|
}
|
|||
|
//排列组合4种情况
|
|||
|
if (needCheckStartTime) {
|
|||
|
if (needCheckEndTime) {
|
|||
|
//开始时间、结束时间都需要比较
|
|||
|
if (satelliteLocalDateTime.isBefore(thisYearStartTime) || thisYearEndTime.isBefore(satelliteLocalDateTime)) {
|
|||
|
String time0 = DateTimeUtils.localDateTimeToString(satelliteLocalDateTime);
|
|||
|
String time1 = DateTimeUtils.localDateTimeToString(thisYearStartTime);
|
|||
|
String time2 = DateTimeUtils.localDateTimeToString(thisYearEndTime);
|
|||
|
log.info("开始时间、结束时间都需要比较,比较结果:不属于精准时间范围内,详情:火点时间=" + time0 + ",开始时间=" + time1 + ",结束时间=" + time2);
|
|||
|
return false;
|
|||
|
}
|
|||
|
} else {
|
|||
|
//开始时间需要比较,结束时间不需要比较
|
|||
|
if (satelliteLocalDateTime.isBefore(thisYearStartTime)) {
|
|||
|
String time0 = DateTimeUtils.localDateTimeToString(satelliteLocalDateTime);
|
|||
|
String time1 = DateTimeUtils.localDateTimeToString(thisYearStartTime);
|
|||
|
log.info("开始时间需要比较,结束时间不需要比较,比较结果:不属于精准时间范围内,详情:火点时间=" + time0 + ",开始时间=" + time1);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
} else {
|
|||
|
if (needCheckEndTime) {
|
|||
|
//开始时间不需要比较,结束时间需要比较
|
|||
|
if (thisYearEndTime.isBefore(satelliteLocalDateTime)) {
|
|||
|
String time0 = DateTimeUtils.localDateTimeToString(satelliteLocalDateTime);
|
|||
|
String time2 = DateTimeUtils.localDateTimeToString(thisYearEndTime);
|
|||
|
log.info("开始时间不需要比较,结束时间需要比较,比较结果:不属于精准时间范围内,详情:火点时间=" + time0 + ",结束时间=" + time2);
|
|||
|
return false;
|
|||
|
}
|
|||
|
} else {
|
|||
|
//开始时间、结束时间都不需要比较
|
|||
|
log.info("开始时间、结束时间都不需要比较,比较结果:属于精准时间范围内");
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
//没有因为遇到不符合条件的情况提前退出,就认为在精准渠道配置的时间范围之内
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @param formattedTime 2022-01-01 00:00:00
|
|||
|
*/
|
|||
|
private static LocalDateTime obtainLocalDateTimeThisYear(String formattedTime) {
|
|||
|
try {
|
|||
|
LocalDateTime localDateTime = LocalDateTime.parse(formattedTime, DateTimeUtils.DATE_TIME_FORMATTER_1);
|
|||
|
int dYear = LocalDateTime.now().getYear() - localDateTime.getYear();
|
|||
|
return localDateTime.plusYears(dYear);
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
}
|