using Znyc.CloudCar.Auth.HttpContextUser;
using Znyc.CloudCar.Configuration;
using Znyc.CloudCar.IRepository.Currency;
using Znyc.CloudCar.IRepository.Equipment;
using Znyc.CloudCar.IRepository.EquipmentPicture;
using Znyc.CloudCar.IRepository.User;
using Znyc.CloudCar.IServices.Browse;
using Znyc.CloudCar.IServices.CaChe;
using Znyc.CloudCar.Model.Dtos.Browse;
using Znyc.CloudCar.Model.Dtos.EquipmentPicture;
using Znyc.CloudCar.Model.Entities;
using Znyc.CloudCar.Model.ViewModels.ReportsCallBack;
using Znyc.CloudCar.Utility.Helper;
using static Znyc.CloudCar.Configuration.GlobalEnumVars;
namespace Znyc.CloudCar.Services.Browse
{
///
/// 浏览记录服务
///
public class BrowseService : IBrowseService
{
private readonly ICacheService _cacheService;
private readonly IHttpContextUser _httpContextUser;
private readonly IEquipmentRepository _equipmentRepository;
private readonly ICurrencyRecordRepository _currencyRecordRepository;
private readonly IUserRepository _userRepository;
private readonly IEquipmentPictureRepository _equipmentPictureRepository;
public BrowseService(
ICacheService cacheService,
IHttpContextUser httpContextUser,
IEquipmentRepository equipmentRepository,
ICurrencyRecordRepository currencyRecordRepository,
IUserRepository userRepository,
IEquipmentPictureRepository equipmentPictureRepository
)
{
_cacheService = cacheService;
_httpContextUser = httpContextUser;
_equipmentRepository = equipmentRepository;
_currencyRecordRepository = currencyRecordRepository;
_userRepository = userRepository;
_equipmentPictureRepository = equipmentPictureRepository;
}
///
/// 分页查询浏览记录列表
///
///
///
///
public async Task PageAsync(int currentPage, int pageSize)
{
long total = await _cacheService.GetBrowseCountAsync(_httpContextUser.Id);
var list = (await _cacheService.GetBrowseAsync(_httpContextUser.Id)).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList();
List equipmentIds = list.ConvertAll(s => long.Parse(s.Key));
List browseList = await _equipmentRepository.Select
.Where(x => equipmentIds.Contains(x.Id))
.OrderByDescending(x => x.IsTop)
.OrderByDescending(true, x => x.RefreshDate)
.Page(currentPage, pageSize)
.ToListAsync();
//积分记录
List currencyRecordList = new List();
if (_httpContextUser.Id > 0)
{
long[] cIds = browseList.Select(x => x.Id).Distinct().ToArray();
currencyRecordList = await _currencyRecordRepository.Where(x =>
cIds.Contains(x.CurrencySoureObjectId) &&
x.CurrencyType == (int)CurrencyType.CallPhone).ToListAsync();
}
long[] uIds = browseList.Select(x => x.UserId).Distinct().ToArray();
List users = await _userRepository.Select.Where(x => uIds.Contains(x.Id)).ToListAsync();
//设备图片
long[] eIds = browseList.Select(x => x.Id).Distinct().ToArray();
List equipmentPictures = await _equipmentPictureRepository.Select
.Where(x => x.IsDeleted == false && eIds.Contains(x.EquipmentId) && x.PictureType == (int)PictureTypeEnum.Equipment)
.ToListAsync();
foreach (var item in browseList)
{
item.EquipmentPictures = equipmentPictures.FindAll(x => x.EquipmentId == item.Id);
UserEntity user = users.FirstOrDefault(x => x.Id == item.UserId);
item.UserName = user?.UserName ?? GlobalConstVars.User.Default_UserName;
item.AvatarUrl = GlobalConstVars.User.DefaultImagePrefix + (user?.AvatarUrl ?? GlobalConstVars.User.DefaultAvataUrl);
item.IsGetPhone = item.UserId == _httpContextUser.Id ? true : currencyRecordList.Exists(x => x.UserId == _httpContextUser.Id && x.CurrencySoureObjectId == item.Id);
item.ContactPhone = !item.IsGetPhone ? CommonHelper.ToHiddenPhone(item.ContactPhone) : item.ContactPhone;
item.CallPhoneCurrency = CommonHelper.GetCallPhoneCurrency(Convert.ToInt32(item.SellingPrice));
item.SellingPrice = item.SellingPrice / 10000;
}
PageOutput data = new PageOutput
{
List = browseList,
Total = total
};
ResponseOutput response = new ResponseOutput()
{
Data = data,
Successed = true,
Code = 1
};
return response;
}
}
}