using System.Linq.Expressions; using System.Text.RegularExpressions; using AdminDomain.BeautifulNumber; using AdminDomain.Entity; using Common; using Common.CommonModel; using Common.Utils; using CommonInfrastructure.Response; using Microsoft.Extensions.Logging; using MongoDB.Driver; using MongoRepository; using RedisService; using UserDomain.Entity; using UserService.BeautifulNumber; using XAct; namespace UserService.BeautifulNumber { public class BeautifulNumberService : IBeautifulNumberService { private readonly IMongoBaseRepository _beautifulNumberMongo; private readonly IMongoBaseRepository _userMongo; private readonly IRedisService _cache; public BeautifulNumberService( IMongoBaseRepository beautifulNumberMongo, IMongoBaseRepository userMongo, IRedisService cache) { _beautifulNumberMongo = beautifulNumberMongo; _userMongo = userMongo; _cache = cache; } public async Task> GetList(BeautifulNumberListParam param) { Expression> filter = c => true; if (!string.IsNullOrEmpty(param.level)) { filter = filter.And(c => c.Level == param.level); } if (param.status.HasValue) { filter = filter.And(c => c.Status == (BeautifulNumberStatus)param.status.Value); } if (!string.IsNullOrEmpty(param.numberSearch)) { filter = filter.And(c => c.Number.Contains(param.numberSearch)); } var (total, list) = await _beautifulNumberMongo.QueryPageAsync(filter, c => c.CreateTime, false, param.size, param.page); return new PageResponse { Data = list, Count = (int)total }; } public async Task> GetAvailableList(BeautifulNumberListParam param) { param.status = (int)BeautifulNumberStatus.Available; return await GetList(param); } public async Task<(bool isok, string msg)> Purchase(string number, LoginUser loginUser) { var config = await _beautifulNumberMongo.FindOneAsync(c => c.Number == number); if (config == null) { return (false, "靓号不存在"); } if (config.Status != BeautifulNumberStatus.Available) { return (false, "靓号不可购买"); } var user = await _userMongo.FindByIdAsync(loginUser.UserId); if (user == null) { return (false, "用户不存在"); } if (user.Assets.Gold < config.Price) { return (false, "金币不足"); } user.Assets.Gold -= config.Price; config.Status = BeautifulNumberStatus.Sold; config.SaleTime = DateTime.Now.ToTimeStamp(); config.BuyerUserId = loginUser.UserId; config.UserId = loginUser.UserId; await _userMongo.ReplaceOneAsync(user); await _beautifulNumberMongo.ReplaceOneAsync(config); return (true, "购买成功"); } public async Task CheckNumber(string number) { var config = await _beautifulNumberMongo.FindOneAsync(c => c.Number == number); if (config != null) { return config; } var isUsed = _userMongo.Count(c => c.BaseInfo.Number == number) > 0; return new BeautifulNumberConfig { Number = number, RuleName = config.RuleName, Level = config.Level, Price = config.Price, Status = isUsed ? BeautifulNumberStatus.Sold : BeautifulNumberStatus.Normal }; } public async Task<(bool isok, string msg)> BindToUser(string number, string userId) { var config = await _beautifulNumberMongo.FindOneAsync(c => c.Number == number); if (config == null) { return (false, "靓号不存在"); } config.UserId = userId; await _beautifulNumberMongo.ReplaceOneAsync(config); return (true, "绑定成功"); } } }