平安校园
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

205 linhas
8.8 KiB

  1. using MoYu.RemoteRequest.Extensions;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using SafeCampus.Application.Manager.DeepelephManager;
  5. using System.Collections.Generic;
  6. using System.Drawing;
  7. using System.Drawing.Imaging;
  8. namespace SafeCampus.Application.Services.Business.CameraInfoService;
  9. public class CameraInfoService : DbRepository<CameraInfo>, ICameraInfoService
  10. {
  11. private readonly IDeepelephManager _deepelephManager;
  12. private readonly ISimpleCacheService _simpleCacheService;
  13. public CameraInfoService(IDeepelephManager deepelephManager, ISimpleCacheService simpleCacheService)
  14. {
  15. _deepelephManager = deepelephManager;
  16. _simpleCacheService = simpleCacheService;
  17. }
  18. public async Task<bool> DataSync()
  19. {
  20. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  21. var list = await Context.Queryable<CameraInfo>().ToListAsync();
  22. var str = await $"{appSettings.SXAPIURL}/device/console/v1/sensor/page_query/brief"
  23. .SetBody(new
  24. {
  25. token = _deepelephManager.GetToken(),
  26. tenantCode = appSettings.TenantCode,
  27. poiId = appSettings.PoiId,
  28. pageNo = 1,
  29. pageSize = 1000,
  30. })
  31. .SetContentType("application/json")
  32. .PostAsAsync<string>();
  33. var model = JsonConvert.DeserializeObject<JObject>(str);
  34. if (!(bool)model["success"]) throw Oops.Oh(model["message"].ToString());
  35. if (model["data"] != null)
  36. {
  37. foreach (var item in model["data"]["items"])
  38. {
  39. var old_model = list.FirstOrDefault(x => x.SensorId == item["sensorId"].ToString());
  40. if (old_model != null)
  41. {
  42. old_model.DeviceStatus = item["deviceStatus"].ToString() == "online";
  43. old_model.DirectUrlIp = item["directUrlIp"].ToString();
  44. old_model.FieldId = item["fieldId"].ToString();
  45. old_model.FieldName = item["fieldName"].ToString();
  46. old_model.LastTime = DateTime.Now;
  47. old_model.ResHeight = (int)item["resHeight"];
  48. old_model.ResWidth = (int)item["resWidth"];
  49. old_model.SensorName = item["sensorName"].ToString();
  50. old_model.SnapshotUrl = item["snapshotUrl"].ToString();
  51. var signImg = Path.Combine(Directory.GetCurrentDirectory(), "Files", App.Configuration["AppInfo:CameraImg"], old_model.SensorId + ".jpg");
  52. var steam = await old_model.SnapshotUrl.GetAsByteArrayAsync();
  53. using (MemoryStream ms = new MemoryStream(steam))
  54. {
  55. using (Bitmap bmp = new Bitmap(ms))
  56. {
  57. using (Graphics g = Graphics.FromImage(bmp))
  58. {
  59. }
  60. bmp.Save(signImg, ImageFormat.Jpeg);
  61. }
  62. }
  63. old_model.SnapshotUrl = $"/Files/{App.Configuration["AppInfo:CameraImg"]}/{old_model.SensorId}.jpg";
  64. await UpdateAsync(old_model);
  65. }
  66. else
  67. {
  68. var cameraModel = new CameraInfo
  69. {
  70. DeviceStatus = item["deviceStatus"].ToString() == "online",
  71. DirectUrlIp = item["directUrlIp"].ToString(),
  72. FieldId = item["fieldId"].ToString(),
  73. FieldName = item["fieldName"].ToString(),
  74. LastTime = DateTime.Now,
  75. ResHeight = (int)item["resHeight"],
  76. ResWidth = (int)item["resWidth"],
  77. SensorId = item["sensorId"].ToString(),
  78. SensorName = item["sensorName"].ToString(),
  79. SnapshotUrl = item["snapshotUrl"].ToString(),
  80. };
  81. var signImg = Path.Combine(Directory.GetCurrentDirectory(), "Files", App.Configuration["AppInfo:CameraImg"], cameraModel.SensorId + ".jpg");
  82. var steam = await cameraModel.SnapshotUrl.GetAsByteArrayAsync();
  83. using (MemoryStream ms = new MemoryStream(steam))
  84. {
  85. using (Bitmap bmp = new Bitmap(ms))
  86. {
  87. using (Graphics g = Graphics.FromImage(bmp))
  88. {
  89. }
  90. bmp.Save(signImg, ImageFormat.Jpeg);
  91. }
  92. }
  93. cameraModel.SnapshotUrl = $"/Files/{App.Configuration["AppInfo:CameraImg"]}/{cameraModel.SensorId}.jpg";
  94. await InsertAsync(cameraModel);
  95. }
  96. }
  97. return true;
  98. }
  99. return false;
  100. }
  101. private List<long> GetGroupChildren(List<CameraGroup> node)
  102. {
  103. var list = new List<long>();
  104. if (node == null) return list;
  105. foreach (var cameraGroup in node)
  106. {
  107. list.Add(cameraGroup.Id);
  108. list.AddRange(GetGroupChildren(cameraGroup.Children));
  109. }
  110. return list;
  111. }
  112. public async Task<SqlSugarPagedList<CameraInfoDto>> GetPageList(CameraSearch search)
  113. {
  114. var groupids = new List<long>();
  115. if (search.GroupId.HasValue && search.GroupId.Value != -1)
  116. {
  117. var group = await Context.Queryable<CameraGroup>()
  118. .ToTreeAsync(x => x.Children, x => x.ParentId, search.GroupId);
  119. groupids = GetGroupChildren(group);
  120. groupids.Add(search.GroupId.Value);
  121. }
  122. var query = Context.Queryable<CameraInfo>()
  123. .Includes(x => x.SysUserItem)
  124. .Includes(x => x.CameraGroupItem)
  125. .WhereIF(search.DeviceStatus.HasValue, x => x.DeviceStatus == search.DeviceStatus)
  126. .WhereIF(!string.IsNullOrEmpty(search.SensorId), x => x.SensorId == search.SensorId)
  127. .WhereIF(!string.IsNullOrEmpty(search.SensorName), x => x.SensorName == search.SensorName)
  128. .WhereIF(search.GroupId.HasValue, x => (search.GroupId.Value == -1 ? x.GroupId == null : groupids.Contains(x.GroupId.Value)));
  129. var list = await query.OrderBy(x => x.LastTime)
  130. .ToPagedListAsyncMapster<CameraInfo, CameraInfoDto>(search.PageNum, search.PageSize);
  131. return list;
  132. }
  133. public async Task<bool> BatchSetGroup(SetGroupInput input)
  134. {
  135. if (input.Id == -1)
  136. {
  137. var result = await Context.Updateable<CameraInfo>()
  138. .SetColumns(x => x.GroupId == null)
  139. .Where(x => input.Ids.Contains(x.Id))
  140. .ExecuteCommandAsync();
  141. return result == input.Ids.Count;
  142. }
  143. else
  144. {
  145. var result = await Context.Updateable<CameraInfo>()
  146. .SetColumns(x => x.GroupId == input.Id)
  147. .Where(x => input.Ids.Contains(x.Id))
  148. .ExecuteCommandAsync();
  149. return result == input.Ids.Count;
  150. }
  151. }
  152. public async Task<bool> BatchSetPushPersonByGroup(SetPushPersonGroupInput input)
  153. {
  154. var result = await Context.Updateable<CameraInfo>()
  155. .SetColumns(x => x.PushUserId == input.UserId)
  156. .Where(x => x.GroupId == input.GroupId)
  157. .ExecuteCommandAsync();
  158. await Context.Updateable<CameraGroup>().SetColumns(x => x.PushUserId == input.UserId)
  159. .Where(x => x.Id == input.GroupId).ExecuteCommandAsync();
  160. return result > 0;
  161. }
  162. public async Task<bool> BatchSetPushPerson(SetPushPersonInput input)
  163. {
  164. var result = await Context.Updateable<CameraInfo>()
  165. .SetColumns(x => x.PushUserId == input.UserId)
  166. .Where(x => input.Ids.Contains(x.Id))
  167. .ExecuteCommandAsync();
  168. return result == input.Ids.Count;
  169. }
  170. public async Task<bool> BatchSetPushPersonByWarn(SetPushPersonWarnInput input)
  171. {
  172. var warn = _simpleCacheService.Get<List<WarnGroupInfo>>(SafeCampusConst.WarnGroup);
  173. var warnGroupInfo = warn.FirstOrDefault(x => x.Code == input.WarnCode);
  174. if (warnGroupInfo != null)
  175. {
  176. var ids = warnGroupInfo.CameraId;
  177. var result = await Context.Updateable<CameraInfo>()
  178. .SetColumns(x => x.PushUserId == input.UserId)
  179. .Where(x => ids.Contains(x.SensorId))
  180. .ExecuteCommandAsync();
  181. return result > 0;
  182. }
  183. throw Oops.Oh("分组不存在");
  184. }
  185. public async Task<List<CameraInfoDto>> GetBuildCameraList(List<string> useList)
  186. {
  187. var list=await Context.Queryable<CameraInfo>().Where(x=> !useList.Contains(x.SensorId)).ToListAsync();
  188. return list.Adapt<List<CameraInfoDto>>();
  189. }
  190. }