OftenContactService.Insert.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using System.Transactions;
  5. using Datory;
  6. using GxPress.Common.Exceptions;
  7. using GxPress.EnumConst;
  8. using GxPress.Request.App.OftenContact;
  9. using GxPress.Result.App.OftenContact;
  10. namespace GxPress.Service.Implement.OftenContact
  11. {
  12. public partial class OftenContactService
  13. {
  14. public async Task<OftenContactDto> InsertAsync(OftenContactInRequest request, int userId)
  15. {
  16. var result = new OftenContactDto();
  17. if (string.IsNullOrEmpty(request.ContactUserId))
  18. throw new BusinessException("缺少必要字段");
  19. if (request.ChatType == 0)
  20. throw new BusinessException("类型必须");
  21. var count = await _repository.CountAsync(Q.Where(nameof(Entity.OftenContact.UserId), userId)
  22. .Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId));
  23. if (count > 0)
  24. {
  25. //修改好友关系
  26. var oftenContact = await _repository.GetAsync(Q.Where(nameof(Entity.OftenContact.UserId), userId)
  27. .Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId));
  28. if (oftenContact != null)
  29. {
  30. if (request.ChatType == 1)
  31. {
  32. var middleDto = await _middleRepository.GetMiddleAsync(Q.Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id).Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()).Where(nameof(Entity.Middle.Middle.UserId), userId));
  33. result.Id = middleDto != null ? middleDto.Id : 0;
  34. result.IsTop = middleDto != null ? middleDto.IsTop : false;
  35. //修改middle
  36. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsDelete), false).Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id).Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()));
  37. //修改文件夹
  38. var middles = await _middleRepository.GetAllAsync(Q.Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id).Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()));
  39. foreach (var middle in middles)
  40. {
  41. if (middle.ParentId > 0)
  42. {
  43. await _middleRepository.UpdateAsync(Q.Where(nameof(Entity.Middle.Middle.Id), middle.ParentId).Set(nameof(Entity.Middle.Middle.IsDelete), false));
  44. }
  45. }
  46. //修改聊天时间
  47. await _repository.UpdateAsync(Q.Where(nameof(Entity.OftenContact.UserId), userId)
  48. .Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId).Set(nameof(Entity.OftenContact.IsDelete), false));
  49. oftenContact = await _repository.GetAsync(Q.Where(nameof(Entity.OftenContact.UserId), int.Parse(request.ContactUserId))
  50. .Where(nameof(Entity.OftenContact.ContactUserId), userId));
  51. if (oftenContact != null)
  52. {
  53. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsDelete), false).Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id).Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()));
  54. await _repository.UpdateAsync(Q.Where(nameof(Entity.OftenContact.UserId), int.Parse(request.ContactUserId))
  55. .Where(nameof(Entity.OftenContact.ContactUserId), userId).Set(nameof(Entity.OftenContact.IsDelete), false));
  56. //修改文件夹
  57. middles = await _middleRepository.GetAllAsync(Q.Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id).Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()));
  58. foreach (var middle in middles)
  59. {
  60. if (middle.ParentId > 0)
  61. {
  62. await _middleRepository.UpdateAsync(Q.Where(nameof(Entity.Middle.Middle.Id), middle.ParentId).Set(nameof(Entity.Middle.Middle.IsDelete), false));
  63. }
  64. }
  65. }
  66. }
  67. if (request.ChatType == 2)
  68. {
  69. var oftenContacts = await _repository.GetAllAsync(Q.Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId));
  70. await _repository.UpdateAsync(Q.Set(nameof(Entity.OftenContact.IsDelete), false).Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId));
  71. //修改middle
  72. await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsDelete), false).WhereIn(nameof(Entity.Middle.Middle.MiddleId), oftenContacts.Select(n => n.Id)).Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()));
  73. //修改文件夹
  74. var middles = await _middleRepository.GetAllAsync(Q.WhereIn(nameof(Entity.Middle.Middle.MiddleId), oftenContacts.Select(n => n.Id)).Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()));
  75. foreach (var middle in middles)
  76. {
  77. if (middle.ParentId > 0)
  78. {
  79. await _middleRepository.UpdateAsync(Q.Where(nameof(Entity.Middle.Middle.Id), middle.ParentId).Set(nameof(Entity.Middle.Middle.IsDelete), false));
  80. }
  81. }
  82. }
  83. }
  84. return result;
  85. }
  86. try
  87. {
  88. using (TransactionScope transactionScope = new TransactionScope())
  89. {
  90. if (request.ChatType == 1)
  91. {
  92. var oftenContact = new Entity.OftenContact
  93. {
  94. IndividualGroupId = request.IndividualGroupId,
  95. ContactUserId = request.ContactUserId,
  96. UserId = userId,
  97. ChatType = request.ChatType,
  98. IsBlack = false,
  99. IsDelete = false
  100. };
  101. var oftenContactId = await _repository.InsertAsync(oftenContact);
  102. //添加middle
  103. var middle = new Entity.Middle.Middle();
  104. middle.IsAdmin = true;
  105. middle.MiddleId = oftenContactId;
  106. middle.FolderType = GxPress.EnumConst.AllTypeConst.Wechat.GetHashCode();
  107. middle.IsDefault = false;
  108. middle.IsDelete = false;
  109. middle.IsRead = false;
  110. middle.IsTop = false;
  111. middle.UserId = userId;
  112. middle.IsUpload = false;
  113. middle.ParentId = request.IndividualGroupId;
  114. await _middleRepository.InsertAsync(middle);
  115. oftenContact = new Entity.OftenContact
  116. {
  117. IndividualGroupId = 0,
  118. ContactUserId = userId.ToString(),
  119. UserId = int.Parse(request.ContactUserId),
  120. ChatType = request.ChatType,
  121. IsBlack = false,
  122. IsDelete = false
  123. };
  124. oftenContactId = await _repository.InsertAsync(oftenContact);
  125. //添加middle
  126. middle = new Entity.Middle.Middle();
  127. middle.IsAdmin = true;
  128. middle.MiddleId = oftenContactId;
  129. middle.FolderType = AllTypeConst.Wechat.GetHashCode();
  130. middle.IsDefault = false;
  131. middle.IsDelete = false;
  132. middle.UserId = int.Parse(request.ContactUserId);
  133. middle.IsRead = false;
  134. middle.IsTop = false;
  135. middle.IsUpload = false;
  136. middle.ParentId = request.IndividualGroupId;
  137. await _middleRepository.InsertAsync(middle);
  138. }
  139. else
  140. {
  141. var oftenContact = new Entity.OftenContact
  142. {
  143. IndividualGroupId = request.IndividualGroupId,
  144. ContactUserId = request.ContactUserId,
  145. UserId = userId,
  146. ChatType = request.ChatType,
  147. IsBlack = false,
  148. IsDelete = false
  149. };
  150. var oftenContactId = await _repository.InsertAsync(oftenContact);
  151. //添加middle
  152. var middle = new Entity.Middle.Middle();
  153. middle.IsAdmin = true;
  154. middle.MiddleId = oftenContactId;
  155. middle.FolderType = AllTypeConst.Wechat.GetHashCode();
  156. middle.IsDefault = false;
  157. middle.IsDelete = false;
  158. middle.UserId = userId;
  159. middle.IsRead = false;
  160. middle.IsTop = false;
  161. middle.IsUpload = false;
  162. middle.ParentId = request.IndividualGroupId;
  163. result.Id = await _middleRepository.InsertAsync(middle);
  164. }
  165. transactionScope.Complete();
  166. }
  167. }
  168. catch (Exception e)
  169. {
  170. Console.WriteLine(e);
  171. throw;
  172. }
  173. return result;
  174. }
  175. }
  176. }