124 lines
5.9 KiB
C#
124 lines
5.9 KiB
C#
using Hncore.Infrastructure.Common;
|
||
using Hncore.Pass.Vpn.Service;
|
||
using Microsoft.EntityFrameworkCore;
|
||
using Microsoft.Extensions.DependencyInjection;
|
||
using System;
|
||
using System.Threading.Tasks;
|
||
using Hncore.Infrastructure.Extension;
|
||
using System.Linq;
|
||
using Hncore.Wx.Open;
|
||
using Hncore.Infrastructure.SMS;
|
||
using Hncore.Pass.BaseInfo.Models;
|
||
using System.Collections.Generic;
|
||
using Hncore.Pass.Vpn.Domain;
|
||
|
||
namespace Hncore.Pass.Vpn.Job
|
||
{
|
||
/// <summary>
|
||
/// 过期提醒job
|
||
/// </summary>
|
||
public class ExpireTipJob
|
||
{
|
||
public static void Start(IServiceProvider serviceProvider)
|
||
{
|
||
Task.Run(async () => { await Execute(serviceProvider); });
|
||
}
|
||
|
||
private static async Task Execute(IServiceProvider serviceProvider)
|
||
{
|
||
var doing = false;
|
||
while (true)
|
||
{
|
||
while (true)
|
||
{
|
||
if (doing||!(DateTime.Now.Hour == 8 && DateTime.Now.Minute < 5))
|
||
{
|
||
break;
|
||
}
|
||
LogHelper.Trace("开始过期提醒");
|
||
doing = true;
|
||
try
|
||
{
|
||
using (var scope = serviceProvider.CreateScope())
|
||
{
|
||
var accountService = scope.ServiceProvider.GetService<ProductAccountService>();
|
||
var wxUserService = scope.ServiceProvider.GetService<WxAppUserService>();
|
||
var userService = scope.ServiceProvider.GetService<UserService>();
|
||
|
||
var expireAccounts1 = await accountService.GetExpireingAccountsTime(1);
|
||
var expireAccounts0 = await accountService.GetExpireingAccountsTime(0);
|
||
var expireAccounts_1 = await accountService.GetExpireingAccountsTime(-1);
|
||
|
||
await Tip(expireAccounts1, wxUserService, userService, "还有一天过期");
|
||
await Tip(expireAccounts0, wxUserService, userService, "今天过期");
|
||
await Tip(expireAccounts_1, wxUserService, userService, "已经过期一天");
|
||
|
||
}
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
LogHelper.Error("处理过期提醒失败", e);
|
||
break;
|
||
}
|
||
finally
|
||
{
|
||
doing = false;
|
||
}
|
||
await Task.Delay(6*60 * 1000);
|
||
}
|
||
await Task.Delay(60 * 1000);
|
||
}
|
||
}
|
||
|
||
public static async Task Tip(List<ProductAccountEntity> accounts, WxAppUserService wxUserService, UserService userService,string tip="")
|
||
{
|
||
var userIds = accounts.Select(m => m.UserId.Value).Distinct().ToList();
|
||
var wxUsers = await wxUserService.GetWxUsers(userIds);
|
||
var userInfos = await userService.GetByIds(userIds);
|
||
|
||
var tipUsers = new Dictionary<int, bool>();
|
||
foreach (var account in accounts)
|
||
{
|
||
if (tipUsers.ContainsKey(account.UserId.Value)||account.PackageName.IndexOf("测试")!=-1 || account.PackageName.IndexOf("天卡") != -1)
|
||
{
|
||
continue;
|
||
}
|
||
var userInfo = userInfos.FirstOrDefault(m => m.Id == account.UserId);
|
||
if (wxUsers != null && wxUsers.Count > 0)
|
||
{
|
||
var wxUser = wxUsers.FirstOrDefault(m => m.UserId == account.UserId);
|
||
if (wxUser != null && wxUser.Openid.Has())
|
||
{
|
||
var msg = new TemplateMPModel();
|
||
msg.first = new TemplateDataItem($"尊敬的用户您好,你的账户{tip}!");
|
||
msg.Url = "www.juip.com";
|
||
msg.template_id = "ltm4OfRDoxgdRG4EC8NMzX-NrkfHUz8aGz33TXSbP44";
|
||
msg.Items.Add(new TemplateDataItem("请登录juip.com查看具体的到期账号!"));
|
||
msg.Items.Add(new TemplateDataItem(userInfo.Phone));
|
||
msg.Items.Add(new TemplateDataItem("动态IP账号服务"));
|
||
msg.Items.Add(new TemplateDataItem(account.EndTime.Value.ToString("yyyy-MM-dd hh:mm:ss")));
|
||
msg.remark = new TemplateDataItem("请登录官网juip.com,点击个人中心,查看需要续费的动态ip账号");
|
||
await TemplateApi.SendTemplateMessageAsync(wxUser.Appid, wxUser.Openid, Wx.Open.Enums.ChannelType.MP, msg);
|
||
}
|
||
}
|
||
|
||
var ret = false;
|
||
if (userInfo != null && RegexPattern.IsMobile(userInfo.Phone))
|
||
{
|
||
if(tip=="今天过期"){
|
||
ret = AliSmsService.Send("SMS_199202299", new { date = account.EndTime.Value.ToString("yyyy-MM-dd hh:mm:ss") }, "聚IP商城", userInfo.Phone);
|
||
} else if(tip=="还有一天过期"){
|
||
ret = AliSmsService.Send("SMS_199222107", new { date = account.EndTime.Value.ToString("yyyy-MM-dd hh:mm:ss") }, "聚IP商城", userInfo.Phone);
|
||
} else {
|
||
ret = AliSmsService.Send("SMS_202820825", new { date = account.EndTime.Value.ToString("yyyy-MM-dd hh:mm:ss") }, "聚IP商城", userInfo.Phone);
|
||
}
|
||
// var ret = AliSmsService.Send("SMS_193505090", new { date = account.EndTime.Value.ToString("yyyy-MM-dd hh:mm:ss") }, "聚IP商城", userInfo.Phone);
|
||
}
|
||
tipUsers[account.UserId.Value] = true;
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
} |