From 7f5fbf4ef6832a6ef27387d8ce973522feec2094 Mon Sep 17 00:00:00 2001
From: aijinhui <aijinhui>
Date: 星期四, 28 十二月 2023 16:53:09 +0800
Subject: [PATCH] 车辆管理数量
---
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java | 272 ++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 210 insertions(+), 62 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
index 245b74e..a8265ea 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -3,29 +3,39 @@
import java.util.*;
import java.util.stream.Collectors;
+import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.constant.CameraConstants;
import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.bean.BeanValidators;
+import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.device.channel.mapper.ArdChannelMapper;
+import com.ruoyi.media.service.IVtduService;
import com.ruoyi.scheduling.domian.SchedulingParam;
+import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.tools.ArdTool;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
import com.ruoyi.device.camera.service.IArdCamerasService;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.system.mapper.SysDeptMapper;
-import com.ruoyi.utils.tools.GisTool;
-import com.ruoyi.utils.tools.Point;
+import com.ruoyi.utils.gis.Point;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
+import javax.validation.Validator;
/**
* 鐩告満璁惧Service涓氬姟灞傚鐞�
@@ -45,10 +55,18 @@
@Resource
private ArdChannelMapper ardChannelMapper;
-
+ @Resource
+ private IVtduService vtduService;
+ @Autowired
+ protected Validator validator;
@PostConstruct
public void loadCameras() {
+
+ //娓呯┖鐩告満缂撳瓨
+ Collection<String> cacheKeys = redisCache.keys(getCacheKey("*"));
+ redisCache.deleteObject(cacheKeys);
+ //閲嶆柊鍔犺浇鐩告満鍒扮紦瀛�
List<ArdCameras> ardCameras = selectArdCamerasListNoDataScope(new ArdCameras());
for (ArdCameras ardCamera : ardCameras) {
redisCache.setCacheObject(getCacheKey(ardCamera.getId()), ardCamera);
@@ -74,7 +92,16 @@
*/
@Override
public ArdCameras selectArdCamerasById(String id) {
- return ardCamerasMapper.selectArdCamerasById(id);
+ ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(id);
+ if (ardCameras != null) {
+ ArdChannel ardChannel = new ArdChannel();
+ ardChannel.setDeviceId(ardCameras.getId());
+ List<ArdChannel> ardChannels = ardChannelMapper.selectArdChannelList(ardChannel);
+ if (ardChannels != null) {
+ ardCameras.setChannelList(ardChannels);
+ }
+ }
+ return ardCameras;
}
/**
@@ -86,7 +113,18 @@
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<ArdCameras> selectArdCamerasList(ArdCameras ardCameras) {
- return ardCamerasMapper.selectArdCamerasList(ardCameras);
+ List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(ardCameras);
+ if (ardCamerasList.size() > 0) {
+ for (ArdCameras camera : ardCamerasList) {
+ ArdChannel ardChannel = new ArdChannel();
+ ardChannel.setDeviceId(camera.getId());
+ List<ArdChannel> ardChannels = ardChannelMapper.selectArdChannelList(ardChannel);
+ if (ardChannels != null) {
+ camera.setChannelList(ardChannels);
+ }
+ }
+ }
+ return ardCamerasList;
}
/**
@@ -145,6 +183,8 @@
if (res > 0) {
for (String id : ids) {
redisCache.deleteObject(getCacheKey(id));
+ //鍒犻櫎娴佸獟浣�
+ vtduService.deleteVtduByCameraId(id);
//鍒犻櫎褰撳墠鐩告満鐨勬墍鏈夐�氶亾
ardChannelMapper.deleteArdChannelByDeviceId(id);
}
@@ -168,8 +208,94 @@
return i;
}
+ @Override
+ public String importCameras(List<ArdCameras> ardCamerasList, Boolean isUpdateSupport, String operName) {
+ if (StringUtils.isNull(ardCamerasList) || ardCamerasList.size() == 0) {
+ throw new ServiceException("瀵煎叆浜曟暟鎹笉鑳戒负绌猴紒");
+ }
+ int successNum = 0;
+ int failureNum = 0;
+ StringBuilder successMsg = new StringBuilder();
+ StringBuilder failureMsg = new StringBuilder();
+ for (ArdCameras camera : ardCamerasList) {
+ try {
+ //鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛id
+ String userId = SecurityUtils.getUserId();
+ camera.setUserId(userId);
+ // 楠岃瘉鏄惁瀛樺湪杩欎釜鐢ㄦ埛
+ ArdCameras u = ardCamerasMapper.selectArdCamerasById(camera.getId());
+ if (StringUtils.isNull(u)) {
+ BeanValidators.validateWithException(validator, camera);
+ camera.setCreateBy(operName);
+ this.insertArdCameras(camera);
+ successNum++;
+ successMsg.append("<br/>" + successNum + "銆佺浉鏈篒D " + camera.getId() + " 瀵煎叆鎴愬姛");
+ } else if (isUpdateSupport) {
+ BeanValidators.validateWithException(validator, camera);
+ checkCameraDataScope(camera.getUserId());
+ camera.setUpdateBy(operName);
+ this.updateArdCameras(camera);
+ successNum++;
+ successMsg.append("<br/>" + successNum + "銆佺浉鏈篒D " + camera.getId() + " 鏇存柊鎴愬姛");
+ } else {
+ failureNum++;
+ failureMsg.append("<br/>" + failureNum + "銆佺浉鏈篒D " + camera.getId() + " 宸插瓨鍦�");
+ }
+ } catch (Exception e) {
+ failureNum++;
+ String msg = "<br/>" + failureNum + "銆佺浉鏈篒D " + camera.getId() + " 瀵煎叆澶辫触锛�";
+ failureMsg.append(msg + e.getMessage());
+ log.error(msg, e);
+ }
+ }
+ if (failureNum > 0) {
+ failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
+ throw new ServiceException(failureMsg.toString());
+ } else {
+ successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
+ }
+ return successMsg.toString();
+ }
+
+ /**
+ * 鏍¢獙鐩告満鏄惁鍏佽鎿嶄綔
+ *
+ * @param ardCameras 鐩告満淇℃伅
+ */
+ @Override
+ public void checkCameraAllowed(ArdCameras ardCameras) {
+ if (StringUtils.isNotNull(ardCameras.getId())) {
+ throw new ServiceException("涓嶅厑璁告搷浣滀簳");
+ }
+ }
+
+ /**
+ * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄�
+ *
+ * @param userId 鐢ㄦ埛id
+ */
+ @Override
+ public void checkCameraDataScope(String userId) {
+ if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
+ ArdCameras camera = new ArdCameras();
+ camera.setUserId(userId);
+ List<ArdCameras> cameras = SpringUtils.getAopProxy(this).selectArdCamerasList(camera);
+ if (StringUtils.isEmpty(cameras)) {
+ throw new ServiceException("娌℃湁鏉冮檺璁块棶浜曟暟鎹紒");
+ }
+ }
+ }
+
public List findOptions(ArdCameras ardCameras) {
- return ardCamerasMapper.findOptions(ardCameras);
+ List<ArdCameras> options = ardCamerasMapper.findOptions(ardCameras);
+ for (ArdCameras camera :
+ options) {
+ ArdChannel ardChannel = new ArdChannel();
+ ardChannel.setDeviceId(camera.getId());
+ List<ArdChannel> ardChannels = ardChannelMapper.selectArdChannelList(ardChannel);
+ camera.setChannelList(ardChannels);
+ }
+ return options;
}
/**
@@ -216,11 +342,10 @@
}
if (ardCameras.size() > 0) {
for (ArdCameras camera : ardCameras) {
- ArdChannel ardChannel=new ArdChannel();
+ ArdChannel ardChannel = new ArdChannel();
ardChannel.setDeviceId(camera.getId());
List<ArdChannel> ardChannels = ardChannelMapper.selectArdChannelList(ardChannel);
- if(ardChannels!=null)
- {
+ if (ardChannels != null) {
camera.setChannelList(ardChannels);
}
Map<String, Object> cameraMap = ArdTool.convertEntityToMap(camera);
@@ -259,7 +384,7 @@
continue;
}
double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
- double distance = GisTool.getDistance(cmd.getTargetPosition(), camPosition);
+ double distance = GisUtil.getDistance(cmd.getTargetPosition(), camPosition);
if (camera.getCamMaxVisibleDistance() == null) {
continue;
}
@@ -268,7 +393,13 @@
camera.setChanNo(ArdTool.getChannelBydayNightTime(dayNightTime));
ardCameras.put(distance, camera);
}
-
+ //鑾峰彇閫氶亾鍒楄〃
+ ArdChannel ardChannel = new ArdChannel();
+ ardChannel.setDeviceId(camera.getId());
+ List<ArdChannel> ardChannels = ardChannelMapper.selectArdChannelList(ardChannel);
+ if (ardChannels != null) {
+ camera.setChannelList(ardChannels);
+ }
}
return ardCameras;
} catch (Exception ex) {
@@ -285,7 +416,7 @@
@Override
public List<ArdCameras> getNearCameras(SchedulingParam param) {
try {
- Long deptId=SecurityUtils.getLoginUser().getUser().getDeptId();
+ Long deptId = SecurityUtils.getLoginUser().getUser().getDeptId();
Double longitude = param.getLongitude();
Double latitude = param.getLatitude();
if (longitude == null && latitude == null) {
@@ -299,7 +430,7 @@
}
String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime");
//鑾峰彇鎵�鏈夊厜鐢�(鎸夐儴闂�)
- ArdCameras cameras= new ArdCameras();
+ ArdCameras cameras = new ArdCameras();
cameras.setDeptId(deptId);
List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(cameras);
//缁熻鎵�鏈夊厜鐢靛彲瑙嗚寖鍥村唴涓庢姤璀︾偣鐨勮窛绂�
@@ -309,57 +440,10 @@
continue;
}
double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
- double distance = GisTool.getDistance(new double[]{longitude, latitude}, camPosition);
+ double distance = GisUtil.getDistance(new double[]{longitude, latitude}, camPosition);
if (distance <= radius) {
/*鑾峰彇閫氶亾鍒楄〃*/
- ArdChannel ardChannel=new ArdChannel();
- ardChannel.setDeviceId(camera.getId());
- List<ArdChannel> ardChannels = ardChannelMapper.selectArdChannelList(ardChannel);
- camera.setChannelList(ardChannels);
- 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;
- }
- /**
- * 鑾峰彇鐩戞帶鍦堝唴鎵�鏈夊湪绾垮厜鐢�
- * 鍒樿嫃涔�
- * 2023/8/17 13:57:21
- */
- @Override
- public List<ArdCameras> getNearCamerasWithPolygon(SchedulingParam param) {
- try {
- Long deptId=SecurityUtils.getLoginUser().getUser().getDeptId();
- List<Point> partitionLocation = param.getPartitionLocation();
- if(partitionLocation==null)
- {
- log.debug("澶氳竟褰㈠潗鏍囬泦鍚堜负绌�");
- return null;
- }
- String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime");
- //鑾峰彇鎵�鏈夊厜鐢�(鎸夐儴闂�)
- ArdCameras cameras= new ArdCameras();
- cameras.setDeptId(deptId);
- List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(cameras);
- List<ArdCameras> ardCameras = new ArrayList<>();
- for (ArdCameras camera : ardCamerasList) {
- if (camera.getLongitude() == null && camera.getLatitude() == null) {
- continue;
- }
- /*鍒ゆ柇鍧愭爣鏄惁鍦ㄥ杈瑰舰鑼冨洿鍐�*/
- Point camPosition=new Point(camera.getLongitude(),camera.getLatitude());
- boolean inPolygon = GisTool.isInPolygon(camPosition, partitionLocation);
- if (inPolygon) {
- /*鑾峰彇閫氶亾鍒楄〃*/
- ArdChannel ardChannel=new ArdChannel();
+ ArdChannel ardChannel = new ArdChannel();
ardChannel.setDeviceId(camera.getId());
List<ArdChannel> ardChannels = ardChannelMapper.selectArdChannelList(ardChannel);
camera.setChannelList(ardChannels);
@@ -377,4 +461,68 @@
return null;
}
+ /**
+ * 鑾峰彇鐩戞帶鍦堝唴鎵�鏈夊湪绾垮厜鐢�
+ * 鍒樿嫃涔�
+ * 2023/8/17 13:57:21
+ */
+ @Override
+ public List<ArdCameras> getNearCamerasWithPolygon(SchedulingParam param) {
+ try {
+ Long deptId = SecurityUtils.getLoginUser().getUser().getDeptId();
+ List<Point> partitionLocation = param.getPartitionLocation();
+ if (partitionLocation == null) {
+ log.debug("澶氳竟褰㈠潗鏍囬泦鍚堜负绌�");
+ return null;
+ }
+ String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime");
+ //鑾峰彇鎵�鏈夊厜鐢�(鎸夐儴闂�)
+ ArdCameras cameras = new ArdCameras();
+ cameras.setDeptId(deptId);
+ List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(cameras);
+ List<ArdCameras> ardCameras = new ArrayList<>();
+ for (ArdCameras camera : ardCamerasList) {
+ if (camera.getLongitude() == null && camera.getLatitude() == null) {
+ continue;
+ }
+ /*鍒ゆ柇鍧愭爣鏄惁鍦ㄥ杈瑰舰鑼冨洿鍐�*/
+ Point camPosition = new Point(camera.getLongitude(), camera.getLatitude());
+ boolean inPolygon = GisUtil.isInPolygon(camPosition, partitionLocation);
+ if (inPolygon) {
+ /*鑾峰彇閫氶亾鍒楄〃*/
+ ArdChannel ardChannel = new ArdChannel();
+ ardChannel.setDeviceId(camera.getId());
+ List<ArdChannel> ardChannels = ardChannelMapper.selectArdChannelList(ardChannel);
+ camera.setChannelList(ardChannels);
+ 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;
+ }
+
+ /**
+ * 鏍¢獙鐩告満鏄惁鍞竴
+ *
+ * @param camera 鐩告満
+ * @return 缁撴灉
+ */
+ @Override
+ public String checkCameraIpAndPortUnique(ArdCameras camera) {
+ String id = camera.getId();
+ String ip = camera.getIp();
+ Integer port = camera.getPort();
+ ArdCameras info = ardCamerasMapper.checkCameraIpAndPortUnique(ip, port);
+ if (StringUtils.isNotNull(info) && !info.getId().equals(id)) {
+ return CameraConstants.NOT_UNIQUE;
+ }
+ return CameraConstants.UNIQUE;
+ }
}
--
Gitblit v1.9.3