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

350 行
12 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using AutoMapper;
  5. using Microsoft.EntityFrameworkCore;
  6. using Permission.Entity.Chart;
  7. using Permission.Entity.DbContext;
  8. using Permission.Entity.System;
  9. using Permission.Infrastructure.Repositories;
  10. using Permission.Infrastructure.WebControls;
  11. using Permission.Service.DTO;
  12. using Permission.Service.DTO.ApiModels;
  13. using Permission.Service.IServices;
  14. using Permission.Utils.Validate;
  15. namespace Permission.Service.Services
  16. {
  17. public class ChartGroupService : IChartGroupService
  18. {
  19. private readonly IUnitOfWork _unitOfWork;
  20. private readonly PermissionContext _dbContext;
  21. private readonly IMapper _mapper;
  22. private readonly IBaseRepository<ChartGroup> _chartGroupRepository;
  23. private readonly IBaseRepository<SysUser> _sysUserRepository;
  24. private readonly ISysUserService _sysUserService;
  25. public ChartGroupService(IUnitOfWork unitOfWork, PermissionContext dbContext, IMapper mapper, IBaseRepository<ChartGroup> chartGroupRepository, IBaseRepository<SysUser> sysUserRepository, ISysUserService sysUserService)
  26. {
  27. this._unitOfWork = unitOfWork;
  28. this._dbContext = dbContext;
  29. this._mapper = mapper;
  30. this._chartGroupRepository = chartGroupRepository;
  31. this._sysUserRepository = sysUserRepository;
  32. this._sysUserService = sysUserService;
  33. }
  34. public bool AddModel(ChartGroup model)
  35. {
  36. try
  37. {
  38. model.GuidId = Guid.NewGuid().ToString();
  39. model.IsEnabled = model.IsEnabled != null;
  40. model.DeleteMark = false;
  41. model.CreateTime = DateTime.Now;
  42. var res = _chartGroupRepository.Save(model);
  43. return res;
  44. }
  45. catch (Exception ex)
  46. {
  47. throw ex;
  48. }
  49. }
  50. public bool ModifyModel(ChartGroup model)
  51. {
  52. try
  53. {
  54. var group = _chartGroupRepository.Get(model.Id);
  55. group.GroupName = model.GroupName;
  56. group.SortCode = model.SortCode;
  57. group.IsEnabled = model.IsEnabled;
  58. group.ModifyTime = DateTime.Now;
  59. group.ModifyUser = model.ModifyUser;
  60. group.Remark = model.Remark;
  61. var res = _chartGroupRepository.Update(group);
  62. return res;
  63. }
  64. catch (Exception ex)
  65. {
  66. throw ex;
  67. }
  68. }
  69. public bool DeleteModel(int key)
  70. {
  71. bool flag = false;
  72. try
  73. {
  74. if (!key.IsEmpty() || key > 0)
  75. {
  76. var group = _customerById(_dbContext, key);
  77. if (group.GroupUsers.Any())
  78. {
  79. group.GroupUsers.Clear();
  80. var model = _chartGroupRepository.Get(key);
  81. _chartGroupRepository.Delete(model);
  82. }
  83. else
  84. {
  85. var model = _chartGroupRepository.Get(key);
  86. _chartGroupRepository.Delete(model);
  87. }
  88. flag = true;
  89. }
  90. else
  91. {
  92. flag = false;
  93. }
  94. return flag;
  95. }
  96. catch (Exception ex)
  97. {
  98. throw ex;
  99. }
  100. }
  101. public ChartGroup GetChartGroupByKey(int key)
  102. {
  103. try
  104. {
  105. if (!key.IsEmpty() || key > 0)
  106. {
  107. var data = _chartGroupRepository.Get(key);
  108. return data;
  109. }
  110. return null;
  111. }
  112. catch (Exception e)
  113. {
  114. throw e;
  115. }
  116. }
  117. public Page<ChartGroup> PageList(string keyword, int pagesize, int pageindex)
  118. {
  119. try
  120. {
  121. int total = 0;
  122. if (keyword.IsEmpty())
  123. {
  124. var data = _chartGroupRepository.PageList(pageindex, pagesize, us => us.OrderBy(ur => ur.SortCode),
  125. u => u,
  126. out total,
  127. u => u.DeleteMark == false);
  128. return data;
  129. }
  130. else
  131. {
  132. var data = _chartGroupRepository.PageList(pageindex, pagesize, us => us.OrderBy(ur => ur.SortCode), u => u,
  133. out total,
  134. u => u.GroupName.Contains(keyword) && u.DeleteMark == false);
  135. return data;
  136. }
  137. }
  138. catch (Exception e)
  139. {
  140. throw e;
  141. }
  142. }
  143. public List<GroupUsersModel> GetUsersByGroupId(int groupId)
  144. {
  145. if (groupId.IsEmpty() || groupId <= 0)
  146. {
  147. return null;
  148. }
  149. else
  150. {
  151. var group = _customerById(_dbContext, groupId);
  152. var gruopusers = group.GroupUsers;
  153. var allusers = _sysUserRepository.QueryEntity<SysUser, DateTime, SysUser>(m => m.IsEnabled == true && m.DeleteMark == false, ms => ms.CreateTime.Value, null, true).ToList();
  154. var data = allusers.Select(u => new GroupUsersModel
  155. {
  156. UserId = u.Id,
  157. UserName = u.Account,
  158. RealName = u.RealName,
  159. IsChecked = gruopusers.Select(us => us.UserId).Contains(u.Id) ? 1 : 0
  160. }).ToList();
  161. return data;
  162. }
  163. }
  164. public bool UpdateUsersGroup(int groupId, string userIds)
  165. {
  166. bool flag = false;
  167. if (!groupId.IsEmpty() || groupId > 0)
  168. {
  169. List<GroupUser> newUsers = new List<GroupUser>();
  170. //删除原先旧数据
  171. try
  172. {
  173. var group = _customerById(_dbContext, groupId);
  174. group.GroupUsers.Clear();
  175. if (!userIds.IsEmpty())
  176. {
  177. GroupUser groupUser = null;
  178. foreach (var uid in userIds.Split(',').ToList())
  179. {
  180. groupUser = new GroupUser
  181. {
  182. UserId = int.Parse(uid),
  183. GroupId = groupId,
  184. CreateUser = "",
  185. CreateTime = DateTime.Now
  186. };
  187. newUsers.Add(groupUser);
  188. }
  189. group.GroupUsers.AddRange(newUsers);
  190. }
  191. bool res = _unitOfWork.SaveChanges() > 0;
  192. flag = res;
  193. }
  194. catch (Exception ex)
  195. {
  196. throw ex;
  197. }
  198. }
  199. else
  200. {
  201. flag = false;
  202. }
  203. return flag;
  204. }
  205. public List<ChartGroup> GetGroupsByUserId(int userId)
  206. {
  207. /////
  208. if (!userId.IsEmpty() || userId > 0)
  209. {
  210. var user = _usergroups(_dbContext, userId);
  211. var groupidlist = user.GroupUsers.Select(m => m.GroupId).ToList();
  212. var grouplist = _chartGroupRepository.LoadAll(m => groupidlist.Contains(m.Id) && m.IsEnabled == true && m.DeleteMark == false).ToList();
  213. return grouplist;
  214. }
  215. return null;
  216. }
  217. public List<SysUser> GetUserByGroupId(int grouoId)
  218. {
  219. if (!grouoId.IsEmpty() || grouoId > 0)
  220. {
  221. var group = _customerById(_dbContext, grouoId);
  222. var useridlist = group.GroupUsers.Select(m => m.UserId).ToList();
  223. var users = _sysUserRepository.LoadAll(m => useridlist.Contains(m.Id) && m.IsEnabled == true && m.DeleteMark == false).ToList();
  224. return users;
  225. }
  226. return null;
  227. }
  228. #region 私有方法
  229. private static Func<PermissionContext, int, ChartGroup> _customerById =
  230. EF.CompileQuery((PermissionContext db, int groupId) => db.ChartGroups
  231. .Include(u => u.GroupUsers)
  232. .FirstOrDefault(c => c.Id == groupId));
  233. private static Func<PermissionContext, int, SysUser> _usergroups =
  234. EF.CompileQuery((PermissionContext db, int userid) => db.SysUsers
  235. .Include(u => u.GroupUsers)
  236. .FirstOrDefault(c => c.Id == userid));
  237. #endregion
  238. #region api
  239. public IEnumerable<GroupModel> GetUserGroupsApi(int userId)
  240. {
  241. List<GroupModel> grouplist = new List<GroupModel>();
  242. List<GroupModel> depgrouplist = new List<GroupModel>();
  243. int index = 0;
  244. try
  245. {
  246. if (!userId.IsEmpty())
  247. {
  248. var currentUser = _sysUserRepository.Get(userId);
  249. int orgId = currentUser.OrganizeId.Value; //获取机构编号
  250. GroupModel groupModel = null;
  251. if (!orgId.IsEmpty())
  252. {
  253. var deplist = _sysUserService.GetGroupUsersByOrgIdApi(userId, orgId); //获取机构下部门人员信息
  254. if (deplist != null)
  255. {
  256. if (deplist.Any())
  257. {
  258. foreach (var dep in deplist)
  259. {
  260. groupModel = new GroupModel();
  261. groupModel.GroupId = dep.DepId.ToString();
  262. groupModel.GroupName = dep.DepName;
  263. groupModel.GroupType = 1;
  264. groupModel.OrganizeId = dep.OrgId.ToString();
  265. groupModel.SortCode = index;
  266. groupModel.Status = dep.Status;
  267. groupModel.ManagerId = dep.UserModels[0].UserId.ToString();
  268. groupModel.CreateTime = dep.CreateTime;
  269. groupModel.CreateName = dep.CreateName;
  270. groupModel.Description = dep.Description;
  271. groupModel.UserModels = dep.UserModels;
  272. depgrouplist.Add(groupModel);
  273. index++;
  274. }
  275. }
  276. }
  277. }
  278. //获取含有当前用户的组
  279. var groups = this.GetGroupsByUserId(userId);
  280. foreach (var group in groups)
  281. {
  282. var users = this.GetUserByGroupId(group.Id);
  283. var userlist = _mapper.Map<List<UserModel>>(users);
  284. groupModel = new GroupModel();
  285. groupModel.GroupId = group.Id.ToString();
  286. groupModel.GroupName = group.GroupName;
  287. groupModel.GroupType = 0;
  288. groupModel.OrganizeId = group.OrganizeId;
  289. groupModel.SortCode = index;
  290. groupModel.Status = group.IsEnabled == true ? 1 : 0;
  291. groupModel.ManagerId = userlist[0].UserId.ToString();
  292. groupModel.CreateTime = group.CreateTime;
  293. groupModel.CreateName = group.CreateUser;
  294. groupModel.Description = group.Remark;
  295. groupModel.UserModels = userlist;
  296. grouplist.Add(groupModel);
  297. index++;
  298. }
  299. if (depgrouplist.Any())
  300. {
  301. grouplist.AddRange(depgrouplist);
  302. }
  303. var resdata = grouplist.OrderBy(g => g.SortCode);
  304. return resdata;
  305. }
  306. else
  307. {
  308. return null;
  309. }
  310. }
  311. catch (Exception ex)
  312. {
  313. throw ex;
  314. }
  315. }
  316. #endregion
  317. }
  318. }