diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 77b58379..9e532d2b 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -1,6 +1,8 @@ using Dlhis.Basic.Device.Dtos; using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Services; +using Dlhis.Basic.Organization.Dto; +using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -91,4 +93,15 @@ public class DevicePermissionsController : ControllerBase { return await _devicePermissionService.ReGeneratePermissionUsersInfoAsync(beforeDto); } + + /// + /// 获取设备下人员分页 + /// + /// + /// + [HttpGet("gainfos/page")] + public async Task> GetGainfoPageByDeviceAsync([FromQuery] DeviceWithGainfoRequest request) + { + return await _devicePermissionService.GetGainfoPageByDeviceAsync(request); + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Request/DeviceWithGainfoRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceWithGainfoRequest.cs new file mode 100644 index 00000000..2836c0de --- /dev/null +++ b/Src/Dlhis.Basic/Device/Request/DeviceWithGainfoRequest.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; +using Kurisu.AspNetCore.DataAccess.Dto; + +namespace Dlhis.Basic.Device.Request; + +public class DeviceWithGainfoRequest : PageDto +{ + /// + /// 设备号 + /// + [Required(ErrorMessage = "设备号不能为空")] + public string DeviceUniqueNo { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs index 39fe6948..60078ef1 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs @@ -1,7 +1,9 @@ using Dlhis.Basic.Device.Dtos; using Dlhis.Basic.Device.Request; +using Dlhis.Basic.Organization.Dto; using Dlhis.Entity.Device.Enums; using Dlhis.Entity.Sys.Enums; +using Kurisu.AspNetCore.DataAccess.Dto; namespace Dlhis.Basic.Device.Services; @@ -43,7 +45,7 @@ public interface IDevicePermissionService : IScopeDependency /// /// Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType); - + /// /// 获取用户所有设备权限 /// @@ -64,4 +66,7 @@ public interface IDevicePermissionService : IScopeDependency Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto); -} + + + Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request); +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 6df936d0..ea780b3b 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -5,12 +5,16 @@ using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Dlhis.Entity.Sys.Entities; using Dlhis.Entity.Sys.Enums; +using Dlhis.Scheduled.Api; using Kurisu.AspNetCore.Authentication.Abstractions; +using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.Entity; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils; using Kurisu.AspNetCore.Utils.Extensions; using SqlSugar; +using GeneratePermissionIdRequest = Dlhis.Scheduled.Api.Request.GeneratePermissionIdRequest; namespace Dlhis.Basic.Device.Services.Implements; @@ -19,12 +23,14 @@ public class DevicePermissionService : IDevicePermissionService private readonly IDbContext _dbContext; private readonly ICurrentUser _currentUser; private readonly RedisCache _redisCache; + private readonly IHangfireApi _hangfireApi; public DevicePermissionService(IDbContext dbContext, ICurrentUser currentUser, RedisCache redisCache) { _dbContext = dbContext; _currentUser = currentUser; _redisCache = redisCache; + _hangfireApi = hangfireApi; } public async Task AssignAsync(DevicePermissionSaveRequest request) @@ -303,6 +309,60 @@ public class DevicePermissionService : IDevicePermissionService return waitTasks.Count; } + + public async Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request) + { + var device = await _dbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync(); + + //当前设备的分组 + var groups = await _dbContext.Queryable() + .Where(x => x.DeviceCode == device.Code) + .Select(x => x.GroupCode) + .ToListAsync(); + + var permissions = await _dbContext.Queryable() + .Where(x => (x.UniqueType == DeviceAssignmentTypeEnumType.Device && x.UniqueValue == device.Code) || (x.UniqueType == DeviceAssignmentTypeEnumType.Group && groups.Contains(x.UniqueValue))) + .ToListAsync(); + + var ids = new List(); + foreach (var permission in permissions) + { + switch (permission.AssignType) + { + case AssignTypeEnumType.User: + ids.Add(await _dbContext.Queryable().Where(x => x.No == permission.AssignValue).Select(x => x.Id).SingleAsync()); + break; + case AssignTypeEnumType.Group: + { + var code = Guid.Parse(permission.AssignValue); + ids.AddRange(await _dbContext.Queryable().Where(x => x.Code == code) + .LeftJoin((a, b) => a.Code == b.GroupCode) + .LeftJoin((a, b, c) => b.UserNo == c.No) + .Select((a, b, c) => c.Id).ToListAsync()); + } + break; + case AssignTypeEnumType.Department: + { + ids.AddRange(await _dbContext.Queryable().Where(x => x.DepartmentNo == permission.AssignValue).Select(x => x.Id).ToListAsync()); + } + break; + case AssignTypeEnumType.Tenant: + { + ids.AddRange(await _dbContext.Queryable().Where(x => x.Factory == permission.AssignValue).Select(x => x.Id).ToListAsync()); + } + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + return await _dbContext.Queryable() + .Where(x => ids.Contains(x.Id)) + .WhereIF(request.Search.IsPresent(), x => x.Code == request.Search || x.Name.Contains(request.Search)) + .Select() + .ToPageListAsync(request); + } + public async Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType) { var deviceCodes = await GetAssignDeviceCodesAsync(userNo); @@ -311,12 +371,12 @@ public class DevicePermissionService : IDevicePermissionService return; } - var devices = await _dbContext.Queryable() + var deivces = await _dbContext.Queryable() .Where(x => x.Enable) .Where(x => deviceCodes.Contains(x.Code)) .ToListAsync(); - var tasks = devices.Select(x => new DeviceTaskEntity + var tasks = deivces.Select(x => new DeviceTaskEntity { DeviceUniqueNo = x.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, @@ -324,7 +384,6 @@ public class DevicePermissionService : IDevicePermissionService DeviceType = x.Type, UserNo = userNo, CancellationId = 0, - Priority = 0, Version = 0, TenantId = x.TenantId }).ToList(); @@ -406,7 +465,7 @@ public class DevicePermissionService : IDevicePermissionService .Where(x => x.AssignType == assignType) .Where(x => x.AssignValue == assignValue) .GroupBy(x => x.TenantId) - .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(p => p.UniqueValue).ToList() }) + .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(x => x.UniqueValue).ToList() }) .ToList(); //处理获取设备分组的情况 @@ -428,9 +487,9 @@ public class DevicePermissionService : IDevicePermissionService }; }).ToList(); - void RecursionGetNext(DeviceGroupEntity current, List internalDeviceGroups, List result, bool add) + void RecursionGetNext(DeviceGroupEntity current, List deviceGroups, List result, bool add) { - var next = internalDeviceGroups.Where(x => x.PCode == current.Code).ToList(); + var next = deviceGroups.Where(x => x.PCode == current.Code).ToList(); foreach (var item in next) { if (add) @@ -438,7 +497,7 @@ public class DevicePermissionService : IDevicePermissionService result.Add(new UserTenantDeviceCodeDto { Tenant = item.TenantId, Codes = new List { item.Code } }); } - RecursionGetNext(item, internalDeviceGroups, result, result.SelectMany(x => x.Codes).Contains(item.Code)); + RecursionGetNext(item, deviceGroups, result, result.SelectMany(x => x.Codes).Contains(item.Code)); } } } diff --git a/Src/Dlhis.Basic/Organization/Dto/GainfoDto.cs b/Src/Dlhis.Basic/Organization/Dto/GainfoDto.cs new file mode 100644 index 00000000..11a57286 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Dto/GainfoDto.cs @@ -0,0 +1,10 @@ +namespace Dlhis.Basic.Organization.Dto; + +public class GainfoDto +{ + public long Id { get; set; } + public string Code { get; set; } + public string Name { get; set; } + public string Workplace { get; set; } + public string Factory { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoCurrentResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoCurrentResponse.cs index c92e7cf5..2404010f 100644 --- a/Src/Dlhis.Basic/Organization/Response/GainfoCurrentResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/GainfoCurrentResponse.cs @@ -45,7 +45,7 @@ public class GainfoCurrentResponse /// /// 出生日期/生日 /// - //[JsonConverter(typeof(ToDateJsonConverter))] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime Birthday { get; set; } /// diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs index 937c8da2..9c3db6c1 100644 --- a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs @@ -70,7 +70,7 @@ public class GainfoDetailResponse /// /// 出生日期 /// - //[JsonConverter(typeof(ToDateJsonConverter))] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime Birthday { get; set; } /// diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs index 1a1b0cd2..3de856ad 100644 --- a/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs @@ -65,7 +65,7 @@ public class GainfoPageResponse /// /// 生日 /// - //[JsonConverter(typeof(ToDateJsonConverter))] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime Birthday { get; set; } /// diff --git a/Src/Dlhis.Basic/Places/Controllers/BusinessPlacesController.cs b/Src/Dlhis.Basic/Places/Controllers/BusinessPlacesController.cs index 49600a9a..edf388e1 100644 --- a/Src/Dlhis.Basic/Places/Controllers/BusinessPlacesController.cs +++ b/Src/Dlhis.Basic/Places/Controllers/BusinessPlacesController.cs @@ -127,4 +127,4 @@ public class BusinessPlacesController : ControllerBase { await _businessPlaceShiftService.DispositionDeviceAsync(request); } -} +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlaceService.cs b/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlaceService.cs index f715b1f5..895fe2ef 100644 --- a/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlaceService.cs +++ b/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlaceService.cs @@ -1,8 +1,11 @@ using Dlhis.Basic.Places.Request; using Dlhis.Basic.Places.Response; using Dlhis.Entity.Basic.Entity; +using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; +using Kurisu.AspNetCore.CustomClass; using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.DataAccess.Entity; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils.Extensions; @@ -112,6 +115,11 @@ public class BusinessPlaceService : IBusinessPlaceService else { var entity = await _dbContext.Queryable().FirstAsync(x => x.Id == request.Id); + if (await _dbContext.Queryable().AnyAsync(x => x.BusinessPlaceCode == entity.Code) && request.CustomCode != entity.CustomCode) + { + throw new UserFriendlyException("设备已产生消费记录,不可编辑编码"); + } + request.Adapt(entity); await _dbContext.UpdateAsync(entity); @@ -149,12 +157,15 @@ public class BusinessPlaceService : IBusinessPlaceService /// private async Task CheckExistsCustomCodeAsync(BusinessPlaceSaveRequest request) { - var existsSameCustomCode = await _dbContext.Queryable() - .Where(x => x.CustomCode == request.CustomCode) - .WhereIF(request.Id.HasValue, x => x.Id != request.Id) - .AnyAsync(); + await _dbContext.IgnoreAsync(async () => + { + var existsSameCustomCode = await _dbContext.Queryable() + .Where(x => x.CustomCode == request.CustomCode) + .WhereIF(request.Id.HasValue, x => x.Id != request.Id) + .AnyAsync(); - existsSameCustomCode.ThrowIfTrue($"自定义手工号[{request.CustomCode}]存在重复,请检查."); + existsSameCustomCode.ThrowIfTrue($"自定义手工号[{request.CustomCode}]存在重复,请检查."); + }); } /// diff --git a/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordMyResponse.cs b/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordMyResponse.cs index 88339d43..b43de229 100644 --- a/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordMyResponse.cs +++ b/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordMyResponse.cs @@ -8,7 +8,7 @@ public class MealSupplementRecordItemResponse /// /// 餐补日期 /// - //[JsonConverter(typeof(ToDateJsonConverter))] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime Date { get; set; } [JsonIgnore] diff --git a/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordResponse.cs b/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordResponse.cs index 55597a58..f0c4ef9d 100644 --- a/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordResponse.cs +++ b/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordResponse.cs @@ -32,7 +32,7 @@ public class MealSupplementRecordResponse /// /// 考勤日期 /// - //[JsonConverter(typeof(ToDateJsonConverter))] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime Date { get; set; } /// diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs index 83dcacab..8bc42ee2 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs @@ -30,7 +30,6 @@ public class BalancesController : ControllerBase /// /// [Authorize(Roles = "admin,tenant-admin")] - [DataPermission] [HttpGet] public async Task> GetPageAsync([FromQuery] BalanceRecordPageRequest request) { @@ -139,7 +138,6 @@ public class BalancesController : ControllerBase return await _balanceService.GetConsumeDeviceAsync(request); } - /// /// 海宁餐补数据写入 /// diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordDeviceResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordDeviceResponse.cs index d1d9a607..9f8d423b 100644 --- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordDeviceResponse.cs +++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordDeviceResponse.cs @@ -42,7 +42,7 @@ public class BalanceRecordDeviceResponse /// /// 所属成本日期 /// - //[JsonConverter(typeof(ToDateJsonConverter))] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime CostDate { get; set; } /// diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs index c9447082..ac4c6183 100644 --- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs +++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs @@ -48,7 +48,7 @@ public class BalanceRecordResponse /// /// 所属成本日期 /// - //[JsonConverter(typeof(ToDateJsonConverter))] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime CostDate { get; set; } /// diff --git a/Src/Dlhis.Canteen/Order/Response/OrderBookingResponse.cs b/Src/Dlhis.Canteen/Order/Response/OrderBookingResponse.cs index f188d17f..7c096540 100644 --- a/Src/Dlhis.Canteen/Order/Response/OrderBookingResponse.cs +++ b/Src/Dlhis.Canteen/Order/Response/OrderBookingResponse.cs @@ -66,7 +66,7 @@ public class OrderBookingResponse /// /// 订餐日期 /// - //[JsonConverter(typeof(ToDateJsonConverter))] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime BookingDate { get; set; } /// diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index 96046a19..4a32d04f 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -97,6 +97,7 @@ public class BalanceService : IBalanceService } catch (Exception) { + //ignore } return page; diff --git a/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceGroupEntity.cs b/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceGroupEntity.cs index c92f0495..884b8422 100644 --- a/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceGroupEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceGroupEntity.cs @@ -17,9 +17,8 @@ public class BusinessPlaceGroupEntity : SugarBaseEntity, ITenantId [SugarColumn(ColumnDescription = "名称")] public string Name { get; set; } - [SugarColumn(ColumnDescription = "备注")] public string Remark { get; set; } public string TenantId { get; set; } -} +} \ No newline at end of file diff --git a/Src/Dlhis.Entity/Dlhis.Entity.csproj b/Src/Dlhis.Entity/Dlhis.Entity.csproj index 50a359c2..56780d28 100644 --- a/Src/Dlhis.Entity/Dlhis.Entity.csproj +++ b/Src/Dlhis.Entity/Dlhis.Entity.csproj @@ -7,7 +7,7 @@ - + diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs index 1a016bf5..cab1b625 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs @@ -29,7 +29,6 @@ public class DeviceTaskAssignmentsController : ControllerBase /// /// [HttpGet("page")] - [DataPermission] public async Task> GetPageAsync([FromQuery] DeviceTaskAssignmentRequest request) { return await _deviceTaskAssignmentService.GetPageAsync(request); @@ -44,4 +43,4 @@ public class DeviceTaskAssignmentsController : ControllerBase { await _deviceTaskAssignmentService.ResetAsync(request); } -} +} \ No newline at end of file