diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionManuallyController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionManuallyController.cs new file mode 100644 index 00000000..0177d5c5 --- /dev/null +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionManuallyController.cs @@ -0,0 +1,56 @@ +using Dlhis.Basic.Device.Request; +using Dlhis.Basic.Device.Response; +using Dlhis.Basic.Device.Services; +using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Dlhis.Basic.Device.Controllers; + +[Authorize] +[Route("api/[controller]")] +[ApiController] +public class DevicePermissionManuallyController : ControllerBase +{ + private readonly IDevicePermissionManuallyService _devicePermissionService; + + public DevicePermissionManuallyController(IDevicePermissionManuallyService devicePermissionService) + { + _devicePermissionService = devicePermissionService; + } + + /// + /// 数据分页 + /// + /// + /// + [HttpGet("page")] + [DataPermission] + public async Task> GetPageAsync([FromQuery] PageDto requestDto) + { + return await _devicePermissionService.GetPageAsync(requestDto); + } + + /// + /// 添加权限 + /// + /// + [HttpPost("add")] + [Transactional] + public async Task AddAsync(DevicePermissionManuallyAddRequest request) + { + await _devicePermissionService.AddAsync(request); + } + + /// + /// 删除权限 + /// + /// + [HttpGet("{id:long}")] + [Transactional] + public async Task DeleteAsync(long id) + { + await _devicePermissionService.DeleteAsync(id); + } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionManuallyAddRequest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionManuallyAddRequest.cs new file mode 100644 index 00000000..2ae23a8e --- /dev/null +++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionManuallyAddRequest.cs @@ -0,0 +1,11 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.Basic.Device.Request; + +public class DevicePermissionManuallyAddRequest +{ + public Guid DeviceCode { get; set; } + + [Required] + public string UserNo { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Response/DevicePermissionManuallyResponse.cs b/Src/Dlhis.Basic/Device/Response/DevicePermissionManuallyResponse.cs new file mode 100644 index 00000000..4ca605e6 --- /dev/null +++ b/Src/Dlhis.Basic/Device/Response/DevicePermissionManuallyResponse.cs @@ -0,0 +1,11 @@ +namespace Dlhis.Basic.Device.Response; + +public class DevicePermissionManuallyResponse +{ + public long Id { get; set; } + public Guid DeviceCode { get; set; } + public string DeviceUniqueNo { get; set; } + public string DeployPlace { get; set; } + public string UserNo { get; set; } + public string UserName { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionManuallyService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionManuallyService.cs new file mode 100644 index 00000000..e2a6149b --- /dev/null +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionManuallyService.cs @@ -0,0 +1,14 @@ +using Dlhis.Basic.Device.Request; +using Dlhis.Basic.Device.Response; +using Kurisu.AspNetCore.DataAccess.Dto; + +namespace Dlhis.Basic.Device.Services; + +public interface IDevicePermissionManuallyService : IScopeDependency +{ + Task> GetPageAsync(PageDto requestDto); + + Task AddAsync(DevicePermissionManuallyAddRequest request); + + Task DeleteAsync(long id); +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionManuallyService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionManuallyService.cs new file mode 100644 index 00000000..9c09542e --- /dev/null +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionManuallyService.cs @@ -0,0 +1,103 @@ +using Dlhis.Basic.Device.Request; +using Dlhis.Basic.Device.Response; +using Dlhis.Entity.Basic.Entity; +using Dlhis.Entity.Device.Entities; +using Dlhis.Entity.Device.Enums; +using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; +using Kurisu.AspNetCore.Utils.Extensions; + +namespace Dlhis.Basic.Device.Services.Implements; + +public class DevicePermissionManuallyService : IDevicePermissionManuallyService +{ + private readonly IDbContext _dbContext; + + public DevicePermissionManuallyService(IDbContext dbContext) + { + _dbContext = dbContext; + } + + /// + public async Task> GetPageAsync(PageDto requestDto) + { + return await _dbContext.Queryable() + .LeftJoin((x, d) => x.DeviceCode == d.Code) + .LeftJoin((x, d, g) => x.UserNo == g.No) + .Select((x, d, g) => new DevicePermissionManuallyResponse + { + Id = x.Id, + DeviceCode = x.DeviceCode, + DeviceUniqueNo = d.UniqueNo, + DeployPlace = d.DeployPlace, + UserNo = x.UserNo, + UserName = g.Name + }) + .ToPageListAsync(requestDto); + } + + /// + public async Task AddAsync(DevicePermissionManuallyAddRequest request) + { + var device = await _dbContext.Queryable().Where(x => x.Code == request.DeviceCode).SingleAsync(); + device.ThrowIfNull("设备不存在"); + + var gainfo = await _dbContext.Queryable().Where(x => x.No == request.UserNo).SingleAsync(); + gainfo.ThrowIfNull("人员不存在"); + + + await _dbContext.InsertAsync(new DevicePermissionManuallyEntity + { + DeviceCode = request.DeviceCode, + UserNo = request.UserNo + }); + + await _dbContext.InsertAsync(new DeviceTaskEntity + { + Type = DeviceTaskEnumType.Add, + DeviceType = device.Type, + UserId = null, + UserNo = request.UserNo, + DeviceUniqueNo = device.UniqueNo, + Status = DeviceTaskStatusEnumType.Wait, + Version = 0, + ResultMessage = null, + Source = "手动分配额外权限", + Priority = 0, + TenantId = device.TenantId + }); + } + + /// + public async Task DeleteAsync(long id) + { + var data = await _dbContext.Queryable().Where(x => x.Id == id).SingleAsync(); + data.ThrowIfNull("数据不存在"); + + var device = await _dbContext.Queryable().Where(x => x.Code == data.DeviceCode).SingleAsync(); + if (device != null) + { + var userNo = await _dbContext.Queryable().Where(x => x.No == data.UserNo).Select(x => x.No).SingleAsync(); + if (userNo.IsPresent()) + { + await _dbContext.InsertAsync(new DeviceTaskEntity + { + Type = DeviceTaskEnumType.Delete, + DeviceType = device.Type, + UserId = null, + UserNo = userNo, + DeviceUniqueNo = device.UniqueNo, + Status = DeviceTaskStatusEnumType.Wait, + Version = 0, + ResultMessage = null, + Source = "手动分配额外权限", + Priority = 0, + TenantId = device.TenantId + }); + } + } + + await _dbContext.DeleteAsync(data); + } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index 144508a2..032787e1 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -256,7 +256,7 @@ public class GainfoService : IGainfoService await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete, null, request.Reason); - await _dbContext.Deleteable().Where(x => x.UserNo != gainfo.No).ExecuteCommandAsync(); + await _dbContext.Deleteable().Where(x => x.UserNo == gainfo.No).ExecuteCommandAsync(); await _dbContext.Deleteable().Where(x => x.AssignType == AssignTypeEnumType.User && x.AssignValue == gainfo.No).ExecuteCommandAsync(); //先写入离职表 diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs index 0f467016..50a410a9 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs @@ -302,7 +302,7 @@ public class GainfoUpdateService : IGainfoUpdateService await _dbContext.Client.Insertable(gainfo).AS("GainfoLeave").ExecuteCommandAsync(); } - await _dbContext.Deleteable().Where(x => x.UserNo != gainfo.No).ExecuteCommandAsync(); + await _dbContext.Deleteable().Where(x => x.UserNo == gainfo.No).ExecuteCommandAsync(); await _dbContext.Deleteable().Where(x => x.AssignType == AssignTypeEnumType.User && x.AssignValue == gainfo.No).ExecuteCommandAsync(); gainfo.Id = gainfo.IdentityUserId; diff --git a/Src/Dlhis.Entity/Device/Entities/DevicePermissionManuallyEntity.cs b/Src/Dlhis.Entity/Device/Entities/DevicePermissionManuallyEntity.cs new file mode 100644 index 00000000..e61a1f73 --- /dev/null +++ b/Src/Dlhis.Entity/Device/Entities/DevicePermissionManuallyEntity.cs @@ -0,0 +1,23 @@ +using Dlhis.DataPermission.Model; +using Kurisu.AspNetCore.DataAccess.Entity; +using Kurisu.AspNetCore.DataAccess.SqlSugar; +using SqlSugar; + +namespace Dlhis.Entity.Device.Entities; + +/// +/// 设备权限(手动) +/// +[SugarTable(TableName = "DevicePermissionManually")] +public class DevicePermissionManuallyEntity : SugarBaseEntity, ISoftDeleted +{ + [DeviceCode] + [SugarColumn(IsNullable = false)] + public Guid DeviceCode { get; set; } + + [SugarColumn(IsNullable = false)] + public string UserNo { get; set; } + + /// + public bool IsDeleted { get; set; } +} \ No newline at end of file