Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
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
youjj
cloud-platform
Commits
803ba30a
Commit
803ba30a
authored
Oct 12, 2019
by
hanfeng
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master-order-statistics'
parents
e0c75d35
0c4aba12
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
698 additions
and
69 deletions
+698
-69
OrderDateUtils.java
...in/java/com/xxfc/platform/order/Utils/OrderDateUtils.java
+111
-0
OrderInquiryType.java
...fc/platform/order/contant/enumerate/OrderInquiryType.java
+30
-0
MembersOrder.java
...ain/java/com/xxfc/platform/order/entity/MembersOrder.java
+23
-0
OrderStatistics.java
.../java/com/xxfc/platform/order/entity/OrderStatistics.java
+1
-1
Member.java
...pi/src/main/java/com/xxfc/platform/order/pojo/Member.java
+33
-0
MembersOrderDto.java
...in/java/com/xxfc/platform/order/pojo/MembersOrderDto.java
+32
-0
OrderQuery.java
...rc/main/java/com/xxfc/platform/order/pojo/OrderQuery.java
+29
-0
DailyMembersOrderStatisticsBiz.java
...fc/platform/order/biz/DailyMembersOrderStatisticsBiz.java
+41
-4
DailyOrderStatisticsBiz.java
.../com/xxfc/platform/order/biz/DailyOrderStatisticsBiz.java
+3
-2
DailyTravelOrderStatisticsBiz.java
...xfc/platform/order/biz/DailyTravelOrderStatisticsBiz.java
+43
-20
DailyVehicleOrderStatisticsBiz.java
...fc/platform/order/biz/DailyVehicleOrderStatisticsBiz.java
+52
-23
OrderStatisticsBiz.java
.../java/com/xxfc/platform/order/biz/OrderStatisticsBiz.java
+172
-8
DailyMembersOrderStatisticsMapper.java
...tform/order/mapper/DailyMembersOrderStatisticsMapper.java
+5
-0
OrderStatisticsController.java
...form/order/rest/background/OrderStatisticsController.java
+72
-11
会员订单统计.xlsx
...rder/xx-order-server/src/main/resources/Excel/会员订单统计.xlsx
+0
-0
DailyMembersOrderStatisticsMapper.xml
...in/resources/mapper/DailyMembersOrderStatisticsMapper.xml
+51
-0
No files found.
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/Utils/OrderDateUtils.java
0 → 100644
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
Utils
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
public
class
OrderDateUtils
{
public
static
String
getFirstDayOfMonth
(
int
year
,
int
month
)
{
String
monthStr
=
String
.
valueOf
(
month
);
return
year
+
"-"
+
monthStr
+
"-"
+
"01"
;
}
/**
* get the last date of given month and year
* @param year
* @param month
* @return
*
*/
public
static
String
getLastDayOfMonth
(
int
year
,
int
month
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
YEAR
,
year
);
calendar
.
set
(
Calendar
.
MONTH
,
month
-
1
);
calendar
.
set
(
Calendar
.
DATE
,
1
);
calendar
.
add
(
Calendar
.
MONTH
,
1
);
calendar
.
add
(
Calendar
.
DAY_OF_YEAR
,
-
1
);
return
calendar
.
get
(
Calendar
.
YEAR
)
+
"-"
+
(
calendar
.
get
(
Calendar
.
MONTH
)
+
1
)
+
"-"
+
calendar
.
get
(
Calendar
.
DAY_OF_MONTH
);
}
/**
* get Calendar of given year
* @param year
* @return
*
*/
private
static
Calendar
getCalendarFormYear
(
int
year
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
set
(
Calendar
.
DAY_OF_WEEK
,
Calendar
.
MONDAY
);
cal
.
set
(
Calendar
.
YEAR
,
year
);
return
cal
;
}
/**
* get start date of given week no of a year
* @param year
* @param weekNo
* @return
*
*/
public
static
String
getStartDayOfWeekNo
(
int
year
,
int
weekNo
)
{
Calendar
cal
=
getCalendarFormYear
(
year
);
cal
.
set
(
Calendar
.
WEEK_OF_YEAR
,
weekNo
);
return
cal
.
get
(
Calendar
.
YEAR
)
+
"-"
+
(
cal
.
get
(
Calendar
.
MONTH
)
+
1
)
+
"-"
+
cal
.
get
(
Calendar
.
DAY_OF_MONTH
);
}
/**
* get the end day of given week no of a year.
* @param year
* @param weekNo
* @return
*
*/
public
static
String
getEndDayOfWeekNo
(
int
year
,
int
weekNo
)
{
Calendar
cal
=
getCalendarFormYear
(
year
);
cal
.
set
(
Calendar
.
WEEK_OF_YEAR
,
weekNo
);
cal
.
add
(
Calendar
.
DAY_OF_WEEK
,
6
);
return
cal
.
get
(
Calendar
.
YEAR
)
+
"-"
+
(
cal
.
get
(
Calendar
.
MONTH
)
+
1
)
+
"-"
+
cal
.
get
(
Calendar
.
DAY_OF_MONTH
);
}
public
static
String
timeStampConversionToString
(
Long
time
)
{
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Date
date
=
new
Date
(
time
);
return
simpleDateFormat
.
format
(
date
);
}
public
static
Long
ConvertingStringsToTimestamps
(
String
time
)
throws
ParseException
{
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
return
simpleDateFormat
.
parse
(
time
).
getTime
();
}
public
static
Integer
getTodayOfWeek
()
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
cal
.
setTimeInMillis
(
System
.
currentTimeMillis
());
return
cal
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
public
static
Integer
getTodayOfMonth
()
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTimeInMillis
(
System
.
currentTimeMillis
());
return
cal
.
get
(
Calendar
.
MONTH
)+
1
;
}
public
static
Integer
getThisYear
()
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTimeInMillis
(
System
.
currentTimeMillis
());
return
cal
.
get
(
Calendar
.
YEAR
);
}
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/contant/enumerate/OrderInquiryType.java
0 → 100644
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
contant
.
enumerate
;
import
lombok.NoArgsConstructor
;
@NoArgsConstructor
public
enum
OrderInquiryType
{
DAY
(
1
,
"按天分类"
),
WEEK
(
2
,
"按周分类"
),
MONTH
(
3
,
"按月分类"
);
/**
* 编码
*/
private
Integer
code
;
/**
* 类型描述
*/
private
String
desc
;
OrderInquiryType
(
Integer
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
public
Integer
getCode
()
{
return
code
;
}
public
String
getDesc
()
{
return
desc
;
}
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/MembersOrder.java
0 → 100644
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
entity
;
import
com.xxfc.platform.order.pojo.Member
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* @author Administrator
*/
@Data
public
class
MembersOrder
{
/**
* 时间段按日(yyyy-MM-dd)/周(yyyy-ww) /月(yyyy-MM)
*/
private
String
period
;
List
<
Member
>
members
;
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/OrderStatistics.java
View file @
803ba30a
...
...
@@ -21,7 +21,7 @@ public class OrderStatistics {
/**
* 历史交总金额
*/
@ApiModelProperty
(
value
=
"历史交总金额"
)
@ApiModelProperty
(
value
=
"历史交
易
总金额"
)
private
BigDecimal
totalGmv
;
/**
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/Member.java
0 → 100644
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
pojo
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* 每日、每周或每月不同会员的总数据
* @author Administrator
*/
@Data
public
class
Member
{
/**
* 金额
*/
private
BigDecimal
amount
;
/**
* 会员等级
*/
private
Integer
level
;
/**
* 购买次数
*/
private
Integer
number
;
/**
* 会员名
*/
private
String
memberName
;
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/MembersOrderDto.java
0 → 100644
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
pojo
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* 每日、每周、每月会员购买数据
* @author Administrator
*/
@Data
public
class
MembersOrderDto
{
/**
* 时间段
*/
private
String
timeSlot
;
/**
* 时间段总数据
*
*/
private
BigDecimal
totalPayment
;
/**
* 时间段内不同会员数据
*/
private
List
<
Member
>
members
;
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/OrderQuery.java
0 → 100644
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
pojo
;
import
lombok.Data
;
/**
* 会员订单统计条件
* @author Administrator
*/
@Data
public
class
OrderQuery
{
private
Integer
page
=
1
;
private
Integer
limit
=
10
;
/**
* 查询开始时间
*/
private
Long
startTime
;
/**
* 查询结束时间
*/
private
Long
endTime
;
/**
* 1.按每日统计,2.按每周统计,3.按每月统计
*/
private
Integer
type
=
1
;
}
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/DailyMembersOrderStatisticsBiz.java
View file @
803ba30a
...
...
@@ -2,17 +2,17 @@ package com.xxfc.platform.order.biz;
import
cn.hutool.json.JSONUtil
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.google.common.collect.Lists
;
import
com.xxfc.platform.order.contant.enumerate.OrderTypeEnum
;
import
com.xxfc.platform.order.entity.DailyMembersOrderStatistics
;
import
com.xxfc.platform.order.entity.MembersOrder
;
import
com.xxfc.platform.order.entity.OrderAccount
;
import
com.xxfc.platform.order.entity.OrderStatistics
;
import
com.xxfc.platform.order.mapper.DailyMembersOrderStatisticsMapper
;
import
com.xxfc.platform.order.pojo.OrderQuery
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDTO
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.beanutils.BeanUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -21,12 +21,12 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
tk.mybatis.mapper.entity.Example
;
import
tk.mybatis.mapper.weekend.WeekendSqls
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
/**
* 每日购买会员订单统计
...
...
@@ -64,17 +64,45 @@ public class DailyMembersOrderStatisticsBiz extends BaseBiz<DailyMembersOrderSta
orderStatistics
.
setBranchCompanyId
(
OMPANY_ID
);
orderStatistics
.
setOneDay
(
accountList
.
get
(
0
).
getOneDay
());
}
log
.
info
(
"Members:统计完成"
);
if
(
JudgmentOfExistence
(
orderStatistics
))
{
insertSelectiveRe
(
orderStatistics
);
}
else
{
mapper
.
updateByExampleSelective
(
orderStatistics
,
Example
.
builder
(
DailyMembersOrderStatistics
.
class
)
.
where
(
WeekendSqls
.<
DailyMembersOrderStatistics
>
custom
()
.
andEqualTo
(
DailyMembersOrderStatistics:
:
getOneDay
,
orderStatistics
.
getOneDay
())
.
andEqualTo
(
DailyMembersOrderStatistics:
:
getBranchCompanyId
,
orderStatistics
.
getBranchCompanyId
()))
.
build
());
}
log
.
info
(
"Members:保存成功"
);
}
return
true
;
}
catch
(
Exception
e
)
{
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
e
.
printStackTrace
();
log
.
error
(
"Members:"
+
e
.
getMessage
());
return
false
;
}
}
/**
* 添加前查询是否存在这条数据
* @param orderStatistic
* @return
*/
private
boolean
JudgmentOfExistence
(
DailyMembersOrderStatistics
orderStatistic
)
{
List
<
DailyMembersOrderStatistics
>
statistics
=
selectByExample
(
Example
.
builder
(
DailyMembersOrderStatistics
.
class
)
.
where
(
WeekendSqls
.<
DailyMembersOrderStatistics
>
custom
()
.
andEqualTo
(
DailyMembersOrderStatistics:
:
getOneDay
,
orderStatistic
.
getOneDay
())
.
andEqualTo
(
DailyMembersOrderStatistics:
:
getBranchCompanyId
,
orderStatistic
.
getBranchCompanyId
()))
.
build
());
if
(
CollectionUtils
.
isNotEmpty
(
statistics
))
{
return
false
;
}
return
true
;
}
/**
* 获取押金和
*
...
...
@@ -120,4 +148,13 @@ public class DailyMembersOrderStatisticsBiz extends BaseBiz<DailyMembersOrderSta
public
OrderStatistics
findAll
(
Integer
companyId
)
{
return
mapper
.
monthOrderTotal
(
companyId
);
}
/**
* 根据时间按年月日分组
* @param query
* @return
*/
public
List
<
MembersOrder
>
getMemberOrderStatistics
(
OrderQuery
query
)
{
return
mapper
.
getMemberOrderStatistics
(
query
);
}
}
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/DailyOrderStatisticsBiz.java
View file @
803ba30a
...
...
@@ -25,16 +25,17 @@ public class DailyOrderStatisticsBiz extends BaseBiz<DailyOrderStatisticsMapper,
@Autowired
private
DailyMembersOrderStatisticsBiz
membersStatisticsBiz
;
@Scheduled
(
cron
=
"0 0
2
* * ?"
)
@Scheduled
(
cron
=
"0 0
0/1
* * ?"
)
public
boolean
statisticalOrder
(){
boolean
vehicleFlag
=
vehicleStatisticsBiz
.
saveDailyVehicleOrderRecord
();
boolean
travelFlag
=
travelStatisticsBiz
.
saveDailyTravelOrderRecord
();
boolean
membersFlag
=
membersStatisticsBiz
.
saveDailyMembersOrderRecord
();
if
(
vehicleFlag
&&
travelFlag
&&
membersFlag
){
log
.
info
(
"----statisticalOrder:成功-----"
);
return
true
;
}
log
.
info
(
"
----statisticalOrder:失败-----
"
);
log
.
info
(
"
statisticalOrder:失败!(vehicleFlag="
+
vehicleFlag
+
"/travelFlag="
+
travelFlag
+
"membersFlag="
+
membersFlag
+
")
"
);
return
false
;
}
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/DailyTravelOrderStatisticsBiz.java
View file @
803ba30a
...
...
@@ -7,12 +7,10 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.xxfc.platform.order.contant.enumerate.AccountTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.OrderTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.RefundTypeEnum
;
import
com.xxfc.platform.order.entity.DailyTravelOrderStatistics
;
import
com.xxfc.platform.order.entity.OrderAccount
;
import
com.xxfc.platform.order.entity.OrderStatistics
;
import
com.xxfc.platform.order.entity.*
;
import
com.xxfc.platform.order.mapper.DailyTravelOrderStatisticsMapper
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDTO
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDeduction
;
...
...
@@ -27,6 +25,7 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
tk.mybatis.mapper.entity.Example
;
import
tk.mybatis.mapper.weekend.WeekendSqls
;
import
java.math.BigDecimal
;
import
java.util.*
;
...
...
@@ -113,19 +112,47 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
try
{
//获取每日订单统计
List
<
DailyTravelOrderStatistics
>
orderStatistics
=
getDailyTravelOrderStatistics
();
log
.
info
(
"Travel:统计完成"
);
if
(
CollectionUtils
.
isNotEmpty
(
orderStatistics
))
{
for
(
DailyTravelOrderStatistics
orderStatistic
:
orderStatistics
)
{
//保存统计
insertSelectiveRe
(
orderStatistic
);
if
(
JudgmentOfExistence
(
orderStatistic
))
{
insertSelectiveRe
(
orderStatistic
);
}
else
{
mapper
.
updateByExampleSelective
(
orderStatistic
,
Example
.
builder
(
DailyTravelOrderStatistics
.
class
)
.
where
(
WeekendSqls
.<
DailyTravelOrderStatistics
>
custom
()
.
andEqualTo
(
DailyTravelOrderStatistics:
:
getOneDay
,
orderStatistic
.
getOneDay
())
.
andEqualTo
(
DailyTravelOrderStatistics:
:
getBranchCompanyId
,
orderStatistic
.
getBranchCompanyId
()))
.
build
());
}
}
}
log
.
info
(
"Travel:保存成功"
);
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
log
.
error
(
"Travel:"
+
e
.
getMessage
());
return
false
;
}
}
/**
* 添加前查询是否存在这条数据
* @param orderStatistic
* @return
*/
private
boolean
JudgmentOfExistence
(
DailyTravelOrderStatistics
orderStatistic
)
{
List
<
DailyTravelOrderStatistics
>
statistics
=
selectByExample
(
Example
.
builder
(
DailyTravelOrderStatistics
.
class
)
.
where
(
WeekendSqls
.<
DailyTravelOrderStatistics
>
custom
()
.
andEqualTo
(
DailyTravelOrderStatistics:
:
getOneDay
,
orderStatistic
.
getOneDay
())
.
andEqualTo
(
DailyTravelOrderStatistics:
:
getBranchCompanyId
,
orderStatistic
.
getBranchCompanyId
()))
.
build
());
if
(
CollectionUtils
.
isNotEmpty
(
statistics
))
{
return
false
;
}
return
true
;
}
private
List
<
DailyTravelOrderStatistics
>
getDailyTravelOrderStatistics
()
{
//获取当天所有订单账目
List
<
OrderAccountDTO
>
accountList
=
accountBiz
.
getOrderAccountByOrderType
(
OrderTypeEnum
.
TOUR
.
getCode
(),
day
);
...
...
@@ -154,7 +181,7 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
List
<
OrderAccountDTO
>
list
=
typeMap
.
get
(
orderAccountDTO
.
getAccountType
());
if
(
list
==
null
)
{
list
=
new
ArrayList
<>();
companyIdm
ap
.
put
(
orderAccountDTO
.
getAccountType
(),
list
);
typeM
ap
.
put
(
orderAccountDTO
.
getAccountType
(),
list
);
}
list
.
add
(
orderAccountDTO
);
}
...
...
@@ -194,7 +221,7 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
private
void
refundAndDeductions
(
Map
<
Integer
,
List
<
OrderAccountDTO
>>
map
,
DailyTravelOrderStatistics
orderStatistics
)
{
ArrayList
<
OrderAccountDTO
>
arrayList
=
Lists
.
newArrayList
();
for
(
Integer
key
:
map
.
keySet
())
{
if
(!
key
.
equals
(
RefundTypeEnum
.
ORDER_FUND
.
getCode
()))
{
if
(!
key
.
equals
(
AccountTypeEnum
.
IN_ORDER_PAY
.
getCode
()))
{
arrayList
.
addAll
(
map
.
get
(
key
));
}
}
...
...
@@ -207,10 +234,8 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
add
(
DeductionTypeEnum
.
VIOLATE_CANCEL
.
getCode
());
}});
orderStatistics
.
setDefaultMoney
(
bigDecimal
);
//订单退还总额
orderStatistics
.
setReturnGmv
(
orderStatistics
.
getGmv
().
subtract
(
bigDecimal
));
}
}
}
...
...
@@ -219,7 +244,7 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
private
DailyTravelOrderStatistics
getGmvAndSecurityDeposit
(
Map
<
Integer
,
List
<
OrderAccountDTO
>>
map
)
{
DailyTravelOrderStatistics
orderStatistics
=
new
DailyTravelOrderStatistics
();
List
<
OrderAccountDTO
>
orderAccountDTOS
=
map
.
get
(
RefundTypeEnum
.
ORDER_FUND
.
getCode
());
List
<
OrderAccountDTO
>
orderAccountDTOS
=
map
.
get
(
AccountTypeEnum
.
IN_ORDER_PAY
.
getCode
());
if
(
CollectionUtils
.
isNotEmpty
(
orderAccountDTOS
))
{
ArrayList
<
OrderAccountDetail
>
orderAccountDetails
=
getOrderAccountDetail
(
orderAccountDTOS
);
...
...
@@ -273,9 +298,7 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
*/
private
List
<
OrderAccountDeduction
>
gettDeductions
(
ArrayList
<
OrderAccountDetail
>
orderAccountDetails
)
{
ArrayList
<
OrderAccountDeduction
>
arrayList
=
Lists
.
newArrayList
();
for
(
OrderAccountDetail
orderAccountDetail
:
orderAccountDetails
)
{
arrayList
.
addAll
(
orderAccountDetail
.
getDeductions
());
}
orderAccountDetails
.
parallelStream
().
map
(
OrderAccountDetail:
:
getDeductions
).
forEach
(
e
->
arrayList
.
addAll
(
e
));
return
arrayList
;
}
...
...
@@ -283,14 +306,14 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
/**
* 根据type获取对应的金额总和
*
* @param
OrderAccountDeduction
* @param
list
* @param type 金额类型
* @return
*/
private
BigDecimal
get
(
List
<
OrderAccountDeduction
>
OrderAccountDeduction
,
List
<
Integer
>
type
)
{
return
OrderAccountDeduction
.
parallelStream
()
.
filter
(
el
->
el
.
getType
().
equals
(
type
))
.
map
(
com
.
xxfc
.
platform
.
order
.
pojo
.
account
.
OrderAccountDeduction
::
getAmount
)
private
BigDecimal
get
(
List
<
OrderAccountDeduction
>
list
,
List
<
Integer
>
type
)
{
return
list
.
parallelStream
()
.
filter
(
el
->
type
.
contains
(
el
.
getType
()
))
.
map
(
OrderAccountDeduction:
:
getAmount
)
.
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
}
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/DailyVehicleOrderStatisticsBiz.java
View file @
803ba30a
...
...
@@ -4,9 +4,10 @@ import cn.hutool.json.JSONUtil;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.xxfc.platform.order.contant.enumerate.AccountTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.OrderTypeEnum
;
import
com.xxfc.platform.order.
contant.enumerate.RefundTypeEnum
;
import
com.xxfc.platform.order.
entity.DailyOrderStatistics
;
import
com.xxfc.platform.order.entity.DailyVehicleOrderStatistics
;
import
com.xxfc.platform.order.entity.OrderAccount
;
import
com.xxfc.platform.order.entity.OrderStatistics
;
...
...
@@ -22,6 +23,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
tk.mybatis.mapper.common.example.UpdateByExampleSelectiveMapper
;
import
tk.mybatis.mapper.entity.Example
;
import
tk.mybatis.mapper.weekend.WeekendSqls
;
import
java.math.BigDecimal
;
import
java.util.*
;
...
...
@@ -207,15 +212,15 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
/**
* 根据type获取对应的金额总和
*
* @param
OrderAccountDeduction
* @param types
金额类型
* @param
list
* @param types 金额类型
* @return
*/
private
BigDecimal
get
(
List
<
OrderAccountDeduction
>
OrderAccountDeduction
,
List
<
Integer
>
types
)
{
return
OrderAccountDeduction
.
parallelStream
()
.
filter
(
el
->
types
.
contains
(
el
))
.
map
(
com
.
xxfc
.
platform
.
order
.
pojo
.
account
.
OrderAccountDeduction
::
getAmount
)
.
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
private
BigDecimal
get
(
List
<
OrderAccountDeduction
>
list
,
List
<
Integer
>
types
)
{
return
list
.
parallelStream
()
.
filter
(
el
->
types
.
contains
(
el
.
getType
()
))
.
map
(
OrderAccountDeduction:
:
getAmount
)
.
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
}
...
...
@@ -237,30 +242,55 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
/**
* 统计订单并保存到数据库当中
*
* @return
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
boolean
saveDailyVehicleOrderRecord
()
{
try
{
//获取每日订单统计
List
<
DailyVehicleOrderStatistics
>
orderStatistics
=
getDailyVehicleOrderRecord
();
log
.
info
(
"Vehicle:统计完成"
);
if
(
CollectionUtils
.
isNotEmpty
(
orderStatistics
))
{
for
(
DailyVehicleOrderStatistics
orderStatistic
:
orderStatistics
)
{
//保存统计
insertSelectiveRe
(
orderStatistic
);
if
(
JudgmentOfExistence
(
orderStatistic
))
{
insertSelectiveRe
(
orderStatistic
);
}
else
{
mapper
.
updateByExampleSelective
(
orderStatistic
,
Example
.
builder
(
DailyVehicleOrderStatistics
.
class
)
.
where
(
WeekendSqls
.<
DailyVehicleOrderStatistics
>
custom
()
.
andEqualTo
(
DailyVehicleOrderStatistics:
:
getOneDay
,
orderStatistic
.
getOneDay
())
.
andEqualTo
(
DailyVehicleOrderStatistics:
:
getBranchCompanyId
,
orderStatistic
.
getBranchCompanyId
()))
.
build
());
}
}
}
log
.
info
(
"Vehicle:保存成功"
);
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
log
.
error
(
"Vehicle:"
+
e
.
getMessage
());
return
false
;
}
}
private
boolean
JudgmentOfExistence
(
DailyVehicleOrderStatistics
orderStatistic
)
{
List
<
DailyVehicleOrderStatistics
>
statistics
=
selectByExample
(
Example
.
builder
(
DailyVehicleOrderStatistics
.
class
)
.
where
(
WeekendSqls
.<
DailyVehicleOrderStatistics
>
custom
()
.
andEqualTo
(
DailyVehicleOrderStatistics:
:
getOneDay
,
orderStatistic
.
getOneDay
())
.
andEqualTo
(
DailyVehicleOrderStatistics:
:
getBranchCompanyId
,
orderStatistic
.
getBranchCompanyId
()))
.
build
());
if
(
CollectionUtils
.
isNotEmpty
(
statistics
))
{
return
false
;
}
return
true
;
}
/**
* 获取所有分公司每日统计记录
*
* @return
*/
private
List
<
DailyVehicleOrderStatistics
>
getDailyVehicleOrderRecord
()
{
...
...
@@ -292,7 +322,7 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
List
<
OrderAccountDTO
>
list
=
typeMap
.
get
(
orderAccountDTO
.
getAccountType
());
if
(
list
==
null
)
{
list
=
new
ArrayList
<>();
companyIdm
ap
.
put
(
orderAccountDTO
.
getAccountType
(),
list
);
typeM
ap
.
put
(
orderAccountDTO
.
getAccountType
(),
list
);
}
list
.
add
(
orderAccountDTO
);
...
...
@@ -318,6 +348,7 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
/**
* 获取该分公司的统计数据
*
* @param map
* @return
*/
...
...
@@ -339,7 +370,7 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
private
void
refundAndDeductions
(
Map
<
Integer
,
List
<
OrderAccountDTO
>>
map
,
DailyVehicleOrderStatistics
orderStatistics
)
{
ArrayList
<
OrderAccountDTO
>
arrayList
=
Lists
.
newArrayList
();
for
(
Integer
key
:
map
.
keySet
())
{
if
(!
key
.
equals
(
RefundTypeEnum
.
ORDER_FUND
.
getCode
()))
{
if
(!
key
.
equals
(
AccountTypeEnum
.
IN_ORDER_PAY
.
getCode
()))
{
arrayList
.
addAll
(
map
.
get
(
key
));
}
}
...
...
@@ -354,22 +385,22 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
orderStatistics
.
setRefundSecurityDeposit
(
refundSecurityDeposit
);
List
<
OrderAccountDeduction
>
OrderAccountDeductions
=
gettDeductions
(
orderAccountDetail
);
//获取违章总额
orderStatistics
.
setViolationMoney
(
get
(
OrderAccountDeductions
,
new
ArrayList
<
Integer
>(){{
orderStatistics
.
setViolationMoney
(
get
(
OrderAccountDeductions
,
new
ArrayList
<
Integer
>()
{{
add
(
DeductionTypeEnum
.
VIOLATE_TRAFFIC_DEDUCT
.
getCode
());
}}));
//获取损坏赔偿总额
orderStatistics
.
setCompensation
(
get
(
OrderAccountDeductions
,
new
ArrayList
<
Integer
>()
{{
orderStatistics
.
setCompensation
(
get
(
OrderAccountDeductions
,
new
ArrayList
<
Integer
>()
{{
add
(
DeductionTypeEnum
.
DAMAGES
.
getCode
());
}}
));
}}));
//获取违约总额
ArrayList
<
Integer
>
types
=
Lists
.
newArrayList
();
types
.
add
(
DeductionTypeEnum
.
VIOLATE_ADVANCE
.
getCode
());
types
.
add
(
DeductionTypeEnum
.
VIOLATE_CANCEL
.
getCode
());
types
.
add
(
DeductionTypeEnum
.
VIOLATE_DELAY
.
getCode
());
orderStatistics
.
setDefaultMoney
(
get
(
OrderAccountDeductions
,
types
));
orderStatistics
.
setDefaultMoney
(
get
(
OrderAccountDeductions
,
types
));
//消费金额
orderStatistics
.
setTotalExpenditure
(
get
(
OrderAccountDeductions
,
new
ArrayList
<
Integer
>()
{{
orderStatistics
.
setTotalExpenditure
(
get
(
OrderAccountDeductions
,
new
ArrayList
<
Integer
>()
{{
add
(
DeductionTypeEnum
.
CONSUME
.
getCode
());
}}));
}
...
...
@@ -384,7 +415,7 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
*/
private
DailyVehicleOrderStatistics
getGmvAndSecurityDeposit
(
Map
<
Integer
,
List
<
OrderAccountDTO
>>
map
)
{
DailyVehicleOrderStatistics
orderStatistics
=
new
DailyVehicleOrderStatistics
();
List
<
OrderAccountDTO
>
orderAccountDTOS
=
map
.
get
(
RefundTypeEnum
.
ORDER_FUND
.
getCode
());
List
<
OrderAccountDTO
>
orderAccountDTOS
=
map
.
get
(
AccountTypeEnum
.
IN_ORDER_PAY
.
getCode
());
if
(
CollectionUtils
.
isNotEmpty
(
orderAccountDTOS
))
{
ArrayList
<
OrderAccountDetail
>
orderAccountDetails
=
getOrderAccountDetail
(
orderAccountDTOS
);
...
...
@@ -434,9 +465,7 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
*/
private
List
<
OrderAccountDeduction
>
gettDeductions
(
ArrayList
<
OrderAccountDetail
>
orderAccountDetails
)
{
ArrayList
<
OrderAccountDeduction
>
arrayList
=
Lists
.
newArrayList
();
for
(
OrderAccountDetail
orderAccountDetail
:
orderAccountDetails
)
{
arrayList
.
addAll
(
orderAccountDetail
.
getDeductions
());
}
orderAccountDetails
.
parallelStream
().
map
(
OrderAccountDetail:
:
getDeductions
).
forEach
(
e
->
arrayList
.
addAll
(
e
));
return
arrayList
;
}
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/OrderStatisticsBiz.java
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
biz
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.db.PageResult
;
import
com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.google.common.collect.Maps
;
import
com.xxfc.platform.order.Utils.OrderDateUtils
;
import
com.xxfc.platform.order.contant.enumerate.OrderInquiryType
;
import
com.xxfc.platform.order.entity.MembersOrder
;
import
com.xxfc.platform.order.entity.OrderStatistics
;
import
com.xxfc.platform.order.mapper.OrderStatisticsMapper
;
import
com.xxfc.platform.order.pojo.HomePageOrderData
;
import
com.xxfc.platform.order.pojo.Member
;
import
com.xxfc.platform.order.pojo.MembersOrderDto
;
import
com.xxfc.platform.order.pojo.OrderQuery
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.assertj.core.util.Lists
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Objects
;
import
java.text.ParseException
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -39,7 +53,7 @@ public class OrderStatisticsBiz extends BaseBiz<OrderStatisticsMapper, OrderStat
setAdditionalIndemnity
(
vehicle
.
getTotalCompensation
()
.
add
(
vehicle
.
getTotalForfeit
())
.
add
(
vehicle
.
getTotalDefaultMoney
())
.
add
(
vehicle
.
getTotalExpenditure
().
subtract
(
vehicle
.
getTotalGmv
()
.
subtract
(
vehicle
.
getTotalReturnGmv
()
)))
.
add
(
vehicle
.
getTotalExpenditure
().
subtract
(
vehicle
.
getTotalGmv
()
).
add
(
vehicle
.
getTotalReturnGmv
(
)))
);
}};
orderStatistics
.
add
(
data
);
...
...
@@ -63,15 +77,165 @@ public class OrderStatisticsBiz extends BaseBiz<OrderStatisticsMapper, OrderStat
}
result
.
setTotalOrders
(
orderStatistics
.
stream
().
map
(
HomePageOrderData:
:
getTotalOrders
).
filter
(
o
->
Objects
.
nonNull
(
o
)).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
));
result
.
setTotalOutstandingDeposit
(
orderStatistics
.
stream
().
map
(
HomePageOrderData:
:
getTotalOutstandingDeposit
).
filter
(
o
->
Objects
.
nonNull
(
o
)).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
));
result
.
set
TotalOrders
(
orderStatistics
.
stream
().
map
(
HomePageOrderData:
:
getTotalOrders
).
filter
(
o
->
Objects
.
nonNull
(
o
)).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
));
result
.
set
AdditionalIndemnity
(
orderStatistics
.
stream
().
map
(
HomePageOrderData:
:
getAdditionalIndemnity
).
filter
(
o
->
Objects
.
nonNull
(
o
)).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
));
result
.
setTotalOutstandingDeposit
(
orderStatistics
.
stream
().
map
(
HomePageOrderData:
:
getTotalOutstandingDeposit
).
filter
(
o
->
Objects
.
nonNull
(
o
)).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
));
return
result
;
}
result
.
setAdditionalIndemnity
(
orderStatistics
.
stream
().
map
(
HomePageOrderData:
:
getAdditionalIndemnity
).
filter
(
o
->
Objects
.
nonNull
(
o
)).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
));
public
List
<
MembersOrderDto
>
getMemberOrderStatistics
(
List
<
BaseUserMemberLevel
>
memberLevels
,
OrderQuery
query
)
throws
ParseException
{
List
<
MembersOrder
>
membersOrderList
=
membersBiz
.
getMemberOrderStatistics
(
query
);
//按每天分类
if
(
CollectionUtil
.
isEmpty
(
membersOrderList
))
{
return
null
;
}
//按每天分类
if
(
CollectionUtil
.
isEmpty
(
memberLevels
))
{
throw
new
BaseException
(
"获取不到会员信息"
);
}
//获取会员等级对应的名称
HashMap
<
Integer
,
String
>
map
=
Maps
.
newHashMap
();
for
(
BaseUserMemberLevel
memberLevel
:
memberLevels
)
{
map
.
put
(
memberLevel
.
getLevel
(),
memberLevel
.
getName
());
}
//按查询条件获取统计信息
ArrayList
<
MembersOrderDto
>
arrayList
=
Lists
.
newArrayList
();
if
(
OrderInquiryType
.
DAY
.
getCode
().
equals
(
query
.
getType
()))
{
for
(
MembersOrder
mb
:
membersOrderList
)
{
MembersOrderDto
mbdto
=
new
MembersOrderDto
();
//设置时间段
mbdto
.
setTimeSlot
(
mb
.
getPeriod
());
TotalPaymentAndMemberName
(
map
,
mb
,
mbdto
);
arrayList
.
add
(
mbdto
);
}
}
else
{
for
(
int
i
=
0
;
i
<
membersOrderList
.
size
();
i
++)
{
MembersOrder
mb
=
membersOrderList
.
get
(
i
);
String
period
=
mb
.
getPeriod
();
if
(
StringUtils
.
isBlank
(
period
))
{
continue
;
}
MembersOrderDto
mbdto
=
new
MembersOrderDto
();
String
[]
periods
=
mb
.
getPeriod
().
split
(
"-"
);
String
startDay
=
null
;
String
endDay
=
null
;
Integer
time
=
null
;
if
(
OrderInquiryType
.
WEEK
.
getCode
().
equals
(
query
.
getType
()))
{
startDay
=
OrderDateUtils
.
getStartDayOfWeekNo
(
Integer
.
parseInt
(
periods
[
0
]),
Integer
.
parseInt
(
periods
[
1
]));
endDay
=
OrderDateUtils
.
getEndDayOfWeekNo
(
Integer
.
parseInt
(
periods
[
0
]),
Integer
.
parseInt
(
periods
[
1
]));
//获取今天是今年的第几周
time
=
OrderDateUtils
.
getTodayOfWeek
();
}
Integer
thisYear
=
OrderDateUtils
.
getThisYear
();
if
(
OrderInquiryType
.
MONTH
.
getCode
().
equals
(
query
.
getType
()))
{
startDay
=
OrderDateUtils
.
getFirstDayOfMonth
(
Integer
.
parseInt
(
periods
[
0
]),
Integer
.
parseInt
(
periods
[
1
]));
endDay
=
OrderDateUtils
.
getLastDayOfMonth
(
Integer
.
parseInt
(
periods
[
0
]),
Integer
.
parseInt
(
periods
[
1
]));
//获取今天是今年的第几个月
time
=
OrderDateUtils
.
getTodayOfMonth
();
}
if
(
i
==
0
&&
query
.
getStartTime
()
!=
null
)
{
startDay
=
OrderDateUtils
.
timeStampConversionToString
(
query
.
getStartTime
());
}
//获取当前的年.周(年.月)小数
double
today
=
Double
.
parseDouble
(
thisYear
+
"."
+
time
);
if
(
i
==
(
membersOrderList
.
size
()
-
1
))
{
//查询到的最后一条数据年.周(年.月)小数
double
date
=
Double
.
parseDouble
(
Integer
.
parseInt
(
periods
[
0
])
+
"."
+
Integer
.
parseInt
(
periods
[
1
]));
if
(
date
==
today
)
{
endDay
=
OrderDateUtils
.
timeStampConversionToString
(
System
.
currentTimeMillis
());
}
else
if
(
date
<
today
)
{
//获取最后一条数据,周末日期
Long
end
=
OrderDateUtils
.
ConvertingStringsToTimestamps
(
endDay
);
//查询的结束日期
Long
endTime
=
query
.
getEndTime
();
if
(
endTime
!=
null
&&
end
>
endTime
)
{
endDay
=
OrderDateUtils
.
timeStampConversionToString
(
query
.
getEndTime
());
}
}
}
if
(
StringUtils
.
isNotBlank
(
startDay
)
&&
StringUtils
.
isNotBlank
(
endDay
))
{
mbdto
.
setTimeSlot
(
startDay
+
"~"
+
endDay
);
}
else
{
mbdto
.
setTimeSlot
(
""
);
}
TotalPaymentAndMemberName
(
map
,
mb
,
mbdto
);
arrayList
.
add
(
mbdto
);
}
}
//进行分页处理
return
arrayList
;
// return pagingProcessing(query, arrayList);
return
result
;
}
private
PageResult
pagingProcessing
(
OrderQuery
query
,
ArrayList
<
MembersOrderDto
>
arrayList
)
{
PageResult
pageResult
=
(
PageResult
)
arrayList
;
pageResult
.
setPage
(
query
.
getPage
());
pageResult
.
setPageSize
(
query
.
getLimit
());
return
pageResult
;
}
private
void
TotalPaymentAndMemberName
(
HashMap
<
Integer
,
String
>
map
,
MembersOrder
mb
,
MembersOrderDto
mbdto
)
{
BigDecimal
totalPayment
=
BigDecimal
.
ZERO
;
List
<
Member
>
members
=
mb
.
getMembers
();
//设置时间段购买会员总金额和不同的会员名称
if
(
CollectionUtil
.
isNotEmpty
(
members
))
{
mbdto
.
setMembers
(
members
);
for
(
Member
member
:
members
)
{
member
.
setMemberName
(
map
.
get
(
member
.
getLevel
()));
totalPayment
=
totalPayment
.
add
(
member
.
getAmount
()
==
null
?
BigDecimal
.
ZERO
:
member
.
getAmount
());
}
}
mbdto
.
setTotalPayment
(
totalPayment
);
}
public
Object
downloadExcel
()
{
return
null
;
}
public
List
<
HashMap
<
Object
,
Object
>>
getRows
(
List
<
MembersOrderDto
>
list
,
List
<
BaseUserMemberLevel
>
memberLevels
)
{
ArrayList
<
HashMap
<
Object
,
Object
>>
rows
=
Lists
.
newArrayList
();
for
(
MembersOrderDto
membersOrderDto
:
list
)
{
if
(
CollectionUtils
.
isEmpty
(
membersOrderDto
.
getMembers
()))
{
continue
;
}
HashMap
<
Object
,
Object
>
map
=
Maps
.
newLinkedHashMap
();
map
.
put
(
"时间"
,
membersOrderDto
.
getTimeSlot
());
for
(
BaseUserMemberLevel
memberLevel
:
memberLevels
)
{
setMap
(
membersOrderDto
,
map
,
memberLevel
);
}
map
.
put
(
"总支付金额"
,
membersOrderDto
.
getTotalPayment
());
rows
.
add
(
map
);
}
return
rows
;
}
private
void
setMap
(
MembersOrderDto
membersOrderDto
,
HashMap
<
Object
,
Object
>
map
,
BaseUserMemberLevel
memberLevel
)
{
List
<
Member
>
collect
=
membersOrderDto
.
getMembers
().
parallelStream
().
filter
(
el
->
el
.
getLevel
().
equals
(
memberLevel
.
getLevel
())).
collect
(
Collectors
.
toList
());
int
number
=
0
;
BigDecimal
amount
=
BigDecimal
.
ZERO
;
if
(
CollectionUtils
.
isNotEmpty
(
collect
))
{
number
=
collect
.
get
(
0
).
getNumber
();
amount
=
collect
.
get
(
0
).
getAmount
();
}
map
.
put
(
memberLevel
.
getName
()
+
"购买量"
,
number
);
map
.
put
(
"支付金额("
+
memberLevel
.
getName
()
+
")"
,
amount
);
}
}
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/mapper/DailyMembersOrderStatisticsMapper.java
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
mapper
;
import
com.xxfc.platform.order.entity.DailyMembersOrderStatistics
;
import
com.xxfc.platform.order.entity.MembersOrder
;
import
com.xxfc.platform.order.entity.OrderStatistics
;
import
com.xxfc.platform.order.pojo.OrderQuery
;
import
org.apache.ibatis.annotations.Param
;
import
tk.mybatis.mapper.common.Mapper
;
...
...
@@ -18,4 +20,7 @@ public interface DailyMembersOrderStatisticsMapper extends Mapper<DailyMembersOr
OrderStatistics
monthOrderTotal
(
@Param
(
"companyId"
)
Integer
companyId
);
List
<
MembersOrder
>
getMemberOrderStatistics
(
OrderQuery
query
);
}
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/rest/background/OrderStatisticsController.java
View file @
803ba30a
package
com
.
xxfc
.
platform
.
order
.
rest
.
background
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.io.IoUtil
;
import
cn.hutool.poi.excel.ExcelUtil
;
import
cn.hutool.poi.excel.ExcelWriter
;
import
com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel
;
import
com.github.wxiaoqi.security.admin.feign.UserFeign
;
import
com.github.wxiaoqi.security.admin.feign.dto.UserDTO
;
import
com.github.wxiaoqi.security.auth.client.config.UserAuthConfig
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.rest.BaseController
;
import
com.github.wxiaoqi.security.common.util.Query
;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.google.common.collect.Lists
;
import
com.xxfc.platform.order.biz.DailyMembersOrderStatisticsBiz
;
import
com.xxfc.platform.order.biz.DailyTravelOrderStatisticsBiz
;
import
com.xxfc.platform.order.biz.DailyVehicleOrderStatisticsBiz
;
import
com.xxfc.platform.order.biz.OrderStatisticsBiz
;
import
com.xxfc.platform.order.entity.OrderStatistics
;
import
com.xxfc.platform.order.pojo.HomePageOrderData
;
import
com.xxfc.platform.order.pojo.MembersOrderDto
;
import
com.xxfc.platform.order.pojo.OrderQuery
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.lang.reflect.Array
;
import
java.text.DateFormat
;
import
java.text.ParseException
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author Administrator
...
...
@@ -33,13 +52,16 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
@Autowired
private
UserAuthConfig
userAuthConfig
;
@Autowired
private
HttpServletResponse
response
;
/**
* 租车订单
*/
private
final
Integer
TYPE_VEHICLE
=
1
;
/**
* 旅游订单
* 旅游订单
*/
private
final
Integer
TYPE_TOUR
=
2
;
...
...
@@ -56,7 +78,7 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
/**
* 数据权限
*/
private
final
Integer
DATA_AUTHORITY
=
1
;
private
final
Integer
DATA_AUTHORITY
=
1
;
@Autowired
private
DailyVehicleOrderStatisticsBiz
vehicleBiz
;
...
...
@@ -68,6 +90,7 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
@Autowired
private
DailyMembersOrderStatisticsBiz
membersBiz
;
@ApiOperation
(
"获取订单统计数据"
)
@GetMapping
(
"/findAll/{type}"
)
public
ObjectRestResponse
findAll
(
@PathVariable
Integer
type
)
{
...
...
@@ -83,13 +106,13 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
UserDTO
user
=
userDTOObjectRestResponse
.
getData
();
Integer
companyId
=
user
.
getCompanyId
();
if
(
DATA_AUTHORITY
.
equals
(
user
.
getDataAll
())){
companyId
=
null
;
if
(
DATA_AUTHORITY
.
equals
(
user
.
getDataAll
()))
{
companyId
=
null
;
}
if
(
TYPE_VEHICLE
.
equals
(
type
))
{
OrderStatistics
vehicle
=
vehicleBiz
.
findAll
(
companyId
);
return
ObjectRestResponse
.
succ
(
new
HomePageOrderData
(){{
return
ObjectRestResponse
.
succ
(
new
HomePageOrderData
()
{{
setTotalOrders
(
vehicle
.
getTotalGmv
().
subtract
(
vehicle
.
getTotalReturnGmv
()));
setAdditionalIndemnity
(
vehicle
.
getTotalCompensation
()
.
add
(
vehicle
.
getTotalForfeit
())
...
...
@@ -100,14 +123,14 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
}
if
(
TYPE_TOUR
.
equals
(
type
))
{
OrderStatistics
tour
=
TravelBiz
.
findAll
(
companyId
);
return
ObjectRestResponse
.
succ
(
new
HomePageOrderData
(){{
return
ObjectRestResponse
.
succ
(
new
HomePageOrderData
()
{{
setTotalOrders
(
tour
.
getTotalGmv
().
subtract
(
tour
.
getTotalReturnGmv
()));
setAdditionalIndemnity
(
tour
.
getTotalDefaultMoney
());
}});
}
if
(
TYPE_MEMBER
.
equals
(
type
))
{
OrderStatistics
member
=
membersBiz
.
findAll
(
companyId
);
return
ObjectRestResponse
.
succ
(
new
HomePageOrderData
(){{
return
ObjectRestResponse
.
succ
(
new
HomePageOrderData
()
{{
setTotalOrders
(
member
.
getTotalGmv
());
}});
...
...
@@ -125,5 +148,43 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
}
@PostMapping
(
"/order"
)
@ApiOperation
(
value
=
"会员统计"
)
public
ObjectRestResponse
<
List
<
MembersOrderDto
>>
getMemberOrderStatisticsData
(
@RequestBody
OrderQuery
query
)
throws
ParseException
{
//获取会员等级信息
List
<
BaseUserMemberLevel
>
memberLevels
=
userFeign
.
levels
();
//获取会员订单统计信息
return
ObjectRestResponse
.
succ
(
baseBiz
.
getMemberOrderStatistics
(
memberLevels
,
query
));
}
@PostMapping
(
"/excel"
)
@ApiOperation
(
value
=
"下载excel表"
)
public
void
downloadExcel
(
@RequestBody
OrderQuery
query
)
throws
Exception
{
// 通过工具类创建writer,默认创建xls格式
ExcelWriter
writer
=
ExcelUtil
.
getWriter
(
true
);
List
<
BaseUserMemberLevel
>
memberLevels
=
userFeign
.
levels
();
List
<
MembersOrderDto
>
list
=
baseBiz
.
getMemberOrderStatistics
(
memberLevels
,
query
);
List
<
HashMap
<
Object
,
Object
>>
rows
=
baseBiz
.
getRows
(
list
,
memberLevels
);
// 一次性写出内容,使用默认样式,强制输出标题
writer
.
write
(
rows
,
true
);
//out为OutputStream,需要写出到的目标流
//response为HttpServletResponse对象
response
.
setContentType
(
"application/vnd.ms-excel;charset=utf-8"
);
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename=hwddtj.xls"
);
ServletOutputStream
out
=
response
.
getOutputStream
();
writer
.
flush
(
out
,
true
);
// 关闭writer,释放内存
writer
.
close
();
//此处记得关闭输出Servlet流
IoUtil
.
close
(
out
);
}
}
xx-order/xx-order-server/src/main/resources/Excel/会员订单统计.xlsx
0 → 100644
View file @
803ba30a
File added
xx-order/xx-order-server/src/main/resources/mapper/DailyMembersOrderStatisticsMapper.xml
View file @
803ba30a
...
...
@@ -38,4 +38,55 @@
<!-- DATE_FORMAT(one_day,'%Y-%c')=DATE_FORMAT(DATE_SUB(NOW(),interval 1 day),'%Y-%c')-->
<!-- </select>-->
<select
id=
"getMemberOrderStatistics"
parameterType=
"com.xxfc.platform.order.pojo.OrderQuery"
resultMap=
"order"
>
SELECT
<if
test=
"type==2"
>
DATE_FORMAT(date( FROM_UNIXTIME( a.account_time / 1000 ) ),'%x-%v') AS period,
</if>
<if
test=
"type==3"
>
DATE_FORMAT(date( FROM_UNIXTIME( a.account_time / 1000 ) ),'%Y-%m') AS period,
</if>
<if
test=
"type==1"
>
date( FROM_UNIXTIME( a.account_time / 1000 ) ) AS period,
</if>
count( a.id ) AS number,
SUM( a.account_amount ) AS amount,
d.member_level AS level
FROM
order_account a
LEFT JOIN base_order b ON a.order_id = b.id
LEFT JOIN order_member_detail d ON d.order_id = b.id
WHERE
a.account_status = 1
AND a.account_type = 101
AND b.type = 3
<if
test=
"startTime != null"
>
AND a.crt_time
>
= #{startTime}
</if>
<if
test=
"endTime != null"
>
AND a.crt_time
<
= #{endTime}
</if>
GROUP BY
<if
test=
"type==2"
>
DATE_FORMAT(date( FROM_UNIXTIME( a.account_time / 1000 ) ),'%x-%v'),
</if>
<if
test=
"type==3"
>
DATE_FORMAT(date( FROM_UNIXTIME( a.account_time / 1000 ) ),'%Y-%m'),
</if>
<if
test=
"type==1"
>
date( FROM_UNIXTIME( a.account_time / 1000 ) ),
</if>
d.member_level
</select>
<resultMap
id=
"order"
type=
"com.xxfc.platform.order.entity.MembersOrder"
>
<result
column=
"period"
property=
"period"
></result>
<collection
property=
"members"
ofType=
"com.xxfc.platform.order.pojo.Member"
>
<result
column=
"number"
property=
"number"
></result>
<result
column=
"amount"
property=
"amount"
></result>
<result
column=
"level"
property=
"level"
></result>
</collection>
</resultMap>
</mapper>
\ 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