using dodohold.core;
using Spire.Pdf.Xmp;
using System.Data;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System.Text.Json;
using System.Text.RegularExpressions;
using static System.Runtime.InteropServices.JavaScript.JSType;

namespace molilian.core
{
    public partial class AlimamaPlus
    {
        private const string base_orders_url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/report.getTbkOrderDetails.json";

        public int GetHistoryOrders(int sleep, DateTime startTime, DateTime endTime)
        {
            //DateTime endTime = DateTime.Now;
            //DateTime startTime = endTime.AddDays(-90);
            //if (_accountId == 3) endTime = DateTime.Parse("2024-04-07");
//#if DEBUG

//            startTime = DateTime.Parse("2024-05-01");
//            endTime = DateTime.Parse("2024-06-01");


//            int total = 0;

//            List<DateTime> orderTimes = new List<DateTime>();

//            for (DateTime date = startTime; date <= endTime; date = date.AddDays(1))
//            {
//                orderTimes.Add(date);
//            }


//#else

//#endif       

            //当日往前查询
            (int total, DateTime max_modifiedTime, List<DateTime> orderTimes) = GetTkOrders(startTime, endTime, DateTime.MinValue, false, sleep);

            string sql = @"
UPDATE tk_report tr
JOIN (
    SELECT
        accountId, DATE(tbPaidTime) AS date, SUM(alipayTotalPrice) AS order_ord_amt,
        COUNT(*) AS order_ord_num, SUM(pubShareFeeForCommission) AS order_ord_tfee
    FROM tk_order_details
    WHERE DATE(tbPaidTime) IN @orderTimes AND tkStatus=3 AND accountId=@accountId
    GROUP BY DATE(tbPaidTime), accountId
) AS sub
ON tr.accountId = sub.accountId AND tr.report_date = sub.date
SET tr.order_ord_amt = sub.order_ord_amt, tr.order_ord_num_3 = sub.order_ord_num, 
    tr.order_ord_tfee = sub.order_ord_tfee;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            sql = @"
UPDATE tk_report tr
JOIN (
    SELECT
        accountId, DATE(tbPaidTime) AS date, SUM(alipayTotalPrice) AS order_ord_amt, 
        COUNT(*) AS order_ord_num, SUM(pubSharePreFeeForCommission) AS order_ord_tfee
    FROM tk_order_details
    WHERE DATE(tbPaidTime) IN @orderTimes AND tkStatus=12 AND accountId=@accountId
    GROUP BY DATE(tbPaidTime), accountId
) AS sub
ON tr.accountId = sub.accountId AND tr.report_date = sub.date
SET tr.order_ord_amt_12 = sub.order_ord_amt, tr.order_ord_num_12 = sub.order_ord_num, 
    tr.order_ord_tfee_12 = sub.order_ord_tfee;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            sql = @"
UPDATE tk_report tr
JOIN (
    SELECT
        accountId, DATE(tbPaidTime) AS date, SUM(alipayTotalPrice) AS order_ord_amt, 
        COUNT(*) AS order_ord_num, SUM(pubSharePreFeeForCommission) AS order_ord_tfee
    FROM tk_order_details
    WHERE DATE(tbPaidTime) IN @orderTimes AND tkStatus=13 AND accountId=@accountId
    GROUP BY DATE(tbPaidTime), accountId
) AS sub
ON tr.accountId = sub.accountId AND tr.report_date = sub.date
SET tr.order_ord_amt_13 = sub.order_ord_amt, tr.order_ord_num_13 = sub.order_ord_num, 
    tr.order_ord_tfee_13 = sub.order_ord_tfee;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            sql = @"
UPDATE tk_report tr
JOIN (
    SELECT
        accountId, DATE(tbPaidTime) AS date, SUM(alipayTotalPrice) AS order_ord_amt, 
        COUNT(*) AS order_ord_num, SUM(pubSharePreFeeForCommission) AS order_ord_tfee
    FROM tk_order_details
    WHERE DATE(tbPaidTime) IN @orderTimes AND tkStatus=14 AND accountId=@accountId
    GROUP BY DATE(tbPaidTime), accountId
) AS sub
ON tr.accountId = sub.accountId AND tr.report_date = sub.date
SET tr.order_ord_amt_14 = sub.order_ord_amt, tr.order_ord_num_14 = sub.order_ord_num, 
    tr.order_ord_tfee_14 = sub.order_ord_tfee;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            sql = @"UPDATE tk_report 
SET  order_ord_num = order_ord_num_3 + order_ord_num_12 + order_ord_num_13 + order_ord_num_14
 WHERE DATE(report_date) IN @orderTimes AND accountId=@accountId;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            return total;

        }
        public int GetIncyOrders(int sleep)
        {
            string cacheKey = $":cache:GetIncyOrders:{_accountName}";
            string cacheKey2 = $":cache:GetIncyOrders:{_accountId}";
            DateTime endTime = DateTime.Now;
            DateTime startTime = endTime.AddDays(-1);


            DateTime last_modifiedTime = RedisHelper.Get<DateTime>(cacheKey);
            ////找出数据库最新的一天
            //var last = new DBContext.Table("tk_order_details")
            //     .Order("modifiedTime DESC")
            //     .Get<TkOrderDetailDTO>("accountId=@accountId", new { accountId = _accountId });


            if (last_modifiedTime != DateTime.MinValue)
            {
                startTime = last_modifiedTime;
            }
            else
            {
                last_modifiedTime = startTime;
            }

            //当日往前查询
            (int total, DateTime max_modifiedTime, List<DateTime> orderTimes) = GetTkOrders(startTime, endTime, last_modifiedTime, true, sleep);
            if (max_modifiedTime != DateTime.MinValue)
            {
                RedisHelper.Set(cacheKey, max_modifiedTime);
                RedisHelper.Set(cacheKey2, max_modifiedTime);
            }

            //todo 根据orderTimes、settlementTimes 更新被影响的相关行 

            string sql = @"
UPDATE tk_report tr
JOIN (
    SELECT
        accountId, DATE(tbPaidTime) AS date, SUM(alipayTotalPrice) AS order_ord_amt,
        COUNT(*) AS order_ord_num, SUM(pubShareFeeForCommission) AS order_ord_tfee
    FROM tk_order_details
    WHERE DATE(tbPaidTime) IN @orderTimes AND tkStatus=3 AND accountId=@accountId
    GROUP BY DATE(tbPaidTime), accountId
) AS sub
ON tr.accountId = sub.accountId AND tr.report_date = sub.date
SET tr.order_ord_amt = sub.order_ord_amt, tr.order_ord_num_3 = sub.order_ord_num, 
    tr.order_ord_tfee = sub.order_ord_tfee;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            sql = @"
UPDATE tk_report tr
JOIN (
    SELECT
        accountId, DATE(tbPaidTime) AS date, SUM(alipayTotalPrice) AS order_ord_amt, 
        COUNT(*) AS order_ord_num, SUM(pubSharePreFeeForCommission) AS order_ord_tfee
    FROM tk_order_details
    WHERE DATE(tbPaidTime) IN @orderTimes AND tkStatus=12 AND accountId=@accountId
    GROUP BY DATE(tbPaidTime), accountId
) AS sub
ON tr.accountId = sub.accountId AND tr.report_date = sub.date
SET tr.order_ord_amt_12 = sub.order_ord_amt, tr.order_ord_num_12 = sub.order_ord_num, 
    tr.order_ord_tfee_12 = sub.order_ord_tfee;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            sql = @"
UPDATE tk_report tr
JOIN (
    SELECT
        accountId, DATE(tbPaidTime) AS date, SUM(alipayTotalPrice) AS order_ord_amt, 
        COUNT(*) AS order_ord_num, SUM(pubSharePreFeeForCommission) AS order_ord_tfee
    FROM tk_order_details
    WHERE DATE(tbPaidTime) IN @orderTimes AND tkStatus=13 AND accountId=@accountId
    GROUP BY DATE(tbPaidTime), accountId
) AS sub
ON tr.accountId = sub.accountId AND tr.report_date = sub.date
SET tr.order_ord_amt_13 = sub.order_ord_amt, tr.order_ord_num_13 = sub.order_ord_num, 
    tr.order_ord_tfee_13 = sub.order_ord_tfee;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            sql = @"
UPDATE tk_report tr
JOIN (
    SELECT
        accountId, DATE(tbPaidTime) AS date, SUM(alipayTotalPrice) AS order_ord_amt, 
        COUNT(*) AS order_ord_num, SUM(pubSharePreFeeForCommission) AS order_ord_tfee
    FROM tk_order_details
    WHERE DATE(tbPaidTime) IN @orderTimes AND tkStatus=14 AND accountId=@accountId
    GROUP BY DATE(tbPaidTime), accountId
) AS sub
ON tr.accountId = sub.accountId AND tr.report_date = sub.date
SET tr.order_ord_amt_14 = sub.order_ord_amt, tr.order_ord_num_14 = sub.order_ord_num, 
    tr.order_ord_tfee_14 = sub.order_ord_tfee;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            sql = @"UPDATE tk_report 
SET  order_ord_num = order_ord_num_3 + order_ord_num_12 + order_ord_num_13 + order_ord_num_14
 WHERE DATE(report_date) IN @orderTimes AND accountId=@accountId;";
            DBContext.Execute(sql, new { accountId = _accountId, orderTimes });

            return total;
        }

        public int GetOrdersByAdZone(long adzoneId, DateTime startTime, DateTime endTime, int sleep)
        {
            string cacheKey = $":cache:GetOrdersByAdZone:{_accountName}";
            string cacheKey2 = $":cache:GetOrdersByAdZone:{_accountId}";

            DateTime last_modifiedTime = RedisHelper.Get<DateTime>(cacheKey);

            if (last_modifiedTime != DateTime.MinValue)
            {
                startTime = last_modifiedTime;
            }
            else
            {
                last_modifiedTime = startTime;
            }

            //当日往前查询
            (int total, DateTime max_modifiedTime, List<DateTime> orderTimes) = GetTkOrdersByAdZone(adzoneId, startTime, endTime, last_modifiedTime, true, sleep);
            if (max_modifiedTime != DateTime.MinValue)
            {
                RedisHelper.Set(cacheKey, max_modifiedTime);
                RedisHelper.Set(cacheKey2, max_modifiedTime);
            }

            return total;
        }
        public (int, DateTime, List<DateTime>) GetTkOrdersByAdZone(long adzoneId, DateTime startTime, DateTime endTime, DateTime last_modifiedTime, bool desc = true, int sleep = 100)
        {
            List<DateTime> orderTimes = [];

            if (startTime > endTime)
            {
                (startTime, endTime) = (endTime, startTime);
            }

            DateTime max_modifiedTime = last_modifiedTime;

            int pageNo = 1;
            string positionIndex = string.Empty;
            int pageSize = 100;

            bool hasNext = true;
            int total = 0;
            while (hasNext)
            {
                var ts = DateTime.Now.Convert2UnixTimestamp(true);
                string jumpType = pageNo == 1 ? "0" : "1";

#if DEBUG
                jumpType = pageNo == 1 ? "0" : "1";


#endif
                string queryType = desc ? "4" : "2";

                string url = $"{base_orders_url}?t={ts}&_tb_token_={_tb_token}&pageNo={pageNo}&pageSize={pageSize}&startTime={startTime:yyyy-MM-dd}&endTime={endTime:yyyy-MM-dd}&payStatus=&queryType={queryType}&jumpType={jumpType}&tkTradeId=&positionIndex={positionIndex.UrlEncode()}";
                string body = "";

                JsonElement data;
                try
                {
                    for (var i = 1; i <= 5; i++)
                    {
                        var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
                              .AddHeaders("X-Requested-With", "XMLHttpRequest")
                              .AddHeaders("Cookie", _cookies);
#if DEBUG
#else
                        client.Proxy = _proxy;
#endif
                        if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
                        var response = client.Request(url);

                        if (response.ResponseException != null)
                        {
                            _ = new LoggerLibrary("api_error", "fail")
                                .Info(response.ResponseException.Message, response.ResponseException.StackTrace)
                                .SaveAsync();
                            throw response.ResponseException;
                        }
                        body = response.Body();
#if DEBUG
                        _ = new LoggerLibrary("debug", "GetTkOrdersByAdZone")
                            .Info(body)
                            .SaveAsync();
#endif
                        if (body.Contains("{\"action\":\"captcha\""))
                        {
                            string message = $"【GetTkOrdersByAdZone】【{_accountId}:{_accountName}】第 {i} 次出现滑动验证码";
                            NotifyCore.Notify(new NifyMessage
                            {
                                message = message,
                                priority = NifyMessagePriority.high,
                                tags = ["red_circle"]
                            });
                            Thread.Sleep(i * 60 * 1000);
                            continue;
                        }

                        if (body.Contains("\"resultCode\":500"))
                        {
                            string message = $"【GetTkOrdersByAdZone】【{_accountId}:{_accountName}】第 {i} 次出现错误\n{body}";
                            NotifyCore.Notify(new NifyMessage
                            {
                                message = message,
                                priority = NifyMessagePriority.high,
                                tags = ["red_circle"]
                            });
                            Thread.Sleep(i * 60 * 1000);
                            continue;
                        }
                        break;
                    }
                    var root = body.Convert2JsonElement();
                    var success = root.Read<bool>("success");
                    data = root.ElementRead("data");

                    if (!success && body.Contains("nologin"))
                    {
                        (success, string message) = RenewCookie();
                        if (!success)
                        {
                            TkPoolCore.Disabled(_accountId, _accountName, $"{body}");
                        }
                        return (0, DateTime.MinValue, new List<DateTime>());
                    }

                    if (!success)
                    {
                        throw new APIException(body);
                    }
                }
                catch (Exception ex)
                {
                    throw new APIException(body);
                }
                using var conn = DBContext.GetOpenConnection();
                conn.Open();

                try
                {
                    foreach (var order in data.ElementRead("result").EnumerateArray())
                    {
                        TkOrderDetailAdZoneDTO item = order.GetRawText().Convert2Object<TkOrderDetailAdZoneDTO>();
                        // 处理每个订单数据 
                        if (item.adzoneId != adzoneId) continue;

                        item.accountId = _accountId;
                        item.accountName = _company;

                        if (item.modifiedTime > max_modifiedTime) max_modifiedTime = item.modifiedTime;

                        if (last_modifiedTime != DateTime.MinValue && last_modifiedTime >= item.modifiedTime)
                        {
                            return (total, max_modifiedTime, orderTimes);
                        }

                        if (item.tkStatus == 3 && item.tbPaidTime != DateTime.MinValue) orderTimes.Add(item.tbPaidTime.Date);
                        int? id = conn.Replace(item);

                        total++;
                    }
                }
                catch (Exception ex)
                {
                    throw;
                }
                finally
                {
                    conn.Dispose();
                }
                pageNo++;
                hasNext = data.Read<bool>("hasNext");
                positionIndex = data.Read<string>("positionIndex");

                if (sleep > 0) Thread.Sleep(sleep);
            }
            return (total, max_modifiedTime, orderTimes);
        }


        public (int, DateTime, List<DateTime>) GetTkOrders(DateTime startTime, DateTime endTime, DateTime last_modifiedTime, bool desc = true, int sleep = 100)
        {
            List<DateTime> orderTimes = [];

            // 确保 startTime 小于 endTime
            if (startTime > endTime)
            {
                (startTime, endTime) = (endTime, startTime);
            }

            DateTime max_modifiedTime = last_modifiedTime;

            int pageNo = 1;
            string positionIndex = string.Empty;
            int pageSize = 100;

            bool hasNext = true;
            int total = 0;
            while (hasNext)
            {
                var ts = DateTime.Now.Convert2UnixTimestamp(true);
                //string jumpType = desc ? pageNo == 1 ? "0" : "1" : "-1";
                string jumpType = pageNo == 1 ? "0" : "1";

#if DEBUG
                jumpType = pageNo == 1 ? "0" : "1";


#endif
                //string queryType = "1";
                //1 创建时间；3结算时间 2付款时间 4更新时间
                //string queryType = "2";
                string queryType = desc ? "4" : "2";

                string url = $"{base_orders_url}?t={ts}&_tb_token_={_tb_token}&pageNo={pageNo}&pageSize={pageSize}&startTime={startTime:yyyy-MM-dd}&endTime={endTime:yyyy-MM-dd}&payStatus=&queryType={queryType}&jumpType={jumpType}&tkTradeId=&positionIndex={positionIndex.UrlEncode()}";

                //https://pub.alimama.com/openapi/param2/1/gateway.unionpub/report.getTbkOrderDetails.json?t=1719477837298&_tb_token_=7537e7ed93338&pageNo=92&pageSize=20&startTime=2024-03-31&endTime=2024-03-31&payStatus=&queryType=2&jumpType=1&tkTradeId=&positionIndex=1711883373_2vtPPr7CyYX2%7C1711883522_4zcICUeUevh2
                //https://pub.alimama.com/openapi/param2/1/gateway.unionpub/report.getTbkOrderDetails.json?t=1719477942492&_tb_token_=7537e7ed93338&pageNo=7&pageSize=20&startTime=2024-03-31&endTime=2024-03-31&payStatus=&queryType=2&jumpType=1&tkTradeId=&positionIndex=1711899163_4zdpOH1mbTQ2%7C1711899483_4zbH9BHqgl82


                string body = "";

                JsonElement data;
                try
                {
                    for (var i = 1; i <= 5; i++)
                    {
                        var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
                              .AddHeaders("X-Requested-With", "XMLHttpRequest")
                              .AddHeaders("Cookie", _cookies);
#if DEBUG
#else
                        client.Proxy = _proxy;
#endif
                        if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
                        var response = client.Request(url);

                        if (response.ResponseException != null)
                        {
                            _ = new LoggerLibrary("api_error", "fail")
                                .Info(response.ResponseException.Message, response.ResponseException.StackTrace)
                                .SaveAsync();
                            throw response.ResponseException;
                        }
                        body = response.Body();
#if DEBUG
                        _ = new LoggerLibrary("debug", "GetTkOrders")
                            .Info(body)
                            .SaveAsync();
#endif
                        if (body.Contains("{\"action\":\"captcha\""))
                        {
                            string message = $"【GetTkOrders】【{_accountId}:{_accountName}】第 {i} 次出现滑动验证码";
                            NotifyCore.Notify(new NifyMessage
                            {
                                message = message,
                                priority = NifyMessagePriority.high,
                                tags = ["red_circle"]
                            });
                            Thread.Sleep(i * 60 * 1000);
                            continue;
                        }

                        if (body.Contains("\"resultCode\":500"))
                        {
                            //{"success":false,"resultCode":500,"bizErrorDesc":"系统繁忙，请稍后重试！","bizErrorCode":3001}

                            string message = $"【GetTkOrders】【{_accountId}:{_accountName}】第 {i} 次出现错误\n{body}";
                            NotifyCore.Notify(new NifyMessage
                            {
                                message = message,
                                priority = NifyMessagePriority.high,
                                tags = ["red_circle"]
                            });
                            Thread.Sleep(i * 60 * 1000);
                            continue;
                        }
                        break;
                    }

                    /*
<script>sessionStorage.x5referer = window.location.href;var url = window.location.protocol + "//pub.alimama.com//openapi/param2/1/gateway.unionpub/report.getTbkOrderDetails.json/_____tmd_____/punish?x5secdata=xc1iwR0XfHknuQ2tGhtadtTAvEt14YScfTDHt2ZiSRqroaYZK98uykgsVOy7o75Rw8uuycKT3Rpx30%2fB5H0gRc0%2fJVGQUcV5g%2fsAmZ%2bc46eyD7DXSdA4R3mLnmtbp9wuZ1vmrG3ZPlH7brUilFbXBdZ7EBrru1X7wPfC05Eq3g4mhDFiGq39xUtwQcC%2f%2bPbtekcm8%2fVJ%2brVt8aExunwzXzJPJJTAvEt14YScfTDHt2ZiSRqroaYZK98uykgsiXIkw%2ffMWwebJ3zxCja5CzSu%2ffTA%3d%3d__bx__pub.alimama.com%2fopenapi%2fparam2%2f1%2fgateway.unionpub%2freport.getTbkOrderDetails.json&x5step=1";window.location.replace(url);window._config_ = {"action":"captcha","url":"https://pub.alimama.com//openapi/param2/1/gateway.unionpub/report.getTbkOrderDetails.json/_____tmd_____/punish?x5secdata=xc1iwR0XfHknuQ2tGhtadtTAvEt14YScfTDHt2ZiSRqroaYZK98uykgsVOy7o75Rw8uuycKT3Rpx30%2fB5H0gRc0%2fJVGQUcV5g%2fsAmZ%2bc46eyD7DXSdA4R3mLnmtbp9wuZ1vmrG3ZPlH7brUilFbXBdZ7EBrru1X7wPfC05Eq3g4mhDFiGq39xUtwQcC%2f%2bPbtekcm8%2fVJ%2brVt8aExunwzXzJPJJTAvEt14YScfTDHt2ZiSRqroaYZK98uykgsiXIkw%2ffMWwebJ3zxCja5CzSu%2ffTA%3d%3d__bx__pub.alimama.com%2fopenapi%2fparam2%2f1%2fgateway.unionpub%2freport.getTbkOrderDetails.json&x5step=1"};</script><!--rgv587_flag:sm-->                     */
                    var root = body.Convert2JsonElement();
                    var success = root.Read<bool>("success");
                    data = root.ElementRead("data");


                    //{"code":601,"info":{"ok":false,"message":"nologin"}}
                    if (!success && body.Contains("nologin"))
                    {
                        (success, string message) = RenewCookie();
                        if (!success)
                        {
                            TkPoolCore.Disabled(_accountId, _accountName, $"{body}");
                        }
                        return (0, DateTime.MinValue, new List<DateTime>());
                    }

                    if (!success)
                    {
                        throw new APIException(body);
                    }
                }
                catch (Exception ex)
                {
                    throw new APIException(body);
                }
                using var conn = DBContext.GetOpenConnection();
                conn.Open();

                try
                {

                    foreach (var order in data.ElementRead("result").EnumerateArray())
                    {
                        TkOrderDetailDTO item = order.GetRawText().Convert2Object<TkOrderDetailDTO>();
                        // 处理每个订单数据 

                        item.accountId = _accountId;
                        item.accountName = _company;

                        if (item.modifiedTime > max_modifiedTime) max_modifiedTime = item.modifiedTime;

                        if (last_modifiedTime != DateTime.MinValue && last_modifiedTime >= item.modifiedTime)
                        {
                            return (total, max_modifiedTime, orderTimes);
                        }

                        //进行订单和转链匹配
                        item.itemId = GetRawItemId(item.mktId);
                        if (item.tkStatus == 3 && item.tbPaidTime != DateTime.MinValue) orderTimes.Add(item.tbPaidTime.Date);
                        int? id = conn.Replace(item);
                        if (id != null)
                        {
                            item.id = (int)id;
                            TkOrderTrackingCore.MatchOrder(_account, item, conn);
                        }
                        total++;
                    }
                }
                catch (Exception ex)
                {
                    throw;
                }
                finally
                {
                    conn.Dispose();
                }
                pageNo++;
                hasNext = data.Read<bool>("hasNext");
                positionIndex = data.Read<string>("positionIndex");

                if (sleep > 0) Thread.Sleep(sleep);
            }
            return (total, max_modifiedTime, orderTimes);
        }


        string GetRawItemId(string mktId)
        {
            try
            {

                string cacheKey = $":cache:mkt2itemId:{mktId}";

                string itemId = RedisHelper.Get(cacheKey);
                if (itemId != null) return itemId;


                var ts = DateTime.Now.Convert2UnixTimestamp(true);
                string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/union.moose.content.entry";

                //string url = $"{base_orders_url}?t={ts}&_tb_token_={_tb_token}&pageNo={pageNo}&pageSize={pageSize}&startTime={startTime:yyyy-MM-dd}&endTime={endTime:yyyy-MM-dd}&payStatus=&queryType={queryType}&jumpType={jumpType}&tkTradeId=&positionIndex={positionIndex}";

                var client = new WebClientUtility()
                    .SetContentType("application/x-www-form-urlencoded")
                    .AddHeaders("Cookie", _cookies)
                    .AddHeaders("Origin", "https://pub.alimama.com")
                    .Post("_tb_token_", _tb_token)
                    .Post("t", ts.ToString())
                    .Post("bizType", "detailPage")
                    .Post("bizParam", $"{{\"itemId\":\"{mktId}\"}}");
                //_tb_token_=3b88755bbe3f7&t=1718896771391&bizType=detailPage&bizParam=%7B%22itemId%22%3A%22JbtMUqkGMQvagTNb2Fvta-9ag242pu7MOX5e0bsrY%22%7D
                //_tb_token_=361e383eb61e5&t=1718895935097&bizType=detailPage&bizParam=%7B%22itemId%22%3A%22JbtMUqkGMQvagTNb2Fvta-9ag242pu7MOX5e0bsrY%22%7D


#if DEBUG
#else
                client.Proxy = _proxy;
#endif
                if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
                var response = client.Request(url);
                if (!response.Successed)
                {
                    throw response.ResponseException;
                }

                var body = response.Body();
                var root = body.Convert2JsonElement();
                itemId = root.PathRead<string>("model.item.itemId");
                if (!string.IsNullOrEmpty(itemId))
                {
                    RedisHelper.Set(cacheKey, itemId, 86400 * 7);
                }
                return itemId;
            }
            catch (Exception ex)
            {
                string message = $"【GetRawItemId】[{mktId}\n{ex.Message}\n{ex.StackTrace}";
                NotifyCore.Notify(new NifyMessage
                {
                    message = message,
                    priority = NifyMessagePriority.high,
                    tags = ["red_circle"]
                });
            }
            return null;
        }


        public void GetTkOrders222()
        {
            try
            {
                string url = "https://media.alimama.com/violationu2/warning_instance_page_v2.json?r=mx_208&toPage=1&pageSize=40&params=";
                var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
                            .AddHeaders("X-Requested-With", "XMLHttpRequest")
                            .AddHeaders("Cookie", _cookies);
                client.Proxy = _proxy;
                if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
                var response = client.Request(url);

                var body = response.Body();
                var root = body.Convert2JsonElement();

                int resultCode = root.Read<int>("resultCode", 0);
                int totalCount = root.PathRead<int>("data.totalCount", 0);
                bool success = root.Read("success", false);

                if (!success)
                {
                    _ = new LoggerLibrary("violationu", "warning_error")
                        .Info(url, body)
                        .SaveAsync();
                    throw new Exception(body);
                }
                if (totalCount == 0) return;
                _ = new LoggerLibrary("violationu", "warning").Info(url, body).SaveAsync();

                var list = root.ElementRead("data").ElementRead("result").EnumerateArray();
                foreach (var data in list)
                {
                    var violation_commission = data.PathRead<decimal>("mediaInfo.订单虚假交易违规佣金", 0);
                    new DBContext.Table("alimama_warning")
                        .Fill(data)
                        .Loader<int>("filterRuleId", 0)
                        .Loader<long>("gmtCreate", 0)
                        .Loader<long>("id", 0, "ali_id")
                        .Loader<string>("idStr", string.Empty)
                        .Loader<int>("mediaDimension", 0)
                        .Loader<long>("mediaId", 0)
                        .Loader<int>("mediaInfo.abn_cnt", 0, "abn_cnt")
                        .Add("violation_commission", violation_commission)
                        .Loader<int>("mediaInfo.warning_cnt", 0, "warning_cnt")
                        .Loader<string>("mediaName", string.Empty)
                        .Loader<long>("memberId", 0)

                        .Loader<string>("noticeCategory", string.Empty)
                        .Loader<int>("noticeTemplateId", 0)
                        .Loader<string>("noticeTemplateName", string.Empty)

                        .Loader<string>("orderFile", string.Empty)
                        .Loader<string>("pid", string.Empty)
                        .Loader<int>("punishRuleId", 0)
                        .Loader<string>("riskType", string.Empty)
                        .Loader<string>("roleName", string.Empty)
                        .Loader<string>("ruleLink", string.Empty)
                        .Loader<bool>("showOrderDetail", false)
                        .Loader<int>("status", 0, "ali_status")
                        .Loader<string>("warningText", string.Empty)

                        .Add("accountName", _accountName)
                        .Add("status", true)
                        .Add("create_time", DateTime.Now)
                        .Add("last_time", DateTime.Now)
                        .Create(DBContext.InsertType.REPLACE);
                }
            }
            catch (Exception ex) { }
        }
    }
}
