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