车辆(人员)定位从河北跃进获取数据

This commit is contained in:
guoshengxiong 2025-12-08 10:24:10 +08:00
parent 00a832dc4f
commit 9300eb58f3
14 changed files with 619 additions and 9 deletions

View File

@ -0,0 +1,100 @@
package com.zhgd.xmgl.modules.vehicleposition.controller;
import com.zhgd.annotation.OperLog;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.redis.annotation.ApiIdempotent;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionConfig;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionConfigService;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* @Title: Controller
* @Description: 车辆人员定位配置
* @author pds
* @date 2020-09-16
* @version V1.0
*/
@RestController
@RequestMapping("/xmgl/vehiclePositionConfig")
@Slf4j
@Api(tags = "车辆(人员)定位配置")
public class VehiclePositionConfigController {
@Lazy
@Autowired
private IVehiclePositionConfigService vehiclePositionConfigService;
/**
* 分页列表查询
*
* @return
*/
@ApiOperation(value = "查询项目各类型的车辆(人员)定位配置信息", notes = "查询项目各类型的车辆(人员)定位配置信息", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = false, dataType = "String"),
})
@PostMapping(value = "/list")
public Result<List<VehiclePositionConfig>> queryPageList(@RequestBody Map<String, Object> map) {
return Result.success(vehiclePositionConfigService.selectVehiclePositionConfigList(map));
}
/**
* 编辑
*
* @param vehiclePositionConfig
* @return
*/
@ApiIdempotent
@OperLog(operModul = "视频管理", operType = "编辑车辆(人员)定位配置信息", operDesc = "编辑车辆(人员)定位配置信息")
@ApiOperation(value = "编辑车辆(人员)定位配置信息", notes = "编辑车辆(人员)定位配置信息", httpMethod = "POST")
@PostMapping(value = "/edit")
public Result<VehiclePositionConfig> editVehiclePositionConfig(@RequestBody VehiclePositionConfig vehiclePositionConfig) {
vehiclePositionConfigService.editVehiclePositionConfig(vehiclePositionConfig);
return Result.ok();
}
@ApiOperation(value = "查询启用的车辆(人员)定位配置", notes = "查询启用的车辆(人员)定位配置", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = false, dataType = "String"),
})
@PostMapping("/getUseVehiclePositionConfig")
public Result<VehiclePositionConfig> getUseVehiclePositionConfig(@RequestBody Map<String, Object> map) {
return Result.success(vehiclePositionConfigService.getUseVehiclePositionConfig(map));
}
@ApiOperation(value = "查询指定类型的车辆(人员)定位配置", notes = "查询指定类型的车辆(人员)定位配置", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "factoryType", value = "厂家类型1JT808协议2河北跃进", paramType = "body", required = false, dataType = "String"),
})
@PostMapping("/getVehiclePositionConfigByType")
public Result<VehiclePositionConfig> getVehiclePositionConfigByType(@RequestBody Map<String, Object> map) {
return Result.success(vehiclePositionConfigService.getVehiclePositionConfigByType(map));
}
@ApiIdempotent
@OperLog(operModul = "视频管理", operType = "启用指定类型的车辆(人员)定位配置", operDesc = "启用指定类型的车辆(人员)定位配置")
@ApiOperation(value = "启用指定类型的车辆(人员)定位配置", notes = "启用指定类型的车辆(人员)定位配置", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "factoryType", value = "厂家类型1JT808协议2河北跃进", paramType = "body", required = false, dataType = "String"),
})
@PostMapping("/updateConfigEnable")
public Result updateConfigEnable(@RequestBody Map<String, Object> map) {
vehiclePositionConfigService.updateConfigEnable(map);
return Result.ok();
}
}

View File

@ -62,6 +62,7 @@ public class VehiclePositionDevController {
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "personNameOrNumberPlate", value = "车牌或人员名称", paramType = "query", required = false, dataType = "Integer"),
})
@GetMapping(value = "/page")
public Result<IPage<VehiclePositionDev>> queryPageList(@ApiIgnore @RequestParam HashMap<String, Object> paramMap) {

View File

@ -0,0 +1,50 @@
package com.zhgd.xmgl.modules.vehicleposition.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
/**
* @Description: 车辆人员定位配置
* @author pds
* @date 2020-09-16
* @version V1.0
*/
@Data
@TableName("vehicle_position_config")
@ApiModel(value = "VehiclePositionConfig实体类", description = "VehiclePositionConfig")
public class VehiclePositionConfig implements Serializable {
private static final long serialVersionUID = 1L;
/**id*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value="id")
private java.lang.Long id ;
/**项目sn*/
@ApiModelProperty(value="项目sn")
private java.lang.String projectSn ;
/**厂家类型1JT808协议2河北跃进*/
@ApiModelProperty(value="厂家类型1JT808协议2河北跃进")
private java.lang.Integer factoryType ;
/**是否启用1是0否*/
@ApiModelProperty(value="是否启用1是0否")
private java.lang.Integer isEnable ;
/**服务器IP*/
@ApiModelProperty(value="服务器IP")
private java.lang.String ip ;
/**端口*/
@ApiModelProperty(value="端口")
private java.lang.String port ;
/**用户名*/
@ApiModelProperty(value="用户名")
private java.lang.String account ;
/**密码*/
@ApiModelProperty(value="密码")
private java.lang.String pwd ;
}

View File

@ -133,13 +133,23 @@ public class VehiclePositionDev implements Serializable {
*/
@ApiModelProperty(value = "合作单位ids")
private java.lang.String enterpriseIds;
/**
* 合作单位名称
*/
@ApiModelProperty(value = "合作单位名称")
private java.lang.String enterpriseName;
/**
* 车辆人员定位配置id
*/
@ApiModelProperty(value = "车辆人员定位配置id")
private java.lang.Long configId;
/**
* 是否从车辆白名单中选择1是0否
*/
@ApiModelProperty(value = "是否从车辆白名单中选择1是0否")
private java.lang.Integer isFromCarInfo;
@TableField(exist = false)
@ApiModelProperty(value = "在线状态0.离线 1.在线)")

View File

@ -0,0 +1,16 @@
package com.zhgd.xmgl.modules.vehicleposition.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionConfig;
import org.apache.ibatis.annotations.Mapper;
/**
* @Description: 车辆人员定位配置
* @author pds
* @date 2020-09-16
* @version V1.0
*/
@Mapper
public interface VehiclePositionConfigMapper extends BaseMapper<VehiclePositionConfig> {
}

View File

@ -26,17 +26,19 @@ public interface VehiclePositionDevMapper extends BaseMapper<VehiclePositionDev>
*
* @param page
* @param queryWrapper
* @param paramMap
* @return
*/
IPage<VehiclePositionDev> pageList(Page<VehiclePositionDev> page, @Param(Constants.WRAPPER) QueryWrapper<VehiclePositionDev> queryWrapper);
IPage<VehiclePositionDev> pageList(Page<VehiclePositionDev> page, @Param(Constants.WRAPPER) QueryWrapper<VehiclePositionDev> queryWrapper,@Param("param") HashMap<String, Object> paramMap);
/**
* 列表查询车辆人员定位-设备信息
*
* @param queryWrapper
* @param paramMap
* @return
*/
List<VehiclePositionDev> pageList(@Param(Constants.WRAPPER) QueryWrapper<VehiclePositionDev> queryWrapper);
List<VehiclePositionDev> pageList(@Param(Constants.WRAPPER) QueryWrapper<VehiclePositionDev> queryWrapper, @Param("param") HashMap<String, Object> paramMap);
/**
* 统计车辆人员定位-设备信息

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhgd.xmgl.modules.vehicleposition.mapper.VehiclePositionConfigMapper">
</mapper>

View File

@ -8,6 +8,7 @@
CONCAT(IFNULL(vpd.driver, ''), IFNULL(wi.worker_name, '')) driver,
CONCAT(IFNULL(vpd.driver_telephone, ''), IFNULL(ci.driver_telephone, '')) driverTelephone,
vpd2.longitude, vpd2.latitude
,vpd.car_id
from vehicle_position_dev vpd
LEFT JOIN car_info ci ON ci.id = vpd.car_id
LEFT JOIN enterprise_info en ON en.id = ci.enterprise_id
@ -18,7 +19,12 @@
join (select max(create_time) create_time,dev_sn from vehicle_position_data group by dev_sn) t2 on t1.create_time = t2.create_time and t1.dev_sn=t2.dev_sn
group by t1.dev_sn
) vpd2
on vpd2.dev_sn = vpd.dev_sn) a
on vpd2.dev_sn = vpd.dev_sn
where 1=1
<if test="param.personNameOrNumberPlate != null and param.personNameOrNumberPlate != ''">
and ( vpd.number_plate like CONCAT(CONCAT('%',#{personNameOrNumberPlate}),'%') or vpd.person_name like CONCAT(CONCAT('%',#{param.personNameOrNumberPlate}),'%') )
</if>
) a
${ew.customSqlSegment}
</select>

View File

@ -0,0 +1,53 @@
package com.zhgd.xmgl.modules.vehicleposition.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionConfig;
import java.util.List;
import java.util.Map;
/**
* @Description: 车辆人员定位配置
* @author pds
* @date 2020-09-16
* @version V1.0
*/
public interface IVehiclePositionConfigService extends IService<VehiclePositionConfig> {
/**
* 查询启用的车辆人员定位配置
*
* @param map
* @return
*/
VehiclePositionConfig getUseVehiclePositionConfig(Map<String, Object> map);
/**
* 查询项目各类型的车辆人员定位配置信息
*
* @param map
* @return
*/
List<VehiclePositionConfig> selectVehiclePositionConfigList(Map<String, Object> map);
/**
* 查询指定类型的车辆人员定位配置
*
* @param map
* @return
*/
VehiclePositionConfig getVehiclePositionConfigByType(Map<String, Object> map);
/**
* 启用指定类型的车辆人员定位配置
*
* @param map
*/
void updateConfigEnable(Map<String, Object> map);
/**
* 编辑车辆人员定位配置信息
*
* @param vehiclePositionConfig
*/
void editVehiclePositionConfig(VehiclePositionConfig vehiclePositionConfig);
}

View File

@ -2,9 +2,9 @@ package com.zhgd.xmgl.modules.vehicleposition.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDev;
import com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo;
import com.zhgd.xmgl.task.VehiclePositionTask;
import java.util.HashMap;
import java.util.List;
@ -64,4 +64,6 @@ public interface IVehiclePositionDevService extends IService<VehiclePositionDev>
void bind(VehiclePositionDev vehiclePositionDev);
void unBind(VehiclePositionDev vehiclePositionDev);
void updateHeartbeatTimeByHbyj(List<VehiclePositionTask.CaridsToNumberPlate> caridToNumberPlates);
}

View File

@ -0,0 +1,90 @@
package com.zhgd.xmgl.modules.vehicleposition.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionConfig;
import com.zhgd.xmgl.modules.vehicleposition.mapper.VehiclePositionConfigMapper;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionConfigService;
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.List;
import java.util.Map;
/**
* @Description: 车辆人员定位配置
* @author pds
* @date 2020-09-16
* @version V1.0
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class VehiclePositionConfigServiceImpl extends ServiceImpl<VehiclePositionConfigMapper, VehiclePositionConfig> implements IVehiclePositionConfigService {
@Autowired
private VehiclePositionConfigMapper vehiclePositionConfigMapper;
@Override
public VehiclePositionConfig getUseVehiclePositionConfig(Map<String, Object> map) {
QueryWrapper<VehiclePositionConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(VehiclePositionConfig::getProjectSn, MapUtils.getString(map, "projectSn"))
.eq(VehiclePositionConfig::getIsEnable, 1);
return vehiclePositionConfigMapper.selectOne(queryWrapper);
}
@Override
public List<VehiclePositionConfig> selectVehiclePositionConfigList(Map<String, Object> map) {
QueryWrapper<VehiclePositionConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(VehiclePositionConfig::getProjectSn, MapUtils.getString(map, "projectSn"));
return vehiclePositionConfigMapper.selectList(queryWrapper);
}
@Override
public VehiclePositionConfig getVehiclePositionConfigByType(Map<String, Object> map) {
QueryWrapper<VehiclePositionConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(VehiclePositionConfig::getProjectSn, MapUtils.getString(map, "projectSn"))
.eq(VehiclePositionConfig::getFactoryType, MapUtils.getString(map, "videoType"));
return vehiclePositionConfigMapper.selectOne(queryWrapper);
}
@Override
public void updateConfigEnable(Map<String, Object> map) {
VehiclePositionConfig vehiclePositionConfig = new VehiclePositionConfig();
vehiclePositionConfig.setProjectSn(MapUtils.getString(map, "projectSn"));
vehiclePositionConfig.setIsEnable(0);
QueryWrapper<VehiclePositionConfig> qw = new QueryWrapper<>();
qw.lambda().eq(VehiclePositionConfig::getProjectSn, MapUtils.getString(map, "projectSn"));
vehiclePositionConfigMapper.update(vehiclePositionConfig, qw);
QueryWrapper<VehiclePositionConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(VehiclePositionConfig::getProjectSn, MapUtils.getString(map, "projectSn"))
.eq(VehiclePositionConfig::getFactoryType, MapUtils.getString(map, "factoryType"));
VehiclePositionConfig tempVehiclePositionConfig = vehiclePositionConfigMapper.selectOne(queryWrapper);
if (tempVehiclePositionConfig != null) {
vehiclePositionConfig.setId(tempVehiclePositionConfig.getId());
vehiclePositionConfig.setIsEnable(1);
vehiclePositionConfigMapper.updateById(vehiclePositionConfig);
} else {
vehiclePositionConfig.setIsEnable(1);
vehiclePositionConfig.setFactoryType(MapUtils.getInteger(map, "factoryType"));
vehiclePositionConfigMapper.insert(vehiclePositionConfig);
}
}
@Override
public void editVehiclePositionConfig(VehiclePositionConfig vehiclePositionConfig) {
QueryWrapper<VehiclePositionConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(VehiclePositionConfig::getProjectSn, vehiclePositionConfig.getProjectSn())
.eq(VehiclePositionConfig::getFactoryType, vehiclePositionConfig.getFactoryType());
VehiclePositionConfig tempVehiclePositionConfig = vehiclePositionConfigMapper.selectOne(queryWrapper);
if (tempVehiclePositionConfig != null) {
vehiclePositionConfig.setId(tempVehiclePositionConfig.getId());
vehiclePositionConfigMapper.updateById(vehiclePositionConfig);
} else {
vehiclePositionConfigMapper.insert(vehiclePositionConfig);
}
}
}

View File

@ -1,16 +1,17 @@
package com.zhgd.xmgl.modules.vehicleposition.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;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.safetyhat.entity.SafetyHatDev;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionAlarm;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionData;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDayRecord;
@ -20,6 +21,7 @@ import com.zhgd.xmgl.modules.vehicleposition.mapper.*;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionDevService;
import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo;
import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper;
import com.zhgd.xmgl.task.VehiclePositionTask;
import com.zhgd.xmgl.util.PageUtil;
import com.zhgd.xmgl.util.RefUtil;
import org.apache.commons.collections.MapUtils;
@ -67,7 +69,7 @@ public class VehiclePositionDevServiceImpl extends ServiceImpl<VehiclePositionDe
if (StringUtils.isNotBlank(enterpriseId)) {
queryWrapper.in("a.id", new ArrayList<>(Arrays.asList(enterpriseId.split(","))));
}
IPage<VehiclePositionDev> pageList = baseMapper.pageList(page, queryWrapper);
IPage<VehiclePositionDev> pageList = baseMapper.pageList(page, queryWrapper,paramMap);
pageList.setRecords(dealList(pageList.getRecords()));
return pageList;
}
@ -75,7 +77,7 @@ public class VehiclePositionDevServiceImpl extends ServiceImpl<VehiclePositionDe
@Override
public List<VehiclePositionDev> queryList(HashMap<String, Object> paramMap) {
QueryWrapper<VehiclePositionDev> queryWrapper = getQueryWrapper(paramMap);
return dealList(baseMapper.pageList(queryWrapper));
return dealList(baseMapper.pageList(queryWrapper,paramMap));
}
@Override
@ -170,4 +172,15 @@ public class VehiclePositionDevServiceImpl extends ServiceImpl<VehiclePositionDe
}
this.updateBatchById(hatDevs);
}
@Override
public void updateHeartbeatTimeByHbyj(List<VehiclePositionTask.CaridsToNumberPlate> caridToNumberPlates) {
List<Long> onlineIds = caridToNumberPlates.stream().filter(o -> Objects.equals(o.getIsOnline(), 1)).map(VehiclePositionTask.CaridsToNumberPlate::getId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(onlineIds)) {
this.update(null, new LambdaUpdateWrapper<VehiclePositionDev>()
.eq(VehiclePositionDev::getHeartbeatTime, DateUtil.now())
.in(VehiclePositionDev::getId, onlineIds)
);
}
}
}

View File

@ -0,0 +1,155 @@
package com.zhgd.xmgl.task;
import java.util.Date;
import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONArray;
import com.google.common.collect.Lists;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.modules.project.service.IProjectService;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionConfig;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionData;
import com.zhgd.xmgl.modules.vehicleposition.entity.VehiclePositionDev;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionConfigService;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionDataService;
import com.zhgd.xmgl.modules.vehicleposition.service.IVehiclePositionDevService;
import com.zhgd.xmgl.util.HbyjUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@RequestMapping("/xmgl/task")
@RestController
public class VehiclePositionTask {
@Lazy
@Autowired
private IVehiclePositionConfigService vehiclePositionConfigService;
@Lazy
@Autowired
private IVehiclePositionDevService vehiclePositionDevService;
@Lazy
@Autowired
private IVehiclePositionDataService vehiclePositionDataService;
/**
* 定时保存车辆人员定位数据河北跃进
*/
@Scheduled(cron = "* */10 * * * ?")
@SchedulerLock(name = "saveVehiclePositionDatas", lockAtMostFor = 1000 * 60, lockAtLeastFor = 1000 * 60)
@RequestMapping("saveVehiclePositionDatas")
public void saveVehiclePositionDatas() {
List<VehiclePositionConfig> configs = vehiclePositionConfigService.list(new LambdaQueryWrapper<VehiclePositionConfig>()
.eq(VehiclePositionConfig::getIsEnable, 1)
.eq(VehiclePositionConfig::getFactoryType, 2)
);
Date now = new Date();
String begin = DateUtil.formatDateTime(now);
String end = DateUtil.formatDateTime(DateUtil.offsetMinute(now, -10));
Map<String, List<VehiclePositionDev>> projectMap = vehiclePositionDevService.list(null).stream().collect(Collectors.groupingBy(VehiclePositionDev::getProjectSn));
for (VehiclePositionConfig config : configs) {
List<VehiclePositionDev> devList = projectMap.get(config.getProjectSn());
if (CollUtil.isEmpty(devList)) {
continue;
}
try {
HbyjUtil.HbyjAuth auth = HbyjUtil.getAuth(config.getIp(), config.getPort(), config.getAccount(), config.getPwd());
JSONObject jsonObject = HbyjUtil.getCarInfosByProjectId(config.getIp(), config.getPort(), auth.getProject_id());
if (!Objects.equals(jsonObject.getInteger("code"), 200)) {
throw new OpenAlertException("保存车辆(人员)定位数据车辆信息错误:" + jsonObject.getString("msg"));
}
List<CaridsToNumberPlate> caridToNumberPlates = getCaridsToNumberPlate(jsonObject, devList);
if (CollUtil.isEmpty(caridToNumberPlates)) {
continue;
}
vehiclePositionDevService.updateHeartbeatTimeByHbyj(caridToNumberPlates);
String carid = caridToNumberPlates.stream().map(CaridsToNumberPlate::getCarid).collect(Collectors.joining(","));
jsonObject = HbyjUtil.getPositionDatas(begin, end, carid, auth.getProject_id(), config.getIp(), config.getPort(),auth.getToken());
if (!Objects.equals(jsonObject.getInteger("code"), 200)) {
if (!Objects.equals(jsonObject.getInteger("code"), 500) || !Objects.equals(jsonObject.getString("msg"), "无数据")) {
throw new OpenAlertException("保存车辆(人员)定位数据车辆历史轨迹数据错误:" + jsonObject.getString("msg"));
}
}
List<VehiclePositionData> positionDatas = getVehiclePositionDatas(caridToNumberPlates, jsonObject);
if (CollUtil.isNotEmpty(positionDatas)) {
vehiclePositionDataService.saveBatch(positionDatas);
}
} catch (Exception e) {
log.info("", e);
log.error("定时保存车辆(人员)定位数据(河北跃进)错误:{}", e.getMessage());
}
}
}
private List<VehiclePositionData> getVehiclePositionDatas(List<CaridsToNumberPlate> caridToNumberPlates, JSONObject jsonObject) {
List<VehiclePositionData> vehiclePositionDatalist = Lists.newArrayList();
JSONArray body = jsonObject.getJSONArray("body");
for (int i = 0; i < body.size(); i++) {
JSONArray jsonArray = body.getJSONArray(i);
CaridsToNumberPlate plate = caridToNumberPlates.get(i);
for (int j = 0; j < jsonArray.size(); j++) {
JSONObject jo1 = jsonArray.getJSONObject(j);
VehiclePositionData data = new VehiclePositionData();
data.setDevSn(plate.getDevSn());
data.setLongitude(jo1.getDouble("longitude"));
data.setLatitude(jo1.getDouble("latitude"));
data.setProjectSn(data.getProjectSn());
data.setSpeed(jo1.getDouble("speed"));
data.setMileage(Convert.toLong(jo1.getString("totalmileage")));
data.setCreateTime(DateUtil.parseDateTime(jo1.getString("gps_time")));
data.setProjectSn(plate.getProjectSn());
if (!Objects.equals(data.getLongitude(), 0D) || !Objects.equals(data.getLatitude(), 0D)) {
vehiclePositionDatalist.add(data);
}
}
}
return vehiclePositionDatalist;
}
private List<CaridsToNumberPlate> getCaridsToNumberPlate(JSONObject jsonObject, List<VehiclePositionDev> devList) {
List<CaridsToNumberPlate> caridsToNumberPlatelist = Lists.newArrayList();
JSONArray datas = jsonObject.getJSONArray("data");
if (CollUtil.isEmpty(datas)) {
return caridsToNumberPlatelist;
}
Map<String, JSONObject> numberPlateMap = datas.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("car_number_plate"), o -> ((JSONObject) o), (o1, o2) -> o1));
for (VehiclePositionDev dev : devList) {
JSONObject jsonObject1 = numberPlateMap.get(dev.getNumberPlate());
if (jsonObject1 != null) {
CaridsToNumberPlate plate = new CaridsToNumberPlate();
plate.setId(dev.getId());
plate.setCarid(jsonObject1.getString("car_id"));
plate.setIsOnline(jsonObject1.getInteger("is_online"));
plate.setNumberPlate(jsonObject1.getString("car_number_plate"));
plate.setDevSn(dev.getDevSn());
plate.setProjectSn(dev.getProjectSn());
caridsToNumberPlatelist.add(plate);
}
}
return caridsToNumberPlatelist;
}
@Data
public static class CaridsToNumberPlate {
private Long id;
private String carid;
private String numberPlate;
private String devSn;
private Integer isOnline;
private java.lang.String projectSn;
}
}

View File

@ -0,0 +1,108 @@
package com.zhgd.xmgl.util;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.gexin.fastjson.JSON;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@Slf4j
public class HbyjUtil {
/**
* 河北跃进机械文档-登录
*
* @param ip
* @param port
* @param account
* @param pwd
* @return
*/
public static HbyjAuth getAuth(String ip, String port, String account, String pwd) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("user_name", account);
paramMap.put("password", pwd);
String url = getHost(ip,port) + "/index.php/home/login/login";
log.info("河北跃进机械文档-登录,url:{},param:{}", url, JSON.toJSONString(paramMap));
String result = HttpRequest.post(url).form(paramMap).execute().body();
log.info("河北跃进机械文档-登录,rs:{}", result);
JSONObject jsonObject = JSONObject.parseObject(result);
if (!Objects.equals(jsonObject.getInteger("code"), 200)) {
throw new OpenAlertException("河北跃进机械文档-登录错误:" + jsonObject.getString("msg"));
}
JSONObject data = jsonObject.getJSONObject("data");
HbyjAuth auth = new HbyjAuth();
auth.setToken(data.getString("token"));
auth.setProject_id(data.getString("project_id"));
return auth;
}
/**
* 河北跃进机械文档-获取车辆信息
*
* @param ip
* @param port
* @param project_id
* @return
*/
public static JSONObject getCarInfosByProjectId(String ip, String port, String project_id) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("project_id", project_id);
String url = getHost(ip, port) + "/index.php/home/api/get_car_info";
log.info("河北跃进机械文档-获取车辆信息,url:{},param:{}", url, JSON.toJSONString(paramMap));
String result = HttpRequest.post(url).form(paramMap).execute().body();
log.info("河北跃进机械文档-获取车辆信息,rs:{}", result);
return JSONObject.parseObject(result);
}
private static String getHost(String ip, String port) {
if (StrUtil.isBlank(port)) {
if (StrUtil.startWith(ip, "http")) {
port = "80";
} else if (StrUtil.startWith(ip, "https")) {
port = "443";
}
}
return ip + ":" + port;
}
/**
* 河北跃进机械文档-获取车辆历史轨迹数据
*
* @param begin
* @param end
* @param carid
* @param project_id
* @param ip
* @param port
* @param token
* @return
*/
public static JSONObject getPositionDatas(String begin, String end, String carid, String project_id, String ip, String port, String token) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("starttime", begin);
paramMap.put("endtime", end);
paramMap.put("carid", carid);
paramMap.put("page", 1);
paramMap.put("pid", project_id);
String url = "http://39.100.225.87:8085/api/getPlayback?" + URLUtil.buildQuery(paramMap, StandardCharsets.UTF_8);
log.info("河北跃进机械文档-获取车辆历史轨迹数据,url:{},param:{}", url, JSON.toJSONString(paramMap));
String result = HttpRequest.get(url).header("token",token).execute().body();
log.info("河北跃进机械文档-获取车辆历史轨迹数据,rs:{}", result);
return JSONObject.parseObject(result);
}
@Data
public static class HbyjAuth {
private String token;
private String project_id;
}
}