ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -46,8 +46,7 @@ private IArdAppPositionService ardAppPositionService; @Autowired private ISysUserService sysUserService; @Autowired private RongCloudService rongCloudService; /** * æ¥è¯¢appä½ç½®å表 ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
@@ -2,6 +2,8 @@ import java.util.List; import com.ruoyi.app.position.domain.ArdAppPosition; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.scheduling.domian.SchedulingParam; /** @@ -65,4 +67,10 @@ * @return ç»æ */ public int deleteArdAppPositionById(String id); /** * è·åå°æ§åå ææå¨çº¿appç¨æ· * åèä¹ * 2023/8/17 13:56:36 */ public List<SysUser>getNearAppUsers(SchedulingParam param); } ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -3,12 +3,17 @@ import com.ruoyi.app.position.domain.ArdAppPosition; import com.ruoyi.app.position.mapper.ArdAppPositionMapper; import com.ruoyi.app.position.service.IArdAppPositionService; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.utils.tools.GisTool; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; @@ -17,6 +22,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** @@ -26,10 +32,12 @@ * @date 2023-07-18 */ @Service @Slf4j public class ArdAppPositionServiceImpl implements IArdAppPositionService { @Resource private ArdAppPositionMapper ardAppPositionMapper; @Resource private ISysUserService iSysUserService; /** * æ¥è¯¢appä½ç½® @@ -41,6 +49,7 @@ public ArdAppPosition selectArdAppPositionById(String id) { return ardAppPositionMapper.selectArdAppPositionById(id); } /** * æç¨æ·idæ¥è¯¢æåçä½ç½®ä¿¡æ¯ * @@ -51,6 +60,7 @@ public ArdAppPosition selectLastArdAppPositionByUserId(String userId){ return ardAppPositionMapper.selectLastArdAppPositionByUserId(userId); } /** * æ¥è¯¢appä½ç½®å表 * @@ -108,4 +118,50 @@ return ardAppPositionMapper.deleteArdAppPositionById(id); } /** * è·åå°æ§åå ææå¨çº¿appç¨æ· * åèä¹ * 2023/8/17 13:56:36 */ @Override public List<SysUser> getNearAppUsers(SchedulingParam param) { Double longitude = param.getLongitude(); Double latitude = param.getLatitude(); if (longitude == null && latitude == null) { log.debug("åç¹åæ 为空"); return null; } Integer radius = param.getSealingRadius(); if (radius == null) { log.debug("åå¾è·ç¦»ä¸ºç©º"); return null; } SysUser user = new SysUser(); List<SysUser> appUserList = iSysUserService.selectAllAppUserList(user); //è¿æ»¤å¨çº¿ List<SysUser> onLineList = appUserList.stream() .filter(sysUser -> (sysUser.getAppOnlineState().equals("1"))) .collect(Collectors.toList()); //è¿æ»¤èå´ List<SysUser> filteredList = new ArrayList<>(); for(SysUser sysUser:onLineList) { ArdAppPosition ardAppPosition = ardAppPositionMapper.selectLastArdAppPositionByUserId(sysUser.getUserId()); if (ardAppPosition != null) { Double lon = ardAppPosition.getLongitude(); Double lat = ardAppPosition.getLatitude(); if(longitude==null||latitude==null) { continue; } double distance = GisTool.getDistance(new double[]{ longitude, latitude}, new double[]{ lon, lat}); if (distance <= radius) { filteredList.add(sysUser); // å°æ»¡è¶³æ¡ä»¶çç¨æ·æ·»å å°çéåè¡¨ä¸ } } } return filteredList; } } ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java
@@ -7,6 +7,7 @@ import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.scheduling.domian.SchedulingParam; /** * ç¸æºè®¾å¤Serviceæ¥å£ @@ -83,4 +84,11 @@ public TreeMap getNearCamerasBycoordinate(CameraCmd cmd); /** * è·åçæ§åå ææå¨çº¿å çµ * åèä¹ * 2023/8/17 13:56:36 */ List<ArdCameras> getNearCameras(SchedulingParam param); } ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -2,6 +2,7 @@ import java.time.LocalTime; import java.util.*; import java.util.stream.Collectors; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.domain.entity.SysDept; @@ -11,6 +12,7 @@ import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.utils.tools.ArdTool; import com.ruoyi.device.camera.domain.ArdCameras; @@ -19,6 +21,7 @@ import com.ruoyi.common.annotation.DataScope; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.utils.tools.GisTool; import com.sun.org.apache.bcel.internal.generic.NEW; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -137,10 +140,8 @@ @Override public int deleteArdCamerasByIds(String[] ids) { int res = ardCamerasMapper.deleteArdCamerasByIds(ids); if(res>0) { for(String id:ids) { if (res > 0) { for (String id : ids) { redisCache.deleteObject(getCacheKey(id)); } } @@ -260,5 +261,50 @@ return null; } /** * è·åçæ§åå ææå¨çº¿å çµ * åèä¹ * 2023/8/17 13:57:21 */ @Override public List<ArdCameras> getNearCameras(SchedulingParam param) { try { Double longitude = param.getLongitude(); Double latitude = param.getLatitude(); if (longitude == null && latitude == null) { log.debug("åç¹åæ 为空"); return null; } Integer radius = param.getMonitoringRadius(); if (radius == null) { log.debug("çæ§ååå¾è·ç¦»ä¸ºç©º"); return null; } String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime"); //è·åææå çµ List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); //ç»è®¡ææå çµå¯è§èå´å 䏿¥è¦ç¹çè·ç¦» List<ArdCameras> ardCameras = new ArrayList<>(); for (ArdCameras camera : ardCamerasList) { if (camera.getLongitude() == null && camera.getLatitude() == null) { continue; } double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()}; double distance = GisTool.getDistance(new double[]{longitude, latitude}, camPosition); if (distance <= radius) { camera.setChannel(ArdTool.getChannelBydayNightTime(dayNightTime)); ardCameras.add(camera); } } //è¿æ»¤å¨çº¿ç¸æº List<ArdCameras> onlineList = ardCameras.stream() .filter(ardCamera -> (!ardCamera.getLoginId().equals(-1))) .collect(Collectors.toList()); return onlineList; } catch (Exception ex) { log.error("è·åéè¿ç¸æºå¼å¸¸:" + ex.getMessage()); } return null; } } ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,54 @@ package com.ruoyi.scheduling.controller; import com.ruoyi.app.position.service.IArdAppPositionService; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.sy.service.IArdSyCarService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Description: * @ClassName: SchedulingController * @Author: åèä¹ * @Date: 2023å¹´08æ17æ¥11:05:59 * @Version: 1.0 **/ @RestController @RequestMapping("/scheduling") @Api(tags = "ä¸é®è°åº¦") public class SchedulingController { @Resource IArdSyCarService iArdSyCarService; @Resource IArdCamerasService iArdCamerasService; @Resource IArdAppPositionService iArdAppPositionService; @GetMapping("/getNearVehiPersonCam") @ApiOperation("è·åéè¿çè½¦äººç¸æº") AjaxResult getNearVehiPersonCam(SchedulingParam param) { Map<String, Object> nearMap = new HashMap<>(); List<Map<String, Object>> Cars = iArdSyCarService.getNearCar(param); nearMap.put("car", Cars); List<ArdCameras> Cameras = iArdCamerasService.getNearCameras(param); nearMap.put("camera", Cameras); List<SysUser> AppUsers = iArdAppPositionService.getNearAppUsers(param); nearMap.put("users", AppUsers); return AjaxResult.success(nearMap); } } ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.scheduling.domian; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @Description: * @ClassName: RequestParam * @Author: åèä¹ * @Date: 2023å¹´08æ17æ¥13:16:25 * @Version: 1.0 **/ @Data public class SchedulingParam { Integer sealingRadius; Integer monitoringRadius; Double longitude; Double latitude; } ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
@@ -3,6 +3,7 @@ import java.util.List; import java.util.Map; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.domain.ArdSyUser; import com.ruoyi.utils.result.Results; @@ -134,5 +135,8 @@ * æ ¹æ®æ¶é´å车è¾ä¸»é®æ¥è¯¢è¯¥ææ¯å¤©æ¯å¦æè½¨è¿¹ */ public Results getExistTraceByCarIdAndMonth(String userId,String carId,String time); /** * è·åéè¿èå´å ç车è¾ä¿¡æ¯ * */ List<Map<String, Object>> getNearCar(SchedulingParam param); } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -13,9 +13,13 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.sy.domain.ArdSyCarDay; import com.ruoyi.sy.mapper.ArdSyCarDayMapper; import com.ruoyi.utils.tools.GisTool; import com.ruoyi.utils.websocket.util.WebSocketUtils; import com.ruoyi.device.hiksdk.config.MinioClientSingleton; import com.ruoyi.storage.minio.utils.MinioUtils; @@ -33,6 +37,7 @@ import io.minio.Result; import io.minio.http.Method; import io.minio.messages.Item; import lombok.extern.slf4j.Slf4j; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -55,6 +60,7 @@ * @date 2023-06-26 */ @Service @Slf4j(topic = "sy") public class ArdSyCarServiceImpl implements IArdSyCarService { @Resource private ArdSyCarMapper ardSyCarMapper; @@ -70,7 +76,8 @@ @Resource private SYClient sYClient; @Resource RedisCache redisCache; @Resource private ArdSyCarDayMapper ardSyCarDayMapper; @@ -265,18 +272,42 @@ Map<String,String> map = new HashMap(); map.put("carModel","sycar/" + item.objectName()); switch(item.objectName()){ case "carmodel/aodi.glb":map.put("carType","奥迪");break; case "carmodel/baolai.glb":map.put("carType","宿¥");break; case "carmodel/bieke.glb":map.put("carType","å«å ");break; case "carmodel/bus1.glb":map.put("carType","大客车");break; case "carmodel/car.glb":map.put("carType","å°å车");break; case "carmodel/fire(1).glb":map.put("carType","æ¶é²è½¦");break; case "carmodel/fute.glb":map.put("carType","ç¦ç¹");break; case "carmodel/jingche_a.glb":map.put("carType","è¦è½¦");break; case "carmodel/jiuhu.glb":map.put("carType","ææ¤è½¦");break; case "carmodel/oil.glb":map.put("carType","æ²¹ç½è½¦");break; case "carmodel/truck.glb":map.put("carType","å·¥ç¨ç¨è½¦");break; case "carmodel/van1.glb":map.put("carType","大货车");break; case "carmodel/aodi.glb": map.put("carType", "奥迪"); break; case "carmodel/baolai.glb": map.put("carType", "宿¥"); break; case "carmodel/bieke.glb": map.put("carType", "å«å "); break; case "carmodel/bus1.glb": map.put("carType", "大客车"); break; case "carmodel/car.glb": map.put("carType", "å°å车"); break; case "carmodel/fire(1).glb": map.put("carType", "æ¶é²è½¦"); break; case "carmodel/fute.glb": map.put("carType", "ç¦ç¹"); break; case "carmodel/jingche_a.glb": map.put("carType", "è¦è½¦"); break; case "carmodel/jiuhu.glb": map.put("carType", "ææ¤è½¦"); break; case "carmodel/oil.glb": map.put("carType", "æ²¹ç½è½¦"); break; case "carmodel/truck.glb": map.put("carType", "å·¥ç¨ç¨è½¦"); break; case "carmodel/van1.glb": map.put("carType", "大货车"); break; default: break; } @@ -437,6 +468,7 @@ /** * æ ¹æ®ç¨æ·è·åä¸ä¸å表 * * @return */ @Override @@ -522,31 +554,44 @@ for(Map<String,String> m : list){ switch (m.get("state")) { case "1": m.put("carState", "离线-仿ªæ¥å®ä½");break; m.put("carState", "离线-仿ªæ¥å®ä½"); break; case "2": m.put("carState", "离线-æ¬ è´¹");break; m.put("carState", "离线-æ¬ è´¹"); break; case "3": m.put("carState", "离线");break; m.put("carState", "离线"); break; case "4": m.put("carState", "离线-æ¥è¦");break; m.put("carState", "离线-æ¥è¦"); break; case "5": m.put("carState", "å¨çº¿-仿ªæ¥å®ä½");break; m.put("carState", "å¨çº¿-仿ªæ¥å®ä½"); break; case "6": m.put("carState", "å¨çº¿-æ¬ è´¹");break; m.put("carState", "å¨çº¿-æ¬ è´¹"); break; case "7": m.put("carState", "å¨çº¿-è¡é©¶");break; m.put("carState", "å¨çº¿-è¡é©¶"); break; case "8": m.put("carState", "å¨çº¿-è¡é©¶-æ¥è¦");break; m.put("carState", "å¨çº¿-è¡é©¶-æ¥è¦"); break; case "9": m.put("carState", "å¨çº¿-å车-ACCå ³");break; m.put("carState", "å¨çº¿-å车-ACCå ³"); break; case "10": m.put("carState", "å¨çº¿-å车-ACCå¼");break; m.put("carState", "å¨çº¿-å车-ACCå¼"); break; case "11": m.put("carState", "å¨çº¿-å车-ACCå ³-æ¥è¦");break; m.put("carState", "å¨çº¿-å车-ACCå ³-æ¥è¦"); break; case "12": m.put("carState", "å¨çº¿-å车-ACCå¼-æ¥è¦");break; m.put("carState", "å¨çº¿-å车-ACCå¼-æ¥è¦"); break; case "13": m.put("carState", "å¨çº¿-æ æå®ä½");break; m.put("carState", "å¨çº¿-æ æå®ä½"); break; default: break; } @@ -557,6 +602,7 @@ /** * æ ¹æ®deptéåæ¥è¯¢åºææå¯¹åºçcarId * * @param deptList * @return */ @@ -982,4 +1028,66 @@ return new HashMap(); } } /** * è·åéè¿èå´å ç车è¾ä¿¡æ¯ */ @Override public List<Map<String, Object>> getNearCar(SchedulingParam param) { Double longitude = param.getLongitude(); Double latitude = param.getLatitude(); Integer radius = param.getSealingRadius(); if (longitude == null && latitude == null) { log.debug("åç¹åæ 为空"); return null; } if (radius == null) { log.debug("åå¾è·ç¦»ä¸ºç©º"); return null; } String userId = SecurityUtils.getUserId(); ArdSyUser syUser = new ArdSyUser(); syUser.setSysUserId(userId); List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(syUser); if (ardSyUserList.size() == 0) { log.debug("ç¨æ·æªææ¥ä¸ä¸è½¦è¾"); return null; } ArdSyUser ardSyUser = ardSyUserList.get(0); String syUrl = redisCache.getCacheObject("sys_config:syCarPT"); String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword()); Map<String, Object> LogInResult = sYClient.logIn(syUrl, passwordMd5, ardSyUser.getUserId()); String sessionId = (String) LogInResult.get("sessionId"); Map<String, Object> teamList = sYClient.getTeamList(syUrl, ardSyUser.getUserId(), sessionId); List<Map<String, Object>> listMap = (List<Map<String, Object>>) teamList.get("list"); List<Map<String, Object>> allList = new ArrayList<>(); for (Map<String, Object> team : listMap) { String teamId = (String) team.get("teamId"); Map<String, Object> carListMap = sYClient.getCarList1(syUrl, teamId, ardSyUser.getUserId(), sessionId); if (((String) carListMap.get("rspCode")).equals("1")) { List<Map<String, Object>> list = (List<Map<String, Object>>) carListMap.get("list"); allList.addAll(list); } } //è¿æ»¤å¨çº¿è½¦è¾ List<Map<String, Object>> onlineList = allList.stream() .filter(map -> !"离线".equals(map.get("stateCn"))) .collect(Collectors.toList()); List<Map<String, Object>> filteredList = new ArrayList<>(); //è¿æ»¤åå¾ for (Map<String, Object> carMap : onlineList) { String carId = (String) carMap.get("carId"); Map<String, Object> carGPSTrack = sYClient.getCarNearPositionByCarId(syUrl, carId, ardSyUser.getUserId(), sessionId); List<Map<String, Object>> carGPSMap = (List<Map<String, Object>>) carGPSTrack.get("list"); Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng")); Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat")); double distance = GisTool.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat}); if (distance <= radius) { filteredList.add(carMap); // å°æ»¡è¶³æ¡ä»¶çè½¦è¾æ·»å å°çéåè¡¨ä¸ } } return filteredList; } } ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
@@ -49,6 +49,7 @@ c.altitude, c.user_id, c.dept_id, c.login_id, c.cam_heading, c.cam_pitch, c.cam_roll, ruoyi-admin/src/main/resources/logback.xml
@@ -198,11 +198,25 @@ <pattern>${log.pattern}</pattern> </encoder> </appender> <!--æ äººæºæ¥å¿è¾åº--> <appender name="uav" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/uav.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--æå¤©åæ»daily--> <fileNamePattern>${log.path}/uav.%d{yyyy-MM-dd}.log</fileNamePattern> <!--æ¥å¿æå¤§çåå²60天--> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!--ä¸ä¸è½¦è¾æ¥å¿è¾åº--> <appender name="sy" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/sy.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--æå¤©åæ»daily--> <fileNamePattern>${log.path}/sy.%d{yyyy-MM-dd}.log</fileNamePattern> <!--æ¥å¿æå¤§çåå²60天--> <maxHistory>60</maxHistory> </rollingPolicy> @@ -268,7 +282,12 @@ <logger name="cmd" level="INFO"> <appender-ref ref="cmd"/> </logger> <!--æ äººæºæ¥å¿æå°ç级--> <logger name="uav" level="INFO"> <appender-ref ref="uav"/> </logger> <!--ä¸ä¸è½¦è¾æ¥å¿æå°ç级--> <logger name="sy" level="INFO"> <appender-ref ref="sy"/> </logger> </configuration>