2023-02-23 17:23:55 +08:00
|
|
|
|
package com.xkrs.straw.utils;
|
|
|
|
|
|
|
|
|
|
import com.xkrs.straw.dao.FirePointOrdinaryDao;
|
|
|
|
|
import com.xkrs.straw.dao.FirePointPreciseDao;
|
|
|
|
|
import com.xkrs.straw.model.bean.FirePointQueryResultBean;
|
|
|
|
|
import com.xkrs.straw.model.bean.VipTimeRangeBean;
|
|
|
|
|
import com.xkrs.straw.model.entity.SysUserEntity;
|
2023-02-24 10:45:27 +08:00
|
|
|
|
import com.xkrs.utils.DateTimeUtil;
|
|
|
|
|
import com.xkrs.utils.DateTimeUtils;
|
2023-02-23 17:23:55 +08:00
|
|
|
|
import com.xkrs.utils.FirePointCodeUtils;
|
|
|
|
|
import org.apache.hc.core5.util.TextUtils;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
2023-02-24 10:45:27 +08:00
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.util.ArrayList;
|
2023-02-23 17:23:55 +08:00
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
public class FirePointQueryManager {
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private FirePointOrdinaryDao firePointOrdinaryDao;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private FirePointPreciseDao firePointPreciseDao;
|
|
|
|
|
|
|
|
|
|
public FirePointQueryResultBean queryFirePointBelongToUser(SysUserEntity sysUserEntity, String startTime, String endTime, String satelliteType, String landType) {
|
|
|
|
|
|
2023-02-24 10:45:27 +08:00
|
|
|
|
String mNoRedundantUserCode = null;
|
|
|
|
|
final List<VipTimeRangeBean.VipTimeRangeItemBean> mVipTimeRangeItemList = new ArrayList<>();
|
2023-02-23 17:23:55 +08:00
|
|
|
|
try {
|
|
|
|
|
//获取用户注册的区划编码
|
|
|
|
|
String userCode = sysUserEntity.getCountyCode();
|
|
|
|
|
//如果用户注册的区划编码是空,就返回失败
|
|
|
|
|
if (TextUtils.isEmpty(userCode)) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User CountyCode Error 1, userCode = " + userCode, null);
|
|
|
|
|
}
|
|
|
|
|
//对用户区划编码进行格式化,获得没有冗余数据的区划编码
|
|
|
|
|
String noRedundantUserCode = FirePointCodeUtils.getFormatCutCode(userCode);
|
|
|
|
|
//如果格式化后的用户区划编码是空,就返回失败
|
|
|
|
|
if (TextUtils.isEmpty(noRedundantUserCode)) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User CountyCode Error 2, userCode = " + userCode + ", noRedundantUserCode = " + noRedundantUserCode, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取用户的VIP时间范围
|
|
|
|
|
String vipTimeRangeJson = sysUserEntity.getVipTimeRangeJson();
|
|
|
|
|
//如果用户的VIP时间范围数据是空,就返回失败
|
|
|
|
|
if (TextUtils.isEmpty(vipTimeRangeJson)) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User VipTimeRangeJson Error 1, vipTimeRangeJson = " + vipTimeRangeJson, null);
|
|
|
|
|
}
|
|
|
|
|
//反序列化用户的VIP时间范围,得到对象
|
|
|
|
|
VipTimeRangeBean vipTimeRangeBean = JsonUtils.deserialize(vipTimeRangeJson, VipTimeRangeBean.class);
|
|
|
|
|
//用户注册时有初始VIP时间范围,反序列化失败或无数据,说明该用户的数据发生了异常,返回失败
|
|
|
|
|
if (vipTimeRangeBean == null || vipTimeRangeBean.getList() == null || vipTimeRangeBean.getList().size() == 0) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User VipTimeRangeJson Error 2, 已保存的VIP时间范围反序列化失败, vipTimeRangeJson = " + vipTimeRangeJson, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//得到由<开始时间 + 结束时间>组成的集合
|
|
|
|
|
List<VipTimeRangeBean.VipTimeRangeItemBean> vipTimeRangeItemList = vipTimeRangeBean.getList();
|
2023-02-24 10:45:27 +08:00
|
|
|
|
for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItemA : vipTimeRangeItemList) {
|
|
|
|
|
//校验用户VIP开始时间合法性
|
|
|
|
|
if (!DateTimeUtil.isValidDateTime(vipTimeRangeItemA.getStartTime())) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User VIP 开始时间格式不合法1, StartTime = " + vipTimeRangeItemA.getStartTime(), null);
|
|
|
|
|
}
|
|
|
|
|
//校验用户VIP结束时间合法性
|
|
|
|
|
if (!DateTimeUtil.isValidDateTime(vipTimeRangeItemA.getEndTime())) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User VIP 结束时间格式不合法2, EndTime = " + vipTimeRangeItemA.getEndTime(), null);
|
|
|
|
|
}
|
|
|
|
|
LocalDateTime userStartLocalDateTimeA = LocalDateTime.parse(vipTimeRangeItemA.getStartTime(), DateTimeUtils.DATE_TIME_FORMATTER_1);
|
|
|
|
|
LocalDateTime userEndLocalDateTimeA = LocalDateTime.parse(vipTimeRangeItemA.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1);
|
|
|
|
|
for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItemB : vipTimeRangeItemList) {
|
|
|
|
|
if (vipTimeRangeItemA != vipTimeRangeItemB) {
|
|
|
|
|
//校验用户VIP开始时间合法性
|
|
|
|
|
if (!DateTimeUtil.isValidDateTime(vipTimeRangeItemB.getStartTime())) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User VIP 开始时间格式不合法3, StartTime = " + vipTimeRangeItemB.getStartTime(), null);
|
|
|
|
|
}
|
|
|
|
|
//校验用户VIP结束时间合法性
|
|
|
|
|
if (!DateTimeUtil.isValidDateTime(vipTimeRangeItemB.getEndTime())) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User VIP 结束时间格式不合法4, EndTime = " + vipTimeRangeItemB.getEndTime(), null);
|
|
|
|
|
}
|
|
|
|
|
LocalDateTime userStartLocalDateTimeB = LocalDateTime.parse(vipTimeRangeItemB.getStartTime(), DateTimeUtils.DATE_TIME_FORMATTER_1);
|
|
|
|
|
LocalDateTime userEndLocalDateTimeB = LocalDateTime.parse(vipTimeRangeItemB.getEndTime(), DateTimeUtils.DATE_TIME_FORMATTER_1);
|
|
|
|
|
//校验用户VIP开始结束时间是否存在交叉现象
|
|
|
|
|
if (userStartLocalDateTimeB.isBefore(userStartLocalDateTimeA) && userEndLocalDateTimeB.isAfter(userStartLocalDateTimeA)) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User VIP 开始结束时间格式不合法5, 存在交叉现象", null);
|
|
|
|
|
}
|
|
|
|
|
if (userStartLocalDateTimeB.isBefore(userEndLocalDateTimeA) && userEndLocalDateTimeB.isAfter(userEndLocalDateTimeA)) {
|
|
|
|
|
return new FirePointQueryResultBean(false, "User VIP 开始结束时间格式不合法6, 存在交叉现象", null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
mNoRedundantUserCode = noRedundantUserCode;
|
|
|
|
|
mVipTimeRangeItemList.addAll(vipTimeRangeItemList);
|
2023-02-23 17:23:55 +08:00
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
return new FirePointQueryResultBean(false, e.getMessage(), null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|