using DotNetCore.CAP; using Furion.DependencyInjection; using Furion.DistributedIDGenerator; 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; public SubscribeService(ISqlSugarRepository sqlSugarRepository) { repository = sqlSugarRepository; dbClient = repository.Context; } /// /// 添加记录 /// /// /// [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(); } } } }