using Api.Framework; using Api.Framework.Enums; using Api.Framework.Events; using Api.Framework.Model; using Api.Framework.SDK; using Api.Framework.Tools; using CsharpHttpHelper; using DevExpress.Data; using DevExpress.XtraEditors; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Grid; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace FLSystem.Forms { public partial class data_report_control : XtraUserControl { public data_report_control() { InitializeComponent(); } public static List ConvertTo(DataTable table, string name) { if (table == null) { return null; } List list = new List(); foreach (DataRow row in table.Rows) { list.Add(row[name].ToString()); } return list; } private List recordList(List records) { var db = ApiClient.GetSession(); var list = new List(); foreach (var item in records) { var _member = db.FindMemberInfoById(item.uid); if (_member != null) list.Add(_member); } return list; } private string formatStr = "{0}人 / {1}%"; /// /// 刷新数据报表 /// private void RefreshDataReport(GridControl gridControl, GridView gridView, DateTime beginTime, DateTime endTime) { GC.Collect(); IEnumerable pointHists = null; IEnumerable allOrderAlimamas = null; IEnumerable orderAlimamas = null; IEnumerable allOrderJingdongs = null; IEnumerable orderJingdongs = null; IEnumerable allOrderPinduoduos = null; IEnumerable orderPinduoduos = null; IEnumerable allOrderWeipinhuis = null; IEnumerable allOrderSunings = null; IEnumerable allOrderDouyins = null; IEnumerable orderWeipinhuis = null; IEnumerable orderSunings = null; IEnumerable orderDouyins = null; IEnumerable newMembers = null; try { var begin_time = beginTime.Date; var end_time = endTime.Date.AddDays(1); var _session = ApiClient.GetSession(); List resultList = new List(); object lock_result = new object(); List actions = new List(); var robots = new List(_session.FindRobots()); robots.Add(new fl_robot_info() { name = "", type = ChatType.未知来源 }); pointHists = _session.Find("@begin_time <= crt_time and crt_time < @end_time and type = @type ", new { begin_time = begin_time, end_time = end_time, type = "提现扣除" }); allOrderAlimamas = _session.Find("select alipay_total_price as pay,pay_price as pay_real,db_status,db_robotname,db_robottype,pub_share_pre_fee as fee,commission as fee_real,db_point,item_num as num from fl_order_alimama where @begin_time <= create_time and create_time < @end_time", new { begin_time = begin_time, end_time = end_time }); orderAlimamas = allOrderAlimamas.Where(f => f.db_status == SystemOrderStatus.订单付款 || f.db_status == SystemOrderStatus.订单冻结 || f.db_status == SystemOrderStatus.订单结算 || f.db_status == SystemOrderStatus.部分退款); allOrderJingdongs = _session.Find("select estimateCosPrice as pay ,estimateCosPrice as pay_real,db_status,db_robotname,db_robottype,estimateFee as fee,actualFee as fee_real,db_point,skuNum as num from fl_order_jingdong where @begin_time <= orderTime and orderTime < @end_time and db_status in (1005,1002,1001,998)", new { begin_time = begin_time, end_time = end_time }); orderJingdongs = allOrderJingdongs.Where(f => f.db_status == SystemOrderStatus.订单付款 || f.db_status == SystemOrderStatus.订单冻结 || f.db_status == SystemOrderStatus.订单结算 || f.db_status == SystemOrderStatus.部分退款); allOrderPinduoduos = _session.Find("select order_amount as pay ,order_amount as pay_real,db_status,db_robotname,db_robottype,promotion_amount as fee,db_point,goods_quantity as num from fl_order_pinduoduo where @begin_time <= order_create_time and order_create_time < @end_time and db_status in (1005,1002,1001,998)", new { begin_time = begin_time, end_time = end_time }); orderPinduoduos = allOrderPinduoduos.Where(f => f.db_status == SystemOrderStatus.订单付款 || f.db_status == SystemOrderStatus.订单冻结 || f.db_status == SystemOrderStatus.订单结算 || f.db_status == SystemOrderStatus.部分退款); allOrderWeipinhuis = _session.Find("select commissionTotalCost as pay ,commissionTotalCost as pay_real,db_status,db_robotname,db_robottype,commission as fee,commission as fee_real,db_point,goodsCount as num from fl_order_weipinhui where @begin_time <= orderTime and orderTime < @end_time and db_status in (1005,1002,1001,998)", new { begin_time = Util.GetTimeSpan(begin_time, true), end_time = Util.GetTimeSpan(end_time, true) }); orderWeipinhuis = allOrderWeipinhuis.Where(f => f.db_status == SystemOrderStatus.订单付款 || f.db_status == SystemOrderStatus.订单冻结 || f.db_status == SystemOrderStatus.订单结算 || f.db_status == SystemOrderStatus.部分退款); #region 苏宁 var ddd = _session.Ado.GetDataTable("select payAmount as pay ,payAmount as pay_real,db_status,db_robotname,db_robottype,prePayCommission as fee,prePayCommission as fee_real,db_point,saleNum as num from fl_order_suning where @begin_time <= payTime and payTime < @end_time and db_status in (1005,1002,1001,998)", new { begin_time = begin_time, end_time = end_time }); List suningList = new List(); for (int i = 0; i < ddd.Rows.Count; i++) { var pay = double.Parse(ddd.Rows[i]["pay"].ToString()); var pay_real = double.Parse(ddd.Rows[i]["pay_real"].ToString()); var db_status = (SystemOrderStatus)int.Parse(ddd.Rows[i]["db_status"].ToString()); var db_robotname = ddd.Rows[i]["db_robotname"].ToString(); var db_robottype = (ChatType)int.Parse(ddd.Rows[i]["db_robottype"].ToString()); var fee = double.Parse(ddd.Rows[i]["fee"].ToString()); var fee_real = double.Parse(ddd.Rows[i]["fee_real"].ToString()); var db_point = ddd.Rows[i]["db_point"].ToString(); var num = int.Parse(ddd.Rows[i]["num"].ToString()); suningList.Add(new OrderTemp() { pay = pay, pay_real = pay_real, db_status = db_status, db_robotname = db_robotname, db_robottype = db_robottype, fee = fee, db_point = db_point, num = num }); } allOrderSunings = suningList; #endregion //allOrderSunings = _session.Find("select payAmount as pay ,payAmount as pay_real,db_status,db_robotname,db_robottype,prePayCommission as fee,prePayCommission as fee_real,db_point,saleNum as num from fl_order_suning where @begin_time <= payTime and payTime < @end_time and db_status in (1005,1002,1001,998)", new { begin_time = begin_time, end_time = end_time }); orderSunings = allOrderSunings.Where(f => f.db_status == SystemOrderStatus.订单付款 || f.db_status == SystemOrderStatus.订单冻结 || f.db_status == SystemOrderStatus.订单结算 || f.db_status == SystemOrderStatus.部分退款); allOrderDouyins = _session.Find("select total_pay_amount as pay ,total_pay_amount as pay_real,db_status,db_robotname,db_robottype,estimated_comission as fee,estimated_comission as fee_real,db_point,1 as num from fl_order_douyin where @begin_time <= pay_time and pay_time < @end_time and db_status in (1005,1002,1001,998)", new { begin_time = Util.GetTimeSpan(begin_time, false), end_time = Util.GetTimeSpan(end_time, false) }); orderDouyins = allOrderDouyins.Where(f => f.db_status == SystemOrderStatus.订单付款 || f.db_status == SystemOrderStatus.订单冻结 || f.db_status == SystemOrderStatus.订单结算 || f.db_status == SystemOrderStatus.部分退款); newMembers = _session.Find("@begin_time <= crt_time and crt_time < @end_time", new { begin_time = begin_time, end_time = end_time }); //时间段创建的用户集合 var memberInfos = _session.Find("@begin_time <= crt_time and crt_time < @end_time", new { begin_time = begin_time, end_time = end_time }); #region 这个时间段所有首查用户 var firstQueryStatistics = _session.Find("@begin_time <= ex3 and ex3 < @end_time", new { begin_time = HttpExtend.GetTimeStamp(begin_time), end_time = HttpExtend.GetTimeStamp(end_time) }); var firstQueryMembers = recordList(firstQueryStatistics); #endregion #region 这个时间段所有首次付款用户 var firstPaytatistics = _session.Find("@begin_time <= ex4 and ex4 < @end_time", new { begin_time = HttpExtend.GetTimeStamp(begin_time), end_time = HttpExtend.GetTimeStamp(end_time) }); var firstPayMembers = recordList(firstPaytatistics); #endregion //首次查询 //var statisticsRecords = _session.Find("select * from fl_statistics_record"); //var statisticsMembers = recordList(firstPaytatistics); foreach (var _item in robots) { var item = _item; actions.Add(new Action(delegate { try { var session = ApiClient.GetSession(); #region 全部收入合计 第一个阿里妈妈。第二个京东。第三个拼多多。第四个唯品会。第五个苏宁。第六个抖音 //decimal all_tb_income = (decimal)allOrderAlimamas.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.fee);//淘宝总金额 var allOrderAlimamasTemp = allOrderAlimamas.Where(f => f.db_robotname == item.name && f.db_robottype == item.type);//公共的条件的临时集合 decimal all_tb_income = (decimal)allOrderAlimamasTemp.Where(f => f.fee_real != 0).Sum(f => f.fee_real);//淘宝总金额-真实的佣金 all_tb_income += (decimal)allOrderAlimamasTemp.Where(f => f.fee_real == 0).Sum(f => f.fee);//淘宝总金额-预估的佣金 all_tb_income = all_tb_income * 0.9m; decimal all_jd_income = (decimal)allOrderJingdongs.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.fee);//京东总金额 decimal all_pdd_income = (decimal)allOrderPinduoduos.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.fee);//拼多多总金额 decimal all_wph_income = (decimal)allOrderWeipinhuis.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.fee);//唯品会总金额 decimal all_sn_income = (decimal)allOrderSunings.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.fee);//苏宁总金额 decimal all_dy_income = (decimal)allOrderDouyins.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => (f.fee / 100));//抖音总金额 decimal all_total_income = all_tb_income + all_jd_income + all_pdd_income + all_wph_income + all_sn_income + all_dy_income;//总佣金 //decimal all_tb_pay = (decimal)allOrderAlimamasTemp.Where(f => f.pay_real != 0).Sum(f => f.pay_real);//总付款金额 #endregion #region 收入合计 第一个阿里妈妈。第二个京东。第三个拼多多。第四个唯品会。第五个苏宁。第六个抖音 //var tb_income = (decimal)orderAlimamas.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.fee);//淘宝总佣金 var orderAlimamasTemp = orderAlimamas.Where(f => f.db_robotname == item.name && f.db_robottype == item.type);//公共的条件的临时集合 var tb_income = (decimal)orderAlimamasTemp.Where(f => f.fee_real != 0).Sum(f => f.fee_real);//淘宝总佣金-真实的佣金 tb_income += (decimal)orderAlimamasTemp.Where(f => f.fee_real == 0).Sum(f => f.fee);//淘宝总佣金-预估佣金 tb_income = tb_income * 0.9m; var orderJingdongsTemp = orderJingdongs.Where(f => f.db_robotname == item.name && f.db_robottype == item.type); var jd_income = (decimal)orderJingdongsTemp.Sum(f => f.fee);//京东总佣金 var orderPinduoduosTemp = orderPinduoduos.Where(f => f.db_robotname == item.name && f.db_robottype == item.type); var pdd_income = (decimal)orderPinduoduosTemp.Sum(f => f.fee);//拼多多总佣金 var orderWeipinhuisTemp = orderWeipinhuis.Where(f => f.db_robotname == item.name && f.db_robottype == item.type); var wph_income = (decimal)orderWeipinhuisTemp.Sum(f => f.fee);//唯品会总佣金 var orderSuningsTemp = orderSunings.Where(f => f.db_robotname == item.name && f.db_robottype == item.type); var sn_income = (decimal)orderSuningsTemp.Sum(f => f.fee);//苏宁总佣金 var orderDouyinsTemp = orderDouyins.Where(f => f.db_robotname == item.name && f.db_robottype == item.type); var dy_income = (decimal)orderDouyinsTemp.Sum(f => (f.fee / 100));//抖音总佣金 decimal total_income = tb_income + jd_income + pdd_income + wph_income + sn_income + dy_income;//总佣金 decimal tb_pay = (decimal)orderAlimamasTemp.Sum(f => f.pay);//淘宝有效的付款金额 decimal jd_pay = (decimal)orderJingdongsTemp.Sum(f => f.pay);//京东有效的付款金额 decimal pdd_pay = (decimal)orderPinduoduosTemp.Sum(f => f.pay);//拼多多有效的付款金额 decimal wph_pay = (decimal)orderWeipinhuisTemp.Sum(f => f.pay);//唯品会有效的付款金额 decimal sn_pay = (decimal)orderSuningsTemp.Sum(f => f.pay);//苏宁有效的付款金额 decimal dy_pay = (decimal)orderDouyinsTemp.Sum(f => (f.pay / 100));//抖音有效的付款金额 #endregion #region 毛利合计 第一个阿里妈妈。第二个京东。第三个拼多多。第四个唯品会 var tb_point = orderAlimamas.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Select(f => f.db_point).ToList();//淘宝分出佣金 var jd_point = orderJingdongs.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Select(f => f.db_point).ToList();//京东分出佣金 var pdd_point = orderPinduoduos.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Select(f => f.db_point).ToList();//拼多多分出佣金 var wph_point = orderWeipinhuis.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Select(f => f.db_point).ToList();//唯品会分出佣金 var sn_point = orderSunings.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Select(f => f.db_point).ToList();//苏宁分出佣金 var dy_point = orderDouyins.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Select(f => f.db_point).ToList();//抖音分出佣金 List temps = new List(); temps.AddRange(tb_point); temps.AddRange(jd_point); temps.AddRange(pdd_point); temps.AddRange(wph_point); temps.AddRange(sn_point); temps.AddRange(dy_point); decimal amount_ceded = 0m;//给客户的部分(约等于) for (int i = 0; i < temps.Count; i++) { var point = HttpHelper.JsonToObject(temps[i]) as ItemPoint; if (point != null) { amount_ceded += ((decimal)point.UserPoint + (decimal)point.AwardOne + (decimal)point.AwardTwo + (decimal)point.AwardThree + (decimal)point.AwardCreate); } } decimal total_margin = total_income - amount_ceded;//毛利(约等于) #endregion #region 订单数量合计 第一个阿里妈妈。第二个京东。第三个拼多多。第四个唯品会 int tb_order_count = orderAlimamas.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.num);//淘宝总订单数 int jd_order_count = (int)orderJingdongs.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.num);//京东总订单数 int pdd_order_count = orderPinduoduos.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.num);//拼多多总订单数 int wph_order_count = orderWeipinhuis.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.num);//唯品会总订单数 int sn_order_count = orderSunings.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.num);//苏宁总订单数 int dy_order_count = orderDouyins.Where(f => f.db_robotname == item.name && f.db_robottype == item.type).Sum(f => f.num);//抖音总订单数 #endregion var gross_margin = (total_income == 0 ? "0%" : Math.Round(total_margin / total_income * 100m, 4).ToString() + "%");//毛利率 #region 统计今天新人人数 //var new_member = newMembers.Count(f => f.robot_name == item.name); var new_member = 0; try { var applyfriendInfos = session.Ado.GetDataTable("select * from fl_plugin_userfission_applyfriend_info where state = '已接受' and @begin_time <= crt_time and crt_time < @end_time and robot_name = @robot_name", new List(){ new SugarParameter("@begin_time",begin_time), new SugarParameter("@end_time",end_time), new SugarParameter("@robot_name",item.name), }); new_member = applyfriendInfos.Rows.Count; } catch (Exception ex) { EventClient.OnEvent(null, "数据报表统计今天新人人数异常:" + ex.Message + " - " + ex.StackTrace); } #endregion //#region 统计今天新人绑定人数 //var bindMembers = memberInfos.Where(f => f.robot_name == item.name && f.robot_type == item.type && f.bind_order != 0).Count(); //var verifyMembers = memberInfos.Where(f => f.robot_name == item.name && f.robot_type == item.type && f.bind_order == 0).ToList(); //var bindMembers2 = 0; //for (int i = 0; i < verifyMembers.Count; i++) //{ // var temp = statisticsRecords.FirstOrDefault(f => f.uid == verifyMembers[i].id); // if (null != temp) // { // if (temp.querynum != 0) // bindMembers2++; // } //} //var activeMembers = bindMembers2 + bindMembers; ////新人转化率 //var activeMemberCvr = activeMembers == 0 ? 0 : Decimal.Round((bindMembers / activeMembers), 2); //#endregion #region 统计首次新人绑定人数 var bindMembers = memberInfos.Where(f => f.robot_name == item.name && f.robot_type == item.type && f.bind_order != 0).Count(); var verifyMembers = memberInfos.Where(f => f.robot_name == item.name && f.robot_type == item.type && f.bind_order == 0).ToList(); var queryMembers2 = 0;//所有查询用户数量 var queryMembers3 = 0;//当天查询用户数量 for (int i = 0; i < verifyMembers.Count; i++) { var temp = firstQueryStatistics.FirstOrDefault(f => f.uid == verifyMembers[i].id); if (null != temp) { if (temp.querynum != 0) { queryMembers2++; if (memberInfos.FirstOrDefault(f => f.id == temp.uid) != null) queryMembers3++; } } } //以前进来的用户首查 //var dd = firstQueryMembers.Where(f => f.robot_name == item.name && memberInfos.Where(d => d.id != f.id).Any()).ToList(); //var queyrMembers3 = firstQueryMembers.Where(f => f.robot_name == item.name && memberInfos.Where(d => d.id != f.id).Any()).ToList().Count; var queyrMembers3 = firstQueryMembers.Where(f => f.robot_name == item.name && memberInfos.FirstOrDefault(d => d.id == f.id) == null).ToList().Count; var activeMembers = queryMembers2 + bindMembers + queyrMembers3; //以前进来的用户首次付款 //var ss = firstPayMembers.Where(f => f.robot_name == item.name && memberInfos.Where(d => d.id != f.id).Any()).ToList(); //var bindMembers4 = firstPayMembers.Where(f => f.robot_name == item.name && memberInfos.Where(d => d.id != f.id).Any()).ToList().Count; var bindMembers4 = firstPayMembers.Where(f => f.robot_name == item.name && memberInfos.FirstOrDefault(d => d.id == f.id) == null).ToList().Count; var bindMemberNum = bindMembers + bindMembers4; #endregion string activeMemberCvr = string.Format(formatStr, 0, 0); string newQueryMemberCvr = string.Format(formatStr, 0, 0); string realQueryMembers = string.Format(formatStr, 0, 0); string realPayMembers = string.Format(formatStr, 0, 0); if (new_member != 0) { //首次付款转化率 decimal activeMemberCvr_Temp = (decimal)bindMemberNum / (decimal)new_member; var _activeMemberCvr = (double)decimal.Round(activeMemberCvr_Temp, 4) * 100d; activeMemberCvr = string.Format(formatStr, bindMemberNum, _activeMemberCvr);//$"{bindMemberNum}人({_activeMemberCvr}%)"; //首次查询转换率 decimal newQueryMemberCvr_Temp = (decimal)activeMembers / (decimal)new_member; var _newQueryMemberCvr = (double)decimal.Round(newQueryMemberCvr_Temp, 4) * 100d;// 查询的人数 / 新进人数 newQueryMemberCvr = string.Format(formatStr, activeMembers, _newQueryMemberCvr);//$"{activeMembers}人({_newQueryMemberCvr}%)"; //今日下单转换率 var realPayMembersCvr = (decimal)bindMembers / (decimal)new_member; realPayMembers = string.Format(formatStr, bindMembers, ((double)decimal.Round(realPayMembersCvr, 4) * 100d));//$"{bindMembers}人({((double)decimal.Round(realPayMembersCvr, 4) * 100d)}%)"; //今日查询转换率 var tempQueryNum = queryMembers3 + bindMembers; var realQueryMembersCvr = (decimal)tempQueryNum / (decimal)new_member; realQueryMembers = string.Format(formatStr, tempQueryNum, ((double)decimal.Round(realQueryMembersCvr, 4) * 100d)); //$"{tempQueryNum}人({((double)decimal.Round(realPayMembersCvr, 4) * 100d)}%)"; } #region 提现金额 var exchange_money = (decimal)(pointHists.Where(f => f.rid == item.id).Sum(f => f.point) * -1); #endregion #region 当天新人查询人数xxx //statisticsRecords //已经下单的人,就不验证是否查询过 //var queryCount1 = memberInfos.Where(f => f.robot_name == item.name && f.robot_type == item.type && f.bind_order != 0).Count(); //var verifyMembers = memberInfos.Where(f => f.robot_name == item.name && f.robot_type == item.type && f.bind_order == 0).ToList(); //var queryCount2 = 0; //for (int i = 0; i < verifyMembers.Count; i++) //{ // var temp = statisticsRecords.FirstOrDefault(f => f.uid == verifyMembers[i].id); // if (null != temp) // { // if (temp.querynum != 0) // queryCount2++; // } //} #endregion #region 当天新人首单数量xxx //var pay_order_count = memberInfos.Where(f => f.robot_name == item.name && f.robot_type == item.type && f.bind_order != 0).Count(); #endregion lock (lock_result) resultList.Add(new { pdd_pay = pdd_pay, wph_pay = wph_pay, sn_pay = sn_pay, dy_pay = dy_pay, tb_pay = tb_pay, jd_pay = jd_pay, chat_type = item.type, robot_name = item.name, robot_nick = item.nick, all_total_income = Decimal.Round(all_total_income, 2), total_income = Decimal.Round(total_income, 2), tb_income = Decimal.Round(tb_income, 2), jd_income = Decimal.Round(jd_income, 2), pdd_income = Decimal.Round(pdd_income, 2), wph_income = Decimal.Round(wph_income, 2), sn_income = Decimal.Round(sn_income, 2), dy_income = Decimal.Round(dy_income, 2), total_margin = Decimal.Round(total_margin, 2), tb_order_count = tb_order_count, jd_order_count = jd_order_count, pdd_order_count = pdd_order_count, wph_order_count = wph_order_count, sn_order_count = sn_order_count, dy_order_count = dy_order_count, gross_margin = gross_margin, exchange_money = exchange_money, new_member = new_member, newQueryMemberCvr = newQueryMemberCvr, activeMemberCvr = activeMemberCvr,/*pay_order_count = bindMemberNum, query_count = activeMembers,*/ realPayMembers = realPayMembers, realQueryMembers = realQueryMembers }); } catch (Exception ex) { EventClient.OnEvent(this, $"{item.name} - {ex.Message} - {ex.StackTrace}"); } })); } Parallel.ForEach(actions, action => { action.Invoke(); }); this.Invoke(new Action(() => { Convert.ToString(gridView.Columns["all_total_income"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["total_income"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["total_margin"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["tb_order_count"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["jd_order_count"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["pdd_order_count"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["pdd_income"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["wph_order_count"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["wph_income"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["sn_order_count"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["sn_income"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["dy_order_count"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["dy_income"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["jd_income"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["tb_income"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["exchange_money"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["new_member"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["tb_pay"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["jd_pay"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["pdd_pay"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["wph_pay"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["sn_pay"].SummaryItem.SummaryValue); Convert.ToString(gridView.Columns["dy_pay"].SummaryItem.SummaryValue); try { gridControl.DataSource = resultList; } catch (Exception ex) { EventClient.OnEvent("....", ex.Message + "-" + ex.StackTrace); } })); } catch (Exception ex) { EventClient.OnEvent("...", ex.Message + "-" + ex.StackTrace); } finally { pointHists = null; allOrderAlimamas = null; orderAlimamas = null; allOrderJingdongs = null; orderJingdongs = null; allOrderPinduoduos = null; orderPinduoduos = null; allOrderWeipinhuis = null; orderWeipinhuis = null; allOrderSunings = null; orderSunings = null; allOrderDouyins = null; orderDouyins = null; newMembers = null; } } private CancellationTokenSource tokenSource = new CancellationTokenSource(); private async void simpleButton1_Click(object sender, EventArgs e) { try { //SumResult = new Dictionary() { { "realPayMember", 0 }, { "realQueryMember", 0 }, { "newQueryMember", 0 }, { "newPayMember", 0 } }; dateTimePicker1.Enabled = dateTimePicker2.Enabled = comboBoxEdit3.Enabled = simpleButton1.Enabled = false; labelControl3.Visible = true; labelControl4.Visible = false; gridControl1.DataSource = null; try { await Task.Run(() => { RefreshDataReport(gridControl1, gridView1, dateTimePicker1.Value, dateTimePicker2.Value); }, tokenSource.Token); } catch (Exception) { } dateTimePicker1.Enabled = dateTimePicker2.Enabled = comboBoxEdit3.Enabled = simpleButton1.Enabled = true; labelControl3.Visible = false; labelControl4.Visible = gridView1.RowCount == 0; } catch (Exception ex) { XtraMessageBox.Show(ex.Message); } } private void comboBoxEdit3_SelectedIndexChanged(object sender, EventArgs e) { var com = comboBoxEdit3.Text; var begin_time = DateTime.Now.Date; var end_time = DateTime.Now.Date; if (com == "昨日报表") { begin_time = begin_time.AddDays(-1); end_time = end_time.AddDays(-1); } else if (com == "7日报表") { begin_time = begin_time.AddDays(-7); end_time = end_time.AddDays(-1); } else if (com == "30日报表") { begin_time = begin_time.AddDays(-30); end_time = end_time.AddDays(-1); } else if (com == "本月报表") { begin_time = begin_time.AddDays(-(begin_time.Day - 1)); end_time = begin_time.AddMonths(1).AddDays(-1); } else if (com == "上月报表") { begin_time = begin_time.AddDays(-begin_time.Day).AddMonths(-1).AddDays(1); end_time = begin_time.AddMonths(1).AddDays(-1); } else if (com == "本年报表") { begin_time = DateTime.Parse($"{begin_time.Year}-01-01 00:00:00"); end_time = begin_time.AddYears(1).AddDays(-1); } else if (com == "上年报表") { begin_time = DateTime.Parse($"{begin_time.Year - 1}-01-01 00:00:00"); end_time = begin_time.AddYears(1).AddDays(-1); } dateTimePicker1.Value = begin_time; dateTimePicker2.Value = end_time; simpleButton1_Click(null, null); } private void data_report_control_Load(object sender, EventArgs e) { this.Disposed += Control_Disposed; } private void Control_Disposed(object sender, EventArgs e) { tokenSource.Cancel(); } private class OrderTemp { /// /// 付款金额 /// public double pay { get; set; } /// /// 结算付款金额 /// public double pay_real { get; set; } /// /// 订单状态 /// public SystemOrderStatus db_status { get; set; } /// /// 机器人名称 /// public string db_robotname { get; set; } /// /// 机器人类型 /// public ChatType db_robottype { get; set; } /// /// 总佣金 /// public double fee { get; set; } /// /// 真实的总佣金 /// public double fee_real { get; set; } /// /// 积分json /// public string db_point { get; set; } /// /// 购买数量 /// public int num { get; set; } } private void 导出为EceToolStripMenuItem_Click(object sender, EventArgs e) { try { if (this.gridControl1 == null) throw new Exception("没有需要导出的数据!"); if (XtraMessageBox.Show("确定要将本页面数据导入到Excel内?", "请选择", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { //var table = this.gridControl1.DataSource as DataTable; //if (table == null || table.Rows.Count == 0) throw new Exception("没有需要导出的数据!"); this.saveFileDialog1.Filter = "Excel文件(*.xls)|*.xls"; if (this.saveFileDialog1.ShowDialog(this) == DialogResult.OK) { DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(); this.gridControl1.ExportToXls(this.saveFileDialog1.FileName); XtraMessageBox.Show("恭喜您,已完成数据导出!", "导出完成", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } catch (Exception vErr) { XtraMessageBox.Show(vErr.Message, "导出错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } #region 记录每一列的人数 Dictionary SumResult = new Dictionary() { { "newPayMember", 0 }, { "newQueryMember", 0 }, { "realPayMember", 0 }, { "realQueryMember", 0 } }; #endregion /// /// 要获取的列名 /// Dictionary SumFields = new Dictionary { { "activeMemberCvr", "newPayMember" }, { "newQueryMemberCvr", "newQueryMember" }, { "realPayMembers", "realPayMember" }, { "realQueryMembers", "realQueryMember" } }; /// /// 自定义公式【使用说明:Start:用作初始化数据,Calculate:用作数据的计算,Finalize:用作统计列数据的显示】 /// /// /// private void gridView1_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e) { string fieldName = (e.Item as GridSummaryItem).FieldName; if (!SumFields.ContainsKey(fieldName)) return; var variate = SumFields[fieldName]; switch (e.SummaryProcess) { case CustomSummaryProcess.Start: SumResult = new Dictionary() { { "realPayMember", 0 }, { "realQueryMember", 0 }, { "newQueryMember", 0 }, { "newPayMember", 0 } }; break; case CustomSummaryProcess.Calculate: { var column = gridView1.Columns[fieldName]; var value = column.View.GetRowCellValue(e.RowHandle, column).ToString(); if (!string.IsNullOrWhiteSpace(value)) { var reg = Regex.Match(value, @"^(?<数量>\d+)"); if (reg.Success) { var number = decimal.Parse(reg.Groups["数量"].Value); SumResult[variate] += number; } } } break; case CustomSummaryProcess.Finalize: { var value = SumResult[variate]; var new_member = Convert.ToDecimal(gridView1.Columns["new_member"].SummaryItem.SummaryValue); var cvr = new_member == 0 ? 0 : (decimal.Round(value / new_member, 4) * 100m); var temp = new_member == 0 ? 0 : decimal.Round(cvr, 2); e.TotalValue = string.Format(formatStr, value, temp);//$"{value}人({temp}%)"; } break; default: break; } } } }