diff --git a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs index bf76d40e..c261fdd6 100644 --- a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs +++ b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs @@ -182,30 +182,30 @@ public class AppointmentService : IAppointmentService public async Task FocusLeaveAsync(long id, string reason) { - // 根据访客预约详情ID获取记录,若不存在则抛出异常 + // 根据访客预约详情ID获取记录,若不存在则抛出异常 var detail = await _dbContext.Queryable().Where(x => x.Id == id).SingleAsync(); detail.ThrowIfNull("数据不存在"); - + // 如果已进入门区且门区状态为“已到达”,则将门区状态更新为“强制离场” if (detail.IsEnterDoorArea && detail.DoorStatus == VisitorAppointmentDetailStatusEnumType.Arrived) detail.DoorStatus = VisitorAppointmentDetailStatusEnumType.FocusLeave; - + // 如果已进入门区且门区状态为“待到达”,则将门区状态更新为“作废” if (detail.IsEnterDoorArea && detail.DoorStatus == VisitorAppointmentDetailStatusEnumType.Wait) detail.DoorStatus = VisitorAppointmentDetailStatusEnumType.Obsolete; - + // 如果已进入工作区且工作区状态为“已到达”,则将工作区状态更新为“强制离场” if (detail.IsEnterWorkplace && detail.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Arrived) detail.WorkplaceStatus = VisitorAppointmentDetailStatusEnumType.FocusLeave; - + // 如果已进入工作区且工作区状态为“待到达”,则将工作区状态更新为“作废” if (detail.IsEnterWorkplace && detail.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Wait) detail.WorkplaceStatus = VisitorAppointmentDetailStatusEnumType.Obsolete; - + // 记录强制离场时间和原因 detail.FocusLeaveDateTime = DateTime.Now; detail.Remark += "强制离场:" + reason; - + // 生成设备任务并更新数据库 await GenerateDeviceTasksAsync(detail, true, DeviceTaskEnumType.Delete, $"强制离场:{reason}"); await _dbContext.UpdateAsync(detail); @@ -276,30 +276,32 @@ public class AppointmentService : IAppointmentService public async Task GetSummaryAsync(string factory, DateTime start, DateTime end) { + start = start.Date; + var total = await _dbContext.Queryable() - .Where(x => x.IsEnterDoorArea && SqlFunc.DateIsSame(x.DoorStart, start)) + .Where(x => x.IsEnterDoorArea && x.DoorStart >= start && x.DoorStart <= end) .Where(x => SqlFunc.Subqueryable().Where(p => p.No == x.No).Where(p => p.Factory == factory).Any()) .CountAsync(); var @in = await _dbContext.Queryable() - .Where(x => x.IsEnterDoorArea && SqlFunc.DateIsSame(x.ArrivedTime, start) && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Arrived) + .Where(x => x.IsEnterDoorArea && x.ArrivedTime >= start && x.ArrivedTime <= end && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Arrived) .Where(x => SqlFunc.Subqueryable().Where(p => p.No == x.No).Where(p => p.Factory == factory).Any()) .CountAsync(); var notIn = await _dbContext.Queryable() - .Where(x => x.IsEnterDoorArea && SqlFunc.DateIsSame(x.DoorStart, start)) + .Where(x => x.IsEnterDoorArea && x.DoorStart >= start && x.DoorStart <= end) .Where(x => x.IsEnterDoorArea && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Wait) .Where(x => SqlFunc.Subqueryable().Where(p => p.No == x.No).Where(p => p.Factory == factory).Any()) .CountAsync(); var leave = await _dbContext.Queryable() - .Where(x => x.IsEnterDoorArea && SqlFunc.DateIsSame(x.DoorEnd, start)) + .Where(x => x.IsEnterDoorArea && x.DoorEnd >= start && x.DoorEnd <= end) .Where(x => x.IsEnterDoorArea && (x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Leave || x.DoorStatus == VisitorAppointmentDetailStatusEnumType.FocusLeave)) .Where(x => SqlFunc.Subqueryable().Where(p => p.No == x.No).Where(p => p.Factory == factory).Any()) .CountAsync(); var notLeave = await _dbContext.Queryable() - .Where(x => x.IsEnterDoorArea && SqlFunc.DateIsSame(x.DoorEnd, start) && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Arrived) + .Where(x => x.IsEnterDoorArea && x.DoorEnd >= start && x.DoorEnd <= end && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Arrived) .Where(x => SqlFunc.Subqueryable().Where(p => p.No == x.No).Where(p => p.Factory == factory).Any()) .CountAsync();