新需求开发

This commit is contained in:
wanghao
2025-09-19 16:26:25 +08:00
parent 853eefb48c
commit e9fada7bbd
14 changed files with 308 additions and 109 deletions
@@ -137,4 +137,7 @@ public class CareUserListVo {
@Schema(title = "同型半胱氨酸当前监测值") @Schema(title = "同型半胱氨酸当前监测值")
private String homocysteineCurrent; private String homocysteineCurrent;
@Schema(title = "关爱联络员姓名")
private String careLiaisonName;
} }
@@ -33,4 +33,13 @@ public class EmergencySocket {
private String queue; private String queue;
private String noticeId; private String noticeId;
@Schema(title = "关爱联络员姓名")
private String careLiaisonName;
@Schema(title = "关爱联络员电话")
private String careLiaisonPhone;
@Schema(title = "急救人员姓名")
private String lifeguardName;
@Schema(title = "急救人员电话")
private String lifeguardPhone;
} }
@@ -23,10 +23,36 @@ public class TblBaseHospitalVo {
private String type; private String type;
@Schema(title = "中心医疗点标识") @Schema(title = "中心医疗点标识")
private boolean centerResource=false; private boolean centerResource=false;
@Schema(title = "管理员/联系人姓名")
private String manageName;
@Schema(title = "管理员/联系人电话")
private String managePhone;
@Schema(title = "地址")
private String address;
private String ambulance; private String ambulance;
private String docNum; private String docNum;
private String nurseNum; private String nurseNum;
private String expertNum; private String expertNum;
private String distance; private String distance;
public TblBaseHospitalVo() {}
public TblBaseHospitalVo(Resource resource){
this.id = resource.getId();
this.name = resource.getName();
this.lat = resource.getLatitude();
this.lon = resource.getLongitude();
this.type = resource.getType();
this.address = resource.getAddress();
}
public TblBaseHospitalVo(XjAed xjAed){
this.id = xjAed.getId();
this.name = xjAed.getName();
this.lat = xjAed.getLatitude();
this.lon = xjAed.getLongitude();
this.type = "4";
this.address = xjAed.getAddress();
}
} }
@@ -1,58 +0,0 @@
package com.renkang.emergency.entity.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class LoveTrendVO {
private String id;
private String empId;
private String treatPlanResponse;
private String dietSuggestionResponse;
private String sportGuideResponse;
private String lifeManageResponse;
private String createDate;
private String updateDate;
private String createBy;
private String updateBy;
private String delFlag;
private String dataLevel;
private String negativeList;
private Integer flagFat;
private BigDecimal bmi;
private BigDecimal height;
private BigDecimal weight;
private BigDecimal bmiCurrent;
private String hypertension;
private String systolicPressureAvg;
private String systolicPressureTarget;
private String systolicPressureCurrent;
private String diastolicPressureAvg;
private String diastolicPressureTarget;
private String diastolicPressureCurrent;
private String diabetes;
private String glu;
private String bloodSugarTarget;
private String bloodSugarCurrent;
private String ldl;
private String ldlTarget;
private String ldlCurrent;
private String tc;
private String tcTarget;
private String tcCurrent;
private String tg;
private String tgTarget;
private String tgCurrent;
private String uricAcid;
private String uricAcidTarget;
private String uricAcidCurrent;
private String homocysteine;
private String homocysteineTarget;
private String homocysteineCurrent;
private String workUnit;
private String workUnitId;
private Integer age;
private String sex;
private String name;
}
@@ -29,6 +29,7 @@ import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.system.vo.LoginUserNew; import org.jeecg.common.system.vo.LoginUserNew;
import org.jeecg.global.GlobalUtils; import org.jeecg.global.GlobalUtils;
import org.jeecg.modules.manager.ISysCache; import org.jeecg.modules.manager.ISysCache;
import org.jeecg.modules.system.entity.HealthUserEmployeeEx;
import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUser;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -226,12 +227,22 @@ public class LargeScreenImpl {
*/ */
private void setPushMsg(EmergencySocket socket, EmergencyCenter center, Double longitude, Double latitude) { private void setPushMsg(EmergencySocket socket, EmergencyCenter center, Double longitude, Double latitude) {
LoginUser sysUser = GlobalUtils.getLoginUser(); LoginUser sysUser = GlobalUtils.getLoginUser();
ListUser listUser = new ListUser();
listUser.setUserIds(Collections.singletonList(sysUser.getId()));
List<HealthUserEmployeeEx> exList = sysBaseAPI.listEmployeeUserByIds(listUser);
socket.setPopType(1); socket.setPopType(1);
socket.setUserId(sysUser.getId()); socket.setUserId(sysUser.getId());
socket.setRealName(sysUser.getRealname()); socket.setRealName(sysUser.getRealname());
socket.setAge(sysUser.getAge()); socket.setAge(sysUser.getAge());
socket.setSex(sysUser.getSex()); socket.setSex(sysUser.getSex());
socket.setPhone(sysUser.getPhone()); socket.setPhone(sysUser.getPhone());
if (CollUtil.isNotEmpty(exList) && !exList.isEmpty()) {
HealthUserEmployeeEx ex = exList.get(0);
socket.setCareLiaisonName(ex.getCareLiaisonName());
socket.setCareLiaisonPhone(ex.getCareLiaisonPhone());
socket.setLifeguardName(ex.getLifeguardName());
socket.setLifeguardPhone(ex.getLifeguardPhone());
}
this.setDepartmentInfo(socket, sysUser.getOrgCode()); this.setDepartmentInfo(socket, sysUser.getOrgCode());
// 获取所有资源 // 获取所有资源
List<TblBaseHospitalVo> allList = tblAmbulanceGpsService.getAllList(String.valueOf(center.getLatitude()), String.valueOf(center.getLongitude()), null, null); List<TblBaseHospitalVo> allList = tblAmbulanceGpsService.getAllList(String.valueOf(center.getLatitude()), String.valueOf(center.getLongitude()), null, null);
@@ -20,6 +20,6 @@ public class XjAedController extends JeecgController<XjAed, IXjAedService> {
*/ */
@GetMapping("dataInit") @GetMapping("dataInit")
public void aedDataInit() { public void aedDataInit() {
xjAedService.aedDataInit(); xjAedService.aedDataUtil();
} }
} }
@@ -5,9 +5,9 @@ import com.renkang.anyan.model.dto.HealthRoomDTO;
import com.renkang.anyan.model.dto.HealthSignListParam; import com.renkang.anyan.model.dto.HealthSignListParam;
import com.renkang.anyan.model.dto.MedicalAbnormalDTO; import com.renkang.anyan.model.dto.MedicalAbnormalDTO;
import com.renkang.anyan.model.vo.*; import com.renkang.anyan.model.vo.*;
import com.renkang.emergency.entity.TblBaseHospitalVo;
import com.renkang.emergency.entity.dto.*; import com.renkang.emergency.entity.dto.*;
import com.renkang.emergency.entity.vo.DataDetailVO; import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.entity.vo.LoveTrendVO;
import com.renkang.emergency.entity.vo.MedicalDataVO; import com.renkang.emergency.entity.vo.MedicalDataVO;
import com.renkang.emergency.largeScreen.entity.dto.HealthRoomBaseDTO; import com.renkang.emergency.largeScreen.entity.dto.HealthRoomBaseDTO;
import com.renkang.emergency.largeScreen.entity.dto.HealthSignDTO; import com.renkang.emergency.largeScreen.entity.dto.HealthSignDTO;
@@ -233,11 +233,24 @@ public class LargeScreenNewController {
* 假数据查询(关爱趋势) * 假数据查询(关爱趋势)
*/ */
@GetMapping("loveTrend") @GetMapping("loveTrend")
public Result<IPage<LoveTrendVO>> loveTrend(@RequestParam(name = "centerId") String centerId, public Result<IPage<CareUserListVo>> loveTrend(@RequestParam(name = "centerId") String centerId,
@RequestParam(name = "name", required = false) String name, @RequestParam(name = "name", required = false) String name,
@RequestParam(name = "orgName", required = false) String orgName,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
return Result.ok(largeScreenDataService.loveTrend(centerId, name,pageNo,pageSize)); return Result.ok(largeScreenDataService.loveTrend(centerId, name,orgName,pageNo,pageSize));
}
/**
* 获取最近的6个资源
* @param longitude
* @param latitude
* @return
*/
@GetMapping("nearResources")
public Result<List<TblBaseHospitalVo>> nearResources(@RequestParam(name = "longitude") String longitude,
@RequestParam(name = "latitude") String latitude){
return Result.ok(largeScreenDataService.nearResources(longitude,latitude));
} }
} }
@@ -2,10 +2,11 @@ package com.renkang.emergency.largeScreen.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.renkang.anyan.model.vo.CareUserListVo;
import com.renkang.emergency.entity.LargeScreenData; import com.renkang.emergency.entity.LargeScreenData;
import com.renkang.emergency.entity.TblBaseHospitalVo;
import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO; import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO;
import com.renkang.emergency.entity.vo.DataDetailVO; import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.entity.vo.LoveTrendVO;
import com.renkang.emergency.entity.vo.MedicalDataVO; import com.renkang.emergency.entity.vo.MedicalDataVO;
import java.util.List; import java.util.List;
@@ -30,5 +31,7 @@ public interface ILargeScreenDataService extends IService<LargeScreenData> {
List<MedicalDataVO> medicalDataDetail(String centerId); List<MedicalDataVO> medicalDataDetail(String centerId);
IPage<LoveTrendVO> loveTrend(String centerId, String name,Integer pageNo,Integer pageSize); IPage<CareUserListVo> loveTrend(String centerId, String name, String orgName, Integer pageNo, Integer pageSize);
List<TblBaseHospitalVo> nearResources(String longitude, String latitude);
} }
@@ -10,23 +10,27 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.renkang.anyan.model.vo.CareUserListVo;
import com.renkang.emergency.entity.LargeScreenData; import com.renkang.emergency.entity.LargeScreenData;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.entity.TblBaseHospitalVo;
import com.renkang.emergency.entity.XjAed;
import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO; import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO;
import com.renkang.emergency.entity.vo.DataDetailVO; import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.entity.vo.LoveTrendVO;
import com.renkang.emergency.entity.vo.MedicalDataVO; import com.renkang.emergency.entity.vo.MedicalDataVO;
import com.renkang.emergency.largeScreen.mapper.LargeScreenDataMapper; import com.renkang.emergency.largeScreen.mapper.LargeScreenDataMapper;
import com.renkang.emergency.largeScreen.service.ILargeScreenDataService; import com.renkang.emergency.largeScreen.service.ILargeScreenDataService;
import com.renkang.emergency.service.IResourceService;
import com.renkang.emergency.service.IXjAedService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.jeecg.util.TypeConversionUtil;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StreamUtils; import org.springframework.util.StreamUtils;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -39,6 +43,9 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class LargeScreenDataServiceImpl extends ServiceImpl<LargeScreenDataMapper, LargeScreenData> implements ILargeScreenDataService { public class LargeScreenDataServiceImpl extends ServiceImpl<LargeScreenDataMapper, LargeScreenData> implements ILargeScreenDataService {
private final IResourceService resourceService;
private final IXjAedService xjAedService;
public Boolean editValue(LargeScreenDataValueDTO dto) { public Boolean editValue(LargeScreenDataValueDTO dto) {
if (StrUtil.isEmpty(dto.getCenterId())) { if (StrUtil.isEmpty(dto.getCenterId())) {
return false; return false;
@@ -46,11 +53,11 @@ public class LargeScreenDataServiceImpl extends ServiceImpl<LargeScreenDataMappe
LambdaQueryWrapper<LargeScreenData> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<LargeScreenData> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LargeScreenData::getType, dto.getType()); queryWrapper.eq(LargeScreenData::getType, dto.getType());
queryWrapper.eq(LargeScreenData::getCenterId, dto.getCenterId()); queryWrapper.eq(LargeScreenData::getCenterId, dto.getCenterId());
queryWrapper.eq(ObjUtil.isNotEmpty(dto.getId()),LargeScreenData::getId, dto.getId()); queryWrapper.eq(ObjUtil.isNotEmpty(dto.getId()), LargeScreenData::getId, dto.getId());
if (CollUtil.isNotEmpty(list())) { if (CollUtil.isNotEmpty(list())) {
LambdaUpdateWrapper<LargeScreenData> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<LargeScreenData> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(LargeScreenData::getType, dto.getType()); updateWrapper.eq(LargeScreenData::getType, dto.getType());
updateWrapper.eq(ObjUtil.isNotEmpty(dto.getId()),LargeScreenData::getId, dto.getId()); updateWrapper.eq(ObjUtil.isNotEmpty(dto.getId()), LargeScreenData::getId, dto.getId());
updateWrapper.set(LargeScreenData::getValue, dto.getValue()); updateWrapper.set(LargeScreenData::getValue, dto.getValue());
updateWrapper.set(LargeScreenData::getStatus, dto.getStatus()); updateWrapper.set(LargeScreenData::getStatus, dto.getStatus());
return update(updateWrapper); return update(updateWrapper);
@@ -59,13 +66,13 @@ public class LargeScreenDataServiceImpl extends ServiceImpl<LargeScreenDataMappe
} }
@Transactional() @Transactional()
public Boolean editData(DataDetailVO dto){ public Boolean editData(DataDetailVO dto) {
List<LargeScreenData> list = new ArrayList<>(); List<LargeScreenData> list = new ArrayList<>();
switch (dto.getModule()) { switch (dto.getModule()) {
case "9": case "9":
// 服务详情 // 服务详情
remove(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, dto.getCenterId()).in(LargeScreenData::getType, remove(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, dto.getCenterId()).in(LargeScreenData::getType,
Arrays.asList("gross", "alerdyreceive", "jqqz", "dbjy", "totaldeal", "totalacceptance"))); Arrays.asList("gross", "alerdyreceive", "jqqz", "dbjy", "totaldeal", "totalacceptance")));
LargeScreenData service1 = new LargeScreenData(); LargeScreenData service1 = new LargeScreenData();
service1.setType("gross"); service1.setType("gross");
service1.setStatus(dto.getLatestCallStatus()); service1.setStatus(dto.getLatestCallStatus());
@@ -242,7 +249,7 @@ public class LargeScreenDataServiceImpl extends ServiceImpl<LargeScreenDataMappe
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean editMedicalValue(List<LargeScreenDataValueDTO> dtoList) { public Boolean editMedicalValue(List<LargeScreenDataValueDTO> dtoList) {
remove(new LambdaQueryWrapper<LargeScreenData>().in(LargeScreenData::getType,"medical","32")); remove(new LambdaQueryWrapper<LargeScreenData>().in(LargeScreenData::getType, "medical", "32"));
if (CollUtil.isNotEmpty(dtoList)) { if (CollUtil.isNotEmpty(dtoList)) {
saveBatch(dtoList.stream().map(LargeScreenData::new).collect(Collectors.toList())); saveBatch(dtoList.stream().map(LargeScreenData::new).collect(Collectors.toList()));
} }
@@ -387,43 +394,50 @@ public class LargeScreenDataServiceImpl extends ServiceImpl<LargeScreenDataMappe
return vo; return vo;
} }
public List<MedicalDataVO> medicalDataDetail(String centerId){ public List<MedicalDataVO> medicalDataDetail(String centerId) {
List<LargeScreenData> list = list(new LambdaQueryWrapper<LargeScreenData>() List<LargeScreenData> list = list(new LambdaQueryWrapper<LargeScreenData>()
.in(LargeScreenData::getType, "medical","32").eq(LargeScreenData::getCenterId, centerId)); .in(LargeScreenData::getType, "medical", "32").eq(LargeScreenData::getCenterId, centerId));
if (CollUtil.isEmpty(list)){ if (CollUtil.isEmpty(list)) {
return new ArrayList<>(); return new ArrayList<>();
} }
return list.stream().map(MedicalDataVO::new).collect(Collectors.toList()); return list.stream().map(MedicalDataVO::new).collect(Collectors.toList());
} }
@Override @Override
public IPage<LoveTrendVO> loveTrend(String centerId, String name, Integer pageNo, Integer pageSize) { public IPage<CareUserListVo> loveTrend(String centerId, String name, String orgName, Integer pageNo, Integer pageSize) {
try { try {
ClassPathResource resource = new ClassPathResource("tempData/guanaiList.json"); ClassPathResource resource = new ClassPathResource("tempData/guanaiList.json");
String jsonContent = StreamUtils.copyToString(resource.getInputStream(), StandardCharsets.UTF_8); String jsonContent = StreamUtils.copyToString(resource.getInputStream(), StandardCharsets.UTF_8);
List<LoveTrendVO> loveTrendVOList = JSONUtil.toList(jsonContent, LoveTrendVO.class); List<CareUserListVo> careUserListVoList = JSONUtil.toList(jsonContent, CareUserListVo.class);
if (CollUtil.isEmpty(loveTrendVOList)) { if (CollUtil.isEmpty(careUserListVoList)) {
return new Page<>(); return new Page<>();
} }
// 根据 name 过滤 // 根据 name 过滤
if (StrUtil.isNotBlank(name)) { if (StrUtil.isNotBlank(name)) {
loveTrendVOList = loveTrendVOList.stream() careUserListVoList = careUserListVoList.stream()
.filter(vo -> vo.getName() != null && vo.getName().contains(name)) .filter(vo -> vo.getName() != null && vo.getName().contains(name))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
int total = loveTrendVOList.size(); // 根据 name 过滤
if (StrUtil.isNotBlank(orgName)) {
careUserListVoList = careUserListVoList.stream()
.filter(vo -> vo.getWorkUnit() != null && vo.getWorkUnit().contains(orgName))
.collect(Collectors.toList());
}
int total = careUserListVoList.size();
int[] startEnd = PageUtil.transToStartEnd(pageNo - 1, pageSize); int[] startEnd = PageUtil.transToStartEnd(pageNo - 1, pageSize);
// 确保不越界 // 确保不越界
int start = Math.min(startEnd[0], total); int start = Math.min(startEnd[0], total);
int end = Math.min(startEnd[1], total); int end = Math.min(startEnd[1], total);
List<LoveTrendVO> pageList = loveTrendVOList.subList(start, end); List<CareUserListVo> pageList = careUserListVoList.subList(start, end);
Page<LoveTrendVO> page = new Page<>(pageNo, pageSize, total); Page<CareUserListVo> page = new Page<>(pageNo, pageSize, total);
page.setRecords(pageList); page.setRecords(pageList);
return page; return page;
@@ -432,4 +446,155 @@ public class LargeScreenDataServiceImpl extends ServiceImpl<LargeScreenDataMappe
return new Page<>(); return new Page<>();
} }
} }
@Override
public List<TblBaseHospitalVo> nearResources(String longitude, String latitude) {
// 总资源 (6个最近点 2个医院 2个小屋 2个AED)
List<TblBaseHospitalVo> list = new ArrayList<>();
// 医院
List<TblBaseHospitalVo> hospitalList = new ArrayList<>();
// 小屋
List<TblBaseHospitalVo> roomList = new ArrayList<>();
// AED
List<TblBaseHospitalVo> xjAedList = new ArrayList<>();
List<Resource> resourceList = resourceService.list(new LambdaQueryWrapper<Resource>()
.in(Resource::getType, Arrays.asList("1", "3"))
.isNotNull(Resource::getLongitude)
.isNotNull(Resource::getLatitude));
if (CollUtil.isNotEmpty(resourceList)) {
// 分组
Map<String, List<Resource>> groupedResources = resourceList.stream()
.collect(Collectors.groupingBy(Resource::getType));
List<Resource> type1Resources = groupedResources.getOrDefault("1", new ArrayList<>());
hospitalList = type1Resources.stream()
.map(TblBaseHospitalVo::new)
.collect(Collectors.toList());
List<Resource> type3Resources = groupedResources.getOrDefault("3", new ArrayList<>());
roomList = type3Resources.stream()
.map(TblBaseHospitalVo::new)
.collect(Collectors.toList());
}
List<XjAed> aedList = xjAedService.list(new LambdaQueryWrapper<XjAed>()
.isNotNull(XjAed::getLatitude)
.isNotNull(XjAed::getLongitude));
if (CollUtil.isNotEmpty(aedList)) {
xjAedList = aedList.stream().map(TblBaseHospitalVo::new).collect(Collectors.toList());
}
// 找出最近的两个点
hospitalList = findThreeNearestHospitals(2, hospitalList, TypeConversionUtil.toDoubleOfNull(longitude), TypeConversionUtil.toDoubleOfNull(latitude));
roomList = findThreeNearestHospitals(2, roomList, TypeConversionUtil.toDoubleOfNull(longitude), TypeConversionUtil.toDoubleOfNull(latitude));
xjAedList = findThreeNearestHospitals(2, xjAedList, TypeConversionUtil.toDoubleOfNull(longitude), TypeConversionUtil.toDoubleOfNull(latitude));
list.addAll(hospitalList);
list.addAll(roomList);
list.addAll(xjAedList);
// 赋值距离
for (TblBaseHospitalVo vo : list) {
if (vo.getLat() != null && Double.parseDouble(vo.getLat().toString()) != 0.0 && vo.getLon() != null && Double.parseDouble(vo.getLon().toString()) != 0.0) {
double lat2 = Double.parseDouble(vo.getLat().toString());
double lng2 = Double.parseDouble(vo.getLon().toString());
double distance = getDistance(TypeConversionUtil.toDoubleOfNull(latitude), TypeConversionUtil.toDoubleOfNull(longitude), lat2, lng2);
if (distance > 1000d) {
vo.setDistance(Math.round((distance / 1000d) * 100) / 100 + "km");
} else {
vo.setDistance(Math.round(distance * 100) / 100 + "m");
}
}
}
return list;
}
/**
* 获取最近的点
*
* @param allList 所有资源
* @param lon 经纬度
* @param lat 经纬度
* @return 最近的医院列表
*/
public List<TblBaseHospitalVo> findThreeNearestHospitals(int num, List<TblBaseHospitalVo> allList, final Double lon, final Double lat) {
if (allList == null || allList.size() < num) {
return allList; // 如果列表中没有足够的点,则返回全部点
}
// 先对整个列表进行排序
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(lat, lon, h2.getLat().doubleValue(), h2.getLon().doubleValue());
return Double.compare(dist1, dist2);
}
});
// 选择最近的点
return new ArrayList<>(allList.subList(0, num));
}
/**
* 计算两点之间的距离
*
* @param lat1 经纬度1
* @param lon1 经纬度1
* @param lat2 经纬度2
* @param lon2 经纬度2
* @return 距离
*/
private static double distance(double lat1, double lon1, double lat2, double lon2) {
// 地球半径(单位:千米)
final int R = 6371;
double latDistance = Math.toRadians(lat2 - lat1);
double lonDistance = Math.toRadians(lon2 - lon1);
double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
+ Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
* Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
// 将距离转化为米
return R * c * 1000;
}
private static double EARTH_RADIUS = 6378.137;
/**
* 根据经纬度计算两点之间的距离 GetDistance:(). <br/>
*
* @param lat1 1点的纬度
* @param lng1 1点的经度
* @param lat2 2点的纬度
* @param lng2 2点的经度
* @return 距离 单位 米
* @author chiwei
*/
public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
double radLat1 = getRadian(lat1);
double radLat2 = getRadian(lat2);
double a = radLat1 - radLat2;// 两点纬度差
double b = getRadian(lng1) - getRadian(lng2);// 两点的经度差
double s = 2 * Math.asin(Math.sqrt(
Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
return s * 1000;
}
/**
* 角度弧度计算公式 rad:(). <br/>
* <p>
* 360度=2π π=Math.PI
* <p>
* x度 = x*π/360 弧度
*
* @param degree
* @return
* @author chiwei
* @since JDK 1.6
*/
private static double getRadian(double degree) {
return degree * Math.PI / 180.0;
}
} }
@@ -6,4 +6,6 @@ import com.renkang.emergency.entity.XjAed;
public interface IXjAedService extends IService<XjAed> { public interface IXjAedService extends IService<XjAed> {
void aedDataInit(); void aedDataInit();
void aedDataUtil();
} }
@@ -164,7 +164,7 @@ public class TblAmbulanceGpsServiceImpl extends ServiceImpl<TblAmbulanceGpsMappe
Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))); Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS; s = s * EARTH_RADIUS;
return s * 1000; return s * 1000;
} }
/** /**
* 角度弧度计算公式 rad:(). <br/> * 角度弧度计算公式 rad:(). <br/>
@@ -93,6 +93,7 @@ public class XjAedServiceImpl extends ServiceImpl<XjAedMapper, XjAed> implements
} }
/** /**
* 获取单元格的值 * 获取单元格的值
*/ */
@@ -132,4 +133,16 @@ public class XjAedServiceImpl extends ServiceImpl<XjAedMapper, XjAed> implements
return ""; return "";
} }
} }
@Override
public void aedDataUtil() {
StringBuilder sb = new StringBuilder();
String[] split = converter.run("东经E85°0251″" + "-" + "北纬N45°3734″").split("-");
CoordinateConverter.Gps gps = CoordinateConverter.GPS84ToGCJ02(
TypeConversionUtil.toDoubleOfNull(split[0]), TypeConversionUtil.toDoubleOfNull(split[1]));
if (gps != null) {
System.out.println(gps.getLongitude());
System.out.println(gps.getLatitude());
}
}
} }
@@ -44,11 +44,12 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 36, "age": 36,
"sex": "男", "sex": "男",
"name": "连龙刚" "name": "连龙刚",
"careLiaisonName": "刘一"
}, },
{ {
"id": 10641, "id": 10641,
@@ -95,11 +96,12 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 41, "age": 41,
"sex": "男", "sex": "男",
"name": "李苏望" "name": "李苏望",
"careLiaisonName": "陈二"
}, },
{ {
"id": 10641, "id": 10641,
@@ -146,11 +148,12 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 29, "age": 29,
"sex": "男", "sex": "男",
"name": "王先森" "name": "王先森",
"careLiaisonName": "张三"
}, },
{ {
"id": 10641, "id": 10641,
@@ -197,11 +200,12 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 50, "age": 50,
"sex": "男", "sex": "男",
"name": "阿尔麦江.买买提" "name": "阿尔麦江.买买提",
"careLiaisonName": "李四"
}, },
{ {
"id": 10641, "id": 10641,
@@ -248,11 +252,12 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 24, "age": 24,
"sex": "女", "sex": "女",
"name": "古力娜扎.艾卡尔" "name": "古力娜扎.艾卡尔",
"careLiaisonName": "王五"
}, },
{ {
"id": 10641, "id": 10641,
@@ -299,11 +304,12 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 37, "age": 37,
"sex": "男", "sex": "男",
"name": "梁文斌" "name": "梁文斌",
"careLiaisonName": "赵六"
}, },
{ {
"id": 10641, "id": 10641,
@@ -350,11 +356,12 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 46, "age": 46,
"sex": "男", "sex": "男",
"name": "加海洋" "name": "加海洋",
"careLiaisonName": "孙七"
}, },
{ {
"id": 10641, "id": 10641,
@@ -401,11 +408,11 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 41, "age": 41,
"sex": "女", "sex": "女",
"name": "朱玲玲" "name": "周八"
}, },
{ {
"id": 10641, "id": 10641,
@@ -452,11 +459,11 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 28, "age": 28,
"sex": "女", "sex": "女",
"name": "张丽萍" "name": "吴九"
}, },
{ {
"id": 10641, "id": 10641,
@@ -503,11 +510,11 @@
"homocysteine": 15.04, "homocysteine": 15.04,
"homocysteineTarget": "13.54", "homocysteineTarget": "13.54",
"homocysteineCurrent": 0, "homocysteineCurrent": 0,
"workUnit": "", "workUnit": "新疆油田储气库有限公司-机关",
"workUnitId": "103074", "workUnitId": "103074",
"age": 36, "age": 36,
"sex": "男", "sex": "男",
"name": "定缪军" "name": "郑十"
} }
] ]
@@ -99,11 +99,11 @@
height, height,
weight, weight,
md_marriage_status, md_marriage_status,
care_liaison_name, a.care_liaison_name,
care_liaison_job, a.care_liaison_job,
care_liaison_phone, a.care_liaison_phone,
lifeguard_name, a.lifeguard_name,
lifeguard_phone a.lifeguard_phone
from health_user_employee_ex a from health_user_employee_ex a
left join sys_user b on a.id = b.id left join sys_user b on a.id = b.id
</sql> </sql>
@@ -182,6 +182,11 @@
<result column="health_type" jdbcType="VARCHAR" property="healthType"/> <result column="health_type" jdbcType="VARCHAR" property="healthType"/>
<result column="height" jdbcType="VARCHAR" property="height"/> <result column="height" jdbcType="VARCHAR" property="height"/>
<result column="weight" jdbcType="VARCHAR" property="weight"/> <result column="weight" jdbcType="VARCHAR" property="weight"/>
<result column="care_liaison_name" jdbcType="VARCHAR" property="careLiaisonName"/>
<result column="care_liaison_job" jdbcType="VARCHAR" property="careLiaisonJob"/>
<result column="care_liaison_phone" jdbcType="VARCHAR" property="careLiaisonPhone"/>
<result column="lifeguard_name" jdbcType="VARCHAR" property="lifeguardName"/>
<result column="lifeguard_phone" jdbcType="VARCHAR" property="lifeguardPhone"/>
<result column="md_marriage_status" jdbcType="VARCHAR" property="mdMarriageStatus"/> <result column="md_marriage_status" jdbcType="VARCHAR" property="mdMarriageStatus"/>
</association> </association>
</resultMap> </resultMap>