diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/controller/VehiclePositionConfigController.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/controller/VehiclePositionConfigController.java new file mode 100644 index 000000000..3b732d50b --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/controller/VehiclePositionConfigController.java @@ -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> queryPageList(@RequestBody Map 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 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 getUseVehiclePositionConfig(@RequestBody Map 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 getVehiclePositionConfigByType(@RequestBody Map 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 map) { + vehiclePositionConfigService.updateConfigEnable(map); + return Result.ok(); + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/controller/VehiclePositionDevController.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/controller/VehiclePositionDevController.java index 8cc737f5f..e1fc08e12 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/controller/VehiclePositionDevController.java +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/controller/VehiclePositionDevController.java @@ -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> queryPageList(@ApiIgnore @RequestParam HashMap paramMap) { diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/entity/VehiclePositionConfig.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/entity/VehiclePositionConfig.java new file mode 100644 index 000000000..83b8bc930 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/entity/VehiclePositionConfig.java @@ -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 ; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/entity/VehiclePositionDev.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/entity/VehiclePositionDev.java index e3b22a13f..42391236b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/entity/VehiclePositionDev.java +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/entity/VehiclePositionDev.java @@ -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.在线)") diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/VehiclePositionConfigMapper.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/VehiclePositionConfigMapper.java new file mode 100644 index 000000000..78c90950c --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/VehiclePositionConfigMapper.java @@ -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 { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/VehiclePositionDevMapper.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/VehiclePositionDevMapper.java index 8dd225564..10482301f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/VehiclePositionDevMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/VehiclePositionDevMapper.java @@ -26,17 +26,19 @@ public interface VehiclePositionDevMapper extends BaseMapper * * @param page * @param queryWrapper + * @param paramMap * @return */ - IPage pageList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + IPage pageList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper,@Param("param") HashMap paramMap); /** * 列表查询车辆(人员)定位-设备信息 * * @param queryWrapper + * @param paramMap * @return */ - List pageList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); + List pageList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("param") HashMap paramMap); /** * 统计车辆(人员)定位-设备信息 diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/xml/ProjectPoliceCameraConfigMapper.xml b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/xml/ProjectPoliceCameraConfigMapper.xml new file mode 100644 index 000000000..8453b5f26 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/xml/ProjectPoliceCameraConfigMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/xml/VehiclePositionDevMapper.xml b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/xml/VehiclePositionDevMapper.xml index 538ee3eec..61e42efed 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/xml/VehiclePositionDevMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/mapper/xml/VehiclePositionDevMapper.xml @@ -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 + + and ( vpd.number_plate like CONCAT(CONCAT('%',#{personNameOrNumberPlate}),'%') or vpd.person_name like CONCAT(CONCAT('%',#{param.personNameOrNumberPlate}),'%') ) + + ) a ${ew.customSqlSegment} diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionConfigService.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionConfigService.java new file mode 100644 index 000000000..787a6f55a --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionConfigService.java @@ -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 { + /** + * 查询启用的车辆(人员)定位配置 + * + * @param map + * @return + */ + VehiclePositionConfig getUseVehiclePositionConfig(Map map); + + /** + * 查询项目各类型的车辆(人员)定位配置信息 + * + * @param map + * @return + */ + List selectVehiclePositionConfigList(Map map); + + /** + * 查询指定类型的车辆(人员)定位配置 + * + * @param map + * @return + */ + VehiclePositionConfig getVehiclePositionConfigByType(Map map); + + /** + * 启用指定类型的车辆(人员)定位配置 + * + * @param map + */ + void updateConfigEnable(Map map); + + /** + * 编辑车辆(人员)定位配置信息 + * + * @param vehiclePositionConfig + */ + void editVehiclePositionConfig(VehiclePositionConfig vehiclePositionConfig); +} diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionDevService.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionDevService.java index 18cbc1703..9526de5e6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionDevService.java +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/IVehiclePositionDevService.java @@ -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 void bind(VehiclePositionDev vehiclePositionDev); void unBind(VehiclePositionDev vehiclePositionDev); + + void updateHeartbeatTimeByHbyj(List caridToNumberPlates); } diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionConfigServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionConfigServiceImpl.java new file mode 100644 index 000000000..d3b47efd8 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionConfigServiceImpl.java @@ -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 implements IVehiclePositionConfigService { + @Autowired + private VehiclePositionConfigMapper vehiclePositionConfigMapper; + + + @Override + public VehiclePositionConfig getUseVehiclePositionConfig(Map map) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(VehiclePositionConfig::getProjectSn, MapUtils.getString(map, "projectSn")) + .eq(VehiclePositionConfig::getIsEnable, 1); + return vehiclePositionConfigMapper.selectOne(queryWrapper); + } + + @Override + public List selectVehiclePositionConfigList(Map map) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(VehiclePositionConfig::getProjectSn, MapUtils.getString(map, "projectSn")); + return vehiclePositionConfigMapper.selectList(queryWrapper); + } + + @Override + public VehiclePositionConfig getVehiclePositionConfigByType(Map map) { + QueryWrapper 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 map) { + VehiclePositionConfig vehiclePositionConfig = new VehiclePositionConfig(); + vehiclePositionConfig.setProjectSn(MapUtils.getString(map, "projectSn")); + vehiclePositionConfig.setIsEnable(0); + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(VehiclePositionConfig::getProjectSn, MapUtils.getString(map, "projectSn")); + vehiclePositionConfigMapper.update(vehiclePositionConfig, qw); + QueryWrapper 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 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); + } + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDevServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDevServiceImpl.java index 77c9d8285..ce5b77090 100644 --- a/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDevServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/vehicleposition/service/impl/VehiclePositionDevServiceImpl.java @@ -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(Arrays.asList(enterpriseId.split(",")))); } - IPage pageList = baseMapper.pageList(page, queryWrapper); + IPage pageList = baseMapper.pageList(page, queryWrapper,paramMap); pageList.setRecords(dealList(pageList.getRecords())); return pageList; } @@ -75,7 +77,7 @@ public class VehiclePositionDevServiceImpl extends ServiceImpl queryList(HashMap paramMap) { QueryWrapper queryWrapper = getQueryWrapper(paramMap); - return dealList(baseMapper.pageList(queryWrapper)); + return dealList(baseMapper.pageList(queryWrapper,paramMap)); } @Override @@ -170,4 +172,15 @@ public class VehiclePositionDevServiceImpl extends ServiceImpl caridToNumberPlates) { + List 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() + .eq(VehiclePositionDev::getHeartbeatTime, DateUtil.now()) + .in(VehiclePositionDev::getId, onlineIds) + ); + } + } } diff --git a/src/main/java/com/zhgd/xmgl/task/VehiclePositionTask.java b/src/main/java/com/zhgd/xmgl/task/VehiclePositionTask.java new file mode 100644 index 000000000..d602c98a2 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/task/VehiclePositionTask.java @@ -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 configs = vehiclePositionConfigService.list(new LambdaQueryWrapper() + .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> projectMap = vehiclePositionDevService.list(null).stream().collect(Collectors.groupingBy(VehiclePositionDev::getProjectSn)); + for (VehiclePositionConfig config : configs) { + List 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 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 positionDatas = getVehiclePositionDatas(caridToNumberPlates, jsonObject); + if (CollUtil.isNotEmpty(positionDatas)) { + vehiclePositionDataService.saveBatch(positionDatas); + } + } catch (Exception e) { + log.info("", e); + log.error("定时保存车辆(人员)定位数据(河北跃进)错误:{}", e.getMessage()); + } + + } + } + + private List getVehiclePositionDatas(List caridToNumberPlates, JSONObject jsonObject) { + List 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 getCaridsToNumberPlate(JSONObject jsonObject, List devList) { + List caridsToNumberPlatelist = Lists.newArrayList(); + JSONArray datas = jsonObject.getJSONArray("data"); + if (CollUtil.isEmpty(datas)) { + return caridsToNumberPlatelist; + } + Map 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; + } +} diff --git a/src/main/java/com/zhgd/xmgl/util/HbyjUtil.java b/src/main/java/com/zhgd/xmgl/util/HbyjUtil.java new file mode 100644 index 000000000..4bc659d23 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/util/HbyjUtil.java @@ -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 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 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 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; + } +}