From 43fc617eb7b94c7e1cc66884cbb9672da8b3bc32 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期三, 14 六月 2023 17:13:18 +0800 Subject: [PATCH] 优化海康sdk录像 --- ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java | 149 +++++++++++----- ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml | 8 ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java | 2 ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java | 2 ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java | 21 -- ruoyi-common/src/main/java/com/ruoyi/common/utils/tools/ArdTool.java | 17 + /dev/null | 17 - ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java | 8 ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java | 76 ++++++-- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 191 ++++++++------------ ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java | 36 --- ruoyi-admin/src/main/resources/application-ard.yml | 2 ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java | 4 13 files changed, 279 insertions(+), 254 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java index 8fafe2e..bd28cfe 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java @@ -17,7 +17,15 @@ import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.tools.ArdTool; +import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.common.utils.uuid.UUID; +import com.ruoyi.device.camera.domain.ArdCameras; +import com.ruoyi.device.camera.domain.CameraCmd; +import com.ruoyi.device.camera.mapper.ArdCamerasMapper; +import com.ruoyi.device.hiksdk.config.MinioClientSingleton; +import com.ruoyi.device.hiksdk.service.IHikClientService; +import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.utils.tube.GeoPoint; import com.ruoyi.utils.tube.TubeTools; @@ -55,7 +63,10 @@ ArdTubesDetailsMapper ardTubesDetailsMapper; @Resource private ISysConfigService configService; - + @Resource + private ArdCamerasMapper ardCamerasMapper; + @Resource + private IHikClientService hikClientService; @Override public List<GlobalAlarmData> selectAlarmLogs(GlobalAlarmCondition condition) { String refreshTime = configService.selectConfigByKey("refreshTime"); @@ -124,53 +135,97 @@ @Override @Async("alarmExecutor") public void receiveAlarm(String topic, String message) { - String uuid = UUID.randomUUID().toString().replace("-", ""); - switch (topic) { - case "stealelec": - ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class); - ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe()); - if(well!=null) - { - ardAlarmStealelec.setLongitude(well.getLongitude()); - ardAlarmStealelec.setLatitude(well.getLatitude()); - ardAlarmStealelec.setDeptId(well.getDeptId()); - } - ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); - if(StringUtils.isNotNull(existe)) - { - return; - } - int aas = ardAlarmStealelecMapper.insert(ardAlarmStealelec); - if(aas>0) - { - log.info("stealelec鍏ュ簱鎴愬姛锛�" +ardAlarmStealelec); - } - break; - case "tube": - ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message, ArdAlarmTube.class); - ardAlarmTube.setId(uuid); - ArdTubesDetails atd = new ArdTubesDetails(); - atd.setReelNumber(ardAlarmTube.getTubeId()); - List<ArdTubesDetails> ardTubesDetails = ardTubesDetailsMapper.selectArdTubesDetailsList(atd); - if (ardTubesDetails.size() > 0) { - String tubeId = ardTubesDetails.get(0).getTubeId(); - ArdTubes ardTubes = ardTubesMapper.selectArdTubesById(tubeId); - ardAlarmTube.setTubeName(ardTubes.getName()); - ardAlarmTube.setColor(ardTubes.getColor()); - ardAlarmTube.setPipeDiameter(ardTubes.getPipeDiameter()); - ardAlarmTube.setTubeType(ardTubes.getType()); - GeoPoint geoPoint = TubeTools.CalculateCoordinates(ardTubesDetails, ardAlarmTube.getPosition()); - if (StringUtils.isNotNull(geoPoint)) { - ardAlarmTube.setLongitude(geoPoint.getLongitude()); - ardAlarmTube.setLatitude(geoPoint.getLatitude()); - ardAlarmTube.setAltitude(geoPoint.getAltitude()); + try { + String simpleUUID = IdUtils.simpleUUID(); + switch (topic) { + case "stealelec": + ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class); + ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe()); + if (well != null) { + ardAlarmStealelec.setLongitude(well.getLongitude()); + ardAlarmStealelec.setLatitude(well.getLatitude()); + ardAlarmStealelec.setDeptId(well.getDeptId()); } - } - int aat = ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube); - if (aat > 0) { - log.info("tube鍏ュ簱鎴愬姛锛�" + ardAlarmTube); - } - break; + ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); + if (StringUtils.isNotNull(existe)) { + return; + } + int aas = ardAlarmStealelecMapper.insert(ardAlarmStealelec); + if (aas > 0) { + log.info("stealelec鍏ュ簱鎴愬姛锛�" + ardAlarmStealelec); + } + break; + case "tube": + ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message, ArdAlarmTube.class); + ardAlarmTube.setId(simpleUUID); + ArdTubesDetails atd = new ArdTubesDetails(); + atd.setReelNumber(ardAlarmTube.getTubeId()); + List<ArdTubesDetails> ardTubesDetails = ardTubesDetailsMapper.selectArdTubesDetailsList(atd); + if (ardTubesDetails.size() > 0) { + String tubeId = ardTubesDetails.get(0).getTubeId(); + ArdTubes ardTubes = ardTubesMapper.selectArdTubesById(tubeId); + ardAlarmTube.setTubeName(ardTubes.getName()); + ardAlarmTube.setColor(ardTubes.getColor()); + ardAlarmTube.setPipeDiameter(ardTubes.getPipeDiameter()); + ardAlarmTube.setTubeType(ardTubes.getType()); + GeoPoint geoPoint = TubeTools.CalculateCoordinates(ardTubesDetails, ardAlarmTube.getPosition()); + if (StringUtils.isNotNull(geoPoint)) { + ardAlarmTube.setLongitude(geoPoint.getLongitude()); + ardAlarmTube.setLatitude(geoPoint.getLatitude()); + ardAlarmTube.setAltitude(geoPoint.getAltitude()); + } + } + int aat = ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube); + if (aat > 0) { + log.info("tube鍏ュ簱鎴愬姛锛�" + ardAlarmTube); + //鏌ヨ鎵�鏈夊ぇ鍏夌數 + ArdCameras ardCamera = new ArdCameras(); + ardCamera.setGdtype("1"); + List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(ardCamera); + //缁熻鎵�鏈夊ぇ鍏夌數鍙鑼冨洿鍐呬笌鎶ヨ鐐圭殑璺濈 + Map<String, Double> distanceMap = new HashMap<>(); + for (ArdCameras camera : ardCamerasList) { + double distance = GisUtil.getDistance(ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude(), camera.getLongitude(), camera.getLatitude()); + if (distance <= camera.getCamMaxVisibleDistance()) { + distanceMap.put(camera.getId(), distance); + } + } + if(distanceMap.size()<0) + { + return; + } + //鑾峰彇璺濈瀛楀吀涓渶杩戠殑涓�涓浉鏈篒D + String minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap); + //寮曞鍏夌數 + CameraCmd cmd = new CameraCmd(); + cmd.setOperator("sys_tube_leak"); + cmd.setCameraId(minDistanceCameraId); + cmd.setChannelNum(1); + cmd.setTargetPosition(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); + boolean guideRes = hikClientService.setTargetPosition(cmd); + if(guideRes) { + cmd.setEnable(true); + cmd.setRecordBucketName("record"); + String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); + String recordName = minDistanceCameraId + "/" + time + "/" + simpleUUID + ".mp4"; + cmd.setRecordObjectName(recordName); + hikClientService.recordToMinio(cmd); + Thread.sleep(30000); + cmd.setEnable(false); + cmd.setUploadMinio(true); + hikClientService.recordToMinio(cmd); + //鏇存柊褰曞儚 + String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName; + ardAlarmTube.setRecordUrl(url); + ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube); + } + } + break; + } + } + catch (Exception ex) + { + log.error("鎺ユ敹鎶ヨ寮傚父:"+ex.getMessage()); } } /** diff --git a/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java index 5a177f5..ef5eb9c 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java @@ -1,6 +1,7 @@ package com.ruoyi.alarm.tubeAlarm.domain; import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.ToString; @@ -11,77 +12,108 @@ /** * 绠$嚎娉勯湶鎶ヨ瀵硅薄 ard_alarm_tube - * + * * @author 鍒樿嫃涔� * @date 2023-06-06 */ @Data @ToString -public class ArdAlarmTube extends BaseEntity -{ +public class ArdAlarmTube extends BaseEntity { private static final long serialVersionUID = 1L; - /** 涓婚敭 */ + /** + * 涓婚敭 + */ private String id; - /** 鎶ヨ涓绘満 */ + /** + * 鎶ヨ涓绘満 + */ @Excel(name = "鎶ヨ涓绘満") private String host; - /** 绠$嚎id */ + /** + * 绠$嚎id + */ @Excel(name = "绠$嚎id") private String tubeId; - /** 绠$嚎鍚嶇О */ + /** + * 绠$嚎鍚嶇О + */ @Excel(name = "绠$嚎鍚嶇О") private String tubeName; - /** 绠$嚎绫诲瀷-娌圭-姘寸 */ + /** + * 绠$嚎绫诲瀷-娌圭-姘寸 + */ @Excel(name = "绠$嚎绫诲瀷-娌圭-姘寸") private String tubeType; - /** 绠″緞 */ + /** + * 绠″緞 + */ @Excel(name = "绠″緞") private String pipeDiameter; - /** 棰滆壊 */ + /** + * 棰滆壊 + */ @Excel(name = "棰滆壊") private String color; - /** 浣嶇疆 */ + /** + * 浣嶇疆 + */ @Excel(name = "浣嶇疆") private Integer position; - /** 缁忓害 */ + /** + * 缁忓害 + */ @Excel(name = "缁忓害") private Double longitude; - /** 绾害 */ + /** + * 绾害 + */ @Excel(name = "绾害") private Double latitude; - /** 楂樺眰 */ + /** + * 楂樺眰 + */ @Excel(name = "楂樺眰") private Double altitude; - /** 绫诲瀷GXALARM */ + /** + * 绫诲瀷GXALARM + */ @Excel(name = "绫诲瀷GXALARM") private String type; - /** 绫诲瀷涓枃 */ + /** + * 绫诲瀷涓枃 + */ @Excel(name = "绫诲瀷涓枃") private String alarmType; - /** 鎶ヨ鏃堕棿 */ + /** + * 鎶ヨ鏃堕棿 + */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "鎶ヨ鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date alarmTime; - /** 鐢ㄦ埛鍚� */ + /** + * 鐢ㄦ埛鍚� + */ @Excel(name = "鐢ㄦ埛鍚�") private String watcher; - /** 鏌ョ湅鏃堕棿 */ + /** + * 鏌ョ湅鏃堕棿 + */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "鏌ョ湅鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date viewTime; @@ -94,4 +126,10 @@ * 鏈鎶ヨ鏁伴噺 */ private Integer count; + + /** + * 寮曞褰曞儚url + */ + @Excel(name = "寮曞褰曞儚url") + private String recordUrl; } diff --git a/ard-work/src/main/java/com/ruoyi/constant/Global.java b/ard-work/src/main/java/com/ruoyi/constant/Global.java deleted file mode 100644 index 6eb2dd9..0000000 --- a/ard-work/src/main/java/com/ruoyi/constant/Global.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.ruoyi.constant; - -import java.util.ArrayList; -import java.util.List; - -/** - * @Description: 鍏ㄥ眬绫� - * @ClassName: Global - * @Author: 鍒樿嫃涔� - * @Date: 2023骞�06鏈�03鏃�10:30 - * @Version: 1.0 - **/ -public class Global { - - //寮�鍚綍鍍忕殑浠诲姟鍒楄〃 - public static List<String> task_record=new ArrayList<>(); -} diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java index c2d323a..379d083 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java @@ -157,7 +157,7 @@ * 鏈�澶у彲瑙嗚窛绂� */ @Excel(name = "鏈�澶у彲瑙嗚窛绂�") - private String camMaxVisibleDistance; + private Double camMaxVisibleDistance; /** * 鎵�灞炲ID diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java index aa69473..227c222 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java +++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java @@ -27,7 +27,7 @@ Map<String,Double>ptzMap; /*鐩告満缁忕含搴�*/ - double[] camPosition; +// double[] camPosition; /*鐩爣缁忕含搴�*/ double[] targetPosition; diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java index 2fd88fc..a7af79a 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java @@ -17,6 +17,6 @@ public class GlobalVariable { //淇濆瓨鐩告満鐧诲綍淇℃伅 public static Map<String, Integer> loginMap = new HashMap<>(); - //淇濆瓨褰曞儚淇℃伅 - public static Map<Integer, recordInfo> user_real_Map = new HashMap<>(); + //鐩告満棰勮瀛楀吀 + public static Map<String, Integer> previewMap = new HashMap<>(); } diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java index 646c238..1d5a6cd 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java @@ -35,7 +35,6 @@ import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; - import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*; /** @@ -184,7 +183,7 @@ System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); m_strLoginInfo.wPort = m_sPort; m_strLoginInfo.byVerifyMode = 0; - m_strLoginInfo.byLoginMode=0; + m_strLoginInfo.byLoginMode = 0; //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄� windowsSDK閲屾槸true鍜宖alse m_strLoginInfo.bUseAsynLogin = true; //寮傛鐧诲綍鍥炶皟 @@ -663,7 +662,8 @@ NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); m_ptzPosCurrent.wAction = 1; try { - double[] cameraPositon = cmd.getCamPosition(); + ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); + double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()}; double[] targetPositions = cmd.getTargetPosition(); double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); String p = String.valueOf((int) (cameraPTZ[0] * 10)); @@ -681,7 +681,7 @@ } return bool; } catch (Exception ex) { - log.error(ex.getMessage()); + log.error("寮曞寮傚父:" + ex.getMessage()); return false; } } @@ -1232,98 +1232,74 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override - @SdkOperate public String record(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer channelNum = cmd.getChannelNum(); - boolean enable = cmd.isEnable(); - if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return ""; - } - Integer userId = GlobalVariable.loginMap.get(cameraId); - String path = ""; - //棰勮鍙傛暟 - NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); - previewinfo.read(); - previewinfo.lChannel = channelNum; - previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� - previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ - previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� - previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 - previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 - previewinfo.write(); - int lRealHandle; - if (enable) { - if (!GlobalVariable.user_real_Map.containsKey(userId)) { - lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); - if (lRealHandle == -1) { - int iErr = hCNetSDK.NET_DVR_GetLastError(); - log.error("鍙栨祦澶辫触" + iErr); - return ""; - } - log.info("鍙栨祦鎴愬姛"); - - File file = new File("D:/record/temp.mp4"); - if (!file.exists()) { - try { - File fileParent = file.getParentFile(); - if (!fileParent.exists()) { - fileParent.mkdirs(); - } - file.createNewFile(); - } catch (Exception e) { - e.printStackTrace(); - } - } - try { - path = file.getCanonicalPath(); - } catch (IOException e) { - e.printStackTrace(); - } - recordInfo info = new recordInfo(); - info.setLRealHandle(lRealHandle); - info.setRecordPath(path); - GlobalVariable.user_real_Map.put(userId, info); - } - recordInfo info = GlobalVariable.user_real_Map.get(userId); - if (!hCNetSDK.NET_DVR_SaveRealData_V30(info.getLRealHandle(), 1, info.getRecordPath())) { - log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - return "淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负:" + hCNetSDK.NET_DVR_GetLastError(); - } - log.info("褰曞儚寮�濮�"); - //return info.getRecordPath(); - return ""; - } else { - recordInfo info = GlobalVariable.user_real_Map.get(userId); - if (StringUtils.isNull(info)) { + try { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChannelNum(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); + boolean enable = cmd.isEnable(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } - hCNetSDK.NET_DVR_StopRealPlay(info.getLRealHandle()); - log.info("褰曞儚鍋滄"); - //瀛樺叆minio - String BucketName = "record"; - String uuid = UUID.randomUUID().toString().replace("-", ""); - String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); - String ObjectName = cameraId + "/" + time + "/" + uuid + ".mp4"; - String ContentType = "video/MP4"; - FileInputStream stream = null; - try { - stream = new FileInputStream(info.getRecordPath()); - } catch (FileNotFoundException e) { - e.printStackTrace(); + Integer userId = GlobalVariable.loginMap.get(cameraId); + //寮哄埗I甯х粨鏋勪綋瀵硅薄 + HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //鏂板缓缁撴瀯浣撳璞� + netDvrIFrame.read(); + netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆 + netDvrIFrame.byStreamType = 0; + netDvrIFrame.dwSize = netDvrIFrame.size(); + netDvrIFrame.write(); + if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { + log.error("寮哄埗I甯� 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); } + //棰勮鍙傛暟 + NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); + previewinfo.read(); + previewinfo.lChannel = channelNum; + previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺� + previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ + previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒�� + previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 + previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 + previewinfo.write(); String url = ""; - try { + if (enable) { + if (!GlobalVariable.previewMap.containsKey(cameraId)) { + int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); + if (lRealHandle == -1) { + log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); + return ""; + } + log.info("鍙栨祦鎴愬姛"); + GlobalVariable.previewMap.put(cameraId, lRealHandle); + } + if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { + log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); + return ""; + } + log.info("褰曞儚寮�濮�"); + } else { + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); + } + log.info("褰曞儚鍋滄"); + //瀛樺叆minio + String BucketName = cmd.getRecordBucketName(); + String ObjectName = cmd.getRecordObjectName(); + String ContentType = "video/MP4"; + FileInputStream stream = new FileInputStream(path); boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); if (b) { url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName); - log.info("涓婁紶鏂囦欢鎴愬姛!" + url); + log.info("涓婁紶鏂囦欢鎴愬姛!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); } - } catch (IOException ex) { - log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); } - GlobalVariable.user_real_Map.remove(userId); return url; + } catch (Exception ex) { + log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; } } @@ -1332,6 +1308,7 @@ try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); + String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return; @@ -1357,46 +1334,38 @@ previewinfo.bBlocked = 0;//0- 闈為樆濉炲彇娴侊紝1-闃诲鍙栨祦 previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡 previewinfo.write(); - int lRealHandle; if (enable) { - if (!GlobalVariable.user_real_Map.containsKey(userId)) { - lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); + if (!GlobalVariable.previewMap.containsKey(cameraId)) { + int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (lRealHandle == -1) { log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); return; } log.info("鍙栨祦鎴愬姛"); - - String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); - recordInfo info = new recordInfo(); - info.setLRealHandle(lRealHandle); - info.setRecordPath(path); - GlobalVariable.user_real_Map.put(userId, info); + GlobalVariable.previewMap.put(cameraId, lRealHandle); } - recordInfo info = GlobalVariable.user_real_Map.get(userId); - if (!hCNetSDK.NET_DVR_SaveRealData_V30(info.getLRealHandle(), 2, info.getRecordPath())) { + + if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); return; } log.info("褰曞儚寮�濮�"); } else { - recordInfo info = GlobalVariable.user_real_Map.get(userId); - if (StringUtils.isNull(info)) { - return; + if (GlobalVariable.previewMap.containsKey(cameraId)) { + Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); + hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); + GlobalVariable.previewMap.remove(cameraId); } - hCNetSDK.NET_DVR_StopRealPlay(info.getLRealHandle()); log.info("褰曞儚鍋滄"); - if (cmd.isUploadMinio()) { - //瀛樺叆minio - String BucketName = cmd.getRecordBucketName(); - String ObjectName = cmd.getRecordObjectName(); - String ContentType = "video/MP4"; - FileInputStream stream = new FileInputStream(info.getRecordPath()); - boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); - if (b) { - log.info("涓婁紶鏂囦欢鎴愬姛!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); - GlobalVariable.user_real_Map.remove(userId); - } + + //瀛樺叆minio + String BucketName = cmd.getRecordBucketName(); + String ObjectName = cmd.getRecordObjectName(); + String ContentType = "video/MP4"; + FileInputStream stream = new FileInputStream(path); + boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); + if (b) { + log.info("涓婁紶鏂囦欢鎴愬姛!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); } } } catch (Exception ex) { diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java index ba0dfcf..73f0659 100644 --- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java @@ -6,7 +6,6 @@ import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell; import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper; import com.ruoyi.common.utils.DateUtils; -import com.ruoyi.constant.Global; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; @@ -15,7 +14,6 @@ import com.ruoyi.inspect.domain.ArdVideoInspectRecord; import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper; -import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import com.ruoyi.common.utils.StringUtils; @@ -176,12 +174,12 @@ List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList(); //鑾峰彇鐩告満 ArdCameras camera = camerasMapper.selectArdCamerasById(ardVideoInspectTask.getCameraId()); - Collections.sort(ardVideoInspectTaskStepList,new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper,camera.getLongitude(),camera.getLatitude())); + Collections.sort(ardVideoInspectTaskStepList, new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper, camera.getLongitude(), camera.getLatitude())); String taskId = ardVideoInspectTask.getId(); for (int i = 0; i < ardVideoInspectTaskStepList.size(); i++) { ArdVideoInspectTaskStep step = ardVideoInspectTaskStepList.get(i); step.setTaskId(taskId); - step.setOrderNumber(new Integer(i+1)); + step.setOrderNumber(new Integer(i + 1)); } if (StringUtils.isNotNull(ardVideoInspectTaskStepList)) { for (ArdVideoInspectTaskStep ardVideoInspectTaskStep : ardVideoInspectTaskStepList) { @@ -343,22 +341,6 @@ } } } else { -// if(Global.task_record.contains(videoInspectTask.getId())) -// { -// /*鍋滄褰曞儚*/ -// CameraCmd cmd = new CameraCmd(); -// cmd.setCameraId(videoInspectTask.getCameraId()); -// cmd.setChannelNum(videoInspectTask.getChannel()); -// cmd.setOperator("sys_patrol_inspect"); -// cmd.setEnable(false);//鍋滄褰曞儚 -// String uuid = UUID.randomUUID().toString().replace("-", ""); -// String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); -// String recordName = videoInspectTask.getCameraId() + "/" + time + "/" + uuid + ".mp4"; -// cmd.setRecordBucketName("record"); -// cmd.setRecordObjectName(recordName); -// cmd.setUploadMinio(true); -// hikClientService.recordToMinio(cmd); -// } if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepId())) { videoInspectTask.setCurrentStepId(""); ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask); @@ -462,18 +444,14 @@ CameraCmd cmd = new CameraCmd(); cmd.setCameraId(cameraId); cmd.setChannelNum(channel); - cmd.setCamPosition(cameraPositon); cmd.setTargetPosition(targetPositon); cmd.setOperator("sys_patrol_inspect"); cmd.setExpired(step.getRecordingTime()); boolean setTargetPosition = hikClientService.setTargetPosition(cmd); if (setTargetPosition) { - if (!Global.task_record.contains(ardVideoInspectTask.getId())) { - /*鎺у埗鐩告満宸℃鎴愬姛锛屽紑濮嬪綍鍍�*/ - cmd.setEnable(true);//鍚姩褰曞儚 - hikClientService.recordToMinio(cmd); - Global.task_record.add(ardVideoInspectTask.getId()); - } + /*鎺у埗鐩告満宸℃鎴愬姛锛屽紑濮嬪綍鍍�*/ + cmd.setEnable(true);//鍚姩褰曞儚 + hikClientService.recordToMinio(cmd); } else { cmd.setEnable(false);//鍋滄褰曞儚 cmd.setUploadMinio(true); @@ -519,13 +497,11 @@ cmd.setRecordObjectName(recordName); cmd.setUploadMinio(true); hikClientService.recordToMinio(cmd); - Global.task_record.remove(ardVideoInspectTask.getId()); /*鎻掑叆宸℃璁板綍*/ ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord(); ardVideoInspectRecord.setStepId(step.getId()); ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(step.getWellId()); - if(StringUtils.isNotNull(ardAlarmpointsWell)) - { + if (StringUtils.isNotNull(ardAlarmpointsWell)) { ardVideoInspectRecord.setWellName(ardAlarmpointsWell.getWellId()); } Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime); diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java index f427cfd..b56f6f3 100644 --- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java +++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java @@ -1,14 +1,11 @@ package com.ruoyi.inspect.service.impl; -import com.ruoyi.constant.Global; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.hiksdk.service.IHikClientService; -import com.ruoyi.device.hiksdk.service.impl.HikClientServiceImpl; import com.ruoyi.inspect.domain.ArdVideoInspectTask; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -50,12 +47,8 @@ log.info("鎵嬪姩宸℃浠诲姟宸插惎鍔細" + taskId); return; } -// /*姣忔鍚姩浠诲姟娓呯┖浠诲姟褰撳墠姝ラ淇℃伅*/ + /*姣忔鍚姩浠诲姟娓呯┖浠诲姟褰撳墠姝ラ淇℃伅*/ ArdVideoInspectTask ardVideoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(taskId); -// ardVideoInspectTask.setCurrentStepId(""); -// ardVideoInspectTask.setCurrentStepStartTime(""); -// ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); - String cameraId = ardVideoInspectTask.getCameraId(); /*灏嗗綋鍓嶇浉鏈虹殑鎵�鏈変换鍔″綋鍓嶆椂闂寸疆绌�*/ ardVideoInspectTask=new ArdVideoInspectTask(); @@ -65,11 +58,6 @@ for (ArdVideoInspectTask VideoInspectTask : ardVideoInspectTasks) { VideoInspectTask.setCurrentStepStartTime(""); ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(VideoInspectTask); - /*娓呮浠诲姟褰曞儚璁板綍*/ - if(Global.task_record.contains(VideoInspectTask.getId())) - { - Global.task_record.remove(VideoInspectTask.getId()); - } } } /*寮�鍚换鍔�*/ @@ -84,8 +72,7 @@ ArdVideoInspectTask ardVideoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(taskId); /*灏嗗叧鑱旂殑鐩告満褰曞儚鍏抽棴*/ String cameraId = ardVideoInspectTask.getCameraId(); - Integer userId = GlobalVariable.loginMap.get(cameraId);//鑾峰彇褰撳墠鐩告満鐨勭櫥褰旾D - if( GlobalVariable.user_real_Map.containsKey(userId)) + if( GlobalVariable.previewMap.containsKey(cameraId)) { //褰撳墠鐩告満姝e湪褰曞儚锛屽垯鍋滄褰曞儚 CameraCmd cmd = new CameraCmd(); cmd.setCameraId(ardVideoInspectTask.getCameraId()); @@ -93,15 +80,13 @@ cmd.setEnable(false);//鍋滄褰曞儚 cmd.setUploadMinio(false); hikClientService.recordToMinio(cmd); - GlobalVariable.user_real_Map.remove(userId); + GlobalVariable.previewMap.remove(cameraId); } - /*鍋滄浠诲姟*/ InspectionTask task = taskMap.get(taskId); if (task != null) { task.stop(); taskMap.remove(taskId); - Global.task_record.remove(taskId); log.info("鎵嬪姩宸℃浠诲姟宸插仠姝細" + taskId); /*灏嗕换鍔℃楠や俊鎭竻绌�*/ ardVideoInspectTask.setCurrentStepId(""); diff --git a/ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml b/ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml index 79a3317..51cd281 100644 --- a/ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml +++ b/ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml @@ -21,11 +21,12 @@ <result property="longitude" column="longitude" /> <result property="latitude" column="latitude" /> <result property="altitude" column="altitude" /> + <result property="recordUrl" column="record_url" /> <result property="viewTime" column="view_time" /> </resultMap> <sql id="selectArdAlarmTubeVo"> - select id, host, tube_id, tube_name, tube_type, pipe_diameter, color, position, type, alarm_type, alarm_time, watcher, create_time, longitude, latitude, altitude, view_time from ard_alarm_tube + select id, host, tube_id, tube_name, tube_type, pipe_diameter, color, position, type, alarm_type, alarm_time, watcher, create_time, longitude, latitude, altitude,, record_url, view_time from ard_alarm_tube </sql> <select id="selectArdAlarmTubeList" parameterType="ArdAlarmTube" resultMap="ArdAlarmTubeResult"> @@ -45,6 +46,7 @@ <if test="longitude != null and longitude != ''"> and longitude = #{longitude}</if> <if test="latitude != null and latitude != ''"> and latitude = #{latitude}</if> <if test="altitude != null and altitude != ''"> and altitude = #{altitude}</if> + <if test="recordUrl != null and recordUrl != ''"> and record_url = #{recordUrl}</if> <if test="viewTime != null "> and view_time = #{viewTime}</if> </where> </select> @@ -73,6 +75,7 @@ <if test="longitude != null">longitude,</if> <if test="latitude != null">latitude,</if> <if test="altitude != null">altitude,</if> + <if test="recordUrl != null">record_url,</if> <if test="viewTime != null">view_time,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> @@ -92,6 +95,7 @@ <if test="longitude != null">#{longitude},</if> <if test="latitude != null">#{latitude},</if> <if test="altitude != null">#{altitude},</if> + <if test="recordUrl != null">#{recordUrl},</if> <if test="viewTime != null">#{viewTime},</if> </trim> </insert> @@ -114,6 +118,7 @@ <if test="longitude != null">longitude = #{longitude},</if> <if test="latitude != null">latitude = #{latitude},</if> <if test="altitude != null">altitude = #{altitude},</if> + <if test="recordUrl != null">record_url = #{recordUrl},</if> <if test="viewTime != null">view_time = #{viewTime},</if> </trim> where id = #{id} @@ -139,6 +144,7 @@ aat.longitude, aat.latitude, aat.altitude, + aat.record_url, ROW_NUMBER() OVER ( PARTITION BY aat.tube_id ORDER BY aat.alarm_time DESC ) AS rn, COUNT(CASE WHEN aat.view_time IS NULL THEN 1 END) OVER ( PARTITION BY aat.tube_id ) AS COUNT, COUNT ( aat.alarm_time ) OVER ( PARTITION BY tube_id ) AS total diff --git a/ruoyi-admin/src/main/resources/application-ard.yml b/ruoyi-admin/src/main/resources/application-ard.yml index 4a66ee1..f7f431f 100644 --- a/ruoyi-admin/src/main/resources/application-ard.yml +++ b/ruoyi-admin/src/main/resources/application-ard.yml @@ -17,7 +17,7 @@ #mqtt mqtt: host: tcp://192.168.1.15:1883 - clientId: m3c + clientId: m4c username: admin password: xzx12345 topic: tube,stealelec diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/tools/ArdTool.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/tools/ArdTool.java index 8557f57..627bc7c 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/tools/ArdTool.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/tools/ArdTool.java @@ -1,8 +1,7 @@ package com.ruoyi.common.utils.tools; import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * @Description: 宸ュ叿鏂规硶 @@ -35,4 +34,18 @@ } return map; } + /** + * 姹侻ap<K,V>涓渶灏� Value 瀵瑰簲鐨凨ey鍊� + * + * @param map + * @return + */ + public static String getKeyByMinValue(Map<String, Double> map) { + if (map == null) return null; + List<Map.Entry<String, Double>> list = new ArrayList(map.entrySet()); + Collections.sort(list, (o1, o2) -> (o1.getValue().intValue() - o2.getValue().intValue())); + String min = list.get(0).getKey(); +// String max = list.get(list.size() - 1).getKey(); + return min; + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java b/ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java index 17c2f64..5e7303d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java @@ -47,10 +47,10 @@ public void onClose( @PathParam("userId")String userId,Session session) { //褰撳墠鐨凷ession 绉婚櫎 ONLINE_USER_SESSIONS.remove(userId); - //骞朵笖閫氱煡鍏朵粬浜哄綋鍓嶇敤鎴峰凡缁忕寮�鑱婂ぉ瀹や簡 - String message="鐢ㄦ埛[" + userId + "] 鏂紑杩炴帴锛�"; - sendMessage(session,message); - log.info("鍙戦�佹秷鎭細"+message); +// //骞朵笖閫氱煡鍏朵粬浜哄綋鍓嶇敤鎴峰凡缁忕寮�鑱婂ぉ瀹や簡 +// String message="鐢ㄦ埛[" + userId + "] 鏂紑杩炴帴锛�"; +// sendMessage(session,message); +// log.info("鍙戦�佹秷鎭細"+message); try { session.close(); } catch (IOException e) { -- Gitblit v1.9.3