飞星
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

264 行
8.9 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Permission.Service.IServices;
  5. using Permission.Entity.DbContext;
  6. using Permission.Infrastructure.Repositories;
  7. using Permission.Entity.System;
  8. using Microsoft.EntityFrameworkCore;
  9. using Permission.Infrastructure.WebControls;
  10. using Permission.Service.DTO.ApiModels;
  11. using Permission.Service.DTO.ViewModels;
  12. using Permission.Utils.Validate;
  13. namespace Permission.Service.Services
  14. {
  15. public class SysOrganizeService : ISysOrganizeService
  16. {
  17. private readonly IUnitOfWork _unitOfWork;
  18. private readonly PermissionContext _dbContext;
  19. private readonly IBaseRepository<SysOrganize> _sysOrganizeRepository;
  20. public SysOrganizeService(IUnitOfWork unitOfWork, PermissionContext dbContext, IBaseRepository<SysOrganize> sysOrganizeRepository)
  21. {
  22. this._unitOfWork = unitOfWork;
  23. this._dbContext = dbContext;
  24. this._sysOrganizeRepository = sysOrganizeRepository;
  25. }
  26. public bool AddModel(SysOrganize model)
  27. {
  28. try
  29. {
  30. model.GuidId = Guid.NewGuid().ToString();
  31. if (model.ParentId == null || model.ParentId == 0)
  32. {
  33. model.Layer = 0;
  34. }
  35. else
  36. {
  37. var layer = _sysOrganizeRepository.Get(model.ParentId).Layer;
  38. if (layer != null)
  39. {
  40. int parentLayer = layer.Value;
  41. model.Layer = parentLayer + 1;
  42. }
  43. }
  44. model.ParentId = model.ParentId ?? 0;
  45. model.IsEnabled = model.IsEnabled != null;
  46. model.DeleteMark = false;
  47. model.CreateTime = DateTime.Now;
  48. var res = _sysOrganizeRepository.Save(model);
  49. return res;
  50. }
  51. catch (Exception ex)
  52. {
  53. throw ex;
  54. }
  55. }
  56. public List<SysOrganize> GetOrgList()
  57. {
  58. var data = _sysOrganizeRepository.LoadAll(m => m.IsEnabled.Value == true && m.DeleteMark.Value == false)
  59. .OrderBy(ms => ms.SortCode)
  60. .AsNoTracking()
  61. .ToList();
  62. return data;
  63. }
  64. public Page<SysOrganize> PageList(string keyword, int pagesize, int pageindex)
  65. {
  66. try
  67. {
  68. int total = 0;
  69. if (keyword.IsEmpty())
  70. {
  71. var data = _sysOrganizeRepository.PageList(pageindex, pagesize, us => us.OrderBy(ur => ur.SortCode),
  72. u => u,
  73. out total,
  74. u => u.IsEnabled == true && u.DeleteMark == false);
  75. return data;
  76. }
  77. else
  78. {
  79. var data = _sysOrganizeRepository.PageList(pageindex, pagesize, us => us.OrderBy(ur => ur.SortCode), u => u,
  80. out total,
  81. u => (u.FullName.Contains(keyword) || u.EnCode.Contains(keyword)) && u.DeleteMark == false);
  82. return data;
  83. }
  84. }
  85. catch (Exception e)
  86. {
  87. throw e;
  88. }
  89. }
  90. public List<SysOrganize> GetOrgListByLayer(int type, int? orgid = null)
  91. {
  92. if (orgid == null)
  93. {
  94. var data =
  95. _sysOrganizeRepository.LoadAll(
  96. m => m.Type == type && m.IsEnabled.Value == true && m.DeleteMark.Value == false)
  97. .OrderBy(ms => ms.SortCode)
  98. .AsNoTracking()
  99. .ToList();
  100. return data;
  101. }
  102. else
  103. {
  104. var data =
  105. _sysOrganizeRepository.LoadAll(
  106. m => m.ParentId == orgid && m.Type == type && m.IsEnabled.Value == true && m.DeleteMark.Value == false)
  107. .OrderBy(ms => ms.SortCode)
  108. .AsNoTracking()
  109. .ToList();
  110. return data;
  111. }
  112. }
  113. public List<SysOrganize> GetDepsByOrgId(int orgid)
  114. {
  115. try
  116. {
  117. if (!orgid.IsEmpty() || orgid > 0)
  118. {
  119. var data =
  120. _sysOrganizeRepository.LoadAll(
  121. m =>
  122. m.ParentId == orgid && m.Type == 1 && m.IsEnabled.Value == true &&
  123. m.DeleteMark.Value == false)
  124. .OrderBy(ms => ms.SortCode)
  125. .AsNoTracking()
  126. .ToList();
  127. return data;
  128. }
  129. else
  130. {
  131. return null;
  132. }
  133. }
  134. catch (Exception e)
  135. {
  136. throw e;
  137. }
  138. }
  139. public List<SysUser> GetUsersByOrgId(int orgid)
  140. {
  141. try
  142. {
  143. if (!orgid.IsEmpty() || orgid > 0)
  144. {
  145. var users = _customerById(_dbContext, orgid).SysDepUsers;
  146. return users;
  147. }
  148. else
  149. {
  150. return null;
  151. }
  152. }
  153. catch (Exception e)
  154. {
  155. throw e;
  156. }
  157. }
  158. public List<ContactViewModel> GetDepartmentUsersAndCountByOrgId(int orgid)
  159. {
  160. try
  161. {
  162. if (!orgid.IsEmpty() || orgid > 0)
  163. {
  164. List<ContactViewModel> list=new List<ContactViewModel>();
  165. var deps =
  166. _sysOrganizeRepository.LoadAll(
  167. m => m.ParentId == orgid && m.Type == 1 && m.IsEnabled == true && m.DeleteMark == false)
  168. .ToList();
  169. foreach (var dep in deps)
  170. {
  171. var depment = _customerById(_dbContext, dep.Id);
  172. var data = new ContactViewModel
  173. {
  174. DepartmentId = depment.Id,
  175. DepName = depment.FullName,
  176. DepUserCount = depment.SysDepUsers.Any() ? depment.SysDepUsers.Count : 0
  177. };
  178. list.Add(data);
  179. }
  180. return list;
  181. }
  182. else
  183. {
  184. return null;
  185. }
  186. }
  187. catch (Exception e)
  188. {
  189. throw e;
  190. }
  191. }
  192. #region 私有方法
  193. private static Func<PermissionContext, int, SysOrganize> _customerById =
  194. EF.CompileQuery((PermissionContext db, int orgid) => db.SysOrganizes
  195. .Include(u => u.SysOrgUsers)
  196. .Include(u => u.SysDepUsers)
  197. .FirstOrDefault(c => c.Id == orgid));
  198. #endregion
  199. #region api
  200. public IEnumerable<OrganizeModel> GetOrganizeModelsApi()
  201. {
  202. try
  203. {
  204. var data = new List<OrganizeModel>();
  205. var orglist = this.GetOrgList().Where(m => m.Type == 0);
  206. if (orglist.Any())
  207. {
  208. OrganizeModel model = null;
  209. foreach (var org in orglist)
  210. {
  211. model = new OrganizeModel();
  212. model.OrgId = org.Id.ToString();
  213. model.ParentId = org.ParentId.ToString();
  214. model.EnCode = org.EnCode;
  215. model.ShortName = org.FullName;
  216. model.OrgName = org.FullName;
  217. model.DepItems =
  218. this.GetDepsByOrgId(org.Id)
  219. .Select(m => new DepartmentModel
  220. {
  221. DepartmentId = m.Id.ToString(),
  222. ParentId = m.ParentId.ToString(),
  223. DepName = m.FullName,
  224. EnCode = m.EnCode,
  225. ShortName = m.FullName,
  226. SortCode = m.SortCode,
  227. Description = m.Remark
  228. })
  229. .ToList();
  230. data.Add(model);
  231. }
  232. return data;
  233. }
  234. else
  235. {
  236. return null;
  237. }
  238. }
  239. catch (Exception ex)
  240. {
  241. throw ex;
  242. }
  243. }
  244. #endregion
  245. }
  246. }