Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gxpt_ht
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
pseer
gxpt_ht
Commits
b7df3c45
Commit
b7df3c45
authored
Sep 09, 2024
by
吕明尚
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加月卡和次卡的计算逻辑
parent
480ec261
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
98 additions
and
88 deletions
+98
-88
ComputedOrderPriceResponse.java
...ava/share/system/response/ComputedOrderPriceResponse.java
+7
-0
SOrderServiceImpl.java
...ain/java/share/system/service/impl/SOrderServiceImpl.java
+91
-88
No files found.
share-system/src/main/java/share/system/response/ComputedOrderPriceResponse.java
View file @
b7df3c45
...
...
@@ -68,5 +68,12 @@ public class ComputedOrderPriceResponse implements Serializable {
@ApiModelProperty
(
value
=
"剩余余额"
)
private
BigDecimal
remainingBalance
;
//次卡ID
@ApiModelProperty
(
value
=
"次卡ID"
)
private
Long
secondaryCardId
;
//月卡ID
@ApiModelProperty
(
value
=
"月卡ID"
)
private
Long
monthlyCardId
;
}
share-system/src/main/java/share/system/service/impl/SOrderServiceImpl.java
View file @
b7df3c45
...
...
@@ -2381,26 +2381,26 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setDiscount
(
BigDecimal
.
ZERO
);
priceResponse
.
setMemberDiscount
(
BigDecimal
.
ZERO
);
Activity
activity
=
null
;
ConsumerMember
consumerMember
=
null
;
ConsumerWallet
consumerWallet
=
null
;
//
ConsumerMember consumerMember = null;
//
ConsumerWallet consumerWallet = null;
ConsumerMonthlyCard
consumerMonthlyCard
=
null
;
List
<
ConsumerSecondaryCard
>
consumerSecondaryCardList
=
null
;
LambdaQueryWrapper
<
Activity
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
if
(
ObjectUtil
.
isNotEmpty
(
user
))
{
consumerWallet
=
consumerWalletService
.
getOne
(
new
LambdaQueryWrapper
<
ConsumerWallet
>().
eq
(
ConsumerWallet:
:
getConsumerId
,
user
.
getId
()));
consumerMember
=
consumerMemberService
.
getOne
(
new
LambdaQueryWrapper
<
ConsumerMember
>().
eq
(
ConsumerMember:
:
getConsumerId
,
user
.
getId
()));
//
consumerWallet = consumerWalletService.getOne(new LambdaQueryWrapper<ConsumerWallet>().eq(ConsumerWallet::getConsumerId, user.getId()));
//
consumerMember = consumerMemberService.getOne(new LambdaQueryWrapper<ConsumerMember>().eq(ConsumerMember::getConsumerId, user.getId()));
consumerMonthlyCard
=
consumerMonthlyCardService
.
getOne
(
new
LambdaQueryWrapper
<
ConsumerMonthlyCard
>().
eq
(
ConsumerMonthlyCard:
:
getConsumerId
,
user
.
getId
()));
consumerSecondaryCardList
=
consumerSecondaryCardService
.
list
(
new
LambdaQueryWrapper
<
ConsumerSecondaryCard
>().
eq
(
ConsumerSecondaryCard:
:
getConsumerId
,
user
.
getId
())
.
ne
(
ConsumerSecondaryCard:
:
getNumber
,
YesNoEnum
.
no
.
getIndex
())
);
if
(
ObjectUtil
.
isNotEmpty
(
consumerMember
))
{
queryWrapper
.
eq
(
Activity:
:
getIsOpen
,
YesNoEnum
.
yes
.
getIndex
());
queryWrapper
.
eq
(
Activity:
:
getMemberType
,
consumerMember
.
getMemberType
());
}
if
(
ObjectUtil
.
isNotEmpty
(
consumerWallet
))
{
priceResponse
.
setAvailableBalance
(
consumerWallet
.
getBalance
());
priceResponse
.
setAvailableDuration
(
consumerWallet
.
getRemainingDuration
());
}
//
if (ObjectUtil.isNotEmpty(consumerMember)) {
//
queryWrapper.eq(Activity::getIsOpen, YesNoEnum.yes.getIndex());
//
queryWrapper.eq(Activity::getMemberType, consumerMember.getMemberType());
//
}
//
if (ObjectUtil.isNotEmpty(consumerWallet)) {
//
priceResponse.setAvailableBalance(consumerWallet.getBalance());
//
priceResponse.setAvailableDuration(consumerWallet.getRemainingDuration());
//
}
}
SRoom
room
=
roomService
.
getById
(
request
.
getRoomId
());
BigDecimal
totalPrice
=
computeTotalPrice
(
room
.
getPrice
(),
request
.
getPreStartDate
(),
request
.
getPreEndDate
());
...
...
@@ -2413,16 +2413,16 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setTotalFee
(
payPrice
);
priceResponse
.
setTotalFeeNow
(
payPrice
);
request
.
setBuyType
(
BuyTypeEnum
.
TIME
.
getCode
());
if
(
ObjectUtil
.
isNotEmpty
(
consumerMember
))
{
queryWrapper
.
eq
(
Activity:
:
getLabelId
,
roomLabel
.
getLabelId
());
activity
=
activityService
.
getOne
(
queryWrapper
);
totalFee
=
getBigDecimal
(
request
,
activity
,
payPrice
,
user
,
consumerMember
);
priceResponse
.
setTotalFeeNow
(
totalFee
);
priceResponse
.
setMemberDiscount
(
payPrice
.
subtract
(
totalFee
));
// if (ObjectUtil.isNotEmpty(consumerMember)) {
// queryWrapper.eq(Activity::getLabelId, roomLabel.getLabelId());
// activity = activityService.getOne(queryWrapper);
// totalFee = getBigDecimal(request, activity, payPrice, user, consumerMember);
// priceResponse.setTotalFeeNow(totalFee);
priceResponse
.
setDiscount
(
totalFee
.
divide
(
payPrice
,
2
,
RoundingMode
.
HALF_UP
).
multiply
(
new
BigDecimal
(
100
)));
totalFee
=
getBigDecimal
(
consumerWallet
,
activity
,
timeLong
,
priceResponse
,
totalFee
,
room
,
request
,
consumerMember
);
}
// priceResponse.setMemberDiscount(payPrice.subtract(totalFee));
//// priceResponse.setTotalFeeNow(totalFee);
// priceResponse.setDiscount(totalFee.divide(payPrice, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
// totalFee = getBigDecimal(consumerWallet, activity, timeLong, priceResponse, totalFee, room, request, consumerMember);
// }
if
(
ObjectUtil
.
isNotEmpty
(
consumerMonthlyCard
))
{
totalFee
=
getBigDecimal
(
consumerMonthlyCard
,
timeLong
,
priceResponse
,
totalPrice
,
room
);
}
...
...
@@ -2433,15 +2433,15 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setTotalFee
(
payPrice
);
priceResponse
.
setTotalFeeNow
(
payPrice
);
request
.
setBuyType
(
BuyTypeEnum
.
PACK
.
getCode
());
if
(
ObjectUtil
.
isNotEmpty
(
consumerMember
))
{
queryWrapper
.
eq
(
Activity:
:
getPackId
,
roomLabel
.
getPackId
());
activity
=
activityService
.
getOne
(
queryWrapper
);
totalFee
=
getBigDecimal
(
request
,
activity
,
payPrice
,
user
,
consumerMember
);
priceResponse
.
setTotalFeeNow
(
totalFee
);
priceResponse
.
setMemberDiscount
(
payPrice
.
subtract
(
totalFee
));
priceResponse
.
setDiscount
(
totalFee
.
divide
(
payPrice
,
2
,
RoundingMode
.
HALF_UP
).
multiply
(
new
BigDecimal
(
100
)));
totalFee
=
getBigDecimal
(
consumerWallet
,
activity
,
timeLong
,
priceResponse
,
totalFee
,
byId
,
request
);
}
//
if (ObjectUtil.isNotEmpty(consumerMember)) {
//
queryWrapper.eq(Activity::getPackId, roomLabel.getPackId());
//
activity = activityService.getOne(queryWrapper);
//
totalFee = getBigDecimal(request, activity, payPrice, user, consumerMember);
//
priceResponse.setTotalFeeNow(totalFee);
//
priceResponse.setMemberDiscount(payPrice.subtract(totalFee));
//
priceResponse.setDiscount(totalFee.divide(payPrice, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
//
totalFee = getBigDecimal(consumerWallet, activity, timeLong, priceResponse, totalFee, byId, request);
//
}
if
(
CollectionUtils
.
isNotEmpty
(
consumerSecondaryCardList
))
{
totalFee
=
getBigDecimal
(
consumerSecondaryCardList
,
priceResponse
,
byId
,
payPrice
);
}
...
...
@@ -2455,15 +2455,15 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setTotalFee
(
payPrice
);
priceResponse
.
setTotalFeeNow
(
payPrice
);
request
.
setBuyType
(
BuyTypeEnum
.
TIME
.
getCode
());
if
(
ObjectUtil
.
isNotEmpty
(
consumerMember
))
{
queryWrapper
.
eq
(
Activity:
:
getLabelId
,
roomLabel
.
getLabelId
());
activity
=
activityService
.
getOne
(
queryWrapper
);
totalFee
=
getBigDecimal
(
request
,
activity
,
payPrice
,
user
,
consumerMember
);
priceResponse
.
setTotalFeeNow
(
totalFee
);
priceResponse
.
setMemberDiscount
(
payPrice
.
subtract
(
totalFee
));
priceResponse
.
setDiscount
(
totalFee
.
divide
(
payPrice
,
2
,
RoundingMode
.
HALF_UP
).
multiply
(
new
BigDecimal
(
100
)));
totalFee
=
getBigDecimal
(
consumerWallet
,
activity
,
timeLong
,
priceResponse
,
totalFee
,
room
,
request
,
consumerMember
);
}
//
if (ObjectUtil.isNotEmpty(consumerMember)) {
//
queryWrapper.eq(Activity::getLabelId, roomLabel.getLabelId());
//
activity = activityService.getOne(queryWrapper);
//
totalFee = getBigDecimal(request, activity, payPrice, user, consumerMember);
//
priceResponse.setTotalFeeNow(totalFee);
//
priceResponse.setMemberDiscount(payPrice.subtract(totalFee));
//
priceResponse.setDiscount(totalFee.divide(payPrice, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
//
totalFee = getBigDecimal(consumerWallet, activity, timeLong, priceResponse, totalFee, room, request, consumerMember);
//
}
if
(
ObjectUtil
.
isNotEmpty
(
consumerMonthlyCard
))
{
totalFee
=
getBigDecimal
(
consumerMonthlyCard
,
timeLong
,
priceResponse
,
totalPrice
,
room
);
}
...
...
@@ -2477,15 +2477,15 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setTotalFee
(
payPrice
);
priceResponse
.
setTotalFeeNow
(
payPrice
);
request
.
setBuyType
(
BuyTypeEnum
.
PACK
.
getCode
());
if
(
ObjectUtil
.
isNotEmpty
(
consumerMember
))
{
queryWrapper
.
eq
(
Activity:
:
getPackId
,
request
.
getPackId
());
activity
=
activityService
.
getOne
(
queryWrapper
);
totalFee
=
getBigDecimal
(
request
,
activity
,
payPrice
,
user
,
consumerMember
);
priceResponse
.
setTotalFeeNow
(
totalFee
);
priceResponse
.
setMemberDiscount
(
payPrice
.
subtract
(
totalFee
));
priceResponse
.
setDiscount
(
totalFee
.
divide
(
payPrice
,
2
,
RoundingMode
.
HALF_UP
).
multiply
(
new
BigDecimal
(
100
)));
totalFee
=
getBigDecimal
(
consumerWallet
,
activity
,
timeLong
,
priceResponse
,
totalFee
,
byId
,
request
);
}
//
if (ObjectUtil.isNotEmpty(consumerMember)) {
//
queryWrapper.eq(Activity::getPackId, request.getPackId());
//
activity = activityService.getOne(queryWrapper);
//
totalFee = getBigDecimal(request, activity, payPrice, user, consumerMember);
//
priceResponse.setTotalFeeNow(totalFee);
//
priceResponse.setMemberDiscount(payPrice.subtract(totalFee));
//
priceResponse.setDiscount(totalFee.divide(payPrice, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
//
totalFee = getBigDecimal(consumerWallet, activity, timeLong, priceResponse, totalFee, byId, request);
//
}
// if(ObjectUtil.isNotEmpty(consumerMonthlyCard)){
// totalFee = getBigDecimal(consumerMonthlyCard,timeLong,priceResponse,totalFee,room);
// }
...
...
@@ -2495,11 +2495,11 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
}
priceResponse
.
setTotalFee
(
payPrice
);
if
(
ObjectUtil
.
isEmpty
(
consumerWallet
)
&&
totalFee
.
compareTo
(
new
BigDecimal
(
0
))
==
0
&&
CollectionUtils
.
isEmpty
(
consumerSecondaryCardList
)
&&
ObjectUtil
.
isNotEmpty
(
consumerMonthlyCard
))
{
priceResponse
.
setPayFee
(
payPrice
);
}
else
{
priceResponse
.
setPayFee
(
totalFee
);
}
//
if (ObjectUtil.isEmpty(consumerWallet) && totalFee.compareTo(new BigDecimal(0)) == 0 && CollectionUtils.isEmpty(consumerSecondaryCardList) && ObjectUtil.isNotEmpty(consumerMonthlyCard)) {
//
priceResponse.setPayFee(payPrice);
//
} else {
//
priceResponse.setPayFee(totalFee);
//
}
// 计算优惠券金额
if
(
ObjectUtil
.
isNull
(
request
.
getCouponId
())
||
request
.
getCouponId
()
<=
0
)
{
...
...
@@ -2529,41 +2529,41 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setRemainingBalance
(
new
BigDecimal
(
0
));
priceResponse
.
setRemainingDuration
(
new
BigDecimal
(
0
));
if
(
priceResponse
.
getPayFee
().
compareTo
(
new
BigDecimal
(
0
))
>
0
)
{
if
(
ObjectUtil
.
isNotEmpty
(
consumerMember
))
{
MemberConfig
memberConfig
=
memberConfigService
.
getOne
(
new
LambdaQueryWrapper
<
MemberConfig
>().
eq
(
MemberConfig:
:
getId
,
consumerMember
.
getMemberConfigId
()));
BigDecimal
payFee
=
priceResponse
.
getPayFee
();
BigDecimal
divide
=
priceResponse
.
getPayFee
().
multiply
(
memberConfig
.
getDiscountRatio
()).
divide
(
new
BigDecimal
(
100
),
2
,
RoundingMode
.
HALF_UP
);
if
(
payFee
.
compareTo
(
divide
)
==
0
)
{
priceResponse
.
setDiscount
(
BigDecimal
.
ZERO
);
}
//总金额乘以折扣比例除以100
priceResponse
.
setPayFee
(
divide
);
priceResponse
.
setDiscountFee
(
priceResponse
.
getTotalFee
().
subtract
(
priceResponse
.
getPayFee
()));
priceResponse
.
setTotalFeeNow
(
divide
);
priceResponse
.
setMemberDiscount
(
payFee
.
subtract
(
divide
));
// priceResponse.setCouponFee(priceResponse.getDiscountFee());
if
(
ObjectUtil
.
isNotEmpty
(
priceResponse
.
getDiscountFee
())
&&
priceResponse
.
getTotalFee
().
compareTo
(
new
BigDecimal
(
0.00
))
>
0
)
{
priceResponse
.
setDiscountRatio
(
priceResponse
.
getDiscountFee
().
divide
(
priceResponse
.
getTotalFee
(),
2
,
RoundingMode
.
HALF_UP
).
multiply
(
new
BigDecimal
(
100
)));
}
else
{
priceResponse
.
setDiscountRatio
(
new
BigDecimal
(
0
));
}
}
if
(
ObjectUtil
.
isNotEmpty
(
consumerWallet
))
{
if
(
consumerWallet
.
getBalance
().
compareTo
(
priceResponse
.
getPayFee
())
>=
0
)
{
priceResponse
.
setBalance
(
priceResponse
.
getPayFee
());
priceResponse
.
setRemainingBalance
(
consumerWallet
.
getBalance
().
subtract
(
priceResponse
.
getPayFee
()));
totalFee
=
new
BigDecimal
(
0
);
}
else
if
(
consumerWallet
.
getBalance
().
compareTo
(
priceResponse
.
getPayFee
())
<
0
)
{
priceResponse
.
setBalance
(
consumerWallet
.
getBalance
());
totalFee
=
priceResponse
.
getPayFee
().
subtract
(
consumerWallet
.
getBalance
());
}
priceResponse
.
setPayFee
(
totalFee
);
}
if
(
ObjectUtil
.
isEmpty
(
consumerWallet
)
&&
ObjectUtil
.
isEmpty
(
consumerMember
))
{
priceResponse
.
setTotalFeeNow
(
priceResponse
.
getPayFee
());
priceResponse
.
setMemberDiscount
(
priceResponse
.
getTotalFee
().
subtract
(
priceResponse
.
getPayFee
()));
}
//
if (ObjectUtil.isNotEmpty(consumerMember)) {
//
MemberConfig memberConfig = memberConfigService.getOne(new LambdaQueryWrapper<MemberConfig>().eq(MemberConfig::getId, consumerMember.getMemberConfigId()));
//
//
BigDecimal payFee = priceResponse.getPayFee();
//
BigDecimal divide = priceResponse.getPayFee().multiply(memberConfig.getDiscountRatio()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
//
if (payFee.compareTo(divide) == 0) {
//
priceResponse.setDiscount(BigDecimal.ZERO);
//
}
//
//总金额乘以折扣比例除以100
//
priceResponse.setPayFee(divide);
//
priceResponse.setDiscountFee(priceResponse.getTotalFee().subtract(priceResponse.getPayFee()));
//
priceResponse.setTotalFeeNow(divide);
//
priceResponse.setMemberDiscount(payFee.subtract(divide));
//
//
priceResponse.setCouponFee(priceResponse.getDiscountFee());
//
if (ObjectUtil.isNotEmpty(priceResponse.getDiscountFee()) && priceResponse.getTotalFee().compareTo(new BigDecimal(0.00)) > 0) {
//
priceResponse.setDiscountRatio(priceResponse.getDiscountFee().divide(priceResponse.getTotalFee(), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
//
} else {
//
priceResponse.setDiscountRatio(new BigDecimal(0));
//
}
//
}
//
if (ObjectUtil.isNotEmpty(consumerWallet)) {
//
if (consumerWallet.getBalance().compareTo(priceResponse.getPayFee()) >= 0) {
//
priceResponse.setBalance(priceResponse.getPayFee());
//
priceResponse.setRemainingBalance(consumerWallet.getBalance().subtract(priceResponse.getPayFee()));
//
totalFee = new BigDecimal(0);
//
} else if (consumerWallet.getBalance().compareTo(priceResponse.getPayFee()) < 0) {
//
priceResponse.setBalance(consumerWallet.getBalance());
//
totalFee = priceResponse.getPayFee().subtract(consumerWallet.getBalance());
//
}
//
priceResponse.setPayFee(totalFee);
//
}
//
if (ObjectUtil.isEmpty(consumerWallet) && ObjectUtil.isEmpty(consumerMember)) {
//
priceResponse.setTotalFeeNow(priceResponse.getPayFee());
//
priceResponse.setMemberDiscount(priceResponse.getTotalFee().subtract(priceResponse.getPayFee()));
//
}
}
else
{
priceResponse
.
setDiscount
(
BigDecimal
.
ZERO
);
...
...
@@ -2812,6 +2812,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setMemberDiscount
(
new
BigDecimal
(
0.00
));
priceResponse
.
setTotalFeeNow
(
priceResponse
.
getTotalFee
());
priceResponse
.
setPayFee
(
BigDecimal
.
ZERO
);
priceResponse
.
setMonthlyCardId
(
consumerMonthlyCard
.
getId
());
}
else
if
(
consumerMonthlyCard
.
getFreeDuration
().
compareTo
(
timeLong
)
<
0
)
{
priceResponse
.
setDuration
(
consumerMonthlyCard
.
getFreeDuration
());
priceResponse
.
setRemainingDuration
(
new
BigDecimal
(
0
));
...
...
@@ -2821,6 +2822,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setMemberDiscount
(
totalFee
.
subtract
(
remainingBalance
));
totalFee
=
remainingBalance
;
priceResponse
.
setPayFee
(
remainingBalance
);
priceResponse
.
setMonthlyCardId
(
consumerMonthlyCard
.
getId
());
}
return
totalFee
;
}
...
...
@@ -2834,6 +2836,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
priceResponse
.
setMemberDiscount
(
BigDecimal
.
ZERO
);
priceResponse
.
setTotalFeeNow
(
payPrice
);
priceResponse
.
setPayFee
(
BigDecimal
.
ZERO
);
priceResponse
.
setSecondaryCardId
(
consumerSecondaryCard
.
getId
());
payPrice
=
BigDecimal
.
ZERO
;
}
return
payPrice
;
...
...
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