670 lines
41 KiB
C#
670 lines
41 KiB
C#
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;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|