package com.ruoyi.system.controller;
|
|
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.web.page.PageInfo;
|
import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgRealLocationClient;
|
import com.ruoyi.dataInterchange.api.vo.GnssDataVo;
|
import com.ruoyi.system.api.model.Car;
|
import com.ruoyi.system.api.model.Warn;
|
import com.ruoyi.system.query.CarWarnInfoResp;
|
import com.ruoyi.system.query.CarWarnListReq;
|
import com.ruoyi.system.query.CarWarnListResp;
|
import com.ruoyi.system.query.WarnResp;
|
import com.ruoyi.system.service.ICarService;
|
import com.ruoyi.system.service.IWarnService;
|
import com.ruoyi.system.util.GDMapGeocodingUtil;
|
import io.swagger.annotations.ApiOperation;
|
import org.apache.poi.ss.usermodel.Workbook;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import javax.annotation.Resource;
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.math.BigDecimal;
|
import java.net.URLEncoder;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2025/3/27 14:38
|
*/
|
@RestController
|
@RequestMapping("/warn")
|
public class WarnController {
|
|
|
@Resource
|
private IWarnService warnService;
|
|
@Resource
|
private ICarService carService;
|
|
|
@Resource
|
private UPExgMsgRealLocationClient upExgMsgRealLocationClient;
|
|
|
@GetMapping("/getCarWarnList")
|
@ApiOperation(value = "获取车辆预警列表数据", tags = {"车辆管理", "预警记录", "首页"})
|
public R<Map<String, Object>> getCarWarnList(CarWarnListReq carWarnListReq) {
|
PageInfo<CarWarnListResp> pageInfo = warnService.getCarWarnList(carWarnListReq);
|
Map<String, Object> map = new HashMap<>();
|
map.put("page", pageInfo);
|
List<Warn> list = warnService.getAllCarWarnList(carWarnListReq);
|
map.put("total", list.size());
|
map.put("processed", list.stream().filter(s->!s.getTreatmentState().equals("处理中")).count());
|
map.put("unprocessed", list.stream().filter(s->s.getTreatmentState().equals("处理中")).count());
|
return R.ok(map);
|
}
|
|
|
@GetMapping("/exportCarWarnList")
|
@ApiOperation(value = "导出车辆预警列表数据", tags = {"预警记录"})
|
public void exportCarWarnList(CarWarnListReq carWarnListReq, HttpServletResponse response) {
|
carWarnListReq.setPageSize(99999);
|
PageInfo<CarWarnListResp> pageInfo = warnService.getCarWarnList(carWarnListReq);
|
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), CarWarnListResp.class, pageInfo.getRecords());
|
response.setCharacterEncoding("utf-8");
|
ServletOutputStream outputStream = null;
|
try {
|
String fileName = URLEncoder.encode("预警记录.xls", "utf-8");
|
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
|
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
|
response.setHeader("Pragma", "no-cache");
|
response.setHeader("Cache-Control", "no-cache");
|
outputStream = response.getOutputStream();
|
workbook.write(outputStream);
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
workbook.close();
|
outputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
|
@GetMapping("/getCarWarnInfo")
|
@ApiOperation(value = "获取车辆预警详情数据", tags = {"车辆管理", "预警记录"})
|
public R<CarWarnInfoResp> getCarWarnInfo(String vehicleNumber) {
|
Car car = carService.getOne(new LambdaQueryWrapper<Car>().eq(Car::getVehicleNumber, vehicleNumber));
|
if (null == car) {
|
return R.ok();
|
}
|
String time = LocalDateTime.now().minusMinutes(15).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
List<Warn> list = warnService.list(new LambdaQueryWrapper<Warn>().eq(Warn::getCarId, car.getId()).lt(Warn::getStartTime, time).orderByDesc(Warn::getCreateTime));
|
CarWarnInfoResp carWarnInfoResp = new CarWarnInfoResp();
|
carWarnInfoResp.setVehicleNumber(vehicleNumber);
|
GnssDataVo gnssDataVo = upExgMsgRealLocationClient.getVehicleSpeed(vehicleNumber).getData();
|
carWarnInfoResp.setSpeed(new BigDecimal(gnssDataVo.getVec1()));
|
Map<String, String> geocode = null;
|
try {
|
String longitude = new BigDecimal(gnssDataVo.getLon()).divide(new BigDecimal(1000000)).toString();
|
String latitude = new BigDecimal(gnssDataVo.getLat()).divide(new BigDecimal(1000000)).toString();
|
geocode = GDMapGeocodingUtil.geocode(longitude, latitude);
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
String address = geocode.get("address");
|
carWarnInfoResp.setNowAddress(address);
|
List<WarnResp> warnList = new ArrayList<>();
|
for (Warn warn : list) {
|
WarnResp warnResp = new WarnResp();
|
warnResp.setWarnType(warn.getWarnType());
|
warnResp.setWarnTime(warn.getStartTime());
|
warnResp.setSpeed(warn.getSpeed());
|
warnResp.setLon(new BigDecimal(warn.getLongitude()));
|
warnResp.setLat(new BigDecimal(warn.getLatitude()));
|
warnResp.setAddress(warn.getAddress());
|
warnList.add(warnResp);
|
}
|
carWarnInfoResp.setWarnList(warnList);
|
return R.ok(carWarnInfoResp);
|
}
|
|
@GetMapping("/getWarnGroupCount")
|
@ApiOperation(value = "获取预警情况统计", tags = {"首页"})
|
public R<List<Map<String, Object>>> getWarnGroupCount() {
|
List<Map<String, Object>> warnGroupCount = warnService.getWarnGroupCount();
|
return R.ok(warnGroupCount);
|
}
|
|
@GetMapping("/getWarnGroupCountTop10")
|
@ApiOperation(value = "获取预警排行榜前10", tags = {"首页"})
|
public R<List<Map<String, Object>>> getWarnGroupCountTop10() {
|
List<Map<String, Object>> warnGroupCountTop10 = warnService.getWarnGroupCountTop10();
|
return R.ok(warnGroupCountTop10);
|
}
|
|
|
|
|
@GetMapping("/getAllWarnGroupVehicleType")
|
@ApiOperation(value = "获取根据车辆类型的报警汇总数据", tags = {"首页"})
|
public R<List<Map<String, Object>>> getAllWarnGroupVehicleType(){
|
List<Map<String, Object>> allWarnGroupVehicleType = warnService.getAllWarnGroupVehicleType();
|
return R.ok(allWarnGroupVehicleType);
|
}
|
}
|