Browse Source

添加单位设备查询接口,视频推送接口

master
liujiaqiang 2 years ago
parent
commit
d24c1d10cd
  1. 42
      24Hour/Controllers/Common/DeviceController.cs
  2. 61
      24Hour/Controllers/Common/WebSocketController.cs

42
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 设备管理
/// <summary>
/// 获取单位及单位下的设备信息
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpGet]
[Route("QueryUnitDevicelist")]
public async Task<Result> QueryUnitDevicelist()
{
var list = new List<dynamic>();
//获取设备信息
var Devicelist = await _db.Queryable<App_DeviceModel>().Where(q => q.IsDeleted == 0).ToListAsync();
//获取单位信息
var Unitlist = await _db.Queryable<App_Sys_UnitModel>().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;
}
/// <summary>
/// 根据当前登录人单位查询设备信息分页查询
/// </summary>

61
24Hour/Controllers/Common/WebSocketController.cs

@ -26,6 +26,7 @@ namespace _24Hour.Controllers.Common
private readonly IConfiguration _configuration;
Result result = new Result();
private static Dictionary<string, WebSocket> CONNECT_POOL = new Dictionary<string, WebSocket>();//用户连接池
private static Dictionary<string, WebSocketSending> meeting_pool = new Dictionary<string, WebSocketSending>();//会议连接池
//private static Dictionary<string, List<MessageInfo>> MESSAGE_POOL = new Dictionary<string, List<MessageInfo>>();//离线消息池
public WebSocketController(ILogger<LoginController> 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<App_DeviceModel>().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<byte>(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<byte>(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;
}
/// <summary>
/// 推出会议
/// </summary>
/// <param name="Sendingdata"></param>
/// <returns></returns>
[HttpPost]
[Route("close")]
public async Task<Result> close()
{
if (meeting_pool.ContainsKey(_userdata.Id)) meeting_pool.Remove(_userdata.Id);//删除会议
result.IsSucceed = true;
result.result = "";
return result;
}
}
/// <summary>
@ -338,6 +370,7 @@ namespace _24Hour.Controllers.Common
/// </summary>
[DataMember]
public string? sender { get; set; }
/// <summary>
/// 发送内容
/// </summary>

Loading…
Cancel
Save