using System.Configuration; using System.Linq.Expressions; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.ScheduledTask.DeviceUploadLog.Request; using Dlhis.ScheduledTask.DeviceUploadLog.Response; using Kurisu.AspNetCore.Scope; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; using Kurisu.SqlSugar.Attributes; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Mvc; using NetTaste; using SqlSugar; namespace Dlhis.ScheduledTask.DeviceUploadLog.Services.Implements; public class DeviceUploadLogService : IDeviceUploadLogService { private readonly IDbContext _dbContext; public DeviceUploadLogService(IDbContext dbContext) { _dbContext = dbContext; } public async Task> GetPageAsync(DeviceUploadLogPageRequest request) { var page = await _dbContext.Queryable() .LeftJoin((deviceUp, ga) => deviceUp.UserUniqueNo == ga.No) .WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true, deviceUp => deviceUp.RaiseDateTime >= request.SearchDateTimePeriod.Start) .WhereIF(request.SearchDateTimePeriod?.End.HasValue == true, deviceUp => deviceUp.RaiseDateTime <= request.SearchDateTimePeriod.End) .Select((deviceUp, ga) => new DeviceUploadLogResponse { DeviceUniqueNo = deviceUp.DeviceUniqueNo, Id = deviceUp.Id, RaiseDateTime = deviceUp.RaiseDateTime, UserNo = ga.No, UserCode = ga.Code, UserName = ga.Name, }) .ToPageListAsync(request); return page; } [IgnoreTenant] public async Task UploadLogAsync(DeviceUploadLogUploadRequest request) { var device = await _dbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync(); device.ThrowIfNull("设备信息不存在"); var entity = new DeviceUploadLogEntity { DeviceUniqueNo = request.DeviceUniqueNo, // UploadTime = request.UploadTime, UserUniqueNo = request.UserUniqueNo, TenantId = device.TenantId, }; await _dbContext.InsertAsync(entity); } [IgnoreTenant] public async Task UploadLogsAsync(List requests) { //判断存在的记录 Expression> where = LinqExpressionExtension.False(); requests.ForEach(p => { where = where.Or(x => x.DeviceUniqueNo == p.DeviceUniqueNo && x.SerialNo == p.SerialNo && x.RaiseDateTime == p.RaiseDateTime); }); //处理冗余的请求数据 var exists = await _dbContext.Queryable().Where(where).ToListAsync(); foreach (var item in exists) { requests.RemoveAll(x => x.DeviceUniqueNo == item.DeviceUniqueNo && x.SerialNo == item.SerialNo && x.RaiseDateTime == item.RaiseDateTime); } var nos = requests.Select(x => x.DeviceUniqueNo).ToList(); var devices = await _dbContext.Queryable().Where(x => nos.Contains(x.UniqueNo)).ToListAsync(); var records = requests.GroupBy(x => x.DeviceUniqueNo).SelectMany(x => { var device = devices.FirstOrDefault(item => item.UniqueNo == x.Key); if (device != null) { return x.AsEnumerable().Select(item => new DeviceUploadLogEntity { DeviceUniqueNo = x.Key, UserUniqueNo = item.UserUniqueNo, RaiseDateTime = item.RaiseDateTime, SerialNo = item.SerialNo, Type = item.Type, TenantId = device.TenantId, }).ToList(); } return null; }).Where(x => x != null).ToList(); await _dbContext.InsertAsync(records); } }