using Furion.DependencyInjection; using Mapster; using Nirvana.Common; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using YBDevice.Entity; namespace YBDevice.Application.ReportInfo { /// /// 统计管理 /// public class ReportService :IReportService, ITransient { private readonly ISqlSugarRepository repository; private readonly SqlSugarClient dbClient; private readonly OperatorModel currentUser; public ReportService(ISqlSugarRepository sqlSugarRepository) { repository = sqlSugarRepository; dbClient = repository.Context; currentUser = BaseInfoService.GetUserInfo(); } /// /// 获取合计信息 /// /// public async Task GetCombinedInfoAsync() { var data = new YB_Combined { TodayRegCnt = 0, TodayDevCnt = 0, TotalDevCnt = 0, TodayIncome = 0, TodayResultCnt = 0, TotalIncome = 0, TotalRegCnt = 0, TotalResultCnt = 0 }; if (currentUser.AccountType != AccountType.platform) { var businessdata = await dbClient.Queryable().FirstAsync(x => x.BusinessId == currentUser.BusinessId); if(businessdata != null) { data.TodayDevCnt = businessdata.TodayDevCount; data.TotalDevCnt = businessdata.DevCount; data.TodayResultCnt = businessdata.TodayResultCnt; data.TotalResultCnt = businessdata.TotalResultCnt; } } else { var totaldata = await dbClient.Queryable().FirstAsync(x => x.Id == 1); if (totaldata != null) { data = totaldata; } } return data; } /// /// 获取指定设备统计数据 /// /// /// /// /// public async Task> GetDevListAsync(int id, DateTime? starttime, DateTime? endtime) { if (!starttime.HasValue) { starttime = DateTime.Now.AddDays(-7).Date; } if (!endtime.HasValue) { endtime = DateTime.Now.AddDays(-1).Date; } var tempquery = dbClient.Queryable() .Where(x => x.DevId == id && x.RecordTime >= starttime && x.RecordTime <= endtime); if(currentUser.AccountType != AccountType.platform) { if(currentUser.Type == 2) { tempquery = tempquery.Where(x => x.BusinessId == currentUser.BusinessId); } else { tempquery = tempquery.Where(x => SqlFunc.Subqueryable().Where(e =>SqlFunc.StartsWith(e.Code,currentUser.BusinessCode)&&e.Id == x.BusinessId).Any()); } } var query = await tempquery.OrderBy(x => x.RecordTime, OrderByType.Asc) .GroupBy(x=>new { x.DevId, x.RecordTime }) .Select(x => new YB_DayReport { DayDevCnt = 0, DayInCome = SqlFunc.AggregateSum(x.DayInCome), DayRegCnt = 0, DayResultCnt = SqlFunc.AggregateSum(x.DayResultCnt), RecordTime = x.RecordTime }) .ToListAsync(); var list = query.Adapt>(); return list; } /// /// 获取日统计数据 /// /// /// /// public async Task> GetListAsync(DateTime? starttime, DateTime? endtime) { if (!starttime.HasValue) { starttime = DateTime.Now.AddDays(-7).Date; } if (!endtime.HasValue) { endtime = DateTime.Now.AddDays(-1).Date; } if (currentUser.AccountType != AccountType.platform) { var tempquery = dbClient.Queryable().Where(x => x.RecordTime >= starttime && x.RecordTime <= endtime); if (currentUser.Type == 2) { tempquery = tempquery.Where(x => x.BusinessId == currentUser.BusinessId); } else { tempquery = tempquery.Where(x => SqlFunc.Subqueryable().Where(e => SqlFunc.StartsWith(e.Code, currentUser.BusinessCode) && e.Id == x.BusinessId).Any()); } var query = await tempquery.OrderBy(x => x.RecordTime, OrderByType.Asc) .GroupBy(x=>new { x.BusinessId, x.RecordTime }) .Select(x => new YB_DayReport { DayDevCnt = SqlFunc.AggregateSum(x.DayDevCnt), DayInCome = SqlFunc.AggregateSum(x.DayInCome), DayRegCnt = 0, DayResultCnt = SqlFunc.AggregateSum(x.DayResultCnt), RecordTime = x.RecordTime }).ToListAsync(); var list = query.Adapt>(); return list; } else { var tempquery = dbClient.Queryable().Where(x => x.RecordTime >= starttime && x.RecordTime <= endtime); var query = await tempquery.OrderBy(x => x.RecordTime, OrderByType.Asc).ToListAsync(); var list = query.Adapt>(); return list; } } } }