diff --git a/Src/Dlhis.External/Dlhis.External.csproj b/Src/Dlhis.External/Dlhis.External.csproj index 464fd921..97bdf51e 100644 --- a/Src/Dlhis.External/Dlhis.External.csproj +++ b/Src/Dlhis.External/Dlhis.External.csproj @@ -23,7 +23,6 @@ - diff --git a/Src/Dlhis.External/OpenApi/Controllers/GainfosController.cs b/Src/Dlhis.External/OpenApi/Controllers/GainfosController.cs index 36fe292e..c1cb4bf9 100644 --- a/Src/Dlhis.External/OpenApi/Controllers/GainfosController.cs +++ b/Src/Dlhis.External/OpenApi/Controllers/GainfosController.cs @@ -1,5 +1,7 @@ -using Dlhis.External.OpenApi.Response; +using Dlhis.External.OpenApi.Request; +using Dlhis.External.OpenApi.Response; using Dlhis.External.OpenApi.Services; +using Kurisu.AspNetCore.DataAccess.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -26,4 +28,15 @@ public class GainfosController : ControllerBase { return await _gainfoService.GetAllGainfosAsync(); } -} + + /// + /// 获取考勤数据 + /// + /// + /// + [HttpGet("attendance/pagination")] + public async Task> GetAttendanceRecordPageAsync([FromQuery] DeviceUploadLogMyRecordRequest request) + { + return await _gainfoService.GetAttendanceRecordPageAsync(request); + } +} \ No newline at end of file diff --git a/Src/Dlhis.External/OpenApi/Request/DeviceUploadLogMyRecordRequest.cs b/Src/Dlhis.External/OpenApi/Request/DeviceUploadLogMyRecordRequest.cs new file mode 100644 index 00000000..fba32ae4 --- /dev/null +++ b/Src/Dlhis.External/OpenApi/Request/DeviceUploadLogMyRecordRequest.cs @@ -0,0 +1,27 @@ +using System.ComponentModel.DataAnnotations; +using Kurisu.AspNetCore.CustomClass; +using Kurisu.AspNetCore.DataAccess.Dto; + +namespace Dlhis.External.OpenApi.Request; + +public class DeviceUploadLogMyRecordRequest : PageDto, IValidatableObject +{ + public DateTimePeriod DateTimePeriod { get; set; } + + [Required(ErrorMessage = "工号不能为空")] + public string UserCode { get; set; } + + /// + public IEnumerable Validate(ValidationContext validationContext) + { + DateTimePeriod ??= new DateTimePeriod(); + + if (DateTimePeriod.Start != null) + { + DateTimePeriod.End = DateTimePeriod.Start.Value.AddDays(1); + } + + + yield break; + } +} \ No newline at end of file diff --git a/Src/Dlhis.External/OpenApi/Response/DeviceUploadLogResponse.cs b/Src/Dlhis.External/OpenApi/Response/DeviceUploadLogResponse.cs new file mode 100644 index 00000000..a4bd318c --- /dev/null +++ b/Src/Dlhis.External/OpenApi/Response/DeviceUploadLogResponse.cs @@ -0,0 +1,48 @@ +namespace Dlhis.External.OpenApi.Response; + +public class DeviceUploadLogResponse +{ + public long Id { get; set; } + + /// + /// 设备号 + /// + public string DeviceUniqueNo { get; set; } + + /// + /// 设备部署点 + /// + public string DeployPlace { get; set; } + + /// + /// 用户学工号 + /// + public string UserCode { get; set; } + + /// + /// 用户名称 + /// + public string UserName { get; set; } + + /// + /// 上传时间 + /// + public DateTime RaiseDateTime { get; set; } + + + /// + /// 序列号 + /// + public string SerialNo { get; set; } + + + /// + /// 是否同步sap + /// + public bool Sync { get; set; } + + /// + /// 是否有效 + /// + public bool Status { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.External/OpenApi/Services/IGainfoService.cs b/Src/Dlhis.External/OpenApi/Services/IGainfoService.cs index 12dcbadd..5385b488 100644 --- a/Src/Dlhis.External/OpenApi/Services/IGainfoService.cs +++ b/Src/Dlhis.External/OpenApi/Services/IGainfoService.cs @@ -1,4 +1,6 @@ -using Dlhis.External.OpenApi.Response; +using Dlhis.External.OpenApi.Request; +using Dlhis.External.OpenApi.Response; +using Kurisu.AspNetCore.DataAccess.Dto; namespace Dlhis.External.OpenApi.Services; @@ -7,4 +9,7 @@ public interface IGainfoService : IScopeDependency Task> GetAllGainfosAsync(); Task> GetDepartmentsAsync(); + + + Task> GetAttendanceRecordPageAsync(DeviceUploadLogMyRecordRequest request); } diff --git a/Src/Dlhis.External/OpenApi/Services/Implements/GainfoService.cs b/Src/Dlhis.External/OpenApi/Services/Implements/GainfoService.cs index 1028ce32..98aa385f 100644 --- a/Src/Dlhis.External/OpenApi/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.External/OpenApi/Services/Implements/GainfoService.cs @@ -1,6 +1,12 @@ using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; +using Dlhis.Entity.Device.Entities; +using Dlhis.Entity.Device.Enums; +using Dlhis.External.OpenApi.Request; using Dlhis.External.OpenApi.Response; +using Kurisu.AspNetCore.CustomClass; +using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; namespace Dlhis.External.OpenApi.Services.Implements; @@ -57,4 +63,25 @@ public class GainfoService : IGainfoService PNo = x.PNo }).ToListAsync(); } + + public async Task> GetAttendanceRecordPageAsync(DeviceUploadLogMyRecordRequest request) + { + return await _dbContext.Queryable() + .LeftJoin((log, d) => log.DeviceUniqueNo == d.UniqueNo) + .Where(log => log.UserUniqueNo == request.UserCode) + .WhereIF(request.DateTimePeriod.HasValue(), log => log.RaiseDateTime >= request.DateTimePeriod.Start && log.RaiseDateTime <= request.DateTimePeriod.End) + .Where((log, d) => d.Type == DeviceTypeEnumType.Attendance || (d.Type == DeviceTypeEnumType.Door && d.AsAttendance)) + .OrderBy(log => log.RaiseDateTime) + .Select((log, d) => new DeviceUploadLogResponse + { + DeviceUniqueNo = log.DeviceUniqueNo, + Id = log.Id, + RaiseDateTime = log.RaiseDateTime, + SerialNo = log.SerialNo, + DeployPlace = d.DeployPlace, + Sync = log.Sync, + Status = log.Status + }) + .ToPageListAsync(request); + } } \ No newline at end of file