using DotNetCore.CAP; using Furion.DependencyInjection; using Furion.DistributedIDGenerator; using Furion.Logging.Extensions; using Furion.RemoteRequest.Extensions; using Mapster; using Newtonsoft.Json; using Nirvana.Common; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Waste.Application.ThirdApiInfo; using Waste.Domain; namespace Waste.Application.SubscribeInfo { /// /// CAP订阅相关接口 /// public class SubscribeService : ISubscribeService, ICapSubscribe, ITransient { private readonly ISqlSugarRepository repository; private readonly SqlSugarClient dbClient; private readonly IResultService _resultService; private readonly ILoggerService _loggerService; public SubscribeService(ISqlSugarRepository sqlSugarRepository, IResultService resultService, ILoggerService loggerService) { repository = sqlSugarRepository; dbClient = repository.Context; _resultService = resultService; _loggerService = loggerService; } /// /// 添加记录 /// /// /// [CapSubscribe("result.service.insert")] public async Task InsertResultAsync(ResultS2SDto data) { bool isfrist = false; if (data.LastHeartTime.HasValue && data.LastHeartTime.Value.Date != DateTime.Now.Date) { isfrist = true; } await dbClient.Ado.UseStoredProcedure().ExecuteCommandAsync("Proc_InsertResult", new { deviceid = data.DeviceId, businessid = data.BusinessId, resultid = data.ResultId, imei = data.imei, iccid = data.iccid, imsi = data.imsi, time = DateTime.Now, latitude = data.latitude, longitude = data.longtitude, sign = data.gslq, city = "", area = data.trash, wastetype = data.wastetype, weigth = data.weight, isheart = 0, tare = data.Tare, isfrist = isfrist }); } /// /// 更新记录上报结果 /// /// /// [CapSubscribe("result.service.update")] public async Task UpdateStatusAsync(UpdateStatusDto data) { Guid resultid = Guid.Empty; if (!string.IsNullOrEmpty(data.ResultId) && Guid.TryParse(data.ResultId, out resultid)) { if (await dbClient.Queryable().AnyAsync(x => x.ResultId == resultid)) { await dbClient.Updateable().SetColumns(x => new W_ResultExt { Status = data.status }).Where(x => x.ResultId == resultid).ExecuteCommandAsync(); } else { var insertdata = new W_ResultExt { Id = IDGen.NextID(), Status = data.status, CreateTime = DateTime.Now, ResultId = resultid }; await dbClient.Insertable(insertdata).ExecuteCommandAsync(); } } } /// /// 心跳数据上报 /// /// /// [CapSubscribe("device.service.postheart")] public async Task UpdateHeartInfoAsync(DevHeartRequestDto data) { var device = await dbClient.Queryable().FirstAsync(x => x.Ecode == data.ECode); if (device == null) { return; } if (await dbClient.Queryable().AnyAsync(x => x.DeviceId == device.Id)) { //更新设备心跳信息 if (data.Latitude == 0 || data.Longitude == 0) { await dbClient.Updateable() .SetColumns(x => new W_DeviceData { LastBeatTime = DateTime.Now }) .Where(x => x.DeviceId == device.Id).ExecuteCommandAsync(); } else { string longitude = data.Longitude.ToString(); string Latitude = data.Latitude.ToString(); await dbClient.Updateable() .SetColumns(x => new W_DeviceData { LastBeatTime = DateTime.Now, Longitude = longitude, Latitude = Latitude }) .Where(x => x.DeviceId == device.Id).ExecuteCommandAsync(); } } else { var insertdata = new W_DeviceData { DeviceId = device.Id, Sign = data.GSLQ.ToString(), IMSI = data.IMSI, ICCID = data.ICCID, IMEI = data.IMEI, LastBeatTime = DateTime.Now, Latitude = data.Latitude.ToString(), Longitude = data.Longitude.ToString() }; await dbClient.Insertable(insertdata).ExecuteCommandAsync(); } } /// /// 更新设备开机信息 /// /// /// [CapSubscribe("device.service.update")] public async Task UpdateRegInfoAsync(Guid deviceid) { //更新开机时间 if (await dbClient.Queryable().AnyAsync(x => x.DeviceId == deviceid)) { await dbClient.Updateable() .SetColumns(x => new W_DeviceData { LastStartTime = DateTime.Now }) .Where(x => x.DeviceId == deviceid).ExecuteCommandAsync(); } else { var insertdata = new W_DeviceData { DeviceId = deviceid, Sign = "", IMSI = "", ICCID = "", IMEI = "", Latitude = "0", Longitude = "0", LastStartTime = DateTime.Now }; await dbClient.Insertable(insertdata).ExecuteCommandAsync(); } } /// /// 更新设备版本信息 /// /// /// [CapSubscribe("device.service.updatever")] public async Task UpdateVersionAsync(DeviceVerS2SDto data) { var deivce = await dbClient.Queryable().Select(x => new W_Device { Id = x.Id }).FirstAsync(x => x.Ecode == data.ecode); if (deivce == null) { return; } //更新版本号 if (await dbClient.Queryable().AnyAsync(x => x.DeviceId == deivce.Id)) { await dbClient.Updateable() .SetColumns(x => new W_DeviceData { Version = data.ver }) .Where(x => x.DeviceId == deivce.Id).ExecuteCommandAsync(); } else { var insertdata = new W_DeviceData { DeviceId = deivce.Id, Sign = "", IMSI = "", ICCID = "", IMEI = "", Latitude = "0", Longitude = "0", LastStartTime = DateTime.Now, Version = data.ver }; await dbClient.Insertable(insertdata).ExecuteCommandAsync(); } } /// /// 4G模块传输的数据增加测量记录 /// /// /// [CapSubscribe("result.service.insert4g")] public async Task Insert4GResultAsync(nMyPackage myPackage) { await _resultService.InsertResultBy4GAsync(myPackage); } /// /// 测试,4G模块传输的数据增加测量记录 /// /// /// [CapSubscribe("result.service.testinsert4g")] public void Test(nMyPackage myPackage) { var msg = JsonConvert.SerializeObject(myPackage); _loggerService.AddLogger(msg, 1); } /// /// 第三方推送设备消息 /// /// /// [CapSubscribe("third.service.sendmessage")] public async Task SeedThirdMessageAsync(SendThirdMessageSubscriDto data) { string errmsg = string.Empty; var senddata = data.Adapt(); var response = await data.Url .SetBody(senddata, "application/json", Encoding.UTF8) .OnException((res, errors) => { errmsg = errors; }).PostAsync(); if (errmsg != string.Empty) { _loggerService.AddLogger($"第三方设备消息发送失败,内容:{data.ToJson()},返回:{errmsg}", 1); } var returnstr = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { _loggerService.AddLogger($"第三方设备消息发送失败,内容:{data.ToJson()},返回:{returnstr}", 1); } if (returnstr.ToLower() != "success") { _loggerService.AddLogger($"第三方设备消息发送失败,内容:{data.ToJson()},返回:{returnstr}", 1); } _loggerService.AddLogger($"第三方设备消息发送成功,内容:{data.ToJson()},返回:{returnstr}", 3); } /// /// A8 4G模块传输的数据增加测量记录 /// /// /// [CapSubscribe("result.service.inserta84g")] public async void InsertA84GResultAsync(A8MyPackage myPackage) { //_loggerService.AddLogger($"A8记录,内容:{myPackage.ToJson()}", 1); await _resultService.InsertResultByA84GAsync(myPackage); } } }