From 4c959ccd40e0c294c731fac6f6d2cca1a9dbbf03 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Tue, 5 Mar 2024 19:36:13 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Device/Request/DeviceGroupSaveRequest.cs | 5 ++ .../Response/DeviceGroupTreeResponse.cs | 5 ++ .../Device/Response/DevicePageResponse.cs | 26 ++++++- .../Services/Implements/DeviceService.cs | 68 ++++--------------- .../Controllers/WerksController.cs | 5 +- .../Response/DepartmentTreeResponse.cs | 5 ++ .../Organization/Services/IWerkService.cs | 2 +- .../Services/Implements/DepartmentService.cs | 26 +++---- .../Services/Implements/WerkService.cs | 2 +- .../CommonJobs/CreateDefinitelyGroupJob.cs | 8 ++- .../Response/DeviceTaskAssignmentResponse.cs | 5 ++ .../Implements/DeviceTaskAssignmentService.cs | 1 + 12 files changed, 83 insertions(+), 75 deletions(-) diff --git a/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs index 9cbf1ee9..f16286ff 100644 --- a/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs +++ b/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs @@ -23,4 +23,9 @@ public class DeviceGroupSaveRequest /// [EnumDataType(typeof(DeviceTypeEnumType))] public DeviceTypeEnumType? Type { get; set; } + + /// + /// 备注 + /// + public string Remark { get; set; } } diff --git a/Src/Dlhis.Basic/Device/Response/DeviceGroupTreeResponse.cs b/Src/Dlhis.Basic/Device/Response/DeviceGroupTreeResponse.cs index 31b5f3f3..24e19c85 100644 --- a/Src/Dlhis.Basic/Device/Response/DeviceGroupTreeResponse.cs +++ b/Src/Dlhis.Basic/Device/Response/DeviceGroupTreeResponse.cs @@ -29,6 +29,11 @@ public class DeviceGroupTreeResponse /// public DeviceTypeEnumType? Type { get; set; } + /// + /// 备注 + /// + public string Remark { get; set; } + /// /// 分组类型描述 /// diff --git a/Src/Dlhis.Basic/Device/Response/DevicePageResponse.cs b/Src/Dlhis.Basic/Device/Response/DevicePageResponse.cs index ab586f63..5543715e 100644 --- a/Src/Dlhis.Basic/Device/Response/DevicePageResponse.cs +++ b/Src/Dlhis.Basic/Device/Response/DevicePageResponse.cs @@ -85,10 +85,32 @@ public class DevicePageResponse /// public bool Enable { get; set; } + + //*********************************************************附加信息**************************************************************/ + + /// + /// 最后心跳时间 + /// + public DateTime? LastHeartbeatTime { get; set; } + /// /// 是否在线 /// - public bool IsOnline { get; set; } + public bool IsOnline + { + get + { + if (!LastHeartbeatTime.HasValue) + return false; + else + { + if (HeartbeatInterval <= 0) + return true; + else + return LastHeartbeatTime.Value.AddSeconds(HeartbeatInterval * 3) >= DateTime.Now; + } + } + } /// /// 消费总额 @@ -103,7 +125,7 @@ public class DevicePageResponse /// /// 营业点code /// - public string BusinessPlaceCode { get; set; } + public Guid? BusinessPlaceCode { get; set; } /// /// 营业点名称 diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index dc9409e9..7632b1b6 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -11,11 +11,9 @@ using Kurisu.Core.DataAccess.Dto; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Mapster; -using MySqlX.XDevAPI.Relational; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SqlSugar; -using System.Collections.Generic; namespace Dlhis.Basic.Device.Services.Implements; @@ -32,73 +30,35 @@ public class DeviceService : IDeviceService { var page = await _dbContext.Queryable() .LeftJoin((d, dt) => d.TemplateCode == dt.Code) + .LeftJoin((d, dt, dr) => d.UniqueNo == dr.DeviceUniqueNo) + .LeftJoin((d, dt, dr, bp) => dr.BusinessPlaceCode == bp.Code) .WhereIF(request.Type.HasValue, (d, dt) => d.Type == request.Type) - .Select((d, dt) => new DevicePageResponse + .Select((d, dt, dr, bp) => new DevicePageResponse { FuncsStr = d.Funcs.ToString(), Brand = dt.Brand, Type = d.Type, + BusinessPlaceCode = bp.Code, + BusinessPlaceName = bp.Name, + LastHeartbeatTime = dr.LastHeartbeatTime }, true) .ToPageListAsync(request); - var now = DateTime.Now; var deviceUniqueNos = page.Data.Select(x => x.UniqueNo).ToList(); var balanceRecords = await _dbContext.Queryable().Where(x => x.Type == BalanceRecordTypeEnumType.Out) .Where(x => deviceUniqueNos.Contains(x.DeviceInfo)) + .Select(x => new + { + x.Amount, + x.UserCode + }) .ToListAsync(); - var deviceRegistries = await _dbContext.Queryable() - .LeftJoin((x, d) => x.DeviceUniqueNo == d.UniqueNo) - .Where(x => deviceUniqueNos.Contains(x.DeviceUniqueNo)) - .Select((x, d) => new - { - d.HeartbeatInterval, - x.LastHeartbeatTime, - x.DeviceUniqueNo, - }) - .ToListAsync(); - - var Registries = await _dbContext.Queryable() - .ToListAsync(); - var BusinessPlaces = await _dbContext.Queryable() - .ToListAsync(); - - foreach (var res in page.Data) - { - var regis = Registries.Where(x => x.DeviceUniqueNo == res.UniqueNo).FirstOrDefault(); - if (regis != null) - { - var place = BusinessPlaces.Where(x => x.Code == regis.BusinessPlaceCode).FirstOrDefault(); - if (place != null) - { - res.BusinessPlaceCode = regis.BusinessPlaceCode.ToString(); - res.BusinessPlaceName = place.Name; - } - } - - } page.Data.ForEach(device => { device.Amount = balanceRecords.Sum(x => x.Amount); device.UserCount = balanceRecords.DistinctBy(x => x.UserCode).Count(); - - var r = deviceRegistries.FirstOrDefault(x => x.DeviceUniqueNo == device.UniqueNo); - if (r == null) - { - device.IsOnline = false; - } - else - { - if (r.HeartbeatInterval <= 0) - { - device.IsOnline = true; - } - else - { - device.IsOnline = r.LastHeartbeatTime.AddSeconds(r.HeartbeatInterval * 3) >= now; - } - } }); return page; @@ -290,7 +250,7 @@ public class DeviceService : IDeviceService public async Task GetDeviceNumberAsync() { var devices = await _dbContext.Queryable().Where(x => x.Type == DeviceTypeEnumType.Attendance || (x.Type == DeviceTypeEnumType.Door && x.AsAttendance)).ToListAsync(); - + var offlineNumber = await GetOfflineDevicesCount(devices); var res = new DeviceNumberResponse @@ -333,7 +293,7 @@ public class DeviceService : IDeviceService return x.LastHeartbeatTime.AddSeconds(x.HeartbeatInterval * 3) >= now; }) - .Select(x => new + .Select(x => new { UniqueNo = x.UniqueNo, }) @@ -345,7 +305,7 @@ public class DeviceService : IDeviceService var list = devices.Where(x => offUniqueNos.Contains(x.UniqueNo)).ToList(); return list; } - + public async Task> GetAttendanceTotalAsync(AttendanceTotalRequest request) { diff --git a/Src/Dlhis.Basic/Organization/Controllers/WerksController.cs b/Src/Dlhis.Basic/Organization/Controllers/WerksController.cs index 5f7522dd..bbbb7904 100644 --- a/Src/Dlhis.Basic/Organization/Controllers/WerksController.cs +++ b/Src/Dlhis.Basic/Organization/Controllers/WerksController.cs @@ -1,6 +1,5 @@ -using Dlhis.Basic.Organization.Response; -using Dlhis.Basic.Organization.Services; -using Dlhis.User.Api.Response; +using Dlhis.Basic.Organization.Services; +using Dlhis.Sys.Api.Response; using Kurisu.AspNetCore.MVC; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/Src/Dlhis.Basic/Organization/Response/DepartmentTreeResponse.cs b/Src/Dlhis.Basic/Organization/Response/DepartmentTreeResponse.cs index c30d68b1..309e6d58 100644 --- a/Src/Dlhis.Basic/Organization/Response/DepartmentTreeResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/DepartmentTreeResponse.cs @@ -2,6 +2,11 @@ public class DepartmentTreeResponse { + /// + /// 上级 + /// + public string PNo { get; set; } + /// /// 部门号 /// diff --git a/Src/Dlhis.Basic/Organization/Services/IWerkService.cs b/Src/Dlhis.Basic/Organization/Services/IWerkService.cs index 8f8ecc4b..42b1a90e 100644 --- a/Src/Dlhis.Basic/Organization/Services/IWerkService.cs +++ b/Src/Dlhis.Basic/Organization/Services/IWerkService.cs @@ -1,4 +1,4 @@ -using Dlhis.User.Api.Response; +using Dlhis.Sys.Api.Response; namespace Dlhis.Basic.Organization.Services; diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/DepartmentService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/DepartmentService.cs index bf42c549..9800dc40 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/DepartmentService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/DepartmentService.cs @@ -1,28 +1,28 @@ -using Dlhis.Basic.Organization.Request; -using Dlhis.Basic.Organization.Response; +using Dlhis.Basic.Organization.Response; using Dlhis.Entity.Basic.Entity; -using Kurisu.AspNetCore.Utils.Extensions; -using Kurisu.Core.DataAccess.Dto; +using Kurisu.Core.User.Abstractions; using Kurisu.SqlSugar.Services; -using Mapster; -using System.Collections.Generic; namespace Dlhis.Basic.Organization.Services.Implements; public class DepartmentService : IDepartmentService { private readonly IDbContext _dbContext; + private readonly ICurrentUser _currentUser; - public DepartmentService(IDbContext dbContext) + public DepartmentService(IDbContext dbContext, ICurrentUser currentUser) { _dbContext = dbContext; + _currentUser = currentUser; } public async Task> GetTreeAsync() { - var departments = await _dbContext.Queryable().ToListAsync(); + var myTenants = _currentUser.GetUserClaim("tenants").Split(',').ToList(); + + var departments = await _dbContext.Queryable().Select().ToListAsync(); //00001000 一定是这个开头的 - var tops = departments.Where(x => x.PNo == "00001000").Adapt>(); + var tops = departments.Where(x => x.PNo == "00001000").ToList(); tops.ForEach(x => { @@ -32,13 +32,13 @@ public class DepartmentService : IDepartmentService return tops; } - private void RecursionGetNext(DepartmentTreeResponse current, List departments) + private void RecursionGetNext(DepartmentTreeResponse current, List data) { - var next = departments.Where(x => x.PNo == current.No).ToList(); - current.Next = next.Adapt>(); + var next = data.Where(x => x.PNo == current.No).ToList(); + current.Next = next; foreach (var item in next) { - RecursionGetNext(item.Adapt(), departments); + RecursionGetNext(item, data); } } } diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/WerkService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/WerkService.cs index 718bd6c1..99517d8a 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/WerkService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/WerkService.cs @@ -1,5 +1,5 @@ using Dlhis.Sys.Api; -using Dlhis.User.Api.Response; +using Dlhis.Sys.Api.Response; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.Result; using Kurisu.Core.User.Abstractions; diff --git a/Src/Dlhis.ScheduledTask/CommonJobs/CreateDefinitelyGroupJob.cs b/Src/Dlhis.ScheduledTask/CommonJobs/CreateDefinitelyGroupJob.cs index af824291..553f4138 100644 --- a/Src/Dlhis.ScheduledTask/CommonJobs/CreateDefinitelyGroupJob.cs +++ b/Src/Dlhis.ScheduledTask/CommonJobs/CreateDefinitelyGroupJob.cs @@ -2,7 +2,7 @@ using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Dlhis.Sys.Api; -using Dlhis.User.Api.Response; +using Dlhis.Sys.Api.Response; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Entity; using Kurisu.SqlSugar.Services; @@ -29,6 +29,8 @@ public class CreateDefinitelyGroupJob sqlSugarOptionsService.IgnoreTenant = true; } + private static readonly string _remark = "系统自动生成"; + public async Task RunAsync() { _dbContext.Client.QueryFilter.ClearAndBackup(); @@ -77,6 +79,7 @@ public class CreateDefinitelyGroupJob Name = grp, IsDefault = grp.Equals("*自定义人员分组"), Editable = false, + Remark = _remark, CreatedBy = 1, CreateTime = DateTime.Now, @@ -103,6 +106,7 @@ public class CreateDefinitelyGroupJob Type = type, Name = grp, Editable = false, + Remark = _remark, CreatedBy = 1, CreateTime = DateTime.Now, @@ -126,6 +130,7 @@ public class CreateDefinitelyGroupJob Type = type, Name = workplaceName, Editable = false, + Remark = _remark, CreatedBy = 1, CreateTime = DateTime.Now, @@ -148,6 +153,7 @@ public class CreateDefinitelyGroupJob Type = type, Name = factoryName, Editable = false, + Remark = _remark, CreatedBy = 1, CreateTime = DateTime.Now, diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Response/DeviceTaskAssignmentResponse.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Response/DeviceTaskAssignmentResponse.cs index 96ae9243..7eb69334 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Response/DeviceTaskAssignmentResponse.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Response/DeviceTaskAssignmentResponse.cs @@ -57,6 +57,11 @@ public class DeviceTaskAssignmentResponse /// public string ResultMessage { get; set; } + /// + /// 任务创建时间 + /// + public DateTime CreateTime { get; set; } + /// /// 数据状态最新修改时间 /// diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs index 40f2386a..ea755590 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs @@ -38,6 +38,7 @@ public class DeviceTaskAssignmentService : IDeviceTaskAssignmentService UserName = ga.Name, UserCode = ga.Code, Type = deviceTask.Type, + CreateTime = deviceTask.CreateTime, LastUpdateTime = deviceTask.ModifiedTime }) .ToPageListAsync(request);