|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Permission.Service.IServices;
- using Permission.Entity.DbContext;
- using Permission.Infrastructure.Repositories;
- using Permission.Entity.System;
- using Microsoft.EntityFrameworkCore;
- using Permission.Infrastructure.WebControls;
- using Permission.Service.DTO.ApiModels;
- using Permission.Service.DTO.ViewModels;
- using Permission.Utils.Validate;
-
- namespace Permission.Service.Services
- {
- public class SysOrganizeService : ISysOrganizeService
- {
- private readonly IUnitOfWork _unitOfWork;
- private readonly PermissionContext _dbContext;
- private readonly IBaseRepository<SysOrganize> _sysOrganizeRepository;
-
- public SysOrganizeService(IUnitOfWork unitOfWork, PermissionContext dbContext, IBaseRepository<SysOrganize> sysOrganizeRepository)
- {
- this._unitOfWork = unitOfWork;
- this._dbContext = dbContext;
- this._sysOrganizeRepository = sysOrganizeRepository;
- }
-
- public bool AddModel(SysOrganize model)
- {
- try
- {
- model.GuidId = Guid.NewGuid().ToString();
- if (model.ParentId == null || model.ParentId == 0)
- {
- model.Layer = 0;
- }
- else
- {
- var layer = _sysOrganizeRepository.Get(model.ParentId).Layer;
- if (layer != null)
- {
- int parentLayer = layer.Value;
- model.Layer = parentLayer + 1;
- }
- }
- model.ParentId = model.ParentId ?? 0;
- model.IsEnabled = model.IsEnabled != null;
- model.DeleteMark = false;
- model.CreateTime = DateTime.Now;
- var res = _sysOrganizeRepository.Save(model);
- return res;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- public List<SysOrganize> GetOrgList()
- {
- var data = _sysOrganizeRepository.LoadAll(m => m.IsEnabled.Value == true && m.DeleteMark.Value == false)
- .OrderBy(ms => ms.SortCode)
- .AsNoTracking()
- .ToList();
- return data;
- }
-
- public Page<SysOrganize> PageList(string keyword, int pagesize, int pageindex)
- {
- try
- {
- int total = 0;
- if (keyword.IsEmpty())
- {
- var data = _sysOrganizeRepository.PageList(pageindex, pagesize, us => us.OrderBy(ur => ur.SortCode),
- u => u,
- out total,
- u => u.IsEnabled == true && u.DeleteMark == false);
-
- return data;
- }
- else
- {
- var data = _sysOrganizeRepository.PageList(pageindex, pagesize, us => us.OrderBy(ur => ur.SortCode), u => u,
- out total,
- u => (u.FullName.Contains(keyword) || u.EnCode.Contains(keyword)) && u.DeleteMark == false);
- return data;
- }
- }
- catch (Exception e)
- {
- throw e;
- }
- }
-
- public List<SysOrganize> GetOrgListByLayer(int type, int? orgid = null)
- {
- if (orgid == null)
- {
- var data =
- _sysOrganizeRepository.LoadAll(
- m => m.Type == type && m.IsEnabled.Value == true && m.DeleteMark.Value == false)
- .OrderBy(ms => ms.SortCode)
- .AsNoTracking()
- .ToList();
- return data;
- }
- else
- {
- var data =
- _sysOrganizeRepository.LoadAll(
- m => m.ParentId == orgid && m.Type == type && m.IsEnabled.Value == true && m.DeleteMark.Value == false)
- .OrderBy(ms => ms.SortCode)
- .AsNoTracking()
- .ToList();
- return data;
- }
- }
-
- public List<SysOrganize> GetDepsByOrgId(int orgid)
- {
- try
- {
- if (!orgid.IsEmpty() || orgid > 0)
- {
- var data =
- _sysOrganizeRepository.LoadAll(
- m =>
- m.ParentId == orgid && m.Type == 1 && m.IsEnabled.Value == true &&
- m.DeleteMark.Value == false)
- .OrderBy(ms => ms.SortCode)
- .AsNoTracking()
- .ToList();
- return data;
- }
- else
- {
- return null;
- }
- }
- catch (Exception e)
- {
- throw e;
- }
- }
-
- public List<SysUser> GetUsersByOrgId(int orgid)
- {
- try
- {
- if (!orgid.IsEmpty() || orgid > 0)
- {
- var users = _customerById(_dbContext, orgid).SysDepUsers;
- return users;
- }
- else
- {
- return null;
- }
- }
- catch (Exception e)
- {
- throw e;
- }
- }
-
- public List<ContactViewModel> GetDepartmentUsersAndCountByOrgId(int orgid)
- {
- try
- {
- if (!orgid.IsEmpty() || orgid > 0)
- {
- List<ContactViewModel> list=new List<ContactViewModel>();
- var deps =
- _sysOrganizeRepository.LoadAll(
- m => m.ParentId == orgid && m.Type == 1 && m.IsEnabled == true && m.DeleteMark == false)
- .ToList();
- foreach (var dep in deps)
- {
- var depment = _customerById(_dbContext, dep.Id);
- var data = new ContactViewModel
- {
- DepartmentId = depment.Id,
- DepName = depment.FullName,
- DepUserCount = depment.SysDepUsers.Any() ? depment.SysDepUsers.Count : 0
- };
- list.Add(data);
- }
- return list;
- }
- else
- {
- return null;
- }
- }
- catch (Exception e)
- {
- throw e;
- }
- }
-
- #region 私有方法
-
- private static Func<PermissionContext, int, SysOrganize> _customerById =
- EF.CompileQuery((PermissionContext db, int orgid) => db.SysOrganizes
- .Include(u => u.SysOrgUsers)
- .Include(u => u.SysDepUsers)
- .FirstOrDefault(c => c.Id == orgid));
-
- #endregion
-
- #region api
-
- public IEnumerable<OrganizeModel> GetOrganizeModelsApi()
- {
- try
- {
- var data = new List<OrganizeModel>();
-
- var orglist = this.GetOrgList().Where(m => m.Type == 0);
- if (orglist.Any())
- {
- OrganizeModel model = null;
- foreach (var org in orglist)
- {
- model = new OrganizeModel();
- model.OrgId = org.Id.ToString();
- model.ParentId = org.ParentId.ToString();
- model.EnCode = org.EnCode;
- model.ShortName = org.FullName;
- model.OrgName = org.FullName;
- model.DepItems =
- this.GetDepsByOrgId(org.Id)
- .Select(m => new DepartmentModel
- {
- DepartmentId = m.Id.ToString(),
- ParentId = m.ParentId.ToString(),
- DepName = m.FullName,
- EnCode = m.EnCode,
- ShortName = m.FullName,
- SortCode = m.SortCode,
- Description = m.Remark
- })
- .ToList();
- data.Add(model);
- }
-
- return data;
- }
- else
- {
- return null;
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
-
- #endregion
- }
- }
|