OftenContactService.Insert.cs 9.9 KB

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