public IEnumerable <AddressBookMobile> Change(IEnumerable <AddressBookItem> items) { List <AddressBookMobile> result = new List <AddressBookMobile>(); if (items == null) { return(Enumerable.Empty <AddressBookMobile>().ToArray()); } var books = items.Where(b => StringRule.VerifyMobile(b.Mobile) && (b.TgUid == null || b.TgUid != _User.Uid)).ToArray(); if (books.Length == 0) { return(Enumerable.Empty <AddressBookMobile>().ToArray()); } foreach (var item in books) { item.Mobile = (item.Mobile ?? String.Empty).Trim(); item.Name = (item.Name ?? String.Empty).Trim().Left(50); item.Company = (item.Company ?? String.Empty).Trim().Left(100); } var mobiles = books.Select(b => b.Mobile).Distinct().ToArray(); lock (_Locker) { var exist = _AddressBookMobileRepository.Entities.Where(m => m.uid == _User.Uid && mobiles.Contains(m.mobile)).Select(m => m.mobile).ToArray(); if (exist.Length > 0) { mobiles = mobiles.Except(exist).ToArray(); } if (mobiles.Length > 0) { result.AddRange(mobiles.Select(m => new Data.AddressBookMobile { mobile = m, createDate = DateTime.Now, uid = _User.Uid, tguid = books.Where(b => b.Mobile == m).Select(b => b.TgUid).FirstOrDefault(), company = books.Where(b => b.Mobile == m).Select(b => b.Company).FirstOrDefault(), name = books.Where(b => b.Mobile == m).Select(b => b.Name).FirstOrDefault() })); _AddressBookMobileRepository.AddRange(result); _AddressBookMobileRepository.SaveChanges(); } _PushManager.GenContact(_User.Uid, _User.Mobile, result.Select(b => new FCRMAPI.Request.Contact() { Aid = b.id, Mobile = b.mobile }).ToArray()); } return(result); }
public bool RePushUserContactToNoqlDataBase(int start, int limit) { bool end = false; var source = _FootChatUserRepository.Entities; var count = source.Count(); if (start + limit >= count) { end = true; } var users = source.Select(p => new { uid = p.uid, mobile = p.mobile, created = p.created }); var userArr = users.OrderBy(p => p.created).Take(start, limit).ToArray(); var uids = userArr.Select(p => p.uid).ToArray(); var addressBooks = _AddressBookMobileRepository.Entities.AsNoTracking().Where(p => uids.Contains(p.uid)).GroupBy(p => p.uid) .ToDictionary(p => p.Key, p => p.Select(a => new { aid = a.id, mobile = a.mobile })); foreach (var user in userArr) { if (addressBooks.ContainsKey(user.uid)) { _PushManager.GenContact(user.uid, user.mobile, addressBooks[user.uid].Select(b => new FCRMAPI.Request.Contact() { Aid = b.aid, Mobile = b.mobile }).ToArray()); } } return(end); }