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
009eff2f
Commit
009eff2f
authored
Nov 20, 2019
by
libin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
租车会员统计
parent
575abf90
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
197 additions
and
101 deletions
+197
-101
CollectorsUtil.java
...m/github/wxiaoqi/security/common/util/CollectorsUtil.java
+95
-0
ToBigDecimalFunction.java
...ub/wxiaoqi/security/common/util/ToBigDecimalFunction.java
+8
-0
StatisticsStatusEnum.java
...latform/order/contant/enumerate/StatisticsStatusEnum.java
+6
-0
OrderMemberReceivedStatistics.java
.../platform/order/entity/OrderMemberReceivedStatistics.java
+5
-13
OrderReceivedStatistics.java
...m/xxfc/platform/order/entity/OrderReceivedStatistics.java
+4
-11
OrderRentVehicleReceivedStatistics.java
...form/order/entity/OrderRentVehicleReceivedStatistics.java
+2
-10
OrderTourReceivedStatistics.java
...fc/platform/order/entity/OrderTourReceivedStatistics.java
+1
-11
CompanyAmountBo.java
...a/com/xxfc/platform/order/pojo/order/CompanyAmountBo.java
+23
-0
OrderMemberReceivedStatisticsBiz.java
.../platform/order/biz/OrderMemberReceivedStatisticsBiz.java
+24
-43
OrderRentVehicleReceivedStatisticsBiz.java
...form/order/biz/OrderRentVehicleReceivedStatisticsBiz.java
+28
-12
OrderMemberReceivedStatisticsMapper.java
...orm/order/mapper/OrderMemberReceivedStatisticsMapper.java
+1
-1
No files found.
ace-common/src/main/java/com/github/wxiaoqi/security/common/util/CollectorsUtil.java
0 → 100644
View file @
009eff2f
package
com
.
github
.
wxiaoqi
.
security
.
common
.
util
;
import
java.math.BigDecimal
;
import
java.util.Collections
;
import
java.util.Set
;
import
java.util.function.BiConsumer
;
import
java.util.function.BinaryOperator
;
import
java.util.function.Function
;
import
java.util.function.Supplier
;
import
java.util.stream.Collector
;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/20 19:59
*/
public
class
CollectorsUtil
{
static
final
Set
<
Collector
.
Characteristics
>
CH_NOID
=
Collections
.
emptySet
();
private
CollectorsUtil
()
{
}
@SuppressWarnings
(
"unchecked"
)
private
static
<
I
,
R
>
Function
<
I
,
R
>
castingIdentity
()
{
return
i
->
(
R
)
i
;
}
/**
* Simple implementation class for {@code Collector}.
*
* @param <T>
* the type of elements to be collected
* @param <R>
* the type of the result
*/
static
class
CollectorImpl
<
T
,
A
,
R
>
implements
Collector
<
T
,
A
,
R
>
{
private
final
Supplier
<
A
>
supplier
;
private
final
BiConsumer
<
A
,
T
>
accumulator
;
private
final
BinaryOperator
<
A
>
combiner
;
private
final
Function
<
A
,
R
>
finisher
;
private
final
Set
<
Characteristics
>
characteristics
;
CollectorImpl
(
Supplier
<
A
>
supplier
,
BiConsumer
<
A
,
T
>
accumulator
,
BinaryOperator
<
A
>
combiner
,
Function
<
A
,
R
>
finisher
,
Set
<
Characteristics
>
characteristics
)
{
this
.
supplier
=
supplier
;
this
.
accumulator
=
accumulator
;
this
.
combiner
=
combiner
;
this
.
finisher
=
finisher
;
this
.
characteristics
=
characteristics
;
}
CollectorImpl
(
Supplier
<
A
>
supplier
,
BiConsumer
<
A
,
T
>
accumulator
,
BinaryOperator
<
A
>
combiner
,
Set
<
Characteristics
>
characteristics
)
{
this
(
supplier
,
accumulator
,
combiner
,
castingIdentity
(),
characteristics
);
}
@Override
public
BiConsumer
<
A
,
T
>
accumulator
()
{
return
accumulator
;
}
@Override
public
Supplier
<
A
>
supplier
()
{
return
supplier
;
}
@Override
public
BinaryOperator
<
A
>
combiner
()
{
return
combiner
;
}
@Override
public
Function
<
A
,
R
>
finisher
()
{
return
finisher
;
}
@Override
public
Set
<
Characteristics
>
characteristics
()
{
return
characteristics
;
}
}
public
static
<
T
>
Collector
<
T
,
?,
BigDecimal
>
summingBigDecimal
(
ToBigDecimalFunction
<?
super
T
>
mapper
)
{
return
new
CollectorImpl
<>(()
->
new
BigDecimal
[
1
],
(
a
,
t
)
->
{
if
(
a
[
0
]
==
null
)
{
a
[
0
]
=
BigDecimal
.
ZERO
;
}
a
[
0
]
=
a
[
0
].
add
(
mapper
.
applyAsBigDecimal
(
t
));
},
(
a
,
b
)
->
{
a
[
0
]
=
a
[
0
].
add
(
b
[
0
]);
return
a
;
},
a
->
a
[
0
],
CH_NOID
);
}
}
ace-common/src/main/java/com/github/wxiaoqi/security/common/util/ToBigDecimalFunction.java
0 → 100644
View file @
009eff2f
package
com
.
github
.
wxiaoqi
.
security
.
common
.
util
;
import
java.math.BigDecimal
;
@FunctionalInterface
public
interface
ToBigDecimalFunction
<
T
>
{
BigDecimal
applyAsBigDecimal
(
T
value
);
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/contant/enumerate/StatisticsStatusEnum.java
View file @
009eff2f
...
@@ -24,6 +24,8 @@ public enum StatisticsStatusEnum {
...
@@ -24,6 +24,8 @@ public enum StatisticsStatusEnum {
public
static
final
int
ORDER_TOUR_TYPE
=
2
;
public
static
final
int
ORDER_TOUR_TYPE
=
2
;
public
static
final
String
UN_PAY_STATE
=
"0"
;
public
static
final
String
UN_PAY_STATE
=
"0"
;
public
static
final
int
NO_PAY_WAY
=
0
;
public
static
final
int
NO_PAY_WAY
=
0
;
public
static
final
int
NO_ORDER_ORIGN
=
99
;
public
static
final
int
NO_ORDER_STATE
=
99
;
public
static
final
Integer
DEFAULT_SQL_SIZE
=
1000
;
public
static
final
Integer
DEFAULT_SQL_SIZE
=
1000
;
public
static
List
<
String
>
orderStates
;
public
static
List
<
String
>
orderStates
;
...
@@ -69,6 +71,10 @@ public enum StatisticsStatusEnum {
...
@@ -69,6 +71,10 @@ public enum StatisticsStatusEnum {
return
stateGroupList
;
return
stateGroupList
;
}
}
public
static
Integer
getCompnayId
(
String
stateGroup
){
return
Integer
.
valueOf
(
stateGroup
.
split
(
"-"
)[
0
]);
}
public
static
<
T
extends
OrderReceivedStatisticsBase
>
T
wrapStatisticsObject
(
Date
date
,
String
stateGroup
,
T
targetObj
){
public
static
<
T
extends
OrderReceivedStatisticsBase
>
T
wrapStatisticsObject
(
Date
date
,
String
stateGroup
,
T
targetObj
){
DateTime
yesterday
=
DateTime
.
of
(
date
);
DateTime
yesterday
=
DateTime
.
of
(
date
);
String
year
=
String
.
valueOf
(
yesterday
.
getField
(
DateField
.
YEAR
));
String
year
=
String
.
valueOf
(
yesterday
.
getField
(
DateField
.
YEAR
));
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/OrderMemberReceivedStatistics.java
View file @
009eff2f
package
com
.
xxfc
.
platform
.
order
.
entity
;
package
com
.
xxfc
.
platform
.
order
.
entity
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
javax.persistence.*
;
import
cn.hutool.core.clone.CloneSupport
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
import
javax.persistence.Column
;
import
javax.persistence.Table
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
/**
/**
* 会员订单统计
* 会员订单统计
...
@@ -22,13 +21,6 @@ import lombok.Data;
...
@@ -22,13 +21,6 @@ import lombok.Data;
public
class
OrderMemberReceivedStatistics
extends
OrderReceivedStatisticsBase
implements
Serializable
{
public
class
OrderMemberReceivedStatistics
extends
OrderReceivedStatisticsBase
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
/**
*
*/
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
,
generator
=
"JDBC"
)
@ApiModelProperty
(
""
)
protected
Long
id
;
/**
/**
* 普通会员订单总额
* 普通会员订单总额
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/OrderReceivedStatistics.java
View file @
009eff2f
package
com
.
xxfc
.
platform
.
order
.
entity
;
package
com
.
xxfc
.
platform
.
order
.
entity
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
javax.persistence.*
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
import
javax.persistence.Column
;
import
javax.persistence.Table
;
import
java.io.Serializable
;
/**
/**
* 全部订单统计
* 全部订单统计
...
@@ -19,13 +19,6 @@ import lombok.Data;
...
@@ -19,13 +19,6 @@ import lombok.Data;
@Table
(
name
=
"order_received_statistics"
)
@Table
(
name
=
"order_received_statistics"
)
public
class
OrderReceivedStatistics
extends
OrderReceivedStatisticsBase
implements
Serializable
{
public
class
OrderReceivedStatistics
extends
OrderReceivedStatisticsBase
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
/**
*
*/
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
,
generator
=
"JDBC"
)
@ApiModelProperty
(
""
)
protected
Long
id
;
/**
/**
* 订单总量
* 订单总量
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/OrderRentVehicleReceivedStatistics.java
View file @
009eff2f
...
@@ -3,9 +3,9 @@ package com.xxfc.platform.order.entity;
...
@@ -3,9 +3,9 @@ package com.xxfc.platform.order.entity;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
import
javax.persistence.*
;
import
javax.persistence.Column
;
import
javax.persistence.Table
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
/**
/**
...
@@ -20,14 +20,6 @@ import java.math.BigDecimal;
...
@@ -20,14 +20,6 @@ import java.math.BigDecimal;
public
class
OrderRentVehicleReceivedStatistics
extends
OrderReceivedStatisticsBase
implements
Serializable
{
public
class
OrderRentVehicleReceivedStatistics
extends
OrderReceivedStatisticsBase
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
/**
*
*/
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
,
generator
=
"JDBC"
)
@ApiModelProperty
(
""
)
protected
Long
id
;
/**
/**
* 订单总量
* 订单总量
*/
*/
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/OrderTourReceivedStatistics.java
View file @
009eff2f
package
com
.
xxfc
.
platform
.
order
.
entity
;
package
com
.
xxfc
.
platform
.
order
.
entity
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
import
javax.persistence.
*
;
import
javax.persistence.
Table
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
/**
...
@@ -20,13 +18,5 @@ import java.util.Date;
...
@@ -20,13 +18,5 @@ import java.util.Date;
public
class
OrderTourReceivedStatistics
extends
OrderReceivedStatisticsBase
implements
Serializable
{
public
class
OrderTourReceivedStatistics
extends
OrderReceivedStatisticsBase
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
/**
*
*/
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
,
generator
=
"JDBC"
)
@ApiModelProperty
(
""
)
protected
Long
id
;
}
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/order/CompanyAmountBo.java
0 → 100644
View file @
009eff2f
package
com
.
xxfc
.
platform
.
order
.
pojo
.
order
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/20 19:11
*/
@Data
@Builder
(
toBuilder
=
true
)
@AllArgsConstructor
@NoArgsConstructor
public
class
CompanyAmountBo
{
private
Integer
companyId
;
private
BigDecimal
amount
;
}
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/OrderMemberReceivedStatisticsBiz.java
View file @
009eff2f
...
@@ -3,7 +3,7 @@ package com.xxfc.platform.order.biz;
...
@@ -3,7 +3,7 @@ package com.xxfc.platform.order.biz;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.enumconstant.LevelEnum
;
import
com.github.wxiaoqi.security.common.enumconstant.LevelEnum
;
import
com.g
oogle.common.collect.Lists
;
import
com.g
ithub.wxiaoqi.security.common.util.CollectorsUtil
;
import
com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum
;
import
com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum
;
import
com.xxfc.platform.order.entity.OrderMemberReceivedStatistics
;
import
com.xxfc.platform.order.entity.OrderMemberReceivedStatistics
;
import
com.xxfc.platform.order.mapper.OrderMemberReceivedStatisticsMapper
;
import
com.xxfc.platform.order.mapper.OrderMemberReceivedStatisticsMapper
;
...
@@ -11,6 +11,7 @@ import com.xxfc.platform.order.pojo.account.OrderAccountBo;
...
@@ -11,6 +11,7 @@ import com.xxfc.platform.order.pojo.account.OrderAccountBo;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.order.pojo.dto.OrderDTO
;
import
com.xxfc.platform.order.pojo.dto.OrderDTO
;
import
com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO
;
import
com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO
;
import
com.xxfc.platform.order.pojo.order.CompanyAmountBo
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -56,7 +57,8 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
...
@@ -56,7 +57,8 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
public
void
orderMemberReceivedStatistics
(
Date
startDate
,
Date
endDate
)
{
public
void
orderMemberReceivedStatistics
(
Date
startDate
,
Date
endDate
)
{
List
<
OrderMemberReceivedStatistics
>
orderMemberReceivedStatisticsList
=
new
ArrayList
<>(
18
);
List
<
OrderMemberReceivedStatistics
>
orderMemberReceivedStatisticsList
=
new
ArrayList
<>(
18
);
List
<
String
>
stisticsActiveState
=
new
ArrayList
<>();
List
<
String
>
stisticsActiveState
=
new
ArrayList
<>();
BigDecimal
globalTotalAmount
=
BigDecimal
.
ZERO
;
//公司的收入与支出 ---》无状态
List
<
CompanyAmountBo
>
companyAmoutList
=
new
ArrayList
<>();
//根据时间范围查询出会员单
//根据时间范围查询出会员单
List
<
OrderDTO
>
orders
=
baseOrderBiz
.
selectOrdersByTypeAndTime
(
Arrays
.
asList
(
StatisticsStatusEnum
.
ORDER_MEMBER_TYPE
),
startDate
,
endDate
);
List
<
OrderDTO
>
orders
=
baseOrderBiz
.
selectOrdersByTypeAndTime
(
Arrays
.
asList
(
StatisticsStatusEnum
.
ORDER_MEMBER_TYPE
),
startDate
,
endDate
);
...
@@ -105,7 +107,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
...
@@ -105,7 +107,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
}
}
}
}
}
}
//黄金
//黄金
List
<
OrderAccountBo
>
goldOrderAccountBos
=
orderMemberLevelMap
.
get
(
LevelEnum
.
GOLD
);
List
<
OrderAccountBo
>
goldOrderAccountBos
=
orderMemberLevelMap
.
get
(
LevelEnum
.
GOLD
);
if
(
CollectionUtils
.
isNotEmpty
(
goldOrderAccountBos
))
{
if
(
CollectionUtils
.
isNotEmpty
(
goldOrderAccountBos
))
{
...
@@ -146,19 +147,28 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
...
@@ -146,19 +147,28 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
orderMemberReceivedStatistics
.
setTotalDiamondQuantity
(
totalDiamondQuantity
);
orderMemberReceivedStatistics
.
setTotalDiamondQuantity
(
totalDiamondQuantity
);
orderMemberReceivedStatisticsList
.
add
(
orderMemberReceivedStatistics
);
orderMemberReceivedStatisticsList
.
add
(
orderMemberReceivedStatistics
);
}
else
{
}
else
{
globalTotalAmount
.
add
(
generaTotalAmount
);
BigDecimal
totalAmount
=
generaTotalAmount
.
add
(
generaTotalAmount
).
add
(
goldTotalAmount
).
add
(
diamondTotalAmount
).
subtract
(
generalTotalRefundAmount
).
subtract
(
goldTotalRefundAmount
).
subtract
(
diamondTotalRefundAmount
);
globalTotalAmount
.
add
(
generalTotalRefundAmount
);
Integer
compnayId
=
StatisticsStatusEnum
.
getCompnayId
(
orderKey
);
globalTotalAmount
.
add
(
goldTotalAmount
);
CompanyAmountBo
companyAmountBo
=
CompanyAmountBo
.
builder
().
companyId
(
compnayId
).
amount
(
totalAmount
).
build
();
globalTotalAmount
.
add
(
goldTotalRefundAmount
);
companyAmoutList
.
add
(
companyAmountBo
);
globalTotalAmount
.
add
(
diamondTotalAmount
);
}
globalTotalAmount
.
add
(
diamondTotalRefundAmount
);
}
}
Map
<
Integer
,
BigDecimal
>
companyAmountMap
=
companyAmoutList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CompanyAmountBo:
:
getCompanyId
,
CollectorsUtil
.
summingBigDecimal
(
CompanyAmountBo:
:
getAmount
)));
Set
<
Map
.
Entry
<
Integer
,
BigDecimal
>>
companyAmountSet
=
companyAmountMap
.
entrySet
();
for
(
Map
.
Entry
<
Integer
,
BigDecimal
>
companyAmountEntry
:
companyAmountSet
)
{
String
stateGrp
=
String
.
format
(
"%d-%d-%d-%d"
,
companyAmountEntry
.
getKey
(),
StatisticsStatusEnum
.
NO_ORDER_ORIGN
,
StatisticsStatusEnum
.
NO_PAY_WAY
,
StatisticsStatusEnum
.
NO_ORDER_STATE
);
OrderMemberReceivedStatistics
orderMemberReceivedStatistics
=
StatisticsStatusEnum
.
wrapStatisticsObject
(
startDate
,
stateGrp
,
new
OrderMemberReceivedStatistics
());
orderMemberReceivedStatistics
.
setTotalAmount
(
companyAmountEntry
.
getValue
());
orderMemberReceivedStatisticsList
.
add
(
orderMemberReceivedStatistics
);
}
}
//未支付单
//未支付单
List
<
OrderMemberReceivedStatistics
>
noPayOrderMemberReceivedStatisticsList
=
createOrderMemberReceivedStatisticsList
(
startDate
,
stateGroupMap
.
get
(
Boolean
.
FALSE
));
List
<
OrderMemberReceivedStatistics
>
noPayOrderMemberReceivedStatisticsList
=
createOrderMemberReceivedStatisticsList
(
startDate
,
stateGroupMap
.
get
(
Boolean
.
FALSE
));
orderMemberReceivedStatisticsList
.
addAll
(
noPayOrderMemberReceivedStatisticsList
);
orderMemberReceivedStatisticsList
.
addAll
(
noPayOrderMemberReceivedStatisticsList
);
//创建剩余状态数据
//创建剩余状态数据
List
<
OrderMemberReceivedStatistics
>
otherStatisticsStateGroupList
=
createOtherStatisticsStateGroupList
(
startDate
,
stisticsActiveState
,
StatisticsStatusEnum
.
DEFAULT_COMPANY
,
globalTotalAmount
);
List
<
OrderMemberReceivedStatistics
>
otherStatisticsStateGroupList
=
createOtherStatisticsStateGroupList
(
startDate
,
stisticsActiveState
,
StatisticsStatusEnum
.
DEFAULT_COMPANY
);
orderMemberReceivedStatisticsList
.
addAll
(
otherStatisticsStateGroupList
);
orderMemberReceivedStatisticsList
.
addAll
(
otherStatisticsStateGroupList
);
//保存
//保存
insertMemberReceivedStatisticsBatch
(
orderMemberReceivedStatisticsList
);
insertMemberReceivedStatisticsBatch
(
orderMemberReceivedStatisticsList
);
...
@@ -218,34 +228,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
...
@@ -218,34 +228,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
return
orderMemberReceivedStatisticsList
;
return
orderMemberReceivedStatisticsList
;
}
}
/**
* @param orders 某种状态下的会员单
* @param levelEnum 会员等级
* @param orderMemberReceivedStatistics 会员统计对象
* @return
*/
private
OrderMemberReceivedStatistics
wrapOrderMemberReceivedStatistics
(
List
<
OrderDTO
>
orders
,
LevelEnum
levelEnum
,
OrderMemberReceivedStatistics
orderMemberReceivedStatistics
)
{
orders
=
CollectionUtils
.
isEmpty
(
orders
)
?
Collections
.
EMPTY_LIST
:
orders
;
BigDecimal
totalAmount
=
orders
.
stream
().
map
(
OrderDTO:
:
getRealAmount
).
reduce
(
BigDecimal
.
ZERO
,
(
x
,
y
)
->
x
.
add
(
y
));
switch
(
levelEnum
)
{
case
GENERAL:
orderMemberReceivedStatistics
.
setToalCommonAmmount
(
totalAmount
);
orderMemberReceivedStatistics
.
setTotalCommonQuantity
(
orders
.
size
());
break
;
case
GOLD:
orderMemberReceivedStatistics
.
setTotalGoldAmount
(
totalAmount
);
orderMemberReceivedStatistics
.
setTotalGoldQuantity
(
orders
.
size
());
break
;
case
DIAMOND:
orderMemberReceivedStatistics
.
setTotalDiamondAmmount
(
totalAmount
);
orderMemberReceivedStatistics
.
setTotalDiamondQuantity
(
orders
.
size
());
break
;
default
:
break
;
}
return
orderMemberReceivedStatistics
;
}
/**
/**
* 创建剩余状态数据
* 创建剩余状态数据
*
*
...
@@ -254,12 +236,12 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
...
@@ -254,12 +236,12 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
* @param companyId 公司 id
* @param companyId 公司 id
* @return
* @return
*/
*/
private
List
<
OrderMemberReceivedStatistics
>
createOtherStatisticsStateGroupList
(
Date
startDate
,
List
<
String
>
statisticsStateGroups
,
Integer
companyId
,
BigDecimal
totalAmount
)
{
private
List
<
OrderMemberReceivedStatistics
>
createOtherStatisticsStateGroupList
(
Date
startDate
,
List
<
String
>
statisticsStateGroups
,
Integer
companyId
)
{
List
<
OrderMemberReceivedStatistics
>
orderMemberReceivedStatisticsList
=
new
ArrayList
<>();
List
<
OrderMemberReceivedStatistics
>
orderMemberReceivedStatisticsList
=
new
ArrayList
<>();
//获取剩余状态组合
//获取剩余状态组合
List
<
String
>
otherStatisticsStateGroup
=
StatisticsStatusEnum
.
getOtherStatisticsStateGroup
(
Arrays
.
asList
(
companyId
),
statisticsStateGroups
);
List
<
String
>
otherStatisticsStateGroup
=
StatisticsStatusEnum
.
getOtherStatisticsStateGroup
(
Arrays
.
asList
(
companyId
),
statisticsStateGroups
);
//创建会员克隆统计对象
//创建会员克隆统计对象
OrderMemberReceivedStatistics
orderMemberReceivedStatistics
=
createDefaultOrderMemberReceivedStatistics
(
totalAmount
);
OrderMemberReceivedStatistics
orderMemberReceivedStatistics
=
createDefaultOrderMemberReceivedStatistics
();
//统计对象的生成
//统计对象的生成
otherStatisticsStateGroup
.
parallelStream
().
peek
(
stateGroup
->
{
otherStatisticsStateGroup
.
parallelStream
().
peek
(
stateGroup
->
{
OrderMemberReceivedStatistics
orderMemberReceivedStatisticsClone
=
StatisticsStatusEnum
.
wrapStatisticsObject
(
startDate
,
stateGroup
,
OrderMemberReceivedStatistics
orderMemberReceivedStatisticsClone
=
StatisticsStatusEnum
.
wrapStatisticsObject
(
startDate
,
stateGroup
,
...
@@ -274,9 +256,9 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
...
@@ -274,9 +256,9 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
*
*
* @return
* @return
*/
*/
private
OrderMemberReceivedStatistics
createDefaultOrderMemberReceivedStatistics
(
BigDecimal
totalAmount
)
{
private
OrderMemberReceivedStatistics
createDefaultOrderMemberReceivedStatistics
()
{
OrderMemberReceivedStatistics
orderMemberReceivedStatistics
=
new
OrderMemberReceivedStatistics
();
OrderMemberReceivedStatistics
orderMemberReceivedStatistics
=
new
OrderMemberReceivedStatistics
();
orderMemberReceivedStatistics
.
setTotalAmount
(
totalAmount
);
orderMemberReceivedStatistics
.
setTotalAmount
(
BigDecimal
.
ZERO
);
orderMemberReceivedStatistics
.
setTotalCommonQuantity
(
0
);
orderMemberReceivedStatistics
.
setTotalCommonQuantity
(
0
);
orderMemberReceivedStatistics
.
setToalCommonAmmount
(
BigDecimal
.
ZERO
);
orderMemberReceivedStatistics
.
setToalCommonAmmount
(
BigDecimal
.
ZERO
);
orderMemberReceivedStatistics
.
setTotalGoldQuantity
(
0
);
orderMemberReceivedStatistics
.
setTotalGoldQuantity
(
0
);
...
@@ -293,6 +275,5 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
...
@@ -293,6 +275,5 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
*/
*/
public
void
insertMemberReceivedStatisticsBatch
(
List
<
OrderMemberReceivedStatistics
>
orderMemberReceivedStatistics
)
{
public
void
insertMemberReceivedStatisticsBatch
(
List
<
OrderMemberReceivedStatistics
>
orderMemberReceivedStatistics
)
{
mapper
.
insertList
(
orderMemberReceivedStatistics
);
mapper
.
insertList
(
orderMemberReceivedStatistics
);
// mapper.inserMemberReceivedtList(orderMemberReceivedStatistics);
}
}
}
}
\ No newline at end of file
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/OrderRentVehicleReceivedStatisticsBiz.java
View file @
009eff2f
...
@@ -2,21 +2,26 @@ package com.xxfc.platform.order.biz;
...
@@ -2,21 +2,26 @@ package com.xxfc.platform.order.biz;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.util.CollectorsUtil
;
import
com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum
;
import
com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum
;
import
com.xxfc.platform.order.entity.OrderReceivedStatisticsBase
;
import
com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics
;
import
com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics
;
import
com.xxfc.platform.order.mapper.OrderRentVehicleReceivedStatisticsMapper
;
import
com.xxfc.platform.order.mapper.OrderRentVehicleReceivedStatisticsMapper
;
import
com.xxfc.platform.order.pojo.account.OrderAccountBo
;
import
com.xxfc.platform.order.pojo.account.OrderAccountBo
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.order.pojo.dto.OrderDTO
;
import
com.xxfc.platform.order.pojo.dto.OrderDTO
;
import
com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO
;
import
com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO
;
import
com.xxfc.platform.order.pojo.order.CompanyAmountBo
;
import
com.xxfc.platform.vehicle.feign.VehicleFeign
;
import
com.xxfc.platform.vehicle.feign.VehicleFeign
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.*
;
import
java.util.*
;
import
java.util.function.BinaryOperator
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -55,6 +60,8 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
...
@@ -55,6 +60,8 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
public
void
orderRentVehicleReceivedStatistics
(
Date
startDate
,
Date
endDate
)
{
public
void
orderRentVehicleReceivedStatistics
(
Date
startDate
,
Date
endDate
)
{
List
<
OrderRentVehicleReceivedStatistics
>
orderRentVehicleReceivedStatisticsList
=
new
ArrayList
<>();
List
<
OrderRentVehicleReceivedStatistics
>
orderRentVehicleReceivedStatisticsList
=
new
ArrayList
<>();
List
<
String
>
stisticsActiveState
=
new
ArrayList
<>();
List
<
String
>
stisticsActiveState
=
new
ArrayList
<>();
//公司的收入与支出 ---》无状态
List
<
CompanyAmountBo
>
companyAmoutList
=
new
ArrayList
<>();
//根据租车订单类型 时间查询
//根据租车订单类型 时间查询
List
<
OrderDTO
>
orderDTOS
=
baseOrderBiz
.
selectOrdersByTypeAndTime
(
Arrays
.
asList
(
StatisticsStatusEnum
.
ORDER_RENT_VEHICLE_TYPE
),
startDate
,
endDate
);
List
<
OrderDTO
>
orderDTOS
=
baseOrderBiz
.
selectOrdersByTypeAndTime
(
Arrays
.
asList
(
StatisticsStatusEnum
.
ORDER_RENT_VEHICLE_TYPE
),
startDate
,
endDate
);
...
@@ -78,8 +85,6 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
...
@@ -78,8 +85,6 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
x
.
getHasPay
()));
x
.
getHasPay
()));
}).
collect
(
Collectors
.
groupingBy
(
OrderAccountBo:
:
getStateGroup
,
Collectors
.
toList
()));
}).
collect
(
Collectors
.
groupingBy
(
OrderAccountBo:
:
getStateGroup
,
Collectors
.
toList
()));
BigDecimal
globalTotalAmount
=
BigDecimal
.
ZERO
;
//已经支付单
//已经支付单
Set
<
Map
.
Entry
<
String
,
List
<
OrderAccountBo
>>>
ordersSet
=
ordersMap
.
entrySet
();
Set
<
Map
.
Entry
<
String
,
List
<
OrderAccountBo
>>>
ordersSet
=
ordersMap
.
entrySet
();
for
(
Map
.
Entry
<
String
,
List
<
OrderAccountBo
>>
orderEntry
:
ordersSet
)
{
for
(
Map
.
Entry
<
String
,
List
<
OrderAccountBo
>>
orderEntry
:
ordersSet
)
{
...
@@ -97,15 +102,27 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
...
@@ -97,15 +102,27 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
refundAmount
.
add
(
accountDetailEntity
.
getOrderAmount
()).
add
(
accountDetailEntity
.
getDepositAmount
());
refundAmount
.
add
(
accountDetailEntity
.
getOrderAmount
()).
add
(
accountDetailEntity
.
getDepositAmount
());
}
}
}
}
boolean
flag
=
stateGroupMap
==
null
?
false
:
stateGroupMap
.
get
(
Boolean
.
TRUE
)
==
null
?
false
:
stateGroupMap
.
get
(
Boolean
.
TRUE
).
get
(
orderKey
)==
null
?
false
:
true
;
if
(
stisticsActiveState
.
contains
(
orderKey
)){
if
(
flag
){
OrderRentVehicleReceivedStatistics
orderRentVehicleReceivedStatistics
=
StatisticsStatusEnum
.
wrapStatisticsObject
(
startDate
,
orderKey
,
new
OrderRentVehicleReceivedStatistics
());
OrderRentVehicleReceivedStatistics
orderRentVehicleReceivedStatistics
=
StatisticsStatusEnum
.
wrapStatisticsObject
(
startDate
,
orderKey
,
new
OrderRentVehicleReceivedStatistics
());
orderRentVehicleReceivedStatistics
.
setTotalAmount
(
totalAmount
.
subtract
(
refundAmount
));
orderRentVehicleReceivedStatistics
.
setTotalAmount
(
totalAmount
.
subtract
(
refundAmount
));
orderRentVehicleReceivedStatistics
.
setTotalQuantity
(
stateGroupMap
.
get
(
Boolean
.
TRUE
).
get
(
orderKey
).
size
());
orderRentVehicleReceivedStatistics
.
setTotalQuantity
(
stateGroupMap
.
get
(
Boolean
.
TRUE
).
get
(
orderKey
).
size
());
orderRentVehicleReceivedStatisticsList
.
add
(
orderRentVehicleReceivedStatistics
);
orderRentVehicleReceivedStatisticsList
.
add
(
orderRentVehicleReceivedStatistics
);
}
else
{
Integer
compnayId
=
StatisticsStatusEnum
.
getCompnayId
(
orderKey
);
CompanyAmountBo
companyAmountBo
=
CompanyAmountBo
.
builder
().
companyId
(
compnayId
).
amount
(
totalAmount
.
subtract
(
refundAmount
)).
build
();
companyAmoutList
.
add
(
companyAmountBo
);
}
}
globalTotalAmount
.
add
(
totalAmount
.
subtract
(
refundAmount
));
}
Map
<
Integer
,
BigDecimal
>
companyAmountMap
=
companyAmoutList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CompanyAmountBo:
:
getCompanyId
,
CollectorsUtil
.
summingBigDecimal
(
CompanyAmountBo:
:
getAmount
)));
Set
<
Map
.
Entry
<
Integer
,
BigDecimal
>>
companyAmountSet
=
companyAmountMap
.
entrySet
();
for
(
Map
.
Entry
<
Integer
,
BigDecimal
>
companyAmountEntry
:
companyAmountSet
)
{
String
stateGrp
=
String
.
format
(
"%d-%d-%d-%d"
,
companyAmountEntry
.
getKey
(),
StatisticsStatusEnum
.
NO_ORDER_ORIGN
,
StatisticsStatusEnum
.
NO_PAY_WAY
,
StatisticsStatusEnum
.
NO_ORDER_STATE
);
OrderRentVehicleReceivedStatistics
orderRentVehicleReceivedStatistics
=
StatisticsStatusEnum
.
wrapStatisticsObject
(
startDate
,
stateGrp
,
new
OrderRentVehicleReceivedStatistics
());
orderRentVehicleReceivedStatistics
.
setTotalQuantity
(
0
);
orderRentVehicleReceivedStatistics
.
setTotalAmount
(
companyAmountEntry
.
getValue
());
orderRentVehicleReceivedStatisticsList
.
add
(
orderRentVehicleReceivedStatistics
);
}
}
//未支付单
//未支付单
...
@@ -115,7 +132,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
...
@@ -115,7 +132,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
//查询分公司ids
//查询分公司ids
List
<
Integer
>
companyIds
=
vehicleFeign
.
findCompanyIdsByAreaId
(
null
);
List
<
Integer
>
companyIds
=
vehicleFeign
.
findCompanyIdsByAreaId
(
null
);
//创建剩余状态组合的租车统计对象
//创建剩余状态组合的租车统计对象
List
<
OrderRentVehicleReceivedStatistics
>
otherStatisticsStateGroupList
=
createOtherStatisticsStateGroupList
(
startDate
,
globalTotalAmount
,
stisticsActiveState
,
companyIds
);
List
<
OrderRentVehicleReceivedStatistics
>
otherStatisticsStateGroupList
=
createOtherStatisticsStateGroupList
(
startDate
,
stisticsActiveState
,
companyIds
);
orderRentVehicleReceivedStatisticsList
.
addAll
(
otherStatisticsStateGroupList
);
orderRentVehicleReceivedStatisticsList
.
addAll
(
otherStatisticsStateGroupList
);
//保存
//保存
insertMemberReceivedStatisticsBatch
(
orderRentVehicleReceivedStatisticsList
);
insertMemberReceivedStatisticsBatch
(
orderRentVehicleReceivedStatisticsList
);
...
@@ -149,13 +166,11 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
...
@@ -149,13 +166,11 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
* 创建剩余状态数据
* 创建剩余状态数据
*
*
* @param startDate 时间
* @param startDate 时间
* @param totalAmount 订单状态
* @param statisticsStateGroups 状态组合 集合
* @param statisticsStateGroups 状态组合 集合
* @param companyIds 公司ids
* @param companyIds 公司ids
* @return
* @return
*/
*/
private
List
<
OrderRentVehicleReceivedStatistics
>
createOtherStatisticsStateGroupList
(
Date
startDate
,
private
List
<
OrderRentVehicleReceivedStatistics
>
createOtherStatisticsStateGroupList
(
Date
startDate
,
BigDecimal
totalAmount
,
List
<
String
>
statisticsStateGroups
,
List
<
String
>
statisticsStateGroups
,
List
<
Integer
>
companyIds
)
{
List
<
Integer
>
companyIds
)
{
...
@@ -165,13 +180,14 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
...
@@ -165,13 +180,14 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
//创建租车统计克隆对象
//创建租车统计克隆对象
OrderRentVehicleReceivedStatistics
orderRentVehicleReceivedStatistics
=
new
OrderRentVehicleReceivedStatistics
();
OrderRentVehicleReceivedStatistics
orderRentVehicleReceivedStatistics
=
new
OrderRentVehicleReceivedStatistics
();
//统计对象的生成
//统计对象的生成
otherStatisticsStateGroup
.
parallelS
tream
().
map
(
stateGroup
->
{
otherStatisticsStateGroup
.
s
tream
().
map
(
stateGroup
->
{
OrderRentVehicleReceivedStatistics
orderRentVehicleReceivedStatisticsClone
=
StatisticsStatusEnum
.
wrapStatisticsObject
(
startDate
,
stateGroup
,
ObjectUtil
.
cloneByStream
(
orderRentVehicleReceivedStatistics
));
OrderRentVehicleReceivedStatistics
orderRentVehicleReceivedStatisticsClone
=
StatisticsStatusEnum
.
wrapStatisticsObject
(
startDate
,
stateGroup
,
ObjectUtil
.
cloneByStream
(
orderRentVehicleReceivedStatistics
));
orderRentVehicleReceivedStatisticsClone
.
setTotalAmount
(
totalAmount
);
orderRentVehicleReceivedStatisticsClone
.
setTotalAmount
(
BigDecimal
.
ZERO
);
orderRentVehicleReceivedStatisticsClone
.
setTotalQuantity
(
0
);
orderRentVehicleReceivedStatisticsClone
.
setTotalQuantity
(
0
);
orderRentVehicleReceivedStatisticsList
.
add
(
orderRentVehicleReceivedStatisticsClone
);
orderRentVehicleReceivedStatisticsList
.
add
(
orderRentVehicleReceivedStatisticsClone
);
return
orderRentVehicleReceivedStatisticsClone
;
return
orderRentVehicleReceivedStatisticsClone
;
}).
count
();
}).
count
();
return
orderRentVehicleReceivedStatisticsList
;
return
orderRentVehicleReceivedStatisticsList
;
}
}
...
@@ -181,7 +197,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
...
@@ -181,7 +197,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
* @param orderRentVehicleReceivedStatistics
* @param orderRentVehicleReceivedStatistics
*/
*/
public
void
insertMemberReceivedStatisticsBatch
(
List
<
OrderRentVehicleReceivedStatistics
>
orderRentVehicleReceivedStatistics
)
{
public
void
insertMemberReceivedStatisticsBatch
(
List
<
OrderRentVehicleReceivedStatistics
>
orderRentVehicleReceivedStatistics
)
{
orderRentVehicleReceivedStatistics
.
sort
(
Comparator
.
comparing
(
OrderRentVehicleReceivedStatistics:
:
getCompanyId
));
int
orderSize
=
orderRentVehicleReceivedStatistics
.
size
();
int
orderSize
=
orderRentVehicleReceivedStatistics
.
size
();
int
sqlAdq
=
orderSize
/
StatisticsStatusEnum
.
DEFAULT_SQL_SIZE
;
int
sqlAdq
=
orderSize
/
StatisticsStatusEnum
.
DEFAULT_SQL_SIZE
;
int
sqlMod
=
orderSize
%
StatisticsStatusEnum
.
DEFAULT_SQL_SIZE
;
int
sqlMod
=
orderSize
%
StatisticsStatusEnum
.
DEFAULT_SQL_SIZE
;
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/mapper/OrderMemberReceivedStatisticsMapper.java
View file @
009eff2f
...
@@ -3,8 +3,8 @@ package com.xxfc.platform.order.mapper;
...
@@ -3,8 +3,8 @@ package com.xxfc.platform.order.mapper;
import
com.xxfc.platform.order.entity.OrderMemberReceivedStatistics
;
import
com.xxfc.platform.order.entity.OrderMemberReceivedStatistics
;
import
com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO
;
import
com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
import
tk.mybatis.mapper.additional.insert.InsertListMapper
;
import
tk.mybatis.mapper.common.Mapper
;
import
tk.mybatis.mapper.common.Mapper
;
import
tk.mybatis.mapper.common.special.InsertListMapper
;
import
java.util.List
;
import
java.util.List
;
...
...
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