Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mall.oytour.com
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄奎
mall.oytour.com
Commits
1958764d
Commit
1958764d
authored
Jun 10, 2021
by
liudong1993
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
c28354a7
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1262 additions
and
10 deletions
+1262
-10
RB_User_Statistics_Extend.cs
Mall.Model/Extend/User/RB_User_Statistics_Extend.cs
+247
-0
StatisticsModule.cs
Mall.Module.MarketingCenter/StatisticsModule.cs
+908
-10
LiveHouseController.cs
Mall.WebApi/Controllers/AppletWeChat/LiveHouseController.cs
+107
-0
No files found.
Mall.Model/Extend/User/RB_User_Statistics_Extend.cs
View file @
1958764d
...
@@ -28,5 +28,252 @@ namespace Mall.Model.Extend.User
...
@@ -28,5 +28,252 @@ namespace Mall.Model.Extend.User
/// 日期
/// 日期
/// </summary>
/// </summary>
public
string
DateStr
{
get
;
set
;
}
public
string
DateStr
{
get
;
set
;
}
/// <summary>
/// 月份
/// </summary>
public
string
DateMonth
{
get
{
return
this
.
Date
.
ToString
(
"yyyy-MM"
);
}
}
/// <summary>
/// 获取其年份
/// </summary>
public
int
DateYear
{
get
{
return
this
.
Date
.
Year
;
}
}
}
/// <summary>
/// 月度统计
/// </summary>
public
class
User_Statistics_Query
{
/// <summary>
/// 日期(yyyy-MM)
/// </summary>
public
string
Date
{
get
;
set
;
}
/// <summary>
/// 付款人数
/// </summary>
public
int
PeopleNum
{
get
;
set
;
}
/// <summary>
/// 订单数量
/// </summary>
public
int
OrderNum
{
get
;
set
;
}
/// <summary>
/// 付款金额
/// </summary>
public
decimal
PayMoney
{
get
;
set
;
}
/// <summary>
/// 购买数量
/// </summary>
public
int
BuyNum
{
get
;
set
;
}
/// <summary>
/// 累计付款人数
/// </summary>
public
int
TotalPayPeople
{
get
;
set
;
}
/// <summary>
/// 付款人数
/// </summary>
public
decimal
MAvgPeopleNum
{
get
;
set
;
}
/// <summary>
/// 订单数量
/// </summary>
public
decimal
MAvgOrderNum
{
get
;
set
;
}
/// <summary>
/// 付款金额
/// </summary>
public
decimal
MAvgPayMoney
{
get
;
set
;
}
/// <summary>
/// 购买数量
/// </summary>
public
decimal
MAvgBuyNum
{
get
;
set
;
}
/// <summary>
/// 平均每人购买单数
/// </summary>
public
decimal
PAvgOrderNum
{
get
;
set
;
}
/// <summary>
/// 平均每人购买件数
/// </summary>
public
decimal
PAvgBuyNum
{
get
;
set
;
}
/// <summary>
/// 平均每单单价
/// </summary>
public
decimal
PAvgUnitPrice
{
get
;
set
;
}
/// <summary>
/// 平均每人购买单价
/// </summary>
public
decimal
PAvgBuyPrice
{
get
;
set
;
}
/// <summary>
/// 平均会员数量
/// </summary>
public
decimal
PAvgMemberNum
{
get
;
set
;
}
/// <summary>
/// 平均付款累计人数
/// </summary>
public
decimal
PAvgPaymentNum
{
get
;
set
;
}
/// <summary>
/// 平均會員下訂單轉換率
/// </summary>
public
decimal
PAvgMOrderRate
{
get
;
set
;
}
/// <summary>
/// 平均复购人数
/// </summary>
public
decimal
PAvgReBuyNum
{
get
;
set
;
}
/// <summary>
/// 平均复购率
/// </summary>
public
decimal
PAvgReBuyRate
{
get
;
set
;
}
/// <summary>
/// 平均新人下单
/// </summary>
public
decimal
PAvgNewPeopleNum
{
get
;
set
;
}
/// <summary>
/// 平均利润率
/// </summary>
public
decimal
PAvgProfitRate
{
get
;
set
;
}
/// <summary>
/// 今日普象新增
/// </summary>
public
int
PXNum
{
get
;
set
;
}
/// <summary>
/// 今日VIP新增
/// </summary>
public
int
VipNum
{
get
;
set
;
}
/// <summary>
/// 今日银象新增
/// </summary>
public
int
YXNum
{
get
;
set
;
}
/// <summary>
/// 今日金象新增
/// </summary>
public
int
JXNum
{
get
;
set
;
}
/// <summary>
/// 总会员数量
/// </summary>
public
int
TotalMNum
{
get
;
set
;
}
/// <summary>
/// 利润
/// </summary>
public
decimal
Profit
{
get
;
set
;
}
}
/// <summary>
/// 月度概率
/// </summary>
public
class
User_Statistics_Rate_Query
{
/// <summary>
/// 日期(yyyy-MM)
/// </summary>
public
string
Date
{
get
;
set
;
}
/// <summary>
/// 付款人数
/// </summary>
public
decimal
MAvgPeopleNum
{
get
;
set
;
}
/// <summary>
/// 订单数量
/// </summary>
public
decimal
MAvgOrderNum
{
get
;
set
;
}
/// <summary>
/// 付款金额
/// </summary>
public
decimal
MAvgPayMoney
{
get
;
set
;
}
/// <summary>
/// 购买数量
/// </summary>
public
decimal
MAvgBuyNum
{
get
;
set
;
}
/// <summary>
/// 平均每人购买单数
/// </summary>
public
decimal
PAvgOrderNum
{
get
;
set
;
}
/// <summary>
/// 平均每人购买件数
/// </summary>
public
decimal
PAvgBuyNum
{
get
;
set
;
}
/// <summary>
/// 平均每单单价
/// </summary>
public
decimal
PAvgUnitPrice
{
get
;
set
;
}
/// <summary>
/// 平均每人购买单价
/// </summary>
public
decimal
PAvgBuyPrice
{
get
;
set
;
}
/// <summary>
/// 平均會員下訂單轉換率
/// </summary>
public
decimal
PAvgMOrderRate
{
get
;
set
;
}
/// <summary>
/// 平均利润率
/// </summary>
public
decimal
PAvgProfitRate
{
get
;
set
;
}
/// <summary>
/// 今日普象新增
/// </summary>
public
decimal
PAvgPXNum
{
get
;
set
;
}
/// <summary>
/// 今日VIP新增
/// </summary>
public
decimal
PAvgVipNum
{
get
;
set
;
}
/// <summary>
/// 今日银象新增
/// </summary>
public
decimal
PAvgYXNum
{
get
;
set
;
}
/// <summary>
/// 今日金象新增
/// </summary>
public
decimal
PAvgJXNum
{
get
;
set
;
}
/// <summary>
/// 总会员数量
/// </summary>
public
decimal
PAvgTotalMNum
{
get
;
set
;
}
/// <summary>
/// 利润
/// </summary>
public
decimal
PAvgProfit
{
get
;
set
;
}
}
}
}
}
Mall.Module.MarketingCenter/StatisticsModule.cs
View file @
1958764d
...
@@ -4,6 +4,7 @@ using Mall.Model.Extend.User;
...
@@ -4,6 +4,7 @@ using Mall.Model.Extend.User;
using
Mall.Model.Query
;
using
Mall.Model.Query
;
using
Mall.Repository.Product
;
using
Mall.Repository.Product
;
using
Mall.Repository.User
;
using
Mall.Repository.User
;
using
Newtonsoft.Json.Linq
;
using
NPOI.SS.Formula.Functions
;
using
NPOI.SS.Formula.Functions
;
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
...
@@ -514,6 +515,7 @@ namespace Mall.Module.MarketingCenter
...
@@ -514,6 +515,7 @@ namespace Mall.Module.MarketingCenter
string
prvSTime
=
Convert
.
ToDateTime
(
StartTime
).
AddMonths
(-
1
).
ToString
(
"yyyy-MM-dd"
);
string
prvSTime
=
Convert
.
ToDateTime
(
StartTime
).
AddMonths
(-
1
).
ToString
(
"yyyy-MM-dd"
);
string
prvETime
=
Convert
.
ToDateTime
(
prvSTime
).
AddMonths
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
);
string
prvETime
=
Convert
.
ToDateTime
(
prvSTime
).
AddMonths
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
);
var
prvlist
=
user_StatisticsRepository
.
GetList
(
new
RB_User_Statistics_Extend
()
{
TenantId
=
tenantId
,
MallBaseId
=
mallBaseId
,
StartTime
=
prvSTime
,
EndTime
=
prvETime
});
var
prvlist
=
user_StatisticsRepository
.
GetList
(
new
RB_User_Statistics_Extend
()
{
TenantId
=
tenantId
,
MallBaseId
=
mallBaseId
,
StartTime
=
prvSTime
,
EndTime
=
prvETime
});
List
<
object
>
RList
=
new
List
<
object
>();
#
region
首先
查询上期平均值
#
region
首先
查询上期平均值
int
PreDay
=
Convert
.
ToDateTime
(
prvETime
).
Day
-
20
;
int
PreDay
=
Convert
.
ToDateTime
(
prvETime
).
Day
-
20
;
#
region
上月
#
region
上月
...
@@ -539,9 +541,33 @@ namespace Mall.Module.MarketingCenter
...
@@ -539,9 +541,33 @@ namespace Mall.Module.MarketingCenter
decimal
presProfitRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
prvlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
ProfitRate
))
/
PreDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
presProfitRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
prvlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
ProfitRate
))
/
PreDay
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
endregion
RList
.
Add
(
new
{
Date
=
"上期平均"
,
PeopleNum
=
presPeopleNum
,
OrderNum
=
presOrderNum
,
PayMoney
=
presPayMoney
,
BuyNum
=
presBuyNum
,
AvgOrderNum
=
presAvgOrderNum
,
AvgBuyNum
=
presAvgBuyNum
,
AvgUnitPrice
=
presAvgUnitPrice
,
AvgBuyPrice
=
presAvgBuyPrice
,
MemberNum
=
presMemberNum
,
PaymentNum
=
presPaymentNum
,
MOrderRate
=
presMOrderRate
,
ReBuyNum
=
presReBuyNum
,
ReBuyRate
=
presReBuyRate
,
NewPeopleNum
=
presNewPeopleNum
,
PXNum
=
presPXNum
,
VipNum
=
presVipNum
,
YXNum
=
presYXNum
,
JXNum
=
presJXNum
,
Profit
=
presProfit
,
ProfitRate
=
presProfitRate
});
#
endregion
#
endregion
List
<
object
>
RList
=
new
List
<
object
>();
//根据日期遍历
//根据日期遍历
int
MaxDay
=
Convert
.
ToDateTime
(
EndTime
).
Day
;
int
MaxDay
=
Convert
.
ToDateTime
(
EndTime
).
Day
;
string
SDate
=
StartTime
;
string
SDate
=
StartTime
;
...
@@ -591,10 +617,6 @@ namespace Mall.Module.MarketingCenter
...
@@ -591,10 +617,6 @@ namespace Mall.Module.MarketingCenter
#
endregion
#
endregion
while
(
true
)
while
(
true
)
{
{
if
(
SDate
==
EndTime
)
{
break
;
}
#
region
正常组装
#
region
正常组装
var
smodel
=
list
.
Where
(
x
=>
x
.
Date
==
Convert
.
ToDateTime
(
SDate
)).
FirstOrDefault
();
var
smodel
=
list
.
Where
(
x
=>
x
.
Date
==
Convert
.
ToDateTime
(
SDate
)).
FirstOrDefault
();
RList
.
Add
(
new
RList
.
Add
(
new
...
@@ -967,6 +989,10 @@ namespace Mall.Module.MarketingCenter
...
@@ -967,6 +989,10 @@ namespace Mall.Module.MarketingCenter
#
endregion
#
endregion
}
}
if
(
SDate
==
EndTime
)
{
break
;
}
SDate
=
Convert
.
ToDateTime
(
SDate
).
AddDays
(
1
).
ToString
(
"yyyy-MM-dd"
);
SDate
=
Convert
.
ToDateTime
(
SDate
).
AddDays
(
1
).
ToString
(
"yyyy-MM-dd"
);
}
}
...
@@ -1194,10 +1220,6 @@ namespace Mall.Module.MarketingCenter
...
@@ -1194,10 +1220,6 @@ namespace Mall.Module.MarketingCenter
#
endregion
#
endregion
while
(
true
)
while
(
true
)
{
{
if
(
SDate
==
EndTime
)
{
break
;
}
#
region
正常组装
#
region
正常组装
var
smodel
=
list
.
Where
(
x
=>
x
.
Date
==
Convert
.
ToDateTime
(
SDate
)).
FirstOrDefault
();
var
smodel
=
list
.
Where
(
x
=>
x
.
Date
==
Convert
.
ToDateTime
(
SDate
)).
FirstOrDefault
();
ExcelDataSource
datarow1
=
new
ExcelDataSource
()
ExcelDataSource
datarow1
=
new
ExcelDataSource
()
...
@@ -1655,6 +1677,10 @@ namespace Mall.Module.MarketingCenter
...
@@ -1655,6 +1677,10 @@ namespace Mall.Module.MarketingCenter
#
endregion
#
endregion
}
}
if
(
SDate
==
EndTime
)
{
break
;
}
SDate
=
Convert
.
ToDateTime
(
SDate
).
AddDays
(
1
).
ToString
(
"yyyy-MM-dd"
);
SDate
=
Convert
.
ToDateTime
(
SDate
).
AddDays
(
1
).
ToString
(
"yyyy-MM-dd"
);
}
}
...
@@ -1809,9 +1835,881 @@ namespace Mall.Module.MarketingCenter
...
@@ -1809,9 +1835,881 @@ namespace Mall.Module.MarketingCenter
return
DataList
;
return
DataList
;
}
}
/// <summary>
/// 获取每月统计
/// </summary>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="tenantId"></param>
/// <param name="mallBaseId"></param>
/// <returns></returns>
public
object
GetDSMoreMonthStatistics
(
string
startTime
,
string
endTime
,
int
tenantId
,
int
mallBaseId
)
public
object
GetDSMoreMonthStatistics
(
string
startTime
,
string
endTime
,
int
tenantId
,
int
mallBaseId
)
{
{
throw
new
NotImplementedException
();
string
StartDate
=
Convert
.
ToDateTime
(
startTime
+
"-01"
).
AddMonths
(-
1
).
ToString
(
"yyyy-MM-dd"
);
// 默认查询提前一个月 用于做对比
string
EndDate
=
Convert
.
ToDateTime
(
endTime
).
AddMonths
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
);
var
list
=
user_StatisticsRepository
.
GetList
(
new
RB_User_Statistics_Extend
()
{
TenantId
=
tenantId
,
MallBaseId
=
mallBaseId
,
StartTime
=
StartDate
,
EndTime
=
EndDate
});
List
<
User_Statistics_Query
>
MonthSList
=
new
List
<
User_Statistics_Query
>();
//月统计数据
//根据月份遍历
string
SMonth
=
Convert
.
ToDateTime
(
StartDate
).
ToString
(
"yyyy-MM"
);
int
TotalMonthNum
=
0
;
while
(
true
)
{
TotalMonthNum
++;
User_Statistics_Query
mmodel
=
new
User_Statistics_Query
()
{
Date
=
SMonth
};
//查询当月数据
var
mlist
=
list
.
Where
(
x
=>
x
.
DateMonth
==
SMonth
).
ToList
();
mmodel
.
PeopleNum
=
mlist
.
Sum
(
x
=>
x
.
PeopleNum
);
mmodel
.
OrderNum
=
mlist
.
Sum
(
x
=>
x
.
OrderNum
);
mmodel
.
PayMoney
=
mlist
.
Sum
(
x
=>
x
.
PayMoney
);
mmodel
.
BuyNum
=
mlist
.
Sum
(
x
=>
x
.
BuyNum
);
mmodel
.
TotalPayPeople
=
mlist
.
Any
()
?
mlist
.
Max
(
x
=>
x
.
PaymentNum
)
:
0
;
mmodel
.
Profit
=
mlist
.
Sum
(
x
=>
x
.
Profit
);
var
disList
=
distributor_InfoRepository
.
GetMemberDistributorNumberForCutOff
(
new
RB_Distributor_Info_Extend
()
{
TenantId
=
tenantId
,
MallBaseId
=
mallBaseId
,
AuditStatus
=
Common
.
Enum
.
User
.
DistributorAuditStatusEnum
.
Audited
},
Convert
.
ToDateTime
(
SMonth
+
"-01"
).
AddMonths
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
));
int
TotalPXNum
=
disList
.
Where
(
x
=>
x
.
FXGradeId
==
1
).
FirstOrDefault
()?.
SortNum
??
0
;
int
TotalVIPNum
=
disList
.
Where
(
x
=>
x
.
FXGradeId
==
2
).
FirstOrDefault
()?.
SortNum
??
0
;
int
TotalYXNum
=
disList
.
Where
(
x
=>
x
.
FXGradeId
==
3
).
FirstOrDefault
()?.
SortNum
??
0
;
int
TotalJXNum
=
disList
.
Where
(
x
=>
x
.
FXGradeId
==
4
).
FirstOrDefault
()?.
SortNum
??
0
;
mmodel
.
PXNum
=
TotalPXNum
;
mmodel
.
VipNum
=
TotalVIPNum
;
mmodel
.
YXNum
=
TotalYXNum
;
mmodel
.
JXNum
=
TotalJXNum
;
mmodel
.
TotalMNum
=
TotalPXNum
+
TotalVIPNum
+
TotalYXNum
+
TotalJXNum
;
#
region
求月平均
#
region
月平均参数
decimal
yPeopleNum
=
0
;
decimal
yOrderNum
=
0
;
decimal
yPayMoney
=
0
;
decimal
yBuyNum
=
0
;
decimal
yAvgOrderNum
=
0
;
decimal
yAvgBuyNum
=
0
;
decimal
yAvgUnitPrice
=
0
;
decimal
yAvgBuyPrice
=
0
;
decimal
yMemberNum
=
0
;
decimal
yPaymentNum
=
0
;
decimal
yMOrderRate
=
0
;
decimal
yReBuyNum
=
0
;
decimal
yReBuyRate
=
0
;
decimal
yNewPeopleNum
=
0
;
decimal
yPXNum
=
0
;
decimal
yVipNum
=
0
;
decimal
yYXNum
=
0
;
decimal
yJXNum
=
0
;
decimal
yProfit
=
0
;
decimal
yProfitRate
=
0
;
#
endregion
string
SDate
=
SMonth
+
"-01"
;
string
EDate
=
Convert
.
ToDateTime
(
SMonth
+
"-01"
).
AddMonths
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
);
int
MaxDay
=
Convert
.
ToDateTime
(
EDate
).
Day
;
while
(
true
)
{
if
(
Convert
.
ToDateTime
(
SDate
).
Day
==
10
)
{
#
region
本月
decimal
PeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
PeopleNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
OrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
OrderNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PayMoney
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
PayMoney
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
BuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
BuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgOrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
AvgOrderNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
AvgBuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgUnitPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
AvgUnitPrice
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
AvgBuyPrice
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MemberNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
MemberNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PaymentNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
PaymentNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MOrderRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
MOrderRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
ReBuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
ReBuyRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
NewPeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
NewPeopleNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
PXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
VipNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
VipNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
YXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
YXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
JXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
JXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
Profit
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
Profit
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ProfitRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
ProfitRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
region
月平均
yPeopleNum
+=
PeopleNum
;
yOrderNum
+=
OrderNum
;
yPayMoney
+=
PayMoney
;
yBuyNum
+=
BuyNum
;
yAvgOrderNum
+=
AvgOrderNum
;
yAvgBuyNum
+=
AvgBuyNum
;
yAvgUnitPrice
+=
AvgUnitPrice
;
yAvgBuyPrice
+=
AvgBuyPrice
;
yMemberNum
+=
MemberNum
;
yPaymentNum
+=
PaymentNum
;
yMOrderRate
+=
MOrderRate
;
yReBuyNum
+=
ReBuyNum
;
yReBuyRate
+=
ReBuyRate
;
yNewPeopleNum
+=
NewPeopleNum
;
yPXNum
+=
PXNum
;
yVipNum
+=
VipNum
;
yYXNum
+=
YXNum
;
yJXNum
+=
JXNum
;
yProfit
+=
Profit
;
yProfitRate
+=
ProfitRate
;
#
endregion
}
else
if
(
Convert
.
ToDateTime
(
SDate
).
Day
==
20
)
{
#
region
本月
decimal
PeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
PeopleNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
OrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
OrderNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PayMoney
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
PayMoney
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
BuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
BuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgOrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
AvgOrderNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
AvgBuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgUnitPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
AvgUnitPrice
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
AvgBuyPrice
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MemberNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
MemberNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PaymentNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
PaymentNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MOrderRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
MOrderRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
ReBuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
ReBuyRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
NewPeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
NewPeopleNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
PXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
VipNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
VipNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
YXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
YXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
JXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
JXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
Profit
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
Profit
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ProfitRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
ProfitRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
region
月平均
yPeopleNum
+=
PeopleNum
;
yOrderNum
+=
OrderNum
;
yPayMoney
+=
PayMoney
;
yBuyNum
+=
BuyNum
;
yAvgOrderNum
+=
AvgOrderNum
;
yAvgBuyNum
+=
AvgBuyNum
;
yAvgUnitPrice
+=
AvgUnitPrice
;
yAvgBuyPrice
+=
AvgBuyPrice
;
yMemberNum
+=
MemberNum
;
yPaymentNum
+=
PaymentNum
;
yMOrderRate
+=
MOrderRate
;
yReBuyNum
+=
ReBuyNum
;
yReBuyRate
+=
ReBuyRate
;
yNewPeopleNum
+=
NewPeopleNum
;
yPXNum
+=
PXNum
;
yVipNum
+=
VipNum
;
yYXNum
+=
YXNum
;
yJXNum
+=
JXNum
;
yProfit
+=
Profit
;
yProfitRate
+=
ProfitRate
;
#
endregion
}
else
if
(
Convert
.
ToDateTime
(
SDate
).
Day
==
MaxDay
)
{
int
NowDay
=
MaxDay
-
20
;
#
region
本月
decimal
PeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
PeopleNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
OrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
OrderNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PayMoney
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
PayMoney
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
BuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
BuyNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgOrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
AvgOrderNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
AvgBuyNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgUnitPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
AvgUnitPrice
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
AvgBuyPrice
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MemberNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
MemberNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PaymentNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
PaymentNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MOrderRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
MOrderRate
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
ReBuyNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
ReBuyRate
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
NewPeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
NewPeopleNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
PXNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
VipNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
VipNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
YXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
YXNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
JXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
JXNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
Profit
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
Profit
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ProfitRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
ProfitRate
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
region
月平均
yPeopleNum
+=
PeopleNum
;
yOrderNum
+=
OrderNum
;
yPayMoney
+=
PayMoney
;
yBuyNum
+=
BuyNum
;
yAvgOrderNum
+=
AvgOrderNum
;
yAvgBuyNum
+=
AvgBuyNum
;
yAvgUnitPrice
+=
AvgUnitPrice
;
yAvgBuyPrice
+=
AvgBuyPrice
;
yMemberNum
+=
MemberNum
;
yPaymentNum
+=
PaymentNum
;
yMOrderRate
+=
MOrderRate
;
yReBuyNum
+=
ReBuyNum
;
yReBuyRate
+=
ReBuyRate
;
yNewPeopleNum
+=
NewPeopleNum
;
yPXNum
+=
PXNum
;
yVipNum
+=
VipNum
;
yYXNum
+=
YXNum
;
yJXNum
+=
JXNum
;
yProfit
+=
Profit
;
yProfitRate
+=
ProfitRate
;
#
endregion
}
if
(
SDate
==
EDate
)
{
break
;
}
SDate
=
Convert
.
ToDateTime
(
SDate
).
AddDays
(
1
).
ToString
(
"yyyy-MM-dd"
);
}
#
region
月平均赋值
mmodel
.
MAvgPeopleNum
=
Math
.
Round
(
yPeopleNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
MAvgOrderNum
=
Math
.
Round
(
yOrderNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
MAvgPayMoney
=
Math
.
Round
(
yPayMoney
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
MAvgBuyNum
=
Math
.
Round
(
yBuyNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgOrderNum
=
Math
.
Round
(
yAvgOrderNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgBuyNum
=
Math
.
Round
(
yAvgBuyNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgUnitPrice
=
Math
.
Round
(
yAvgUnitPrice
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgBuyPrice
=
Math
.
Round
(
yAvgBuyPrice
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgMemberNum
=
Math
.
Round
(
yMemberNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgPaymentNum
=
Math
.
Round
(
yPaymentNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgMOrderRate
=
Math
.
Round
(
yMOrderRate
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgReBuyNum
=
Math
.
Round
(
yReBuyNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgReBuyRate
=
Math
.
Round
(
yReBuyRate
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgNewPeopleNum
=
Math
.
Round
(
yNewPeopleNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgProfitRate
=
Math
.
Round
(
yProfitRate
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
endregion
MonthSList
.
Add
(
mmodel
);
if
(
SMonth
==
endTime
)
{
break
;
}
SMonth
=
Convert
.
ToDateTime
(
SMonth
+
"-01"
).
AddMonths
(
1
).
ToString
(
"yyyy-MM"
);
}
if
(
MonthSList
.
Any
())
{
string
ContrastMonth
=
Convert
.
ToDateTime
(
StartDate
).
ToString
(
"yyyy-MM"
);
var
MonthSList2
=
MonthSList
.
Where
(
x
=>
x
.
Date
!=
ContrastMonth
).
ToList
();
TotalMonthNum
--;
//计算平均/总计 平均需排除掉对比月数据
User_Statistics_Query
MTotalModel
=
new
User_Statistics_Query
()
{
Date
=
"平均/总计"
,
PeopleNum
=
MonthSList2
.
Sum
(
x
=>
x
.
PeopleNum
),
OrderNum
=
MonthSList2
.
Sum
(
x
=>
x
.
OrderNum
),
PayMoney
=
MonthSList2
.
Sum
(
x
=>
x
.
PayMoney
),
BuyNum
=
MonthSList2
.
Sum
(
x
=>
x
.
BuyNum
),
Profit
=
MonthSList2
.
Sum
(
x
=>
x
.
Profit
),
PXNum
=
MonthSList2
.
Sum
(
x
=>
x
.
PXNum
),
VipNum
=
MonthSList2
.
Sum
(
x
=>
x
.
VipNum
),
YXNum
=
MonthSList2
.
Sum
(
x
=>
x
.
YXNum
),
JXNum
=
MonthSList2
.
Sum
(
x
=>
x
.
JXNum
),
TotalMNum
=
MonthSList2
.
Sum
(
x
=>
x
.
TotalMNum
),
MAvgPeopleNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
MAvgPeopleNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
MAvgOrderNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
MAvgOrderNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
MAvgPayMoney
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
MAvgPayMoney
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
MAvgBuyNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
MAvgBuyNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgOrderNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgOrderNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgBuyNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgBuyNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgUnitPrice
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgUnitPrice
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgBuyPrice
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgBuyPrice
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgMemberNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgMemberNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgPaymentNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgPaymentNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgMOrderRate
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgMOrderRate
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgReBuyNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgReBuyNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgReBuyRate
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgReBuyRate
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgNewPeopleNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgNewPeopleNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgProfitRate
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgProfitRate
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
)
};
MonthSList
.
Add
(
MTotalModel
);
}
#
region
计算比率
List
<
User_Statistics_Rate_Query
>
ReRateList
=
new
List
<
User_Statistics_Rate_Query
>();
//概率数据
string
SRateMonth
=
startTime
;
//这个要从查询第一个月开始
while
(
true
)
{
//求当月的所有比例 (当月-上月)/上月
var
NowMmodel
=
MonthSList
.
Where
(
x
=>
x
.
Date
==
SRateMonth
).
FirstOrDefault
();
var
PreMmodel
=
MonthSList
.
Where
(
x
=>
x
.
Date
==
Convert
.
ToDateTime
(
SRateMonth
+
"-01"
).
AddMonths
(-
1
).
ToString
(
"yyyy-MM"
)).
FirstOrDefault
();
User_Statistics_Rate_Query
smodel
=
new
User_Statistics_Rate_Query
()
{
Date
=
SRateMonth
};
smodel
.
MAvgPeopleNum
=
Math
.
Round
(
PreMmodel
.
MAvgPeopleNum
>
0
?
(
NowMmodel
.
MAvgPeopleNum
-
PreMmodel
.
MAvgPeopleNum
)
/
PreMmodel
.
MAvgPeopleNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
MAvgOrderNum
=
Math
.
Round
(
PreMmodel
.
MAvgOrderNum
>
0
?
(
NowMmodel
.
MAvgOrderNum
-
PreMmodel
.
MAvgOrderNum
)
/
PreMmodel
.
MAvgOrderNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
MAvgPayMoney
=
Math
.
Round
(
PreMmodel
.
MAvgPayMoney
>
0
?
(
NowMmodel
.
MAvgPayMoney
-
PreMmodel
.
MAvgPayMoney
)
/
PreMmodel
.
MAvgPayMoney
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
MAvgBuyNum
=
Math
.
Round
(
PreMmodel
.
MAvgBuyNum
>
0
?
(
NowMmodel
.
MAvgBuyNum
-
PreMmodel
.
MAvgBuyNum
)
/
PreMmodel
.
MAvgBuyNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgOrderNum
=
Math
.
Round
(
PreMmodel
.
PAvgOrderNum
>
0
?
(
NowMmodel
.
PAvgOrderNum
-
PreMmodel
.
PAvgOrderNum
)
/
PreMmodel
.
PAvgOrderNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgBuyNum
=
Math
.
Round
(
PreMmodel
.
PAvgBuyNum
>
0
?
(
NowMmodel
.
PAvgBuyNum
-
PreMmodel
.
PAvgBuyNum
)
/
PreMmodel
.
PAvgBuyNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgUnitPrice
=
Math
.
Round
(
PreMmodel
.
PAvgUnitPrice
>
0
?
(
NowMmodel
.
PAvgUnitPrice
-
PreMmodel
.
PAvgUnitPrice
)
/
PreMmodel
.
PAvgUnitPrice
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgBuyPrice
=
Math
.
Round
(
PreMmodel
.
PAvgBuyPrice
>
0
?
(
NowMmodel
.
PAvgBuyPrice
-
PreMmodel
.
PAvgBuyPrice
)
/
PreMmodel
.
PAvgBuyPrice
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgMOrderRate
=
Math
.
Round
(
PreMmodel
.
PAvgMOrderRate
>
0
?
(
NowMmodel
.
PAvgMOrderRate
-
PreMmodel
.
PAvgMOrderRate
)
/
PreMmodel
.
PAvgMOrderRate
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgProfitRate
=
Math
.
Round
(
PreMmodel
.
PAvgProfitRate
>
0
?
(
NowMmodel
.
PAvgProfitRate
-
PreMmodel
.
PAvgProfitRate
)
/
PreMmodel
.
PAvgProfitRate
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgProfit
=
Math
.
Round
(
PreMmodel
.
Profit
>
0
?
(
NowMmodel
.
Profit
-
PreMmodel
.
Profit
)
/
PreMmodel
.
Profit
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgPXNum
=
Math
.
Round
(
PreMmodel
.
PXNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
PXNum
-
PreMmodel
.
PXNum
)
/
PreMmodel
.
PXNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgVipNum
=
Math
.
Round
(
PreMmodel
.
VipNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
VipNum
-
PreMmodel
.
VipNum
)
/
PreMmodel
.
VipNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgYXNum
=
Math
.
Round
(
PreMmodel
.
YXNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
YXNum
-
PreMmodel
.
YXNum
)
/
PreMmodel
.
YXNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgJXNum
=
Math
.
Round
(
PreMmodel
.
JXNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
JXNum
-
PreMmodel
.
JXNum
)
/
PreMmodel
.
JXNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgTotalMNum
=
Math
.
Round
(
PreMmodel
.
TotalMNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
TotalMNum
-
PreMmodel
.
TotalMNum
)
/
PreMmodel
.
TotalMNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
ReRateList
.
Add
(
smodel
);
if
(
SRateMonth
==
endTime
)
{
break
;
}
SRateMonth
=
Convert
.
ToDateTime
(
SRateMonth
+
"-01"
).
AddMonths
(
1
).
ToString
(
"yyyy-MM"
);
}
if
(
ReRateList
.
Any
())
{
User_Statistics_Rate_Query
savgmodel
=
new
User_Statistics_Rate_Query
()
{
Date
=
"平均"
};
savgmodel
.
MAvgPeopleNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
MAvgPeopleNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
MAvgOrderNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
MAvgOrderNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
MAvgPayMoney
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
MAvgPayMoney
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
MAvgBuyNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
MAvgBuyNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgOrderNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgOrderNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgBuyNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgBuyNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgUnitPrice
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgUnitPrice
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgBuyPrice
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgBuyPrice
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgMOrderRate
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgMOrderRate
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgProfitRate
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgProfitRate
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgProfit
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgProfit
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgPXNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgPXNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgVipNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgVipNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgYXNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgYXNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgJXNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgJXNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgTotalMNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgTotalMNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
ReRateList
.
Add
(
savgmodel
);
}
#
endregion
return
new
{
DataList
=
MonthSList
,
RateList
=
ReRateList
.
Select
(
x
=>
new
{
x
.
Date
,
x
.
MAvgPeopleNum
,
x
.
MAvgOrderNum
,
x
.
MAvgPayMoney
,
x
.
MAvgBuyNum
,
x
.
PAvgOrderNum
,
x
.
PAvgBuyNum
,
x
.
PAvgUnitPrice
,
x
.
PAvgBuyPrice
,
x
.
PAvgMOrderRate
,
x
.
PAvgProfitRate
,
x
.
PAvgProfit
,
x
.
PAvgPXNum
,
x
.
PAvgVipNum
,
x
.
PAvgYXNum
,
x
.
PAvgJXNum
,
x
.
PAvgTotalMNum
})
};
}
/// <summary>
/// 每月统计excel导出
/// </summary>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <param name="tenantId"></param>
/// <param name="mallBaseId"></param>
/// <returns></returns>
public
List
<
ExcelDataSource
>
GetDSMoreMonthStatisticsToExcel
(
string
startTime
,
string
endTime
,
int
tenantId
,
int
mallBaseId
)
{
string
StartDate
=
Convert
.
ToDateTime
(
startTime
+
"-01"
).
AddMonths
(-
1
).
ToString
(
"yyyy-MM-dd"
);
// 默认查询提前一个月 用于做对比
string
EndDate
=
Convert
.
ToDateTime
(
endTime
).
AddMonths
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
);
var
list
=
user_StatisticsRepository
.
GetList
(
new
RB_User_Statistics_Extend
()
{
TenantId
=
tenantId
,
MallBaseId
=
mallBaseId
,
StartTime
=
StartDate
,
EndTime
=
EndDate
});
List
<
User_Statistics_Query
>
MonthSList
=
new
List
<
User_Statistics_Query
>();
//月统计数据
//根据月份遍历
string
SMonth
=
Convert
.
ToDateTime
(
StartDate
).
ToString
(
"yyyy-MM"
);
int
TotalMonthNum
=
0
;
while
(
true
)
{
TotalMonthNum
++;
User_Statistics_Query
mmodel
=
new
User_Statistics_Query
()
{
Date
=
SMonth
};
//查询当月数据
var
mlist
=
list
.
Where
(
x
=>
x
.
DateMonth
==
SMonth
).
ToList
();
mmodel
.
PeopleNum
=
mlist
.
Sum
(
x
=>
x
.
PeopleNum
);
mmodel
.
OrderNum
=
mlist
.
Sum
(
x
=>
x
.
OrderNum
);
mmodel
.
PayMoney
=
mlist
.
Sum
(
x
=>
x
.
PayMoney
);
mmodel
.
BuyNum
=
mlist
.
Sum
(
x
=>
x
.
BuyNum
);
mmodel
.
TotalPayPeople
=
mlist
.
Any
()
?
mlist
.
Max
(
x
=>
x
.
PaymentNum
)
:
0
;
mmodel
.
Profit
=
mlist
.
Sum
(
x
=>
x
.
Profit
);
var
disList
=
distributor_InfoRepository
.
GetMemberDistributorNumberForCutOff
(
new
RB_Distributor_Info_Extend
()
{
TenantId
=
tenantId
,
MallBaseId
=
mallBaseId
,
AuditStatus
=
Common
.
Enum
.
User
.
DistributorAuditStatusEnum
.
Audited
},
Convert
.
ToDateTime
(
SMonth
+
"-01"
).
AddMonths
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
));
int
TotalPXNum
=
disList
.
Where
(
x
=>
x
.
FXGradeId
==
1
).
FirstOrDefault
()?.
SortNum
??
0
;
int
TotalVIPNum
=
disList
.
Where
(
x
=>
x
.
FXGradeId
==
2
).
FirstOrDefault
()?.
SortNum
??
0
;
int
TotalYXNum
=
disList
.
Where
(
x
=>
x
.
FXGradeId
==
3
).
FirstOrDefault
()?.
SortNum
??
0
;
int
TotalJXNum
=
disList
.
Where
(
x
=>
x
.
FXGradeId
==
4
).
FirstOrDefault
()?.
SortNum
??
0
;
mmodel
.
PXNum
=
TotalPXNum
;
mmodel
.
VipNum
=
TotalVIPNum
;
mmodel
.
YXNum
=
TotalYXNum
;
mmodel
.
JXNum
=
TotalJXNum
;
mmodel
.
TotalMNum
=
TotalPXNum
+
TotalVIPNum
+
TotalYXNum
+
TotalJXNum
;
#
region
求月平均
#
region
月平均参数
decimal
yPeopleNum
=
0
;
decimal
yOrderNum
=
0
;
decimal
yPayMoney
=
0
;
decimal
yBuyNum
=
0
;
decimal
yAvgOrderNum
=
0
;
decimal
yAvgBuyNum
=
0
;
decimal
yAvgUnitPrice
=
0
;
decimal
yAvgBuyPrice
=
0
;
decimal
yMemberNum
=
0
;
decimal
yPaymentNum
=
0
;
decimal
yMOrderRate
=
0
;
decimal
yReBuyNum
=
0
;
decimal
yReBuyRate
=
0
;
decimal
yNewPeopleNum
=
0
;
decimal
yPXNum
=
0
;
decimal
yVipNum
=
0
;
decimal
yYXNum
=
0
;
decimal
yJXNum
=
0
;
decimal
yProfit
=
0
;
decimal
yProfitRate
=
0
;
#
endregion
string
SDate
=
SMonth
+
"-01"
;
string
EDate
=
Convert
.
ToDateTime
(
SMonth
+
"-01"
).
AddMonths
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
);
int
MaxDay
=
Convert
.
ToDateTime
(
EDate
).
Day
;
while
(
true
)
{
if
(
Convert
.
ToDateTime
(
SDate
).
Day
==
10
)
{
#
region
本月
decimal
PeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
PeopleNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
OrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
OrderNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PayMoney
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
PayMoney
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
BuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
BuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgOrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
AvgOrderNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
AvgBuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgUnitPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
AvgUnitPrice
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
AvgBuyPrice
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MemberNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
MemberNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PaymentNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
PaymentNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MOrderRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
MOrderRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
ReBuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
ReBuyRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
NewPeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
NewPeopleNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
PXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
VipNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
VipNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
YXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
YXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
JXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
JXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
Profit
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
Profit
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ProfitRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
<=
10
).
Sum
(
x
=>
x
.
ProfitRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
region
月平均
yPeopleNum
+=
PeopleNum
;
yOrderNum
+=
OrderNum
;
yPayMoney
+=
PayMoney
;
yBuyNum
+=
BuyNum
;
yAvgOrderNum
+=
AvgOrderNum
;
yAvgBuyNum
+=
AvgBuyNum
;
yAvgUnitPrice
+=
AvgUnitPrice
;
yAvgBuyPrice
+=
AvgBuyPrice
;
yMemberNum
+=
MemberNum
;
yPaymentNum
+=
PaymentNum
;
yMOrderRate
+=
MOrderRate
;
yReBuyNum
+=
ReBuyNum
;
yReBuyRate
+=
ReBuyRate
;
yNewPeopleNum
+=
NewPeopleNum
;
yPXNum
+=
PXNum
;
yVipNum
+=
VipNum
;
yYXNum
+=
YXNum
;
yJXNum
+=
JXNum
;
yProfit
+=
Profit
;
yProfitRate
+=
ProfitRate
;
#
endregion
}
else
if
(
Convert
.
ToDateTime
(
SDate
).
Day
==
20
)
{
#
region
本月
decimal
PeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
PeopleNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
OrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
OrderNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PayMoney
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
PayMoney
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
BuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
BuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgOrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
AvgOrderNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
AvgBuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgUnitPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
AvgUnitPrice
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
AvgBuyPrice
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MemberNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
MemberNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PaymentNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
PaymentNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MOrderRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
MOrderRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
ReBuyNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
ReBuyRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
NewPeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
NewPeopleNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
PXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
VipNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
VipNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
YXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
YXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
JXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
JXNum
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
Profit
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
Profit
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ProfitRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
10
&&
x
.
Date
.
Day
<=
20
).
Sum
(
x
=>
x
.
ProfitRate
))
/
10
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
region
月平均
yPeopleNum
+=
PeopleNum
;
yOrderNum
+=
OrderNum
;
yPayMoney
+=
PayMoney
;
yBuyNum
+=
BuyNum
;
yAvgOrderNum
+=
AvgOrderNum
;
yAvgBuyNum
+=
AvgBuyNum
;
yAvgUnitPrice
+=
AvgUnitPrice
;
yAvgBuyPrice
+=
AvgBuyPrice
;
yMemberNum
+=
MemberNum
;
yPaymentNum
+=
PaymentNum
;
yMOrderRate
+=
MOrderRate
;
yReBuyNum
+=
ReBuyNum
;
yReBuyRate
+=
ReBuyRate
;
yNewPeopleNum
+=
NewPeopleNum
;
yPXNum
+=
PXNum
;
yVipNum
+=
VipNum
;
yYXNum
+=
YXNum
;
yJXNum
+=
JXNum
;
yProfit
+=
Profit
;
yProfitRate
+=
ProfitRate
;
#
endregion
}
else
if
(
Convert
.
ToDateTime
(
SDate
).
Day
==
MaxDay
)
{
int
NowDay
=
MaxDay
-
20
;
#
region
本月
decimal
PeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
PeopleNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
OrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
OrderNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PayMoney
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
PayMoney
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
BuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
BuyNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgOrderNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
AvgOrderNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
AvgBuyNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgUnitPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
AvgUnitPrice
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
AvgBuyPrice
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
AvgBuyPrice
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MemberNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
MemberNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PaymentNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
PaymentNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
MOrderRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
MOrderRate
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
ReBuyNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ReBuyRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
ReBuyRate
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
NewPeopleNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
NewPeopleNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
PXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
PXNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
VipNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
VipNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
YXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
YXNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
JXNum
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
JXNum
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
Profit
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
Profit
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
decimal
ProfitRate
=
Math
.
Round
(
Convert
.
ToDecimal
(
mlist
.
Where
(
x
=>
x
.
Date
.
Day
>
20
).
Sum
(
x
=>
x
.
ProfitRate
))
/
NowDay
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
region
月平均
yPeopleNum
+=
PeopleNum
;
yOrderNum
+=
OrderNum
;
yPayMoney
+=
PayMoney
;
yBuyNum
+=
BuyNum
;
yAvgOrderNum
+=
AvgOrderNum
;
yAvgBuyNum
+=
AvgBuyNum
;
yAvgUnitPrice
+=
AvgUnitPrice
;
yAvgBuyPrice
+=
AvgBuyPrice
;
yMemberNum
+=
MemberNum
;
yPaymentNum
+=
PaymentNum
;
yMOrderRate
+=
MOrderRate
;
yReBuyNum
+=
ReBuyNum
;
yReBuyRate
+=
ReBuyRate
;
yNewPeopleNum
+=
NewPeopleNum
;
yPXNum
+=
PXNum
;
yVipNum
+=
VipNum
;
yYXNum
+=
YXNum
;
yJXNum
+=
JXNum
;
yProfit
+=
Profit
;
yProfitRate
+=
ProfitRate
;
#
endregion
}
if
(
SDate
==
EDate
)
{
break
;
}
SDate
=
Convert
.
ToDateTime
(
SDate
).
AddDays
(
1
).
ToString
(
"yyyy-MM-dd"
);
}
#
region
月平均赋值
mmodel
.
MAvgPeopleNum
=
Math
.
Round
(
yPeopleNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
MAvgOrderNum
=
Math
.
Round
(
yOrderNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
MAvgPayMoney
=
Math
.
Round
(
yPayMoney
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
MAvgBuyNum
=
Math
.
Round
(
yBuyNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgOrderNum
=
Math
.
Round
(
yAvgOrderNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgBuyNum
=
Math
.
Round
(
yAvgBuyNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgUnitPrice
=
Math
.
Round
(
yAvgUnitPrice
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgBuyPrice
=
Math
.
Round
(
yAvgBuyPrice
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgMemberNum
=
Math
.
Round
(
yMemberNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgPaymentNum
=
Math
.
Round
(
yPaymentNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgMOrderRate
=
Math
.
Round
(
yMOrderRate
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgReBuyNum
=
Math
.
Round
(
yReBuyNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgReBuyRate
=
Math
.
Round
(
yReBuyRate
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgNewPeopleNum
=
Math
.
Round
(
yNewPeopleNum
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
mmodel
.
PAvgProfitRate
=
Math
.
Round
(
yProfitRate
/
3
,
2
,
MidpointRounding
.
AwayFromZero
);
#
endregion
#
endregion
MonthSList
.
Add
(
mmodel
);
if
(
SMonth
==
endTime
)
{
break
;
}
SMonth
=
Convert
.
ToDateTime
(
SMonth
+
"-01"
).
AddMonths
(
1
).
ToString
(
"yyyy-MM"
);
}
if
(
MonthSList
.
Any
())
{
string
ContrastMonth
=
Convert
.
ToDateTime
(
StartDate
).
ToString
(
"yyyy-MM"
);
var
MonthSList2
=
MonthSList
.
Where
(
x
=>
x
.
Date
!=
ContrastMonth
).
ToList
();
TotalMonthNum
--;
//计算平均/总计 平均需排除掉对比月数据
User_Statistics_Query
MTotalModel
=
new
User_Statistics_Query
()
{
Date
=
"平均/总计"
,
PeopleNum
=
MonthSList2
.
Sum
(
x
=>
x
.
PeopleNum
),
OrderNum
=
MonthSList2
.
Sum
(
x
=>
x
.
OrderNum
),
PayMoney
=
MonthSList2
.
Sum
(
x
=>
x
.
PayMoney
),
BuyNum
=
MonthSList2
.
Sum
(
x
=>
x
.
BuyNum
),
Profit
=
MonthSList2
.
Sum
(
x
=>
x
.
Profit
),
PXNum
=
MonthSList2
.
Sum
(
x
=>
x
.
PXNum
),
VipNum
=
MonthSList2
.
Sum
(
x
=>
x
.
VipNum
),
YXNum
=
MonthSList2
.
Sum
(
x
=>
x
.
YXNum
),
JXNum
=
MonthSList2
.
Sum
(
x
=>
x
.
JXNum
),
TotalMNum
=
MonthSList2
.
Sum
(
x
=>
x
.
TotalMNum
),
MAvgPeopleNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
MAvgPeopleNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
MAvgOrderNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
MAvgOrderNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
MAvgPayMoney
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
MAvgPayMoney
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
MAvgBuyNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
MAvgBuyNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgOrderNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgOrderNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgBuyNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgBuyNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgUnitPrice
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgUnitPrice
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgBuyPrice
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgBuyPrice
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgMemberNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgMemberNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgPaymentNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgPaymentNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgMOrderRate
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgMOrderRate
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgReBuyNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgReBuyNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgReBuyRate
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgReBuyRate
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgNewPeopleNum
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgNewPeopleNum
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
),
PAvgProfitRate
=
Math
.
Round
(
MonthSList2
.
Sum
(
x
=>
x
.
PAvgProfitRate
)
/
TotalMonthNum
,
2
,
MidpointRounding
.
AwayFromZero
)
};
MonthSList
.
Add
(
MTotalModel
);
}
#
region
计算比率
List
<
User_Statistics_Rate_Query
>
ReRateList
=
new
List
<
User_Statistics_Rate_Query
>();
//概率数据
string
SRateMonth
=
startTime
;
//这个要从下一个月开始
while
(
true
)
{
//求当月的所有比例 (当月-上月)/上月
var
NowMmodel
=
MonthSList
.
Where
(
x
=>
x
.
Date
==
SRateMonth
).
FirstOrDefault
();
var
PreMmodel
=
MonthSList
.
Where
(
x
=>
x
.
Date
==
Convert
.
ToDateTime
(
SRateMonth
+
"-01"
).
AddMonths
(-
1
).
ToString
(
"yyyy-MM"
)).
FirstOrDefault
();
User_Statistics_Rate_Query
smodel
=
new
User_Statistics_Rate_Query
()
{
Date
=
SRateMonth
};
smodel
.
MAvgPeopleNum
=
Math
.
Round
(
PreMmodel
.
MAvgPeopleNum
>
0
?
(
NowMmodel
.
MAvgPeopleNum
-
PreMmodel
.
MAvgPeopleNum
)
/
PreMmodel
.
MAvgPeopleNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
MAvgOrderNum
=
Math
.
Round
(
PreMmodel
.
MAvgOrderNum
>
0
?
(
NowMmodel
.
MAvgOrderNum
-
PreMmodel
.
MAvgOrderNum
)
/
PreMmodel
.
MAvgOrderNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
MAvgPayMoney
=
Math
.
Round
(
PreMmodel
.
MAvgPayMoney
>
0
?
(
NowMmodel
.
MAvgPayMoney
-
PreMmodel
.
MAvgPayMoney
)
/
PreMmodel
.
MAvgPayMoney
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
MAvgBuyNum
=
Math
.
Round
(
PreMmodel
.
MAvgBuyNum
>
0
?
(
NowMmodel
.
MAvgBuyNum
-
PreMmodel
.
MAvgBuyNum
)
/
PreMmodel
.
MAvgBuyNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgOrderNum
=
Math
.
Round
(
PreMmodel
.
PAvgOrderNum
>
0
?
(
NowMmodel
.
PAvgOrderNum
-
PreMmodel
.
PAvgOrderNum
)
/
PreMmodel
.
PAvgOrderNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgBuyNum
=
Math
.
Round
(
PreMmodel
.
PAvgBuyNum
>
0
?
(
NowMmodel
.
PAvgBuyNum
-
PreMmodel
.
PAvgBuyNum
)
/
PreMmodel
.
PAvgBuyNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgUnitPrice
=
Math
.
Round
(
PreMmodel
.
PAvgUnitPrice
>
0
?
(
NowMmodel
.
PAvgUnitPrice
-
PreMmodel
.
PAvgUnitPrice
)
/
PreMmodel
.
PAvgUnitPrice
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgBuyPrice
=
Math
.
Round
(
PreMmodel
.
PAvgBuyPrice
>
0
?
(
NowMmodel
.
PAvgBuyPrice
-
PreMmodel
.
PAvgBuyPrice
)
/
PreMmodel
.
PAvgBuyPrice
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgMOrderRate
=
Math
.
Round
(
PreMmodel
.
PAvgMOrderRate
>
0
?
(
NowMmodel
.
PAvgMOrderRate
-
PreMmodel
.
PAvgMOrderRate
)
/
PreMmodel
.
PAvgMOrderRate
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgProfitRate
=
Math
.
Round
(
PreMmodel
.
PAvgProfitRate
>
0
?
(
NowMmodel
.
PAvgProfitRate
-
PreMmodel
.
PAvgProfitRate
)
/
PreMmodel
.
PAvgProfitRate
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgProfit
=
Math
.
Round
(
PreMmodel
.
Profit
>
0
?
(
NowMmodel
.
Profit
-
PreMmodel
.
Profit
)
/
PreMmodel
.
Profit
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgPXNum
=
Math
.
Round
(
PreMmodel
.
PXNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
PXNum
-
PreMmodel
.
PXNum
)
/
PreMmodel
.
PXNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgVipNum
=
Math
.
Round
(
PreMmodel
.
VipNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
VipNum
-
PreMmodel
.
VipNum
)
/
PreMmodel
.
VipNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgYXNum
=
Math
.
Round
(
PreMmodel
.
YXNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
YXNum
-
PreMmodel
.
YXNum
)
/
PreMmodel
.
YXNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgJXNum
=
Math
.
Round
(
PreMmodel
.
JXNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
JXNum
-
PreMmodel
.
JXNum
)
/
PreMmodel
.
JXNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
smodel
.
PAvgTotalMNum
=
Math
.
Round
(
PreMmodel
.
TotalMNum
>
0
?
Convert
.
ToDecimal
(
NowMmodel
.
TotalMNum
-
PreMmodel
.
TotalMNum
)
/
PreMmodel
.
TotalMNum
:
1
,
4
,
MidpointRounding
.
AwayFromZero
)
*
100
;
ReRateList
.
Add
(
smodel
);
if
(
SRateMonth
==
endTime
)
{
break
;
}
SRateMonth
=
Convert
.
ToDateTime
(
SRateMonth
+
"-01"
).
AddMonths
(
1
).
ToString
(
"yyyy-MM"
);
}
if
(
ReRateList
.
Any
())
{
User_Statistics_Rate_Query
savgmodel
=
new
User_Statistics_Rate_Query
()
{
Date
=
"平均"
};
savgmodel
.
MAvgPeopleNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
MAvgPeopleNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
MAvgOrderNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
MAvgOrderNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
MAvgPayMoney
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
MAvgPayMoney
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
MAvgBuyNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
MAvgBuyNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgOrderNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgOrderNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgBuyNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgBuyNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgUnitPrice
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgUnitPrice
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgBuyPrice
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgBuyPrice
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgMOrderRate
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgMOrderRate
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgProfitRate
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgProfitRate
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgProfit
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgProfit
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgPXNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgPXNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgVipNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgVipNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgYXNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgYXNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgJXNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgJXNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
savgmodel
.
PAvgTotalMNum
=
Math
.
Round
(
ReRateList
.
Sum
(
x
=>
x
.
PAvgTotalMNum
)
/
(
TotalMonthNum
-
1
),
2
,
MidpointRounding
.
AwayFromZero
);
ReRateList
.
Add
(
savgmodel
);
}
#
endregion
#
region
组装
excel
数据
List
<
ExcelDataSource
>
DataList
=
new
List
<
ExcelDataSource
>();
//第一部分数据
foreach
(
var
item
in
MonthSList
)
{
ExcelDataSource
datarow
=
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
item
.
Date
==
"平均/总计"
?
"平均"
:
item
.
Date
){
},
new
ExcelColumn
(
value
:
item
.
MAvgPeopleNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
MAvgOrderNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
MAvgPayMoney
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
MAvgBuyNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgOrderNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgBuyNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgUnitPrice
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgBuyPrice
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgMemberNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgPaymentNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgMOrderRate
.
ToString
(
"#0.00"
)+
"%"
){
},
new
ExcelColumn
(
value
:
item
.
PAvgReBuyNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgReBuyRate
.
ToString
(
"#0.00"
)+
"%"
){
},
new
ExcelColumn
(
value
:
item
.
PAvgNewPeopleNum
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PAvgProfitRate
.
ToString
(
"#0.00"
)+
"%"
){
},
},
ColumnHight
=
30
};
DataList
.
Add
(
datarow
);
}
//增加行空白
DataList
.
Add
(
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
""
)
{
Colspan
=
16
}
}
});
#
region
增加统计标题
ExcelDataSource
header2
=
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
"月小計"
)
{
},
new
ExcelColumn
(
value
:
"付款人數累計"
)
{
},
new
ExcelColumn
(
value
:
"付款單數累計"
)
{
},
new
ExcelColumn
(
value
:
"付款金額累計"
)
{
},
new
ExcelColumn
(
value
:
"購買件數累計"
)
{
},
new
ExcelColumn
(
value
:
"付款人數"
)
{
},
new
ExcelColumn
(
value
:
"毛利"
)
{
},
new
ExcelColumn
(
value
:
"普象"
)
{
},
new
ExcelColumn
(
value
:
"VIP"
)
{
},
new
ExcelColumn
(
value
:
"銀象"
)
{
},
new
ExcelColumn
(
value
:
"金象"
)
{
},
new
ExcelColumn
(
value
:
"會員總數"
)
{
}
},
ColumnHight
=
30
};
DataList
.
Add
(
header2
);
#
endregion
//第二部分数据
foreach
(
var
item
in
MonthSList
)
{
ExcelDataSource
datarow
=
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
item
.
Date
==
"平均/总计"
?
"總計"
:
item
.
Date
){
},
new
ExcelColumn
(
value
:
item
.
PeopleNum
.
ToString
()){
},
new
ExcelColumn
(
value
:
item
.
OrderNum
.
ToString
()){
},
new
ExcelColumn
(
value
:
item
.
PayMoney
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
BuyNum
.
ToString
()){
},
new
ExcelColumn
(
value
:
item
.
TotalPayPeople
.
ToString
()){
},
new
ExcelColumn
(
value
:
item
.
Profit
.
ToString
(
"#0.00"
)){
},
new
ExcelColumn
(
value
:
item
.
PXNum
.
ToString
()){
},
new
ExcelColumn
(
value
:
item
.
VipNum
.
ToString
()){
},
new
ExcelColumn
(
value
:
item
.
YXNum
.
ToString
()){
},
new
ExcelColumn
(
value
:
item
.
JXNum
.
ToString
()){
},
new
ExcelColumn
(
value
:
item
.
TotalMNum
.
ToString
()){
}
},
ColumnHight
=
30
};
DataList
.
Add
(
datarow
);
}
//增加行空白
DataList
.
Add
(
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
""
)
{
Colspan
=
16
}
}
});
//增加行空白
DataList
.
Add
(
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
""
)
{
Colspan
=
16
}
}
});
#
region
第三部分
//先组装标题
ExcelDataSource
header3
=
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
""
)
{
},
},
ColumnHight
=
30
};
foreach
(
var
item
in
ReRateList
)
{
header3
.
ExcelRows
.
Add
(
new
ExcelColumn
(
value
:
item
.
Date
)
{
});
}
DataList
.
Add
(
header3
);
//组装数据
List
<
string
>
RateRowList
=
new
List
<
string
>()
{
"MAvgPeopleNum|平均付款人數成長率"
,
"MAvgOrderNum|平均付款單數成長率"
,
"MAvgPayMoney|平均付款金額成長率"
,
"MAvgBuyNum|平均付款件數成長率"
,
"PAvgOrderNum|平均每人購買單數成長率"
,
"PAvgBuyNum|平均每人購買件數成長率"
,
"PAvgUnitPrice|平均每單單價成長率"
,
"PAvgBuyPrice|平均每人購買單價成長率"
,
"PAvgProfitRate|毛利率成長率"
,
"PAvgProfit|毛利成長率"
,
"PAvgMOrderRate|會員下訂單成長率"
,
"PAvgPXNum|普象會員成長率"
,
"PAvgVipNum|VIP會員成長率"
,
"PAvgYXNum|銀象會員成長率"
,
"PAvgJXNum|金象會員成長率"
,
"PAvgTotalMNum|會員總成長率"
};
foreach
(
var
item
in
RateRowList
)
{
var
fileNameArr
=
item
.
Split
(
'|'
);
ExcelDataSource
datarow2
=
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
fileNameArr
[
1
])
{
},
},
ColumnHight
=
30
};
foreach
(
var
qitem
in
ReRateList
)
{
JObject
parms
=
JObject
.
Parse
(
JsonHelper
.
Serialize
(
qitem
));
string
mvalue
=
parms
.
GetStringValue
(
fileNameArr
[
0
]);
datarow2
.
ExcelRows
.
Add
(
new
ExcelColumn
(
value
:
mvalue
+
"%"
)
{
});
}
DataList
.
Add
(
datarow2
);
}
#
endregion
#
endregion
return
DataList
;
}
/// <summary>
/// 获取年度统计
/// </summary>
/// <param name="startYear"></param>
/// <param name="endYear"></param>
/// <param name="tenantId"></param>
/// <param name="mallBaseId"></param>
/// <returns></returns>
public
object
GetDSYearStartistics
(
int
startYear
,
int
endYear
,
int
tenantId
,
int
mallBaseId
)
{
string
StartDate
=
startYear
+
"-01-01"
;
string
EndDate
=
Convert
.
ToDateTime
(
endYear
+
"-01-01"
).
AddYears
(
1
).
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
);
var
list
=
user_StatisticsRepository
.
GetList
(
new
RB_User_Statistics_Extend
()
{
TenantId
=
tenantId
,
MallBaseId
=
mallBaseId
,
StartTime
=
StartDate
,
EndTime
=
EndDate
});
List
<
User_Statistics_Query
>
YearSList
=
new
List
<
User_Statistics_Query
>();
//月统计数据
int
SYear
=
startYear
;
while
(
true
)
{
var
ylist
=
list
.
Where
(
x
=>
x
.
DateYear
==
SYear
).
ToList
();
User_Statistics_Query
ymodel
=
new
User_Statistics_Query
()
{
Date
=
SYear
.
ToString
()
};
ymodel
.
PeopleNum
=
ylist
.
Sum
(
x
=>
x
.
PeopleNum
);
if
(
startYear
==
endYear
)
{
break
;
}
SYear
=
Convert
.
ToDateTime
(
SYear
+
"-01-01"
).
AddYears
(
1
).
Year
;
}
return
""
;
}
}
#
endregion
#
endregion
...
...
Mall.WebApi/Controllers/AppletWeChat/LiveHouseController.cs
View file @
1958764d
...
@@ -1526,6 +1526,113 @@ namespace Mall.WebApi.Controllers.AppletWeChat
...
@@ -1526,6 +1526,113 @@ namespace Mall.WebApi.Controllers.AppletWeChat
return
ApiResult
.
Success
(
""
,
Robj
);
return
ApiResult
.
Success
(
""
,
Robj
);
}
}
/// <summary>
/// 每月统计导出excel
/// </summary>
/// <param name="requestMsg"></param>
/// <returns></returns>
[
HttpPost
]
[
AllowAnonymous
]
public
FileContentResult
GetDSMoreMonthStatisticsToExcel
(
object
requestMsg
)
{
var
requestParm
=
JsonConvert
.
DeserializeObject
<
RequestParm
>(
requestMsg
.
ToString
());
JObject
parms
=
JObject
.
Parse
(
requestParm
.
msg
.
ToString
());
string
StartTime
=
parms
.
GetStringValue
(
"StartTime"
);
//开始时间 月
string
EndTime
=
parms
.
GetStringValue
(
"EndTime"
);
//结束时间 月
string
ExcelName
=
"电商多月统计"
+
DateTime
.
Now
.
ToString
(
"yyyyMMddHHmmss"
)
+
".xls"
;
List
<
ExcelDataSource
>
slist
=
new
List
<
ExcelDataSource
>();
if
(
string
.
IsNullOrEmpty
(
StartTime
))
{
var
byteData1
=
ExcelTempLateHelper
.
ToExcelExtend
(
slist
);
return
File
(
byteData1
,
"application/octet-stream"
,
ExcelName
);
}
if
(
string
.
IsNullOrEmpty
(
EndTime
))
{
var
byteData1
=
ExcelTempLateHelper
.
ToExcelExtend
(
slist
);
return
File
(
byteData1
,
"application/octet-stream"
,
ExcelName
);
}
try
{
StartTime
=
Convert
.
ToDateTime
(
StartTime
).
ToString
(
"yyyy-MM"
);
EndTime
=
Convert
.
ToDateTime
(
EndTime
).
ToString
(
"yyyy-MM"
);
}
catch
(
Exception
)
{
var
byteData1
=
ExcelTempLateHelper
.
ToExcelExtend
(
slist
);
return
File
(
byteData1
,
"application/octet-stream"
,
ExcelName
);
}
if
(
Convert
.
ToDateTime
(
StartTime
)
>
Convert
.
ToDateTime
(
EndTime
))
{
var
byteData1
=
ExcelTempLateHelper
.
ToExcelExtend
(
slist
);
return
File
(
byteData1
,
"application/octet-stream"
,
ExcelName
);
}
ExcelDataSource
header
=
new
ExcelDataSource
()
{
ExcelRows
=
new
List
<
ExcelColumn
>(
23
)
{
new
ExcelColumn
(
value
:
"月份"
)
{
CellWidth
=
25
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均付款人數"
)
{
CellWidth
=
15
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均付款單數"
)
{
CellWidth
=
15
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均付款金額"
)
{
CellWidth
=
15
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均付款件數"
)
{
CellWidth
=
15
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均每人購買單數"
)
{
CellWidth
=
20
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均每人購買件數"
)
{
CellWidth
=
20
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均每單單價"
)
{
CellWidth
=
20
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均每人購買單價"
)
{
CellWidth
=
20
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均會員累計數"
)
{
CellWidth
=
20
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均付款累計人數"
)
{
CellWidth
=
20
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均會員下單轉換率"
)
{
CellWidth
=
20
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均復夠人數"
)
{
CellWidth
=
15
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均復夠率"
)
{
CellWidth
=
15
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"平均新人下單"
)
{
CellWidth
=
15
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
},
new
ExcelColumn
(
value
:
"毛利率"
)
{
CellWidth
=
15
,
HAlignmentEnum
=
HAlignmentEnum
.
CENTER
,
VAlignmentEnum
=
VAlignmentEnum
.
CENTER
}
},
ColumnHight
=
30
};
slist
.
Add
(
header
);
try
{
List
<
ExcelDataSource
>
Rlist
=
statisticsModule
.
GetDSMoreMonthStatisticsToExcel
(
StartTime
,
EndTime
,
requestParm
.
TenantId
,
requestParm
.
MallBaseId
);
slist
.
AddRange
(
Rlist
);
var
byteData
=
ExcelTempLateHelper
.
ToExcelExtend
(
slist
);
return
File
(
byteData
,
"application/octet-stream"
,
ExcelName
);
}
catch
(
Exception
ex
)
{
LogHelper
.
Write
(
ex
,
string
.
Format
(
"GetFileFromWebApi_requestData: {0}"
,
JsonHelper
.
Serialize
(
requestMsg
.
ToString
())));
var
byteData1
=
ExcelTempLateHelper
.
ToExcelExtend
(
slist
);
return
File
(
byteData1
,
"application/octet-stream"
,
ExcelName
);
}
}
/// <summary>
/// 年度统计
/// </summary>
/// <param name="requestMsg"></param>
/// <returns></returns>
[
HttpPost
]
[
AllowAnonymous
]
public
ApiResult
GetDSYearStartistics
(
object
requestMsg
)
{
var
requestParm
=
JsonConvert
.
DeserializeObject
<
RequestParm
>(
requestMsg
.
ToString
());
JObject
parms
=
JObject
.
Parse
(
requestParm
.
msg
.
ToString
());
int
StartYear
=
parms
.
GetInt
(
"StartYear"
,
0
);
//开始时间 年
int
EndYear
=
parms
.
GetInt
(
"EndYear"
,
0
);
//结束时间 年
if
(
StartYear
<=
0
||
EndYear
<=
0
)
{
return
ApiResult
.
ParamIsNull
();
}
if
(
StartYear
<
2019
||
StartYear
>
EndYear
)
{
return
ApiResult
.
ParamIsNull
(
"参数有误"
);
}
var
Robj
=
statisticsModule
.
GetDSYearStartistics
(
StartYear
,
EndYear
,
requestParm
.
TenantId
,
requestParm
.
MallBaseId
);
return
ApiResult
.
Success
(
""
,
Robj
);
}
#
endregion
#
endregion
}
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment