old_flsystem/FLSystem/Forms/data_report_control.cs

670 lines
41 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<string> ConvertTo(DataTable table, string name)
{
if (table == null)
{
return null;
}
List<string> list = new List<string>();
foreach (DataRow row in table.Rows)
{
list.Add(row[name].ToString());
}
return list;
}
private List<fl_member_info> recordList(List<fl_statistics_record> records)
{
var db = ApiClient.GetSession();
var list = new List<fl_member_info>();
foreach (var item in records)
{
var _member = db.FindMemberInfoById(item.uid);
if (_member != null)
list.Add(_member);
}
return list;
}
private string formatStr = "{0}人 / {1}%";
/// <summary>
/// 刷新数据报表
/// </summary>
private void RefreshDataReport(GridControl gridControl, GridView gridView, DateTime beginTime, DateTime endTime)
{
GC.Collect();
IEnumerable<fl_point_hist> pointHists = null;
IEnumerable<OrderTemp> allOrderAlimamas = null;
IEnumerable<OrderTemp> orderAlimamas = null;
IEnumerable<OrderTemp> allOrderJingdongs = null;
IEnumerable<OrderTemp> orderJingdongs = null;
IEnumerable<OrderTemp> allOrderPinduoduos = null;
IEnumerable<OrderTemp> orderPinduoduos = null;
IEnumerable<OrderTemp> allOrderWeipinhuis = null;
IEnumerable<OrderTemp> allOrderSunings = null;
IEnumerable<OrderTemp> allOrderDouyins = null;
IEnumerable<OrderTemp> orderWeipinhuis = null;
IEnumerable<OrderTemp> orderSunings = null;
IEnumerable<OrderTemp> orderDouyins = null;
IEnumerable<fl_member_info> newMembers = null;
try
{
var begin_time = beginTime.Date;
var end_time = endTime.Date.AddDays(1);
var _session = ApiClient.GetSession();
List<object> resultList = new List<object>();
object lock_result = new object();
List<Action> actions = new List<Action>();
var robots = new List<fl_robot_info>(_session.FindRobots());
robots.Add(new fl_robot_info() { name = "", type = ChatType. });
pointHists = _session.Find<fl_point_hist>("@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<OrderTemp>("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<OrderTemp>("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<OrderTemp>("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<OrderTemp>("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<OrderTemp> suningList = new List<OrderTemp>();
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<OrderTemp>("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<OrderTemp>("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<fl_member_info>("@begin_time <= crt_time and crt_time < @end_time", new { begin_time = begin_time, end_time = end_time });
//时间段创建的用户集合
var memberInfos = _session.Find<fl_member_info>("@begin_time <= crt_time and crt_time < @end_time", new { begin_time = begin_time, end_time = end_time });
#region
var firstQueryStatistics = _session.Find<fl_statistics_record>("@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<fl_statistics_record>("@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<fl_statistics_record>("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<string> temps = new List<string>();
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<ItemPoint>(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<SugarParameter>(){
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<string, decimal>() { { "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
{
/// <summary>
/// 付款金额
/// </summary>
public double pay { get; set; }
/// <summary>
/// 结算付款金额
/// </summary>
public double pay_real { get; set; }
/// <summary>
/// 订单状态
/// </summary>
public SystemOrderStatus db_status { get; set; }
/// <summary>
/// 机器人名称
/// </summary>
public string db_robotname { get; set; }
/// <summary>
/// 机器人类型
/// </summary>
public ChatType db_robottype { get; set; }
/// <summary>
/// 总佣金
/// </summary>
public double fee { get; set; }
/// <summary>
/// 真实的总佣金
/// </summary>
public double fee_real { get; set; }
/// <summary>
/// 积分json
/// </summary>
public string db_point { get; set; }
/// <summary>
/// 购买数量
/// </summary>
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<string, decimal> SumResult = new Dictionary<string, decimal>() { { "newPayMember", 0 }, { "newQueryMember", 0 }, { "realPayMember", 0 }, { "realQueryMember", 0 } };
#endregion
/// <summary>
/// 要获取的列名
/// </summary>
Dictionary<string, string> SumFields = new Dictionary<string, string> { { "activeMemberCvr", "newPayMember" }, { "newQueryMemberCvr", "newQueryMember" }, { "realPayMembers", "realPayMember" }, { "realQueryMembers", "realQueryMember" } };
/// <summary>
/// 自定义公式【使用说明Start用作初始化数据Calculate用作数据的计算Finalize用作统计列数据的显示】
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<string, decimal>() { { "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;
}
}
}
}