feat 二级路由更改及设备人员数据

This commit is contained in:
cheche
2024-02-21 11:09:38 +08:00
parent 213c53839c
commit 6e492595f8
12 changed files with 314 additions and 5 deletions

View File

@@ -162,4 +162,34 @@ public class DevicesController : ControllerBase
{
return await _deviceService.GetAttendanceDevicesAsync();
}
/// <summary>
/// 获取考勤设备总数
/// </summary>
/// <returns></returns>
[HttpGet("attendancestotal")]
public async Task<Pagination<DevicePageResponse>> GetAttendanceTotalAsync([FromQuery]AttendanceTotalRequest request)
{
return await _deviceService.GetAttendanceTotalAsync(request);
}
/// <summary>
/// 获取考勤在线/离线设备数
/// </summary>
/// <returns></returns>
[HttpGet("attendancesoffline")]
public async Task<Pagination<DevicePageResponse>> GetAttendanceOfflineAsync([FromQuery] DeviceOnlineAndofflineRequest request)
{
return await _deviceService.GetAttendanceOfflineAsync(request);
}
/// <summary>
/// 获取近期30天新增设备数
/// </summary>
/// <returns></returns>
[HttpGet("recentnumbers")]
public async Task<Dictionary<string, int>> GetRecentNumbersAsync()
{
return await _deviceService.GetRecentNumbersAsync();
}
}

View File

@@ -0,0 +1,8 @@
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Basic.Device.Request
{
public class AttendanceTotalRequest : PageDto
{
}
}

View File

@@ -0,0 +1,9 @@
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Basic.Device.Request
{
public class DeviceOnlineAndofflineRequest :PageDto
{
public bool IsOnAndOff { get; set; }
}
}

View File

@@ -1,6 +1,7 @@
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Response;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Basic.Device.Services;
@@ -15,4 +16,10 @@ public interface IDeviceService : IScopeDependency
Task<DeviceResponse> GetDeviceByNoAsync(DeviceByNoRequest request);
Task<List<DeviceResponse>> GetAttendanceDevicesAsync();
Task<Pagination<DevicePageResponse>> GetAttendanceTotalAsync(AttendanceTotalRequest request);
Task<Pagination<DevicePageResponse>> GetAttendanceOfflineAsync(DeviceOnlineAndofflineRequest request);
Task<Dictionary<string, int>> GetRecentNumbersAsync();
}

View File

@@ -10,6 +10,7 @@ using Kurisu.SqlSugar.Attributes;
using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@@ -194,5 +195,62 @@ public class DeviceService : IDeviceService
return devices.Where(x => x.Funcs.Contains(DeviceFuncEnumType.Attendance)).ToList();
}
public async Task<Pagination<DevicePageResponse>> GetAttendanceTotalAsync(AttendanceTotalRequest request)
{
var page = await _dbContext.Queryable<DeviceEntity>()
.LeftJoin<DeviceTemplateEntity>((d, dt) => d.TemplateCode == dt.Code)
.Where(d => d.Type == DeviceTypeEnumType.Attendance)
.Select((d, dt) => new DevicePageResponse
{
FuncsStr = d.Funcs.ToString(),
Brand = dt.Brand,
Type = d.Type,
}, true)
.ToPageListAsync(request);
return page;
}
public async Task<Pagination<DevicePageResponse>> GetAttendanceOfflineAsync(DeviceOnlineAndofflineRequest request)
{
var page = await _dbContext.Queryable<DeviceEntity>()
.LeftJoin<DeviceTemplateEntity>((d, dt) => d.TemplateCode == dt.Code)
.Where(d => d.Type == DeviceTypeEnumType.Attendance && d.Enable == request.IsOnAndOff)
.Select((d, dt) => new DevicePageResponse
{
FuncsStr = d.Funcs.ToString(),
Brand = dt.Brand,
Type = d.Type,
}, true)
.ToPageListAsync(request);
return page;
}
public async Task<Dictionary<string, int>> GetRecentNumbersAsync()
{
//获取近30天并转化为"yyyy-MM-dd"集合
DateTime currentDate = DateTime.Now;
List<string> times = new List<string>();
for (int i = 0; i < 30; i++)
{
DateTime date = currentDate.AddDays(-i);
string dateString = date.ToString("yyyy-MM-dd");
times.Add(dateString);
}
var devices = await _dbContext.Queryable<DeviceEntity>().ToListAsync();
var dic = new Dictionary<string, int>();
times.ForEach(time =>
{
var count = devices.Where(x => x.CreateTime.ToString("yyyy-MM-dd") == time).Count();
dic[time] = count;
});
return dic;
}
}