using System;
using System.Collections.Generic;
using Library;
using LitJson;
using System.Linq;
using System.Data;
using System.Threading;
using MySystem.KxsReadModels;

namespace MySystem
{
    public class StatTradeCheckService
    {
        public readonly static StatTradeCheckService Instance = new StatTradeCheckService();
        private StatTradeCheckService()
        { }






        // 统计交易额V2
        public void Start()
        {
            Thread th = new Thread(StartDo);
            th.IsBackground = true;
            th.Start();
        }
        public void StartDo()
        {
            while (true)
            {
                string content = RedisDbconn.Instance.RPop<string>("StatTradeCheckQueue");
                if(!string.IsNullOrEmpty(content))
                {
                    StatTradeAmountDo(content);
                    Thread.Sleep(1);
                }
                else
                {
                    Thread.Sleep(10000);
                }
            }
        }
        public void StatTradeAmountDo(string date)
        {
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
            try
            {
                int pageNum = 0;
                bool check = true;
                while(check)
                {
                    string sql = "";
                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---" + pageNum + "----start", "统计交易额日志");
                    DataTable dt = CustomerSqlConn.dtable("select UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,Version,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount),count(Id),SnNo,TradeDate from TradeRecord where Id>20000000 and ActStatus=1 and BrandId!=14 and UserId>0 and CreateDate>='" + date + " 00:00:00' and CreateDate<='" + date + " 23:59:59' group by UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,Version,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),SnNo,TradeDate order by UserId limit " + pageNum + ",500", AppConfig.Base.TmpReadSqlConn);
                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---" + pageNum + "----query", "统计交易额日志");
                    if(dt.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            int UserId = int.Parse(dr["UserId"].ToString());
                            string SnNo = dr["SnNo"].ToString();
                            string BindingTime = dr["TradeDate"].ToString();
                            string ParentNav = dr["ParentNav"].ToString();
                            int BrandId = int.Parse(dr["BrandId"].ToString());
                            int BankCardType = int.Parse(dr["BankCardType"].ToString());
                            int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString());
                            int MerHelpFlag = int.Parse(dr["MerHelpFlag"].ToString());
                            int Version = int.Parse(dr["Version"].ToString());
                            int CapFlag = int.Parse(dr["CapFlag"].ToString());
                            int VipFlag = int.Parse(dr["VipFlag"].ToString());
                            int PayType = int.Parse(dr["PayType"].ToString());
                            string TradeDate = dr[10].ToString();
                            decimal TradeAmount = decimal.Parse(dr[11].ToString());
                            int TradeCount = 1;
                            string TradeMonth = TradeDate.Substring(0, 6);
                            ParentNav += "," + UserId + ",";
                            string ParentNavString = ParentNav.Trim(',').Replace(",,", ",");
                            string[] UserIdList = ParentNavString.Split(',');

                            if(Version < 2)
                            {
                                //个人业绩
                                decimal ProfitDirectDebitTradeAmt = 0;
                                decimal ProfitDirectDebitCapTradeAmt = 0;
                                decimal ProfitDirectDebitCapNum = 0;
                                decimal HelpDirectDebitTradeAmt = 0;
                                decimal HelpDirectDebitCapTradeAmt = 0;
                                decimal HelpDirectDebitCapNum = 0;
                                decimal NotHelpDirectDebitTradeAmt = 0;
                                decimal NotHelpDirectDebitCapTradeAmt = 0;
                                decimal NotHelpDirectDebitCapNum = 0;
                                decimal ProfitDirectTradeAmt = 0;
                                decimal HelpDirectTradeAmt = 0;
                                decimal NotHelpDirectTradeAmt = 0;
                                if (BankCardType == 0)
                                {
                                    if (Version == 1)
                                    {
                                        ProfitDirectDebitTradeAmt += TradeAmount;
                                        if (CapFlag == 1)
                                        {
                                            ProfitDirectDebitCapTradeAmt += TradeAmount;
                                            ProfitDirectDebitCapNum += TradeCount;
                                        }
                                    }
                                    else if (MerHelpFlag == 1)
                                    {
                                        HelpDirectDebitTradeAmt += TradeAmount;
                                        if (CapFlag == 1)
                                        {
                                            HelpDirectDebitCapTradeAmt += TradeAmount;
                                            HelpDirectDebitCapNum += TradeCount;
                                        }
                                    }
                                    else
                                    {
                                        NotHelpDirectDebitTradeAmt += TradeAmount;
                                        if (CapFlag == 1)
                                        {
                                            NotHelpDirectDebitCapTradeAmt += TradeAmount;
                                            NotHelpDirectDebitCapNum += TradeCount;
                                        }
                                    }
                                }
                                else if (BankCardType != 0)
                                {
                                    if (Version == 1)
                                    {
                                        ProfitDirectTradeAmt += TradeAmount;
                                    }
                                    else if (MerHelpFlag == 1)
                                    {
                                        HelpDirectTradeAmt += TradeAmount;
                                    }
                                    else
                                    {
                                        NotHelpDirectTradeAmt += TradeAmount;
                                    }
                                }
                                sql += InsertOrUpdate("TradeDaySummary", "ProfitDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitDirectTradeAmt,HelpDirectTradeAmt,NotHelpDirectTradeAmt", ProfitDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitDirectTradeAmt + "," + HelpDirectTradeAmt + "," + NotHelpDirectTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'");
                                if (DateTime.Parse(BindingTime) < DateTime.Parse("2023-07-01 00:00:00"))
                                {
                                    sql += InsertOrUpdate("TradeDaySummaryBefore", "ProfitDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitDirectTradeAmt,HelpDirectTradeAmt,NotHelpDirectTradeAmt", ProfitDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitDirectTradeAmt + "," + HelpDirectTradeAmt + "," + NotHelpDirectTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'");
                                }
                                else
                                {
                                    sql += InsertOrUpdate("TradeDaySummaryAfter", "ProfitDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitDirectTradeAmt,HelpDirectTradeAmt,NotHelpDirectTradeAmt", ProfitDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitDirectTradeAmt + "," + HelpDirectTradeAmt + "," + NotHelpDirectTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'");
                                }

                                //团队业绩
                                foreach(string SubUserId in UserIdList)
                                {
                                    decimal ProfitNonDirectDebitTradeAmt = 0;
                                    ProfitDirectDebitCapTradeAmt = 0;
                                    ProfitDirectDebitCapNum = 0;
                                    decimal HelpNonDirectDebitTradeAmt = 0;
                                    HelpDirectDebitCapTradeAmt = 0;
                                    HelpDirectDebitCapNum = 0;
                                    decimal NotHelpNonDirectDebitTradeAmt = 0;
                                    NotHelpDirectDebitCapTradeAmt = 0;
                                    NotHelpDirectDebitCapNum = 0;
                                    decimal ProfitNonDirectTradeAmt = 0;
                                    decimal HelpNonDirectTradeAmt = 0;
                                    decimal NotHelpNonDirectTradeAmt = 0;
                                    if (BankCardType == 0)
                                    {
                                        if (Version == 1)
                                        {
                                            ProfitNonDirectDebitTradeAmt += TradeAmount;
                                            if (CapFlag == 1)
                                            {
                                                ProfitDirectDebitCapTradeAmt += TradeAmount;
                                                ProfitDirectDebitCapNum += TradeCount;
                                            }
                                        }
                                        else if (MerHelpFlag == 1)
                                        {
                                            HelpNonDirectDebitTradeAmt += TradeAmount;
                                            if (CapFlag == 1)
                                            {
                                                HelpDirectDebitCapTradeAmt += TradeAmount;
                                                HelpDirectDebitCapNum += TradeCount;
                                            }
                                        }
                                        else
                                        {
                                            NotHelpNonDirectDebitTradeAmt += TradeAmount;
                                            if (CapFlag == 1)
                                            {
                                                NotHelpDirectDebitCapTradeAmt += TradeAmount;
                                                NotHelpDirectDebitCapNum += TradeCount;
                                            }
                                        }
                                    }
                                    else if (BankCardType != 0)
                                    {
                                        if (Version == 1)
                                        {
                                            ProfitNonDirectTradeAmt += TradeAmount;
                                        }
                                        else if (MerHelpFlag == 1)
                                        {
                                            HelpNonDirectTradeAmt += TradeAmount;
                                        }
                                        else
                                        {
                                            NotHelpNonDirectTradeAmt += TradeAmount;
                                        }
                                    }
                                    sql += InsertOrUpdate("TradeDaySummary", "ProfitNonDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpNonDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpNonDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitNonDirectTradeAmt,HelpNonDirectTradeAmt,NotHelpNonDirectTradeAmt", ProfitNonDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpNonDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpNonDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitNonDirectTradeAmt + "," + HelpNonDirectTradeAmt + "," + NotHelpNonDirectTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'");
                                    if (DateTime.Parse(BindingTime) < DateTime.Parse("2023-07-01 00:00:00"))
                                    {
                                        sql += InsertOrUpdate("TradeDaySummaryBefore", "ProfitNonDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpNonDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpNonDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitNonDirectTradeAmt,HelpNonDirectTradeAmt,NotHelpNonDirectTradeAmt", ProfitNonDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpNonDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpNonDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitNonDirectTradeAmt + "," + HelpNonDirectTradeAmt + "," + NotHelpNonDirectTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'");
                                    }
                                    else
                                    {
                                        sql += InsertOrUpdate("TradeDaySummaryAfter", "ProfitNonDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpNonDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpNonDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitNonDirectTradeAmt,HelpNonDirectTradeAmt,NotHelpNonDirectTradeAmt", ProfitNonDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpNonDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpNonDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitNonDirectTradeAmt + "," + HelpNonDirectTradeAmt + "," + NotHelpNonDirectTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'");
                                    }
                                }
                            }
                            else
                            {
                                decimal ProfitDebitTradeAmt = 0;
                                decimal ProfitDebitCapTradeAmt = 0;
                                decimal ProfitDebitCapNum = 0;
                                decimal ProfitTradeAmt = 0;
                                if (BankCardType == 0)
                                {
                                    if (Version == 2)
                                    {
                                        ProfitDebitTradeAmt += TradeAmount;
                                        if (CapFlag == 1)
                                        {
                                            ProfitDebitCapTradeAmt += TradeAmount;
                                            ProfitDebitCapNum += TradeCount;
                                        }
                                    }
                                }
                                else if (BankCardType != 0)
                                {
                                    if (Version == 2)
                                    {
                                        ProfitTradeAmt += TradeAmount;
                                    }
                                }
                                sql += InsertOrUpdate("TradeDaySummary2", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'");
                                if (DateTime.Parse(BindingTime) < DateTime.Parse("2023-07-01 00:00:00"))
                                {
                                    sql += InsertOrUpdate("TradeDaySummary2Before", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'");
                                }
                                else
                                {
                                    sql += InsertOrUpdate("TradeDaySummary2After", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'");
                                }
                                foreach(string SubUserId in UserIdList)
                                {
                                    sql += InsertOrUpdate("TradeDaySummary2", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'");
                                    if (DateTime.Parse(BindingTime) < DateTime.Parse("2023-07-01 00:00:00"))
                                    {
                                        sql += InsertOrUpdate("TradeDaySummary2Before", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'");
                                    }
                                    else
                                    {
                                        sql += InsertOrUpdate("TradeDaySummary2After", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'");
                                    }
                                }
                            }
                        }
                        pageNum += 1;
                    }
                    else
                    {
                        check = false;
                    }
                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---" + pageNum + "----end", "统计交易额日志");
                    // function.WriteLog(sql, "SQL脚本");
                    CustomerSqlConn.op(sql, AppConfig.Base.SqlConn);
                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---" + pageNum + "----fiinsh\n\n", "统计交易额日志");
                }
            }
            catch (Exception ex)
            {
                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
            }
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
        }

        List<string> rediskeys = new List<string>();
        public string InsertOrUpdate(string table, string fields, string vals, string condition)
        {
            string sql = "";
            // string check = RedisDbconn.Instance.Get<string>("statreset:" + table + ":" + function.MD5_16(condition));
            // if(string.IsNullOrEmpty(check))
            if(!rediskeys.Contains(table + ":" + function.MD5_16(condition)))
            {
                rediskeys.Add(table + ":" + function.MD5_16(condition));
                // RedisDbconn.Instance.Set("statreset:" + table + ":" + function.MD5_16(condition), fields + "#cut#" + vals);
                // RedisDbconn.Instance.SetExpire("statreset:" + table + ":" + function.MD5_16(condition), 3600);
                string[] conditionList = condition.Split(new string[]{ " and " }, StringSplitOptions.None);
                foreach(string sub in conditionList)
                {
                    string[] subCondition = sub.Split('=');
                    fields += "," + subCondition[0];
                    vals += "," + subCondition[1];
                }
                sql = "insert into " + table + " (" + fields + ") values (" + vals + ");\n";
            }
            else
            {
                string setVals = "";
                string[] fieldList = fields.Split(',');
                string[] valList = vals.Split(',');
                for (int i = 0; i < fieldList.Length; i++)
                {
                    setVals += fieldList[i] + "=" + fieldList[i] + "+" + valList[i] + ",";
                }
                sql = "update " + table + " set " + setVals.TrimEnd(',') + " where " + condition + ";\n";
            }
            return sql;
        }









        public void StartCheck()
        {
            Thread th = new Thread(StartCheckDo);
            th.IsBackground = true;
            th.Start();
        }
        public void StartCheckDo()
        {
            while (true)
            {
                string content = RedisDbconn.Instance.RPop<string>("StatTradeCheck2Queue");
                if(!string.IsNullOrEmpty(content))
                {
                    StatTradeAmountCheck2Do(content);
                    StatTradeAmountCheck2BeforeDo(content);
                    StatTradeAmountCheck2AfterDo(content);
                    
                    StatTradeAmountCheckDo(content);
                    StatTradeAmountCheckBeforeDo(content);
                    StatTradeAmountCheckAfterDo(content);
                    Thread.Sleep(100);
                }
                else
                {
                    Thread.Sleep(10000);
                }
            }
        }


        public void StatTradeAmountCheckDo(string date)
        {
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
            try
            {
                date = date.Replace("-", "");
                WebCMSEntities db = new WebCMSEntities();
                List<TradeDaySummary> list = db.TradeDaySummary.Where(m => m.TradeDate == date).ToList();
                List<int> uids = list.Select(m => m.UserId).Distinct().ToList();
                var users = db.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList();
                db.Dispose();
                foreach(TradeDaySummary sub in list.Where(m => m.SeoTitle == "team").ToList())
                {
                    string puidstr = "," + sub.UserId + ",";
                    List<int> subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList();
                    bool op = list.Any(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount);
                    if(op)
                    {
                        decimal ProfitDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectTradeAmt);
                        decimal HelpDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectTradeAmt);
                        decimal NotHelpDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectTradeAmt);

                        decimal ProfitDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitTradeAmt);
                        decimal ProfitDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitCapTradeAmt);
                        decimal ProfitDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitCapNum);
                        decimal HelpDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitTradeAmt);
                        decimal HelpDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitCapTradeAmt);
                        decimal HelpDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitCapNum);
                        decimal NotHelpDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitTradeAmt);
                        decimal NotHelpDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitCapTradeAmt);
                        decimal NotHelpDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitCapNum);
                        
                        string setField = "";
                        if(sub.ProfitNonDirectTradeAmt != ProfitDirectTradeAmt)
                        {
                            setField += "ProfitNonDirectTradeAmt=" + ProfitDirectTradeAmt + ",";
                        }
                        if(sub.HelpNonDirectTradeAmt != HelpDirectTradeAmt)
                        {
                            setField += "HelpNonDirectTradeAmt=" + HelpDirectTradeAmt + ",";
                        }
                        if(sub.NotHelpNonDirectTradeAmt != NotHelpDirectTradeAmt)
                        {
                            setField += "NotHelpNonDirectTradeAmt=" + NotHelpDirectTradeAmt + ",";
                        }
                        if(sub.ProfitNonDirectDebitTradeAmt != ProfitDirectDebitTradeAmt)
                        {
                            setField += "ProfitNonDirectDebitTradeAmt=" + ProfitDirectDebitTradeAmt + ",";
                        }
                        if(sub.ProfitDirectDebitCapTradeAmt != ProfitDirectDebitCapTradeAmt)
                        {
                            setField += "ProfitDirectDebitCapTradeAmt=" + ProfitDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.ProfitDirectDebitCapNum != ProfitDirectDebitCapNum)
                        {
                            setField += "ProfitDirectDebitCapNum=" + ProfitDirectDebitCapNum + ",";
                        }
                        if(sub.HelpNonDirectDebitTradeAmt != HelpDirectDebitTradeAmt)
                        {
                            setField += "HelpNonDirectDebitTradeAmt=" + HelpDirectDebitTradeAmt + ",";
                        }
                        if(sub.HelpDirectDebitCapTradeAmt != HelpDirectDebitCapTradeAmt)
                        {
                            setField += "HelpDirectDebitCapTradeAmt=" + HelpDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.HelpDirectDebitCapNum != HelpDirectDebitCapNum)
                        {
                            setField += "HelpDirectDebitCapNum=" + HelpDirectDebitCapNum + ",";
                        }
                        if(sub.NotHelpNonDirectDebitTradeAmt != NotHelpDirectDebitTradeAmt)
                        {
                            setField += "NotHelpNonDirectDebitTradeAmt=" + NotHelpDirectDebitTradeAmt + ",";
                        }
                        if(sub.NotHelpDirectDebitCapTradeAmt != NotHelpDirectDebitCapTradeAmt)
                        {
                            setField += "NotHelpDirectDebitCapTradeAmt=" + NotHelpDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.NotHelpDirectDebitCapNum != NotHelpDirectDebitCapNum)
                        {
                            setField += "NotHelpDirectDebitCapNum=" + NotHelpDirectDebitCapNum + ",";
                        }
                        if(!string.IsNullOrEmpty(setField))
                        {
                            function.WriteLog("UserId:" + sub.UserId + ";  TradeDate:" + sub.TradeDate + ";  BrandId:" + sub.BrandId + ";", "交易不一致的创客");
                            function.WriteLog("update TradeDaySummary set " + setField.TrimEnd(',') + " where Id=" + sub.Id, "要执行的sql脚本");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
            }
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
        }
        public void StatTradeAmountCheckBeforeDo(string date)
        {
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
            try
            {
                date = date.Replace("-", "");
                WebCMSEntities db = new WebCMSEntities();
                List<TradeDaySummaryBefore> list = db.TradeDaySummaryBefore.Where(m => m.TradeDate == date).ToList();
                List<int> uids = list.Select(m => m.UserId).Distinct().ToList();
                var users = db.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList();
                db.Dispose();
                foreach(TradeDaySummaryBefore sub in list.Where(m => m.SeoTitle == "team").ToList())
                {
                    string puidstr = "," + sub.UserId + ",";
                    List<int> subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList();
                    bool op = list.Any(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount);
                    if(op)
                    {
                        decimal ProfitDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectTradeAmt);
                        decimal HelpDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectTradeAmt);
                        decimal NotHelpDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectTradeAmt);

                        decimal ProfitDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitTradeAmt);
                        decimal ProfitDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitCapTradeAmt);
                        decimal ProfitDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitCapNum);
                        decimal HelpDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitTradeAmt);
                        decimal HelpDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitCapTradeAmt);
                        decimal HelpDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitCapNum);
                        decimal NotHelpDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitTradeAmt);
                        decimal NotHelpDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitCapTradeAmt);
                        decimal NotHelpDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitCapNum);
                        
                        string setField = "";
                        if(sub.ProfitNonDirectTradeAmt != ProfitDirectTradeAmt)
                        {
                            setField += "ProfitNonDirectTradeAmt=" + ProfitDirectTradeAmt + ",";
                        }
                        if(sub.HelpNonDirectTradeAmt != HelpDirectTradeAmt)
                        {
                            setField += "HelpNonDirectTradeAmt=" + HelpDirectTradeAmt + ",";
                        }
                        if(sub.NotHelpNonDirectTradeAmt != NotHelpDirectTradeAmt)
                        {
                            setField += "NotHelpNonDirectTradeAmt=" + NotHelpDirectTradeAmt + ",";
                        }
                        if(sub.ProfitNonDirectDebitTradeAmt != ProfitDirectDebitTradeAmt)
                        {
                            setField += "ProfitNonDirectDebitTradeAmt=" + ProfitDirectDebitTradeAmt + ",";
                        }
                        if(sub.ProfitDirectDebitCapTradeAmt != ProfitDirectDebitCapTradeAmt)
                        {
                            setField += "ProfitDirectDebitCapTradeAmt=" + ProfitDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.ProfitDirectDebitCapNum != ProfitDirectDebitCapNum)
                        {
                            setField += "ProfitDirectDebitCapNum=" + ProfitDirectDebitCapNum + ",";
                        }
                        if(sub.HelpNonDirectDebitTradeAmt != HelpDirectDebitTradeAmt)
                        {
                            setField += "HelpNonDirectDebitTradeAmt=" + HelpDirectDebitTradeAmt + ",";
                        }
                        if(sub.HelpDirectDebitCapTradeAmt != HelpDirectDebitCapTradeAmt)
                        {
                            setField += "HelpDirectDebitCapTradeAmt=" + HelpDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.HelpDirectDebitCapNum != HelpDirectDebitCapNum)
                        {
                            setField += "HelpDirectDebitCapNum=" + HelpDirectDebitCapNum + ",";
                        }
                        if(sub.NotHelpNonDirectDebitTradeAmt != NotHelpDirectDebitTradeAmt)
                        {
                            setField += "NotHelpNonDirectDebitTradeAmt=" + NotHelpDirectDebitTradeAmt + ",";
                        }
                        if(sub.NotHelpDirectDebitCapTradeAmt != NotHelpDirectDebitCapTradeAmt)
                        {
                            setField += "NotHelpDirectDebitCapTradeAmt=" + NotHelpDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.NotHelpDirectDebitCapNum != NotHelpDirectDebitCapNum)
                        {
                            setField += "NotHelpDirectDebitCapNum=" + NotHelpDirectDebitCapNum + ",";
                        }
                        if(!string.IsNullOrEmpty(setField))
                        {
                            function.WriteLog("UserId:" + sub.UserId + ";  TradeDate:" + sub.TradeDate + ";  BrandId:" + sub.BrandId + ";", "交易不一致的创客");
                            function.WriteLog("update TradeDaySummaryBefore set " + setField.TrimEnd(',') + " where Id=" + sub.Id, "要执行的sql脚本");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
            }
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
        }
        public void StatTradeAmountCheckAfterDo(string date)
        {
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
            try
            {
                date = date.Replace("-", "");
                WebCMSEntities db = new WebCMSEntities();
                List<TradeDaySummaryAfter> list = db.TradeDaySummaryAfter.Where(m => m.TradeDate == date).ToList();
                List<int> uids = list.Select(m => m.UserId).Distinct().ToList();
                var users = db.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList();
                db.Dispose();
                foreach(TradeDaySummaryAfter sub in list.Where(m => m.SeoTitle == "team").ToList())
                {
                    string puidstr = "," + sub.UserId + ",";
                    List<int> subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList();
                    bool op = list.Any(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount);
                    if(op)
                    {
                        decimal ProfitDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectTradeAmt);
                        decimal HelpDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectTradeAmt);
                        decimal NotHelpDirectTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectTradeAmt);

                        decimal ProfitDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitTradeAmt);
                        decimal ProfitDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitCapTradeAmt);
                        decimal ProfitDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDirectDebitCapNum);
                        decimal HelpDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitTradeAmt);
                        decimal HelpDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitCapTradeAmt);
                        decimal HelpDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.HelpDirectDebitCapNum);
                        decimal NotHelpDirectDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitTradeAmt);
                        decimal NotHelpDirectDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitCapTradeAmt);
                        decimal NotHelpDirectDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.NotHelpDirectDebitCapNum);
                        
                        string setField = "";
                        if(sub.ProfitNonDirectTradeAmt != ProfitDirectTradeAmt)
                        {
                            setField += "ProfitNonDirectTradeAmt=" + ProfitDirectTradeAmt + ",";
                        }
                        if(sub.HelpNonDirectTradeAmt != HelpDirectTradeAmt)
                        {
                            setField += "HelpNonDirectTradeAmt=" + HelpDirectTradeAmt + ",";
                        }
                        if(sub.NotHelpNonDirectTradeAmt != NotHelpDirectTradeAmt)
                        {
                            setField += "NotHelpNonDirectTradeAmt=" + NotHelpDirectTradeAmt + ",";
                        }
                        if(sub.ProfitNonDirectDebitTradeAmt != ProfitDirectDebitTradeAmt)
                        {
                            setField += "ProfitNonDirectDebitTradeAmt=" + ProfitDirectDebitTradeAmt + ",";
                        }
                        if(sub.ProfitDirectDebitCapTradeAmt != ProfitDirectDebitCapTradeAmt)
                        {
                            setField += "ProfitDirectDebitCapTradeAmt=" + ProfitDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.ProfitDirectDebitCapNum != ProfitDirectDebitCapNum)
                        {
                            setField += "ProfitDirectDebitCapNum=" + ProfitDirectDebitCapNum + ",";
                        }
                        if(sub.HelpNonDirectDebitTradeAmt != HelpDirectDebitTradeAmt)
                        {
                            setField += "HelpNonDirectDebitTradeAmt=" + HelpDirectDebitTradeAmt + ",";
                        }
                        if(sub.HelpDirectDebitCapTradeAmt != HelpDirectDebitCapTradeAmt)
                        {
                            setField += "HelpDirectDebitCapTradeAmt=" + HelpDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.HelpDirectDebitCapNum != HelpDirectDebitCapNum)
                        {
                            setField += "HelpDirectDebitCapNum=" + HelpDirectDebitCapNum + ",";
                        }
                        if(sub.NotHelpNonDirectDebitTradeAmt != NotHelpDirectDebitTradeAmt)
                        {
                            setField += "NotHelpNonDirectDebitTradeAmt=" + NotHelpDirectDebitTradeAmt + ",";
                        }
                        if(sub.NotHelpDirectDebitCapTradeAmt != NotHelpDirectDebitCapTradeAmt)
                        {
                            setField += "NotHelpDirectDebitCapTradeAmt=" + NotHelpDirectDebitCapTradeAmt + ",";
                        }
                        if(sub.NotHelpDirectDebitCapNum != NotHelpDirectDebitCapNum)
                        {
                            setField += "NotHelpDirectDebitCapNum=" + NotHelpDirectDebitCapNum + ",";
                        }
                        if(!string.IsNullOrEmpty(setField))
                        {
                            function.WriteLog("UserId:" + sub.UserId + ";  TradeDate:" + sub.TradeDate + ";  BrandId:" + sub.BrandId + ";", "交易不一致的创客");
                            function.WriteLog("update TradeDaySummaryAfter set " + setField.TrimEnd(',') + " where Id=" + sub.Id, "要执行的sql脚本");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
            }
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
        }


        public void StatTradeAmountCheck2Do(string date)
        {
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
            try
            {                
                date = date.Replace("-", "");
                WebCMSEntities db = new WebCMSEntities();
                List<TradeDaySummary2> list = db.TradeDaySummary2.Where(m => m.TradeDate == date).ToList();
                List<int> uids = list.Select(m => m.UserId).Distinct().ToList();
                var users = db.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList();
                db.Dispose();
                foreach(TradeDaySummary2 sub in list.Where(m => m.SeoTitle == "team").ToList())
                {
                    string puidstr = "," + sub.UserId + ",";
                    List<int> subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList();
                    bool op = list.Any(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount);
                    if(op)
                    {
                        decimal ProfitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitTradeAmt);
                        decimal ProfitDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitTradeAmt);
                        decimal ProfitDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitCapTradeAmt);
                        decimal ProfitDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitCapNum);
                        if(sub.ProfitTradeAmt != ProfitTradeAmt || sub.ProfitDebitTradeAmt != ProfitDebitTradeAmt || sub.ProfitDebitCapTradeAmt != ProfitDebitCapTradeAmt || sub.ProfitDebitCapNum != ProfitDebitCapNum)
                        {
                            function.WriteLog("UserId:" + sub.UserId + ";  TradeDate:" + sub.TradeDate + ";  BrandId:" + sub.BrandId + ";  ProfitTradeAmt:" + sub.ProfitTradeAmt + "-" + ProfitTradeAmt + ";  ProfitDebitTradeAmt:" + sub.ProfitDebitTradeAmt + "-" + ProfitDebitTradeAmt + ";  ProfitDebitCapTradeAmt:" + sub.ProfitDebitCapTradeAmt + "-" + ProfitDebitCapTradeAmt + ";  ProfitDebitCapNum:" + sub.ProfitDebitCapNum + "-" + ProfitDebitCapNum + ";", "交易不一致的创客");
                            function.WriteLog("update TradeDaySummary2 set ProfitTradeAmt=" + ProfitTradeAmt + ",ProfitDebitTradeAmt=" + ProfitDebitTradeAmt + ",ProfitDebitCapTradeAmt=" + ProfitDebitCapTradeAmt + ",ProfitDebitCapNum=" + ProfitDebitCapNum + " where Id=" + sub.Id, "要执行的sql脚本");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
            }
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
        }
        public void StatTradeAmountCheck2BeforeDo(string date)
        {
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
            try
            {                
                date = date.Replace("-", "");
                WebCMSEntities db = new WebCMSEntities();
                List<TradeDaySummary2Before> list = db.TradeDaySummary2Before.Where(m => m.TradeDate == date).ToList();
                List<int> uids = list.Select(m => m.UserId).Distinct().ToList();
                var users = db.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList();
                db.Dispose();
                foreach(TradeDaySummary2Before sub in list.Where(m => m.SeoTitle == "team").ToList())
                {
                    string puidstr = "," + sub.UserId + ",";
                    List<int> subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList();
                    bool op = list.Any(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount);
                    if(op)
                    {
                        decimal ProfitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitTradeAmt);
                        decimal ProfitDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitTradeAmt);
                        decimal ProfitDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitCapTradeAmt);
                        decimal ProfitDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitCapNum);
                        if(sub.ProfitTradeAmt != ProfitTradeAmt || sub.ProfitDebitTradeAmt != ProfitDebitTradeAmt || sub.ProfitDebitCapTradeAmt != ProfitDebitCapTradeAmt || sub.ProfitDebitCapNum != ProfitDebitCapNum)
                        {
                            function.WriteLog("UserId:" + sub.UserId + ";  TradeDate:" + sub.TradeDate + ";  BrandId:" + sub.BrandId + ";  ProfitTradeAmt:" + sub.ProfitTradeAmt + "-" + ProfitTradeAmt + ";  ProfitDebitTradeAmt:" + sub.ProfitDebitTradeAmt + "-" + ProfitDebitTradeAmt + ";  ProfitDebitCapTradeAmt:" + sub.ProfitDebitCapTradeAmt + "-" + ProfitDebitCapTradeAmt + ";  ProfitDebitCapNum:" + sub.ProfitDebitCapNum + "-" + ProfitDebitCapNum + ";", "交易不一致的创客");
                            function.WriteLog("update TradeDaySummary2Before set ProfitTradeAmt=" + ProfitTradeAmt + ",ProfitDebitTradeAmt=" + ProfitDebitTradeAmt + ",ProfitDebitCapTradeAmt=" + ProfitDebitCapTradeAmt + ",ProfitDebitCapNum=" + ProfitDebitCapNum + " where Id=" + sub.Id, "要执行的sql脚本");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
            }
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
        }
        public void StatTradeAmountCheck2AfterDo(string date)
        {
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
            try
            {                
                date = date.Replace("-", "");
                WebCMSEntities db = new WebCMSEntities();
                List<TradeDaySummary2After> list = db.TradeDaySummary2After.Where(m => m.TradeDate == date).ToList();
                List<int> uids = list.Select(m => m.UserId).Distinct().ToList();
                var users = db.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList();
                db.Dispose();
                foreach(TradeDaySummary2After sub in list.Where(m => m.SeoTitle == "team").ToList())
                {
                    string puidstr = "," + sub.UserId + ",";
                    List<int> subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList();
                    bool op = list.Any(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount);
                    if(op)
                    {
                        decimal ProfitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitTradeAmt);
                        decimal ProfitDebitTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitTradeAmt);
                        decimal ProfitDebitCapTradeAmt = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitCapTradeAmt);
                        decimal ProfitDebitCapNum = list.Where(m => subuids.Contains(m.UserId) && m.BrandId == sub.BrandId && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.PayType == sub.PayType && m.VipFlag == sub.VipFlag && m.QueryCount == sub.QueryCount).Sum(m => m.ProfitDebitCapNum);
                        if(sub.ProfitTradeAmt != ProfitTradeAmt || sub.ProfitDebitTradeAmt != ProfitDebitTradeAmt || sub.ProfitDebitCapTradeAmt != ProfitDebitCapTradeAmt || sub.ProfitDebitCapNum != ProfitDebitCapNum)
                        {
                            function.WriteLog("UserId:" + sub.UserId + ";  TradeDate:" + sub.TradeDate + ";  BrandId:" + sub.BrandId + ";  ProfitTradeAmt:" + sub.ProfitTradeAmt + "-" + ProfitTradeAmt + ";  ProfitDebitTradeAmt:" + sub.ProfitDebitTradeAmt + "-" + ProfitDebitTradeAmt + ";  ProfitDebitCapTradeAmt:" + sub.ProfitDebitCapTradeAmt + "-" + ProfitDebitCapTradeAmt + ";  ProfitDebitCapNum:" + sub.ProfitDebitCapNum + "-" + ProfitDebitCapNum + ";", "交易不一致的创客");
                            function.WriteLog("update TradeDaySummary2After set ProfitTradeAmt=" + ProfitTradeAmt + ",ProfitDebitTradeAmt=" + ProfitDebitTradeAmt + ",ProfitDebitCapTradeAmt=" + ProfitDebitCapTradeAmt + ",ProfitDebitCapNum=" + ProfitDebitCapNum + " where Id=" + sub.Id, "要执行的sql脚本");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
            }
            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
        }
    }
}