外部添加机械设备定位-实时和报警数据信息
This commit is contained in:
parent
7303ab9ec7
commit
9e6b3b3963
@ -725,6 +725,4 @@ public class ParamEnum {
|
||||
this.desc = desc;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,27 +1,23 @@
|
||||
package com.zhgd.xmgl.modules.mechanicalequipmentposition.controller;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.zhgd.jeecg.common.api.vo.Result;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionData;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.service.IMechanicalEquipmentPositionDataService;
|
||||
|
||||
import org.simpleframework.xml.core.Validate;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.simpleframework.xml.core.Validate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
@ -125,4 +121,19 @@ public class MechanicalEquipmentPositionDataController {
|
||||
return result;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "外部添加机械设备定位-实时和报警数据信息", notes = "外部添加机械设备定位-实时和报警数据信息", httpMethod = "POST")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"),
|
||||
})
|
||||
@PostMapping(value = "/addData")
|
||||
public Result addData(@ApiIgnore @RequestBody HashMap<String, Object> paramMap) {
|
||||
log.info("外部添加机械设备定位-实时和报警数据信息:{}", JSON.toJSONString(paramMap));
|
||||
try {
|
||||
mechanicalEquipmentPositionDataService.addData(paramMap);
|
||||
} catch (Exception e) {
|
||||
return Result.ok(e.getMessage());
|
||||
}
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@ -69,7 +69,7 @@ public class MechanicalEquipmentPositionData implements Serializable {
|
||||
* 工作状态
|
||||
*/
|
||||
@Excel(name = "工作状态", width = 15)
|
||||
@ApiModelProperty(value = "工作状态")
|
||||
@ApiModelProperty(value = "工作状态(1:ACC开(工作状态),2:ACC关(怠速状态)")
|
||||
private java.lang.Integer workStatus;
|
||||
/**
|
||||
* 设备电量
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
package com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PositionAddData {
|
||||
/*
|
||||
code=200的情况
|
||||
{"Altitude":0,"Code":200,"Direction":121,"Speed":0,"Time":"2024-03-10 04:52:19","deviceid":61136981730,"devicename":61136981730,"lat":"22.734326","lon":"114.243999","stralarm":"拆除报警","strstatus":"ACC关","supplyvoltage":"0.00","voltagepercent":22}
|
||||
|
||||
Speed:速度
|
||||
Time:当前时间
|
||||
deviceid:设备id
|
||||
devicename:设备名称
|
||||
lon:经度
|
||||
lat:纬度
|
||||
stralarm:拆除报警信息
|
||||
strstatus:工作状态(ACC开为工作状态,ACC关为怠速状态)
|
||||
supplyvoltage:设备电压(根据电压值计算电量百分比,3.7-4.2(0%-100%))
|
||||
voltagepercent:设备电量
|
||||
|
||||
|
||||
code=704,解析平台重启后回补数据,在外面封装了一层,里面内容一样
|
||||
{"Code":704,"Items":[{"Altitude":0,"Code":200,"Direction":121,"Speed":0,"Time":"2024-03-10 04:49:19","deviceid":61136981730,"devicename":61136981730,"lat":"22.734326","lon":"114.243999","stralarm":"拆除报警","strstatus":"ACC关","supplyvoltage":"3.70","voltagepercent":0}],"Type":1}
|
||||
|
||||
*/
|
||||
@JsonProperty("Altitude")
|
||||
private Long altitude;
|
||||
@JsonProperty("Code")
|
||||
private Long code;
|
||||
@JsonProperty("Direction")
|
||||
private Long direction;
|
||||
@JsonProperty("Speed")
|
||||
private Long speed;
|
||||
@JsonProperty("Time")
|
||||
private String time;
|
||||
@JsonProperty("deviceid")
|
||||
private Long deviceid;
|
||||
@JsonProperty("devicename")
|
||||
private Long devicename;
|
||||
@JsonProperty("lat")
|
||||
private String lat;
|
||||
@JsonProperty("lon")
|
||||
private String lon;
|
||||
@JsonProperty("stralarm")
|
||||
private String stralarm;
|
||||
@JsonProperty("strstatus")
|
||||
private String strstatus;
|
||||
@JsonProperty("supplyvoltage")
|
||||
private String supplyvoltage;
|
||||
@JsonProperty("voltagepercent")
|
||||
private Long voltagepercent;
|
||||
|
||||
}
|
||||
@ -24,4 +24,6 @@ public interface IMechanicalEquipmentPositionDataService extends IService<Mechan
|
||||
void edit(MechanicalEquipmentPositionData mechanicalEquipmentPositionData);
|
||||
|
||||
void delete(String id);
|
||||
|
||||
void addData(HashMap<String, Object> paramMap);
|
||||
}
|
||||
|
||||
@ -1,23 +1,38 @@
|
||||
package com.zhgd.xmgl.modules.mechanicalequipmentposition.service.impl;
|
||||
|
||||
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionData;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.mapper.MechanicalEquipmentPositionDataMapper;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.service.IMechanicalEquipmentPositionDataService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.zhgd.jeecg.common.system.query.QueryGenerator;
|
||||
import com.zhgd.xmgl.util.PageUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
||||
import com.zhgd.jeecg.common.system.query.QueryGenerator;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionAlarm;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionData;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionDev;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.vo.PositionAddData;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.mapper.MechanicalEquipmentPositionAlarmMapper;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.mapper.MechanicalEquipmentPositionDataMapper;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.mapper.MechanicalEquipmentPositionDevMapper;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.service.IMechanicalEquipmentPositionDataService;
|
||||
import com.zhgd.xmgl.util.PageUtil;
|
||||
import com.zhgd.xmgl.util.RefUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import com.zhgd.xmgl.util.RefUtil;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Description: 机械设备定位-实时数据
|
||||
@ -27,9 +42,14 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
*/
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Slf4j
|
||||
public class MechanicalEquipmentPositionDataServiceImpl extends ServiceImpl<MechanicalEquipmentPositionDataMapper, MechanicalEquipmentPositionData> implements IMechanicalEquipmentPositionDataService {
|
||||
@Autowired
|
||||
private MechanicalEquipmentPositionDataMapper mechanicalEquipmentPositionDataMapper;
|
||||
@Autowired
|
||||
private MechanicalEquipmentPositionDevMapper mechanicalEquipmentPositionDevMapper;
|
||||
@Autowired
|
||||
private MechanicalEquipmentPositionAlarmMapper alarmMapper;
|
||||
|
||||
@Override
|
||||
public IPage<MechanicalEquipmentPositionData> queryPageList(HashMap<String, Object> paramMap) {
|
||||
@ -77,5 +97,82 @@ public class MechanicalEquipmentPositionDataServiceImpl extends ServiceImpl<Mech
|
||||
baseMapper.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(noRollbackFor = OpenAlertException.class)
|
||||
public void addData(HashMap<String, Object> paramMap) {
|
||||
Integer code = MapUtils.getInteger(paramMap, "Code");
|
||||
if (Objects.equals(code, 200)) {
|
||||
PositionAddData data = JSONObject.parseObject(JSON.toJSONString(paramMap), PositionAddData.class);
|
||||
insertData(data);
|
||||
} else if (Objects.equals(code, 704)) {
|
||||
//code=704,解析平台重启后回补数据,在外面封装了一层,里面内容一样
|
||||
JSONObject jo = JSON.parseObject(JSON.toJSONString(paramMap));
|
||||
JSONArray jaItems = jo.getJSONArray("Items");
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (jaItems.size() != 0) {
|
||||
for (int i = 0; i < jaItems.size(); i++) {
|
||||
JSONObject joItem = jaItems.getJSONObject(i);
|
||||
PositionAddData data = JSON.parseObject(joItem.toJSONString(), PositionAddData.class);
|
||||
try {
|
||||
insertData(data);
|
||||
} catch (OpenAlertException e) {
|
||||
sb.append(e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if (StrUtil.isNotBlank(sb.toString())) {
|
||||
throw new OpenAlertException(sb.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void insertData(PositionAddData data) {
|
||||
MechanicalEquipmentPositionDev dev = mechanicalEquipmentPositionDevMapper.selectOne(new LambdaQueryWrapper<MechanicalEquipmentPositionDev>()
|
||||
.eq(MechanicalEquipmentPositionDev::getDevSn, data.getDeviceid()));
|
||||
if (dev == null) {
|
||||
log.error("设备编号不正确:{}", data.getDeviceid());
|
||||
throw new OpenAlertException(Convert.toStr("设备编号不正确:" + data.getDeviceid()) + ",");
|
||||
}
|
||||
|
||||
dev.setHeartbeatTime(new Date());
|
||||
mechanicalEquipmentPositionDevMapper.updateById(dev);
|
||||
MechanicalEquipmentPositionData positionData = new MechanicalEquipmentPositionData();
|
||||
positionData.setDevSn(dev.getDevSn());
|
||||
positionData.setLatitude(Convert.toDouble(data.getLat()));
|
||||
positionData.setLongitude(Convert.toDouble(data.getLon()));
|
||||
positionData.setUploadTime(DateUtil.parseDateTime(data.getTime()));
|
||||
positionData.setSpeed(Convert.toDouble(data.getSpeed()));
|
||||
positionData.setWorkStatus(getWorkStatus(data.getStrstatus()));
|
||||
positionData.setEquipmentPower(Convert.toDouble(data.getVoltagepercent()));
|
||||
positionData.setEquipmentVoltage(Convert.toDouble(data.getSupplyvoltage()));
|
||||
positionData.setProjectSn(dev.getProjectSn());
|
||||
baseMapper.insert(positionData);
|
||||
|
||||
if (StrUtil.isNotBlank(data.getStralarm())) {
|
||||
//插入报警
|
||||
MechanicalEquipmentPositionAlarm alarm = new MechanicalEquipmentPositionAlarm();
|
||||
alarm.setDevSn(dev.getDevSn());
|
||||
alarm.setEquipmentName(dev.getEquipmentName());
|
||||
alarm.setAlarmTime(positionData.getUploadTime());
|
||||
alarm.setAlarmInfo(data.getStralarm());
|
||||
alarm.setProjectSn(dev.getProjectSn());
|
||||
alarmMapper.insert(alarm);
|
||||
}
|
||||
}
|
||||
|
||||
private Integer getWorkStatus(String strstatus) {
|
||||
if (StrUtil.isBlank(strstatus)) {
|
||||
return null;
|
||||
}
|
||||
switch (strstatus) {
|
||||
case "ACC开":
|
||||
return 1;
|
||||
case "ACC关":
|
||||
return 2;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -13,14 +13,12 @@
|
||||
|
||||
<select id="countSafetyHatDev"
|
||||
resultType="com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo">
|
||||
select t.*,t.count - t.onlineCount as offlineCount from (
|
||||
select count(*) count,
|
||||
IFNULL(sum(IFNULL(((case
|
||||
when round((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(heartbeat_time)) / 60) <= 30
|
||||
then 1
|
||||
else 0 end)), 0)),0) onlineCount,
|
||||
IFNULL(sum(IFNULL(((case
|
||||
when round((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(heartbeat_time)) / 60) > 30 then 1
|
||||
else 0 end)), 0)),0) offlineCount
|
||||
else 0 end)), 0)),0) onlineCount
|
||||
from safety_hat_dev
|
||||
where 1 = 1
|
||||
<if test="devSn != null and devSn != ''">
|
||||
@ -29,5 +27,6 @@
|
||||
<if test="projectSn != null and projectSn != ''">
|
||||
and project_sn = #{projectSn}
|
||||
</if>
|
||||
)t
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package com.zhgd.xmgl.modules.safetyhat.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
@ -13,7 +12,6 @@ import com.zhgd.jeecg.common.system.query.QueryGenerator;
|
||||
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
|
||||
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDevMapper;
|
||||
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDevService;
|
||||
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDev;
|
||||
import com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo;
|
||||
import com.zhgd.xmgl.util.PageUtil;
|
||||
import com.zhgd.xmgl.util.RefUtil;
|
||||
@ -63,7 +61,8 @@ public class SafetyHatDevServiceImpl extends ServiceImpl<SafetyHatDevMapper, Saf
|
||||
if (online == 1) {
|
||||
queryWrapper.ge(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime), dateTime);
|
||||
} else {
|
||||
queryWrapper.lt(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime), dateTime);
|
||||
queryWrapper.and(qw -> qw.lt(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime), dateTime).or()
|
||||
.isNull(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime)));
|
||||
}
|
||||
}
|
||||
return queryWrapper;
|
||||
|
||||
@ -332,6 +332,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
.antMatchers("/xmgl/safetyHatData/add").permitAll()
|
||||
.antMatchers("/xmgl/safetyHatDayRecord/saveData").permitAll()
|
||||
.antMatchers("/xmgl/safetyHatAlarm/add").permitAll()
|
||||
.antMatchers("/xmgl/mechanicalEquipmentPositionData/addData").permitAll()
|
||||
.antMatchers(HttpMethod.OPTIONS, "/**").anonymous()
|
||||
.anyRequest().authenticated() // 剩下所有的验证都需要验证.
|
||||
.and()
|
||||
|
||||
@ -0,0 +1,86 @@
|
||||
package com.zhgd.xmgl.task;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionData;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionDayRecord;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionDev;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.mapper.MechanicalEquipmentPositionDataMapper;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.mapper.MechanicalEquipmentPositionDayRecordMapper;
|
||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.mapper.MechanicalEquipmentPositionDevMapper;
|
||||
import com.zhgd.xmgl.modules.project.service.IProjectService;
|
||||
import com.zhgd.xmgl.util.TiandituUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.javacrumbs.shedlock.core.SchedulerLock;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 机械设备定位task
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("xmgl/task")
|
||||
public class MechanicalEquipmentPositionDayRecordTask {
|
||||
@Autowired
|
||||
IProjectService projectService;
|
||||
@Autowired
|
||||
MechanicalEquipmentPositionDayRecordMapper mechanicalEquipmentPositionDayRecordMapper;
|
||||
@Autowired
|
||||
MechanicalEquipmentPositionDataMapper mechanicalEquipmentPositionDataMapper;
|
||||
@Autowired
|
||||
MechanicalEquipmentPositionDevMapper mechanicalEquipmentPositionDevMapper;
|
||||
|
||||
/**
|
||||
* 每天计算一次轨迹距离
|
||||
*/
|
||||
@SchedulerLock(name = "getHelmet", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 7)
|
||||
@Scheduled(cron = "0 0 2 * * ?")
|
||||
@RequestMapping("")
|
||||
public void getHelmet() {
|
||||
log.info("每天计算一次昨日的轨迹距离,开始任务");
|
||||
List<MechanicalEquipmentPositionDev> devList = mechanicalEquipmentPositionDevMapper.selectList(null);
|
||||
for (MechanicalEquipmentPositionDev dev : devList) {
|
||||
DateTime yesterday = DateUtil.offsetDay(DateUtil.date(), -1);
|
||||
List<MechanicalEquipmentPositionData> dataList = mechanicalEquipmentPositionDataMapper.selectList(new LambdaQueryWrapper<MechanicalEquipmentPositionData>()
|
||||
.eq(MechanicalEquipmentPositionData::getDevSn, dev.getDevSn())
|
||||
.ge(MechanicalEquipmentPositionData::getUploadTime, DateUtil.formatDateTime(DateUtil.beginOfDay(yesterday)))
|
||||
.le(MechanicalEquipmentPositionData::getUploadTime, DateUtil.formatDateTime(DateUtil.endOfDay(yesterday)))
|
||||
);
|
||||
MechanicalEquipmentPositionDayRecord dayRecord = new MechanicalEquipmentPositionDayRecord();
|
||||
dayRecord.setDevSn(dev.getDevSn());
|
||||
if (dataList.size() > 1) {
|
||||
dayRecord.setTrackDistanceDay(TiandituUtil.getDistance(getPoint(dataList.get(0)), getPoint(dataList.get(dataList.size() - 1)), getMid(dataList), 0));
|
||||
} else {
|
||||
dayRecord.setTrackDistanceDay(0D);
|
||||
}
|
||||
dayRecord.setDay(DateUtil.formatDate(yesterday));
|
||||
dayRecord.setProjectSn(dev.getProjectSn());
|
||||
mechanicalEquipmentPositionDayRecordMapper.insert(dayRecord);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private String getMid(List<MechanicalEquipmentPositionData> dataList) {
|
||||
List<MechanicalEquipmentPositionData> subList = dataList.subList(1, dataList.size() - 1);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (MechanicalEquipmentPositionData data : subList) {
|
||||
sb.append(getPoint(data));
|
||||
sb.append(";");
|
||||
}
|
||||
List<String> pointList = subList.stream().map(data -> getPoint(data)).collect(Collectors.toList());
|
||||
return StrUtil.join(";", pointList);
|
||||
}
|
||||
|
||||
private String getPoint(MechanicalEquipmentPositionData mechanicalEquipmentPositionData) {
|
||||
return mechanicalEquipmentPositionData.getLongitude() + "," + mechanicalEquipmentPositionData.getLatitude();
|
||||
}
|
||||
|
||||
}
|
||||
34
src/main/java/com/zhgd/xmgl/util/TiandituUtil.java
Normal file
34
src/main/java/com/zhgd/xmgl/util/TiandituUtil.java
Normal file
@ -0,0 +1,34 @@
|
||||
package com.zhgd.xmgl.util;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class TiandituUtil {
|
||||
static Pattern pattern = Pattern.compile("<distance>(.*)</distance>");
|
||||
|
||||
/**
|
||||
* 查询轨迹距离
|
||||
*
|
||||
* @param orig string 起点经纬度 是 -180,-90,180,90。
|
||||
* @param dest string 终点经纬度 是 -180,-90,180,90。
|
||||
* @param mid 途径点经纬度字符串 否 途径点字符串格式:116.35506,39.92277;116.35506,39.92277两个坐标之间以分号隔开,坐标xy之间用逗号隔开(都是半角)。
|
||||
* @param style 导航路线类型 默认0 (0:最快路线,1:最短路线,2:避开高速,3:步行) 0-3。
|
||||
* @return
|
||||
*/
|
||||
public static Double getDistance(String orig, String dest, String mid, Integer style) {
|
||||
String key = "000c3ade82b69dee54ac334e750cfac0";
|
||||
String url = "http://api.tianditu.gov.cn/drive?postStr={\"orig\":\"" + orig + "\",\"dest\":\"" + dest + "\",\"mid\":\"" + mid + "\",\"style\":\"" + style + "\"}&type=search&tk=" + key;
|
||||
String rs = HttpUtil.get(url);
|
||||
Matcher matcher = pattern.matcher(rs);
|
||||
matcher.find();
|
||||
return Convert.toDouble(matcher.group(0));
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Double distance = getDistance("116.35506,39.92277", "116.40332,39.90025", "116.35506,39.92277;116.35506,39.92277", 0);
|
||||
System.out.println(distance);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user