Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gogirl-miniapp-backend
Overview
Overview
Details
Activity
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
huluobin
gogirl-miniapp-backend
Commits
27fc644d
Commit
27fc644d
authored
Apr 07, 2020
by
huluobin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改内部券免单券使用顺序
parent
6e6d878d
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
98 additions
and
77 deletions
+98
-77
MarketServiceImpl.java
...com/gogirl/application/market/impl/MarketServiceImpl.java
+95
-76
CouponCustomerRelevanceController.java
...rl/interfaces/user/CouponCustomerRelevanceController.java
+3
-1
No files found.
src/main/java/com/gogirl/application/market/impl/MarketServiceImpl.java
View file @
27fc644d
...
@@ -35,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
...
@@ -35,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.*
;
import
java.util.*
;
import
java.util.function.Consumer
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
@Service
@Service
...
@@ -464,6 +465,8 @@ public class MarketServiceImpl implements MarketService {
...
@@ -464,6 +465,8 @@ public class MarketServiceImpl implements MarketService {
});
});
}
}
//4、内部券
//4、内部券
if
(
ListUtil
.
isNotEmpty
(
innerCouponCustomerRelevanceServiceList
))
{
if
(
ListUtil
.
isNotEmpty
(
innerCouponCustomerRelevanceServiceList
))
{
//删除之前的内部券抵扣情况记录
//删除之前的内部券抵扣情况记录
...
@@ -471,85 +474,101 @@ public class MarketServiceImpl implements MarketService {
...
@@ -471,85 +474,101 @@ public class MarketServiceImpl implements MarketService {
.
eq
(
CouponOrderRelevance:
:
getOrderId
,
orderId
)
.
eq
(
CouponOrderRelevance:
:
getOrderId
,
orderId
)
.
in
(
CouponOrderRelevance:
:
getCouponCustomerRelevanceId
,
innerCouponCustomerRelevanceServiceList
.
stream
().
map
(
CouponCustomerRelevance:
:
getId
).
collect
(
Collectors
.
toList
())));
.
in
(
CouponOrderRelevance:
:
getCouponCustomerRelevanceId
,
innerCouponCustomerRelevanceServiceList
.
stream
().
map
(
CouponCustomerRelevance:
:
getId
).
collect
(
Collectors
.
toList
())));
innerCouponCustomerRelevanceServiceList
//免单券Id
.
forEach
(
couponCustomerRelevance
->
{
List
<
Integer
>
discountConfigListCouponId
=
discountConfigMapper
.
selectList
(
new
QueryWrapper
<>()).
stream
().
map
(
DiscountConfig:
:
getCouponId
).
filter
(
Objects:
:
nonNull
).
collect
(
Collectors
.
toList
());
//内部券能用的服务id
List
<
Integer
>
serveIds
=
couponCustomerRelevanceMapper
.
queryCouponCustomerServeRelevance
(
couponCustomerRelevance
.
getCouponId
());
//内部券计算函数
Consumer
<
CouponCustomerRelevance
>
couponCustomerRelevanceConsumer
=
couponCustomerRelevance
->
{
//内部券能用的服务id
List
<
Integer
>
serveIds
=
couponCustomerRelevanceMapper
.
queryCouponCustomerServeRelevance
(
couponCustomerRelevance
.
getCouponId
());
//作用的服务id
List
<
OrderServe
>
canUserOrderServeList
=
this
.
queryCanDiscount
(
orderManage
,
serveIds
,
couponCustomerRelevance
.
getCouponId
());
//打折订单项总支付金额
BigDecimal
total
=
canUserOrderServeList
.
stream
().
map
(
OrderServe:
:
getPayPrice
).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
if
(!
total
.
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
).
equals
(
BigDecimal
.
ZERO
.
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
)))
{
//卡券的总折扣金额
BigDecimal
totalCouponDiscount
=
couponCustomerRelevance
.
getDiscountAmount
();
//卡券总支付金额
BigDecimal
totalCouponPay
=
couponCustomerRelevance
.
getPayAmount
();
//计算参数(最后一个订单服务的折扣金额要用总折扣金额减 防止除法计算精度问题)
BigDecimal
discountCalc
=
BigDecimal
.
ZERO
;
//计算参数(最后一个订单服务的实际支付要用总实际支付金额减 防止除法计算精度问题)
BigDecimal
payCalc
=
BigDecimal
.
ZERO
;
for
(
OrderServe
orderServe
:
canUserOrderServeList
)
{
//每个服务的内部券抵扣金额
BigDecimal
discountAmount
=
orderServe
.
getPayPrice
().
multiply
(
totalCouponDiscount
).
divide
(
total
,
2
,
BigDecimal
.
ROUND_HALF_UP
);
//每个服务的卡券实际支付金额
BigDecimal
payAmount
=
orderServe
.
getPayPrice
().
multiply
(
totalCouponPay
).
divide
(
total
,
2
,
BigDecimal
.
ROUND_HALF_UP
);
//最后一个服务使用总额减法而不是除法
if
(
canUserOrderServeList
.
lastIndexOf
(
orderServe
)
==
canUserOrderServeList
.
size
()
-
1
)
{
discountAmount
=
totalCouponDiscount
.
subtract
(
discountCalc
);
payAmount
=
totalCouponPay
.
subtract
(
payCalc
);
}
//作用的服务id
BigDecimal
actualDiscountAmount
=
discountAmount
.
min
(
orderServe
.
getPayPrice
());
List
<
OrderServe
>
canUserOrderServeList
=
this
.
queryCanDiscount
(
orderManage
,
serveIds
,
couponCustomerRelevance
.
getCouponId
());
//卡券在订单服务上的抵扣情况
CouponOrderRelevance
couponOrderRelevance
=
CouponOrderRelevance
.
builder
()
//打折订单项总支付金额
.
discountAmount
(
actualDiscountAmount
)
BigDecimal
total
=
canUserOrderServeList
.
stream
().
map
(
OrderServe:
:
getPayPrice
).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
//卡券在这个服务上的实际支付金额
.
payForOrderServe
(
payAmount
)
if
(!
total
.
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
).
equals
(
BigDecimal
.
ZERO
.
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
)))
{
.
createTime
(
new
Date
())
//卡券的总折扣金额
.
orderServeId
(
orderServe
.
getId
())
BigDecimal
totalCouponDiscount
=
couponCustomerRelevance
.
getDiscountAmount
();
.
orderId
(
orderManage
.
getId
())
.
couponId
(
couponCustomerRelevance
.
getCouponId
())
//卡券总支付金额
.
couponCustomerRelevanceId
(
couponCustomerRelevance
.
getId
())
BigDecimal
totalCouponPay
=
couponCustomerRelevance
.
getPayAmount
();
.
confirmTime
(
new
Date
())
//计算参数(最后一个订单服务的折扣金额要用总折扣金额减 防止除法计算精度问题)
.
message
(
orderServe
.
getServeName
())
BigDecimal
discountCalc
=
BigDecimal
.
ZERO
;
.
customerId
(
orderManage
.
getOrderUser
())
//计算参数(最后一个订单服务的实际支付要用总实际支付金额减 防止除法计算精度问题)
.
status
(
2
)
BigDecimal
payCalc
=
BigDecimal
.
ZERO
;
.
build
();
for
(
OrderServe
orderServe
:
canUserOrderServeList
)
{
//如果计算业绩
if
(
couponCustomerRelevance
.
getIsCalcAchievement
()
==
1
)
{
//每个服务的内部券抵扣金额
couponOrderRelevance
.
setAchievement
(
couponCustomerRelevance
.
getPayAmount
());
BigDecimal
discountAmount
=
orderServe
.
getPayPrice
().
multiply
(
totalCouponDiscount
).
divide
(
total
,
2
,
BigDecimal
.
ROUND_HALF_UP
);
}
else
{
//每个服务的卡券实际支付金额
couponOrderRelevance
.
setAchievement
(
couponOrderRelevance
.
getDiscountAmount
());
BigDecimal
payAmount
=
orderServe
.
getPayPrice
().
multiply
(
totalCouponPay
).
divide
(
total
,
2
,
BigDecimal
.
ROUND_HALF_UP
);
//最后一个服务使用总额减法而不是除法
if
(
canUserOrderServeList
.
lastIndexOf
(
orderServe
)
==
canUserOrderServeList
.
size
()
-
1
)
{
discountAmount
=
totalCouponDiscount
.
subtract
(
discountCalc
);
payAmount
=
totalCouponPay
.
subtract
(
payCalc
);
}
BigDecimal
actualDiscountAmount
=
discountAmount
.
min
(
orderServe
.
getPayPrice
());
//卡券在订单服务上的抵扣情况
CouponOrderRelevance
couponOrderRelevance
=
CouponOrderRelevance
.
builder
()
.
discountAmount
(
actualDiscountAmount
)
//卡券在这个服务上的实际支付金额
.
payForOrderServe
(
payAmount
)
.
createTime
(
new
Date
())
.
orderServeId
(
orderServe
.
getId
())
.
orderId
(
orderManage
.
getId
())
.
couponId
(
couponCustomerRelevance
.
getCouponId
())
.
couponCustomerRelevanceId
(
couponCustomerRelevance
.
getId
())
.
confirmTime
(
new
Date
())
.
message
(
orderServe
.
getServeName
())
.
customerId
(
orderManage
.
getOrderUser
())
.
status
(
2
)
.
build
();
//如果计算业绩
if
(
couponCustomerRelevance
.
getIsCalcAchievement
()
==
1
)
{
couponOrderRelevance
.
setAchievement
(
couponCustomerRelevance
.
getPayAmount
());
}
else
{
couponOrderRelevance
.
setAchievement
(
couponOrderRelevance
.
getDiscountAmount
());
}
//保存卡券在订单服务上的使用情况
couponOrderRelevanceService
.
save
(
couponOrderRelevance
);
//免单券Id
List
<
Integer
>
discountConfigListCouponId
=
discountConfigMapper
.
selectList
(
new
QueryWrapper
<>()).
stream
().
map
(
DiscountConfig:
:
getCouponId
).
filter
(
Objects:
:
nonNull
).
collect
(
Collectors
.
toList
());
//如果不是免单券 业绩就要扣除实际折扣金额
if
(!
discountConfigListCouponId
.
contains
(
couponCustomerRelevance
.
getCouponId
()))
{
orderServe
.
setAchievement
(
orderServe
.
getAchievement
().
subtract
(
actualDiscountAmount
));
}
orderServe
.
addDiscountPrice
(
actualDiscountAmount
);
orderManage
.
addDiscountPrice
(
actualDiscountAmount
);
orderServe
.
setBindInnerCoupon
(
1
);
discountCalc
=
discountCalc
.
add
(
discountAmount
);
payCalc
=
payCalc
.
add
(
payAmount
);
}
}
}
//内部券抵扣不了
//保存卡券在订单服务上的使用情况
else
{
couponOrderRelevanceService
.
save
(
couponOrderRelevance
);
throw
new
RRException
(
"内部券冲突"
);
//如果不是免单券 业绩就要扣除实际折扣金额
if
(!
discountConfigListCouponId
.
contains
(
couponCustomerRelevance
.
getCouponId
()))
{
orderServe
.
setAchievement
(
orderServe
.
getAchievement
().
subtract
(
actualDiscountAmount
));
}
}
});
orderServe
.
addDiscountPrice
(
actualDiscountAmount
);
orderManage
.
addDiscountPrice
(
actualDiscountAmount
);
orderServe
.
setBindInnerCoupon
(
1
);
discountCalc
=
discountCalc
.
add
(
discountAmount
);
payCalc
=
payCalc
.
add
(
payAmount
);
}
}
//内部券抵扣不了
else
{
throw
new
RRException
(
"内部券冲突"
);
}
};
//5、免单券
List
<
CouponCustomerRelevance
>
freeInnerCouponCustomerRelevanceServiceList
=
innerCouponCustomerRelevanceServiceList
.
stream
()
.
filter
(
couponCustomerRelevance
->
discountConfigListCouponId
.
contains
(
couponCustomerRelevance
.
getCouponId
()))
.
collect
(
Collectors
.
toList
());
freeInnerCouponCustomerRelevanceServiceList
.
forEach
(
couponCustomerRelevanceConsumer
);
//6、普通内部券
List
<
CouponCustomerRelevance
>
normalInnerCouponCustomerRelevanceServiceList
=
innerCouponCustomerRelevanceServiceList
.
stream
()
.
filter
(
couponCustomerRelevance
->
!
discountConfigListCouponId
.
contains
(
couponCustomerRelevance
.
getCouponId
()))
.
collect
(
Collectors
.
toList
());
normalInnerCouponCustomerRelevanceServiceList
.
forEach
(
couponCustomerRelevanceConsumer
);
}
}
orderManageMapper
.
updateById
(
orderManage
);
orderManageMapper
.
updateById
(
orderManage
);
...
...
src/main/java/com/gogirl/interfaces/user/CouponCustomerRelevanceController.java
View file @
27fc644d
...
@@ -89,7 +89,7 @@ public class CouponCustomerRelevanceController {
...
@@ -89,7 +89,7 @@ public class CouponCustomerRelevanceController {
List
<
Integer
>
innerCouponIds
=
StringUtils
.
isNotEmpty
(
couponRelevanceIds
)
List
<
Integer
>
innerCouponIds
=
StringUtils
.
isNotEmpty
(
couponRelevanceIds
)
?
Lists
.
newArrayList
(
couponRelevanceIds
.
split
(
","
)).
stream
().
map
(
Integer:
:
valueOf
).
collect
(
Collectors
.
toList
())
?
Lists
.
newArrayList
(
couponRelevanceIds
.
split
(
","
)).
stream
().
map
(
Integer:
:
valueOf
).
collect
(
Collectors
.
toList
())
:
Lists
.
newArrayList
();
:
Lists
.
newArrayList
();
//1、使用内部券
marketService
.
setUpInnerCoupon
(
SetUpInnerCouponCommand
.
builder
()
marketService
.
setUpInnerCoupon
(
SetUpInnerCouponCommand
.
builder
()
.
innerCouponCustomerRelevanceIds
(
innerCouponIds
)
.
innerCouponCustomerRelevanceIds
(
innerCouponIds
)
.
orderId
(
orderId
)
.
orderId
(
orderId
)
...
@@ -99,11 +99,13 @@ public class CouponCustomerRelevanceController {
...
@@ -99,11 +99,13 @@ public class CouponCustomerRelevanceController {
?
Lists
.
newArrayList
(
timesCardIds
.
split
(
","
)).
stream
().
map
(
Integer:
:
valueOf
).
collect
(
Collectors
.
toList
())
?
Lists
.
newArrayList
(
timesCardIds
.
split
(
","
)).
stream
().
map
(
Integer:
:
valueOf
).
collect
(
Collectors
.
toList
())
:
Lists
.
newArrayList
();
:
Lists
.
newArrayList
();
//2、使用外部券
marketService
.
setTimesCard
(
SetTimesCardCommand
.
builder
()
marketService
.
setTimesCard
(
SetTimesCardCommand
.
builder
()
.
orderId
(
orderId
)
.
orderId
(
orderId
)
.
timesCardIds
(
timesCardCustomerIds
)
.
timesCardIds
(
timesCardCustomerIds
)
.
build
());
.
build
());
//3、订单结算
marketService
.
setterOrder
(
orderId
);
marketService
.
setterOrder
(
orderId
);
return
JsonResult
.
success
();
return
JsonResult
.
success
();
}
}
...
...
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