|
- using Confluent.Kafka;
- using Microsoft.Extensions.Options;
- using Newtonsoft.Json;
- using System.ComponentModel.DataAnnotations;
- using TelpoDataService.Util.Clients;
- using TelpoDataService.Util.Entities.GpsLocationHistory;
- using TelpoDataService.Util.Models;
- using TelpoDataService.Util.QueryObjects;
- using TelpoPush.WanJiaAn.Worker.Common;
- using TelpoPush.WanJiaAn.Worker.Models.Config;
- using TelpoPush.WanJiaAn.Worker.Models.Enum;
- using TelpoPush.WanJiaAn.Worker.Models.MqTemplates;
- using TelpoPush.WanJiaAn.Worker.Models.PushTemplates;
- using TelpoPush.WanJiaAn.Worker.Service.Cache;
- using TelpoPush.WanJiaAn.Worker.Service.Mq;
-
- namespace TelpoPush.WanJiaAn.Worker.Handlers
- {
- public class WanJiaAnProcess
- {
- private readonly static object _syncLocker = new object();
- private readonly IHostEnvironment _env;
- private readonly ILogger<WanJiaAnProcess> _logger;
- private readonly HttpHelperAsync _httpHelper;
- private readonly RedisUtil _redis;
- private readonly MqProcessMessage _serviceMqProcess;
- private readonly WanJiaAnConfig _WanJiaAnConfig;
- private readonly GpsLocationHistoryAccessorClient<WanjiaanAlarmEvent> _messageWanJiaAnClient;
-
- public WanJiaAnProcess(
- IHostEnvironment env,
- ILogger<WanJiaAnProcess> logger,
- HttpHelperAsync httpHelper,
- RedisUtil redis,
- MqProcessMessage serviceMqProcess,
- IOptions<WanJiaAnConfig> WanJiaAnConfig,
- GpsLocationHistoryAccessorClient<WanjiaanAlarmEvent> messageWanJiaAnClient
- )
- {
- _env = env;
- _logger = logger;
- _httpHelper = httpHelper;
- _redis = redis;
- _WanJiaAnConfig = WanJiaAnConfig.Value;
- _serviceMqProcess = serviceMqProcess;
- _messageWanJiaAnClient = messageWanJiaAnClient;
-
- }
-
- public async Task SendWanJiaAn(string? message, string topic, Headers headers)
- {
- #region 数据初始验证
- bool isHandle = true;
- BaseModel model = null;
- string imei = "";
- if (!string.IsNullOrEmpty(message))
- {
- model = JsonConvert.DeserializeObject<BaseModel>(message);
- if (model != null)
- {
- var Jo = JsonConvert.DeserializeObject<Dictionary<string, object>>(message);
- if (Jo.ContainsKey("device_id"))
- imei = Jo["device_id"].ToString();
-
- if (string.IsNullOrEmpty(imei))
- {
- _logger.LogInformation($"[数据信息不完整] device_id信息不存在:{message}");
- isHandle = false;
- }
-
-
- }
- else
- {
- _logger.LogInformation($"[数据信息不完整] 数据解析异常:{message}");
- isHandle = false;
- }
- }
- else
- {
- _logger.LogInformation($"[数据信息不完整] message数据异常:{message}");
- isHandle = false;
- }
- #endregion
- if (isHandle)
- {
- lock (_syncLocker)
- {
- #region 注释 Headers 解析
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #endregion
- try
- {
- #region 注释
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #endregion
- switch (topic)
- {
- case "topic.wanjiaan.push.telpo":
- DataServicePusWanJiaAn(model);
- break;
- default:
- break;
- }
-
- }
- catch (Exception ex)
- {
- _logger.LogError($"当前工作线程异常: {ex.Message}|{ex.Source}|{ex.StackTrace}");
- }
- }
- }
- }
-
-
- public async Task DataServicePusWanJiaAn(BaseModel model)
- {
- try
- {
- if (model.data != null)
- {
- var alarmEvent = JsonConvert.DeserializeObject<MqAlarmEventTemplate>(model.data.ToString());
- if (alarmEvent?.alarm_event != null)
- {
- var data = alarmEvent?.alarm_event;
- if (data?.event_type == 2 || data?.event_type == 52)
- {
- string tag = "";
- if (data.report_type == 1)
- tag = "事件开始";
- else if (data.report_type == 2)
- tag = "事件结束";
- else if (data.report_type == 3)
- tag = "资源上报";
-
- var wanjiaanAlarm = new WanjiaanAlarmEvent()
- {
- EventId = data.event_id,
- DeviceId = model.device_id,
- UserId = model.user_id,
- EventTime = TimeHelper.ConvertToLocalDateTime(model.event_time),
- EventType = data.event_type,
- ReportType = data.report_type,
- EventStart = TimeHelper.ConvertToLocalDateTime(data.event_start),
- ImageUrl = data.image,
- VideoUrl = data.url,
- Remark = $"{tag}:{JsonConvert.SerializeObject(model)};",
- CreateTime = DateTime.Now,
- };
- if (!string.IsNullOrEmpty(data.event_end))
- wanjiaanAlarm.EventEnd = TimeHelper.ConvertToLocalDateTime(data.event_end);
- if (!string.IsNullOrEmpty(data.video_start))
- wanjiaanAlarm.VideoStart = TimeHelper.ConvertToLocalDateTime(data.video_start);
- if (!string.IsNullOrEmpty(data.video_end))
- wanjiaanAlarm.VideoEnd = TimeHelper.ConvertToLocalDateTime(data.video_end);
-
- var alarmEventDb = await _redis.GetWanjiaanAlarmEvent(wanjiaanAlarm.EventId);
- if (alarmEventDb != null)
- wanjiaanAlarm.Remark = alarmEventDb.Remark + wanjiaanAlarm.Remark;
- await _redis.SetWanjiaanAlarmEvent(wanjiaanAlarm.EventId, wanjiaanAlarm);
- if (data.report_type == 3)
- {
- await _messageWanJiaAnClient.AddAsync(wanjiaanAlarm);
- await _redis.DelWanjiaanAlarmEvent(wanjiaanAlarm.EventId);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- }
- }
- }
- catch (Exception ex)
- {
- string s = ex.Message;
- }
- }
- }
- }
|