using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Transactions; using Datory; using GxPress.Common.Exceptions; using GxPress.EnumConst; using GxPress.Request.App.OftenContact; using GxPress.Result.App.OftenContact; namespace GxPress.Service.Implement.OftenContact { public partial class OftenContactService { public async Task CreateWechatMiddleAsync(OftenContactInRequest request, int userId, int oftenContactId) { var query = Q.NewQuery(); query.Where(nameof(Entity.Middle.Middle.MiddleId), oftenContactId); query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()); query.Where(nameof(Entity.Middle.Middle.UserId), userId); var middleDto = await _middleRepository.GetMiddleAsync(query); if (middleDto == null) { //添加middle var middle = new Entity.Middle.Middle() { IsAdmin = true, MiddleId = oftenContactId, FolderType = GxPress.EnumConst.AllTypeConst.Wechat.GetHashCode(), IsDefault = false, IsDelete = false, IsRead = false, IsTop = false, UserId = userId, IsUpload = false, ParentId = request.IndividualGroupId, }; middle.Id = await _middleRepository.InsertAsync(middle); middleDto = middle; } return middleDto; } public async Task InsertAsync(OftenContactInRequest request, int userId) { var result = new OftenContactDto(); if (string.IsNullOrEmpty(request.ContactUserId)) throw new BusinessException("缺少必要字段"); if (request.ChatType == 0) throw new BusinessException("类型必须"); var count = await _repository.CountAsync(Q.Where(nameof(Entity.OftenContact.UserId), userId) .Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId)); if (count > 0) { var query = Q.NewQuery(); //修改好友关系 query.Where(nameof(Entity.OftenContact.UserId), userId); query.Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId); var oftenContact = await _repository.GetAsync(query); if (oftenContact != null) { if (request.ChatType == 1) { var middleDto = await CreateWechatMiddleAsync(request, userId, oftenContact.Id); result.Id = middleDto != null ? middleDto.Id : 0; result.IsTop = middleDto != null ? middleDto.IsTop : false; //修改middle query = Q.NewQuery(); query.Set(nameof(Entity.Middle.Middle.IsDelete), false); query.Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id); query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()); await _middleRepository.UpdateAsync(query); //修改文件夹 query = Q.NewQuery(); query.Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id); query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()); var middles = await _middleRepository.GetAllAsync(query); foreach (var middle in middles) { if (middle.ParentId > 0) { await _middleRepository.UpdateAsync(Q.Where(nameof(Entity.Middle.Middle.Id), middle.ParentId).Set(nameof(Entity.Middle.Middle.IsDelete), false)); } } //修改聊天时间 query = Q.NewQuery(); query.Where(nameof(Entity.OftenContact.UserId), userId); query.Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId); query.Set(nameof(Entity.OftenContact.IsDelete), false); await _repository.UpdateAsync(query); query = Q.NewQuery(); query.Where(nameof(Entity.OftenContact.UserId), int.Parse(request.ContactUserId)); query.Where(nameof(Entity.OftenContact.ContactUserId), userId); oftenContact = await _repository.GetAsync(query); if (oftenContact != null) { query = Q.NewQuery(); query.Set(nameof(Entity.Middle.Middle.IsDelete), false); query.Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id); query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()); await _middleRepository.UpdateAsync(query); query = Q.NewQuery(); query.Where(nameof(Entity.OftenContact.UserId), int.Parse(request.ContactUserId)); query.Where(nameof(Entity.OftenContact.ContactUserId), userId); query.Set(nameof(Entity.OftenContact.IsDelete), false); await _repository.UpdateAsync(query); //修改文件夹 query = Q.NewQuery(); query.Where(nameof(Entity.Middle.Middle.MiddleId), oftenContact.Id); query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()); middles = await _middleRepository.GetAllAsync(query); foreach (var middle in middles) { if (middle.ParentId > 0) { await _middleRepository.UpdateAsync(Q.Where(nameof(Entity.Middle.Middle.Id), middle.ParentId).Set(nameof(Entity.Middle.Middle.IsDelete), false)); } } } } if (request.ChatType == 2) { var oftenContacts = await _repository.GetAllAsync(Q.Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId)); await _repository.UpdateAsync(Q.Set(nameof(Entity.OftenContact.IsDelete), false).Where(nameof(Entity.OftenContact.ContactUserId), request.ContactUserId)); //修改middle query = Q.NewQuery(); query.Set(nameof(Entity.Middle.Middle.IsDelete), false); query.WhereIn(nameof(Entity.Middle.Middle.MiddleId), oftenContacts.Select(n => n.Id)); query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()); await _middleRepository.UpdateAsync(query); //修改文件夹 query = Q.NewQuery(); query.WhereIn(nameof(Entity.Middle.Middle.MiddleId), oftenContacts.Select(n => n.Id)); query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Wechat.GetHashCode()); var middles = await _middleRepository.GetAllAsync(query); foreach (var middle in middles) { if (middle.ParentId > 0) { await _middleRepository.UpdateAsync(Q.Where(nameof(Entity.Middle.Middle.Id), middle.ParentId).Set(nameof(Entity.Middle.Middle.IsDelete), false)); } } } } return result; } try { // using (TransactionScope transactionScope = new TransactionScope()) // { if (request.ChatType == 1) { var oftenContact = new Entity.OftenContact { IndividualGroupId = request.IndividualGroupId, ContactUserId = request.ContactUserId, UserId = userId, ChatType = request.ChatType, IsBlack = false, IsDelete = false }; var oftenContactId = await _repository.InsertAsync(oftenContact); //添加middle var middle = new Entity.Middle.Middle(); middle.IsAdmin = true; middle.MiddleId = oftenContactId; middle.FolderType = GxPress.EnumConst.AllTypeConst.Wechat.GetHashCode(); middle.IsDefault = false; middle.IsDelete = false; middle.IsRead = false; middle.IsTop = false; middle.UserId = userId; middle.IsUpload = false; middle.ParentId = request.IndividualGroupId; await _middleRepository.InsertAsync(middle); oftenContact = new Entity.OftenContact { IndividualGroupId = 0, ContactUserId = userId.ToString(), UserId = int.Parse(request.ContactUserId), ChatType = request.ChatType, IsBlack = false, IsDelete = false }; oftenContactId = await _repository.InsertAsync(oftenContact); //添加middle middle = new Entity.Middle.Middle(); middle.IsAdmin = true; middle.MiddleId = oftenContactId; middle.FolderType = AllTypeConst.Wechat.GetHashCode(); middle.IsDefault = false; middle.IsDelete = false; middle.UserId = int.Parse(request.ContactUserId); middle.IsRead = false; middle.IsTop = false; middle.IsUpload = false; middle.ParentId = request.IndividualGroupId; await _middleRepository.InsertAsync(middle); } else { var oftenContact = new Entity.OftenContact { IndividualGroupId = request.IndividualGroupId, ContactUserId = request.ContactUserId, UserId = userId, ChatType = request.ChatType, IsBlack = false, IsDelete = false }; var oftenContactId = await _repository.InsertAsync(oftenContact); //添加middle var middle = new Entity.Middle.Middle(); middle.IsAdmin = true; middle.MiddleId = oftenContactId; middle.FolderType = AllTypeConst.Wechat.GetHashCode(); middle.IsDefault = false; middle.IsDelete = false; middle.UserId = userId; middle.IsRead = false; middle.IsTop = false; middle.IsUpload = false; middle.ParentId = request.IndividualGroupId; result.Id = await _middleRepository.InsertAsync(middle); } // transactionScope.Complete(); // } } catch (Exception e) { Console.WriteLine(e); throw; } return result; } } }