From 5986a9540949009e17f8dcae2d280f7babd2157e Mon Sep 17 00:00:00 2001 From: liguoyang Date: Mon, 9 Sep 2024 18:00:31 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E8=8E=B7=E5=8F=96=E8=80=83=E5=8B=A4?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Src/Dlhis.External/Dlhis.External.csproj | 1 - .../OpenApi/Controllers/GainfosController.cs | 17 ++++++- .../Request/DeviceUploadLogMyRecordRequest.cs | 27 +++++++++++ .../Response/DeviceUploadLogResponse.cs | 48 +++++++++++++++++++ .../OpenApi/Services/IGainfoService.cs | 7 ++- .../Services/Implements/GainfoService.cs | 27 +++++++++++ 6 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 Src/Dlhis.External/OpenApi/Request/DeviceUploadLogMyRecordRequest.cs create mode 100644 Src/Dlhis.External/OpenApi/Response/DeviceUploadLogResponse.cs 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