fire_point/src/main/java/com/xkrs/service/impl/FirePointServiceImpl.java
2023-03-08 11:21:05 +08:00

213 lines
10 KiB
Java

package com.xkrs.service.impl;
import com.xkrs.common.encapsulation.PromptMessageEnum;
import com.xkrs.straw.dao.CountyCodeWeiXinDao;
import com.xkrs.straw.dao.StreetDao;
import com.xkrs.service.FirePointService;
import com.xkrs.service.StreetService;
import com.xkrs.straw.dao.FirePointOrdinaryDao;
import com.xkrs.straw.dao.SysUserDao;
import com.xkrs.straw.model.bean.FirePointQueryResultBean;
import com.xkrs.straw.model.entity.FirePointOrdinaryEntity;
import com.xkrs.straw.model.entity.SysUserEntity;
import com.xkrs.straw.model.helper.PushHelper;
import com.xkrs.straw.model.vo.AllFirePointVo;
import com.xkrs.straw.utilsnew.FirePointConvertUtils;
import com.xkrs.straw.managers.FirePointQueryManager;
import com.xkrs.straw.utilsnew.DateTimeUtils;
import com.xkrs.straw.utilsnew.TokenUtil;
import org.apache.hc.core5.util.TextUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.persistence.criteria.Predicate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject;
/**
* @author XinYi Song
*/
@CacheConfig(cacheNames = "FirePointServiceCache")
@Service
public class FirePointServiceImpl implements FirePointService {
public static Logger log = LoggerFactory.getLogger(FirePointServiceImpl.class);
private final Locale locale = LocaleContextHolder.getLocale();
@Resource
private SysUserDao sysUserDao;
@Resource
private StreetDao streetDao;
@Resource
private CountyCodeWeiXinDao countyCodeWeiXinDao;
@Resource
private StreetService streetService;
@Resource
private PushHelper pushHelper;
@Resource
private FirePointQueryManager firePointQueryManager;
@Resource
private FirePointOrdinaryDao firePointOrdinaryDao;
// /**
// * 下载VIP用户火点数据
// *
// *
// *
// @Query(value = "select a.really_name 姓名, a.county_name 所在市, a.telephone 手机号, a.vip_level vip, b.satellite_time 扫描时间, " + "round(cast(b.longitude as numeric) ,6) 经度, round(cast(b.latitude as numeric) ,6) 纬度, b.fire_point_address 详细地址 from sys_user a left join fire_point b on " + "case when left(a.county_code, 4) = '0000' then left(b.county_code, 4) = left(a.county_code, 4) " + "when left(a.county_code, 2) = '00' then left(b.county_code, 2) = left(a.county_code, 2) " + "else left(b.county_code, 2) = left(a.county_code, 2) end where a.vip_level > 0 and satellite_time > ?1", nativeQuery = true)
// List<Map<String, String>> downloadFirePointByVip(String yesterday);
//
// */
// @Override
// public String downloadVipUserFilePoint(HttpServletRequest request, HttpServletResponse response) {
// LocalDate now = LocalDate.now();
// List<Map<String, String>> list = firePointDao.downloadFirePointByVip(dateTimeToString(LocalDateTime.of(now.minusDays(1), LocalTime.MIN)));
// if (list.size() == 0) {
// return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "无数据!", locale);
// }
// int year = now.getYear();
// int month = now.getMonth().getValue();
// int day = now.getDayOfMonth();
// String fileName = String.format("%s_%s_%s_VIP用户火点信息列表.xlsx", year, month, day);
// response.setContentType("application/octet-stream; charset=UTF8");
// response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8));
// response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
// try {
// downloadXlsx(list, response.getOutputStream());
// } catch (IOException e) {
// log.error("download vip user's fire point fail: {}", e.getMessage());
// }
// return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "ok", locale);
// }
// @Override
// public String downloadFirePoint(HttpServletRequest request, HttpServletResponse response, String ids) {
//
// List<String> idList = ListUtils.toStringList(ids, ",");
// if (idList.isEmpty()) {
// return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "无数据!", locale);
// }
// List<Map<String, String>> list = new ArrayList<>();
// List<FirePointEntity> sourceList = firePointDao.findAllById(ListUtils.stringListToLongList(idList));
// for (FirePointEntity source : sourceList) {
// Map<String, String> record = new HashMap<>();
// record.put("所在区县", source.getCountyName());
// record.put("所在街道", source.getStreetName());
// record.put("发现时间", source.getSatelliteTime());
// record.put("地物类型", source.getLandType());
// record.put("经度", String.valueOf(source.getLongitude()));
// record.put("纬度", String.valueOf(source.getLatitude()));
// record.put("详细地址", source.getFirePointAddress());
// list.add(record);
// }
// LocalDate now = LocalDate.now();
// String fileName = String.format("%s_%s_%s_火点信息列表.xlsx", now.getYear(), now.getMonth().getValue(), now.getDayOfMonth());
// response.setContentType("application/octet-stream; charset=UTF8");
// response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8));
// response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
// try {
// downloadXlsx(list, response.getOutputStream());
// } catch (IOException e) {
// log.error("download fire point fail: {}", e.getMessage());
// }
// return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "ok", locale);
// }
/**
* Complete
*/
@Override
public String queryFirePoint(String token, String code, String startTime, String endTime, String satelliteType, String landType) {
//验证token
String userName = TokenUtil.obtainUserNameByToken(token);
if (TextUtils.isEmpty(userName)) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "账号不存在或错误", locale);
}
SysUserEntity sysUserEntity = sysUserDao.selectByUserName(userName);
if (sysUserEntity == null) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "账号不存在或错误", locale);
}
FirePointQueryResultBean firePointQueryResult = firePointQueryManager.queryFirePointBelongToUser(sysUserEntity, code, startTime, endTime, satelliteType, landType);
if (firePointQueryResult.isSuccess()) {
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, firePointQueryResult.getList(), locale);
} else {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, firePointQueryResult.getErrorMessage(), locale);
}
}
/**
* Complete
*/
// @Cacheable(keyGenerator = "keyGenerator", unless = "#result == null")
@Override
public String selectTodayFirePoint(String token, String countyCode) {
//验证token
String userName = TokenUtil.obtainUserNameByToken(token);
if (TextUtils.isEmpty(userName)) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "账号不存在或错误", locale);
}
SysUserEntity sysUserEntity = sysUserDao.selectByUserName(userName);
if (sysUserEntity == null) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, "账号不存在或错误", locale);
}
LocalDateTime startTime1 = LocalDateTime.now();
LocalDateTime startTime2 = LocalDateTime.of(startTime1.getYear(), startTime1.getMonth(), startTime1.getDayOfMonth(), 0, 0, 0, 0);
String startTimeString = DateTimeUtils.localDateTimeToString(startTime2);
LocalDateTime endTime1 = LocalDateTime.now().plusDays(1);
LocalDateTime endTime2 = LocalDateTime.of(endTime1.getYear(), endTime1.getMonth(), endTime1.getDayOfMonth(), 0, 0, 0, 0);
String endTimeString = DateTimeUtils.localDateTimeToString(endTime2);
FirePointQueryResultBean firePointQueryResult = firePointQueryManager.queryFirePointBelongToUser(sysUserEntity, countyCode, startTimeString, endTimeString, null, null);
if (firePointQueryResult.isSuccess()) {
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, firePointQueryResult.getList(), locale);
} else {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, firePointQueryResult.getErrorMessage(), locale);
}
}
/**
* 根据火点编码查询火点信息 (Complete)
*/
@Override
public String selectFirePointByCode(String fireCode) {
if (TextUtils.isEmpty(fireCode)) {
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL, null, locale);
}
Specification<FirePointOrdinaryEntity> specification = (root, criteriaQuery, criteriaBuilder) -> {
//查询条件集合
List<Predicate> predicateList = new ArrayList<>();
predicateList.add(criteriaBuilder.equal(root.get("fireCode").as(String.class), fireCode));
Predicate[] predicateArray = new Predicate[predicateList.size()];
return criteriaBuilder.and(predicateList.toArray(predicateArray));
};
List<FirePointOrdinaryEntity> firePointOrdinaryList = firePointOrdinaryDao.findAll(specification, Sort.by(Sort.Direction.DESC, "satelliteTime"));
if (firePointOrdinaryList.size() == 1) {
AllFirePointVo firePointVo = FirePointConvertUtils.convert(firePointOrdinaryList.get(0));
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, firePointVo, locale);
}
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, null, locale);
}
}