Browse Source

[MODIFY]单位管理功能新增时增加limit字段的填充,删除单位时,修改父级单位的limit

dev_wp
zhaozhenjing 3 months ago
parent
commit
a392df1ccb
  1. 7
      src/1.datas/ATS.NonCustodial.Domain/Entities/Admins/App_Unitcode.cs
  2. 78
      src/2.services/ATS.NonCustodial.Application/Impl/Admins/UnitcodeService.cs

7
src/1.datas/ATS.NonCustodial.Domain/Entities/Admins/App_Unitcode.cs

@ -52,6 +52,13 @@ namespace ATS.NonCustodial.Domain.Entities.Admins
/// </summary>
[MaxLength(StringLengthConstants.StringLength255)]
public string? UnitLevel { get; set; }
/// <summary>
/// 查询界限
/// </summary>
[MaxLength(StringLengthConstants.StringLength2048)]
public string? Limits { get; set; }
/// <summary>
/// 单位简称
/// </summary>

78
src/2.services/ATS.NonCustodial.Application/Impl/Admins/UnitcodeService.cs

@ -2,23 +2,17 @@
using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.Unitcode;
using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.Unitcode.Input;
using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.Unitcode.Output;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.MaterialManager.Template.Input;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.MaterialManager.Template.Output;
using ATS.NonCustodial.Domain.Entities.Admins;
using ATS.NonCustodial.Domain.Entities.Business.MaterialManager;
using ATS.NonCustodial.Domain.Shared.AggRootEntities;
using ATS.NonCustodial.Domain.Shared.AggRootEntities.Dtos;
using ATS.NonCustodial.Domain.Shared.OrmRepositories.Basic.EfCore;
using ATS.NonCustodial.DynamicApi;
using ATS.NonCustodial.DynamicApi.Attributes;
using ATS.NonCustodial.Shared.Common.Attributes;
using ATS.NonCustodial.Shared.Common.Enums;
using ATS.NonCustodial.Shared.Common.UnifiedResults;
using ATS.NonCustodial.Shared.Extensions;
using ATS.NonCustodial.Shared.Extensions.AdvancedQuery;
using AutoMapper.QueryableExtensions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using SixLabors.ImageSharp.Drawing;
using Yitter.IdGenerator;
namespace ATS.NonCustodial.Application.Impl.Admins
@ -300,14 +294,27 @@ namespace ATS.NonCustodial.Application.Impl.Admins
{
if (_appUnitcodeRepository.AsQueryable(false, true).Where(q => q.UnitCode == input.UnitCode).Any())
{
if (input.Stat == 0)
return ResultOutput.NotOk("机构编码已存在");
else
return ResultOutput.NotOk("单位编码已存在");
return input.Stat == 0 ? ResultOutput.NotOk("机构编码已存在") : ResultOutput.NotOk("单位编码已存在");
}
var entity = Mapper.Map<App_Unitcode>(input);
entity.Id = YitIdHelper.NextId();
entity.Limits = entity.Id.ToString();
var App_Unitcode = await _appUnitcodeRepository.InsertAsync(entity);
//添加父级单位权限
if (entity.ParentUnitCode.HasValue)
{
var idList = GetParentUnitIdList((long)entity.ParentUnitCode);
idList.Add((long)entity.ParentUnitCode);
for (int i = 0; i < idList.Count; i++)
{
var parentunit = await _appUnitcodeRepository.FindAsync(idList[i]);
if (parentunit != null)
{
parentunit.Limits += "," + entity.Id;
await _appUnitcodeRepository.UpdateAsync(parentunit);
}
}
}
return ResultOutput.Result(App_Unitcode.Id > 0);
}
@ -345,15 +352,39 @@ namespace ATS.NonCustodial.Application.Impl.Admins
{
for (int i = 0; i < input.Ids.Count; i++)
{
//获取该单位下的所有子单位id
var idlist = GetUnitIdList(input.Ids[i]);
//校验该单位下是否存在用户账户
if (_userRepository.AsQueryable(false, true).Where(q => idlist.Contains(q.UnitId ?? -1)).Any())
{
return ResultOutput.NotOk("该单位下存在用户账户,无法删除");
}
var idParentList = GetParentUnitIdList(input.Ids[i]);
//删除
await _appUnitcodeRepository.DeleteAsync(w => idlist.Contains(w.Id));
//获取该单位的所有父级单位id
for (int j = 0; j < idParentList.Count; j++)
{
var parentunit = await _appUnitcodeRepository.FindAsync(idParentList[j]);
if (parentunit != null)
{
// 步骤1:统一分隔符并分割字符串
var numbers = parentunit.Limits
.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) // 按英文逗号分割
.Select(s => long.Parse(s.Trim())); // 转换为整数并去除空格
// 步骤2:过滤掉存在于 filterList 中的数字
var filteredNumbers = numbers.Where(n => !idlist.Contains(n)).ToList();
// 步骤3:重新拼接为字符串
string result = string.Join(",", filteredNumbers);
parentunit.Limits = result;
await _appUnitcodeRepository.UpdateAsync(parentunit);
}
}
}
//删除
// await _appUnitcodeRepository.DeleteAsync(w => input.Ids.Contains(w.Id));
@ -382,6 +413,27 @@ namespace ATS.NonCustodial.Application.Impl.Admins
}
return idList;
}
/// <summary>
/// 递归查找该单位的所有父级单位
/// </summary>
/// <param name="unitId">单位id</param>
/// <returns>单位id集合</returns>
private List<long> GetParentUnitIdList(long unitId)
{
List<long> idList = new List<long>();
var unitlist = _appUnitcodeRepository.AsQueryable(false, true).Where(q => q.Id == unitId).ToList();
foreach (var item in unitlist)
{
if (item != null && item.ParentUnitCode.HasValue)
{
idList.Add((long)item.ParentUnitCode);
var idlist = GetParentUnitIdList((long)item.ParentUnitCode);
idList.AddRange(idlist);
}
}
return idList;
}
#region Private
/// <summary>

Loading…
Cancel
Save