新疆大屏开发及bug修改

This commit is contained in:
wanghao
2025-07-08 16:49:47 +08:00
parent e93fb4de8d
commit 3a43716e9b
9 changed files with 185 additions and 57 deletions
@@ -111,6 +111,7 @@ public class EmergencyResourceApiServiceImpl implements EmergencyResourceApiServ
ext.setAddress(emergencyHealthRoom.getOrgName());
ext.setLatitude(new BigDecimal(emergencyHealthRoom.getLatitude()));
ext.setLongitude(new BigDecimal(emergencyHealthRoom.getLongitude()));
ext.setType("3");
resources.add(ext);
}
home.setDicts(dictItems);
@@ -109,15 +109,16 @@ public class LargeScreenImpl {
* Ps:新增type
*/
private void startPush(EmergencySocket socket, String busId, EmergencyCenter center,Integer type) {
// Ps: 新疆不需要走旧版大屏逻辑
// 根据 center.getDefaultCenter() 状态 走不同逻辑 true:旧版逻辑 false:新版逻辑
if (center.getDefaultCenter()) {
this.defaultLargeScreenPush(socket);
this.defaultSmsPush(socket, busId, center, type);
} else {
// if (center.getDefaultCenter()) {
// this.defaultLargeScreenPush(socket);
// this.defaultSmsPush(socket, busId, center, type);
// } else {
log.info("新版大屏推送... 执行时间: {}", System.currentTimeMillis());
webSocket.pushMessageBase(socket);
this.newSmsPush(socket, busId, center, type);
}
// }
}
/**
@@ -244,6 +245,7 @@ public class LargeScreenImpl {
hospitalSocketVo.setName(item.getName());
hospitalSocketVo.setLon(item.getLon());
hospitalSocketVo.setLat(item.getLat());
hospitalSocketVo.setDistance(item.getDistance());
hospitalSocketVoList.add(hospitalSocketVo);
});
}
@@ -465,13 +467,15 @@ public class LargeScreenImpl {
}
// 先对整个列表进行排序
allList.sort(new Comparator<TblBaseHospitalVo>() {
@Override
public int compare(TblBaseHospitalVo h1, TblBaseHospitalVo h2) {
double dist1 = distance(lat, lon, h1.getLat().doubleValue(), h1.getLon().doubleValue());
double dist2 = distance(lon, lat, h2.getLat().doubleValue(), h2.getLon().doubleValue());
return Double.compare(dist1, dist2);
}
allList.sort((h1, h2) -> {
double h1Lat = h1.getLat().doubleValue();
double h1Lon = h1.getLon().doubleValue();
double h2Lat = h2.getLat().doubleValue();
double h2Lon = h2.getLon().doubleValue();
double dist1 = distance(lat, lon, h1Lat, h1Lon);
double dist2 = distance(lat, lon, h2Lat, h2Lon);
return Double.compare(dist1, dist2);
});
// 选择前三个最近的点
@@ -3,6 +3,7 @@ package com.renkang.emergency.largeScreen.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@@ -19,6 +20,17 @@ public class HealthBloodPressureVO {
*/
@Schema(title = "姓名")
private String name;
/**
* 性别
*/
@Schema(title = "性别")
@Dict(dicCode = "sex2")
private Integer sex;
/**
* 年龄
*/
@Schema(title = "年龄")
private Integer age;
/**
* 收缩压
*/
@@ -3,6 +3,7 @@ package com.renkang.emergency.largeScreen.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@@ -19,6 +20,17 @@ public class HealthBloodSugarVO {
*/
@Schema(title = "姓名")
private String name;
/**
* 性别
*/
@Schema(title = "性别")
@Dict(dicCode = "sex2")
private Integer sex;
/**
* 年龄
*/
@Schema(title = "年龄")
private Integer age;
/**
* 血糖值
*/
@@ -3,6 +3,7 @@ package com.renkang.emergency.largeScreen.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@@ -19,6 +20,17 @@ public class HealthWeightLossVO {
*/
@Schema(title = "姓名")
private String name;
/**
* 性别
*/
@Schema(title = "性别")
@Dict(dicCode = "sex2")
private Integer sex;
/**
* 年龄
*/
@Schema(title = "年龄")
private Integer age;
/**
* 腰围(CM
*/
@@ -2,6 +2,7 @@ package com.renkang.emergency.largeScreen.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
@Data
public class MedicalAbnormalVO {
@@ -15,6 +16,17 @@ public class MedicalAbnormalVO {
*/
@Schema(title = "姓名")
private String name;
/**
* 性别
*/
@Schema(title = "性别")
@Dict(dicCode = "sex2")
private Integer sex;
/**
* 年龄
*/
@Schema(title = "年龄")
private Integer age;
/**
* 体检医院
*/
@@ -40,6 +40,31 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
private final IEmergencyHealthRoomService roomService;
private final RedisClientUtil redisClientUtil;
private static final double MIN_LONGITUDE = 80.0;
private static final double MAX_LONGITUDE = 100.0;
private static final double MIN_LATITUDE = 35.0;
private static final double MAX_LATITUDE = 50.0;
private static final String[] CITIES = {
"乌鲁木齐", "喀什", "克拉玛依", "吐鲁番", "哈密",
"阿克苏", "巴音郭楞", "昌吉", "石河子", "博乐"
};
private static final String[] SURNAMES = {
"", "", "", "", "",
"", "", "", "", "",
"", "", "", "", "",
"", "", "", "", ""
};
private static final String[] FIRST_NAMES = {
"", "", "", "", "",
"", "", "", "", "",
"", "", "", "", "",
"", "", "", "", ""
};
@Override
public List<LargeScreenMap> map(String type) {
List<LargeScreenMap> maps = new ArrayList<>();
@@ -64,23 +89,16 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
@Override
public List<HealthRoomBaseVO> healthRoomBase(HealthRoomBaseDTO dto){
double MIN_LATITUDE = 35.0;
double MAX_LATITUDE = 49.0;
double MIN_LONGITUDE = 73.0;
double MAX_LONGITUDE = 95.0;
List<HealthRoomBaseVO> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
HealthRoomBaseVO baseVO = new HealthRoomBaseVO();
baseVO.setId(UUID.randomUUID().toString());
baseVO.setAddress("新疆大厂");
Random random = new Random();
// 随机生成纬度
double latitude = MIN_LATITUDE + (MAX_LATITUDE - MIN_LATITUDE) * random.nextDouble();
// 随机生成经度
double longitude = MIN_LONGITUDE + (MAX_LONGITUDE - MIN_LONGITUDE) * random.nextDouble();
baseVO.setLat(String.valueOf(latitude));
baseVO.setLat(String.valueOf(longitude));
baseVO.setDepartName("新疆大厂的单位");
String[] data = generateRandomLocation();
baseVO.setAddress(data[0]);
baseVO.setLon(data[1]);
baseVO.setLat(data[2]);
baseVO.setDepartName("新疆大厂的单位"+i);
baseVO.setBuildDate(new Date());
list.add(baseVO);
}
// 查询第三方接口返回 此接口返回对象跟原有可能不太一样 要注意
@@ -106,7 +124,7 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
for (int i = 0; i < 10; i++) {
HealthRoomVO roomVO = new HealthRoomVO();
roomVO.setName("小屋");
roomVO.setDepartName("新疆大厂");
roomVO.setDepartName("新疆大厂"+i);
roomVO.setCheckInDate(DateUtil.today());
Random random = new Random();
@@ -132,9 +150,12 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
for (int i = 0; i < 20; i++) {
MedicalAbnormalVO abnormalVO = new MedicalAbnormalVO();
abnormalVO.setCheckInDate(DateUtil.today());
abnormalVO.setHospitalName("新疆医院");
abnormalVO.setDepartName("新疆大厂");
abnormalVO.setName("张三");
abnormalVO.setHospitalName("新疆医院"+i);
abnormalVO.setDepartName("新疆大厂"+i);
Random random = new Random();
abnormalVO.setSex(random.nextInt(2) + 1);
abnormalVO.setAge(random.nextInt(65 - 18 + 1) + 18);
abnormalVO.setName(generateRandomName());
list.add(abnormalVO);
}
page.setRecords(list);
@@ -149,13 +170,17 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
List<HealthWeightLossVO> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
HealthWeightLossVO weightLossVO = new HealthWeightLossVO();
weightLossVO.setName("张三");
weightLossVO.setName(generateRandomName());
weightLossVO.setWeight("80");
weightLossVO.setDepartName("新疆大厂");
weightLossVO.setDepartName("新疆大厂"+i);
weightLossVO.setBmi("26.8");
weightLossVO.setWaist("80");
weightLossVO.setHeight("180");
weightLossVO.setBmiFlag("0");
weightLossVO.setInputDate(new Date());
Random random = new Random();
weightLossVO.setSex(random.nextInt(2) + 1);
weightLossVO.setAge(random.nextInt(65 - 18 + 1) + 18);
list.add(weightLossVO);
}
page.setRecords(list);
@@ -170,11 +195,14 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
List<HealthBloodSugarVO> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
HealthBloodSugarVO bloodSugarVO = new HealthBloodSugarVO();
bloodSugarVO.setName("张三");
bloodSugarVO.setDepartName("新疆大厂");
bloodSugarVO.setName(generateRandomName());
bloodSugarVO.setDepartName("新疆大厂"+i);
bloodSugarVO.setBmiFlag("0");
bloodSugarVO.setInputDate(new Date());
bloodSugarVO.setBsVal("100");
Random random = new Random();
bloodSugarVO.setSex(random.nextInt(2) + 1);
bloodSugarVO.setAge(random.nextInt(65 - 18 + 1) + 18);
list.add(bloodSugarVO);
}
page.setRecords(list);
@@ -189,11 +217,16 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
List<HealthBloodPressureVO> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
HealthBloodPressureVO bloodPressureVO = new HealthBloodPressureVO();
bloodPressureVO.setName("张三");
bloodPressureVO.setDepartName("新疆大厂");
bloodPressureVO.setName(generateRandomName());
bloodPressureVO.setDepartName("新疆大厂"+i);
bloodPressureVO.setInputDate(new Date());
bloodPressureVO.setDbp("25");
bloodPressureVO.setDbpFlag("0");
bloodPressureVO.setSbp("15");
bloodPressureVO.setSbpFlag("0");
Random random = new Random();
bloodPressureVO.setSex(random.nextInt(2) + 1);
bloodPressureVO.setAge(random.nextInt(65 - 18 + 1) + 18);
list.add(bloodPressureVO);
}
page.setRecords(list);
@@ -203,23 +236,16 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
@Override
public List<HospitalVO> hospital(){
double MIN_LATITUDE = 35.0;
double MAX_LATITUDE = 49.0;
double MIN_LONGITUDE = 73.0;
double MAX_LONGITUDE = 95.0;
List<HospitalVO> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
HospitalVO hospitalVO = new HospitalVO();
hospitalVO.setHospitalName("新疆医院");
hospitalVO.setAddress("新疆大厂");
hospitalVO.setHospitalName("新疆医院"+i);
String[] data = generateRandomLocation();
hospitalVO.setAddress(data[0]);
hospitalVO.setAlias(""+i);
hospitalVO.setContractDate(new Date());
Random random = new Random();
// 随机生成纬度
double latitude = MIN_LATITUDE + (MAX_LATITUDE - MIN_LATITUDE) * random.nextDouble();
// 随机生成经度
double longitude = MIN_LONGITUDE + (MAX_LONGITUDE - MIN_LONGITUDE) * random.nextDouble();
hospitalVO.setLat(String.valueOf(latitude));
hospitalVO.setLat(String.valueOf(longitude));
hospitalVO.setLon(data[1]);
hospitalVO.setLat(data[2]);
list.add(hospitalVO);
}
return list;
@@ -341,4 +367,34 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
healthSign.setBloodPressureAbnormalCountMonth(30);
redisClientUtil.set(MEDICAL,HEALTH_SIGN,healthSign);
}
public static String[] generateRandomLocation() {
Random random = new Random();
// 生成随机经纬度
double longitude = MIN_LONGITUDE + (MAX_LONGITUDE - MIN_LONGITUDE) * random.nextDouble();
double latitude = MIN_LATITUDE + (MAX_LATITUDE - MIN_LATITUDE) * random.nextDouble();
// 随机选择一个城市作为地址
String city = CITIES[random.nextInt(CITIES.length)];
String[] data = new String[3];
data[0] = city;
data[1] = String.valueOf(longitude);
data[2] = String.valueOf(latitude);
return data;
}
public static String generateRandomName() {
Random random = new Random();
// 随机选择一个姓
String surname = SURNAMES[random.nextInt(SURNAMES.length)];
// 随机选择一个名
String firstName = FIRST_NAMES[random.nextInt(FIRST_NAMES.length)];
// 组合成完整姓名
return surname + firstName;
}
}
@@ -4,11 +4,15 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.renkang.emergency.entity.*;
import com.renkang.emergency.entity.dto.ResourcesAllDTO;
import com.renkang.emergency.largeScreen.entity.dto.HealthRoomDTO;
import com.renkang.emergency.mapper.EmergencyHealthRoomMapper;
import com.renkang.emergency.mapper.TblAmbulanceGpsMapper;
import com.renkang.emergency.mapper.TblBaseHospitalMapper;
import com.renkang.emergency.service.IEmergencyCenterResourceService;
import com.renkang.emergency.service.IEmergencyHealthRoomService;
import com.renkang.emergency.service.ITblAmbulanceGpsService;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
@@ -16,6 +20,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -36,6 +41,8 @@ public class TblAmbulanceGpsServiceImpl extends ServiceImpl<TblAmbulanceGpsMappe
private TblBaseHospitalMapper tblBaseHospitalMapper;
@Resource
private IEmergencyCenterResourceService resourceService;
@Resource
private EmergencyHealthRoomMapper roomMapper;
@Override
public List<TblBaseHospitalVo> getAllList(String lat, String lon, String type, String keys) {
@@ -48,18 +55,28 @@ public class TblAmbulanceGpsServiceImpl extends ServiceImpl<TblAmbulanceGpsMappe
search.setType(type);
}
List<TblBaseHospitalVo> hospitalList = tblBaseHospitalMapper.getHospitalList(search);
MPJLambdaWrapper<EmergencyHealthRoom> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAs(EmergencyHealthRoom::getId, TblBaseHospitalVo::getId);
wrapper.selectAs(EmergencyHealthRoom::getName, TblBaseHospitalVo::getName);
wrapper.selectAs(EmergencyHealthRoom::getLatitude, TblBaseHospitalVo::getLat);
wrapper.selectAs(EmergencyHealthRoom::getLongitude, TblBaseHospitalVo::getLon);
wrapper.selectAs("3", TblBaseHospitalVo::getType);
List<TblBaseHospitalVo> list = roomMapper.selectJoinList(TblBaseHospitalVo.class, wrapper);
if (CollUtil.isNotEmpty(list)) {
hospitalList.addAll(list);
}
Double lat1 = Double.parseDouble(lat);
Double lon1 = Double.parseDouble(lon);
List<TblBaseHospitalVo> voList = new ArrayList<>();
for (TblBaseHospitalVo tblBaseHospitalVo : hospitalList) {
if (tblBaseHospitalVo.getLat()!=null && Double.parseDouble(tblBaseHospitalVo.getLat().toString()) != 0.0 && Double.parseDouble(tblBaseHospitalVo.getLon().toString()) != 0.0) {
if (tblBaseHospitalVo.getLat() != null && Double.parseDouble(tblBaseHospitalVo.getLat().toString()) != 0.0 && Double.parseDouble(tblBaseHospitalVo.getLon().toString()) != 0.0) {
Double lat2 = Double.parseDouble(tblBaseHospitalVo.getLat().toString());
Double lng2 = Double.parseDouble(tblBaseHospitalVo.getLon().toString());
Double distance = getDistance(lat1, lon1, lat2, lng2);
if (distance > 1000d) {
tblBaseHospitalVo.setDistance(Math.round((distance / 1000d) * 100) / 100 + "km");
tblBaseHospitalVo.setDistance((int) (distance / 1000d) + "km");
} else {
tblBaseHospitalVo.setDistance(Math.round(distance * 100) / 100 + "m");
tblBaseHospitalVo.setDistance((int) (distance * 1) + "m");
}
voList.add(tblBaseHospitalVo);
}
@@ -86,7 +103,7 @@ public class TblAmbulanceGpsServiceImpl extends ServiceImpl<TblAmbulanceGpsMappe
double lon1 = Double.parseDouble(dto.getLon());
List<TblBaseHospitalVo> voList = new ArrayList<>();
for (TblBaseHospitalVo tblBaseHospitalVo : hospitalList) {
if (tblBaseHospitalVo.getLat()!=null && Double.parseDouble(tblBaseHospitalVo.getLat().toString()) != 0.0 && Double.parseDouble(tblBaseHospitalVo.getLon().toString()) != 0.0) {
if (tblBaseHospitalVo.getLat() != null && Double.parseDouble(tblBaseHospitalVo.getLat().toString()) != 0.0 && Double.parseDouble(tblBaseHospitalVo.getLon().toString()) != 0.0) {
double lat2 = Double.parseDouble(tblBaseHospitalVo.getLat().toString());
double lng2 = Double.parseDouble(tblBaseHospitalVo.getLon().toString());
double distance = getDistance(lat1, lon1, lat2, lng2);
@@ -103,6 +120,7 @@ public class TblAmbulanceGpsServiceImpl extends ServiceImpl<TblAmbulanceGpsMappe
/**
* 获取救护车gps信息
*
* @return
*/
@Override
@@ -423,13 +423,14 @@ public class WatchMonitorDataServiceImpl extends ServiceImpl<WatchMonitorDataMap
center.setDefaultCenter(true);
}
socketVo.setCenterId(center.getId());
if (center.getDefaultCenter()) {
log.info("旧版大屏推送... 执行时间: {}", System.currentTimeMillis());
this.defaultLargeScreenPush(socketVo);
} else {
// Ps: 新疆不需要走旧版大屏逻辑
// if (center.getDefaultCenter()) {
// log.info("旧版大屏推送... 执行时间: {}", System.currentTimeMillis());
// this.defaultLargeScreenPush(socketVo);
// } else {
log.info("新版大屏推送... 执行时间: {}", System.currentTimeMillis());
webSocket.pushMessageBase(socketVo);
}
// }
this.sendSms(monitorDataEntity, socketVo, this.findSmsPhone(center, socketVo));
}