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 { /// /// 过期提醒job /// 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(); var wxUserService = scope.ServiceProvider.GetService(); var userService = scope.ServiceProvider.GetService(); 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 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(); 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; } } } }