From ea7595c4c75926f85388574b261b8ba90cf60e0d Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 20 五月 2025 16:06:12 +0800
Subject: [PATCH] 修改bug和新增加川标报警适配

---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java                       |    4 
 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java      |  149 ++++++++++++++++--
 ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java     |   74 +++++++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java                      |   12 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java                              |   17 ++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java                              |    5 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java                   |   73 +++++++-
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java                           |   15 +
 ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml                                   |   80 +++++++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java                           |    2 
 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java     |    2 
 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java  |    2 
 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java        |   28 ++-
 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java |    2 
 14 files changed, 412 insertions(+), 53 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java b/ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java
index 8212227..5c6315f 100644
--- a/ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java
+++ b/ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java
@@ -21,6 +21,78 @@
 	OFF_COURSE_ALARM(0x000B, "偏离路线报警"),
 	VEHICLE_MOVEMENT_ALARM(0x000C, "车辆移动报警"),
 	OVERTIME_DRIVING_ALARM(0x000D, "超时驾驶报警"),
+	ALARM_FOR_ILLEGAL_DRIVING(0x0010, "违规行驶报警"),
+	FORWARD_COLLISION_ALARM(0x0011, "前撞报警"),
+	LANE_DEPARTURE_ALARM(0x0012, "车道偏离报警"),
+	ABNORMAL_TIRE_PRESSURE_ALARM(0x0013, "胎压异常报警"),
+	DYNAMIC_INFORMATION_ABNORMAL_ALARM(0x0014, "动态信息异常报警"),
+	OTHER_ALARMS(0x00FF, "其它报警"),
+	VIDEO_SIGNAL_LOSS_ALARM(0x0101, "视频信号丢失报警"),
+	VIDEO_SIGNAL_OCCLUSION_ALARM(0x0102, "视频信号遮挡报警"),
+	STORAGE_UNIT_FAULT_ALARM(0x0103, "存储单元故障报警"),
+	OTHER_VIDEO_EQUIPMENT_FAILURE_ALARM(0x0104, "其他视频设备故障报警"),
+	BUS_OVERLOADING_ALARM(0x0105, "客车超员报警"),
+	ABNORMAL_DRIVING_BEHAVIOR_ALARM(0x0106, "异常驾驶行为报警"),
+	SPECIAL_ALARM_VIDEO_REACHES_THE_STORAGE_THRESHOLD_ALARM(0x0107, "特殊报警录像达到存储阈值报警"),
+	FORWARD_COLLISION_ALARM1(0x0201, "前向碰撞报警"),
+	LANE_DEPARTURE_ALARM1(0x0202, "车道偏离报警"),
+	ALARM_WHEN_THE_DISTANCE_BETWEEN_VEHICLES_IS_TOO_CLOSE(0x0203, "车距过近报警"),
+	PEDESTRIAN_COLLISION_ALARM(0x0204, "行人碰撞报警"),
+	FREQUENT_LANE_CHANGE_ALARM(0x0205, "频繁变道报警"),
+	ROAD_SIGN_OVER_LIMIT_ALARM(0x0206, "道路标识超限报警"),
+	OBSTACLE_ALARM(0x0207, "障碍物报警"),
+	ALARM_FOR_FAILURE_OF_DRIVING_ASSISTANCE_FUNCTIONS(0x0208, "驾驶辅助功能失效报警"),
+	FATIGUE_DRIVING_ALARM_PHYSIOLOGICAL_FATIGUE(0x0211, "疲劳驾驶报警(生理疲劳)"),
+	CALL_THE_ALARM_IF_YOU_DONT_LOOK_STRAIGHT_AHEAD_FOR_A_LONG_TIME(0x0212, "长时间不目视前方报警"),
+	SMOKING_ALARM(0x0213, "抽烟报警"),
+	CALL_THE_POLICE_WITH_A_HANDHELD_PHONE(0x0214, "接打手持电话报警"),
+	THE_DRIVER_ALARM_WAS_NOT_DETECTED(0x0215, "未检测到驾驶员报警"),
+	CALL_THE_ALARM_WHEN_BOTH_HANDS_ARE_TAKEN_OFF_THE_STEERING_WHEEL_SIMULTANEOUSLY(0x0216, "双手同时脱离方向盘报警"),
+	DRIVER_BEHAVIOR_MONITORING_FUNCTION_FAILURE_ALARM(0x0217, "驾驶员行为监测功能失效报警"),
+	DRIVER_IDENTITY_ANOMALY_ALARM(0x0218, "驾驶员身份异常报警"),
+	DRIVER_CHANGE_ALARM(0x0219, "驾驶员变更报警"),
+	HIGH_TIRE_PRESSURE_ALARM(0x0221, "胎压过高报警"),
+	LOW_TIRE_PRESSURE_ALARM(0x0222, "胎压过低报警"),
+	TIRE_TEMPERATURE_TOO_HIGH_ALARM(0x0223, "轮胎温度过高报警"),
+	SENSOR_ABNORMAL_ALARM(0x0224, "传感器异常报警"),
+	TIRE_PRESSURE_IMBALANCE_ALARM(0x0225, "胎压不平衡报警"),
+	SLOW_GAS_LEAKAGE_ALARM(0x0226, "慢漏气报警"),
+	LOW_BATTERY_VOLTAGE_ALARM(0x0227, "电池电压低报警"),
+	REAR_APPROACH_ALARM(0x0231, "后方接近报警"),
+	THE_ALARM_IS_APPROACHING_FROM_THE_LEFT_REAR(0x0232, "左侧后方接近报警"),
+	THE_ALARM_IS_APPROACHING_FROM_THE_RIGHT_REAR(0x0233, "右侧后方接近报警"),
+	PEDESTRIAN_ALARM_IN_THE_BLIND_SPOT_ON_THE_RIGHT_SIDE(0x0234, "右侧盲区行人报警"),
+	EMERGENCY_ACCELERATION_ALARM(0x0241, "急加速报警"),
+	EMERGENCY_DECELERATION_ALARM(0x0242, "急减速报警"),
+	SHARP_TURN_ALARM(0x0243, "急转弯报警"),
+	IDLE_SPEED_ALARM(0x0244, "怠速报警"),
+	ABNORMAL_STALLING_ALARM(0x0245, "异常熄火报警"),
+	NEUTRAL_COASTING_ALARM(0x0246, "空挡滑行报警"),
+	ENGINE_OVERSPEED_ALARM(0x0247, "发动机超转报警"),
+	COLLISION_WARNING(0x0301, "碰撞预警"),
+	ROLLOVER_WARNING(0x0302, "侧翻预警"),
+	ENTRY_AND_EXIT_ROUTES(0x0304, "进出路线"),
+	THE_DRIVING_TIME_ON_THE_SECTION_IS_INSUFFICIENT(0x0305, "路段行驶时间不足/过长"),
+	ILLEGAL_IGNITION_OF_VEHICLES(0x0306, "车辆非法点火"),
+	ILLEGAL_DISPLACEMENT_OF_VEHICLES(0x0307, "车辆非法位移"),
+	TERMINAL_FAULT_ALARM(0x0308, "终端故障报警"),
+	AN_ALARM_HAS_BEEN_TRIGGERED_FOR_THREE_DAYS_WITHOUT_GOING_ONLINE(0x0311, "三天未上线报警"),
+	CARRY_OUT_TIME_SLOT_TRAFFIC_ALARM(0x0312, "进行时段行车报警"),
+	LONG_TERM_REMOTE_BUSINESS_OPERATION_ALARM(0x0313, "长期异地经营报警"),
+	OFFLINE_DISPLACEMENT_ALARM(0x0314, "离线位移报警"),
+	EXCESSIVE_PARKING(0xA001, "超时停车"),
+	THE_TIME_INTERVAL_FOR_REPORTING_VEHICLE_POSITIONING_INFORMATION_IS_ABNORMAL(0xA002, "车辆定位信息上报时间间隔异常"),
+	THE_DISTANCE_INTERVAL_FOR_REPORTING_VEHICLE_POSITIONING_INFORMATION_IS_ABNORMAL(0xA003, "车辆定位信息上报距离间隔异常"),
+	THE_LOWER_LEVEL_PLATFORM_IS_ABNORMALLY_SHORT_TERM(0xA004, "下级平台异常短线"),
+	ABNORMAL_DATA_TRANSMISSION_ON_THE_SUBORDINATE_PLATFORM(0xA005, "下级平台数据传输异常"),
+	ROAD_SECTION_CONGESTION_ALARM(0xA006, "路段堵塞报警"),
+	ALARM_FOR_DANGEROUS_SECTIONS(0xA007, "危险路段报警"),
+	RAIN_AND_SNOW_WEATHER_WARNING(0xA008, "雨雪天气报警"),
+	ABNORMAL_DRIVER_IDENTITY_RECOGNITION(0xA009, "驾驶员身份识别异常"),
+	TERMINAL_ANOMALY(0xA00A, "终端异常(含线路连接异常)"),
+	PLATFORM_ACCESS_ANOMALY(0xA00B, "平台接入异常"),
+	CORE_DATA_ANOMALY(0xA00C, "核心数据异常"),
+	OTHER_ALARMS1(0xA0FF, "其它报警"),
 	OTHER_ALARM(0x00FF, "其他报警");
 	private Integer code;
 	
@@ -40,7 +112,7 @@
 				return value.name;
 			}
 		}
-		return "";
+		return "其他报警";
 	}
 	
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java
index 1391d2c..ddcfcca 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java
@@ -39,4 +39,9 @@
 	@TableField("car_num")
 	@ApiModelProperty("车辆数")
 	private Long carNum;
+	/**
+	 * 排序
+	 */
+	@TableField("sort")
+	private Integer sort;
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java
index cc4bb7e..e7a01ec 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java
@@ -240,7 +240,7 @@
 	@GetMapping("/getCarTypeList")
 	@ApiOperation(value = "获取车辆类型列表数据", tags = {"车辆类型"})
 	public R<List<CarType>> getCarTypeList(String name) {
-		List<CarType> list = carTypeService.list(new LambdaQueryWrapper<CarType>().like(StringUtils.isNotEmpty(name), CarType::getName, name));
+		List<CarType> list = carTypeService.list(new LambdaQueryWrapper<CarType>().like(StringUtils.isNotEmpty(name), CarType::getName, name).orderByAsc(CarType::getSort));
 		return R.ok(list);
 	}
 	
@@ -248,7 +248,7 @@
 	@GetMapping("/getCarCount")
 	@ApiOperation(value = "获取各种车辆类型车辆总数", tags = {"首页"})
 	public R<List<CarType>> getCarCount() {
-		List<CarType> list = carTypeService.list();
+		List<CarType> list = carTypeService.list(new LambdaQueryWrapper<CarType>().orderByAsc(CarType::getSort));
 		return R.ok(list);
 	}
 	
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java
index 29da125..a27eb7d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java
@@ -61,7 +61,7 @@
 		PageInfo<CarWarnListResp> pageInfo = warnService.getCarWarnList(carWarnListReq);
 		Map<String, Object> map = new HashMap<>();
 		map.put("page", pageInfo);
-		List<Warn> list = warnService.list();
+		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());
@@ -149,4 +149,14 @@
 		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);
+	}
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java
index 3f250aa..6157d69 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java
@@ -25,7 +25,15 @@
 	 * @return
 	 */
 	PageInfo<CarWarnListResp> getCarWarnList(PageInfo<CarWarnListResp> pageInfo, @Param("item") CarWarnListReq carWarnListReq);
-	
+
+
+	/**
+	 * 获取所有报警数据
+	 * @param carWarnListReq
+	 * @return
+	 */
+	List<Warn> getAllCarWarnList(@Param("item") CarWarnListReq carWarnListReq);
+
 	
 	List<Map<String, Object>> getWarnGroup10Count();
 	
@@ -43,4 +51,11 @@
 	 * @return
 	 */
 	List<Map<String, Object>> getWarnGroupCountTop10();
+
+
+	/**
+	 * 获取根据车辆类型的报警汇总数据
+	 * @return
+	 */
+	List<Map<String, Object>> getAllWarnGroupVehicleType();
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java
index 77375bd..fb59ef9 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java
@@ -14,6 +14,8 @@
 public class CarWarnListReq extends BasePage {
 	@ApiModelProperty(value = "预警类型")
 	private String warnType;
+	@ApiModelProperty(value = "车辆类型")
+	private String carType;
 	@ApiModelProperty(value = "车辆号牌")
 	private String vehicleNumber;
 	@ApiModelProperty(value = "驾驶员姓名")
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java
index 3dabe74..3c58f35 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java
@@ -39,6 +39,14 @@
 	 * @return
 	 */
 	PageInfo<CarWarnListResp> getCarWarnList(CarWarnListReq carWarnListReq);
+
+
+	/**
+	 * 获取所有报警数据
+	 * @param carWarnListReq
+	 * @return
+	 */
+	List<Warn> getAllCarWarnList(CarWarnListReq carWarnListReq);
 	
 	
 	/**
@@ -55,4 +63,11 @@
 	 * @return
 	 */
 	List<Map<String, Object>> getWarnGroupCountTop10();
+
+
+	/**
+	 * 获取根据车辆类型的报警汇总数据
+	 * @return
+	 */
+	List<Map<String, Object>> getAllWarnGroupVehicleType();
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java
index db0db5d..7ce498f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.dataInterchange.api.feignClient.UPWarnMsgAdptInfoClient;
 import com.ruoyi.dataInterchange.api.model.enums.WarnType;
@@ -22,6 +23,7 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
@@ -71,10 +73,15 @@
 		List<Car> carList = carService.list();
 		List<Warn> warns = new ArrayList<>();
 		for (UPWarnMsgAdptInfoVo vo : list) {
+			String warnTypeName = WarnType.getWarnTypeName(vo.getWarnType());
 			warn = new Warn();
 			Optional<Car> carOptional = carList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
 			if (carOptional.isPresent()) {
-				warn.setCarId(carOptional.get().getId());
+				Car car = carOptional.get();
+				if(car.getOperateType().equals("出租车") && StringUtils.isNotEmpty(warnTypeName) && "疲劳驾驶报警".equals(warnTypeName)){
+					continue;
+				}
+				warn.setCarId(car.getId());
 			}
 			Optional<Driver> optional = driverList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
 			if (optional.isPresent()) {
@@ -84,22 +91,22 @@
 			warn.setEnterpriseId(enterprise.getId());
 			warn.setStartTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(vo.getCreateTime() * 1000), ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
 			warn.setEndTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(vo.getCreateTime() * 1000), ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-			warn.setWarnType(WarnType.getWarnTypeName(vo.getWarnType()));
+			warn.setWarnType(warnTypeName);
 			warn.setWarnNumber(1);
 			warn.setSpeed(null == vo.getSpeed() ? BigDecimal.ZERO : new BigDecimal(vo.getSpeed()));
-			if(null != vo.getLongitude()){
+			if(null != vo.getLongitude() && 0 != vo.getLongitude()){
 				warn.setLongitude(new BigDecimal(vo.getLongitude()).divide(new BigDecimal(1000000)).toString());
 			}
-			if(null != vo.getLatitude()){
+			if(null != vo.getLatitude() && 0 != vo.getLatitude()){
 				warn.setLatitude(new BigDecimal(vo.getLatitude()).divide(new BigDecimal(1000000)).toString());
+				Map<String, String> geocode = null;
+				try {
+					geocode = GDMapGeocodingUtil.geocode(warn.getLongitude(), warn.getLatitude());
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+				warn.setAddress(geocode.get("address"));
 			}
-			Map<String, String> geocode = null;
-			try {
-				geocode = GDMapGeocodingUtil.geocode(warn.getLongitude(), warn.getLatitude());
-			} catch (Exception e) {
-				throw new RuntimeException(e);
-			}
-			warn.setAddress(geocode.get("address"));
 			switch (vo.getResult()) {
 				case 0x00:
 					warn.setTreatmentState("处理中");
@@ -141,6 +148,11 @@
 			}
 			Optional<Car> optional1 = carList.stream().filter(s -> s.getVehicleNumber().equals(warn.getVehicleNumber())).findFirst();
 			if (optional1.isPresent()) {
+				Car car = optional1.get();
+				if(car.getOperateType().equals("出租车") && "疲劳驾驶报警".equals(warn.getWarnType())){
+					this.removeById(warn.getId());
+					continue;
+				}
 				warn.setCarId(optional1.get().getId());
 				this.updateById(warn);
 			}
@@ -188,8 +200,18 @@
 		PageInfo<CarWarnListResp> pageInfo = new PageInfo<>(carWarnListReq.getPageCurr(), carWarnListReq.getPageSize());
 		return this.baseMapper.getCarWarnList(pageInfo, carWarnListReq);
 	}
-	
-	
+
+
+	/**
+	 * 获取所有报警数据
+	 * @param carWarnListReq
+	 * @return
+	 */
+	@Override
+	public List<Warn> getAllCarWarnList(CarWarnListReq carWarnListReq) {
+		return this.baseMapper.getAllCarWarnList(carWarnListReq);
+	}
+
 	/**
 	 * 获取预警汇总统计最高的10类报警数据
 	 *
@@ -204,7 +226,10 @@
 		}
 		if (!collect.isEmpty()) {
 			List<Map<String, Object>> warnGroupCount = this.baseMapper.getWarnGroupCount(collect);
-			list.addAll(warnGroupCount);
+			Integer num = Integer.valueOf(warnGroupCount.get(0).get("num").toString());
+			if(num > 0){
+				list.addAll(warnGroupCount);
+			}
 		}
 		return list;
 	}
@@ -219,4 +244,24 @@
 	public List<Map<String, Object>> getWarnGroupCountTop10() {
 		return this.baseMapper.getWarnGroupCountTop10();
 	}
+
+
+	/**
+	 * 获取根据车辆类型的报警汇总数据
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> getAllWarnGroupVehicleType() {
+		List<Map<String, Object>> allWarnGroupVehicleType = this.baseMapper.getAllWarnGroupVehicleType();
+		for (Map<String, Object> map : allWarnGroupVehicleType) {
+			Integer total = Integer.valueOf(map.get("total").toString());
+			Integer processed = Integer.valueOf(map.get("processed").toString());
+			if(total == 0){
+				map.put("rate", BigDecimal.ZERO);
+			}else{
+				map.put("rate", BigDecimal.valueOf(processed / total * 100).setScale(2, RoundingMode.HALF_EVEN));
+			}
+		}
+		return allWarnGroupVehicleType;
+	}
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml
index ae29535..296c272 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml
@@ -30,6 +30,9 @@
 			<if test="null != item.warnType and '' != item.warnType">
 				and a.warn_type = #{item.warnType}
 			</if>
+			<if test="null != item.carType and '' != item.carType">
+				and b.operate_type = #{item.carType}
+			</if>
 			<if test="null != item.vehicleNumber and '' != item.vehicleNumber">
 				and b.vehicle_number like CONCAT('%', #{item.vehicleNumber}, '%')
 			</if>
@@ -51,7 +54,43 @@
 		</where>
 		order by a.create_time desc
 	</select>
-	
+
+
+	<select id="getAllCarWarnList" resultType="com.ruoyi.system.api.model.Warn">
+		select
+		a.*
+		from t_warn a
+		left join t_car b on (a.car_id = b.id)
+		left join t_driver c on (a.driver_id = c.id)
+		left join t_enterprise d on (a.enterprise_id = d.id)
+		<where>
+			<if test="null != item.warnType and '' != item.warnType">
+				and a.warn_type = #{item.warnType}
+			</if>
+			<if test="null != item.carType and '' != item.carType">
+				and b.operate_type = #{item.carType}
+			</if>
+			<if test="null != item.vehicleNumber and '' != item.vehicleNumber">
+				and b.vehicle_number like CONCAT('%', #{item.vehicleNumber}, '%')
+			</if>
+			<if test="null != item.driverName and '' != item.driverName">
+				and c.`name` like CONCAT('%', #{item.driverName}, '%')
+			</if>
+			<if test="null != item.enterpriseName and '' != item.enterpriseName">
+				and d.`name` like CONCAT('%', #{item.enterpriseName}, '%')
+			</if>
+			<if test="null != item.startTime and '' != item.startTime">
+				and a.start_time >= #{item.startTime}
+			</if>
+			<if test="null != item.endTime and '' != item.endTime">
+				and a.end_time &lt;= #{item.endTime}
+			</if>
+			<if test="null != item.treatmentState and '' != item.treatmentState">
+				and a.treatment_state = #{item.treatmentState}
+			</if>
+		</where>
+	</select>
+
 	
 	<select id="getWarnGroup10Count" resultType="map">
 		select aa.warn_type as warnType, aa.num
@@ -72,8 +111,43 @@
 		select *
 		from (select COUNT(1) as num, b.`name`
 		      from t_warn a
-			           left join t_enterprise b on (a.enterprise_id = b.id)
-		      group by a.enterprise_id) as aa
+			  left join t_enterprise b on (a.enterprise_id = b.id)
+		      group by a.enterprise_id) as aa where aa.num > 0
 		order by aa.num desc limit 10
 	</select>
+
+
+
+	<select id="getAllWarnGroupVehicleType" resultType="map">
+		select
+		ct.name,
+		ifnull(aa.total, 0) as total,
+		ifnull(bb.total, 0) as processed,
+		ifnull(cc.total, 0) as unprocessed
+		from t_car_type as ct
+		left join (
+			select
+			b.operate_type,
+			count(1) as total
+			from t_warn a
+			left join t_car b on (a.car_id = b.id)
+			where a.car_id is not null group by b.operate_type
+		) aa on (ct.name = aa.operate_type)
+		left join (
+			select
+			b.operate_type,
+			count(1) as total
+			from t_warn a
+			left join t_car b on (a.car_id = b.id)
+			where a.car_id is not null and a.treatment_state = '已处理' group by b.operate_type
+		) as bb on (ct.name = bb.operate_type)
+		left join (
+			select
+			b.operate_type,
+			count(1) as total
+			from t_warn a
+			left join t_car b on (a.car_id = b.id)
+			where a.car_id is not null and a.treatment_state = '处理中' group by b.operate_type
+		) as cc on (ct.name = cc.operate_type)
+	</select>
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java
index ed57e60..8765d42 100644
--- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java
+++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java
@@ -20,7 +20,7 @@
 	 * @param result
 	 * @return
 	 */
-	List<UPWarnMsgAdptInfo> findByResultIsAndPushTimeBefore(int result, long pushTime);
+	List<UPWarnMsgAdptInfo> findByResultIsAndLevelNotNullAndPushTimeBefore(int result, long pushTime);
 	
 	
 	/**
diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java
index 5c98563..898a0d5 100644
--- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java
+++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java
@@ -17,6 +17,6 @@
 	 * @param supervisionId
 	 * @return
 	 */
-	UPWarnMsgUrgeTodoAck findBySupervisionId(Integer supervisionId);
+	UPWarnMsgUrgeTodoAck findBySupervisionId(String supervisionId);
 	
 }
diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java
index 955d26d..8315a6b 100644
--- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java
+++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java
@@ -83,7 +83,7 @@
 		this.warnSrc = upWarnMsgAdptInfo.getWarnSrc();
 		this.warnType = upWarnMsgAdptInfo.getWarnType();
 		this.warnTime = upWarnMsgAdptInfo.getWarnTime();
-		this.supervisionId = upWarnMsgAdptInfo.getInfoId();
+		this.supervisionId = Integer.valueOf(upWarnMsgAdptInfo.getInfoId());
 		this.supervisionEndTime = LocalDateTime.now().plusDays(7).toEpochSecond(ZoneOffset.UTC);
 		this.supervisionLevel = 0x01;
 		this.supervisor = "谢茜";
diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java
index ae3245e..0b1be34 100644
--- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java
+++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java
@@ -1,5 +1,6 @@
 package com.ruoyi.dataInterchange.model;
 
+import cn.hutool.core.util.ArrayUtil;
 import com.ruoyi.dataInterchange.pojo.BaseModel;
 import com.ruoyi.dataInterchange.util.jtt809.common.ByteArrayUtil;
 import com.ruoyi.dataInterchange.util.jtt809.common.Jtt809Util;
@@ -9,6 +10,9 @@
 import org.springframework.data.elasticsearch.annotations.Document;
 import org.springframework.data.elasticsearch.annotations.Field;
 import org.springframework.data.elasticsearch.annotations.FieldType;
+
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 上报报警信息
@@ -70,8 +74,70 @@
 	/**
 	 * 信息ID
 	 */
+	@Field(type = FieldType.Text)
+	private String infoId;
+	/**
+	 * 驾驶员姓名长度
+	 */
 	@Field(type = FieldType.Integer)
-	private int infoId;
+	private int driverLength;
+	/**
+	 * 驾驶员姓名
+	 */
+	@Field(type = FieldType.Text)
+	private String driver;
+	/**
+	 * 驾驶员驾照号码长度
+	 */
+	@Field(type = FieldType.Integer)
+	private int driverNoLength;
+	/**
+	 * 驾驶员驾照号码
+	 */
+	@Field(type = FieldType.Text)
+	private String driverNo;
+	/**
+	 * 报警级别
+	 */
+	@Field(type = FieldType.Integer)
+	private int level;
+	/**
+	 * 经度
+	 */
+	@Field(type = FieldType.Integer)
+	private int longitude;
+	/**
+	 * 纬度
+	 */
+	@Field(type = FieldType.Integer)
+	private int latitude;
+	/**
+	 * 海拔
+	 */
+	@Field(type = FieldType.Integer)
+	private int altitude;
+	/**
+	 * 行车速度
+	 */
+	@Field(type = FieldType.Integer)
+	private int speed;
+	/**
+	 * 行驶记录速度
+	 */
+	@Field(type = FieldType.Integer)
+	private int vec2;
+	/**
+	 * 报警状态
+	 * 1:报警开始
+	 * 2:报警结束
+	 */
+	@Field(type = FieldType.Integer)
+	private int status;
+	/**
+	 * 方向
+	 */
+	@Field(type = FieldType.Integer)
+	private int direction;
 	/**
 	 * 报警数据长度
 	 */
@@ -82,21 +148,6 @@
 	 */
 	@Field(type = FieldType.Text)
 	private String infoContent;
-	/**
-	 * 速度
-	 */
-	@Field(type = FieldType.Integer)
-	private Integer speed;
-	/**
-	 * 经度
-	 */
-	@Field(type = FieldType.Integer)
-	private Integer longitude;
-	/**
-	 * 纬度
-	 */
-	@Field(type = FieldType.Integer)
-	private Integer latitude;
 	/**
 	 * 报警处理结果
 	 * 0x00:处理中
@@ -111,12 +162,12 @@
 	 */
 	@Field(type = FieldType.Long)
 	private long pushTime;
-	
+
 	
 	/**
 	 * 解析报文
 	 */
-	public UPWarnMsgAdptInfo decode(WarnMsg warnMsg) {
+	public UPWarnMsgAdptInfo decode1(WarnMsg warnMsg) {
 		try {
 			byte[] data = warnMsg.getData();
 			ByteBuf byteBuf = Unpooled.wrappedBuffer(data);
@@ -124,7 +175,7 @@
 			this.vehicleColor = warnMsg.getVehicleColor();
 			this.dataType = warnMsg.getDataType();
 			this.dataLength = warnMsg.getDataLength();
-			
+
 			//报警信息来源
 			this.warnSrc = byteBuf.readByte();
 			//报警类型
@@ -135,7 +186,7 @@
 			//报警时间
 			this.warnTime = Long.parseLong(time, 16);
 			//信息ID
-			this.infoId = byteBuf.readInt();
+			this.infoId = Integer.valueOf(byteBuf.readInt()).toString();
 			//报警数据长度
 			this.infoLength = byteBuf.readInt();
 			//上报报警信息内容
@@ -145,4 +196,62 @@
 		}
 		return this;
 	}
+
+	/**
+	 * 解析报文(川标)
+	 */
+	public UPWarnMsgAdptInfo decode2(WarnMsg warnMsg) {
+		try {
+			byte[] data = warnMsg.getData();
+			ByteBuf byteBuf = Unpooled.wrappedBuffer(data);
+			this.vehicleNo = warnMsg.getVehicleNo();
+			this.vehicleColor = warnMsg.getVehicleColor();
+			this.dataType = warnMsg.getDataType();
+			this.dataLength = warnMsg.getDataLength();
+
+			//报警信息来源
+			this.warnSrc = byteBuf.readByte();
+			//报警类型
+			this.warnType = byteBuf.readShort();
+			byte[] readableBytes = new byte[8];
+			byteBuf.readBytes(readableBytes);
+			String time = ByteArrayUtil.bytes2HexStr(readableBytes);
+			//报警时间
+			this.warnTime = Long.parseLong(time, 16);
+			//团标扩展
+			//信息ID
+			this.infoId = Jtt809Util.readGBKString(byteBuf,32);
+			//驾驶员姓名长度
+			this.driverLength = byteBuf.readByte();
+			//驾驶员姓名
+			this.driver = Jtt809Util.readGBKString(byteBuf,this.driverLength);
+			//驾驶员驾照号码长度
+			this.driverNoLength = byteBuf.readByte();
+			//驾驶员驾照号码
+			this.driverNo = Jtt809Util.readGBKString(byteBuf,this.driverNoLength);
+			//报警级别
+			this.level = byteBuf.readByte();
+			//经度
+			this.longitude = byteBuf.readInt();
+			//纬度
+			this.latitude = byteBuf.readInt();
+			//海拔高度
+			this.altitude = byteBuf.readUnsignedShort();
+			//行车速度
+			this.speed = byteBuf.readUnsignedShort();
+			//行驶记录速度
+			this.vec2 = byteBuf.readUnsignedShort();
+			//报警状态
+			this.status = byteBuf.readByte();
+			//方向
+			this.direction = byteBuf.readUnsignedShort();
+			//报警数据长度
+			this.infoLength = byteBuf.readUnsignedShort();
+			//报警信息内容
+			this.infoContent = Jtt809Util.readGBKString(byteBuf,this.infoLength);
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		return this;
+	}
 }
diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java
index d401093..4951ede 100644
--- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java
+++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java
@@ -20,6 +20,7 @@
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -112,6 +113,13 @@
 		upWarnMsgUrgeTodoAck.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
 		upWarnMsgUrgeTodoAckDao.save(upWarnMsgUrgeTodoAck);
 	}
+
+
+
+
+	//走川标的公司
+	private List<Integer> enterprise = Arrays.asList(17458936, 43984060, 13914394);
+
 	
 	/**
 	 * 上报报警信息
@@ -121,16 +129,20 @@
 	 * @param warnMsg
 	 */
 	public void up_warn_msg_adpt_info(ChannelHandlerContext ctx, int inferiorPlatformId, WarnMsg warnMsg) {
-		UPWarnMsgAdptInfo upWarnMsgAdptInfo = new UPWarnMsgAdptInfo().decode(warnMsg);
+		UPWarnMsgAdptInfo upWarnMsgAdptInfo = enterprise.contains(inferiorPlatformId) ? new UPWarnMsgAdptInfo().decode2(warnMsg) : new UPWarnMsgAdptInfo().decode1(warnMsg);
 		upWarnMsgAdptInfo.setResult(0x00);
 		upWarnMsgAdptInfo.setInferiorPlatformId(inferiorPlatformId);
 		upWarnMsgAdptInfo.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
-		UPExgMsgRealLocation upExgMsgRealLocation = upExgMsgRealLocationDao.findByVehicleNoOrderByCreateTimeDesc(upWarnMsgAdptInfo.getVehicleNo());
-		if (null != upExgMsgRealLocation) {
-			GnssData gnssData = upExgMsgRealLocation.getGnssData();
-			upWarnMsgAdptInfo.setSpeed(gnssData.getVec1());
-			upWarnMsgAdptInfo.setLongitude(gnssData.getLon());
-			upWarnMsgAdptInfo.setLatitude(gnssData.getLat());
+		if(0 == upWarnMsgAdptInfo.getLongitude()){
+			UPExgMsgRealLocation upExgMsgRealLocation = upExgMsgRealLocationDao.findByVehicleNoOrderByCreateTimeDesc(upWarnMsgAdptInfo.getVehicleNo());
+			if (null != upExgMsgRealLocation) {
+				GnssData gnssData = upExgMsgRealLocation.getGnssData();
+				upWarnMsgAdptInfo.setSpeed(gnssData.getVec1());
+				upWarnMsgAdptInfo.setLongitude(gnssData.getLon());
+				upWarnMsgAdptInfo.setLatitude(gnssData.getLat());
+			}
+		}else if(2 != upWarnMsgAdptInfo.getLevel()){
+			return;
 		}
 		upWarnMsgAdptInfoDao.save(upWarnMsgAdptInfo);
 	}
@@ -140,7 +152,7 @@
 	 * 定时任务督办报警请求
 	 */
 	public void taskUrgeTodo() {
-		List<UPWarnMsgAdptInfo> list = upWarnMsgAdptInfoDao.findByResultIsAndPushTimeBefore(0x00, LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
+		List<UPWarnMsgAdptInfo> list = upWarnMsgAdptInfoDao.findByResultIsAndLevelNotNullAndPushTimeBefore(0x00, LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
 		for (UPWarnMsgAdptInfo upWarnMsgAdptInfo : list) {
 			down_warn_msg_urge_todo_req(upWarnMsgAdptInfo);
 		}

--
Gitblit v1.7.1