diff --git a/24Hour/Controllers/Common/DeviceController.cs b/24Hour/Controllers/Common/DeviceController.cs index 85303a1..edb406a 100644 --- a/24Hour/Controllers/Common/DeviceController.cs +++ b/24Hour/Controllers/Common/DeviceController.cs @@ -5,6 +5,7 @@ using Elight.Utility.Code; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SqlSugar; +using System.Linq; namespace _24Hour.Controllers.Common { @@ -33,6 +34,47 @@ namespace _24Hour.Controllers.Common #endregion #region 设备管理 + + + /// + /// 获取单位及单位下的设备信息 + /// + /// + /// + [HttpGet] + [Route("QueryUnitDevicelist")] + public async Task QueryUnitDevicelist() + { + var list = new List(); + //获取设备信息 + var Devicelist = await _db.Queryable().Where(q => q.IsDeleted == 0).ToListAsync(); + //获取单位信息 + var Unitlist = await _db.Queryable().Where(q => q.IsDelete == 0).ToListAsync(); + //设备通过单位Id分组循环获取单位信息及设备信息 + Devicelist.GroupBy(q=>q.unitId).ToList().ForEach(q => { + var data=Unitlist.Where(x => x.Id == q.Key).FirstOrDefault(); + if (data!=null) + { + var state = 0; + if (q.Where(q => q.state == 1).Any()) + state = 1; + else if (q.Where(q => q.state == 2).Any()) + state = 2; + list.Add(new + { + data.Id, + data.unitname, + data.lalon, + state, + Devicelist = q.ToList().Select(q => new { q.name, q.state, q.position }) + }); + } + }); + result.IsSucceed = true; + result.result = list; + return result; + } + /// /// 根据当前登录人单位查询设备信息分页查询 /// diff --git a/24Hour/Controllers/Common/WebSocketController.cs b/24Hour/Controllers/Common/WebSocketController.cs index a190a3c..3fc8a01 100644 --- a/24Hour/Controllers/Common/WebSocketController.cs +++ b/24Hour/Controllers/Common/WebSocketController.cs @@ -26,6 +26,7 @@ namespace _24Hour.Controllers.Common private readonly IConfiguration _configuration; Result result = new Result(); private static Dictionary CONNECT_POOL = new Dictionary();//用户连接池 + private static Dictionary meeting_pool = new Dictionary();//会议连接池 //private static Dictionary> MESSAGE_POOL = new Dictionary>();//离线消息池 public WebSocketController(ILogger logger, SqlSugarClient db,User userdata,IConfiguration configuration) { @@ -74,6 +75,10 @@ namespace _24Hour.Controllers.Common if (result.MessageType == WebSocketMessageType.Close) { await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); + if (meeting_pool.ContainsKey(user)) meeting_pool.Remove(user);//删除会议 + if (CONNECT_POOL.ContainsKey(user)) CONNECT_POOL.Remove(user);//删除socket + socket.Dispose(); + break; } else { @@ -257,9 +262,10 @@ namespace _24Hour.Controllers.Common if (socket.State != WebSocketState.Open)//连接关闭 { if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);//删除连接池 - result.IsSucceed = true; - result.result = "未上线"; - return result; + if (meeting_pool.ContainsKey(_userdata.Id)) meeting_pool.Remove(_userdata.Id);//删除会议 + //result.IsSucceed = true; + //result.result = "未上线"; + //return result; } #endregion @@ -269,9 +275,7 @@ namespace _24Hour.Controllers.Common if (Senddata.typenum == "1" && Senddata.deviceno != "") { //设备发送给app - //查询远程会见记录 - var Devicedata = await _db.Queryable().Where(q => q.deviceno == Senddata.deviceno).ToListAsync(); - Senddata.content = $"{_configuration.GetSection("Videoaddress:rtsp").Value}{Devicedata.FirstOrDefault()?.deviceno}"; + Senddata.content = $"{_configuration.GetSection("Videoaddress:rtsp").Value}{Senddata.deviceno}"; //对象序列化 content = JsonConvert.SerializeObject(Senddata); buffer = new ArraySegment(Encoding.UTF8.GetBytes(content)); @@ -291,19 +295,31 @@ namespace _24Hour.Controllers.Common WebSocket destSocket = CONNECT_POOL[Senddata.recipient]; //判断客户端是否连接 if (destSocket != null && destSocket.State == WebSocketState.Open) - await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); + { + if (meeting_pool.ContainsKey(Senddata.recipient)) + { + // + var data = meeting_pool[Senddata.recipient]; + //当前用户消息对象序列化 + var dqcontent = JsonConvert.SerializeObject(data); + var dqbuffer = new ArraySegment(Encoding.UTF8.GetBytes(dqcontent)); + //当前用户socket发送 + await socket.SendAsync(dqbuffer, WebSocketMessageType.Text, true, CancellationToken.None); + } + //目的客户端发送 + await destSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); + } else { - result.IsSucceed = false; - result.result = "用户未上线"; - return result; + meeting_pool.Add(_userdata.Id, Senddata); } } - else + else { - result.IsSucceed = false; - result.result = "用户未上线"; - return result; + meeting_pool.Add(_userdata.Id, Senddata); + //result.IsSucceed = false; + //result.result = "用户未上线"; + //return result; } #endregion } @@ -326,6 +342,22 @@ namespace _24Hour.Controllers.Common result.result = ""; return result; } + + + /// + /// 推出会议 + /// + /// + /// + [HttpPost] + [Route("close")] + public async Task close() + { + if (meeting_pool.ContainsKey(_userdata.Id)) meeting_pool.Remove(_userdata.Id);//删除会议 + result.IsSucceed = true; + result.result = ""; + return result; + } } /// @@ -338,6 +370,7 @@ namespace _24Hour.Controllers.Common /// [DataMember] public string? sender { get; set; } + /// /// 发送内容 ///