using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Collections.Generic; using System.Linq; using System.Text; using dodohold.core; using Dataoke; using Google.Protobuf.WellKnownTypes; using System.Diagnostics; using System.Text.Json; using TencentCloud.Tcm.V20210413.Models; using System.Security.Cryptography; using System.Data; namespace molilian.core { public partial class TkOrderTrackingCore { public static void SaveLinkSummary(TkDataDTO item) { var config = TkConfigCore.Get(); var ttl = config.fake_click_ttl * 3600; string cacheKey = $":cache:order_summary:{item.accountName}:{item.itemId}"; RedisHelper.Set(cacheKey, item, ttl); cacheKey = $":cache:order_summary:{item.accountName}:{item.itemName}"; RedisHelper.Set(cacheKey, item, ttl); } public static TkDataDTO GetLinkSummary(string accountName, string name) { string cacheKey = $":cache:order_summary:{accountName}:{name}"; return RedisHelper.Get(cacheKey); } public static void RemoveLinkSummary(string accountName, string itemId) { string cacheKey = $":cache:order_summary:{accountName}:{itemId}"; RedisHelper.Del(cacheKey); } public static bool MatchOrder(TkOrderDetailDTO item, IDbConnection conn) { if (item.tbPaidTime < DateTime.Now.AddDays(-1)) return false; var summary = GetLinkSummary(item.accountName, item.itemTitle); if (summary == null) return false; var config = TkConfigCore.Get(); Random rand = new(); int click_num = rand.Next(config.fake_click_min, config.fake_click_max + 1); DateTime paidTime = item.tbPaidTime; if (paidTime < summary.create_time) return false; int minutes = paidTime.Minute / 10 * 10; DateTime rounded = new(paidTime.Year, paidTime.Month, paidTime.Day, paidTime.Hour, minutes, 0); string batchId = rounded.ToString("yyyyMMddHHmm"); DateTime expTime = item.tbPaidTime.Hour >= 21 ? item.tbPaidTime.AddHours(3) : item.tbPaidTime.Date.AddDays(1); var data = new TkOrderTrackingDTO() { channel = summary.channel, accountId = item.accountId, accountName = item.accountName, batchId = batchId, ip = summary.ip, oaid = summary.oaid, itemId = summary.itemId, itemName = summary.itemName, taoToken = summary.taoToken, shortLinkUrl = summary.shortLinkurl, deeplinkUrl = summary.deeplink_url, tradeId = item.tradeId, tradeParentId = item.tradeParentId, create_time = summary.create_time, click_time = item.clickTime, paid_time = item.tbPaidTime, exp_time = expTime, click_num = click_num, }; conn.Replace(data); RemoveLinkSummary(item.accountName, item.itemTitle); return true; } } }