using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Syc.Basic.Web.WMS.Dtos.Organization; using Syc.Basic.Web.WMS.Dtos.Position; using Syc.Basic.Web.WMS.ServiceTool; using Syc.Basic.Web.WMS.Entitys; using Syc.Basic.Web.WMS.Enums; using Syc.Core.Tools; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; namespace Syc.Basic.Web.Service { /// /// 组织服务 /// public class OrganizationService : ApiService { private readonly IRepository organizationRepository; private readonly IRepository user; public OrganizationService(IRepository OrganizationRepository, IRepository _user, IHttpContextAccessor httpContextAccessor) { organizationRepository=OrganizationRepository; user = _user; } /// /// 添加单条组织信息 /// /// /// [HttpPost] public async Task OrganizationCreate(OrganizationInsertDto organizationInsertDto) { var hasOrganization = await organizationRepository.AnyAsync(e => e.Name == organizationInsertDto.name); if (!hasOrganization) { await organizationRepository.InsertAsync(new Organization { Createtime = DateTime.UtcNow, Code = "11111111", Description = organizationInsertDto.remark, Name = organizationInsertDto.name, Status = organizationInsertDto.status, Leader = organizationInsertDto.leader, wechatRobotId = organizationInsertDto.wechatRobotId, Type = organizationInsertDto.type, Order = organizationInsertDto.sort, Pid = organizationInsertDto.parentId }); }else throw Oops.Oh("组织编号已存在,不允许重复键."); } /// /// 编辑单条组织信息 /// /// /// public async Task EditOrganizationApp(OrganizationEditDto organizationEditDto) { var Organization = await organizationRepository.FirstAsync(e => e.Code == organizationEditDto.Code); if (Organization is null) throw Oops.Oh("检索过程中不存在该数据,请检查是否已被移除."); if (!string.IsNullOrWhiteSpace(organizationEditDto.Description)) Organization.Description = organizationEditDto.Description; if (!string.IsNullOrWhiteSpace(organizationEditDto.Name)) Organization.Name = organizationEditDto.Name; Organization.wechatRobotId = organizationEditDto.wechatRobotId; Organization.Status = organizationEditDto.Status; Organization.Order = organizationEditDto.Order; Organization.Pid = organizationEditDto.Pid; Organization.Type = organizationEditDto.Type; await organizationRepository.UpdateAsync(Organization,autoSave:true); } [HttpGet] public async Task> OrganizationAll([FromQuery]GetDepartmentInput input) { var data = await organizationRepository.GetQueryableAsync(); var users = await user.GetQueryableAsync(); List Users = new List(); foreach (var item in data.ToList()) { if (item.Leader.HasValue && item.Leader > 0) { var User = users.FirstOrDefault(x=>x.Id == item.Leader); Users.AddRangeIf(res=>User is not null , User); } } PageOutput pageOutput = new PageOutput(); List organizationAllOuts = new List(); if (!string.IsNullOrWhiteSpace(input.Name)) data = data.Where(x => x.Name.Contains(input.Name)); foreach (var organization in data) { OrganizationAllOut organizationAllOut = new OrganizationAllOut(); organizationAllOut.Code = organization.Code; organizationAllOut.Remark = organization.Description; organizationAllOut.Name = organization.Name; organizationAllOut.Sort = organization.Order; organizationAllOut.parentId = organization.Pid; organizationAllOut.Status = organization.Status; organizationAllOut.Type = organization.Type; organizationAllOut.Id = organization.Id; if (organization.Leader is not null && Users.Any()) { var user = Users.Where(x => x.Id == organization.Leader).FirstOrDefault(); organizationAllOut.LeaderId = user == null ? -1 : user.Id; organizationAllOut.Leader = user == null ? "" : user.NickName; } organizationAllOuts.Add(organizationAllOut); } if (!string.IsNullOrWhiteSpace(input.Leader)) organizationAllOuts = organizationAllOuts.Where(x => x.Leader.Contains(input.Leader)).ToList(); pageOutput.Total = await organizationRepository.CountAsync(); pageOutput.Data = organizationAllOuts.OrderByDescending(x=>x.Sort); return pageOutput; } /// /// 树形组织 /// /// public async Task> GetAllOrganizationApp() { var OrganizationList = await organizationRepository.GetListAsync(); if (OrganizationList.Any() && OrganizationList.Count > 0) { OrganizationTool organizationTool = new OrganizationTool(); List list = new List(); list = OrganizationList.Where(x => x.Pid == 0).ToList(); foreach (var organization in list) organization.Children = organizationTool.GetOrganizationList(organization.Id, OrganizationList); return list; }else throw Oops.Oh("查询数据失败."); } /// /// 名字模糊查询 /// /// /// public async Task> GetFuzzyQueryOrganization(OrganizationQueryDto organizationQueryDto) { return await organizationRepository.GetListAsync(x=>x.Name.Contains(organizationQueryDto.Name)); } [HttpPost] public async Task Delete(OrganizationDeleteDto organizationDeleteDto) { foreach (var id in organizationDeleteDto.Ids) { var organization =await organizationRepository.FirstOrDefaultAsync(x => x.Id == id); await organizationRepository.DeleteAsync(organization); } } /// /// 获取部门列表 /// /// public async Task> GetDepartmentList(GetDepartmentInput input) { var paged = await organizationRepository.GetPagedListAsync(input.SkipCount, input.PageSize, nameof(Organization.Order)); return new PageOutput() { PageSize = input.PageSize, PageIndex = input.Page, Total = paged.Count, Data = ObjectMapper.Map(paged, new List()) }; } /// /// 修改部门信息或状态 /// /// /// [HttpPost] public async Task Update(OrganizationUpdateDto organizationUpdateDto) { var organization = await organizationRepository.FirstOrDefaultAsync(x => x.Id == organizationUpdateDto.Id); if (!string.IsNullOrWhiteSpace(organizationUpdateDto.Name)) organization.Name = organizationUpdateDto.Name; if (!string.IsNullOrWhiteSpace(organizationUpdateDto.Remark)) organization.Description = organizationUpdateDto.Remark; if (organizationUpdateDto.LeaderId > 0) organization.Leader = organizationUpdateDto.LeaderId; if (organizationUpdateDto.ParentId > 0) organization.Pid = organizationUpdateDto.ParentId; if (organizationUpdateDto.Sort > 0) organization.Order = organizationUpdateDto.Sort; organization.Status = organizationUpdateDto.Status; organization.Type =(OrganizationType)organizationUpdateDto.Type; await organizationRepository.UpdateAsync(organization); } } }