From 216f51038909f6c12ffbf3555a44f0cd474f6afd Mon Sep 17 00:00:00 2001 From: liguoyang Date: Fri, 11 Oct 2024 18:25:03 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BC=98=E5=8C=96summary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AppointmentsController.cs | 20 ++++- .../Response/AppointmentPageResponse.cs | 9 ++- .../Response/AppointmentSummaryResponse.cs | 12 +++ .../Services/IAppointmentService.cs | 5 +- .../Services/Implements/AppointmentService.cs | 74 +++++++++++++++++-- 5 files changed, 109 insertions(+), 11 deletions(-) create mode 100644 Src/Dlhis.Basic/Appointment/Response/AppointmentSummaryResponse.cs diff --git a/Src/Dlhis.Basic/Appointment/Controllers/AppointmentsController.cs b/Src/Dlhis.Basic/Appointment/Controllers/AppointmentsController.cs index 877a52f5..13305706 100644 --- a/Src/Dlhis.Basic/Appointment/Controllers/AppointmentsController.cs +++ b/Src/Dlhis.Basic/Appointment/Controllers/AppointmentsController.cs @@ -64,12 +64,13 @@ public class AppointmentsController : ControllerBase /// 根据身份证获取当天预约信息 /// /// + /// /// [AllowAnonymous] [HttpGet("today")] - public async Task GetTodayByIdNoAsync(string idNo) + public async Task GetTodayByIdNoAsync(string idNo, string factory) { - return await _appointmentService.GetTodayByIdNoAsync(idNo); + return await _appointmentService.GetTodayByIdNoAsync(idNo, factory); } /// @@ -83,4 +84,19 @@ public class AppointmentsController : ControllerBase { return await _appointmentService.GetRecordPageByIdNoAsync(request); } + + /// + /// 数据明细 + /// + /// + /// + /// + /// + [AllowAnonymous] + [HttpGet("summary")] + public async Task GetSummaryAsync(string factory, DateTime start, DateTime end) + { + end = start.Date.AddDays(1).AddMilliseconds(-1); + return await _appointmentService.GetSummaryAsync(factory, start, end); + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Appointment/Response/AppointmentPageResponse.cs b/Src/Dlhis.Basic/Appointment/Response/AppointmentPageResponse.cs index 90315d30..a40b7d43 100644 --- a/Src/Dlhis.Basic/Appointment/Response/AppointmentPageResponse.cs +++ b/Src/Dlhis.Basic/Appointment/Response/AppointmentPageResponse.cs @@ -14,6 +14,11 @@ public class AppointmentPageResponse /// public string Code { get; set; } + /// + /// 对接人姓名 + /// + public string Name { get; set; } + /// /// 来访人来源/公司 /// @@ -23,7 +28,7 @@ public class AppointmentPageResponse /// 申请时间 /// public DateTime Date { get; set; } - + /// /// 备注 /// @@ -38,4 +43,4 @@ public class AppointmentPageResponse /// 申请事由 /// public string Reason { get; set; } -} +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Appointment/Response/AppointmentSummaryResponse.cs b/Src/Dlhis.Basic/Appointment/Response/AppointmentSummaryResponse.cs new file mode 100644 index 00000000..20f53870 --- /dev/null +++ b/Src/Dlhis.Basic/Appointment/Response/AppointmentSummaryResponse.cs @@ -0,0 +1,12 @@ +namespace Dlhis.Basic.Appointment.Response +{ + public class AppointmentSummaryResponse + { + public int Total { get; set; } + public int In { get; set; } + public int NotIn { get; set; } + public int Leave { get; set; } + + public int NotLeave { get; set; } + } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Appointment/Services/IAppointmentService.cs b/Src/Dlhis.Basic/Appointment/Services/IAppointmentService.cs index 1480c464..fad36689 100644 --- a/Src/Dlhis.Basic/Appointment/Services/IAppointmentService.cs +++ b/Src/Dlhis.Basic/Appointment/Services/IAppointmentService.cs @@ -32,9 +32,12 @@ public interface IAppointmentService : IScopeDependency /// 根据身份证获取最新访客预约 /// /// + /// /// - Task GetTodayByIdNoAsync(string idNo); + Task GetTodayByIdNoAsync(string idNo, string factory); Task> GetRecordPageByIdNoAsync([FromQuery] AppointmentIdNoPageRequest request); + + Task GetSummaryAsync(string factory, DateTime start, DateTime end); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs index 734dfc13..288e9ead 100644 --- a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs +++ b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs @@ -98,10 +98,8 @@ public class AppointmentService : IAppointmentService } } - //********************************************************** 用户操作 ******************************************************************* - - public async Task GetTodayByIdNoAsync(string idNo) + public async Task GetTodayByIdNoAsync(string idNo, string factory) { var protector = _dataProtectionProvider.CreateProtector("gainfo:external:idno"); try @@ -117,13 +115,29 @@ public class AppointmentService : IAppointmentService return await _dbContext.Queryable() .LeftJoin((x, ga) => ga.IdNo == idNo) .Where((x, ga) => ga.IdNo == idNo) - .Where(x => (x.IsEnterDoorArea && SqlFunc.DateIsSame(x.DoorStart, now)) || (x.IsEnterWorkplace && SqlFunc.DateIsSame(x.WorkplaceStart, now))) + .Where(x => (x.IsEnterDoorArea && SqlFunc.DateIsSame(x.DoorStart, now) && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Wait) || + (x.IsEnterWorkplace && SqlFunc.DateIsSame(x.WorkplaceStart, now) && x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Wait)) + .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Where(p => p.No == x.No).Any()) .Select(x => new AppointmentDetailResponse { No = x.No, - Mst = SqlFunc.Subqueryable().Where(p => p.No == x.No).First() + Mst = SqlFunc.Subqueryable() + .LeftJoin((p, ga) => p.Code == ga.Code) + .Where((p, ga) => p.No == x.No) + .First((p, ga) => new AppointmentPageResponse + { + No = p.No, + Title = p.Title, + Code = p.Code, + Name = ga.Name, + Source = p.Source, + Date = p.Date, + Remark = p.Remark, + Factory = p.Factory, + Reason = p.Reason + }, false) }, true) - .SingleAsync(); + .FirstAsync(); } public async Task> GetRecordPageByIdNoAsync([FromQuery] AppointmentIdNoPageRequest request) @@ -147,4 +161,52 @@ public class AppointmentService : IAppointmentService return page; } + + /// + public async Task GetSummaryAsync(string factory, DateTime start, DateTime end) + { + var total = await _dbContext.Queryable() + .Where(x => (x.IsEnterDoorArea && ((x.DoorStart >= start && x.DoorStart <= end) || x.DoorEnd >= start && x.DoorEnd <= end)) || + (x.IsEnterWorkplace && ((x.WorkplaceStart >= start && x.WorkplaceStart <= end) || (x.WorkplaceEnd >= start && x.WorkplaceEnd <= end))) + ) + .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) + .CountAsync(); + + var @in = await _dbContext.Queryable() + .Where(x => (x.IsEnterDoorArea && ((x.DoorStart >= start && x.DoorStart <= end) || x.DoorEnd >= start && x.DoorEnd <= end)) || + (x.IsEnterWorkplace && ((x.WorkplaceStart >= start && x.WorkplaceStart <= end) || (x.WorkplaceEnd >= start && x.WorkplaceEnd <= end)))) + .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) + .CountAsync(); + + var notIn = await _dbContext.Queryable() + .Where(x => (x.IsEnterDoorArea && ((x.DoorStart >= start && x.DoorStart <= end) || x.DoorEnd >= start && x.DoorEnd <= end)) || + (x.IsEnterWorkplace && ((x.WorkplaceStart >= start && x.WorkplaceStart <= end) || (x.WorkplaceEnd >= start && x.WorkplaceEnd <= end)))) + .Where(x => (x.IsEnterDoorArea && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Leave) || (x.IsEnterWorkplace && x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Leave)) + .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) + .CountAsync(); + + var leave = await _dbContext.Queryable() + .Where(x => (x.IsEnterDoorArea && x.DoorEnd >= start && x.DoorEnd <= end) || + (x.IsEnterWorkplace && x.WorkplaceEnd >= start && x.WorkplaceEnd <= end) + ) + .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) + .CountAsync(); + + var notLeave = await _dbContext.Queryable() + .Where(x => (x.IsEnterDoorArea && x.DoorEnd >= start && x.DoorEnd <= end) || + (x.IsEnterWorkplace && x.WorkplaceEnd >= start && x.WorkplaceEnd <= end) + ) + .Where(x => (x.IsEnterDoorArea && x.DoorStatus != VisitorAppointmentDetailStatusEnumType.Leave) || (x.IsEnterWorkplace && x.WorkplaceStatus != VisitorAppointmentDetailStatusEnumType.Leave)) + .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) + .CountAsync(); + + return new AppointmentSummaryResponse + { + Total = total, + In = @in, + NotIn = notIn, + Leave = leave, + NotLeave = notLeave + }; + } } \ No newline at end of file