using ATS.NonCustodial.Application.Base; using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.Deptcode.Input; using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.Deptcode.Output; using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.Role; using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.Unitcode.Input; using ATS.NonCustodial.Domain.Entities.Admins; 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.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 Yitter.IdGenerator; namespace ATS.NonCustodial.Application.Impl.Admins { /// /// 部门服务 /// /// Author:mxg /// CreatedTimed:2022-05-15 10:08 PM [DynamicApi(Area = "admin")] public class DeptcodeService : AdminAppServiceBase, IDeptcodeService, IDynamicApi { #region Identity private readonly IEfRepository _appDeptcodeRepository; public DeptcodeService(IEfRepository appDeptcodeRepository) { _appDeptcodeRepository = appDeptcodeRepository; } #endregion Identity /// /// 查询接口 /// /// /// public async Task GetAsync(long id) { var rtn = await base.GetAsync(_appDeptcodeRepository, id); return ResultOutput.Ok(rtn); } /// /// 根据单位查询部门---列表 /// /// /// [HttpPost] public async Task GetlistAsync(DeptcodeGetPageDto input) { var express = GetExpression(input, _appDeptcodeRepository.AsQueryable(false, true)); return ResultOutput.Ok(express); } /// /// 根据单位查询部门---树列表 /// /// /// [HttpPost] public async Task GetPageAsync(DeptcodeGetPageDto input) { var rtnlist = new List();//无条件返回结果 var express = GetExpression(input, _appDeptcodeRepository.AsQueryable(false, true)); 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.pid == null || q.pid == 0).ToArrayAsync()) { rtnlist.Add(new { Id = item.Id, pid = item.pid, DeptCode = item.DeptCode, UnitId = item.UnitId, DeptName = item.DeptName, DeptAbbr = item.DeptAbbr, Note = item.Note, children = pidlist(express.Where(q => q.pid != 0 || q.pid != null).ToList(), item.Id) }); } return ResultOutput.Ok(rtnlist); } /// /// 循环获取子级 /// /// /// /// public static List pidlist(List list, long pid) { var plist = new List(); foreach (var item in list.Where(q => q.pid == pid).ToList()) { plist.Add(new { Id = item.Id, pid = item.pid, DeptCode = item.DeptCode, UnitId = item.UnitId, DeptName = item.DeptName, DeptAbbr = item.DeptAbbr, Note = item.Note, children = pidlist(list, item.Id) }); } return plist; } /// /// 添加 /// /// /// public async Task AddAsync(DeptcodeAddInput input) { var entity = Mapper.Map(input); entity.Id = YitIdHelper.NextId(); Uow.BeginTransaction(); { await _appDeptcodeRepository.InsertAsync(entity); } await Uow.CommitAsync(); return ResultOutput.Ok(); } /// /// 修改 /// /// /// public async Task UpdateAsync(DeptcodeUpdateInput input) { if (!(input?.Id > 0)) return ResultOutput.NotOk(); var entity = await _appDeptcodeRepository.FindAsync((long)input.Id); if (!(entity?.Id > 0)) return ResultOutput.NotOk("编辑失败"); Mapper.Map(input, entity); await _appDeptcodeRepository.UpdateAsync(entity); return ResultOutput.Ok(); } /// /// 批量彻底删除 /// /// /// public async Task DeleteAsync(BatchIdsInput input) { Uow.BeginTransaction(); { //删除部门 await _appDeptcodeRepository.DeleteAsync(w => input.Ids.Contains(w.Id)); //删除子部门 await _appDeptcodeRepository.DeleteAsync(w => input.Ids.Contains((long)w.pid)); } await Uow.CommitAsync(); return ResultOutput.Ok(); } #region Private /// /// 查询条件 /// /// /// /// private IQueryable GetExpression(DeptcodeGetPageDto pageInput, IQueryable query) { var key = pageInput?.name; query = query .WhereIf(key.NotNull(), a => a.DeptName.Contains(key) || a.DeptAbbr.Contains(key)) .Where(q=>q.UnitId == pageInput.unitid); return query; } #endregion Private } }