123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- 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<Entity.Middle.Middle> 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<OftenContactDto> 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;
- }
- }
- }
|