2025-06-16 17:24:23 +08:00

223 lines
9.3 KiB
C#

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
{
/// <summary>
/// 组织服务
/// </summary>
public class OrganizationService : ApiService
{
private readonly IRepository<Organization> organizationRepository;
private readonly IRepository<User> user;
public OrganizationService(IRepository<Organization> OrganizationRepository,
IRepository<User> _user, IHttpContextAccessor httpContextAccessor)
{
organizationRepository=OrganizationRepository;
user = _user;
}
/// <summary>
/// 添加单条组织信息
/// </summary>
/// <param name="organizationInsertDto"></param>
/// <returns></returns>
[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("组织编号已存在,不允许重复键.");
}
/// <summary>
/// 编辑单条组织信息
/// </summary>
/// <param name="organizationEditDto"></param>
/// <returns></returns>
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<PageOutput<OrganizationAllOut>> OrganizationAll([FromQuery]GetDepartmentInput input)
{
var data = await organizationRepository.GetQueryableAsync();
var users = await user.GetQueryableAsync();
List<User> Users = new List<User>();
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<OrganizationAllOut> pageOutput = new PageOutput<OrganizationAllOut>();
List<OrganizationAllOut> organizationAllOuts = new List<OrganizationAllOut>();
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;
}
/// <summary>
/// 树形组织
/// </summary>
/// <returns></returns>
public async Task<List<Organization>> GetAllOrganizationApp()
{
var OrganizationList = await organizationRepository.GetListAsync();
if (OrganizationList.Any() && OrganizationList.Count > 0)
{
OrganizationTool organizationTool = new OrganizationTool();
List<Organization> list = new List<Organization>();
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("查询数据失败.");
}
/// <summary>
/// 名字模糊查询
/// </summary>
/// <param name="organizationQueryDto"></param>
/// <returns></returns>
public async Task<List<Organization>> 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);
}
}
/// <summary>
/// 获取部门列表
/// </summary>
/// <returns></returns>
public async Task<PageOutput<DepartmentInfoDto>> GetDepartmentList(GetDepartmentInput input)
{
var paged = await organizationRepository.GetPagedListAsync(input.SkipCount, input.PageSize, nameof(Organization.Order));
return new PageOutput<DepartmentInfoDto>()
{
PageSize = input.PageSize,
PageIndex = input.Page,
Total = paged.Count,
Data = ObjectMapper.Map(paged, new List<DepartmentInfoDto>())
};
}
/// <summary>
/// 修改部门信息或状态
/// </summary>
/// <param name="organizationUpdateDto"></param>
/// <returns></returns>
[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);
}
}
}