Merge remote-tracking branch 'origin/main'
commit
068af770ee
@ -0,0 +1,107 @@
|
||||
package com.peteralbus.controller;
|
||||
|
||||
import com.peteralbus.entity.Estimate;
|
||||
import com.peteralbus.entity.EarthquakeInfo;
|
||||
import com.peteralbus.service.EstimateService;
|
||||
import com.peteralbus.service.EarthquakeInfoService;
|
||||
import com.peteralbus.util.EstimateUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@CrossOrigin
|
||||
@RestController
|
||||
@RequestMapping("/estimate")
|
||||
public class EstimateController {
|
||||
/**
|
||||
* The Estimate util.
|
||||
*/
|
||||
EstimateUtil estimateUtil;
|
||||
|
||||
EstimateService estimateService;
|
||||
/**
|
||||
* The Earthquake info service.
|
||||
*/
|
||||
EarthquakeInfoService earthquakeInfoService;
|
||||
|
||||
/**
|
||||
* Sets earthquake info service.
|
||||
*
|
||||
* @param earthquakeInfoService the earthquake info service
|
||||
*/
|
||||
@Autowired
|
||||
public void setEarthquakeInfoService(EarthquakeInfoService earthquakeInfoService)
|
||||
{
|
||||
this.earthquakeInfoService = earthquakeInfoService;
|
||||
}
|
||||
/**
|
||||
* Sets estimate util.
|
||||
*
|
||||
* @param estimateUtil the estimate util
|
||||
*/
|
||||
@Autowired
|
||||
public void setEstimateUtil(EstimateUtil estimateUtil)
|
||||
{
|
||||
this.estimateUtil = estimateUtil;
|
||||
}
|
||||
/**
|
||||
* Sets estimate service.
|
||||
*
|
||||
* @param estimateService
|
||||
*/
|
||||
@Autowired
|
||||
public void setAnalyzeService(EstimateService estimateService) {
|
||||
this.estimateService = estimateService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets estimate result.
|
||||
*
|
||||
* @param earthquakeId the earthquake info id
|
||||
* @return the estimate result
|
||||
*/
|
||||
@GetMapping("/getAnalyzeResult")
|
||||
public Estimate getPredictResult(long earthquakeId){
|
||||
System.out.println(earthquakeId);
|
||||
int count = estimateService.queryAnalyze(earthquakeId);
|
||||
Estimate estimate = new Estimate();
|
||||
if(count==0){
|
||||
Map<String, Object> mapParameter = new HashMap<String, Object>();
|
||||
mapParameter.put("earthquakeId",earthquakeId);
|
||||
EarthquakeInfo earthquakeInfo=earthquakeInfoService.queryInfoWithLine(mapParameter).get(0);
|
||||
double magnitude = earthquakeInfo.getMagnitude(),
|
||||
highIntensity = earthquakeInfo.getHighIntensity(),
|
||||
longitude = earthquakeInfo.getLongitude(),
|
||||
latitude = earthquakeInfo.getLatitude(),
|
||||
longRadius = earthquakeInfo.getIntensityLineList().get(2).getLongRadius(),
|
||||
shortRadius = earthquakeInfo.getIntensityLineList().get(2).getShortRadius();
|
||||
System.out.println(longRadius);
|
||||
LocalDateTime earthquakeTime = earthquakeInfo.getEarthquakeTime();
|
||||
double radians = Math.toRadians(latitude);//将角度转换为弧度。
|
||||
double minLongitude = longitude-shortRadius/(111-Math.cos(radians)),
|
||||
maxLongitude = longitude+shortRadius/(111-Math.cos(radians)),
|
||||
minLatitude = latitude-longRadius/111,
|
||||
maxLatitude = latitude+longRadius/111;
|
||||
int population=(int)estimateService.getPopulation(minLongitude,maxLongitude,minLatitude,maxLatitude);
|
||||
estimate.setPredictDeath(estimateUtil.deathPredict(earthquakeInfo.getEarthquakeId(),population,magnitude,highIntensity,earthquakeTime,longitude,latitude));
|
||||
estimate.setPredictEconomy(estimateUtil.economyPredict(earthquakeInfo.getHighIntensity()));
|
||||
estimate.setEarthquakeId(earthquakeId);
|
||||
estimate.setPopulation(population);
|
||||
Date date = new Date();
|
||||
estimate.setGmt_time(date);
|
||||
estimateService.insertAnalyze(estimate);
|
||||
}
|
||||
else
|
||||
{
|
||||
estimate = estimateService.queryAnalyzeById(earthquakeId);
|
||||
}
|
||||
return estimate;
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.peteralbus.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@ToString
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class Estimate {
|
||||
@TableId(type= IdType.ASSIGN_ID)
|
||||
private Long analyzeId;
|
||||
private Long earthquakeId;
|
||||
private Double predictDeath;
|
||||
private Double predictEconomy;
|
||||
private int population;
|
||||
private Date gmt_time;
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.peteralbus.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.peteralbus.entity.Estimate;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@Mapper
|
||||
public interface EstimateMapper extends BaseMapper<Estimate>
|
||||
{
|
||||
Double getPopulation(@Param("minLongitude") Double minLongitude, @Param("maxLongitude") Double maxLongitude, @Param("minLatitude") Double minLatitude, @Param("maxLatitude") Double maxLatitude);
|
||||
Estimate queryAnalyzeById(@Param("earthquakeId") long earthquakeId);
|
||||
int queryAnalyze(@Param("earthquakeId") long earthquakeId);
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.peteralbus.service;
|
||||
|
||||
import com.peteralbus.entity.Estimate;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
public interface EstimateService {
|
||||
/**
|
||||
* Get
|
||||
*
|
||||
* @param minLongitude the minimum Longitude
|
||||
* @param maxLongitude the maximum Longitude
|
||||
* @param minLatitude the minimum Latitude
|
||||
* @param maxLatitude the maximum Latitude
|
||||
* @return the double
|
||||
*/
|
||||
double getPopulation(@Param("minLongitude") Double minLongitude, @Param("maxLongitude") Double maxLongitude, @Param("minLatitude") Double minLatitude, @Param("maxLatitude") Double maxLatitude);
|
||||
int insertAnalyze(Estimate estimate);
|
||||
Estimate queryAnalyzeById(long earthquakeId);
|
||||
int queryAnalyze(@Param("earthquakeId") long earthquakeId);
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.peteralbus.service.impl;
|
||||
|
||||
import com.peteralbus.entity.Estimate;
|
||||
import com.peteralbus.mapper.EstimateMapper;
|
||||
import com.peteralbus.service.EstimateService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class EstimateServiceImpl implements EstimateService {
|
||||
|
||||
EstimateMapper estimateMapper;
|
||||
@Autowired
|
||||
public void setAnalyzeMapper(EstimateMapper estimateMapper){
|
||||
this.estimateMapper = estimateMapper;
|
||||
}
|
||||
@Override
|
||||
public double getPopulation(Double minLongitude, Double maxLongitude, Double minLatitude, Double maxLatitude) {
|
||||
return estimateMapper.getPopulation(minLongitude,maxLongitude,minLatitude,maxLatitude);
|
||||
}
|
||||
@Override
|
||||
public int insertAnalyze(Estimate analyze){
|
||||
int result = 0;
|
||||
result = estimateMapper.insert(analyze);
|
||||
if (result == 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Estimate queryAnalyzeById(long earthquakeId) {
|
||||
return estimateMapper.queryAnalyzeById(earthquakeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queryAnalyze(long earthquakeId) {
|
||||
return estimateMapper.queryAnalyze(earthquakeId);
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.peteralbus.mapper.EstimateMapper">
|
||||
<resultMap id="EarthquakeInfoWithLines" type="EarthquakeInfo">
|
||||
<id property="earthquakeId" column="earthquake_id"/>
|
||||
<result property="earthquakeName" column="earthquake_name"/>
|
||||
<result property="magnitude" column="magnitude"/>
|
||||
<result property="highIntensity" column="high_intensity"/>
|
||||
<result property="longitude" column="longitude"/>
|
||||
<result property="latitude" column="latitude"/>
|
||||
<result property="depth" column="depth"/>
|
||||
<result property="earthquakeTime" column="earthquake_time"/>
|
||||
<collection property="intensityLineList" javaType="list" ofType="IntensityLine">
|
||||
<id property="lineId" column="line_id"/>
|
||||
<result property="longRadius" column="long_radius"/>
|
||||
<result property="shortRadius" column="short_radius"/>
|
||||
<result property="angle" column="angle"/>
|
||||
<result property="intensity" column="intensity"/>
|
||||
<result property="earthquakeId" column="earthquake_id"/>
|
||||
</collection>
|
||||
</resultMap>
|
||||
|
||||
<select id="getPopulation" resultType="double">
|
||||
select avg(z) from population
|
||||
where x>#{minLongitude} and x <#{maxLongitude} and y>#{minLatitude} and y < #{maxLatitude}
|
||||
</select>
|
||||
|
||||
<select id="queryAnalyzeById" resultType="Estimate">
|
||||
select predict_death,predict_economy,population
|
||||
from estimate
|
||||
where earthquake_id = #{earthquakeId}
|
||||
</select>
|
||||
|
||||
<select id="queryAnalyze" resultType="int">
|
||||
select count(*)
|
||||
from estimate
|
||||
where earthquake_id = #{earthquakeId}
|
||||
</select>
|
||||
</mapper>
|
Loading…
Reference in New Issue