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> downloadFirePointByVip(String yesterday); // // */ // @Override // public String downloadVipUserFilePoint(HttpServletRequest request, HttpServletResponse response) { // LocalDate now = LocalDate.now(); // List> 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 idList = ListUtils.toStringList(ids, ","); // if (idList.isEmpty()) { // return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "无数据!", locale); // } // List> list = new ArrayList<>(); // List sourceList = firePointDao.findAllById(ListUtils.stringListToLongList(idList)); // for (FirePointEntity source : sourceList) { // Map 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 specification = (root, criteriaQuery, criteriaBuilder) -> { //查询条件集合 List 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 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); } }