0717-1问题修改

master
Zangzhipeng 1 year ago
parent 2a733d65f1
commit 1c02d5f852
  1. 6
      .idea/sqldialects.xml
  2. 10
      hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java
  3. 3
      hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java
  4. 109
      hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java
  5. 115
      hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CoordinateConverter.java
  6. 6
      hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml
  7. 2
      hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java
  8. 13
      log/monitor-info.log

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml" dialect="GenericSQL" />
</component>
</project>

@ -8,6 +8,7 @@ import com.hisense.hiatmp.server_api.mapper.OperatorMapper;
import com.hisense.hiatmp.model.common.DangerProblem; import com.hisense.hiatmp.model.common.DangerProblem;
import com.hisense.hiatmp.server_api.service.HighDangerService; import com.hisense.hiatmp.server_api.service.HighDangerService;
import com.hisense.hiatmp.model.dmr.Point; import com.hisense.hiatmp.model.dmr.Point;
import com.hisense.hiatmp.server_api.utils.CoordinateConverter;
import com.hisense.hiatmp.server_api.utils.CoordinateUtils; import com.hisense.hiatmp.server_api.utils.CoordinateUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -354,11 +355,16 @@ public class HighDangerController {
String[] split = roadInfo.getCoordinate().split(","); String[] split = roadInfo.getCoordinate().split(",");
for(int i = 0; i < split.length; i+=2){ for(int i = 0; i < split.length; i+=2){
CoordinateConverter coordinateConverter = new CoordinateConverter();
Map<String,Float> pointMap = new LinkedHashMap<>(); Map<String,Float> pointMap = new LinkedHashMap<>();
float x = Float.parseFloat(split[i]); float x = Float.parseFloat(split[i]);
float y = Float.parseFloat(split[i + 1]); float y = Float.parseFloat(split[i + 1]);
pointMap.put("longitude", x);
pointMap.put("latitude", y); CoordinateConverter.AMap transform = highDangerService.transform(x, y);
pointMap.put("longitude", transform.getLongitude());
pointMap.put("latitude", transform.getLatitude());
coordinateMapTemporary.add(pointMap); coordinateMapTemporary.add(pointMap);
} }
roadInfo.setCoordinateList(coordinateMapTemporary); roadInfo.setCoordinateList(coordinateMapTemporary);

@ -2,6 +2,7 @@ package com.hisense.hiatmp.server_api.service;
import com.hisense.hiatmp.model.common.ThtDangerItems; import com.hisense.hiatmp.model.common.ThtDangerItems;
import com.hisense.hiatmp.model.dmr.Point; import com.hisense.hiatmp.model.dmr.Point;
import com.hisense.hiatmp.server_api.utils.CoordinateConverter;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -25,5 +26,7 @@ public interface HighDangerService {
Boolean isPicture(MultipartFile file); Boolean isPicture(MultipartFile file);
CoordinateConverter.AMap transform(double wgLon, double wgLat);
// Map<String, Map<Double,String>> sortMapByValue(HashMap<String, Object> unsortedMap); // Map<String, Map<Double,String>> sortMapByValue(HashMap<String, Object> unsortedMap);
} }

@ -4,6 +4,7 @@ import com.hisense.hiatmp.server_api.mapper.HighDangerMapper;
import com.hisense.hiatmp.server_api.service.HighDangerService; import com.hisense.hiatmp.server_api.service.HighDangerService;
import com.hisense.hiatmp.model.common.ThtDangerItems; import com.hisense.hiatmp.model.common.ThtDangerItems;
import com.hisense.hiatmp.model.dmr.Point; import com.hisense.hiatmp.model.dmr.Point;
import com.hisense.hiatmp.server_api.utils.CoordinateConverter;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -22,6 +23,19 @@ import java.util.stream.Collectors;
@Service @Service
public class HighDangerBaseServiceImpl implements HighDangerService { public class HighDangerBaseServiceImpl implements HighDangerService {
/**
* 椭球参数
*/
private static double pi = 3.14159265358979324;
/**
* 卫星椭球坐标投影到平面地图坐标系的投影因子
*/
private static double a = 6378245.0;
/**
* 椭球的偏心率
*/
private static double ee = 0.00669342162296594323;
private static final double EARTH_RADIUS = 6378137; private static final double EARTH_RADIUS = 6378137;
/*@Value("${file.path.local}") /*@Value("${file.path.local}")
@ -198,12 +212,107 @@ public class HighDangerBaseServiceImpl implements HighDangerService {
img = null; img = null;
} }
// @Override // @Override
// public Path saveMultipartFiles(MultipartFile multipartFiles) { // public Path saveMultipartFiles(MultipartFile multipartFiles) {
// return null; // return null;
// } // }
} }
@Override
public CoordinateConverter.AMap transform(double wgLon, double wgLat) {
if (outOfChina(wgLat, wgLon)) {
return new CoordinateConverter.AMap((float) wgLon, (float) wgLat);
}
double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
double radLat = wgLat / 180.0 * pi;
double magic = Math.sin(radLat);
magic = 1 - ee * magic * magic;
double sqrtMagic = Math.sqrt(magic);
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
double transLat = wgLat + dLat;
double transLon = wgLon + dLon;
return new CoordinateConverter.AMap((float) transLon, (float) transLat);
}
/**
* 判断是否为国外坐标不在国内不做偏移
*
* @param lat
* @param lon
* @return
*/
private static Boolean outOfChina(double lat, double lon) {
if (lon < 72.004 || lon > 137.8347)
return true;
if (lat < 0.8293 || lat > 55.8271)
return true;
return false;
}
/**
* 纬度转换
*
* @param x
* @param y
* @return
*/
private static double transformLat(double x, double y) {
double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
return ret;
}
/**
* 经度转换
*
* @param x
* @param y
* @return
*/
private static double transformLon(double x, double y) {
double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
return ret;
}
/**
* 高德经纬度类
*/
public static class AMap {
/**
* 经度
*/
private double longitude;
/**
* 维度
*/
private double latitude;
public AMap(double longitude, double latitude) {
this.longitude = longitude;
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public double getLatitude() {
return latitude;
}
}
// public Map<String, Map<Double,String>> sortMapByValue(HashMap<String, Object> unsortedMap) { // public Map<String, Map<Double,String>> sortMapByValue(HashMap<String, Object> unsortedMap) {
// Map<String, Map<Double,String>> sortedMap = new LinkedHashMap<>(); // Map<String, Map<Double,String>> sortedMap = new LinkedHashMap<>();
// Comparator<Double> valueComparator = Comparator.naturalOrder(); // Comparator<Double> valueComparator = Comparator.naturalOrder();

@ -0,0 +1,115 @@
package com.hisense.hiatmp.server_api.utils;
public class CoordinateConverter {
/**
* 椭球参数
*/
private static double pi = 3.14159265358979324;
/**
* 卫星椭球坐标投影到平面地图坐标系的投影因子
*/
private static double a = 6378245.0;
/**
* 椭球的偏心率
*/
private static double ee = 0.00669342162296594323;
/**
* 经纬度 GPS转高德
*
* @param wgLon GPS经度
* @param wgLat GPS维度
* @return 转化后的经纬度坐标
*/
public static AMap transform(double wgLon, double wgLat) {
if (outOfChina(wgLat, wgLon)) {
return new AMap((float) wgLon, (float) wgLat);
}
double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
double radLat = wgLat / 180.0 * pi;
double magic = Math.sin(radLat);
magic = 1 - ee * magic * magic;
double sqrtMagic = Math.sqrt(magic);
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
double transLat = wgLat + dLat;
double transLon = wgLon + dLon;
return new AMap((float) transLon, (float) transLat);
}
/**
* 判断是否为国外坐标不在国内不做偏移
*
* @param lat
* @param lon
* @return
*/
private static Boolean outOfChina(double lat, double lon) {
if (lon < 72.004 || lon > 137.8347)
return true;
if (lat < 0.8293 || lat > 55.8271)
return true;
return false;
}
/**
* 纬度转换
*
* @param x
* @param y
* @return
*/
private static double transformLat(double x, double y) {
double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
return ret;
}
/**
* 经度转换
*
* @param x
* @param y
* @return
*/
private static double transformLon(double x, double y) {
double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;
return ret;
}
/**
* 高德经纬度类
*/
public static class AMap {
/**
* 经度
*/
private float longitude;
/**
* 维度
*/
private float latitude;
public AMap(float longitude, float latitude) {
this.longitude = longitude;
this.latitude = latitude;
}
public float getLongitude() {
return longitude;
}
public float getLatitude() {
return latitude;
}
}
}

@ -86,7 +86,7 @@
hdb.pc_end_time &gt; hdb.pc_end_time &gt;
CURRENT_TIMESTAMP - INTERVAL '3 days' CURRENT_TIMESTAMP - INTERVAL '3 days'
and and
hdb.pc_end_time &lt;= hdb.pc_end_time &lt;
CURRENT_TIMESTAMP CURRENT_TIMESTAMP
THEN 1 ELSE 0 END) AS count THEN 1 ELSE 0 END) AS count
FROM tht_hidden_danger_base hdb FROM tht_hidden_danger_base hdb
@ -343,7 +343,7 @@
#{peakHours}, #{peakHours},
#{normalTraffic}, #{normalTraffic},
#{largeVehicleRate}, #{largeVehicleRate},
#{vehicleTraffic}, #{nonvehicleTraffic},
#{lastModeUser}, #{lastModeUser},
#{lastModeDate}) #{lastModeDate})
</insert> </insert>
@ -356,7 +356,7 @@
"PEAK_HOURS" = #{peakHours}, "PEAK_HOURS" = #{peakHours},
"NORMAL_TRAFFIC" = #{normalTraffic}, "NORMAL_TRAFFIC" = #{normalTraffic},
"LARGE_VEHICLE_RATE" = #{largeVehicleRate}, "LARGE_VEHICLE_RATE" = #{largeVehicleRate},
"NONVEHICLE_TRAFFIC" = #{vehicleTraffic}, "NONVEHICLE_TRAFFIC" = #{nonvehicleTraffic},
"LAST_MOD_USER" = #{lastModeUser}, "LAST_MOD_USER" = #{lastModeUser},
"LAST_MOD_DATE" = #{lastModeDate} "LAST_MOD_DATE" = #{lastModeDate}
where "BUSINESS_ID" = #{businessId} where "BUSINESS_ID" = #{businessId}

@ -32,7 +32,7 @@ public class ManualInvestigation implements Serializable {
String peakHours; String peakHours;
String normalTraffic; String normalTraffic;
String largeVehicleRate; String largeVehicleRate;
String vehicleTraffic; String nonvehicleTraffic;
String lastModeUser; String lastModeUser;
Date lastModeDate; Date lastModeDate;

@ -1,13 +0,0 @@
2024-07-10 01:10:47,770 [parallel-1] WARN de.codecentric.boot.admin.server.services.IntervalCheck - Unexpected error in status-check
reactor.core.Exceptions$OverflowException: Could not emit tick 4136 due to lack of requests (interval doesn't support small downstream requests that replenish slower than the ticks)
at reactor.core.Exceptions.failWithOverflow(Exceptions.java:234) ~[reactor-core-3.3.4.RELEASE.jar:3.3.4.RELEASE]
at reactor.core.publisher.FluxInterval$IntervalRunnable.run(FluxInterval.java:130) [reactor-core-3.3.4.RELEASE.jar:3.3.4.RELEASE]
at reactor.core.scheduler.PeriodicWorkerTask.call(PeriodicWorkerTask.java:59) [reactor-core-3.3.4.RELEASE.jar:3.3.4.RELEASE]
at reactor.core.scheduler.PeriodicWorkerTask.run(PeriodicWorkerTask.java:73) [reactor-core-3.3.4.RELEASE.jar:3.3.4.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_411]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_411]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_411]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_411]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_411]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_411]
at java.lang.Thread.run(Thread.java:750) [?:1.8.0_411]
Loading…
Cancel
Save