Commit 65242508 authored by caotao's avatar caotao

1.按月统计里程接口增加筛选、异常轨迹接口增加筛选。

2.增加车辆告警相关功能代码。 3.车辆当月里程导出里程规范.
parent ea000999
package com.yeejoin.equipmanage.common.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.yeejoin.equipmanage.common.entity.publics.BaseEntity;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentOnCarAppVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 消防车信息
*
* @author wujiang
* @date 2020-07-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value="wl_car_speed_warning_record",autoResultMap = true)
@ApiModel(value = "车辆告警信息实体类", description = "车辆告警信息")
public class CarSpeedWarningRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "车牌号")
private String carNum;
@ApiModelProperty(value = "告警时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date waringDate;
@ApiModelProperty(value = "超速值")
@TableField("over_speed")
private Double overSpeed;
@ApiModelProperty(value = "机构/部门名称")
@TableField("biz_org_name")
private String bizOrgName;
// 2023年11月6日 11点16分添加
@ApiModelProperty(value = "司机")
@TableField("driver")
private String driver;
// 2023年11月6日 11点16分添加
@ApiModelProperty(value = "联系电话")
@TableField("phone")
private String phone;
@ApiModelProperty(value = "联系电话")
@TableField("ownership")
private String ownership;
}
......@@ -473,7 +473,7 @@ public class CarController extends AbstractBaseController {
/**
* 根据车辆id查询车辆详情信息,供iot_tree展示
*
* @param carNum
* @param id
* @return
*/
@RequestMapping(value = "/threeDimensional/getCarDetailById/{id}", method = RequestMethod.GET)
......@@ -1337,7 +1337,7 @@ public class CarController extends AbstractBaseController {
/**
* 根据查询车辆简要信息
*
* @param id
* @param carNum
* @return
*/
@RequestMapping(value = "/state/info", method = RequestMethod.GET)
......@@ -1422,8 +1422,8 @@ public class CarController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarEquipAlarmInfoDto", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-获取设备告警信息", notes = "车辆统计-获取设备告警信息")
public Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto() {
return iCarService.getCarEquipAlarmInfoDto();
public Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto(@RequestParam(required = false) String keyWord) {
return iCarService.getCarEquipAlarmInfoDto(keyWord);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
......@@ -1443,15 +1443,15 @@ public class CarController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarMileageInfoByMoth", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-按照月份统计车辆里程", notes = "车辆统计-按照月份统计车辆里程")
public BasicTableDataDto getCarMileageInfoByMoth(@RequestParam(required = false) String date, @RequestParam Integer current, @RequestParam Integer size) {
return iCarService.getCarMileageInfoByMoth(date, current, size);
public BasicTableDataDto getCarMileageInfoByMoth(@RequestParam(required = false) String date, @RequestParam Integer current, @RequestParam Integer size,@RequestParam(required = false) String keyWord) {
return iCarService.getCarMileageInfoByMoth(date, current, size, keyWord);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/exportCarMileageInfoByMoth", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-按照月份统计导出车辆里程", notes = "车辆统计-按照月份统计导出车辆里程")
public void exportCarMileageInfoByMoth(@RequestParam(required = false) String date, HttpServletResponse response) {
List<CarExportDto> list = this.iCarService.exportCarMileageInfoByMoth(date);
public void exportCarMileageInfoByMoth(@RequestParam(required = false) String date,@RequestParam(required = false) String keyWord, HttpServletResponse response) {
List<CarExportDto> list = this.iCarService.exportCarMileageInfoByMoth(date,keyWord);
if (org.springframework.util.StringUtils.isEmpty(date)) {
date = DateUtil.format(new Date(), "yyyy-MM");
}
......@@ -1469,7 +1469,14 @@ public class CarController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarExcepitonTrack", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-按照日期范围获取异常车辆", notes = "车辆统计-按照日期范围获取异常车辆")
public Page<CarExceptionDto> getCarExcepitonTrack(@RequestParam Integer type) {
return iCarService.getCarExcepitonTrack(type);
public Page<CarExceptionDto> getCarExcepitonTrack(@RequestParam Integer type,@RequestParam(required = false) String keyWord) {
return iCarService.getCarExcepitonTrack(type,keyWord);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping(value = "/getCarWarningRecord", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "车辆统计-获取超速信息", notes = "车辆统计-获取超速信息")
public Page<CarSpeedWarningRecord> getCarWarningRecord(@RequestParam(required = false) String keyWord) {
return iCarService.getCarWarningRecord(keyWord);
}
}
......@@ -16,4 +16,6 @@ public class MileageDto {
private String number;
//iotCode+date
private String iotCode;
//所属单位
private String bizOrgName;
}
package com.yeejoin.equipmanage.listener;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
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.yeejoin.equipmanage.common.entity.Car;
import com.yeejoin.equipmanage.common.entity.CarSpeedWarningRecord;
import com.yeejoin.equipmanage.common.entity.WlCarMileage;
import com.yeejoin.equipmanage.fegin.IotFeign;
import com.yeejoin.equipmanage.mapper.WlCarSpeedWaringRecordMapper;
import com.yeejoin.equipmanage.service.ICarService;
import com.yeejoin.equipmanage.service.IWlCarMileageService;
import com.yeejoin.equipmanage.thread.ThreadCar;
......@@ -43,8 +47,13 @@ public class CarIotNewListener extends EmqxListener {
@Autowired
private IotFeign iotFeign;
@Autowired
private WlCarSpeedWaringRecordMapper wlCarSpeedWaringRecordMapper;
@Value("${mileage.clippingtime:600000}")
private Long clipping_time;
@Value("${default.maxspeed:70.0}")
private Double defaultMaxSpeed;
private final String GUIDE_KEY = "813684495d9a3981dd2c7694916fe404";
private final String GUIDE_URL = "https://restapi.amap.com/v3/geocode/regeo?";
......@@ -191,7 +200,9 @@ public class CarIotNewListener extends EmqxListener {
double startLongitude = jsonObject.getDoubleValue("FireCar_Longitude");
double startLatitude = jsonObject.getDoubleValue("FireCar_Latitude");
int direction = jsonObject.getIntValue("direction");
String waringDate = jsonObject.getString("createdTime");
Double speed=jsonObject.getDoubleValue("FireCar_Speed");
Double maxSpeed = defaultMaxSpeed;
// 地图推送消息
Car car = iCarService.getOne(new LambdaQueryWrapper<Car>().eq(Car::getIotCode, iotCode));
if (car != null && startLongitude != 0 && startLatitude != 0) {
......@@ -208,7 +219,22 @@ public class CarIotNewListener extends EmqxListener {
mqttMessage.setPayload(sendArr.toJSONString().getBytes());
car.setLongitude(startLongitude);
car.setLatitude(startLatitude);
if(!ObjectUtils.isEmpty(car.getMaxSpeed())){
maxSpeed =car.getMaxSpeed();
}
iCarService.updateById(car);
if(speed > maxSpeed){
CarSpeedWarningRecord carSpeedWarningRecord = new CarSpeedWarningRecord();
carSpeedWarningRecord.setCarNum(car.getCarNum());
carSpeedWarningRecord.setDriver(car.getDriver());
carSpeedWarningRecord.setPhone(car.getPhone());
carSpeedWarningRecord.setOverSpeed(speed-maxSpeed);
carSpeedWarningRecord.setOwnership(car.getOwnership());
carSpeedWarningRecord.setBizOrgName(car.getBizOrgName());
carSpeedWarningRecord.setWaringDate(DateUtil.parse(waringDate, DatePattern.NORM_DATETIME_PATTERN));
wlCarSpeedWaringRecordMapper.insert(carSpeedWarningRecord);
logger.info("-----------触发车辆超速告警成功--------");
}
logger.info("-----------推送车辆位置消息到到地图成功--------");
try {
emqkeeper.getMqttClient().publish("car/location", mqttMessage);
......
package com.yeejoin.equipmanage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.equipmanage.common.entity.CarSpeedWarningRecord;
public interface WlCarSpeedWaringRecordMapper extends BaseMapper<CarSpeedWarningRecord> {
}
......@@ -8,10 +8,7 @@ import com.yeejoin.equipmanage.common.datasync.entity.FireVehicle;
import com.yeejoin.equipmanage.common.dto.CarFusionDto;
import com.yeejoin.equipmanage.common.dto.CarInfoDto;
import com.yeejoin.equipmanage.common.dto.CarStatusInfoDto;
import com.yeejoin.equipmanage.common.entity.Car;
import com.yeejoin.equipmanage.common.entity.CarInfo;
import com.yeejoin.equipmanage.common.entity.CarProperty;
import com.yeejoin.equipmanage.common.entity.EquipmentCategory;
import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.entity.dto.CarDto;
import com.yeejoin.equipmanage.common.entity.dto.CarEquipAlarmInfoDto;
import com.yeejoin.equipmanage.common.entity.dto.CarEquipStateInfoDto;
......@@ -19,6 +16,7 @@ import com.yeejoin.equipmanage.common.entity.vo.CarIndexVo;
import com.yeejoin.equipmanage.common.entity.vo.CarPropertyVo;
import com.yeejoin.equipmanage.common.vo.*;
import com.yeejoin.equipmanage.dto.*;
import javassist.compiler.ast.Keyword;
import java.util.HashMap;
import java.util.List;
......@@ -200,19 +198,18 @@ public interface ICarService extends IService<Car> {
Map<String,Integer> getCountOfCarBelongCompany();
List<ChartIntegerDto> getCarCategoryInfo() ;
Page<CarEquipStateInfoDto> getCarEquipStateInfo();
Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto();
Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto(String keyWord);
List<ChartIntegerDto>getCarBelongAreaInfo() ;
Page<CarAreaInfoDto> getCarAreaInfo(String areaName ) ;
BasicTableDataDto getCarMileageInfoByMoth(String date,Integer current,Integer pageSize);
List<CarExportDto> exportCarMileageInfoByMoth(String date);
BasicTableDataDto getCarMileageInfoByMoth(String date, Integer current, Integer pageSize,String keyWord);
List<CarExportDto> exportCarMileageInfoByMoth(String date,String keyWord);
ZZChartsDto getCarMileageInfoByMothOFDay(String iotCode);
Page<CarExceptionDto> getCarExcepitonTrack(Integer type);
Page<CarExceptionDto> getCarExcepitonTrack(Integer type,String keyWord);
Page<CarSpeedWarningRecord> getCarWarningRecord(String keyWord);
/**
* 查询车辆启动状态,赋码
*/
List<Map<String, String>> updateCarStartStatus();
/**
* 赋码
*/
......
......@@ -67,7 +67,6 @@ import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
......@@ -141,7 +140,8 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
@Autowired
EquipmentSpecificMapper equipmentSpecificMapper;
@Autowired
WlCarSpeedWaringRecordMapper wlCarSpeedWaringRecordMapper;
@Autowired
private RemoteSecurityService remoteSecurityService;
......@@ -1820,14 +1820,20 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto() {
public Page<CarEquipAlarmInfoDto> getCarEquipAlarmInfoDto(String keyWord) {
Page<CarEquipAlarmInfoDto> page = new Page<>();
List<CarEquipAlarmInfoDto> list = carMapper.getCarEquipAlarmInfo(carEquipAlarmBatteryNumber);
List<Car> list =this.list().stream().filter(car -> Integer.valueOf(car.getExtra2())< carEquipAlarmBatteryNumber).collect(Collectors.toList());
if(StringUtils.isNotEmpty(keyWord)){
list=list.stream().filter(car -> car.getBizOrgName().contains(keyWord)||car.getOwnership().contains(keyWord)).collect(Collectors.toList());
}
List<CarEquipAlarmInfoDto> carEquipAlarmInfoDtoList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
list.get(i).setNo(i+1);
list.get(i).setAlarmMessage("该设备电量低于"+carEquipAlarmBatteryNumber+"%!");
CarEquipAlarmInfoDto carEquipAlarmInfoDto=new CarEquipAlarmInfoDto();
carEquipAlarmInfoDto.setCarNum(list.get(i).getCarNum());
carEquipAlarmInfoDto.setNo(i+1);
carEquipAlarmInfoDto.setAlarmMessage("该设备电量低于"+carEquipAlarmBatteryNumber+"%!");
}
page.setRecords(list);
page.setRecords(carEquipAlarmInfoDtoList);
page.setTotal(list.size());
page.setCurrent(1);
page.setSize(10);
......@@ -1884,21 +1890,27 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public BasicTableDataDto getCarMileageInfoByMoth(String date,Integer current,Integer pageSize) {
public BasicTableDataDto getCarMileageInfoByMoth(String date,Integer current,Integer pageSize,String keyWord) {
BasicTableDataDto basicTableDataDto = new BasicTableDataDto();
List<ColModel> colModels = new ArrayList<>();
colModels.add(new ColModel("carNum","车牌号"));
colModels.add(new ColModel("carCode","编号"));
colModels.add(new ColModel("bizOrgName","所属单位"));
colModels.add(new ColModel("total","当月里程"));
List<MileageDto> mileageDtoList = new ArrayList<>();
List<Car> list = this.list();
if(StringUtils.isNotEmpty(keyWord)){
list=list.stream().filter(car -> car.getBizOrgName().contains(keyWord)||car.getOwnership().contains(keyWord)).collect(Collectors.toList());
}
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
MileageDto mileageDto = new MileageDto();
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(date, list.get(i).getIotCode());
mileageDto.setCarNum(list.get(i).getCarNum());
mileageDto.setCarCode(list.get(i).getRemark());
mileageDto.setIotCode(date + "::" + list.get(i).getIotCode());
Car car = list.get(i);
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(date, car.getIotCode());
mileageDto.setCarNum(car.getCarNum());
mileageDto.setCarCode(car.getRemark());
mileageDto.setBizOrgName(car.getBizOrgName());
mileageDto.setIotCode(date + "::" + car.getIotCode());
if (totalTravel != null) {
// mileageDto.setTotalTravel((totalTravel / carMaxTravel) * 100);
mileageDto.setTotalTravel(totalTravel);
......@@ -1911,21 +1923,26 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
}
mileageDtoList = mileageDtoList.stream().sorted(Comparator.comparing(MileageDto::getTotalTravel).reversed()).collect(Collectors.toList());
DataGridMock mypageDto=new DataGridMock(current,mileageDtoList.size(),true,current,mileageDtoList.subList((current-1)*pageSize,current*pageSize));
Integer from=(current-1)*pageSize>mileageDtoList.size()?mileageDtoList.size():(current-1)*pageSize;
Integer to=current*pageSize>mileageDtoList.size()?mileageDtoList.size():current*pageSize;
DataGridMock mypageDto=new DataGridMock(current,mileageDtoList.size(),true,current,mileageDtoList.subList(from,to));
basicTableDataDto.setDataGridMock(mypageDto);
basicTableDataDto.setColModel(colModels);
return basicTableDataDto;
}
@Override
public List<CarExportDto> exportCarMileageInfoByMoth(String date) {
public List<CarExportDto> exportCarMileageInfoByMoth(String date,String keyWord) {
List<CarExportDto> carExportDtos = new ArrayList<>();
List<Car> list = this.list();
if(StringUtils.isNotEmpty(keyWord)){
list=list.stream().filter(car -> car.getBizOrgName().contains(keyWord)||car.getOwnership().contains(keyWord)).collect(Collectors.toList());
}
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
CarExportDto carExportDto = new CarExportDto();
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(date, list.get(i).getIotCode());
Car car = list.get(i);
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDate(date, car.getIotCode());
carExportDto.setCode(car.getRemark());
carExportDto.setCarNumber(car.getCarNum());
carExportDto.setDriver(car.getDriver());
......@@ -1934,9 +1951,9 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
carExportDto.setStandard(car.getStandard());
carExportDto.setDisplacement(car.getDisplacement());
if(totalTravel!=null){
carExportDto.setTotalTravel(String.valueOf(totalTravel));
carExportDto.setTotalTravel(String.format("%.1f",totalTravel)+"KM");
}else {
carExportDto.setTotalTravel("0");
carExportDto.setTotalTravel("0.0KM");
}
carExportDtos.add(carExportDto);
}
......@@ -1973,21 +1990,25 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public Page<CarExceptionDto> getCarExcepitonTrack(Integer type) {
public Page<CarExceptionDto> getCarExcepitonTrack(Integer type,String keyWord) {
Page<CarExceptionDto> page = new Page<>();
List<CarExceptionDto> carExceptionDtos = new ArrayList<>();
LocalDate localDate = LocalDate.now(ZoneId.of("+8"));
String startDate = localDate.plusDays(-1).toString();
String endDate = localDate.plusDays((0- type)).toString();
List<Car> list = this.list();
if(StringUtils.isNotEmpty(keyWord)){
list=list.stream().filter(car -> car.getBizOrgName().contains(keyWord)||car.getOwnership().contains(keyWord)).collect(Collectors.toList());
}
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
CarExceptionDto carExceptionDto = new CarExceptionDto();
Car car = list.get(i);
Double totalTravel = iWlCarMileageService.getTotalTravelByIotCodeAndDateProd(startDate,endDate,list.get(i).getIotCode());
if (!(totalTravel != null && totalTravel> 0.0)) {
carExceptionDto.setCarId(String.valueOf(list.get(i).getId()));
carExceptionDto.setCarNumber(list.get(i).getCarNum());
carExceptionDto.setBelongStation(list.get(i).getBizOrgName());
carExceptionDto.setCarId(String.valueOf(car.getId()));
carExceptionDto.setCarNumber(car.getCarNum());
carExceptionDto.setBelongStation(car.getBizOrgName());
carExceptionDtos.add(carExceptionDto);
}
}
......@@ -2000,6 +2021,25 @@ public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements ICarS
}
@Override
public Page<CarSpeedWarningRecord> getCarWarningRecord(String keyWord) {
Page<CarSpeedWarningRecord> carSpeedWarningRecordPage = new Page<>();
Date date = new Date();
String endTime = DateUtil.format(date, DatePattern.NORM_DATETIME_FORMAT);
date = DateUtil.offsetDay(date,-15);
String startTime = DateUtil.format(date, DatePattern.NORM_DATETIME_FORMAT);
List<CarSpeedWarningRecord> list = wlCarSpeedWaringRecordMapper.selectList(new QueryWrapper<CarSpeedWarningRecord>().ge("waring_date",startTime).le("waring_date",endTime));
if(StringUtils.isNotEmpty(keyWord)){
list=list.stream().filter(carSpeedWarningRecord -> carSpeedWarningRecord.getBizOrgName().contains(keyWord)||carSpeedWarningRecord.getOwnership().contains(keyWord)).collect(Collectors.toList());
}
Collections.sort(list,(e1,e2)->e2.getOverSpeed().compareTo(e1.getOverSpeed()));
carSpeedWarningRecordPage.setRecords(list);
carSpeedWarningRecordPage.setTotal(list.size());
carSpeedWarningRecordPage.setSize(1);
carSpeedWarningRecordPage.setCurrent(1);
return carSpeedWarningRecordPage;
}
@Override
public List<Map<String, String>> updateCarStartStatus() {
return carPropertyMapper.selectIndexByTime(CAR_START_INDEX_KEY);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment