feat 外包人员下发配置
This commit is contained in:
@@ -443,6 +443,7 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
|
||||
var gainfo = await _dbContext.Queryable<GainfoEntity>().Where(x => x.No == userNo).SingleAsync()
|
||||
?? await _dbContext.Queryable<GainfoEntity>().AS("GainfoLeave").Where(x => x.No == userNo).SingleAsync();
|
||||
|
||||
var gainfoGroups = await _dbContext.Queryable<GainfoGroupRelationshipEntity>().ToListAsync();
|
||||
|
||||
var devicePermissions = await _dbContext.Queryable<DevicePermissionEntity>().ToListAsync();
|
||||
@@ -451,7 +452,25 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
var deviceRelationships = await _dbContext.Queryable<DeviceGroupRelationshipEntity>().Where(x => deviceGroupCodes.Contains(x.GroupCode)).ToListAsync();
|
||||
var departments = await _dbContext.Queryable<DepartmentEntity>().ToListAsync();
|
||||
|
||||
var result = GetAssignDeviceCodesInternal(gainfo, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships, deviceRegistries, devices, departments);
|
||||
|
||||
var isOutsource = await _dbContext.Queryable<OutsourceEntity>().AnyAsync(x => x.Code == gainfo.Code);
|
||||
|
||||
var enableFactoryPermissions = await _dbContext.Queryable<OutsourceSettingEntity>().ToListAsync();
|
||||
|
||||
var gainfoDto = new GainfoDto
|
||||
{
|
||||
Id = gainfo.Id,
|
||||
No = gainfo.No,
|
||||
Code = gainfo.Code,
|
||||
Name = gainfo.Name,
|
||||
Workplace = gainfo.Workplace,
|
||||
Factory = gainfo.Factory,
|
||||
DepartmentNo = gainfo.DepartmentNo,
|
||||
IsOutsource = isOutsource,
|
||||
EnableFactoryPermission = enableFactoryPermissions.FirstOrDefault(x => x.TenantId == gainfo.Factory)?.EnableFactory ?? true
|
||||
};
|
||||
|
||||
var result = GetAssignDeviceCodesInternal(gainfoDto, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships, deviceRegistries, devices, departments);
|
||||
return result.SelectMany(x => x.Codes).ToList();
|
||||
}
|
||||
|
||||
@@ -503,7 +522,6 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
|
||||
return userNos.Concat(userNosByGroup).Concat(userNosByDepartment).Concat(userNosByWerk).Distinct().ToList();
|
||||
|
||||
|
||||
void RecursionGetNextAllDepartment(string current, List<DepartmentEntity> data, HashSet<string> result)
|
||||
{
|
||||
var next = data.Where(x => x.PNo == current);
|
||||
@@ -603,6 +621,14 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
return new Dictionary<string, List<UserTenantDeviceCodeDto>>();
|
||||
}
|
||||
|
||||
var outsourceCodes = await _dbContext.Queryable<GainfoEntity>()
|
||||
.Where(x => userNos.Contains(x.No))
|
||||
.Where(x => SqlFunc.Subqueryable<OutsourceEntity>().Where(p => p.Code == x.Code).Any())
|
||||
.Select(x => x.Code)
|
||||
.ToListAsync();
|
||||
|
||||
var enableFactoryPermissions = await _dbContext.Queryable<OutsourceSettingEntity>().ToListAsync();
|
||||
|
||||
var gainfoGroupRelationships = await _dbContext.Queryable<GainfoGroupRelationshipEntity>().Where(x => userNos.Contains(x.UserNo)).ToListAsync();
|
||||
var devicePermissions = await _dbContext.Queryable<DevicePermissionEntity>().ToListAsync();
|
||||
var deviceGroups = await _dbContext.Queryable<DeviceGroupEntity>().ToListAsync();
|
||||
@@ -612,7 +638,20 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
var result = new Dictionary<string, List<UserTenantDeviceCodeDto>>(gainfos.Count, StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var gainfo in gainfos)
|
||||
{
|
||||
var codes = GetAssignDeviceCodesInternal(gainfo, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships, registries, devices, departments);
|
||||
var gainfoDto = new GainfoDto
|
||||
{
|
||||
Id = gainfo.Id,
|
||||
No = gainfo.No,
|
||||
Code = gainfo.Code,
|
||||
Name = gainfo.Name,
|
||||
Workplace = gainfo.Workplace,
|
||||
Factory = gainfo.Factory,
|
||||
DepartmentNo = gainfo.DepartmentNo,
|
||||
IsOutsource = outsourceCodes.Any(x => x == gainfo.Code),
|
||||
EnableFactoryPermission = enableFactoryPermissions.FirstOrDefault(x => x.TenantId == gainfo.Factory)?.EnableFactory ?? true
|
||||
};
|
||||
|
||||
var codes = GetAssignDeviceCodesInternal(gainfoDto, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships, registries, devices, departments);
|
||||
result.Add(gainfo.No, codes);
|
||||
}
|
||||
|
||||
@@ -620,7 +659,7 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
}
|
||||
|
||||
private static List<UserTenantDeviceCodeDto> GetAssignDeviceCodesInternal(
|
||||
GainfoEntity gainfo,
|
||||
GainfoDto gainfo,
|
||||
List<GainfoGroupRelationshipEntity> gainfoGroupRelationships,
|
||||
List<DevicePermissionEntity> devicePermissions,
|
||||
List<DeviceGroupEntity> deviceGroups,
|
||||
@@ -628,7 +667,14 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
List<DeviceRegistryEntity> deviceRegistries,
|
||||
List<DeviceEntity> devices, List<DepartmentEntity> departments)
|
||||
{
|
||||
if (gainfo.IsOutsource)
|
||||
{
|
||||
//外包人员只允许门禁
|
||||
devices = devices.Where(x => x.Type == DeviceTypeEnumType.Door).ToList();
|
||||
}
|
||||
|
||||
var userNo = gainfo.No;
|
||||
|
||||
var deviceDtos = new List<UserTenantDeviceCodeDto>();
|
||||
var deviceGroupDtos = new List<UserTenantDeviceCodeDto>();
|
||||
var businessPlaceDtos = new List<UserTenantDeviceCodeDto>();
|
||||
@@ -666,12 +712,15 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
businessPlaceDtos.AddRange(pd);
|
||||
|
||||
//按厂区
|
||||
var dt = GetAssignCodesInternal(devicePermissions, deviceGroups, departments, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Factory);
|
||||
var gt = GetAssignCodesInternal(devicePermissions, deviceGroups, departments, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Factory);
|
||||
var pt = GetAssignCodesInternal(devicePermissions, deviceGroups, departments, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.Tenant, gainfo.Factory);
|
||||
deviceDtos.AddRange(dt);
|
||||
deviceGroupDtos.AddRange(gt);
|
||||
businessPlaceDtos.AddRange(pt);
|
||||
if (!gainfo.IsOutsource || gainfo.EnableFactoryPermission)
|
||||
{
|
||||
var dt = GetAssignCodesInternal(devicePermissions, deviceGroups, departments, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Factory);
|
||||
var gt = GetAssignCodesInternal(devicePermissions, deviceGroups, departments, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Factory);
|
||||
var pt = GetAssignCodesInternal(devicePermissions, deviceGroups, departments, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.Tenant, gainfo.Factory);
|
||||
deviceDtos.AddRange(dt);
|
||||
deviceGroupDtos.AddRange(gt);
|
||||
businessPlaceDtos.AddRange(pt);
|
||||
}
|
||||
|
||||
var deviceGroupCodes = deviceGroupDtos.SelectMany(x => x.Codes).Distinct().ToList();
|
||||
var businessPlaceCodes = businessPlaceDtos.SelectMany(x => x.Codes).Distinct().ToList();
|
||||
@@ -700,10 +749,17 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
deviceDtos.AddRange(deviceCodesByGroup);
|
||||
deviceDtos.AddRange(placeGroup);
|
||||
|
||||
return deviceDtos.GroupBy(x => x.Tenant).Select(x => new UserTenantDeviceCodeDto
|
||||
return deviceDtos.GroupBy(x => x.Tenant).Select(x =>
|
||||
{
|
||||
Tenant = x.Key,
|
||||
Codes = x.SelectMany(item => item.Codes).Distinct().ToList()
|
||||
var dto = new UserTenantDeviceCodeDto
|
||||
{
|
||||
Tenant = x.Key,
|
||||
Codes = x.SelectMany(item => item.Codes).Distinct().ToList()
|
||||
};
|
||||
|
||||
dto.Codes = dto.Codes.Where(p => devices.Any(item => item.Code == p)).ToList();
|
||||
|
||||
return dto;
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using Dlhis.Basic.Device.Filters;
|
||||
using Dlhis.Basic.Organization.Request;
|
||||
using Dlhis.Basic.Organization.Services;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Dlhis.Basic.Organization.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// 外包人员配置
|
||||
/// </summary>
|
||||
[Authorize]
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
public class GainfoOutsourceSettingController : ControllerBase
|
||||
{
|
||||
private readonly IGainfoOutsourceSettingService _gainfoOutSourceService;
|
||||
|
||||
public GainfoOutsourceSettingController(IGainfoOutsourceSettingService gainfoOutSourceService)
|
||||
{
|
||||
_gainfoOutSourceService = gainfoOutSourceService;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 保存配置
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
[HttpPost("save")]
|
||||
[AssignPermissionLimit]
|
||||
[Transactional]
|
||||
[DataPermission]
|
||||
public async Task SaveAsync(GainfoOutsourceSettingSaveRequest request)
|
||||
{
|
||||
await _gainfoOutSourceService.SaveAsync(request);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前厂区配置
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("current")]
|
||||
public async Task<object> GetSettingAsync()
|
||||
{
|
||||
return await _gainfoOutSourceService.GetSettingAsync();
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,16 @@
|
||||
public class GainfoDto
|
||||
{
|
||||
public long Id { get; set; }
|
||||
|
||||
public string No { get; set; }
|
||||
|
||||
public string Code { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Workplace { get; set; }
|
||||
public string Factory { get; set; }
|
||||
|
||||
public string DepartmentNo { get; set; }
|
||||
|
||||
public bool IsOutsource { get; set; }
|
||||
public bool EnableFactoryPermission { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Dlhis.Basic.Organization.Request;
|
||||
|
||||
public class GainfoOutsourceSettingSaveRequest
|
||||
{
|
||||
public long? Id { get; set; }
|
||||
|
||||
public bool EnableFactory { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Dlhis.Basic.Organization.Request;
|
||||
|
||||
namespace Dlhis.Basic.Organization.Services;
|
||||
|
||||
public interface IGainfoOutsourceSettingService : IScopeDependency
|
||||
{
|
||||
Task SaveAsync(GainfoOutsourceSettingSaveRequest request);
|
||||
|
||||
Task<object> GetSettingAsync();
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
using Dlhis.Basic.Device.Services;
|
||||
using Dlhis.Basic.Organization.Request;
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Kurisu.AspNetCore.Authentication.Abstractions;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Dlhis.Basic.Organization.Services.Implements;
|
||||
|
||||
public class GainfoOutsourceSettingService : IGainfoOutsourceSettingService
|
||||
{
|
||||
private readonly IDbContext _dbContext;
|
||||
private readonly ICurrentUser _currentUser;
|
||||
private readonly IDevicePermissionService _devicePermissionService;
|
||||
|
||||
public GainfoOutsourceSettingService(IDbContext dbContext, ICurrentUser currentUser, IDevicePermissionService devicePermissionService)
|
||||
{
|
||||
_dbContext = dbContext;
|
||||
_currentUser = currentUser;
|
||||
_devicePermissionService = devicePermissionService;
|
||||
}
|
||||
|
||||
public async Task SaveAsync(GainfoOutsourceSettingSaveRequest request)
|
||||
{
|
||||
var userNos = await _dbContext.Queryable<GainfoEntity>()
|
||||
.Where(x => SqlFunc.Subqueryable<OutsourceEntity>().Where(p => p.Code == x.Code).Any())
|
||||
.Select(x => x.No)
|
||||
.ToListAsync();
|
||||
|
||||
await _devicePermissionService.GenerateDeviceTasksAsync(async () =>
|
||||
{
|
||||
var currentTenantId = _currentUser.GetStringTenantId();
|
||||
|
||||
(!request.Id.HasValue && await _dbContext.Queryable<OutsourceSettingEntity>()
|
||||
.Where(x => x.TenantId == currentTenantId)
|
||||
.AnyAsync()).ThrowIfTrue("保存失败,请检查参数");
|
||||
|
||||
if (!request.Id.HasValue)
|
||||
{
|
||||
var entity = new OutsourceSettingEntity
|
||||
{
|
||||
EnableFactory = request.EnableFactory,
|
||||
TenantId = currentTenantId
|
||||
};
|
||||
|
||||
await _dbContext.InsertAsync(entity);
|
||||
}
|
||||
else
|
||||
{
|
||||
var entity = await _dbContext.Queryable<OutsourceSettingEntity>().Where(x => x.Id == request.Id).SingleAsync();
|
||||
entity.ThrowIfNull("数据不存在,保存失败");
|
||||
|
||||
entity.EnableFactory = request.EnableFactory;
|
||||
|
||||
await _dbContext.UpdateAsync(entity);
|
||||
}
|
||||
}, userNos);
|
||||
}
|
||||
|
||||
|
||||
public async Task<object> GetSettingAsync()
|
||||
{
|
||||
var currentTenantId = _currentUser.GetStringTenantId();
|
||||
return await _dbContext.Queryable<OutsourceSettingEntity>().Where(x => x.TenantId == currentTenantId).Select(x => new
|
||||
{
|
||||
x.Id,
|
||||
x.EnableFactory
|
||||
}).SingleAsync();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user