Files
juipnet/Services/Hncore.Pass.Vpn/Service/ProductAccountService.cs
“wanyongkang” f70a7c74db 水滴账号问题
2024-04-21 12:45:28 +08:00

234 lines
9.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using HHncore.Pass.Vpn.Request.Product;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.Service;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.EF;
namespace Hncore.Pass.Vpn.Service
{
public partial class ProductAccountService : ServiceBase<ProductAccountEntity>, IFindService
{
CourseContext m_DbContext;
private IConfiguration m_Configuration;
public AgentService m_AgentService;
private UserService m_UserService;
public ProductAccountService(CourseContext dbContext
, AgentService _AgentService
, UserService _UserService
, IConfiguration _Configuration
, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
m_DbContext = dbContext;
m_AgentService = _AgentService;
m_Configuration = _Configuration;
m_UserService = _UserService;
}
public async Task<bool> CheckAccountExist(int productId, List<string> accouts)
{
var flag = this.Exist(m => accouts.Contains(m.Account) && m.DeleteTag == 0);
if (flag)
{
return true;
}
foreach (var item in accouts)
{
var ret = await m_AgentService.Exist(productId, item);
await Task.Delay(50);
if (ret == true)
return true;
}
return false;
}
public async Task<bool> CheckAccountagentExist(int productId, List<string> accouts)
{
foreach (var item in accouts)
{
var ret = await m_AgentService.Exist(productId, item);
await Task.Delay(50);
if (ret == true)
return true;
}
return false;
}
//检查参加活动账号是否已经存在
public async Task<bool> CheckMonthAccountExist(string account)
{
var flag = this.Exist(m => m.Account == account && m.PackageId == 86);
if (flag)
{
return true;
}
return false;
}
public bool CheckUserAccountExist(int product, List<string> accouts, int userId)
{
return this.Exist(m => accouts.Contains(m.Account) && m.UserId == userId);
}
public async Task<ProductAccountEntity> GetAccountInfo(string accout, int userId)
{
return await this.Query(true).FirstOrDefaultAsync(m => m.Account == accout && m.UserId == userId && m.DeleteTag == 0);
}
public async Task<List<ProductAccountEntity>> GetAccounts(string accouts,int userId=0)
{
var alist = accouts.Split(",");
return await this.Query(m =>(userId==0||m.UserId== userId)&& alist.Contains(m.Account)&&m.DeleteTag==0).ToListAsync();
}
public async Task<ProductAccountEntity> GetAccountInfo(string accout)
{
return await this.Query(true).FirstOrDefaultAsync(m => m.Account == accout);
}
public async Task<ProductAccountEntity> GetAccountNotRefundInfo(string accout)
{
return await this.Query(true).FirstOrDefaultAsync(m => m.Account == accout && m.DeleteTag == 0);
}
public async Task<ProductAccountEntity> GetAccountInfo(int packageId,string accout)
{
return await this.Query(true).FirstOrDefaultAsync(m =>m.PackageId== packageId&& m.Account == accout);
}
public async Task<ProductAccountEntity> GetProductAccountInfo(int productId, string accout)
{
return await this.Query(true).FirstOrDefaultAsync(m => m.ProductId == productId && m.Account == accout && m.DeleteTag == 0);
}
/// <summary>
/// day 0已过期1天
/// </summary>
/// <param name="day"></param>
/// <returns></returns>
public async Task<List<ProductAccountEntity>> GetExpireingAccounts_bak(int day)
{
Expression<Func<ProductAccountEntity, bool>> expr = m => 1 == 1;
if (day == 0)
{
expr = expr.And(m => m.EndTime.Value < DateTime.Now);
}
else
{
var startTime = DateTime.Now.Begin().AddDays(day);
var EndTime = DateTime.Now.End().AddDays(day);
expr = expr.And(m => m.EndTime >= startTime && m.EndTime <= EndTime);
}
return await this.Query(expr,true).ToListAsync();
}
public async Task<List<ProductAccountEntity>> GetExpireingAccounts(int day)
{
var sql = $"select * from product_account where DATEDIFF(EndTime,now())={day}";
return this.m_DbContext.SqlQuery<ProductAccountEntity>(sql);
}
//主要是用来定时执行的
public async Task<List<ProductAccountEntity>> GetExpireingAccountsTime(int day)
{
var sql = $"select * from product_account WHERE DATEDIFF(EndTime,now())={day} AND `PackageName` NOT LIKE '天卡' AND `PackageName` NOT LIKE '测试卡' GROUP BY UserId";
// var sql = $"select * from product_account where DATEDIFF(EndTime,now())={day} AND PackageName!='测试卡' AND PackageName!='天卡' GROUP BY UserId";
return this.m_DbContext.SqlQuery<ProductAccountEntity>(sql);
}
public async Task<ApiResult> UpdateAccountPwd(UpdateAccountPwdRequest request)
{
var entity = await this.GetById(request.Id);
if (entity == null)
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "账号不存在");
}
if (request.Pwd.NotHas())
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "密码不能为空");
}
var agentRet = false;
if (entity.ProductId == 28) {
var account = entity.Account;
if (entity.PackageName.Contains("固态")) {
account = entity.Account + "-" + "1";
} else {
account = entity.Account + "-" + "0";
}
agentRet = await m_AgentService.UpdateAccountPwd(entity.ProductId.Value, account, request.Pwd);
} else {
agentRet = await m_AgentService.UpdateAccountPwd(entity.ProductId.Value, entity.Account, request.Pwd);
}
if (!agentRet)
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "远程更新失败");
}
entity.Pwd = request.Pwd;
await this.Update(entity);
return new ApiResult(1);
}
public async Task<ApiResult> ApiUpdateAccountPwd(UpdateAccountPwdRequest request,int userid)
{
var entity = await this.Query(m => m.Account == request.Account && m.Pwd == request.Pwd && m.DeleteTag == 0 && m.UserId == userid).FirstOrDefaultAsync();
if (entity == null)
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "账号不存在");
}
if (request.Pwd.NotHas()&&request.RePwd.NotHas())
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "密码不能为空");
}
if (entity.ProductId == 28) {
if (entity.PackageName.Contains("固态")) {
entity.Account = entity.Account + "-" + "1";
} else {
entity.Account = entity.Account + "-" + "0";
}
}
var agentRet = await m_AgentService.UpdateAccountPwd(entity.ProductId.Value, entity.Account, request.RePwd);
if (!agentRet)
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "远程更新失败");
}
entity.Pwd = request.RePwd;
await this.Update(entity);
return new ApiResult(1);
}
public async Task<List<ProductAccountEntity>> GetUserTestAccount(int userId)
{
return await this.Query(m => m.UserId == userId && m.AccountType == (int)AccountType.Test).ToListAsync();
}
public async Task<int> GetRestTestCount(int userId)
{
var userInfo = await m_UserService.GetById(userId);
var restTimes = Convert.ToInt32(m_Configuration["TestCountLimit"]);
if (userInfo.TestCountLimit > 0) restTimes = userInfo.TestCountLimit.Value;
restTimes = restTimes - userInfo.UseTestCount.Value;
restTimes = restTimes < 0 ? 0 : restTimes;
return restTimes;
}
//获取是否实名认证
public async Task<int> GetUserStatus(int userId)
{
var userInfo = await m_UserService.GetById(userId);
var flag = userInfo.is_verify;
return flag;
}
}
}