From 2c8f7a016f1d20724f0f66b2c02464ebcc9d6012 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Tue, 2 Jul 2024 16:57:40 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BC=98=E5=8C=96=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SummariesController.cs | 29 +---- .../Response/AttendanceSummaryResponse.cs | 9 -- ...danceDeviceSummary.cs => DeviceSummary.cs} | 2 +- .../Summary/Response/DoorDataResponse.cs | 24 ---- .../Summary/Response/DoorHomeDataResponse.cs | 11 -- ...etailSummary.cs => GainfoDetailSummary.cs} | 2 +- .../Summary/Response/GainfoTrendResponse.cs | 13 +- .../Summary/Response/HomeSummaryResponse.cs | 14 +++ .../Summary/Services/ISummaryService.cs | 7 +- .../Services/Implements/SummaryService.cs | 113 +----------------- 10 files changed, 35 insertions(+), 189 deletions(-) delete mode 100644 Src/Dlhis.Basic/Summary/Response/AttendanceSummaryResponse.cs rename Src/Dlhis.Basic/Summary/Response/{AttendanceDeviceSummary.cs => DeviceSummary.cs} (94%) delete mode 100644 Src/Dlhis.Basic/Summary/Response/DoorDataResponse.cs delete mode 100644 Src/Dlhis.Basic/Summary/Response/DoorHomeDataResponse.cs rename Src/Dlhis.Basic/Summary/Response/{AttendanceDetailSummary.cs => GainfoDetailSummary.cs} (92%) create mode 100644 Src/Dlhis.Basic/Summary/Response/HomeSummaryResponse.cs diff --git a/Src/Dlhis.Basic/Summary/Controllers/SummariesController.cs b/Src/Dlhis.Basic/Summary/Controllers/SummariesController.cs index bfb8f69f..e8662def 100644 --- a/Src/Dlhis.Basic/Summary/Controllers/SummariesController.cs +++ b/Src/Dlhis.Basic/Summary/Controllers/SummariesController.cs @@ -1,5 +1,6 @@ using Dlhis.Basic.Summary.Response; using Dlhis.Basic.Summary.Services; +using Dlhis.Entity.Device.Enums; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -18,32 +19,12 @@ public class SummariesController : ControllerBase } /// - /// 考勤首页 + /// 首页 /// /// - [HttpGet("attendance-summary")] - public async Task GetKaoQingSummary() + [HttpGet("home-summary")] + public async Task GetHomeSummaryAsync(DeviceTypeEnumType type) { - return await _summaryService.GetAttendanceSummaryAsync(); - } - - /// - /// 门禁首页设备数据 - /// - /// - [HttpGet("door-summary")] - public async Task GetDoorHomeDataAsync() - { - return await _summaryService.GetDoorHomeDataAsync(); - } - - /// - /// 门禁首页数据 - /// - /// - [HttpGet("door-data")] - public async Task GetDoorDataAsync() - { - return await _summaryService.GetDoorDataAsync(); + return await _summaryService.GetHomeSummaryAsync(type); } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Summary/Response/AttendanceSummaryResponse.cs b/Src/Dlhis.Basic/Summary/Response/AttendanceSummaryResponse.cs deleted file mode 100644 index ab930d60..00000000 --- a/Src/Dlhis.Basic/Summary/Response/AttendanceSummaryResponse.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Dlhis.Basic.Summary.Response -{ - public class AttendanceSummaryResponse - { - public AttendanceDeviceSummary DeviceSummary { get; set; } - - public AttendanceDetailSummary AttendanceDetailSummary { get; set; } - } -} diff --git a/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs b/Src/Dlhis.Basic/Summary/Response/DeviceSummary.cs similarity index 94% rename from Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs rename to Src/Dlhis.Basic/Summary/Response/DeviceSummary.cs index 77a92955..32173118 100644 --- a/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs +++ b/Src/Dlhis.Basic/Summary/Response/DeviceSummary.cs @@ -2,7 +2,7 @@ namespace Dlhis.Basic.Summary.Response; -public class AttendanceDeviceSummary +public class DeviceSummary { /// /// 总数 diff --git a/Src/Dlhis.Basic/Summary/Response/DoorDataResponse.cs b/Src/Dlhis.Basic/Summary/Response/DoorDataResponse.cs deleted file mode 100644 index 184971f1..00000000 --- a/Src/Dlhis.Basic/Summary/Response/DoorDataResponse.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace Dlhis.Basic.Summary.Response; - -public class DoorDataResponse -{ - /// - /// 门禁总人数 - /// - public int Total => Employed + Unemployed; - - /// - /// 在职人数 - /// - public int Employed { get; set; } - - /// - /// 非在职人数 - /// - public int Unemployed { get; set; } - - /// - /// 人员趋势 7天 - /// - public GainfoTrendResponse GainfoTrend { get; set; } -} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Summary/Response/DoorHomeDataResponse.cs b/Src/Dlhis.Basic/Summary/Response/DoorHomeDataResponse.cs deleted file mode 100644 index 163a35fe..00000000 --- a/Src/Dlhis.Basic/Summary/Response/DoorHomeDataResponse.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Dlhis.Basic.Summary.Dto; - -namespace Dlhis.Basic.Summary.Response -{ - public class DoorHomeDataResponse - { - public int OffNum { get; set; } - public int TotalNum { get; set; } - public List Trend { get; set; } - } -} diff --git a/Src/Dlhis.Basic/Summary/Response/AttendanceDetailSummary.cs b/Src/Dlhis.Basic/Summary/Response/GainfoDetailSummary.cs similarity index 92% rename from Src/Dlhis.Basic/Summary/Response/AttendanceDetailSummary.cs rename to Src/Dlhis.Basic/Summary/Response/GainfoDetailSummary.cs index a013bb6a..812bb3c1 100644 --- a/Src/Dlhis.Basic/Summary/Response/AttendanceDetailSummary.cs +++ b/Src/Dlhis.Basic/Summary/Response/GainfoDetailSummary.cs @@ -1,6 +1,6 @@ namespace Dlhis.Basic.Summary.Response; -public class AttendanceDetailSummary +public class GainfoDetailSummary { /// /// 考勤总人数 diff --git a/Src/Dlhis.Basic/Summary/Response/GainfoTrendResponse.cs b/Src/Dlhis.Basic/Summary/Response/GainfoTrendResponse.cs index 4050c983..7bb9449b 100644 --- a/Src/Dlhis.Basic/Summary/Response/GainfoTrendResponse.cs +++ b/Src/Dlhis.Basic/Summary/Response/GainfoTrendResponse.cs @@ -1,10 +1,9 @@ using Dlhis.Basic.Summary.Dto; -namespace Dlhis.Basic.Summary.Response +namespace Dlhis.Basic.Summary.Response; + +public class GainfoTrendResponse { - public class GainfoTrendResponse - { - public List EmployedTrend { get; set; } - public List UnemployedTrend { get; set; } - } -} + public List EmployedTrend { get; set; } + public List UnemployedTrend { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Summary/Response/HomeSummaryResponse.cs b/Src/Dlhis.Basic/Summary/Response/HomeSummaryResponse.cs new file mode 100644 index 00000000..ca24d629 --- /dev/null +++ b/Src/Dlhis.Basic/Summary/Response/HomeSummaryResponse.cs @@ -0,0 +1,14 @@ +namespace Dlhis.Basic.Summary.Response; + +public class HomeSummaryResponse +{ + /// + /// 设备 + /// + public DeviceSummary DeviceSummary { get; set; } + + /// + /// 明细 + /// + public GainfoDetailSummary DetailSummary { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Summary/Services/ISummaryService.cs b/Src/Dlhis.Basic/Summary/Services/ISummaryService.cs index dfb99fa3..38810872 100644 --- a/Src/Dlhis.Basic/Summary/Services/ISummaryService.cs +++ b/Src/Dlhis.Basic/Summary/Services/ISummaryService.cs @@ -1,12 +1,9 @@ using Dlhis.Basic.Summary.Response; +using Dlhis.Entity.Device.Enums; namespace Dlhis.Basic.Summary.Services; public interface ISummaryService : IScopeDependency { - Task GetAttendanceSummaryAsync(); - - Task GetDoorHomeDataAsync(); - - Task GetDoorDataAsync(); + Task GetHomeSummaryAsync(DeviceTypeEnumType type); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs b/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs index 83cdace3..0844b6ed 100644 --- a/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs +++ b/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs @@ -23,7 +23,7 @@ public class SummaryService : ISummaryService _currentUser = currentUser; } - public async Task GetAttendanceSummaryAsync() + public async Task GetHomeSummaryAsync(DeviceTypeEnumType type) { var now = DateTime.Now; var tenantId = _currentUser.GetStringTenantId(); @@ -33,7 +33,7 @@ public class SummaryService : ISummaryService var before7Day = DateTime.Today.AddDays(-6); var devices = await _dbContext.Queryable() - .Where(x => x.Type == DeviceTypeEnumType.Attendance || (x.Type == DeviceTypeEnumType.Door && x.AsAttendance)) + .Where(x => x.Type == type) .ToListAsync(); var deviceUniqueNos = devices.Select(x => x.UniqueNo).ToList(); @@ -54,9 +54,9 @@ public class SummaryService : ISummaryService .Where(x => x.Factory == tenantId) .ToListAsync(); - return new AttendanceSummaryResponse + return new HomeSummaryResponse { - DeviceSummary = new AttendanceDeviceSummary + DeviceSummary = new DeviceSummary { Total = devices.Count, EnableCount = devices.Count(x => x.Enable), @@ -73,7 +73,7 @@ public class SummaryService : ISummaryService .GroupBy(x => x.CreateTime.Date) .Select(x => new TrendDto { Date = x.Key, Count = x.Count() }), before30Day, currentDay) }, - AttendanceDetailSummary = new AttendanceDetailSummary + DetailSummary = new GainfoDetailSummary { Employed = workingGainfos.Count, Unemployed = leaveGainfos.Count, @@ -90,64 +90,7 @@ public class SummaryService : ISummaryService }; } - public async Task GetDoorHomeDataAsync() - { - var devices = await _dbContext.Queryable().Where(x => x.Type == DeviceTypeEnumType.Door).ToListAsync(); - - var offDevices = await GetOfflineDevicesCount(devices); - - DateTime currentDate = DateTime.Now; - var times = new List(); - for (int i = 0; i < 30; i++) - { - DateTime date = currentDate.AddDays(-i); - string dateString = date.ToString("yyyy-MM-dd"); - times.Add(dateString); - } - - var list = new List(); - times.ForEach(time => - { - var count = devices.Count(x => x.CreateTime.ToString("yyyy-MM-dd") == time); - var trend = new TrendDto - { - Date = DateTime.ParseExact(time, "yyyy-MM-dd", null), - Count = count, - }; - list.Add(trend); - }); - var res = new DoorHomeDataResponse - { - OffNum = offDevices.Count, - TotalNum = devices.Count, - Trend = list - }; - return res; - } - - public async Task GetDoorDataAsync() - { - var workingGainfos = await _gainfoStore.Queryable(GainfoStatusEnumType.Working).ToListAsync(); - var leaveGainfos = await _gainfoStore.Queryable(GainfoStatusEnumType.Leave).ToListAsync(); - - var currentDay = DateTime.Today.AddDays(1).AddSeconds(-1); - var before7Day = DateTime.Today.AddDays(-6); - - return new DoorDataResponse - { - Employed = workingGainfos.Count, - Unemployed = leaveGainfos.Count, - GainfoTrend = new GainfoTrendResponse() - { - EmployedTrend = FixTrend(workingGainfos.Where(x => x.EntryDate >= before7Day && x.EntryDate <= currentDay) - .GroupBy(x => x.EntryDate) - .Select(x => new TrendDto { Date = x.Key!.Value, Count = x.Count() }), before7Day, currentDay), - UnemployedTrend = FixTrend(leaveGainfos.Where(x => x.ResignationDate >= before7Day && x.ResignationDate <= currentDay) - .GroupBy(x => x.ResignationDate) - .Select(x => new TrendDto { Date = x.Key!.Value, Count = x.Count() }), before7Day, currentDay) - } - }; - } + //******************************************************************************************************************************************** private static List FixTrend(IEnumerable dtos, DateTime start, DateTime end) @@ -173,48 +116,4 @@ public class SummaryService : ISummaryService return result.OrderBy(x => x.Date).ToList(); } - - /// - /// 获取离线设备 - /// - /// - private async Task> GetOfflineDevicesCount(List devices) - { - var now = DateTime.Now; - - var deviceUniqueNos = devices.Select(x => x.UniqueNo).ToList(); - - var deviceRegistries = await _dbContext.Queryable() - .LeftJoin((x, d) => x.DeviceUniqueNo == d.UniqueNo) - .Where(x => deviceUniqueNos.Contains(x.DeviceUniqueNo)) - .Select((x, d) => new - { - UniqueNo = d.UniqueNo, - d.HeartbeatInterval, - x.LastHeartbeatTime - }) - .ToListAsync(); - - var onlineDevices = deviceRegistries - .Where(x => - { - if (x.HeartbeatInterval <= 0) - { - return true; - } - - return x.LastHeartbeatTime.AddSeconds(x.HeartbeatInterval) >= now; - }) - .Select(x => new - { - UniqueNo = x.UniqueNo, - }) - .ToList(); - var onlineUniqueNos = new List(); - onlineDevices.ForEach(x => onlineUniqueNos.Add(x.UniqueNo)); - - var offUniqueNos = deviceUniqueNos.Except(onlineUniqueNos).ToList(); - var list = devices.Where(x => offUniqueNos.Contains(x.UniqueNo)).ToList(); - return list; - } } \ No newline at end of file