每日上报曲线接口修改

DataMaintenance
洁 任 2026-01-07 10:15:56 +08:00
parent 0129d9045f
commit 15e9b1c215
3 changed files with 286 additions and 44 deletions

View File

@ -663,47 +663,172 @@ namespace OpenAuth.App.ServiceApp.FireManagement
{
using (var db = base.UnitWork.CreateContext())
{
//if (type == 1)
//{
// DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
// var list = await db.FmFireclueInfo.AsQueryable()
// .Where(r => r.ReportTime >= firstDayOfMonth)
// .GroupBy(r => new { r.ReportTime.Day })
// .Select(r => new FireInfoStateForChart
// {
// DateTime = r.ReportTime.Day.ToString() + "日",
// TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
// UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
// }).ToListAsync();
// return new Response<List<FireInfoStateForChart>> { Result = list };
//}
//else if (type == 2)
//{
// DateTime firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);
// var list = await db.FmFireclueInfo.AsQueryable()
// .Where(r => r.ReportTime >= firstDayOfYear)
// .GroupBy(r => new { r.ReportTime.Month })
// .Select(r => new FireInfoStateForChart
// {
// DateTime = r.ReportTime.Month.ToString() + "月",
// TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
// UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
// }).ToListAsync();
// return new Response<List<FireInfoStateForChart>> { Result = list };
//}
//else
//{
// DateTime firstDayOfYear = DateTime.Now.AddYears(-3);
// var list = await db.FmFireclueInfo.AsQueryable()
// .Where(r => r.ReportTime >= firstDayOfYear)
// .GroupBy(r => new { r.ReportTime.Year })
// .Select(r => new FireInfoStateForChart
// {
// DateTime = r.ReportTime.Year.ToString() + "年",
// TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
// UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
// }).ToListAsync();
// return new Response<List<FireInfoStateForChart>> { Result = list };
//}
if (type == 1)
{
DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
var list = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= firstDayOfMonth)
.GroupBy(r => new { r.ReportTime.Day })
.Select(r => new FireInfoStateForChart
// 计算14天的日期范围
DateTime startDate = DateTime.Now.AddDays(-14).Date;
DateTime endDate = DateTime.Now.Date;
// 生成14天的日期列表
var dateRange = Enumerable.Range(0, (endDate - startDate).Days + 1)
.Select(offset => startDate.AddDays(offset))
.Select(date => new
{
DateTime = r.ReportTime.Day.ToString() + "日",
Date = date,
DayString = date.Month.ToString() + "." + date.Day.ToString()
})
.ToList();
// 查询实际数据
var dataQuery = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= startDate && r.ReportTime <= endDate)
.GroupBy(r => new { r.ReportTime.Date })
.Select(r => new FireInfoState
{
Date = r.ReportTime.Date,
TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
}).ToListAsync();
// 左连接,确保所有日期都显示
var list = (from date in dateRange
join data in dataQuery on date.Date equals data.Date into gj
from subData in gj.DefaultIfEmpty()
orderby date.Date ascending
select new FireInfoStateForChart
{
DateTime = date.DayString,
TreatedCount = subData?.TreatedCount ?? 0,
UntreatedCount = subData?.UntreatedCount ?? 0
})
.ToList();
return new Response<List<FireInfoStateForChart>> { Result = list };
}
else if (type == 2)
{
DateTime firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);
var list = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= firstDayOfYear)
.GroupBy(r => new { r.ReportTime.Month })
.Select(r => new FireInfoStateForChart
// 计算日期范围
var now = DateTime.Now;
var startDate = new DateTime(now.Year, now.Month, 1).AddMonths(-11);
var endDate = new DateTime(now.Year, now.Month, 1).AddMonths(1).AddDays(-1);
// 生成月份列表
var months = Enumerable.Range(0, 12)
.Select(i => new
{
DateTime = r.ReportTime.Month.ToString() + "月",
Year = startDate.AddMonths(i).Year,
Month = startDate.AddMonths(i).Month,
Display = FormatMonthDisplay(startDate.AddMonths(i))
})
.ToList();
// 查询数据
var data = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= startDate && r.ReportTime <= endDate)
.GroupBy(r => new { r.ReportTime.Year, r.ReportTime.Month })
.Select(r => new
{
Year = r.ReportTime.Year,
Month = r.ReportTime.Month,
TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
}).ToListAsync();
return new Response<List<FireInfoStateForChart>> { Result = list };
})
.ToListAsync();
// 使用LINQ左连接
var result = (from month in months
join d in data
on new { month.Year, month.Month } equals new { d.Year, d.Month } into gj
from subData in gj.DefaultIfEmpty()
orderby month.Year, month.Month
select new FireInfoStateForChart
{
DateTime = month.Display,
TreatedCount = subData?.TreatedCount ?? 0,
UntreatedCount = subData?.UntreatedCount ?? 0
}).ToList();
return new Response<List<FireInfoStateForChart>> { Result = result };
}
else
{
DateTime firstDayOfYear = DateTime.Now.AddYears(-3);
var list = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= firstDayOfYear)
.GroupBy(r => new { r.ReportTime.Year })
.Select(r => new FireInfoStateForChart
// 计算统计年份范围
int currentYear = DateTime.Now.Year;
int startYear = currentYear - 5 + 1;
// 生成年份范围
var years = Enumerable.Range(startYear, 5)
.Select(y => y)
.ToList();
// 查询数据
var queryData = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime.Year >= startYear && r.ReportTime.Year <= currentYear)
.GroupBy(r => r.ReportTime.Year)
.Select(r => new
{
DateTime = r.ReportTime.Year.ToString() + "年",
Year = r.ReportTime.Year,
TreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State >= 3, 1, 0)),
UntreatedCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.State < 3, 1, 0))
}).ToListAsync();
return new Response<List<FireInfoStateForChart>> { Result = list };
})
.ToListAsync();
// 生成结果,确保所有年份都有数据
var result = new List<FireInfoStateForChart>();
foreach (var year in years)
{
var yearData = queryData.FirstOrDefault(d => d.Year == year);
result.Add(new FireInfoStateForChart
{
DateTime = year.ToString() + "年",
TreatedCount = yearData?.TreatedCount ?? 0,
UntreatedCount = yearData?.UntreatedCount ?? 0
});
}
return new Response<List<FireInfoStateForChart>> { Result = result };
}
}
}
@ -714,49 +839,152 @@ namespace OpenAuth.App.ServiceApp.FireManagement
{
if (type == 1)
{
DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
var list = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= firstDayOfMonth)
.GroupBy(r => new { r.ReportTime.Day })
.Select(r => new FireInfoDegreeForChart
// 计算14天的日期范围
DateTime startDate = DateTime.Now.AddDays(-14).Date;
DateTime endDate = DateTime.Now.Date;
// 生成14天的日期列表
var dateRange = Enumerable.Range(0, (endDate - startDate).Days + 1)
.Select(offset => startDate.AddDays(offset))
.Select(date => new
{
DateTime = r.ReportTime.Day.ToString() + "日",
Date = date,
DayString =date.Month.ToString()+"." +date.Day.ToString()
})
.ToList();
// 查询实际数据
var dataQuery = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= startDate && r.ReportTime <= endDate)
.GroupBy(r => new { r.ReportTime.Date })
.Select(r => new FireInfoDegree
{
Date = r.ReportTime.Date,
ExtraLargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 1, 1, 0)),
LargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 2, 1, 0))
}).ToListAsync();
// 左连接,确保所有日期都显示
var list = (from date in dateRange
join data in dataQuery on date.Date equals data.Date into gj
from subData in gj.DefaultIfEmpty()
select new FireInfoDegreeForChart
{
DateTime = date.DayString,
ExtraLargeCount = subData?.ExtraLargeCount ?? 0,
LargeCount = subData?.LargeCount ?? 0
})
.OrderBy(x => x.DateTime) // 按日期排序
.ToList();
return new Response<List<FireInfoDegreeForChart>> { Result = list };
}
else if (type == 2)
{
DateTime firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);
var list = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= firstDayOfYear)
.GroupBy(r => new { r.ReportTime.Month })
.Select(r => new FireInfoDegreeForChart
// 计算日期范围
var now = DateTime.Now;
var startDate = new DateTime(now.Year, now.Month, 1).AddMonths(-11);
var endDate = new DateTime(now.Year, now.Month, 1).AddMonths(1).AddDays(-1);
// 生成月份列表
var months = Enumerable.Range(0, 12)
.Select(i => new
{
DateTime = r.ReportTime.Month.ToString() + "月",
Year = startDate.AddMonths(i).Year,
Month = startDate.AddMonths(i).Month,
Display = FormatMonthDisplay(startDate.AddMonths(i))
})
.ToList();
// 查询数据
var data = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= startDate && r.ReportTime <= endDate)
.GroupBy(r => new { r.ReportTime.Year, r.ReportTime.Month })
.Select(r => new
{
Year = r.ReportTime.Year,
Month = r.ReportTime.Month,
ExtraLargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 1, 1, 0)),
LargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 2, 1, 0))
}).ToListAsync();
return new Response<List<FireInfoDegreeForChart>> { Result = list };
})
.ToListAsync();
// 使用LINQ左连接
var result = (from month in months
join d in data
on new { month.Year, month.Month } equals new { d.Year, d.Month } into gj
from subData in gj.DefaultIfEmpty()
orderby month.Year, month.Month
select new FireInfoDegreeForChart
{
DateTime = month.Display,
ExtraLargeCount = subData?.ExtraLargeCount ?? 0,
LargeCount = subData?.LargeCount ?? 0
}).ToList();
return new Response<List<FireInfoDegreeForChart>> { Result = result };
}
else
{
DateTime firstDayOfYear = DateTime.Now.AddYears(-3);
var list = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime >= firstDayOfYear)
.GroupBy(r => new { r.ReportTime.Year })
.Select(r => new FireInfoDegreeForChart
// 计算统计年份范围
int currentYear = DateTime.Now.Year;
int startYear = currentYear - 5 + 1;
// 生成年份范围
var years = Enumerable.Range(startYear, 5)
.Select(y => y)
.ToList();
// 查询数据
var queryData = await db.FmFireclueInfo.AsQueryable()
.Where(r => r.ReportTime.Year >= startYear && r.ReportTime.Year <= currentYear)
.GroupBy(r => r.ReportTime.Year)
.Select(r => new
{
DateTime = r.ReportTime.Year.ToString() + "年",
Year = r.ReportTime.Year,
ExtraLargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 1, 1, 0)),
LargeCount = SqlFunc.AggregateSum(SqlFunc.IIF(r.DegreeType == 2, 1, 0))
}).ToListAsync();
return new Response<List<FireInfoDegreeForChart>> { Result = list };
})
.ToListAsync();
// 生成结果,确保所有年份都有数据
var result = new List<FireInfoDegreeForChart>();
foreach (var year in years)
{
var yearData = queryData.FirstOrDefault(d => d.Year == year);
result.Add(new FireInfoDegreeForChart
{
DateTime = year.ToString() + "年",
ExtraLargeCount = yearData?.ExtraLargeCount ?? 0,
LargeCount = yearData?.LargeCount ?? 0
});
}
return new Response<List<FireInfoDegreeForChart>> { Result = result };
}
}
}
// 格式化月份显示
private string FormatMonthDisplay(DateTime date)
{
var currentYear = DateTime.Now.Year;
//if (date.Year == currentYear)
//{
// return $"{date.Month}月";
//}
//else if (date.Year == currentYear - 1)
//{
// return $"去年{date.Month}月";
//}
//else
//{
// return $"{date.Year % 100}年{date.Month}月";
//}
return $"{date.Year % 100}.{date.Month}";
}
//查询火情和任务列表
public async Task<Response<List<FmFireclueinfoLog>>> GetFireClueLog(long id)
{

View File

@ -12,4 +12,11 @@ namespace OpenAuth.App.ServiceApp.FireManagement.Response
public int ExtraLargeCount { get; set; }
public int LargeCount { get; set; }
}
public class FireInfoDegree
{
public DateTime Date { get; set; }
public int ExtraLargeCount { get; set; }
public int LargeCount { get; set; }
}
}

View File

@ -12,4 +12,11 @@ namespace OpenAuth.App.ServiceApp.FireManagement.Response
public int TreatedCount { get; set; }
public int UntreatedCount { get; set; }
}
public class FireInfoState
{
public DateTime Date { get; set; }
public int TreatedCount { get; set; }
public int UntreatedCount { get; set; }
}
}