外部添加机械设备定位-实时和报警数据信息
This commit is contained in:
parent
7303ab9ec7
commit
9e6b3b3963
@ -725,6 +725,4 @@ public class ParamEnum {
|
|||||||
this.desc = desc;
|
this.desc = desc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,27 +1,23 @@
|
|||||||
package com.zhgd.xmgl.modules.mechanicalequipmentposition.controller;
|
package com.zhgd.xmgl.modules.mechanicalequipmentposition.controller;
|
||||||
|
|
||||||
import io.swagger.annotations.Api;
|
import com.alibaba.fastjson.JSON;
|
||||||
import io.swagger.annotations.ApiImplicitParam;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
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.zhgd.jeecg.common.api.vo.Result;
|
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.entity.MechanicalEquipmentPositionData;
|
||||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.service.IMechanicalEquipmentPositionDataService;
|
import com.zhgd.xmgl.modules.mechanicalequipmentposition.service.IMechanicalEquipmentPositionDataService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
import org.simpleframework.xml.core.Validate;
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
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;
|
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 java.util.Date;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|||||||
@ -69,7 +69,7 @@ public class MechanicalEquipmentPositionData implements Serializable {
|
|||||||
* 工作状态
|
* 工作状态
|
||||||
*/
|
*/
|
||||||
@Excel(name = "工作状态", width = 15)
|
@Excel(name = "工作状态", width = 15)
|
||||||
@ApiModelProperty(value = "工作状态")
|
@ApiModelProperty(value = "工作状态(1:ACC开(工作状态),2:ACC关(怠速状态)")
|
||||||
private java.lang.Integer workStatus;
|
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 edit(MechanicalEquipmentPositionData mechanicalEquipmentPositionData);
|
||||||
|
|
||||||
void delete(String id);
|
void delete(String id);
|
||||||
|
|
||||||
|
void addData(HashMap<String, Object> paramMap);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,23 +1,38 @@
|
|||||||
package com.zhgd.xmgl.modules.mechanicalequipmentposition.service.impl;
|
package com.zhgd.xmgl.modules.mechanicalequipmentposition.service.impl;
|
||||||
|
|
||||||
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
import cn.hutool.core.convert.Convert;
|
||||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionData;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.mapper.MechanicalEquipmentPositionDataMapper;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.zhgd.xmgl.modules.mechanicalequipmentposition.service.IMechanicalEquipmentPositionDataService;
|
import com.alibaba.fastjson.JSON;
|
||||||
import org.springframework.stereotype.Service;
|
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.conditions.query.QueryWrapper;
|
||||||
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.zhgd.jeecg.common.system.query.QueryGenerator;
|
|
||||||
import com.zhgd.xmgl.util.PageUtil;
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import com.zhgd.xmgl.util.RefUtil;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 机械设备定位-实时数据
|
* @Description: 机械设备定位-实时数据
|
||||||
@ -27,9 +42,14 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Slf4j
|
||||||
public class MechanicalEquipmentPositionDataServiceImpl extends ServiceImpl<MechanicalEquipmentPositionDataMapper, MechanicalEquipmentPositionData> implements IMechanicalEquipmentPositionDataService {
|
public class MechanicalEquipmentPositionDataServiceImpl extends ServiceImpl<MechanicalEquipmentPositionDataMapper, MechanicalEquipmentPositionData> implements IMechanicalEquipmentPositionDataService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private MechanicalEquipmentPositionDataMapper mechanicalEquipmentPositionDataMapper;
|
private MechanicalEquipmentPositionDataMapper mechanicalEquipmentPositionDataMapper;
|
||||||
|
@Autowired
|
||||||
|
private MechanicalEquipmentPositionDevMapper mechanicalEquipmentPositionDevMapper;
|
||||||
|
@Autowired
|
||||||
|
private MechanicalEquipmentPositionAlarmMapper alarmMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<MechanicalEquipmentPositionData> queryPageList(HashMap<String, Object> paramMap) {
|
public IPage<MechanicalEquipmentPositionData> queryPageList(HashMap<String, Object> paramMap) {
|
||||||
@ -77,5 +97,82 @@ public class MechanicalEquipmentPositionDataServiceImpl extends ServiceImpl<Mech
|
|||||||
baseMapper.deleteById(id);
|
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"
|
<select id="countSafetyHatDev"
|
||||||
resultType="com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo">
|
resultType="com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo">
|
||||||
|
select t.*,t.count - t.onlineCount as offlineCount from (
|
||||||
select count(*) count,
|
select count(*) count,
|
||||||
IFNULL(sum(IFNULL(((case
|
IFNULL(sum(IFNULL(((case
|
||||||
when round((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(heartbeat_time)) / 60) <= 30
|
when round((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(heartbeat_time)) / 60) <= 30
|
||||||
then 1
|
then 1
|
||||||
else 0 end)), 0)),0) onlineCount,
|
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
|
|
||||||
from safety_hat_dev
|
from safety_hat_dev
|
||||||
where 1 = 1
|
where 1 = 1
|
||||||
<if test="devSn != null and devSn != ''">
|
<if test="devSn != null and devSn != ''">
|
||||||
@ -29,5 +27,6 @@
|
|||||||
<if test="projectSn != null and projectSn != ''">
|
<if test="projectSn != null and projectSn != ''">
|
||||||
and project_sn = #{projectSn}
|
and project_sn = #{projectSn}
|
||||||
</if>
|
</if>
|
||||||
|
)t
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package com.zhgd.xmgl.modules.safetyhat.service.impl;
|
package com.zhgd.xmgl.modules.safetyhat.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DateUnit;
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
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.entity.SafetyHatDev;
|
||||||
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDevMapper;
|
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDevMapper;
|
||||||
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDevService;
|
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.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo;
|
||||||
import com.zhgd.xmgl.util.PageUtil;
|
import com.zhgd.xmgl.util.PageUtil;
|
||||||
import com.zhgd.xmgl.util.RefUtil;
|
import com.zhgd.xmgl.util.RefUtil;
|
||||||
@ -63,7 +61,8 @@ public class SafetyHatDevServiceImpl extends ServiceImpl<SafetyHatDevMapper, Saf
|
|||||||
if (online == 1) {
|
if (online == 1) {
|
||||||
queryWrapper.ge(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime), dateTime);
|
queryWrapper.ge(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime), dateTime);
|
||||||
} else {
|
} 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;
|
return queryWrapper;
|
||||||
|
|||||||
@ -332,6 +332,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
|||||||
.antMatchers("/xmgl/safetyHatData/add").permitAll()
|
.antMatchers("/xmgl/safetyHatData/add").permitAll()
|
||||||
.antMatchers("/xmgl/safetyHatDayRecord/saveData").permitAll()
|
.antMatchers("/xmgl/safetyHatDayRecord/saveData").permitAll()
|
||||||
.antMatchers("/xmgl/safetyHatAlarm/add").permitAll()
|
.antMatchers("/xmgl/safetyHatAlarm/add").permitAll()
|
||||||
|
.antMatchers("/xmgl/mechanicalEquipmentPositionData/addData").permitAll()
|
||||||
.antMatchers(HttpMethod.OPTIONS, "/**").anonymous()
|
.antMatchers(HttpMethod.OPTIONS, "/**").anonymous()
|
||||||
.anyRequest().authenticated() // 剩下所有的验证都需要验证.
|
.anyRequest().authenticated() // 剩下所有的验证都需要验证.
|
||||||
.and()
|
.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