fire_point/src/main/java/com/xkrs/service/impl/FirePointServiceImpl.java

797 lines
35 KiB
Java
Raw Normal View History

2021-07-13 10:18:08 +08:00
package com.xkrs.service.impl;
import com.xkrs.common.encapsulation.PromptMessageEnum;
import com.xkrs.common.tool.TokenUtil;
2021-07-16 10:47:24 +08:00
import com.xkrs.dao.*;
import com.xkrs.model.entity.*;
2021-07-13 10:18:08 +08:00
import com.xkrs.model.qo.FirePointQo;
import com.xkrs.model.vo.AppPhotoVo;
2021-07-16 10:47:24 +08:00
import com.xkrs.model.vo.AppTaskBodyVo;
2022-05-07 15:20:28 +08:00
import com.xkrs.model.vo.GaoDeIgGeocodeVo;
2021-07-13 10:18:08 +08:00
import com.xkrs.service.FirePointService;
2021-07-16 10:47:24 +08:00
import com.xkrs.utils.*;
2021-07-14 17:35:10 +08:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cglib.beans.BeanCopier;
import org.springframework.context.i18n.LocaleContextHolder;
2021-07-13 10:18:08 +08:00
import org.springframework.stereotype.Service;
2021-07-16 10:47:24 +08:00
import org.springframework.web.multipart.MultipartFile;
2021-07-13 10:18:08 +08:00
import javax.annotation.Resource;
import javax.transaction.Transactional;
2021-07-16 10:47:24 +08:00
import java.io.IOException;
2021-07-15 15:22:23 +08:00
import java.time.LocalDate;
2021-07-13 10:18:08 +08:00
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject;
2021-07-13 10:18:08 +08:00
/**
* @author XinYi Song
*/
@CacheConfig(cacheNames = "FirePointServiceCache")
2021-07-13 10:18:08 +08:00
@Service
public class FirePointServiceImpl implements FirePointService {
2021-07-14 17:35:10 +08:00
public static Logger log = LoggerFactory.getLogger(FirePointServiceImpl.class);
2021-07-13 10:18:08 +08:00
@Resource
private FirePointDao firePointDao;
@Resource
private SettingDao settingDao;
@Resource
private ShanDongFirePointDao shanDongFirePointDao;
@Resource
private Query query;
@Resource
private SysUserDao sysUserDao;
@Resource
private FireAndRangerDao fireAndRangerDao;
@Resource
private ForestRangerDao forestRangerDao;
2021-07-16 10:47:24 +08:00
@Resource
private FireTaskDao fireTaskDao;
@Resource
private JdbcUtils jdbcUtils;
@Resource
private FireTaskPhotoDao fireTaskPhotoDao;
2021-07-22 11:54:01 +08:00
@Resource
private CityDao cityDao;
@Resource
private CountyDao countyDao;
2022-05-07 15:31:25 +08:00
@Resource
private StreetDao streetDao;
@Resource
private FireDao fireDao;
@Resource
private NationwideDao nationwideDao;
2021-07-13 10:18:08 +08:00
/**
* 添加火点信息
2022-05-06 17:49:37 +08:00
*
2021-07-13 10:18:08 +08:00
* @param firePointQo
* @return
*/
2022-05-06 17:49:37 +08:00
@CacheEvict(value = "FirePointServiceCache", allEntries = true)
2021-07-13 10:18:08 +08:00
@Override
public FirePointEntity insertFirePoint(FirePointQo firePointQo) {
2022-05-06 17:49:37 +08:00
if (firePointQo.getLandtype().equals("水体")) {
return null;
}
if ("Himawari 8".equals(firePointQo.getSatelliteType()) && "L".equals(firePointQo.getConfidence())) {
return null;
}
if ("Himawari 8".equals(firePointQo.getSatelliteType()) && "N".equals(firePointQo.getConfidence())) {
return null;
}
FirePointEntity firePointEntity = new FirePointEntity();
firePointEntity.setFireCode(firePointQo.getFireCode());
firePointEntity.setCountyCode(firePointQo.getCountyCode().toString());
firePointEntity.setCountyName(firePointQo.getCountyName());
firePointEntity.setSatelliteTime(DateTimeUtil.timeMillisToString(firePointQo.getSatelliteTimeTs().longValue()));
firePointEntity.setLongitude(firePointQo.getLongitude());
firePointEntity.setLatitude(firePointQo.getLatitude());
firePointEntity.setFirePointAddress(AddressUtils.getLocal(firePointQo.getLatitude().toString(), firePointQo.getLongitude().toString()));
firePointEntity.setSatelliteType(firePointQo.getSatelliteType());
firePointEntity.setLandType(firePointQo.getLandtype());
firePointEntity.setConfidence(firePointQo.getConfidence());
firePointEntity.setAddTime(DateTimeUtil.dateTimeToString(LocalDateTime.now()));
firePointEntity.setFireType("0");
firePointEntity.setFireImage(firePointQo.getFireImage());
firePointEntity.setSatelliteImage(firePointQo.getSatelliteImage());
2022-06-02 10:53:48 +08:00
firePointEntity.setAuditFireType("0");//初始化火点为未审核状态
try {
bindStreetCodeName(firePointEntity);
} catch (Exception e) {
e.printStackTrace();
System.out.println("添加火点信息 逆地理编码请求街道编号失败:" + e.getMessage());
}
//如果开关已打开,就剔除山东的火点
if (isSwitchStateOpen() && firePointEntity.getCountyCode().startsWith("37")) {
return null;
}
//如果开关已关闭,所有火点都入全国火点库
FirePointEntity existFireCode = firePointDao.findByFireCode(firePointEntity.getFireCode());
if (existFireCode != null) {
return null;
}
log.info("-------发现新火点");
return firePointDao.save(firePointEntity);
2021-07-13 10:18:08 +08:00
}
2021-07-15 15:22:23 +08:00
/**
* 添加火点信息
*
* @param firePointQo
* @return
*/
@CacheEvict(value = "FirePointServiceCache", allEntries = true)
@Override
public ShanDongFirePointEntity insertFirePointChannelTwo(FirePointQo firePointQo) {
if (firePointQo.getLandtype().equals("水体")) {
return null;
}
if ("Himawari 8".equals(firePointQo.getSatelliteType()) && "L".equals(firePointQo.getConfidence())) {
return null;
}
if ("Himawari 8".equals(firePointQo.getSatelliteType()) && "N".equals(firePointQo.getConfidence())) {
return null;
}
ShanDongFirePointEntity firePointEntity = new ShanDongFirePointEntity();
firePointEntity.setFireCode(firePointQo.getFireCode());
firePointEntity.setCountyCode(firePointQo.getCountyCode().toString());
firePointEntity.setCountyName(firePointQo.getCountyName());
firePointEntity.setSatelliteTime(DateTimeUtil.timeMillisToString(firePointQo.getSatelliteTimeTs().longValue()));
firePointEntity.setLongitude(firePointQo.getLongitude());
firePointEntity.setLatitude(firePointQo.getLatitude());
firePointEntity.setFirePointAddress(AddressUtils.getLocal(firePointQo.getLatitude().toString(), firePointQo.getLongitude().toString()));
firePointEntity.setSatelliteType(firePointQo.getSatelliteType());
firePointEntity.setLandType(firePointQo.getLandtype());
firePointEntity.setConfidence(firePointQo.getConfidence());
firePointEntity.setAddTime(DateTimeUtil.dateTimeToString(LocalDateTime.now()));
firePointEntity.setFireType("0");
firePointEntity.setFireImage(firePointQo.getFireImage());
firePointEntity.setSatelliteImage(firePointQo.getSatelliteImage());
firePointEntity.setVerifyState("0");
try {
bindStreetCodeName(firePointEntity);
} catch (Exception e) {
e.printStackTrace();
System.out.println("添加山东火点信息 逆地理编码请求街道编号失败:" + e.getMessage());
}
//如果开关已打开,就把山东火点入山东火点库
if (isSwitchStateOpen() && firePointEntity.getCountyCode().startsWith("37")) {
ShanDongFirePointEntity existFireCode = shanDongFirePointDao.findByFireCode(firePointEntity.getFireCode());
if (existFireCode != null) {
return null;
}
log.info("-------发现新山东火点");
return shanDongFirePointDao.save(firePointEntity);
}
return null;
}
/**
* 返回开关是否为打开状态
*
* @return true已打开false已关闭
*/
private boolean isSwitchStateOpen() {
List<SettingEntity> settingEntityList = settingDao.findAll();
if (settingEntityList.isEmpty()) {
return false;
}
SettingEntity settingEntity = settingEntityList.get(0);
return "1".equals(settingEntity.getSwitchState());
}
/**
* 为实体类设置街道编号和街道名称
*/
private void bindStreetCodeName(FirePointEntity firePointEntity) throws Exception {
List<String> locationList = new ArrayList<>();
locationList.add(firePointEntity.getLongitude() + "," + firePointEntity.getLatitude());
GaoDeIgGeocodeVo geocode = GaoDeApiUtil.geocode(locationList);
String townCode = geocode.getRegeocodes().get(0).getAddressComponent().get(0).getTowncode();
if (townCode.length() > 9) {
townCode = townCode.substring(0, 9);
}
firePointEntity.setStreetCode(townCode);
List<StreetEntity> byStreetCode = streetDao.findByStreetCode(townCode);
if (byStreetCode != null && byStreetCode.size() > 0) {
firePointEntity.setStreetName(byStreetCode.get(0).getStreetName());
}
}
/**
* 为实体类设置街道编号和街道名称
*/
private void bindStreetCodeName(ShanDongFirePointEntity firePointEntity) throws Exception {
2022-05-07 15:20:28 +08:00
List<String> locationList = new ArrayList<>();
locationList.add(firePointEntity.getLongitude() + "," + firePointEntity.getLatitude());
GaoDeIgGeocodeVo geocode = GaoDeApiUtil.geocode(locationList);
String townCode = geocode.getRegeocodes().get(0).getAddressComponent().get(0).getTowncode();
if (townCode.length() > 9) {
townCode = townCode.substring(0, 9);
}
firePointEntity.setStreetCode(townCode);
List<StreetEntity> byStreetCode = streetDao.findByStreetCode(townCode);
if (byStreetCode != null && byStreetCode.size() > 0) {
firePointEntity.setStreetName(byStreetCode.get(0).getStreetName());
}
2022-05-07 15:20:28 +08:00
}
2022-06-02 11:38:55 +08:00
/**
* 根据火点编号更新审核状态
* 操作1将火点编号对应的火点从山东火点表转存到火点表
* 操作2将山东火点表中的这个火点的审核状态更新
*/
@Transactional(rollbackOn = Exception.class)
@Override
public String updateVerifyStateByFireCode(String fireCode, String verifyState) {
// 获取区域信息
Locale locale = LocaleContextHolder.getLocale();
ShanDongFirePointEntity existShanDongFirePoint = shanDongFirePointDao.findByFireCode(fireCode);
//山东火点表找不到这个火点,返回失败
if (existShanDongFirePoint == null) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "修改失败,没有指定的火点编号", locale);
}
if ("1".equals(verifyState)) {
//火点表能找到这个火点,返回失败
FirePointEntity existFirePoint = firePointDao.findByFireCode(fireCode);
if (existFirePoint != null) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "修改失败,火点库已存在指定的火点编号", locale);
}
//完成第一步:将山东火点表中的火点转存到火点表,初始化为未审核状态
FirePointEntity firePointEntity = new FirePointEntity();
firePointEntity.setFireCode(existShanDongFirePoint.getFireCode());
firePointEntity.setCountyCode(existShanDongFirePoint.getCountyCode());
firePointEntity.setCountyName(existShanDongFirePoint.getCountyName());
firePointEntity.setSatelliteTime(existShanDongFirePoint.getSatelliteTime());
firePointEntity.setLongitude(existShanDongFirePoint.getLongitude());
firePointEntity.setLatitude(existShanDongFirePoint.getLatitude());
firePointEntity.setFirePointAddress(existShanDongFirePoint.getFirePointAddress());
firePointEntity.setSatelliteType(existShanDongFirePoint.getSatelliteType());
firePointEntity.setLandType(existShanDongFirePoint.getLandType());
firePointEntity.setConfidence(existShanDongFirePoint.getConfidence());
firePointEntity.setAddTime(existShanDongFirePoint.getAddTime());
firePointEntity.setFireType(existShanDongFirePoint.getFireType());
firePointEntity.setFireImage(existShanDongFirePoint.getFireImage());
firePointEntity.setSatelliteImage(existShanDongFirePoint.getSatelliteImage());
firePointEntity.setStreetCode(existShanDongFirePoint.getStreetCode());
firePointEntity.setStreetName(existShanDongFirePoint.getStreetName());
firePointEntity.setAuditFireType("0");//初始化火点为未审核状态
log.info("-------转存新火点");
firePointDao.save(firePointEntity);
}
shanDongFirePointDao.updateVerifyStateByFireCode(fireCode, verifyState);
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "修改成功", locale);
}
2021-07-15 15:22:23 +08:00
/**
* 查询今天的火点信息
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
2021-07-15 15:22:23 +08:00
@Override
public List<FirePointEntity> selectTodayFirePoint(String countyCode) {
2021-07-15 15:22:23 +08:00
String addTime = DateTimeUtil.dateToString(LocalDate.now());
2022-05-07 15:31:25 +08:00
if (9 == countyCode.length()) {
return firePointDao.selectTodayFirePointOneStreet(addTime, countyCode);
2022-05-07 15:31:25 +08:00
} else if ("0000".equals(countyCode.substring(2))) {
List<CityEntity> byProCode = cityDao.findByProCode(countyCode);
String proName = byProCode.get(0).getProName();
2022-05-06 17:49:37 +08:00
return firePointDao.selectTodayFirePoint(addTime, proName);
} else if ("00".equals(countyCode.substring(4)) && !"0000".equals(countyCode.substring(2))) {
List<CountyEntity> byCityCode = countyDao.findByCityCode(countyCode);
String cityName = byCityCode.get(0).getCityName();
2022-05-06 17:49:37 +08:00
return firePointDao.selectTodayFirePoint(addTime, cityName);
} else {
return firePointDao.selectTodayFirePointOne(addTime, countyCode);
}
2021-07-15 15:22:23 +08:00
}
/**
* 动态多条件查询火点信息
2022-05-06 17:49:37 +08:00
*
* @param cityCode
* @param satelliteType
* @param landType
* @param startTime
* @param endTime
* @return
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
2022-05-06 17:49:37 +08:00
public List<FirePointEntity> selectFirePoint(String proCode, String cityCode, String satelliteType, String landType, String startTime, String endTime) {
List<CityEntity> byProCode = cityDao.findByProCode(proCode);
String proName = byProCode.get(0).getProName();
2022-05-06 17:49:37 +08:00
if (!"".equals(startTime) && !"".equals(endTime)) {
LocalDate localDate = DateTimeUtil.stringToDate(endTime);
// 结束时间
LocalDate localDate1 = localDate.plusDays(1);
String dateToString = DateTimeUtil.dateToString(localDate1);
2022-05-06 17:49:37 +08:00
return query.selectFirePointByPro(proName, cityCode, satelliteType, landType, startTime, dateToString);
}
2022-05-06 17:49:37 +08:00
return query.selectFirePointByPro(proName, cityCode, satelliteType, landType, startTime, endTime);
}
/**
* 动态多条件查询火点信息
2022-05-06 17:49:37 +08:00
*
2022-05-09 14:38:20 +08:00
* @param cityCode 市编码
* @param countyCode 县编码
* @param satelliteType
* @param landType
* @param startTime
* @param endTime
* @return
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
2022-05-09 14:38:20 +08:00
public List<FirePointEntity> selectFirePointByCity(String cityCode, String countyCode, String satelliteType, String landType, String startTime, String endTime) {
List<CountyEntity> byCityCode = countyDao.findByCityCode(cityCode);
String cityName = byCityCode.get(0).getCityName();
2022-05-06 17:49:37 +08:00
if (!"".equals(startTime) && !"".equals(endTime)) {
LocalDate localDate = DateTimeUtil.stringToDate(endTime);
// 结束时间
LocalDate localDate1 = localDate.plusDays(1);
String dateToString = DateTimeUtil.dateToString(localDate1);
2022-05-09 14:38:20 +08:00
return query.selectFirePointByCity(cityName, countyCode, satelliteType, landType, startTime, dateToString);
}
2022-05-09 14:38:20 +08:00
return query.selectFirePointByCity(cityName, countyCode, satelliteType, landType, startTime, endTime);
}
/**
* 动态多条件查询火点信息
2022-05-06 17:49:37 +08:00
*
2022-05-09 14:38:20 +08:00
* @param countyCode 县编码
* @param streetCode 街道编码
* @param satelliteType
* @param landType
* @param startTime
* @param endTime
* @return
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
2022-05-09 14:38:20 +08:00
public List<FirePointEntity> selectFirePointByCounty(String countyCode, String streetCode, String satelliteType, String landType, String startTime, String endTime) {
2022-05-06 17:49:37 +08:00
if (!"".equals(startTime) && !"".equals(endTime)) {
LocalDate localDate = DateTimeUtil.stringToDate(endTime);
// 结束时间
LocalDate localDate1 = localDate.plusDays(1);
String dateToString = DateTimeUtil.dateToString(localDate1);
2022-05-09 14:38:20 +08:00
return query.selectFirePointByCounty(countyCode, streetCode, satelliteType, landType, startTime, dateToString);
}
2022-05-09 14:38:20 +08:00
return query.selectFirePointByCounty(countyCode, streetCode, satelliteType, landType, startTime, endTime);
}
@Override
public List<FirePointEntity> selectFirePointByStreet(String streetCode, String satelliteType, String landType, String startTime, String endTime) {
if (!"".equals(startTime) && !"".equals(endTime)) {
LocalDate localDate = DateTimeUtil.stringToDate(endTime);
// 结束时间
LocalDate localDate1 = localDate.plusDays(1);
String dateToString = DateTimeUtil.dateToString(localDate1);
return query.selectFirePointByStreet(streetCode, satelliteType, landType, startTime, dateToString);
}
return query.selectFirePointByStreet(streetCode, satelliteType, landType, startTime, endTime);
}
/**
* 根据火点编码修改火点的状态预警
2022-05-06 17:49:37 +08:00
*
* @param fireCode
* @param fireType
* @param token
* @return
*/
@Transactional(rollbackOn = Exception.class)
@Override
public String updateTypeByFireCode(String fireCode, String fireType, String token) {
// 获取区域信息
Locale locale = LocaleContextHolder.getLocale();
String tokenUserName = TokenUtil.getTokenUserName(token);
SysUserEntity sysUserEntity = sysUserDao.selectByUserName(tokenUserName);
FirePointEntity byFireCode = firePointDao.findByFireCode(fireCode);
2021-08-06 16:39:16 +08:00
if ("3".equals(byFireCode.getFireType()) || "-1".equals(byFireCode.getFireType())) {
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "该火点已经结案,请勿进行有关状态操作", locale);
}
if (fireType.equals(byFireCode.getFireType())) {
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "您正处于当前的状态,请勿进行该操作", locale);
}
firePointDao.updateFireTypeByFireCode(fireCode, fireType);
2021-08-06 16:39:16 +08:00
if ("1".equals(fireType)) {
FirePointEntity byFireCode1 = firePointDao.findByFireCode(fireCode);
// 预警
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, byFireCode1, locale);
} else if ("2".equals(fireType)) {
FirePointEntity byFireCode3 = firePointDao.findByFireCode(fireCode);
// 核查
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, byFireCode3, locale);
} else {
String rangerType = "0";
FireAndRanger byFireCode1 = fireAndRangerDao.findByFireCode(fireCode);
if (byFireCode1 == null) {
FirePointEntity byFireCode4 = firePointDao.findByFireCode(fireCode);
String time = DateTimeUtil.dateTimeToString(LocalDateTime.now());
FireAndRanger fireAndRanger = new FireAndRanger();
fireAndRanger.setFireCode(fireCode);
// 由于测试阶段先用用户账号代替后期换成getReallyName(用户真实姓名)
fireAndRanger.setHandler(sysUserEntity.getReallyName());
fireAndRanger.setEndTime(time);
fireAndRangerDao.save(fireAndRanger);
// 结案
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, byFireCode4, locale);
}
// 火点结案将护林员的状态修改为0 表示该护林员没有在执行任务,处于空闲状态
forestRangerDao.updateRangerTypeByPhone(byFireCode1.getRangerName(), rangerType);
String time = DateTimeUtil.dateTimeToString(LocalDateTime.now());
fireAndRangerDao.updateEndTimeByFireCode(fireCode, time);
fireAndRangerDao.updateProgressTypeByFireCode(fireCode, "0");
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "结案", locale);
}
}
2021-07-16 10:47:24 +08:00
/**
* 提交核查任务
2022-05-06 17:49:37 +08:00
*
2021-07-16 10:47:24 +08:00
* @param files
* @param appTaskBodyVo
* @return
*/
@Transactional(rollbackOn = Exception.class)
@Override
public String insertAppTask(MultipartFile[] files, AppTaskBodyVo appTaskBodyVo) throws IOException {
// 获取区域信息
Locale locale = LocaleContextHolder.getLocale();
FirePointEntity byFireCode = firePointDao.findByFireCode(appTaskBodyVo.getFireCode());
2022-05-06 17:49:37 +08:00
if (byFireCode == null) {
return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG, "火点编码错误,请重新输入", locale);
2021-07-16 10:47:24 +08:00
}
FireTask byTaskFireCode = fireTaskDao.findByTaskFireCode(appTaskBodyVo.getFireCode());
2022-05-06 17:49:37 +08:00
if (byTaskFireCode != null) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "该火点的任务已经提交,请勿重复提交", locale);
2021-07-16 10:47:24 +08:00
}
String s = DateTimeUtil.dateTimeToString(LocalDateTime.now());
FireTask fireTask = new FireTask();
fireTask.setTaskFireCode(appTaskBodyVo.getFireCode());
fireTask.setTaskInformation(appTaskBodyVo.getTaskInformation());
fireTask.setTaskTime(s);
FireTask save = fireTaskDao.save(fireTask);
2022-05-06 17:49:37 +08:00
if (save == null) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "任务提交失败", locale);
2021-07-16 10:47:24 +08:00
}
List<FireTaskPhoto> fireTaskPhotos = PhotoUtil.uploadImage(files, appTaskBodyVo.getFireCode());
2021-07-26 14:34:52 +08:00
List<FireTaskPhoto> fireTaskPhotos1 = fireTaskPhotoDao.saveAll(fireTaskPhotos);
2022-05-06 17:49:37 +08:00
if (fireTaskPhotos1 == null || fireTaskPhotos1.size() == 0) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "图片上传失败,任务提交失败", locale);
2021-07-16 10:47:24 +08:00
}
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "任务提交成功", locale);
}
/**
* 根据火点编码查询任务信息
2022-05-06 17:49:37 +08:00
*
* @param fireCode
* @return
* @throws Exception
*/
@Override
public String selectAppTask(String fireCode) throws Exception {
// 获取区域信息
Locale locale = LocaleContextHolder.getLocale();
FireTask byTaskFireCode = fireTaskDao.findByTaskFireCode(fireCode);
2022-05-06 17:49:37 +08:00
if (byTaskFireCode == null) {
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "暂时还没有该火点的任务信息", locale);
}
AppTaskBodyVo appTaskBodyVo = new AppTaskBodyVo();
// 做映射返回vo类对象
BeanCopier beanCopier = BeanCopier.create(FireTask.class, AppTaskBodyVo.class, false);
2022-05-06 17:49:37 +08:00
beanCopier.copy(byTaskFireCode, appTaskBodyVo, null);
List<Object[]> photoPath = fireTaskPhotoDao.findPhotoPath(fireCode);
List<AppPhotoVo> appPhotoVos = ObjectToBeanUtils.objectToBean(photoPath, AppPhotoVo.class);
appTaskBodyVo.setTaskFirePhoto(appPhotoVos);
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, appTaskBodyVo, locale);
2021-07-16 10:47:24 +08:00
}
/**
* 查询近一周的火点信息
2022-05-06 17:49:37 +08:00
*
* @return
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
public List<FirePointEntity> selectFirePointBetweenSeven() {
LocalDateTime localDateTime = LocalDateTime.now();
String endTime = DateTimeUtil.dateTimeToString(localDateTime);
// 当前时间减7
LocalDateTime localDateTime1 = localDateTime.minusDays(7);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
return query.selectFirePointBetweenThree(startTime, endTime);
}
/**
* 查询近一个月的火点信息
2022-05-06 17:49:37 +08:00
*
* @return
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
public List<FirePointEntity> selectFirePointByMonth(String countyCode) {
LocalDateTime localDateTime = LocalDateTime.now();
String endTime = DateTimeUtil.dateTimeToString(localDateTime);
// 当前时间减31
LocalDateTime localDateTime1 = localDateTime.minusDays(31);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
if (9 == countyCode.length()) {
return query.selectFirePointByMonthStreet(countyCode, startTime, endTime);
} else if ("0000".equals(countyCode.substring(2))) {
List<CityEntity> byProCode = cityDao.findByProCode(countyCode);
String proName = byProCode.get(0).getProName();
return query.selectFirePointByMonthPro(proName, startTime, endTime);
2022-05-06 17:49:37 +08:00
} else if ("00".equals(countyCode.substring(4)) && !"0000".equals(countyCode.substring(2))) {
List<CountyEntity> byCityCode = countyDao.findByCityCode(countyCode);
String cityName = byCityCode.get(0).getCityName();
return query.selectFirePointByMonthCity(cityName, startTime, endTime);
2022-05-06 17:49:37 +08:00
} else {
return query.selectFirePointByMonthCounty(countyCode, startTime, endTime);
}
}
/**
* 查询近一个月的火点数量
2022-05-06 17:49:37 +08:00
*
* @return
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
public String selectFirePointNumMonth() {
// 获取区域信息
Locale locale = LocaleContextHolder.getLocale();
Map map = new HashMap(3);
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime2 = localDateTime.plusDays(1);
String endTime = DateTimeUtil.dateTimeToString(localDateTime2);
// 当前时间减30
LocalDateTime localDateTime1 = localDateTime.minusDays(30);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
// 查询近一个月各植被类型的火点数量
List<Map<String, Object>> maps = firePointDao.selectNumByLandType(startTime, endTime);
2022-05-06 17:49:37 +08:00
map.put("land", maps);
// 查询近一个月各地区火点数量
List<Map<String, Object>> maps1 = firePointDao.selectNumByArea(startTime, endTime);
2022-05-06 17:49:37 +08:00
map.put("area", maps1);
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, map, locale);
}
/**
* 查询近一天的火点数量
2022-05-06 17:49:37 +08:00
*
* @return
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
public String selectFirePointNumDay() {
// 获取区域信息
Locale locale = LocaleContextHolder.getLocale();
Map map = new HashMap(3);
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime2 = localDateTime.plusDays(1);
String endTime = DateTimeUtil.dateTimeToString(localDateTime2);
// 当前时间减1
LocalDateTime localDateTime1 = localDateTime.minusDays(1);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
// 查询近一个月各植被类型的火点数量
List<Map<String, Object>> maps = firePointDao.selectNumByLandType(startTime, endTime);
2022-05-06 17:49:37 +08:00
map.put("land", maps);
// 查询近一个月各地区火点数量
List<Map<String, Object>> maps1 = firePointDao.selectNumByArea(startTime, endTime);
2022-05-06 17:49:37 +08:00
map.put("area", maps1);
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, map, locale);
}
/**
* 查询近一周的火点数量
2022-05-06 17:49:37 +08:00
*
* @return
*/
2022-05-06 17:49:37 +08:00
@Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
public String selectFirePointNumWeek() {
// 获取区域信息
Locale locale = LocaleContextHolder.getLocale();
Map map = new HashMap(3);
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime2 = localDateTime.plusDays(1);
String endTime = DateTimeUtil.dateTimeToString(localDateTime2);
// 当前时间减7
LocalDateTime localDateTime1 = localDateTime.minusDays(7);
String startTime = DateTimeUtil.dateTimeToString(localDateTime1);
// 查询近一个月各植被类型的火点数量
List<Map<String, Object>> maps = firePointDao.selectNumByLandType(startTime, endTime);
2022-05-06 17:49:37 +08:00
map.put("land", maps);
// 查询近一个月各地区火点数量
List<Map<String, Object>> maps1 = firePointDao.selectNumByArea(startTime, endTime);
2022-05-06 17:49:37 +08:00
map.put("area", maps1);
2022-05-06 17:49:37 +08:00
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, map, locale);
}
2021-07-22 11:54:01 +08:00
/**
* 查询该省所有的市
2022-05-06 17:49:37 +08:00
*
* @param code
* @return
*/
@Override
public List<Map<String, Object>> selectCityName(String code) {
return cityDao.selectCityName(code);
}
/**
* 查询市包含的区县和编码
2022-05-06 17:49:37 +08:00
*
* @param code
2021-07-22 11:54:01 +08:00
* @return
*/
@Override
public List<Map<String, Object>> selectCountyName(String code) {
return countyDao.selectCountyName(code);
2021-07-22 11:54:01 +08:00
}
/**
* 测试插入火点信息
2022-05-06 17:49:37 +08:00
*
* @param firePointQo
* @return
*/
@Override
public FirePoint insertFireTest(FirePointQo firePointQo) {
FirePoint firePoint = new FirePoint();
firePoint.setFireCode(firePointQo.getFireCode());
firePoint.setCountyCode(firePointQo.getCountyCode().toString());
firePoint.setCountyName(firePointQo.getCountyName());
firePoint.setSatelliteTime(DateTimeUtil.timeMillisToString(firePointQo.getSatelliteTimeTs().longValue()));
firePoint.setLongitude(firePointQo.getLongitude());
firePoint.setLatitude(firePointQo.getLatitude());
2022-05-06 17:49:37 +08:00
firePoint.setFirePointAddress(AddressUtils.getLocal(firePointQo.getLatitude().toString(), firePointQo.getLongitude().toString()));
firePoint.setSatelliteType(firePointQo.getSatelliteType());
firePoint.setLandType(firePointQo.getLandtype());
firePoint.setConfidence(firePointQo.getConfidence());
firePoint.setAddTime(DateTimeUtil.dateTimeToString(LocalDateTime.now()));
firePoint.setFireType("0");
firePoint.setFireImage(firePointQo.getFireImage());
firePoint.setSatelliteImage(firePointQo.getSatelliteImage());
log.info("-------发现新火点");
return fireDao.save(firePoint);
}
/**
* 导入全国省市区
2022-05-06 17:49:37 +08:00
*
* @param file
* @throws Exception
*/
@Transactional(rollbackOn = Exception.class)
@Override
public void importCityExcel(MultipartFile file) throws Exception {
//调用封装好的工具
ExcelImportUtil importUtil = new ExcelImportUtil(file);
//调用导入的方法获取sheet表的内容
List<Map<String, String>> maps = importUtil.readExcelContent();
//导入订单详情表
List<Nationwide> orderDetails = maps.stream().filter(Objects::nonNull).map(map -> {
Nationwide nationwide = new Nationwide();
nationwide.setProName(map.get("pro_name"));
nationwide.setProCode(map.get("pro_code"));
nationwide.setCityName(map.get("city_name"));
nationwide.setCityCode(map.get("city_code"));
nationwide.setCountyName(map.get("town_name"));
nationwide.setCountyCode(map.get("town_code"));
return nationwide;
}).collect(Collectors.toList());
//批量添加到订单详情
nationwideDao.saveAll(orderDetails);
}
/**
* 查询今日的火点信息测试
2022-05-06 17:49:37 +08:00
*
* @param countyCode
* @return
*/
@Override
public List<FirePoint> selectTodayFire(String countyCode) {
String addTime = DateTimeUtil.dateToString(LocalDate.now());
2022-05-06 17:49:37 +08:00
if ("0000".equals(countyCode.substring(2))) {
List<CityEntity> byProCode = cityDao.findByProCode(countyCode);
String proName = byProCode.get(0).getProName();
2022-05-06 17:49:37 +08:00
return fireDao.selectTodayFire(addTime, proName);
} else if ("00".equals(countyCode.substring(4)) && !"0000".equals(countyCode.substring(2))) {
List<CountyEntity> byCityCode = countyDao.findByCityCode(countyCode);
String cityName = byCityCode.get(0).getCityName();
2022-05-06 17:49:37 +08:00
return fireDao.selectTodayFire(addTime, cityName);
} else {
return fireDao.selectTodayFireOne(addTime, countyCode);
}
}
2022-05-07 17:45:40 +08:00
/**
* 更新火点的街道编号数据
*
* @return
*/
@Override
public String updateFirePointStreetCode() {
System.out.println("开始格式化街道编号");
2022-05-09 10:17:57 +08:00
List<FirePointEntity> firePointEntityList = firePointDao.selectAbnormalStreetCode();
2022-05-07 17:45:40 +08:00
long startTimeMillis = System.currentTimeMillis();
int listSize = firePointEntityList.size();
for (int i = 0; i < listSize; i++) {
try {
FirePointEntity firePointEntity = firePointEntityList.get(i);
List<String> locationList = new ArrayList<>();
locationList.add(firePointEntity.getLongitude() + "," + firePointEntity.getLatitude());
GaoDeIgGeocodeVo geocode = GaoDeApiUtil.geocode(locationList);
String townCode = geocode.getRegeocodes().get(0).getAddressComponent().get(0).getTowncode();
if (townCode.length() > 9) {
townCode = townCode.substring(0, 9);
}
firePointDao.updateStreetCodeById(firePointEntity.getId(), townCode);
if (i % 10 == 0) {
long spendTimeMillis = System.currentTimeMillis() - startTimeMillis;
double remainTimeMillis = (listSize - i) * spendTimeMillis * 1D / i;
System.out.println("已完成(" + i + "/" + listSize + "),用时" + formatDuring(spendTimeMillis) + ",剩余" + formatDuring((long) remainTimeMillis));
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("街道编号格式化出现错误:" + e.getMessage());
}
}
Locale locale = LocaleContextHolder.getLocale();
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "街道编号格式化完毕", locale);
}
public static String formatDuring(long mss) {
long days = mss / (1000 * 60 * 60 * 24);
long hours = (mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60);
long minutes = (mss % (1000 * 60 * 60)) / (1000 * 60);
long seconds = (mss % (1000 * 60)) / 1000;
if (days <= 0 && hours <= 0 && minutes <= 0) {
return seconds + "";
}
if (days <= 0 && hours <= 0) {
return minutes + " 分钟 " + seconds + "";
}
if (days <= 0) {
return hours + " 小时 " + minutes + " 分钟 " + seconds + "";
}
return days + "" + hours + " 小时 " + minutes + " 分钟 " + seconds + "";
}
2021-07-13 10:18:08 +08:00
}