using MySystem.Models.Main;
using Library;
using MySystem.Service.Main;
using System.Collections.Generic;
using System;
using System.Linq;
using System.Data;

namespace MySystem
{
    /// <summary>
    /// 经营数据工具类
    /// </summary>
    public class BusinessUtil
    {

        #region 经营数据记录(月)
        /// <summary>
        /// 经营数据记录(月)
        /// </summary>
        /// <param name="MerchantId">商户Id</param>
        /// <param name="TradeMonth">月份</param>
        /// <param name="pageSize">条数</param>
        /// <param name="pageNum">页数</param>
        /// <returns></returns>
        public static List<Dictionary<string, object>> BussinessRecordForMonth(int MerchantId, string TradeMonth, int pageSize, int pageNum)
        {
            List<RelationData> relationData = new List<RelationData>();
            List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
            // if (!new MerchantTradeSummaryService().CheckTableExist(TradeMonth))
            // {
            //     return dataList;
            // }
            // List<Dictionary<string, object>> source = MerchantTradeSummaryService.List2(relationData, " and MerchantId=" + MerchantId, TradeMonth, pageNum, pageSize,"TradeDate desc");
            // foreach (Dictionary<string, object> subdata in source)
            // {
            //     Dictionary<string, object> curData = new Dictionary<string, object>();
            //     curData.Add("TradeDate", subdata["TradeDate"].ToString()); //日期
            //     curData.Add("TotalAmount", decimal.Parse(subdata["TradeAmount"].ToString()).ToString("f2")); //营业总金额
            //     curData.Add("InFactAmount", decimal.Parse(subdata["InFactAmount"].ToString()).ToString("f2")); //实收总金额
            //     curData.Add("ActAmount", decimal.Parse(subdata["ActAmount"].ToString()).ToString("f2")); //活动总金额
            //     curData.Add("NonActAmount", decimal.Parse(subdata["NonActAmount"].ToString()).ToString("f2")); //非活动总金额
            //     curData.Add("WeChatInFactAmount", decimal.Parse(subdata["WeChatInfactAmount"].ToString()).ToString("f2")); //微信实收
            //     curData.Add("AliPayInFactAmount", decimal.Parse(subdata["AliPayInFactAmount"].ToString()).ToString("f2")); //支付宝实收
            //     curData.Add("OrderCount", subdata["OderCount"].ToString()); //订单数
            //     curData.Add("Kind", 2); //通道(1 直连 2 银联)
            //     dataList.Add(curData);
            // }
            string limit = " limit " + pageSize;
            if (pageNum > 1)
            {
                int skip = (pageNum - 1) * pageSize;
                limit = " limit " + skip + "," + pageSize;
            }
            DataTable dt = CustomerSqlConn.dtable("select TradeDate,sum(TradeAmount) TotalAmount,sum(TotalActual) InFactAmount,sum(if(IsAct=1,TradeAmount,0)) ActAmount,sum(if(IsAct=0,TradeAmount,0)) NonActAmount,sum(if(PayMode=2,TotalActual,0)) WeChatInFactAmount,sum(if(PayMode=1,TotalActual,0)) AliPayInFactAmount,sum(TradeCount) OrderCount from MerchantAmountSummay where MerchantId=" + MerchantId + " and TradeMonth='" + TradeMonth + "' group by TradeDate order by TradeDate desc" + limit, AppConfig.Base.SqlConnStr);
            if (dt.Rows.Count < 1)
            {
                return dataList;
            }
            foreach (DataRow subdata in dt.Rows)
            {
                Dictionary<string, object> curData = new Dictionary<string, object>();
                curData.Add("TradeDate", subdata["TradeDate"].ToString()); //日期
                curData.Add("TotalAmount", decimal.Parse(subdata["TotalAmount"].ToString()).ToString("f2")); //营业总金额
                curData.Add("InFactAmount", decimal.Parse(subdata["InFactAmount"].ToString()).ToString("f2")); //实收总金额
                curData.Add("ActAmount", decimal.Parse(subdata["ActAmount"].ToString()).ToString("f2")); //活动总金额
                curData.Add("NonActAmount", decimal.Parse(subdata["NonActAmount"].ToString()).ToString("f2")); //非活动总金额
                curData.Add("WeChatInFactAmount", decimal.Parse(subdata["WeChatInfactAmount"].ToString()).ToString("f2")); //微信实收
                curData.Add("AliPayInFactAmount", decimal.Parse(subdata["AliPayInFactAmount"].ToString()).ToString("f2")); //支付宝实收
                curData.Add("OrderCount", subdata["OrderCount"].ToString()); //订单数
                curData.Add("Kind", 2); //通道(1 直连 2 银联)
                dataList.Add(curData);
            }
            return dataList;
        }
        #endregion


        #region 经营数据记录(半年)
        /// <summary>
        /// 经营数据记录(半年)
        /// </summary>
        /// <param name="MerchantId">商户Id</param>
        /// <param name="pageSize">条数</param>
        /// <param name="pageNum">页数</param>
        /// <returns></returns>
        public static List<Dictionary<string, object>> BussinessRecordForHalfYear(int MerchantId, int pageSize, int pageNum)
        {
            List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
            // List<Dictionary<string, object>> source = UserTradeDbconn.Instance.GetMonthTradeList(MerchantId, "TradeAmount,InFactAmount,ActAmount,NonActAmount,WeChatInfactAmount,AliPayInFactAmount,OderCount");
            // foreach (Dictionary<string, object> subdata in source)
            // {
            //     Dictionary<string, object> curData = new Dictionary<string, object>();
            //     curData.Add("TradeDate", subdata["TradeDate"].ToString()); //日期
            //     curData.Add("TotalAmount", decimal.Parse(subdata["TradeAmount"].ToString()).ToString("f2")); //营业总金额
            //     curData.Add("InFactAmount", decimal.Parse(subdata["InFactAmount"].ToString()).ToString("f2")); //实收总金额
            //     curData.Add("ActAmount", decimal.Parse(subdata["ActAmount"].ToString()).ToString("f2")); //活动总金额
            //     curData.Add("NonActAmount", decimal.Parse(subdata["NonActAmount"].ToString()).ToString("f2")); //非活动总金额
            //     curData.Add("WeChatInFactAmount", decimal.Parse(subdata["WeChatInfactAmount"].ToString()).ToString("f2")); //微信实收
            //     curData.Add("AliPayInFactAmount", decimal.Parse(subdata["AliPayInFactAmount"].ToString()).ToString("f2")); //支付宝实收
            //     curData.Add("OrderCount", subdata["OderCount"].ToString()); //订单数
            //     dataList.Add(curData);
            // }

            var end = DateTime.Now.ToString("yyyyMM");
            var start = DateTime.Now.AddMonths(-5).ToString("yyyyMM");
            DataTable dt = CustomerSqlConn.dtable("SELECT TradeMonth 日期,SUM(TradeAmount) 营业总金额,SUM(TotalActual) 实收总金额,SUM(IF(IsAct=1,TotalActual,0)) 活动总金额,SUM(IF(IsAct=0,TotalActual,0)) 非活动总金额,SUM(IF(PayMode=1,TotalActual,0)) 微信实收,SUM(IF(PayMode=2,TotalActual,0)) 支付宝实收,SUM(TradeCount) 订单数 FROM MerchantAmountSummay WHERE MerchantId=" + MerchantId + " AND TradeMonth>='" + start + "' AND TradeMonth<='" + end + "' GROUP BY TradeMonth ORDER BY TradeMonth DESC", AppConfig.Base.SqlConnStr);
            if (dt.Rows.Count < 1)
            {
                return dataList;
            }
            else
            {
                foreach (DataRow item in dt.Rows)
                {
                    Dictionary<string, object> curData = new Dictionary<string, object>();
                    var TradeDate = item["日期"].ToString();
                    curData.Add("TradeDate", TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(TradeDate.Length - 2, 2)); //日期
                    curData.Add("TotalAmount", decimal.Parse(item["营业总金额"].ToString()).ToString("f2")); //营业总金额
                    curData.Add("InFactAmount", decimal.Parse(item["实收总金额"].ToString()).ToString("f2")); //实收总金额
                    curData.Add("ActAmount", decimal.Parse(item["活动总金额"].ToString()).ToString("f2")); //活动总金额
                    curData.Add("NonActAmount", decimal.Parse(item["非活动总金额"].ToString()).ToString("f2")); //非活动总金额
                    curData.Add("WeChatInFactAmount", decimal.Parse(item["微信实收"].ToString()).ToString("f2")); //微信实收
                    curData.Add("AliPayInFactAmount", decimal.Parse(item["支付宝实收"].ToString()).ToString("f2")); //支付宝实收
                    curData.Add("OrderCount", item["订单数"].ToString()); //订单数
                    dataList.Add(curData);
                }
            }
            return dataList;
        }
        #endregion


        #region 经营详情列表
        /// <summary>
        /// 经营详情列表
        /// </summary>
        /// <param name="condition">查询条件</param>
        /// <param name="pageSize">条数</param>
        /// <param name="pageNum">页数</param>
        /// <returns></returns>
        public static List<Dictionary<string, object>> DayDetailList(string condition, int pageSize, int pageNum)
        {
            List<RelationData> relationData = new List<RelationData>();
            List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
            List<Dictionary<string, object>> source = ConsumerOrdersService.List(relationData, condition, pageNum, pageSize);
            foreach (Dictionary<string, object> subdata in source)
            {
                Dictionary<string, object> curData = new Dictionary<string, object>();
                curData.Add("Id", subdata["Id"].ToString()); //订单Id
                curData.Add("TradeDate", DateTime.Parse(subdata["CreateDate"].ToString()).ToString("HH:mm:ss")); //日期
                curData.Add("PayMode", subdata["PayMode"].ToString()); //支付方式(1 支付宝 2 微信)
                curData.Add("IsAct", subdata["IsAct"].ToString()); //是否活动(1 是 0 否)
                curData.Add("PayMoney", decimal.Parse(subdata["PayMoney"].ToString()).ToString("f2")); //订单金额
                curData.Add("Kind", 2); //通道(1 直连 2 银联)
                dataList.Add(curData);
            }
            return dataList;
        }
        #endregion


        #region 交易详情
        /// <summary>
        /// 交易详情
        /// </summary>
        /// <param name="condition">查询条件</param>
        /// <returns></returns>
        public static Dictionary<string, object> OrderDetail(string condition)
        {
            List<RelationData> relationData = new List<RelationData>();
            Dictionary<string, object> obj = new Dictionary<string, object>();
            List<Dictionary<string, object>> source = ConsumerOrdersService.List(relationData, condition, 1, 999);
            foreach (Dictionary<string, object> subdata in source)
            {
                var leaveAmount = decimal.Parse(subdata["MaxDivi"].ToString()) - decimal.Parse(subdata["CurDivi"].ToString());
                obj.Add("TradeDate", DateTime.Parse(subdata["CreateDate"].ToString()).ToString("yyyy-MM-dd HH:mm:ss")); //日期
                obj.Add("PayMode", subdata["PayMode"].ToString()); //支付方式(1 微信 2 支付宝)
                obj.Add("PayMoney", decimal.Parse(subdata["PayMoney"].ToString()).ToString("f2")); //支付金额
                obj.Add("IsAct", subdata["IsAct"].ToString()); //是否活动(1 是 0 否)
                obj.Add("OrderNo", subdata["OrderNo"].ToString()); //订单号
                obj.Add("ReturnFlag", int.Parse(subdata["ReturnFlag"].ToString())); //返现标记(0 否 1 是)
                obj.Add("Kind", 2); //通道(1 直连 2 银联)
                obj.Add("LeaveAmount", leaveAmount); //剩余返现金额
                obj.Add("MerchantName", MerchantInfoService.Query(int.Parse(subdata["MerchantId"].ToString())).Name); //交易门店

                List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
                List<Dictionary<string, object>> dics = ConsumerProfitService.List(relationData, " and OrderId=" + int.Parse(subdata["Id"].ToString()) + "", 1, 999);
                foreach (Dictionary<string, object> dic in dics)
                {
                    Dictionary<string, object> cdata = new Dictionary<string, object>();
                    var CreateDate = DateTime.Parse(dic["CreateDate"].ToString());
                    var TradeDate = CreateDate.Month + "月" + CreateDate.Day + "日" + " " + CreateDate.ToString("HH:mm");
                    cdata.Add("ProfitDate", TradeDate); //分红时间
                    cdata.Add("ProfitAmount", decimal.Parse(dic["GetMoney"].ToString()).ToString("f2")); //分红金额
                    dataList.Add(cdata);
                }
                obj.Add("ProfitList", dataList); //订单分红记录列表
                obj.Add("ProfitTotalAmount", ConsumerProfitService.Sum(" OrderId=" + int.Parse(subdata["Id"].ToString()) + "", "GetMoney").ToString("f2")); //分红总金额

                List<Dictionary<string, object>> dataList2 = new List<Dictionary<string, object>>();
                List<Dictionary<string, object>> dics2 = ConsumerProfitService.List(relationData, " and Sort=" + int.Parse(subdata["Id"].ToString()) + "", 1, 999);
                foreach (Dictionary<string, object> dic in dics2)
                {
                    Dictionary<string, object> cdata = new Dictionary<string, object>();
                    var CreateDate = DateTime.Parse(dic["CreateDate"].ToString());
                    var TradeDate = CreateDate.Month + "月" + CreateDate.Day + "日" + " " + CreateDate.ToString("HH:mm");
                    cdata.Add("ProfitDate", TradeDate); //分红时间
                    cdata.Add("ProfitAmount", decimal.Parse(dic["GetMoney"].ToString()).ToString("f2")); //分红金额
                    dataList2.Add(cdata);
                }
                obj.Add("ProfitList2", dataList2); //订单分红记录列表
                obj.Add("ProfitTotalAmount2", ConsumerProfitService.Sum(" Sort=" + int.Parse(subdata["Id"].ToString()) + "", "GetMoney").ToString("f2")); //分红总金额
            }
            return obj;
        }
        #endregion

    }
}