package com.objecteye.websocket; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import com.objecteye.entity.SyDeploy; import com.objecteye.entity.SystemStartTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; import java.util.*; @Component public class SelectMongoData { private static float sdkThreshold = 0.7F; //sdk的阈值 @Autowired private MongoTemplate mongoTemplate; //处理过车总量 public long getVehicleCount() { Query query = new Query(); return mongoTemplate.count(query, "rabbitMQVehicle"); } //监控总天数(从系统接入的那天开始算起) public long getMonitorTotalDays() { Query query = new Query(); SystemStartTime one = mongoTemplate.findOne(query, SystemStartTime.class, "SystemStartTime"); long startTime = one.getStartTime(); DateTime now = DateUtil.date(); DateTime endOfDay = DateUtil.endOfDay(now); long endTime = endOfDay.getTime(); return (endTime - startTime + 1) / (1000 * 60 * 60 * 24); } //记录程序开始运行时间 public void setSystemStartTime() { Query query = new Query(); long count = mongoTemplate.count(query, "SystemStartTime"); if (count == 0) { //获取当前时间 DateTime date = DateUtil.date(); //获取本日开始时间 DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); SystemStartTime systemStartTime = new SystemStartTime(); systemStartTime.setStartTime(startTime); mongoTemplate.save(systemStartTime, "SystemStartTime"); } } //布控车辆/排总数 public int getDeployCount() { return (int) mongoTemplate.count(Query.query(Criteria.where("isDelete").is(0)), SyDeploy.class); } //报警总数 public long getAlarmCount() { return mongoTemplate.count(new Query(), "plateAlarmMsg"); } //本月过车总数 public long getVehicleCountInMonth() { Query query = new Query(); Criteria criteria = new Criteria(); //获取当前时间 DateTime date = DateUtil.date(); //获取本月第一天时间 DateTime time = DateUtil.beginOfMonth(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本周过车总数 public long getVehicleCountInWeek() { Query query = new Query(); Criteria criteria = new Criteria(); //获取当前时间 DateTime date = DateUtil.date(); //获取本周开始时间 DateTime time = DateUtil.beginOfWeek(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日主驾未系安全带 public long getDriverBelt() { Query query = new Query(); Criteria criteria = new Criteria(); //获取当前时间 DateTime date = DateUtil.date(); //获取本日开始时间 DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_illegal_driver_belt_confidence").gt(sdkThreshold) .and("vehicle_illegal_driver_belt_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日副驾驶未系安全带 public long getCopilotBelt() { Query query = new Query(); Criteria criteria = new Criteria(); //获取当前时间 DateTime date = DateUtil.date(); //获取本日开始时间 DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_illegal_copilot_belt_confidence").gt(sdkThreshold) .and("vehicle_illegal_copilot_belt_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日主驾打电话 public long getDriverPhone() { Query query = new Query(); Criteria criteria = new Criteria(); //获取当前时间 DateTime date = DateUtil.date(); //获取本日开始时间 DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_illegal_driver_phone_confidence").gt(sdkThreshold) .and("vehicle_illegal_driver_phone_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日副驾打电话 public long getCopilotPhone() { Query query = new Query(); Criteria criteria = new Criteria(); DateTime date = DateUtil.date(); DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_illegal_copilot_phone_confidence").gt(sdkThreshold) .and("vehicle_illegal_copilot_phone_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日主驾抽烟 public long getDriverSmoke() { Query query = new Query(); Criteria criteria = new Criteria(); //获取当前时间 DateTime date = DateUtil.date(); //获取本日开始时间 DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_illegal_driver_smoke_confidence").gt(sdkThreshold) .and("vehicle_illegal_driver_smoke_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日副驾抽烟 public long getCopilotSmoke() { Query query = new Query(); Criteria criteria = new Criteria(); //获取当前时间 DateTime date = DateUtil.date(); //获取本日开始时间 DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_illegal_copilot_smoke_confidence").gt(sdkThreshold) .and("vehicle_illegal_copilot_smoke_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日违规类型排名 public List> getViolationTypeRanking() { List> list = new ArrayList<>(); Map map = new HashMap<>(); map.put("name", "主驾未系安全带"); map.put("value", getDriverBelt()); list.add(map); Map map1 = new HashMap<>(); map1.put("name", "副驾驶未系安全带"); map1.put("value", getCopilotBelt()); list.add(map1); Map map2 = new HashMap<>(); map2.put("name", "主驾打电话"); map2.put("value", getDriverPhone()); list.add(map2); Map map3 = new HashMap<>(); map3.put("name", "主驾抽烟"); map3.put("value", getDriverSmoke()); list.add(map3); Map map4 = new HashMap<>(); map4.put("name", "污损车牌"); map4.put("value", 0); list.add(map4); Map map5 = new HashMap<>(); map5.put("name", "无车牌"); map5.put("value", 0); list.add(map5); list.sort((a, b) -> { //默认flag值1,默认是升序,如果返回是为-flag则是降序 String valueA = a.get("value").toString(); String valueB = b.get("value").toString(); int flag = Integer.parseInt(valueA) - Integer.parseInt(valueB); return Integer.compare(0, flag); }); return list; } //本日渣土车 public long getMuckCarCount() { Query query = new Query(); Criteria criteria = new Criteria(); DateTime date = DateUtil.date(); DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_special_score").gt(sdkThreshold) .and("vehicle_special_type").is(2); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日危化品车 public long getDangerousChemicalsVehicleCount() { Query query = new Query(); Criteria criteria = new Criteria(); DateTime date = DateUtil.date(); DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_special_score").gt(sdkThreshold) .and("vehicle_special_type").is(1); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日过车总数 public long getVehicleCountInDay() { Query query = new Query(); Criteria criteria = new Criteria(); //获取当前时间 DateTime date = DateUtil.date(); //获取本日开始时间 DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); criteria.and("pictime").gte(startTime).lt(endTime); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //本日违规总数 public long getViolateCountInDay() { return getDriverBelt() + getCopilotBelt() + getDriverPhone() + getCopilotPhone() + getDriverSmoke() + getCopilotSmoke(); } //本日报警总数 public long getAlarmCountInDay() { DateTime date = DateUtil.date(); DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); return mongoTemplate.count(Query.query(Criteria.where("picTime").gte(startTime).lt(endTime)), "plateAlarmMsg"); } //本日车牌报警总数 public long getPlateAlarmCountInDay() { DateTime date = DateUtil.date(); DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); return mongoTemplate.count(Query.query(Criteria.where("picTime").gte(startTime).lt(endTime).and("alarmType").is(0)), "plateAlarmMsg"); } //本日车辆报警总数 public long getVihecleAlarmCountInDay() { DateTime date = DateUtil.date(); DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); return mongoTemplate.count(Query.query(Criteria.where("picTime").gte(startTime).lt(endTime).and("alarmType").is(1)), "plateAlarmMsg"); } //本日人员报警总数 public long getPersonAlarmCountInDay() { DateTime date = DateUtil.date(); DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); return mongoTemplate.count(Query.query(Criteria.where("picTime").gte(startTime).lt(endTime).and("alarmType").is(2)), "plateAlarmMsg"); } //本日相关数据 public Map getTodayData() { Map dataMap = new HashMap<>(); //时间 DateTime date = DateUtil.date(); DateTime time = DateUtil.beginOfDay(date); long startTime = time.getTime(); long endTime = date.getTime(); //本日过车总数 long vehicleCountInDay = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime)), "rabbitMQVehicle"); dataMap.put("vehicleCountInDay", vehicleCountInDay); //本日主驾未系安全带 long driverBeltInDay = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime).and("vehicle_illegal_driver_belt_confidence").gt(sdkThreshold).and("vehicle_illegal_driver_belt_status").is(1000)), "rabbitMQVehicle"); //本日副驾驶未系安全带 long copilotBeltInDay = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime).and("vehicle_illegal_copilot_belt_confidence").gt(sdkThreshold).and("vehicle_illegal_copilot_belt_status").is(1000)), "rabbitMQVehicle"); //本日主驾打电话 long driverPhone = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime).and("vehicle_illegal_driver_phone_confidence").gt(sdkThreshold).and("vehicle_illegal_driver_phone_status").is(1000)), "rabbitMQVehicle"); //本日副驾打电话 long copilotPhone = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime).and("vehicle_illegal_copilot_phone_confidence").gt(sdkThreshold).and("vehicle_illegal_copilot_phone_status").is(1000)), "rabbitMQVehicle"); //本日主驾抽烟 long driverSmoke = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime).and("vehicle_illegal_driver_smoke_confidence").gt(sdkThreshold).and("vehicle_illegal_driver_smoke_status").is(1000)), "rabbitMQVehicle"); //本日副驾抽烟 long copilotSmoke = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime).and("vehicle_illegal_copilot_smoke_confidence").gt(sdkThreshold).and("vehicle_illegal_copilot_smoke_status").is(1000)), "rabbitMQVehicle"); //本日渣土车 long muckCarCount = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime).and("vehicle_special_score").gt(sdkThreshold).and("vehicle_special_type").is(2)), "rabbitMQVehicle"); dataMap.put("muckCarCount", muckCarCount); //本日危化品车 long dangerousCarCount = mongoTemplate.count(Query.query(Criteria.where("pictime").gte(startTime).lt(endTime).and("vehicle_special_score").gt(sdkThreshold).and("vehicle_special_type").is(1)), "rabbitMQVehicle"); dataMap.put("dangerousCarCount", dangerousCarCount); //本日违规总数 long violateCountInDay = driverBeltInDay + copilotBeltInDay + driverPhone + copilotPhone + driverSmoke + copilotSmoke; dataMap.put("violateCountInDay", violateCountInDay); //本日车牌报警总数 long plateAlarmCountInDay = mongoTemplate.count(Query.query(Criteria.where("picTime").gte(startTime).lt(endTime).and("alarmType").is(0)), "plateAlarmMsg"); dataMap.put("plateAlarmCountInDay", plateAlarmCountInDay); //本日车辆报警总数 long vihecleAlarmCountInDay = mongoTemplate.count(Query.query(Criteria.where("picTime").gte(startTime).lt(endTime).and("alarmType").is(1)), "plateAlarmMsg"); dataMap.put("vihecleAlarmCountInDay", vihecleAlarmCountInDay); //本日人员报警总数 long personAlarmCountInDay = mongoTemplate.count(Query.query(Criteria.where("picTime").gte(startTime).lt(endTime).and("alarmType").is(2)), "plateAlarmMsg"); dataMap.put("personAlarmCountInDay", personAlarmCountInDay); //本日报警总数 long alarmCountInDay = plateAlarmCountInDay + vihecleAlarmCountInDay + personAlarmCountInDay; dataMap.put("alarmCountInDay", alarmCountInDay); //违规排行 Map map = new HashMap(); map.put("主驾未系安全带", driverBeltInDay); map.put("副驾驶未系安全带", copilotBeltInDay); map.put("主驾打电话", driverPhone); map.put("主驾抽烟", driverSmoke); map.put("污损车牌", Long.valueOf(0)); map.put("无车牌", Long.valueOf(0)); Comparator> valueComparator = new Comparator>() { @Override public int compare(Map.Entry o1, Map.Entry o2) { return Math.toIntExact(o2.getValue() - o1.getValue()); } }; List> violationTypeRanking = new ArrayList>(map.entrySet()); Collections.sort(violationTypeRanking, valueComparator); dataMap.put("violationTypeRanking", violationTypeRanking); return dataMap; } //七日过车情况(近七天每天的过车总量) public List getOneWeekVehicleCount() { List list = new ArrayList<>(); //获取当前时间 DateTime date = DateUtil.date(); for (int i = 6; i >= 0; i--) { DateTime offsetDay = DateUtil.offsetDay(date, -i); long countToday = getVehicleCountToday(offsetDay); list.add(countToday); } if (list.size() <= 0) { return null; } return list; } //当天过车总量 public long getVehicleCountToday(DateTime date) { //获取本日开始时间 DateTime beginOfDay = DateUtil.beginOfDay(date); //获取本日结束时间 DateTime endOfDay = DateUtil.endOfDay(date); Query query = new Query(); Criteria criteria = new Criteria(); long startTime = beginOfDay.getTime(); long endTime = endOfDay.getTime(); criteria.and("pictime").gte(startTime).lt(endTime); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //七日特殊品类车辆走势(近七天每天渣土车、危化品车总数) public List getOneWeekSpecialtyVehicleCount() { List list = new ArrayList<>(); //获取当前时间 DateTime date = DateUtil.date(); for (int i = 6; i >= 0; i--) { DateTime offsetDay = DateUtil.offsetDay(date, -i); long muckCarCountToday = getMuckCarCountToday(offsetDay); long chemicalsVehicleCountToday = getDangerousChemicalsVehicleCountToday(offsetDay); long[] l = new long[2]; l[0] = muckCarCountToday; l[1] = chemicalsVehicleCountToday; list.add(l); } return list; } //一天中渣土车总量 public long getMuckCarCountToday(DateTime date) { //获取本日开始时间 DateTime beginOfDay = DateUtil.beginOfDay(date); //获取本日结束时间 DateTime endOfDay = DateUtil.endOfDay(date); Query query = new Query(); Criteria criteria = new Criteria(); long startTime = beginOfDay.getTime(); long endTime = endOfDay.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_special_score").gt(sdkThreshold) .and("vehicle_special_type").is(2); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //一天中危化品车总量 public long getDangerousChemicalsVehicleCountToday(DateTime date) { Query query = new Query(); Criteria criteria = new Criteria(); //获取本日开始时间 DateTime beginOfDay = DateUtil.beginOfDay(date); //获取本日结束时间 DateTime endOfDay = DateUtil.endOfDay(date); long startTime = beginOfDay.getTime(); long endTime = endOfDay.getTime(); criteria.and("pictime").gte(startTime).lt(endTime) .and("vehicle_special_score").gt(sdkThreshold) .and("vehicle_special_type").is(1); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //获取卡口经过车辆数 public long getVehicleCountBydeviceId() { Query query = new Query(); SystemStartTime one = mongoTemplate.findOne(query, SystemStartTime.class, "SystemStartTime"); long startTime = one.getStartTime(); DateTime now = DateUtil.date(); long endTime = now.getTime(); Criteria criteria = new Criteria(); criteria.and("pictime").gte(startTime).lt(endTime); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //获取过去一小时卡口经过车辆数 public long getVehicleCountInHours() { Query query = new Query(); DateTime now = DateUtil.date(); //现在 DateTime offsetHour = DateUtil.offsetHour(now, -1); //一小时前 long startTime = offsetHour.getTime(); long endTime = now.getTime(); Criteria criteria = new Criteria(); criteria.and("pictime").gte(startTime).lt(endTime); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //限定设备,主驾未系安全带 public long getDriverBeltByDeviceId() { Query query = new Query(); Criteria criteria = new Criteria(); criteria.and("vehicle_illegal_driver_belt_confidence").gt(sdkThreshold) .and("vehicle_illegal_driver_belt_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //限定设备,副驾驶未系安全带 public long getCopilotBeltByDeviceId() { Query query = new Query(); Criteria criteria = new Criteria(); criteria.and("vehicle_illegal_copilot_belt_confidence").gt(sdkThreshold) .and("vehicle_illegal_copilot_belt_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //限定设备,主驾打电话 public long getDriverPhoneByDeviceId() { Query query = new Query(); Criteria criteria = new Criteria(); criteria.and("vehicle_illegal_driver_phone_confidence").gt(sdkThreshold) .and("vehicle_illegal_driver_phone_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //限定设备,副驾打电话 public long getCopilotPhoneByDeviceId() { Query query = new Query(); Criteria criteria = new Criteria(); criteria.and("vehicle_illegal_copilot_phone_confidence").gt(sdkThreshold) .and("vehicle_illegal_copilot_phone_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //限定设备,主驾抽烟 public long getDriverSmokeByDeviceId() { Query query = new Query(); Criteria criteria = new Criteria(); criteria.and("vehicle_illegal_driver_smoke_confidence").gt(sdkThreshold) .and("vehicle_illegal_driver_smoke_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //限定设备,副驾抽烟 public long getCopilotSmokeByDeviceId() { Query query = new Query(); Criteria criteria = new Criteria(); criteria.and("vehicle_illegal_copilot_smoke_confidence").gt(sdkThreshold) .and("vehicle_illegal_copilot_smoke_status").is(1000); query.addCriteria(criteria); return mongoTemplate.count(query, "rabbitMQVehicle"); } //设备接入至现在的违规车辆数 public long getViolateCountByDeviceId() { return getDriverBeltByDeviceId() + getDriverPhoneByDeviceId() + getDriverSmokeByDeviceId() + getCopilotBeltByDeviceId() + getCopilotPhoneByDeviceId() + getCopilotSmokeByDeviceId(); } //转换类型 public String changeType(long count) { String strCount = null; if (count > 99999999) { count = count % 100000000; strCount = count + "亿"; return strCount; } strCount = "" + count; return strCount; } }