diff --git a/Src/Dlhis.Basic/WorkGrids/Controllers/WorkGridsController.cs b/Src/Dlhis.Basic/WorkGrids/Controllers/WorkGridsController.cs index fc9d7bcf..d3aaba24 100644 --- a/Src/Dlhis.Basic/WorkGrids/Controllers/WorkGridsController.cs +++ b/Src/Dlhis.Basic/WorkGrids/Controllers/WorkGridsController.cs @@ -141,7 +141,7 @@ public class WorkGridsController : ControllerBase [Transactional] public async Task SaveScheduleAsync(WorkGridScheduleSaveRequest request) { - await _workGridScheduleService.SaveAsync(request); + await _workGridScheduleService.SaveAsync(request); } /// @@ -193,6 +193,18 @@ public class WorkGridsController : ControllerBase return await _workGridScheduleService.GetAttendancePageAsync(request); } + /// + /// 获取网格人员考勤记录分页(所有) + /// + /// + /// + [HttpGet("user/attendance/page-all")] + [IgnoreTenant] + public async Task> GetAllAttendancePageAsync([FromQuery] WorkGridScheduleAttendancePageRequest request) + { + return await _workGridScheduleService.GetAllAttendancePageAsync(request); + } + /// /// 网格人员考勤记录补传 /// diff --git a/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleAttendancePageRequest.cs b/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleAttendancePageRequest.cs index 66571469..f4477125 100644 --- a/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleAttendancePageRequest.cs +++ b/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleAttendancePageRequest.cs @@ -5,11 +5,23 @@ namespace Dlhis.Basic.WorkGrids.Request; public class WorkGridScheduleAttendancePageRequest : PageDto { + /// + /// 工作网格,为空查询所有 + /// public Guid? WorkGridCode { get; set; } - + + /// + /// 工号 + /// public string UserCode { get; set; } - + + /// + /// 查询时间端 + /// public DateTimePeriod DateTimePeriod { get; set; } + /// + /// 是否异常记录 + /// public bool IsError { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/WorkGrids/Services/IWorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/IWorkGridScheduleService.cs index e1f89a95..12a740bd 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/IWorkGridScheduleService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/IWorkGridScheduleService.cs @@ -20,6 +20,8 @@ public interface IWorkGridScheduleService : IScopeDependency Task> GetAttendancePageAsync(WorkGridScheduleAttendancePageRequest request); + Task> GetAllAttendancePageAsync(WorkGridScheduleAttendancePageRequest request); + Task ManuallyUploadAsync(List logIds); Task> MaximumConsecutiveUserCodesAsync(List userCodes, int days, DateOnly date); diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs index 1e108f61..d7b7abea 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs @@ -243,6 +243,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService public async Task> GetAttendancePageAsync(WorkGridScheduleAttendancePageRequest request) { var jinkoCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode); + var workGrid = await _dbContext.Queryable() .WhereIF(request.WorkGridCode.HasValue, x => x.Code == request.WorkGridCode) .WhereIF(request.WorkGridCode.HasValue == false, x => x.LeaderUserCode == jinkoCode) @@ -268,7 +269,10 @@ public class WorkGridScheduleService : IWorkGridScheduleService .WhereIF(request.DateTimePeriod.HasValue(), log => log.RaiseDateTime >= request.DateTimePeriod.Start && log.RaiseDateTime <= request.DateTimePeriod.End) .WhereIF(request.UserCode.IsPresent(), log => log.UserUniqueNo == request.UserCode) - .WhereIF(request.UserCode.IsEmpty(), log => SqlFunc.Subqueryable().Where(p => p.WorkGridCode == workGrid.Code && p.UserCode == log.UserUniqueNo && p.IsDeleted == false).Any()) + .WhereIF(request.UserCode.IsEmpty(), log => SqlFunc.Subqueryable() + .Where(p => p.WorkGridCode == workGrid.Code && p.UserCode == log.UserUniqueNo && p.IsDeleted == false) + .Any() + ) .Where(log => log.WorkGridInfo.StartsWith(filterString)) .Where((log, d) => d.Type == DeviceTypeEnumType.Attendance || (d.Type == DeviceTypeEnumType.Door && d.AsAttendance)) .OrderBy(log => log.RaiseDateTime) @@ -291,6 +295,45 @@ public class WorkGridScheduleService : IWorkGridScheduleService .ToPageListAsync(request); } + public async Task> GetAllAttendancePageAsync(WorkGridScheduleAttendancePageRequest request) + { + var t = request.IsError.ToString().ToLower(); + var filterString = $"{{\"IsError\":{t}"; + + return await _dbContext.Queryable() + .LeftJoin((log, d) => log.DeviceUniqueNo == d.UniqueNo) + .LeftJoin((log, d, ga) => log.UserUniqueNo == ga.Code) + .WhereIF(request.DateTimePeriod.HasValue(), log => log.RaiseDateTime >= request.DateTimePeriod.Start + && log.RaiseDateTime <= request.DateTimePeriod.End) + .Where(log => SqlFunc.Subqueryable() + .Where(p => p.UserCode == log.UserUniqueNo && p.IsDeleted == false) + .WhereIF(request.WorkGridCode.HasValue, p => p.WorkGridCode == request.WorkGridCode) + .WhereIF(request.UserCode.IsPresent(), p => p.UserCode == request.UserCode) + .Any() + ) + .Where(log => log.WorkGridInfo.StartsWith(filterString)) + .Where((log, d) => d.Type == DeviceTypeEnumType.Attendance || (d.Type == DeviceTypeEnumType.Door && d.AsAttendance)) + .OrderBy(log => log.RaiseDateTime) + .Select((log, d, ga) => new WorkGridScheduleAttendancePageResponse + { + Id = log.Id, + OriginUserUniqueNo = log.UserUniqueNo, + DeviceUniqueNo = log.DeviceUniqueNo, + RaiseDateTime = log.RaiseDateTime, + CreateTime = log.CreateTime, + SerialNo = log.SerialNo, + DeployPlace = d.DeployPlace, + UserCode = log.UserUniqueNo, + UserName = ga.Name, + Sync = log.Sync, + NeedUpload = log.NeedUpload, + Status = log.Status, + WorkGridInfo = log.WorkGridInfo, + }) + .ToPageListAsync(request); + } + + /// public async Task ManuallyUploadAsync(List logIds) {