UserService.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using AutoMapper;
  7. using GxPress.Common.Exceptions;
  8. using GxPress.Common.Page;
  9. using GxPress.Entity;
  10. using GxPress.Repository.Interface;
  11. using GxPress.Request.App.User;
  12. using GxPress.Request.User;
  13. using GxPress.Result.User;
  14. using GxPress.Service.Interface;
  15. using GxPress.Service.Interface.IM;
  16. using Microsoft.AspNetCore.Hosting;
  17. using OfficeOpenXml;
  18. using Datory;
  19. using GxPress.Common.Tools;
  20. using GxPress.Result.App.User;
  21. using GxPress.Repository.Interface.WorkFlow;
  22. using GxPress.Request.App.Flow;
  23. using GxPress.Repository.Interface.WaitHandle;
  24. using GxPress.Request.AddressBookGroup;
  25. using GxPress.Repository.Interface.DepartmentUser;
  26. using GxPress.Repository.Interface.Friends;
  27. using GxPress.EnumConst;
  28. using GxPress.Result.Department;
  29. using GxPress.Service.Interface.Department;
  30. namespace GxPress.Service.Implement
  31. {
  32. public class UserService : IUserService
  33. {
  34. private readonly IUserRepository _userRepository;
  35. private readonly IDepartmentRepository _departmentRepository;
  36. private readonly IAddressBookGroupRepository _addressBookGroupRepository;
  37. private readonly IAddressBookGroupUserRepository addressBookGroupUserRepository;
  38. private IWebHostEnvironment _webHostEnvironment;
  39. private readonly IBlacklistUserRepository _blacklistUserRepository;
  40. private readonly IRoleRepository _roleRepository;
  41. private readonly IIMService _imService;
  42. private readonly IMapper _mapper;
  43. private readonly IFlowRepository _flowRepository;
  44. private readonly IFlowTodoRepository _flowTodoRepository;
  45. private readonly IWaitHandleRepository waitHandleRepository;
  46. private readonly IDepartmentUserRepository departmentUserRepository;
  47. private readonly IFriendsRepository friendsRepository;
  48. private readonly IGroupChatUserRepository groupChatUserRepository;
  49. private readonly IGroupUserRepository groupUserRepository;
  50. private readonly IOftenContactRepository oftenContactRepository;
  51. public UserService(IUserRepository userRepository, IDepartmentRepository departmentRepository,
  52. IAddressBookGroupRepository addressBookGroupRepository, IBlacklistUserRepository blacklistUserRepository,
  53. IMapper mapper, IWebHostEnvironment webHostEnvironment, IRoleRepository roleRepository, IIMService imService, IFlowRepository flowRepository, IFlowTodoRepository flowTodoRepository, IWaitHandleRepository waitHandleRepository, IDepartmentUserRepository departmentUserRepository, IFriendsRepository friendsRepository, IGroupChatUserRepository groupChatUserRepository, IGroupUserRepository groupUserRepository, IAddressBookGroupUserRepository addressBookGroupUserRepository, IOftenContactRepository oftenContactRepository)
  54. {
  55. _userRepository = userRepository;
  56. _departmentRepository = departmentRepository;
  57. _addressBookGroupRepository = addressBookGroupRepository;
  58. _blacklistUserRepository = blacklistUserRepository;
  59. _mapper = mapper;
  60. _webHostEnvironment = webHostEnvironment;
  61. _roleRepository = roleRepository;
  62. _imService = imService;
  63. _flowRepository = flowRepository;
  64. _flowTodoRepository = flowTodoRepository;
  65. this.waitHandleRepository = waitHandleRepository;
  66. this.departmentUserRepository = departmentUserRepository;
  67. this.friendsRepository = friendsRepository;
  68. this.groupChatUserRepository = groupChatUserRepository;
  69. this.groupUserRepository = groupUserRepository;
  70. this.addressBookGroupUserRepository = addressBookGroupUserRepository;
  71. this.oftenContactRepository = oftenContactRepository;
  72. }
  73. /// <summary>
  74. /// 根据部门ID获取自建ID获取用户列表
  75. /// </summary>
  76. /// <param name="request"></param>
  77. /// <returns></returns>
  78. public async Task<IEnumerable<UserInfoResult>> FindUser(FindUserRequest request)
  79. {
  80. var userInfoResults = new List<UserInfoResult>();
  81. if (request.TypeId == 1)
  82. {
  83. //获取部门
  84. List<Entity.Department> departments = new List<Entity.Department>();
  85. foreach (var item in request.ItemId)
  86. {
  87. if (item > 0)
  88. {
  89. var users = await _userRepository.GetUserByDepartmentIdAsync(item);
  90. userInfoResults.AddRange(users.Select(user => _mapper.Map<UserInfoResult>(user)).ToList());
  91. }
  92. departments = await _departmentRepository.GetDepartmentByPid(item, departments);
  93. }
  94. foreach (var department in departments)
  95. {
  96. //获取部门下面的员工
  97. var users = await _userRepository.GetUserByDepartmentIdAsync(department.Id);
  98. userInfoResults.AddRange(users.Select(user => _mapper.Map<UserInfoResult>(user)).ToList());
  99. }
  100. }
  101. //查询自建用户
  102. if (request.TypeId == 2)
  103. {
  104. var users = new List<User>();
  105. foreach (var item in request.ItemId)
  106. {
  107. if (item > 0)
  108. {
  109. users.AddRange(await _addressBookGroupRepository.GetUserByAddressBookGroupIdAsync(item));
  110. }
  111. users = await _addressBookGroupRepository.GetUserByAddressBookGroupPidAsync(users, item,
  112. request.UserId);
  113. }
  114. userInfoResults.AddRange(users.Select(user => _mapper.Map<UserInfoResult>(user)).ToList());
  115. }
  116. foreach (var item in userInfoResults)
  117. {
  118. if (item == null)
  119. continue;
  120. item.AvatarUrl = StringUtils.AddDomainMin(item.AvatarUrl);
  121. }
  122. return userInfoResults.Distinct();
  123. }
  124. /// <summary>
  125. /// 根据ID查询用户数据
  126. /// </summary>
  127. /// <param name="userId"></param>
  128. /// <param name="blackUserId"></param>
  129. /// <returns></returns>
  130. public async Task<UserDetail> GetUserByIdAsync(int userId, int blackUserId)
  131. {
  132. var user = await _userRepository.GetAsync(blackUserId);
  133. if (user == null)
  134. {
  135. throw new BusinessException("用户id有误");
  136. }
  137. var userDetail = _mapper.Map<UserDetail>(user);
  138. // if (user.DepartmentId > 0)
  139. // {
  140. // var department = await _departmentRepository.GetAsync(user.DepartmentId);
  141. // userDetail.DepartmentName = department.Name;
  142. // }
  143. userDetail.AvatarUrl = StringUtils.AddDomainMin(userDetail.AvatarUrl);
  144. userDetail.HistoryAvatarUrl = StringUtils.AddDomainMin(userDetail.HistoryAvatarUrl);
  145. userDetail.IsBlack = await _blacklistUserRepository.FindUserIsBlack(userId, blackUserId);
  146. return userDetail;
  147. }
  148. /// <summary>
  149. /// 生成excel
  150. /// </summary>
  151. /// <returns></returns>
  152. public async Task<string> ExcelUserAsync(List<int> userIds)
  153. {
  154. string sWebRootFolder = _webHostEnvironment.WebRootPath;
  155. string sFileName = $"{Guid.NewGuid()}.xlsx";
  156. FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));
  157. using (ExcelPackage package = new ExcelPackage(file))
  158. {
  159. // 添加worksheet
  160. ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("员工信息"); //添加头
  161. worksheet.Cells[1, 1].Value = "姓名";
  162. worksheet.Cells[1, 2].Value = "手机号码";
  163. worksheet.Cells[1, 3].Value = "邮箱"; //添加值
  164. worksheet.Cells[1, 4].Value = "性别"; //添加值
  165. worksheet.Cells[1, 5].Value = "部门"; //添加值
  166. worksheet.Cells[1, 6].Value = "角色"; //添加值
  167. //获取用户
  168. var users = await _userRepository.FindAllUserAsync(Q.WhereIn(nameof(User.Id), userIds));
  169. var enumerable = users as User[] ?? users.ToArray();
  170. for (int i = 0; i < enumerable.Count(); i++)
  171. {
  172. var index = i + 2;
  173. worksheet.Cells["A" + index].Value = enumerable[i].Name;
  174. worksheet.Cells["B" + index].Value = enumerable[i].Phone;
  175. worksheet.Cells["C" + index].Value = enumerable[i].Email;
  176. worksheet.Cells["D" + index].Value = enumerable[i].Gender == "Male" ? "男" : "女";
  177. //获取部门
  178. var department = await _departmentRepository.GetAsync(enumerable[i].DepartmentId);
  179. worksheet.Cells["E" + index].Value = department == null ? "" : department.Name;
  180. //获取角色
  181. var role = await _roleRepository.GetAsync(enumerable[i].RoleId);
  182. worksheet.Cells["F" + index].Value = role == null ? "" : role.Name;
  183. }
  184. package.Save();
  185. }
  186. return Path.Combine(sWebRootFolder, sFileName);
  187. }
  188. /// <summary>
  189. /// 用户分页列表
  190. /// </summary>
  191. /// <param name="request"></param>
  192. /// <returns></returns>
  193. public async Task<PagedList<UserResult>> GetPagedListAsync(UserPageSearchRequest request)
  194. {
  195. var pagedList = new PagedList<UserResult>
  196. {
  197. Total = await GetCountAsync(request.DepartmentId, request.RoleId, request.Keyword)
  198. };
  199. var list = await GetPageListAsync(request.Page, request.PerPage, request.DepartmentId, request.RoleId,
  200. request.Keyword);
  201. var items = list.Select(user => _mapper.Map<UserResult>(user)).ToList();
  202. foreach (var item in items)
  203. {
  204. item.AvatarUrl = StringUtils.AddDomain(item.AvatarUrl);
  205. // var departmentName = string.Empty;
  206. // //获取部门
  207. // departmentName =
  208. // await _departmentRepository.GetDepartmentFullPathAsync(item.DepartmentId, departmentName);
  209. // item.DepartmentName = departmentName;
  210. item.DepartmentIds = await departmentUserRepository.GetDepartmentIdsAsync(item.Id);
  211. var role = await _roleRepository.GetAsync(item.RoleId);
  212. if (role != null)
  213. item.RoleName = role.Name;
  214. }
  215. pagedList.Items = items;
  216. return pagedList;
  217. }
  218. public async Task<int> GetCountAsync(int departmentId, int roleId, string keyword)
  219. {
  220. var query = Q.NewQuery();
  221. if (departmentId > 0)
  222. {
  223. var userIds = await departmentUserRepository.GetUserIdsAsync(departmentId);
  224. query.WhereIn(nameof(User.Id), userIds);
  225. query.Where(nameof(User.DepartmentId), departmentId);
  226. }
  227. if (roleId > 0)
  228. {
  229. query.Where(nameof(User.RoleId), roleId);
  230. }
  231. if (!string.IsNullOrEmpty(keyword))
  232. {
  233. keyword = "%" + keyword + "%";
  234. query.Where(q =>
  235. q.WhereLike(nameof(User.Name), keyword)
  236. .OrWhereLike(nameof(User.Email), keyword)
  237. .OrWhereLike(nameof(User.Phone), keyword)
  238. );
  239. }
  240. return await _userRepository.CountAsync(query);
  241. }
  242. /// <summary>
  243. /// Set the limit and offset for a given page.
  244. /// </summary>
  245. /// <param name="page"></param>
  246. /// <param name="perPage"></param>
  247. /// <param name="departmentId"></param>
  248. /// <param name="roleId"></param>
  249. /// <param name="keyword"></param>
  250. /// <returns></returns>
  251. public async Task<IEnumerable<User>> GetPageListAsync(int page, int perPage, int departmentId, int roleId,
  252. string keyword)
  253. {
  254. var query = Q.ForPage(page, perPage);
  255. if (departmentId > 0)
  256. {
  257. var userIds = await departmentUserRepository.GetUserIdsAsync(departmentId);
  258. query.WhereIn(nameof(User.Id), userIds);
  259. //query.Where(nameof(User.DepartmentId), departmentId);
  260. }
  261. if (roleId > 0)
  262. {
  263. query.Where(nameof(User.RoleId), roleId);
  264. }
  265. if (!string.IsNullOrEmpty(keyword))
  266. {
  267. keyword = "%" + keyword + "%";
  268. query.Where(q =>
  269. q.WhereLike(nameof(User.Name), keyword)
  270. .OrWhereLike(nameof(User.Email), keyword)
  271. .OrWhereLike(nameof(User.Phone), keyword)
  272. );
  273. }
  274. return await _userRepository.GetAllAsync(query);
  275. }
  276. public async Task<PagedList<User>> GetPageListAsync(UserPageSearchRequest request)
  277. {
  278. var result = new PagedList<User>();
  279. var query = Q.ForPage(request.Page, request.PerPage);
  280. if (request.DepartmentId > 0)
  281. {
  282. var userIds = await departmentUserRepository.GetUserIdsAsync(request.DepartmentId);
  283. query.WhereIn(nameof(User.Id), userIds);
  284. //query.Where(nameof(User.DepartmentId), request.DepartmentId);
  285. }
  286. if (request.RoleId > 0)
  287. {
  288. query.Where(nameof(User.RoleId), request.RoleId);
  289. }
  290. if (!string.IsNullOrEmpty(request.Keyword))
  291. {
  292. request.Keyword = "%" + request.Keyword + "%";
  293. query.Where(q =>
  294. q.WhereLike(nameof(User.Name), request.Keyword)
  295. .OrWhereLike(nameof(User.Email), request.Keyword)
  296. .OrWhereLike(nameof(User.Phone), request.Keyword)
  297. );
  298. }
  299. result.Items = await _userRepository.GetAllAsync(query);
  300. result.Total = await _userRepository.CountAsync(query);
  301. return result;
  302. }
  303. /// <summary>
  304. /// 删除用户
  305. /// </summary>
  306. /// <param name="userIds"></param>
  307. /// <returns></returns>
  308. public async Task<bool> DeleteUsersAsync(IEnumerable<int> userIds)
  309. {
  310. var enumerable = userIds as int[] ?? userIds.ToArray();
  311. foreach (var userId in enumerable)
  312. {
  313. var user = await _userRepository.GetAsync(userId);
  314. if (user != null)
  315. {
  316. await _imService.DeleteUserAsync(user.ImId);
  317. }
  318. }
  319. return await _userRepository.DeleteUsersAsync(enumerable);
  320. }
  321. /// <summary>
  322. /// 获取用户未读数据
  323. /// </summary>
  324. /// <param name="userId"></param>
  325. /// <returns></returns>
  326. public async Task<UserCountResult> GetUserCountAsync(int userId)
  327. {
  328. var result = await _userRepository.GetUserCountAsync(userId);
  329. //工作我的审批未操作数量
  330. var request = new FlowListRequest();
  331. result.FlowAuditUReadCount = await _userRepository.GetUserUReadFlowTodoCountAsync(userId);
  332. //待办事项未执行数量
  333. result.WaitHandleUFinishCount = await waitHandleRepository.GetUFinishAsync(userId);
  334. return result;
  335. }
  336. /// <summary>
  337. /// 获取用户的通讯录
  338. /// </summary>
  339. /// <param name="userId"></param>
  340. /// <returns></returns>
  341. public async Task<UserLinkResult> GetUserLinkResultAsync(int userId)
  342. {
  343. //获取用户
  344. var user = await _userRepository.GetAsync(userId);
  345. //单位通讯录
  346. var userLinkResult = new List<UserLinkModelResult>();
  347. var departmentIds = await departmentUserRepository.GetDepartmentIdsAsync(userId);
  348. if (departmentIds.Count() > 0)
  349. {
  350. var userLinkModelAttributeResult = new List<UserLinkModelAttributeResult>();
  351. var departments = await _departmentRepository.GetUserInDepartmentAsync(departmentIds.ToList());
  352. foreach (var department in departments)
  353. {
  354. var userInfoResults = await GetUserInfoByDepartentResult(department.Id);
  355. userLinkModelAttributeResult.Add(new UserLinkModelAttributeResult
  356. {
  357. Id = department.Id,
  358. Name = department.Name,
  359. UserCount = userInfoResults.Count(),
  360. TypeId = UserlinkConst.Work.GetHashCode(),
  361. TypeValue = 0,
  362. });
  363. }
  364. //单位通讯录
  365. userLinkResult.Add(new UserLinkModelResult
  366. {
  367. TypeId = UserlinkConst.Work.GetHashCode(),
  368. Name = UserlinkConst.Work.GetDescriptionOriginal(),
  369. Items = userLinkModelAttributeResult
  370. });
  371. }
  372. //系统通讯录 查询我的小组和群聊
  373. //var groupUserCount=await
  374. userLinkResult.Add(
  375. new UserLinkModelResult
  376. {
  377. TypeId = UserlinkConst.System.GetHashCode(),
  378. Name = UserlinkConst.System.GetDescriptionOriginal(),
  379. Items = new List<UserLinkModelAttributeResult>{
  380. new UserLinkModelAttributeResult{
  381. Id=0,
  382. Name=UserlinkConst.MyGroup.GetDescriptionOriginal(),
  383. TypeValue=UserlinkConst.MyGroup.GetHashCode(),
  384. TypeId= UserlinkConst.System.GetHashCode(),
  385. UserCount=await groupUserRepository.GetUserIntoGroupUserCountAsync(userId)
  386. },
  387. new UserLinkModelAttributeResult{
  388. Id=0,
  389. Name=UserlinkConst.MyGroupChat.GetDescriptionOriginal(),
  390. TypeId= UserlinkConst.System.GetHashCode(),
  391. TypeValue=UserlinkConst.MyGroupChat.GetHashCode(),
  392. UserCount=await groupChatUserRepository.GetUserIntoGroupChatUserCountAsync(userId)
  393. }
  394. }
  395. }
  396. );
  397. //自建通讯录
  398. var addressBookGroupList = await _addressBookGroupRepository.GetAddressBookGroupListAsync(
  399. new AddressBookGroupSearchRequest { ParendId = 0, UserId = userId });
  400. var systemLinkModelAttributeResults = new List<UserLinkModelAttributeResult>();
  401. foreach (var item in addressBookGroupList)
  402. systemLinkModelAttributeResults.Add(new UserLinkModelAttributeResult
  403. {
  404. Id = item.Id,
  405. Name = item.GroupName,
  406. TypeId = UserlinkConst.My.GetHashCode(),
  407. UserCount = item.UserCount
  408. });
  409. if (addressBookGroupList.Count() > 0)
  410. //自建通讯录
  411. userLinkResult.Add(
  412. new UserLinkModelResult
  413. {
  414. TypeId = UserlinkConst.My.GetHashCode(),
  415. Name = UserlinkConst.My.GetDescriptionOriginal(),
  416. Items = systemLinkModelAttributeResults
  417. }
  418. );
  419. userLinkResult.Add(
  420. //其他
  421. new UserLinkModelResult
  422. {
  423. TypeId = UserlinkConst.Other.GetHashCode(),
  424. Name = UserlinkConst.Other.GetDescriptionOriginal(),
  425. Items = new List<UserLinkModelAttributeResult>()
  426. }
  427. );
  428. //获取用户好友
  429. var userIds = await friendsRepository.GetFriendsIdsAsync(userId, 0);
  430. var result = new UserLinkResult()
  431. {
  432. Items = userLinkResult,
  433. FriendUsers = await _userRepository.GetUserInfoResultsAsync(userIds),
  434. LatelyChatUsers = await GetLatelyChatUsersAsync(userId)
  435. };
  436. // if (result.FriendUsers != null && result.FriendUsers.Count() > 0)
  437. // foreach (var item in result.FriendUsers)
  438. // item.AvatarUrl = StringUtils.AddDomainMin(item.AvatarUrl);
  439. return result;
  440. }
  441. /// <summary>
  442. /// 获取最近聊天用户
  443. /// </summary>
  444. /// <param name="userId"></param>
  445. /// <returns></returns>
  446. public async Task<IEnumerable<UserInfoResult>> GetLatelyChatUsersAsync(int userId)
  447. {
  448. var userIds = await oftenContactRepository.GetAllAsync(userId);
  449. var item = await _userRepository.GetUserInfoResultsAsync(userIds);
  450. foreach (var userInfo in item)
  451. {
  452. userInfo.TypeId = 0; userInfo.TypeValue = 0;
  453. }
  454. return item;
  455. }
  456. /// <summary>
  457. /// 获取好友列表
  458. /// </summary>
  459. /// <param name="userId"></param>
  460. /// <param name="keyWord"></param>
  461. /// <returns></returns>
  462. public async Task<IEnumerable<UserInfoResult>> GetFriendUserInfoResult(int userId, string keyWord)
  463. {
  464. //获取用户好友
  465. var userIds = await friendsRepository.GetFriendsIdsAsync(userId, 0);
  466. return await _userRepository.GetUserInfoResultsAsync(userIds, keyWord);
  467. }
  468. /// <summary>
  469. /// 更新用户信息
  470. /// </summary>
  471. /// <param name="id"></param>
  472. /// <param name="request"></param>
  473. /// <returns></returns>
  474. public async Task<bool> UpdateAsync(int id, UserInfoRequest request)
  475. {
  476. var user = await _userRepository.GetAsync(id);
  477. if (user == null) throw new BusinessException("该用户不存在");
  478. if (request.DepartmentId != null && request.DepartmentId.Count() > 0)
  479. await departmentUserRepository.AddDepartmentUserAsync(request.DepartmentId, id);
  480. if (!string.IsNullOrEmpty(request.DepartmentName))
  481. user.DepartmentName = request.DepartmentName;
  482. if (!string.IsNullOrEmpty(request.Nick))
  483. user.Nick = request.Nick;
  484. if (!string.IsNullOrEmpty(request.Description))
  485. user.Description = request.Description;
  486. if (!string.IsNullOrEmpty(request.Gender))
  487. user.Gender = request.Gender;
  488. if (!string.IsNullOrEmpty(request.Name))
  489. user.Name = request.Name;
  490. if (!string.IsNullOrEmpty(request.Position))
  491. user.Position = request.Position;
  492. if (request.RoleId > 0)
  493. user.RoleId = request.RoleId;
  494. if (!string.IsNullOrEmpty(request.Signature))
  495. user.Signature = request.Signature;
  496. //用户头像
  497. if (!string.IsNullOrEmpty(request.AvatarUrl))
  498. {
  499. user.HistoryAvatarUrl = user.AvatarUrl;
  500. user.AvatarUrl = StringUtils.RemoveDomain(request.AvatarUrl);
  501. }
  502. user.Email = request.Email;
  503. if (!string.IsNullOrWhiteSpace(request.Phone))
  504. user.Phone = request.Phone;
  505. user.QRCoder = StringUtils.RemoveDomain(user.QRCoder);
  506. if (request.IsDisable > 0)
  507. user.IsDisable = request.IsDisable == 1;
  508. if (request.IsFreeze > 0)
  509. user.IsFreeze = request.IsFreeze == 1;
  510. if (request.IsVip > 0)
  511. user.IsVip = request.IsVip == 1;
  512. if (request.IsLeader > 0)
  513. user.IsLeader = request.IsLeader == 1;
  514. if (request.IsMute > 0)
  515. user.IsMute = request.IsMute == 1;
  516. if (!string.IsNullOrWhiteSpace(request.DisableTiem))
  517. user.DisableTiem = Convert.ToDateTime(request.DisableTiem);
  518. if (request.IsNotice > 0)
  519. user.IsNotice = request.IsNotice == 1;
  520. return await _userRepository.UpdateAsync(user);
  521. }
  522. public async Task<UserInfoResult> GetUserInfoAsync(int id)
  523. {
  524. var result = await _userRepository.GetUserInfoAsync(id);
  525. result.DepartmentIds = await departmentUserRepository.GetDepartmentIdsAsync(id);
  526. return result;
  527. }
  528. /// <summary>
  529. /// 查询不是好友的用户
  530. /// </summary>
  531. /// <returns></returns>
  532. public async Task<IEnumerable<UserInfoResult>> FindUserInfoNoFriendsResultAsync(int userId, string keyword)
  533. {
  534. var userIds = await friendsRepository.GetFriendsIdsAsync(userId, -1);
  535. var userIdsList = userIds.ToList();
  536. userIdsList.Add(userId);
  537. //判断是否有部门
  538. if (await departmentUserRepository.IsExistsAsync(userId))
  539. //获取部门数据
  540. userIdsList.AddRange(await departmentUserRepository.GetUserIdsAsync());
  541. var result = await _userRepository.GetUserInfoNoFriendsResults(keyword, userIdsList);
  542. return result;
  543. }
  544. /// <summary>
  545. /// 搜索好友和部门用户
  546. /// </summary>
  547. /// <param name="keyword"></param>
  548. /// <param name="userIds"></param>
  549. /// <returns></returns>
  550. public async Task<IEnumerable<UserInfoResult>> GetSearchUserInfoResults(int userId, string keyword)
  551. {
  552. var userIds = await friendsRepository.GetFriendsIdsAsync(userId, -1);
  553. var userIdsList = userIds.ToList();
  554. userIdsList.Add(userId);
  555. //判断是否有部门
  556. if (await departmentUserRepository.IsExistsAsync(userId))
  557. //获取部门数据
  558. userIdsList.AddRange(await departmentUserRepository.GetUserIdsAsync());
  559. var result = await _userRepository.GetSearchUserInfoResults(keyword, userIdsList);
  560. return result;
  561. }
  562. /// <summary>
  563. /// 根据部门ID获取用户
  564. /// </summary>
  565. /// <param name="departentId"></param>
  566. /// <returns></returns>
  567. public async Task<IEnumerable<UserInfoResult>> GetUserInfoByDepartentResult(int departentId)
  568. {
  569. var departentList = new List<DepartmentResult>();
  570. var departent = await _departmentRepository.GetDepartmentById(departentId, departentList);
  571. var userIds = await departmentUserRepository.GetUserIdsAsync(departent.Select(n => n.Id));
  572. var result = await _userRepository.GetUserInfoResultsAsync(userIds);
  573. return result;
  574. }
  575. /// <summary>
  576. /// 获取群聊和小组的用户
  577. /// </summary>
  578. /// <param name="typeValue"></param>
  579. /// <param name="id"></param>
  580. /// <param name="keyword"></param>
  581. /// <returns></returns>
  582. public async Task<IEnumerable<UserInfoResult>> GetGroupOrGroupChatUserInfosResult(UserInfoByGroupoRoGroupChatResult request)
  583. {
  584. if (request.Id == 0)
  585. return await GetAllGroupOrGroupChatUserInfosResult(request);
  586. //群聊
  587. if (request.TypeValue == UserlinkConst.MyGroupChat.GetHashCode())
  588. {
  589. var groupChatUsers = await groupChatUserRepository.GetAllAsync(Q.Where(nameof(Entity.GroupChatUser.GroupChatId), request.Id));
  590. var result = await _userRepository.GetSearchUserInfoResults(request.Keyword, groupChatUsers.Select(n => n.UserId));
  591. return result;
  592. }
  593. //小组
  594. if (request.TypeValue == UserlinkConst.MyGroup.GetHashCode())
  595. {
  596. var groupUsers = await groupUserRepository.GetAllAsync(Q.Where(nameof(Entity.GroupUser.GroupId), request.Id));
  597. var result = await _userRepository.GetSearchUserInfoResults(request.Keyword, groupUsers.Select(n => n.UserId));
  598. return result;
  599. }
  600. //自建小组
  601. if (request.TypeId == UserlinkConst.My.GetHashCode())
  602. {
  603. var addressGroupUsers = await addressBookGroupUserRepository.GetAllAsync(Q.Where(nameof(Entity.AddressBookGroupUser.AddressBookGroupId), request.Id));
  604. var result = await _userRepository.GetSearchUserInfoResults(request.Keyword, addressGroupUsers.Select(n => n.UserId));
  605. return result;
  606. }
  607. return null;
  608. }
  609. /// <summary>
  610. /// 获取群聊和小组的用户
  611. /// </summary>
  612. /// <param name="typeValue"></param>
  613. /// <param name="id"></param>
  614. /// <param name="keyword"></param>
  615. /// <returns></returns>
  616. public async Task<IEnumerable<UserInfoResult>> GetAllGroupOrGroupChatUserInfosResult(UserInfoByGroupoRoGroupChatResult request)
  617. {
  618. //群聊
  619. if (request.TypeValue == UserlinkConst.MyGroupChat.GetHashCode())
  620. {
  621. var groupIds = await groupChatUserRepository.GetAllAsync(Q.Where(nameof(Entity.GroupChatUser.UserId), request.UserId));
  622. var groupChatUsers = await groupChatUserRepository.GetAllAsync(Q.WhereIn(nameof(Entity.GroupChatUser.GroupChatId), groupIds.Select(n => n.GroupChatId)));
  623. var result = await _userRepository.GetSearchUserInfoResults(request.Keyword, groupChatUsers.Select(n => n.UserId));
  624. return result;
  625. }
  626. //小组
  627. if (request.TypeValue == UserlinkConst.MyGroup.GetHashCode())
  628. {
  629. var groupIds = await groupUserRepository.GetAllAsync(Q.Where(nameof(Entity.GroupUser.UserId), request.UserId));
  630. var groupUsers = await groupUserRepository.GetAllAsync(Q.WhereIn(nameof(Entity.GroupUser.GroupId), groupIds.Select(n => n.GroupId)));
  631. var result = await _userRepository.GetSearchUserInfoResults(request.Keyword, groupUsers.Select(n => n.UserId));
  632. return result;
  633. }
  634. //自建小组
  635. if (request.TypeValue == UserlinkConst.My.GetHashCode())
  636. {
  637. var addressBookGroupIds = await addressBookGroupUserRepository.GetAllAsync(Q.Where(nameof(Entity.AddressBookGroupUser.UserId), request.UserId));
  638. var addressGroupUsers = await addressBookGroupUserRepository.GetAllAsync(Q.WhereIn(nameof(Entity.AddressBookGroupUser.AddressBookGroupId), addressBookGroupIds.Select(n => n.AddressBookGroupId)));
  639. var result = await _userRepository.GetSearchUserInfoResults(request.Keyword, addressGroupUsers.Select(n => n.UserId));
  640. return result;
  641. }
  642. return null;
  643. }
  644. }
  645. }