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> getCarWarnList(CarWarnListReq carWarnListReq) { PageInfo pageInfo = warnService.getCarWarnList(carWarnListReq); Map map = new HashMap<>(); map.put("page", pageInfo); List 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 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 getCarWarnInfo(String vehicleNumber) { Car car = carService.getOne(new LambdaQueryWrapper().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 list = warnService.list(new LambdaQueryWrapper().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 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 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>> getWarnGroupCount() { List> warnGroupCount = warnService.getWarnGroupCount(); return R.ok(warnGroupCount); } @GetMapping("/getWarnGroupCountTop10") @ApiOperation(value = "获取预警排行榜前10", tags = {"首页"}) public R>> getWarnGroupCountTop10() { List> warnGroupCountTop10 = warnService.getWarnGroupCountTop10(); return R.ok(warnGroupCountTop10); } @GetMapping("/getAllWarnGroupVehicleType") @ApiOperation(value = "获取根据车辆类型的报警汇总数据", tags = {"首页"}) public R>> getAllWarnGroupVehicleType(){ List> allWarnGroupVehicleType = warnService.getAllWarnGroupVehicleType(); return R.ok(allWarnGroupVehicleType); } }