feat 网格所有记录

This commit is contained in:
2025-04-03 11:09:32 +08:00
parent 9de266be19
commit ef93e5bd66
4 changed files with 73 additions and 4 deletions

View File

@@ -141,7 +141,7 @@ public class WorkGridsController : ControllerBase
[Transactional]
public async Task SaveScheduleAsync(WorkGridScheduleSaveRequest request)
{
await _workGridScheduleService.SaveAsync(request);
await _workGridScheduleService.SaveAsync(request);
}
/// <summary>
@@ -193,6 +193,18 @@ public class WorkGridsController : ControllerBase
return await _workGridScheduleService.GetAttendancePageAsync(request);
}
/// <summary>
/// 获取网格人员考勤记录分页(所有)
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("user/attendance/page-all")]
[IgnoreTenant]
public async Task<Pagination<WorkGridScheduleAttendancePageResponse>> GetAllAttendancePageAsync([FromQuery] WorkGridScheduleAttendancePageRequest request)
{
return await _workGridScheduleService.GetAllAttendancePageAsync(request);
}
/// <summary>
/// 网格人员考勤记录补传
/// </summary>

View File

@@ -5,11 +5,23 @@ namespace Dlhis.Basic.WorkGrids.Request;
public class WorkGridScheduleAttendancePageRequest : PageDto
{
/// <summary>
/// 工作网格,为空查询所有
/// </summary>
public Guid? WorkGridCode { get; set; }
/// <summary>
/// 工号
/// </summary>
public string UserCode { get; set; }
/// <summary>
/// 查询时间端
/// </summary>
public DateTimePeriod DateTimePeriod { get; set; }
/// <summary>
/// 是否异常记录
/// </summary>
public bool IsError { get; set; }
}

View File

@@ -20,6 +20,8 @@ public interface IWorkGridScheduleService : IScopeDependency
Task<Pagination<WorkGridScheduleAttendancePageResponse>> GetAttendancePageAsync(WorkGridScheduleAttendancePageRequest request);
Task<Pagination<WorkGridScheduleAttendancePageResponse>> GetAllAttendancePageAsync(WorkGridScheduleAttendancePageRequest request);
Task ManuallyUploadAsync(List<long> logIds);
Task<List<WorkGridScheduleMaximumConsecutiveDto>> MaximumConsecutiveUserCodesAsync(List<string> userCodes, int days, DateOnly date);

View File

@@ -243,6 +243,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService
public async Task<Pagination<WorkGridScheduleAttendancePageResponse>> GetAttendancePageAsync(WorkGridScheduleAttendancePageRequest request)
{
var jinkoCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode);
var workGrid = await _dbContext.Queryable<WorkGridEntity>()
.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<WorkGridUserEntity>().Where(p => p.WorkGridCode == workGrid.Code && p.UserCode == log.UserUniqueNo && p.IsDeleted == false).Any())
.WhereIF(request.UserCode.IsEmpty(), log => SqlFunc.Subqueryable<WorkGridUserEntity>()
.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<Pagination<WorkGridScheduleAttendancePageResponse>> GetAllAttendancePageAsync(WorkGridScheduleAttendancePageRequest request)
{
var t = request.IsError.ToString().ToLower();
var filterString = $"{{\"IsError\":{t}";
return await _dbContext.Queryable<DeviceUploadLogEntity>()
.LeftJoin<DeviceEntity>((log, d) => log.DeviceUniqueNo == d.UniqueNo)
.LeftJoin<GainfoEntity>((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<WorkGridUserEntity>()
.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);
}
/// <inheritdoc />
public async Task ManuallyUploadAsync(List<long> logIds)
{