From 471df073860481ed8fe63fa86bdcddba84155b79 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Thu, 21 Nov 2024 15:48:04 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E9=97=A8=E5=B2=97=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AppointmentsController.cs | 16 +++++ .../Services/IAppointmentService.cs | 12 +++- .../Services/Implements/AppointmentService.cs | 61 +++++++++++++++---- .../Services/Implements/GainfoMealService.cs | 34 ++++++++--- .../Implements/DeviceUploadLogService.cs | 1 + .../Services/Implements/AssignmentService.cs | 14 +++-- 6 files changed, 110 insertions(+), 28 deletions(-) diff --git a/Src/Dlhis.Basic/Appointment/Controllers/AppointmentsController.cs b/Src/Dlhis.Basic/Appointment/Controllers/AppointmentsController.cs index 2723925d..a5780b10 100644 --- a/Src/Dlhis.Basic/Appointment/Controllers/AppointmentsController.cs +++ b/Src/Dlhis.Basic/Appointment/Controllers/AppointmentsController.cs @@ -2,6 +2,7 @@ using Dlhis.Basic.Appointment.Request; using Dlhis.Basic.Appointment.Response; using Dlhis.Basic.Appointment.Services; using Dlhis.Entity.Device.Enums; +using Dlhis.Entity.Visitor.Enums; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Microsoft.AspNetCore.Authorization; @@ -82,6 +83,21 @@ public class AppointmentsController : ControllerBase return await _appointmentService.GetTodayByIdNoAsync(idNo, factory); } + /// + /// 门禁预约 + /// + /// + /// + /// + /// + /// + [AllowAnonymous] + [HttpGet("door/list")] + public async Task> GetRecordListAsync(string factory, VisitorAppointmentDetailStatusEnumType status, DateTime start, DateTime end) + { + return await _appointmentService.GetRecordListAsync(factory, status, start, end); + } + /// /// 根据身份证获取预约信息分页 /// diff --git a/Src/Dlhis.Basic/Appointment/Services/IAppointmentService.cs b/Src/Dlhis.Basic/Appointment/Services/IAppointmentService.cs index fc7ecb08..bb3c49e8 100644 --- a/Src/Dlhis.Basic/Appointment/Services/IAppointmentService.cs +++ b/Src/Dlhis.Basic/Appointment/Services/IAppointmentService.cs @@ -1,6 +1,7 @@ using Dlhis.Basic.Appointment.Request; using Dlhis.Basic.Appointment.Response; using Dlhis.Entity.Device.Enums; +using Dlhis.Entity.Visitor.Enums; using Kurisu.AspNetCore.DataAccess.Dto; using Microsoft.AspNetCore.Mvc; @@ -37,10 +38,19 @@ public interface IAppointmentService : IScopeDependency /// Task GetTodayByIdNoAsync(string idNo, string factory); + /// + /// 获取记录列表 + /// + /// + /// + /// + /// + /// + Task> GetRecordListAsync(string factory, VisitorAppointmentDetailStatusEnumType status, DateTime start, DateTime end); Task> GetRecordPageByIdNoAsync([FromQuery] AppointmentIdNoPageRequest request); Task GetSummaryAsync(string factory, DateTime start, DateTime end); - + Task GenerateTaskAndUpdateFaceAsync(long detailId, string base64, DeviceTaskEnumType deviceTaskType); } \ 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 f6062de7..a3052191 100644 --- a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs +++ b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs @@ -157,7 +157,7 @@ public class AppointmentService : IAppointmentService var now = DateTime.Now; return await _dbContext.Queryable() - .LeftJoin((x, ga) => ga.IdNo == idNo) + .LeftJoin((x, ga) => ga.IdNo == x.IdNo) .Where((x, ga) => ga.IdNo == idNo) .Where(x => (x.IsEnterDoorArea && SqlFunc.DateIsSame(x.DoorStart, now) && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Wait)) .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Where(p => p.No == x.No).Any()) @@ -205,29 +205,64 @@ public class AppointmentService : IAppointmentService return page; } + + public async Task> GetRecordListAsync(string factory, VisitorAppointmentDetailStatusEnumType status, DateTime start, DateTime end) + { + return await _dbContext.Queryable() + .LeftJoin((x, ga) => ga.IdNo == x.IdNo) + .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) + .Where(x => x.IsEnterDoorArea && x.DoorStatus == status) + .Where(x => x.DoorStart >= start && x.DoorEnd <= end) + .Select(x => new AppointmentDetailResponse + { + No = x.No, + 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) + .ToListAsync(); + } + + /// 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 => 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 => 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.Arrived) + //|| (x.IsEnterWorkplace && x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Arrived) ) - .Where(x => (x.IsEnterDoorArea && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Arrived) || (x.IsEnterWorkplace && x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Arrived)) .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.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.Wait) + //|| (x.IsEnterWorkplace && x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Wait) ) - .Where(x => (x.IsEnterDoorArea && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Wait) || (x.IsEnterWorkplace && x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Wait)) .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) .CountAsync(); @@ -235,7 +270,9 @@ public class AppointmentService : IAppointmentService .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 => (x.IsEnterDoorArea && x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Leave) + //|| (x.IsEnterWorkplace && x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Leave) + ) .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) .CountAsync(); @@ -243,7 +280,9 @@ public class AppointmentService : IAppointmentService .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 => (x.IsEnterDoorArea && x.DoorStatus != VisitorAppointmentDetailStatusEnumType.Leave) + // || (x.IsEnterWorkplace && x.WorkplaceStatus != VisitorAppointmentDetailStatusEnumType.Leave) + ) .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == factory).Any()) .CountAsync(); diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoMealService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoMealService.cs index 4b0351b8..12aa8fd0 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoMealService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoMealService.cs @@ -28,22 +28,17 @@ public class GainfoMealService : IGainfoMealService public async Task> GetPageAsync(GainfoMealPageRequest request) { var factory = _currentUser.GetStringTenantId(); - var factories = await GetWalletFactoriesAsync(factory); - return await _dbContext.Queryable().AS(request.IsLeave ? "GainfoLeave" : "Gainfo") + var page = await _dbContext.Queryable().AS(request.IsLeave ? "GainfoLeave" : "Gainfo") .LeftJoin((x, dept) => dept.No == x.DepartmentNo) .LeftJoin((x, dept, ms) => ms.Code == x.Code) - .LeftJoin((x, dept, ms, b) => b.UserCode == x.Code) + .Where(x => x.Factory == factory) .WhereIF(request.Search.IsPresent(), x => x.Code == request.Search || x.Name == request.Search) .WhereIF(request.IsLeave && request.SearchDateTimePeriod.HasValue(), x => x.ResignationDate >= request.SearchDateTimePeriod.Start && x.ResignationDate <= request.SearchDateTimePeriod.End) - .Where((x, dept, ms) => factories.Contains(ms.Factory)) .WhereIF(request.SearchDateTimePeriod.HasValue(), (x, dept, ms) => ms.Date >= request.SearchDateTimePeriod.Start && ms.Date <= request.SearchDateTimePeriod.End) - .Where((x, dept, ms, b) => factories.Contains(b.TenantId)) - .Where((x, dept, ms, b) => b.Status == BalanceRecordStatusEnumType.Valid) - .Where((x, dept, ms, b) => b.Source != BalanceRecordSourceEnumType.EMealVoucher) - .GroupBy((x, dept, ms, b) => new { UserCode = x.Code, UserName = x.Name, UserNo = x.No, DepartmentName = dept.Name }) - .Select((x, dept, ms, b) => new GainfoMealResponse + .GroupBy((x, dept, ms) => new { UserCode = x.Code, UserName = x.Name, UserNo = x.No, DepartmentName = dept.Name }) + .Select((x, dept, ms) => new GainfoMealResponse { UserCode = x.Code, UserName = x.Name, @@ -51,9 +46,28 @@ public class GainfoMealService : IGainfoMealService DepartmentName = dept.Name, Status = request.IsLeave ? GainfoStatusEnumType.Leave : GainfoStatusEnumType.Working, CurrentMealSupplementAmount = SqlFunc.AggregateSum(ms.Amount), - CurrentBalance = SqlFunc.AggregateSum(b.Amount) + //CurrentBalance = SqlFunc.AggregateSum(b.Amount) }) .ToPageListAsync(request); + + var userCodes = page.Data.Select(x => x.UserCode).ToList(); + + var data = await _dbContext.Queryable().Where(x => x.Status == BalanceRecordStatusEnumType.Valid && x.Source != BalanceRecordSourceEnumType.EMealVoucher) + .Where(x => userCodes.Contains(x.UserCode)) + .GroupBy(x => x.UserCode) + .Select(x => new { x.UserCode, Balance = SqlFunc.AggregateSum(x.Amount) }).ToListAsync(); + + + foreach (var item in page.Data) + { + var d1 = data.FirstOrDefault(x => x.UserCode == item.UserCode); + if (d1 != null) + { + item.CurrentBalance = d1.Balance; + } + } + + return page; } diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs index ee020843..1cbaa703 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs @@ -134,6 +134,7 @@ public class DeviceUploadLogService : IDeviceUploadLogService .Select(x => SqlFunc.AggregateMax(x.RaiseDateTime)) .SingleAsync(); + //0001-01-01 00:00:00 return new DateTimePeriod { Start = start, diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs index 8726c644..d258885b 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs @@ -338,10 +338,14 @@ public class AssignmentService : IAssignmentService var deviceNos = data.Select(x => x.DeviceUniqueNo).Distinct().ToList(); var result = new Dictionary(deviceNos.Count); - var logInfos = await _dbContext.Queryable().GroupBy(x => x.DeviceUniqueNo).Select(x => new - { - x.DeviceUniqueNo, RaiseDateTime = SqlFunc.AggregateMax(x.RaiseDateTime) - }).ToListAsync(); + var logInfos = await _dbContext.Queryable() + .GroupBy(x => x.DeviceUniqueNo) + .Select(x => new + { + x.DeviceUniqueNo, + RaiseDateTime = SqlFunc.AggregateMax(x.RaiseDateTime) + }) + .ToListAsync(); foreach (var item in deviceNos) { @@ -353,8 +357,6 @@ public class AssignmentService : IAssignmentService } - - /// /// 处理老档案数据 ///