diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
index 0efd2afc..aedb02e5 100644
--- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
+++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
@@ -20,12 +20,12 @@ public class DevicePermissionsController : ControllerBase
///
/// 分配权限
///
- ///
+ ///
///
[HttpPost("assign")]
- public async Task AssignmentAsync(List requests)
+ public async Task AssignAsync(DevicePermissionSaveReuqest request)
{
- await _devicePermissionService.AssignmentAsync(requests);
+ await _devicePermissionService.AssignAsync(request);
}
///
@@ -36,18 +36,6 @@ public class DevicePermissionsController : ControllerBase
[HttpGet("assignments")]
public async Task> GetAssignmentsAsync([FromQuery] DeviceGetAssignmentsRequest request)
{
- return await _devicePermissionService.GetAssignmentsAsync(request.UserNo, request.UniqueType);
- }
-
-
- ///
- /// 重置
- ///
- ///
- ///
- [HttpPost("reset")]
- public async Task ResetAssignmentsAsync(DeviceResetAssignmentsRequest request)
- {
- await _devicePermissionService.ResetAssignmentsAsync(request);
+ return await _devicePermissionService.GetAssignmentsAsync(request.UniqueType, request.AssignType, request.AssignValue);
}
}
diff --git a/Src/Dlhis.Basic/Device/Request/DeviceGetAssignmentsRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceGetAssignmentsRequest.cs
index f4974b17..9d4f4114 100644
--- a/Src/Dlhis.Basic/Device/Request/DeviceGetAssignmentsRequest.cs
+++ b/Src/Dlhis.Basic/Device/Request/DeviceGetAssignmentsRequest.cs
@@ -6,14 +6,19 @@ namespace Dlhis.Basic.Device.Request;
public class DeviceGetAssignmentsRequest
{
///
- /// 用户档案号
- ///
- [Required]
- public string UserNo { get; set; }
-
- ///
- /// 权限分配类型 MenuAssignmentTypeEnumType
+ /// 权限分配类型 DeviceAssignmentTypeEnumType
///
[EnumDataType(typeof(DeviceAssignmentTypeEnumType))]
public DeviceAssignmentTypeEnumType UniqueType { get; set; }
+
+ ///
+ /// 分配类型 AssignTypeEnumType
+ ///
+ [EnumDataType(typeof(AssignTypeEnumType))]
+ public AssignTypeEnumType AssignType { get; set; }
+
+ ///
+ /// 分配值
+ ///
+ public string AssignValue { get; set; }
}
diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
index e115b57d..5bca130a 100644
--- a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
+++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
@@ -5,14 +5,20 @@ namespace Dlhis.Basic.Device.Request;
public class DevicePermissionSaveReuqest
{
+ ///
+ /// 分配类型 AssignTypeEnumType
+ ///
+ [EnumDataType(typeof(AssignTypeEnumType), ErrorMessage = "枚举类型错误")]
+ public AssignTypeEnumType AssignType { get; set; }
+
///
/// 人员档案号
///
[Required(ErrorMessage = "人员档案号不能为空")]
- public string UserNo { get; set; }
+ public string AssignValue { get; set; }
///
- /// 分配权限类型 DevicePermissionTypeEnumType
+ /// 来源分配权限类型 DevicePermissionTypeEnumType
///
[EnumDataType(typeof(DeviceAssignmentTypeEnumType), ErrorMessage = "枚举类型错误")]
public DeviceAssignmentTypeEnumType UniqueType { get; set; }
@@ -20,6 +26,5 @@ public class DevicePermissionSaveReuqest
///
/// 分配权限值不能为空
///
- [Required(ErrorMessage = "分配权限值不能为空")]
- public Guid UniqueValue { get; set; }
+ public List Codes { get; set; } = new List();
}
diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
index 8c75e764..b88bd079 100644
--- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
@@ -8,24 +8,18 @@ public interface IDevicePermissionService : IScopeDependency
///
/// 保存设备权限
///
- ///
+ ///
///
- Task AssignmentAsync(List reuqests);
+ Task AssignAsync(DevicePermissionSaveReuqest reuqest);
///
/// 获取分配的权限
///
- ///
///
+ ///
+ ///
///
- Task> GetAssignmentsAsync(string userNo, DeviceAssignmentTypeEnumType? uniqueType);
-
-
- ///
- /// 重置分配
- ///
- ///
- Task ResetAssignmentsAsync(DeviceResetAssignmentsRequest request);
+ Task> GetAssignmentsAsync(DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue);
///
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
index 3798ede7..e1f52e36 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
@@ -20,81 +20,66 @@ public class DevicePermissionService : IDevicePermissionService
}
[Transactional]
- public async Task AssignmentAsync(List reuqests)
+ public async Task AssignAsync(DevicePermissionSaveReuqest reuqest)
{
- foreach (var grp in reuqests.GroupBy(x => x.UserNo))
+ await GenerateDeviceTasksAsync(async () =>
{
- var userNo = grp.Key;
- var data = grp.AsEnumerable().DistinctBy(x => x.UniqueValue).ToList();
+ await _dbContext.Client.Deleteable()
+ .Where(x => x.AssignType == reuqest.AssignType)
+ .Where(x => x.AssignValue == reuqest.AssignValue)
+ .ExecuteCommandAsync();
- await GenerateDeviceTasksAsync(async () =>
+ var devicePermissions = reuqest.Codes.Select(x => new DevicePermissionEntity
{
- await _dbContext.Client.Deleteable()
- .Where(x => x.UserNo == userNo)
- .ExecuteCommandAsync();
+ AssignType = reuqest.AssignType,
+ AssignValue = reuqest.AssignValue,
+ UniqueType = reuqest.UniqueType,
+ UniqueValue = x,
+ }).ToList();
- var devicePermissions = data.Select(x => new DevicePermissionEntity
- {
- UserNo = x.UserNo,
- UniqueType = x.UniqueType,
- UniqueValue = x.UniqueValue,
+ await _dbContext.InsertAsync(devicePermissions);
- }).ToList();
-
- await _dbContext.InsertAsync(devicePermissions);
-
- }, new List { userNo });
- };
+ }, null);
}
- public async Task> GetAssignmentsAsync(string userNo, DeviceAssignmentTypeEnumType? uniqueType)
+ public async Task> GetAssignmentsAsync(DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue)
{
- var assignments = await _dbContext.Queryable()
- .WhereIF(uniqueType.HasValue, x => x.UniqueType == uniqueType)
- .Where(x => x.UserNo == userNo)
+ var devicePermissions = await _dbContext.Queryable()
+ .Where(x => x.UniqueType == uniqueType)
+ .Where(x => x.AssignType == assignType)
+ .Where(x => x.AssignValue == assignValue)
.Select(x => x.UniqueValue)
.ToListAsync();
- if (uniqueType.HasValue && uniqueType == DeviceAssignmentTypeEnumType.Group)
+ if (uniqueType == DeviceAssignmentTypeEnumType.Group)
{
var deviceGroups = await _dbContext.Queryable().ToListAsync();
var tops = deviceGroups.Where(x => !x.PCode.HasValue).ToList();
tops.ForEach(x =>
{
- RecursionGetNext(x, deviceGroups, assignments, assignments.Contains(x.Code));
+ RecursionGetNext(x, deviceGroups, devicePermissions, devicePermissions.Contains(x.Code));
});
}
- return assignments.Distinct().ToList();
+ return devicePermissions.Distinct().ToList();
void RecursionGetNext(DeviceGroupEntity current, List deviceGroups, List result, bool add)
{
var next = deviceGroups.Where(x => x.PCode == current.Code).ToList();
foreach (var item in next)
{
- if (add) assignments.Add(item.Code);
- RecursionGetNext(item, deviceGroups, result, assignments.Contains(item.Code));
+ if (add) result.Add(item.Code);
+ RecursionGetNext(item, deviceGroups, result, result.Contains(item.Code));
}
}
}
- public async Task ResetAssignmentsAsync(DeviceResetAssignmentsRequest request)
- {
- await GenerateDeviceTasksAsync(async () =>
- {
- await _dbContext.Client.Deleteable()
- .Where(x => x.UserNo == request.UserNo)
- .ExecuteCommandAsync();
-
- }, new List { request.UserNo });
- }
-
public async Task GenerateDeviceTasksAsync(Func func, List userNos)
{
if (userNos.IsEmpty())
{
- userNos = await _dbContext.Queryable().Select(x => x.UserNo).Distinct().ToListAsync();
+ userNos = await GetPermissionUserNosAsync();
}
var beforeDic = new Dictionary>(userNos.Count);
@@ -108,6 +93,7 @@ public class DevicePermissionService : IDevicePermissionService
//获取当前的权限code
var currentDic = new Dictionary>(userNos.Count);
+ userNos = await GetPermissionUserNosAsync();
foreach (var userNo in userNos)
{
currentDic.TryAdd(userNo, await GetAssignDeviceCodesAsync(userNo));
@@ -115,8 +101,11 @@ public class DevicePermissionService : IDevicePermissionService
foreach (var userNo in userNos)
{
- var beforeCodes = beforeDic[userNo];
- var currentCodes = currentDic[userNo];
+ beforeDic.TryGetValue(userNo, out var beforeCodes);
+ if (beforeCodes == null) beforeCodes = new List();
+
+ currentDic.TryGetValue(userNo, out var currentCodes);
+ if (currentCodes == null) currentCodes = new List();
//被删除
var deletedItems = beforeCodes.Where(x => !currentCodes.Contains(x)).ToList();
@@ -171,6 +160,32 @@ public class DevicePermissionService : IDevicePermissionService
//************************************************ help methods *******************************************************
+ private async Task> GetPermissionUserNosAsync()
+ {
+ var permissions = await _dbContext.Queryable().ToListAsync();
+ //User
+ var userNos = permissions.Where(x => x.AssignType == AssignTypeEnumType.User).Select(x => x.AssignValue).ToList();
+
+ //Group
+ var groupCode = permissions.Where(x => x.AssignType == AssignTypeEnumType.Group).Select(x => Guid.Parse(x.AssignValue)).ToList();
+ var userNosByGroup = await _dbContext.Queryable()
+ .Where(x => groupCode.Contains(x.GroupCode))
+ .Select(x => x.UserNo)
+ .ToListAsync();
+
+ //Department
+ var departmentNos = permissions.Where(x => x.AssignType == AssignTypeEnumType.Department).Select(x => x.AssignValue).ToList();
+ var userNosByDepartment = await _dbContext.Queryable().Where(x => departmentNos.Contains(x.DepartmentNo)).Select(x => x.No).ToListAsync();
+
+ //Tenant
+ var tenants = permissions.Where(x => x.AssignType == AssignTypeEnumType.Tenant).Select(x => x.AssignValue).ToList();
+ var userNosByWerk = await _dbContext.Queryable().Where(x => tenants.Contains(x.Werks)).Select(x => x.No).ToListAsync();
+
+
+ return userNos.Concat(userNosByGroup).Concat(userNosByDepartment).Concat(userNosByWerk).ToList();
+ }
+
+
///
/// 获取用户所有设备权限
///
@@ -178,17 +193,37 @@ public class DevicePermissionService : IDevicePermissionService
///
private async Task> GetAssignDeviceCodesAsync(string userNo)
{
- var deviceCodes = await GetAssignmentsAsync(userNo, DeviceAssignmentTypeEnumType.Device);
+ var gainfo = await _dbContext.Queryable().Where(x => x.No == userNo).SingleAsync();
+ var gainfoGroups = await _dbContext.Queryable().Where(x => x.UserNo == userNo).Select(x => x.GroupCode).ToListAsync();
- var groupCodes = await GetAssignmentsAsync(userNo, DeviceAssignmentTypeEnumType.Group);
- var deviceCodeUnderGroups = await _dbContext.Queryable()
- .Where(x => groupCodes.Contains(x.GroupCode))
- .Select(x => x.DeviceCode)
- .Distinct()
- .ToListAsync();
+ var deviceCodes = new List();
+ var deviceGroupCodes = new List();
- deviceCodes.AddRange(deviceCodeUnderGroups);
+ var du = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo);
+ var gu = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo);
+ deviceCodes.AddRange(du);
+ deviceGroupCodes.AddRange(gu);
+ foreach (var group in gainfoGroups)
+ {
+ var dg = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, group.ToString());
+ var gg = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Group, group.ToString());
+ deviceCodes.AddRange(dg);
+ deviceGroupCodes.AddRange(gg);
+ }
+
+ var dd = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo);
+ var gd = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo);
+ deviceCodes.AddRange(dd);
+ deviceGroupCodes.AddRange(gd);
+
+ var dt = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Werks);
+ var gt = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Werks);
+ deviceCodes.AddRange(du);
+ deviceGroupCodes.AddRange(gu);
+
+ var deveiceCodesByGroup = await _dbContext.Queryable().Where(x => deviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToListAsync();
+ deviceCodes.AddRange(deveiceCodesByGroup);
return deviceCodes.Distinct().ToList();
}
diff --git a/Src/Dlhis.Basic/Dlhis.Basic.csproj b/Src/Dlhis.Basic/Dlhis.Basic.csproj
index 2d3bb2ea..ddf7fbde 100644
--- a/Src/Dlhis.Basic/Dlhis.Basic.csproj
+++ b/Src/Dlhis.Basic/Dlhis.Basic.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs
new file mode 100644
index 00000000..b578cf1a
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs
@@ -0,0 +1,80 @@
+using Dlhis.Basic.Organization.Request;
+using Dlhis.Basic.Organization.Response;
+using Dlhis.Basic.Organization.Services;
+using Kurisu.AspNetCore.MVC;
+using Kurisu.Core.DataAccess.Dto;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Dlhis.Basic.Organization.Controllers;
+
+///
+/// 档案分组
+///
+[Authorize]
+[ApiDefinition("SAP", Description = "晶科sap组织架构信息")]
+[Route("api/[controller]")]
+[ApiController]
+public class GainfoGroupsController : ControllerBase
+{
+ private readonly IGainfoGroupService _gainfoGroupService;
+
+ public GainfoGroupsController(IGainfoGroupService gainfoGroupService)
+ {
+ _gainfoGroupService = gainfoGroupService;
+ }
+
+ ///
+ /// 获取档案组分页
+ ///
+ ///
+ ///
+ [HttpGet("page")]
+ public async Task> GetPageAsync([FromQuery] GainfoGroupPageRequest request)
+ {
+ return await _gainfoGroupService.GetPageAsync(request);
+ }
+
+ ///
+ /// 获取所有档案组
+ ///
+ ///
+ [HttpGet("list")]
+ public async Task> GetListAsync()
+ {
+ return await _gainfoGroupService.GetListAsync();
+ }
+
+ ///
+ /// 保存档案组
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task SaveAsync(GainfoGroupSaveRequest request)
+ {
+ await _gainfoGroupService.SaveAsync(request);
+ }
+
+ ///
+ /// 根据分组code获取人员档案
+ ///
+ ///
+ ///
+ [HttpGet("gainfos")]
+ public async Task> GetGainfosByGroupAsync(Guid code)
+ {
+ return await _gainfoGroupService.GetGainfosByGroupAsync(code);
+ }
+
+ ///
+ /// 分配人员
+ ///
+ ///
+ ///
+ [HttpPost("assign")]
+ public async Task AssignGainfosAsync(GainfoAssignRequest request)
+ {
+ await _gainfoGroupService.AssignGainfosAsync(request);
+ }
+}
diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs
index c18beb24..7c9fac1b 100644
--- a/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs
+++ b/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs
@@ -1,5 +1,4 @@
-using System.ComponentModel.DataAnnotations;
-using Dlhis.Basic.Organization.Filters;
+using Dlhis.Basic.Organization.Filters;
using Dlhis.Basic.Organization.Request;
using Dlhis.Basic.Organization.Response;
using Dlhis.Basic.Organization.Services;
@@ -65,7 +64,7 @@ public class GainfosController : ControllerBase
///
///
[HttpPost("dimission")]
- public async Task DimissionAsync(GainfoDImissionRequest request)
+ public async Task DimissionAsync(GainfoDimissionRequest request)
{
await _gainfoService.DimissionAsync(request);
}
@@ -76,7 +75,7 @@ public class GainfosController : ControllerBase
///
///
[HttpPost("onboarding")]
- public async Task OnboardingAsync(GainfoDImissionRequest request)
+ public async Task OnboardingAsync(GainfoDimissionRequest request)
{
await _gainfoService.OnboardingAsync(request);
}
diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoAssignRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoAssignRequest.cs
new file mode 100644
index 00000000..6741f83a
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Request/GainfoAssignRequest.cs
@@ -0,0 +1,17 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace Dlhis.Basic.Organization.Request;
+
+public class GainfoAssignRequest
+{
+ ///
+ /// 分组code
+ ///
+ [Required(ErrorMessage = "档案组code")]
+ public Guid GroupCode { get; set; }
+
+ ///
+ /// 档案号
+ ///
+ public List UserNos { get; set; } = new List();
+}
diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoDImissionRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoDImissionRequest.cs
index 6d56fcd7..320420f8 100644
--- a/Src/Dlhis.Basic/Organization/Request/GainfoDImissionRequest.cs
+++ b/Src/Dlhis.Basic/Organization/Request/GainfoDImissionRequest.cs
@@ -1,13 +1,12 @@
using System.ComponentModel.DataAnnotations;
-namespace Dlhis.Basic.Organization.Request
+namespace Dlhis.Basic.Organization.Request;
+
+public class GainfoDimissionRequest
{
- public class GainfoDImissionRequest
- {
- ///
- /// 档案号
- ///
- [Required(ErrorMessage = "档案号不能为空")]
- public string UserNo { get; set; }
- }
+ ///
+ /// 档案号
+ ///
+ [Required(ErrorMessage = "档案号不能为空")]
+ public string UserNo { get; set; }
}
diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoGroupPageRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoGroupPageRequest.cs
new file mode 100644
index 00000000..b38a161d
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Request/GainfoGroupPageRequest.cs
@@ -0,0 +1,7 @@
+using Kurisu.Core.DataAccess.Dto;
+
+namespace Dlhis.Basic.Organization.Request;
+
+public class GainfoGroupPageRequest: PageDto
+{
+}
diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoGroupSaveRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoGroupSaveRequest.cs
new file mode 100644
index 00000000..bb5173e4
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Request/GainfoGroupSaveRequest.cs
@@ -0,0 +1,16 @@
+namespace Dlhis.Basic.Organization.Request;
+
+public class GainfoGroupSaveRequest
+{
+ public long? Id { get; set; }
+
+ ///
+ /// 名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+}
diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs
index 495a329e..5f403df8 100644
--- a/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs
+++ b/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs
@@ -2,7 +2,7 @@
namespace Dlhis.Basic.Organization.Request;
-public class GainfoUploadFaceRequest
+public class GainfoUploadFaceRequest : IValidatableObject
{
///
/// 用户档案号
@@ -15,4 +15,22 @@ public class GainfoUploadFaceRequest
///
[Required(ErrorMessage = "人脸照片不能为空")]
public string Face { get; set; }
+
+ public IEnumerable Validate(ValidationContext validationContext)
+ {
+ bool v = true;
+ try
+ {
+ Convert.FromBase64String(Face);
+ }
+ catch (Exception)
+ {
+ v = false;
+ }
+
+ if (!v)
+ {
+ yield return new ValidationResult("人脸照片需要为Base64格式", new[] { nameof(Face) });
+ }
+ }
}
diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoGroupResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoGroupResponse.cs
new file mode 100644
index 00000000..c53fdec5
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Response/GainfoGroupResponse.cs
@@ -0,0 +1,19 @@
+namespace Dlhis.Basic.Organization.Response;
+
+public class GainfoGroupResponse
+{
+ ///
+ /// 分组code
+ ///
+ public Guid Code { get; set; }
+
+ ///
+ /// 名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+}
diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoGroupService.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoGroupService.cs
new file mode 100644
index 00000000..344f4dd1
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Services/IGainfoGroupService.cs
@@ -0,0 +1,18 @@
+using Dlhis.Basic.Organization.Request;
+using Dlhis.Basic.Organization.Response;
+using Kurisu.Core.DataAccess.Dto;
+
+namespace Dlhis.Basic.Organization.Services;
+
+public interface IGainfoGroupService : IScopeDependency
+{
+ Task> GetPageAsync(GainfoGroupPageRequest request);
+
+ Task> GetListAsync();
+
+ Task SaveAsync(GainfoGroupSaveRequest request);
+
+ Task> GetGainfosByGroupAsync(Guid code);
+
+ Task AssignGainfosAsync(GainfoAssignRequest request);
+}
diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoService.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoService.cs
index eff29b50..43c71e75 100644
--- a/Src/Dlhis.Basic/Organization/Services/IGainfoService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/IGainfoService.cs
@@ -13,9 +13,9 @@ public interface IGainfoService : IScopeDependency
Task UpdateAsync(GainfoSaveRequest request);
- Task DimissionAsync(GainfoDImissionRequest request);
+ Task DimissionAsync(GainfoDimissionRequest request);
- Task OnboardingAsync(GainfoDImissionRequest request);
+ Task OnboardingAsync(GainfoDimissionRequest request);
Task CurrentUserInfoAsync();
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs
new file mode 100644
index 00000000..a82c11f6
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs
@@ -0,0 +1,101 @@
+using Dlhis.Basic.Organization.Request;
+using Dlhis.Basic.Organization.Response;
+using Dlhis.Entity.Basic.Entity;
+using Kurisu.AspNetCore.Utils.Extensions;
+using Kurisu.Core.DataAccess.Dto;
+using Kurisu.SqlSugar.Extensions;
+using Kurisu.SqlSugar.Services;
+using Mapster;
+
+namespace Dlhis.Basic.Organization.Services.Implements;
+
+public class GainfoGroupService : IGainfoGroupService
+{
+ private readonly IDbContext _dbContext;
+
+ public GainfoGroupService(IDbContext dbContext)
+ {
+ _dbContext = dbContext;
+ }
+
+ public async Task> GetPageAsync(GainfoGroupPageRequest request)
+ {
+ return await _dbContext.Queryable()
+ .Select()
+ .ToPageListAsync(request);
+ }
+
+
+ public async Task> GetListAsync()
+ {
+ return await _dbContext.Queryable()
+ .Select()
+ .ToListAsync();
+ }
+
+ public async Task SaveAsync(GainfoGroupSaveRequest request)
+ {
+ await CheckDuplicateNameAsync(request);
+
+ if (!request.Id.HasValue)
+ {
+ var entity = request.Adapt();
+ entity.Code = Guid.NewGuid();
+ await _dbContext.InsertAsync(entity);
+ }
+ else
+ {
+ var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).SingleAsync();
+ request.Adapt(entity);
+
+ await _dbContext.UpdateAsync(entity);
+ }
+ }
+
+ public async Task> GetGainfosByGroupAsync(Guid code)
+ {
+ var userNos = await _dbContext.Queryable()
+ .Where(x => x.GroupCode == code)
+ .Select(x => x.UserNo)
+ .ToListAsync();
+
+ var list = await _dbContext.Queryable()
+ .Where(x => userNos.Contains(x.No))
+ .Select()
+ .ToListAsync();
+
+ return list;
+ }
+
+ public async Task AssignGainfosAsync(GainfoAssignRequest request)
+ {
+ var relations = await _dbContext.Queryable().Where(x => x.GroupCode == request.GroupCode).ToListAsync();
+ await _dbContext.DeleteReallyAsync(relations);
+
+ var entities = request.UserNos.Select(x => new GainfoGroupRelationshipEntity
+ {
+ GroupCode = request.GroupCode,
+ UserNo = x
+
+ }).ToList();
+
+ await _dbContext.InsertAsync(entities);
+ }
+
+ //******************************************************* help methods ***********************************************************
+
+ ///
+ /// 检查重名
+ ///
+ ///
+ ///
+ private async Task CheckDuplicateNameAsync(GainfoGroupSaveRequest request)
+ {
+ var exists = await _dbContext.Queryable()
+ .Where(x => x.Name == request.Name)
+ .WhereIF(request.Id.HasValue, x => x.Id != request.Id)
+ .AnyAsync();
+
+ exists.ThrowIfTrue($"重复组名{request.Name}");
+ }
+}
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
index 16c3c30a..bb7fb4eb 100644
--- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
@@ -87,7 +87,7 @@ public class GainfoService : IGainfoService
///
///
[Transactional]
- public async Task DimissionAsync(GainfoDImissionRequest request)
+ public async Task DimissionAsync(GainfoDimissionRequest request)
{
var gainfo = await _gainfoStore.Queryable(GainfoStatusEnumType.Working)
.Where(x => x.No == request.UserNo)
@@ -107,7 +107,7 @@ public class GainfoService : IGainfoService
///
///
///
- public async Task OnboardingAsync(GainfoDImissionRequest request)
+ public async Task OnboardingAsync(GainfoDimissionRequest request)
{
var gainfo = await _gainfoStore.Queryable(GainfoStatusEnumType.External)
.Where(x => x.No == request.UserNo)