MeiRiYiCheng_1_old/YBDevice.Application/ReportInfo/ReportService.cs

168 lines
6.3 KiB
C#

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
{
/// <summary>
/// 统计管理
/// </summary>
public class ReportService :IReportService, ITransient
{
private readonly ISqlSugarRepository<YB_Combined> repository;
private readonly SqlSugarClient dbClient;
private readonly OperatorModel currentUser;
public ReportService(ISqlSugarRepository<YB_Combined> sqlSugarRepository)
{
repository = sqlSugarRepository;
dbClient = repository.Context;
currentUser = BaseInfoService.GetUserInfo();
}
/// <summary>
/// 获取合计信息
/// </summary>
/// <returns></returns>
public async Task<YB_Combined> 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<YB_BusinessRealData>().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<YB_Combined>().FirstAsync(x => x.Id == 1);
if (totaldata != null)
{
data = totaldata;
}
}
return data;
}
/// <summary>
/// 获取指定设备统计数据
/// </summary>
/// <param name="id"></param>
/// <param name="starttime"></param>
/// <param name="endtime"></param>
/// <returns></returns>
public async Task<List<ReportChartDto>> 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<YB_DeviceDayReportData>()
.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<YB_Business>().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<List<ReportChartDto>>();
return list;
}
/// <summary>
/// 获取日统计数据
/// </summary>
/// <param name="starttime"></param>
/// <param name="endtime"></param>
/// <returns></returns>
public async Task<List<ReportChartDto>> 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<YB_BusinessReportData>().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<YB_Business>().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<List<ReportChartDto>>();
return list;
}
else
{
var tempquery = dbClient.Queryable<YB_DayReport>().Where(x => x.RecordTime >= starttime && x.RecordTime <= endtime);
var query = await tempquery.OrderBy(x => x.RecordTime, OrderByType.Asc).ToListAsync();
var list = query.Adapt<List<ReportChartDto>>();
return list;
}
}
}
}