OftenContactService.Insert.cs 12 KB

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