From a392df1ccb0ecaaa0cdfe7f194e556d3f83e89bb Mon Sep 17 00:00:00 2001 From: zhaozhenjing Date: Tue, 16 Sep 2025 11:30:28 +0800 Subject: [PATCH] =?UTF-8?q?[MODIFY]=E5=8D=95=E4=BD=8D=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=96=B0=E5=A2=9E=E6=97=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?limit=E5=AD=97=E6=AE=B5=E7=9A=84=E5=A1=AB=E5=85=85=EF=BC=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8D=95=E4=BD=8D=E6=97=B6=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=88=B6=E7=BA=A7=E5=8D=95=E4=BD=8D=E7=9A=84limit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/Admins/App_Unitcode.cs | 7 + .../Impl/Admins/UnitcodeService.cs | 124 +++++++++++++----- 2 files changed, 95 insertions(+), 36 deletions(-) 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 ///