diff --git a/src/1.datas/ATS.NonCustodial.Domain/Entities/Admins/App_Unitcode.cs b/src/1.datas/ATS.NonCustodial.Domain/Entities/Admins/App_Unitcode.cs
index faa7909..31116d1 100644
--- a/src/1.datas/ATS.NonCustodial.Domain/Entities/Admins/App_Unitcode.cs
+++ b/src/1.datas/ATS.NonCustodial.Domain/Entities/Admins/App_Unitcode.cs
@@ -52,6 +52,13 @@ namespace ATS.NonCustodial.Domain.Entities.Admins
///
[MaxLength(StringLengthConstants.StringLength255)]
public string? UnitLevel { get; set; }
+
+ ///
+ /// 查询界限
+ ///
+ [MaxLength(StringLengthConstants.StringLength2048)]
+ public string? Limits { get; set; }
+
///
/// 单位简称
///
diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Admins/UnitcodeService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Admins/UnitcodeService.cs
index c4aa07b..6c99467 100644
--- a/src/2.services/ATS.NonCustodial.Application/Impl/Admins/UnitcodeService.cs
+++ b/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
@@ -65,9 +59,9 @@ namespace ATS.NonCustodial.Application.Impl.Admins
///
///
[HttpGet]
- public async Task GetlistAsync(long stat,long mechanismId)
+ public async Task GetlistAsync(long stat, long mechanismId)
{
- var express =await _appUnitcodeRepository.AsQueryable(false, true).WhereIf(mechanismId>0,a=>a.mechanismId== mechanismId).Where(q=>q.Stat==stat).ToListAsync();
+ var express = await _appUnitcodeRepository.AsQueryable(false, true).WhereIf(mechanismId > 0, a => a.mechanismId == mechanismId).Where(q => q.Stat == stat).ToListAsync();
var rtnlist = new List();//返回结果
//foreach (var item in express.Where(q => q.ParentUnitCode == 0||q.ParentUnitCode == null))
//{
@@ -92,10 +86,10 @@ namespace ATS.NonCustodial.Application.Impl.Admins
public async Task GetPageAsync(UnitcodeGetPageDto input)
{
var rtnlist = new List();//五条件返回结果
- var express = GetExpression(input, _appUnitcodeRepository.AsQueryable(false, true).WhereIf(input.mechanismId.IsNotEmptyOrNull(), a=>a.mechanismId==input.mechanismId).Where(q => q.Stat == 1));
- if(express.Count()==0) return ResultOutput.Ok(rtnlist);
+ var express = GetExpression(input, _appUnitcodeRepository.AsQueryable(false, true).WhereIf(input.mechanismId.IsNotEmptyOrNull(), a => a.mechanismId == input.mechanismId).Where(q => q.Stat == 1));
+ if (express.Count() == 0) return ResultOutput.Ok(rtnlist);
if (!string.IsNullOrEmpty(input.name)) return ResultOutput.Ok(express);//有条件返回结果
- foreach (var item in await express.Where(q => q.ParentUnitCode == null|| q.ParentUnitCode == 0).ToArrayAsync())
+ foreach (var item in await express.Where(q => q.ParentUnitCode == null || q.ParentUnitCode == 0).ToArrayAsync())
{
rtnlist.Add(new
{
@@ -104,7 +98,7 @@ namespace ATS.NonCustodial.Application.Impl.Admins
UnitCode = item.UnitCode,
NameEntity = item.NameEntity,
dw = false,
- children = pidlist(express.Where(q => q.ParentUnitCode != 0||q.ParentUnitCode != null).ToList(),item.Id)
+ children = pidlist(express.Where(q => q.ParentUnitCode != 0 || q.ParentUnitCode != null).ToList(), item.Id)
});
}
return ResultOutput.Ok(rtnlist);
@@ -182,7 +176,7 @@ namespace ATS.NonCustodial.Application.Impl.Admins
public async Task GetjgPageAsync(UnitcodeGetPageDto input)
{
var rtnlist = new List();//五条件返回结果
- var express = GetExpression(input, _appUnitcodeRepository.AsQueryable(false, true).Where(q=>q.Stat==0));
+ var express = GetExpression(input, _appUnitcodeRepository.AsQueryable(false, true).Where(q => q.Stat == 0));
if (express.Count() == 0) return ResultOutput.Ok(rtnlist);
if (!string.IsNullOrEmpty(input.name)) return ResultOutput.Ok(express);//有条件返回结果
foreach (var item in await express.Where(q => q.ParentUnitCode == null || q.ParentUnitCode == 0).ToArrayAsync())
@@ -206,19 +200,19 @@ namespace ATS.NonCustodial.Application.Impl.Admins
///
///
///
- public static List pidlist(List list,long pid, List dwgllist=null,List Deptlist = null)
+ public static List pidlist(List list, long pid, List dwgllist = null, List Deptlist = null)
{
var plist = new List();
- var dwgllist1 = new List();
+ var dwgllist1 = new List();
//通过监管机构查询查询单位
- if (dwgllist!=null)
+ if (dwgllist != null)
dwgllist1 = dwgllist.Where(q => q.mechanismId == pid).ToList();
//通过单位查询部门
var Deptcode = new List();
if (Deptlist != null)
Deptcode = Deptlist.Where(q => q.UnitId == pid).ToList();
//监管机构查询下级
- foreach (var item in list.Where(q=>q.ParentUnitCode==pid).ToList())
+ foreach (var item in list.Where(q => q.ParentUnitCode == pid).ToList())
{
plist.Add(new
{
@@ -231,7 +225,7 @@ namespace ATS.NonCustodial.Application.Impl.Admins
});
}
//单位查找下级
- if (dwgllist1 != null)
+ if (dwgllist1 != null)
{
foreach (var item in dwgllist1.Where(q => q.ParentUnitCode == 0 || q.ParentUnitCode == null).ToList())
{
@@ -241,15 +235,15 @@ namespace ATS.NonCustodial.Application.Impl.Admins
ParentUnitCode = item.ParentUnitCode,
NameEntity = item.NameEntity,
UnitCode = item.UnitCode,
- dw =false,
- children = pidlist(dwgllist.Where(q => q.ParentUnitCode != 0 || q.ParentUnitCode != null).ToList(), item.Id,null, Deptlist)
+ dw = false,
+ children = pidlist(dwgllist.Where(q => q.ParentUnitCode != 0 || q.ParentUnitCode != null).ToList(), item.Id, null, Deptlist)
});
}
}
//部门查找下级
if (Deptlist != null)
{
- var datalist= Deptcode.Where(q => q.pid == 0 || q.pid == null).ToList();
+ var datalist = Deptcode.Where(q => q.pid == 0 || q.pid == null).ToList();
foreach (var item in datalist)
{
plist.Add(new
@@ -298,16 +292,29 @@ namespace ATS.NonCustodial.Application.Impl.Admins
///
public async Task AddAsync(UnitcodeAddInput input)
{
- if (_appUnitcodeRepository.AsQueryable(false, true).Where(q => q.UnitCode == input.UnitCode).Any())
+ 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(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,20 +352,44 @@ namespace ATS.NonCustodial.Application.Impl.Admins
{
for (int i = 0; i < input.Ids.Count; i++)
{
- var idlist= GetUnitIdList(input.Ids[i]);
+ //获取该单位下的所有子单位id
+ var idlist = GetUnitIdList(input.Ids[i]);
//校验该单位下是否存在用户账户
- if (_userRepository.AsQueryable(false, true).Where(q => idlist.Contains(q.UnitId??-1)).Any())
+ 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));
+ // await _appUnitcodeRepository.DeleteAsync(w => input.Ids.Contains(w.Id));
//删除
- // await _appUnitcodeRepository.DeleteAsync(w => input.Ids.Contains((long)w.ParentUnitCode));
+ // await _appUnitcodeRepository.DeleteAsync(w => input.Ids.Contains((long)w.ParentUnitCode));
}
await Uow.CommitAsync();
return ResultOutput.Ok();
@@ -369,11 +400,11 @@ namespace ATS.NonCustodial.Application.Impl.Admins
///
/// 单位id
/// 单位id集合
- private List GetUnitIdList(long unitId)
+ private List GetUnitIdList(long unitId)
{
- List idList=new List();
+ List idList = new List();
idList.Add(unitId);
- var unitlist=_appUnitcodeRepository.AsQueryable(false, true).Where(q => q.ParentUnitCode == unitId).ToList() ;
+ var unitlist = _appUnitcodeRepository.AsQueryable(false, true).Where(q => q.ParentUnitCode == unitId).ToList();
foreach (var item in unitlist)
{
idList.Add(item.Id);
@@ -382,6 +413,27 @@ namespace ATS.NonCustodial.Application.Impl.Admins
}
return idList;
}
+ ///
+ /// 递归查找该单位的所有父级单位
+ ///
+ /// 单位id
+ /// 单位id集合
+ private List GetParentUnitIdList(long unitId)
+ {
+ List idList = new List();
+ 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
///