Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fit-finance
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fitness-server
fit-finance
Commits
0036c556
Commit
0036c556
authored
May 11, 2024
by
程裕兵
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:refund
parent
67855b9b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
50 additions
and
36 deletions
+50
-36
service/src/main/java/com/jiejing/fitness/finance/service/pay/convert/SettleConvert.java
+22
-21
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/SettleServiceImpl.java
+9
-5
service/src/main/java/com/jiejing/fitness/finance/service/utils/FeeUtil.java
+19
-10
No files found.
service/src/main/java/com/jiejing/fitness/finance/service/pay/convert/SettleConvert.java
View file @
0036c556
...
@@ -60,27 +60,28 @@ public class SettleConvert {
...
@@ -60,27 +60,28 @@ public class SettleConvert {
public
static
List
<
StudioSettleRecord
>
convertStudioSettle
(
MerchantSettleRecord
record
,
public
static
List
<
StudioSettleRecord
>
convertStudioSettle
(
MerchantSettleRecord
record
,
Map
<
Long
,
BigDecimal
>
studioPayAmountMap
,
Map
<
Long
,
BigDecimal
>
studioRefundAmountMap
,
Map
<
Long
,
BigDecimal
>
studioPayAmountMap
,
Map
<
Long
,
BigDecimal
>
studioRefundAmountMap
,
Map
<
Long
,
StudioVO
>
studioMap
)
{
Map
<
Long
,
StudioVO
>
studioMap
)
{
// A场馆支付了100,B场馆支付了0,B场馆发起退款-》成功。结算记录-》
return
studioMap
.
keySet
().
stream
().
map
(
studioId
->
{
// A场馆支付了0,B场馆支付了0,B场馆发起退款-》失败
// 存在只退款,未收款,或者收款金额少于退款金额的场景,此时的结算金额为负数
// A场馆支付了100,B场馆支付了0,B场馆发起退款-》成功,A场馆发起退款100-》失败
BigDecimal
settleAmount
=
MoneyUtil
.
subtract
(
studioPayAmountMap
.
getOrDefault
(
studioId
,
BigDecimal
.
ZERO
),
return
studioPayAmountMap
.
keySet
().
stream
().
map
(
studioId
->
StudioSettleRecord
.
builder
()
studioRefundAmountMap
.
getOrDefault
(
studioId
,
BigDecimal
.
ZERO
));
.
id
(
IdWorker
.
getId
())
return
StudioSettleRecord
.
builder
()
.
parentId
(
record
.
getId
())
.
id
(
IdWorker
.
getId
())
.
studioId
(
studioId
)
.
parentId
(
record
.
getId
())
.
studioName
(
Optional
.
ofNullable
(
studioMap
.
get
(
studioId
)).
map
(
StudioVO:
:
getName
).
orElse
(
"-"
))
.
studioId
(
studioId
)
.
merchantId
(
record
.
getMerchantId
())
.
studioName
(
Optional
.
ofNullable
(
studioMap
.
get
(
studioId
)).
map
(
StudioVO:
:
getName
).
orElse
(
"-"
))
.
merchantNo
(
record
.
getMerchantNo
())
.
merchantId
(
record
.
getMerchantId
())
.
transState
(
record
.
getTransState
())
.
merchantNo
(
record
.
getMerchantNo
())
.
transAmount
(
MoneyUtil
.
subtract
(
studioPayAmountMap
.
getOrDefault
(
studioId
,
BigDecimal
.
ZERO
),
.
transState
(
record
.
getTransState
())
studioRefundAmountMap
.
getOrDefault
(
studioId
,
BigDecimal
.
ZERO
)))
.
transAmount
(
settleAmount
)
.
settleDate
(
record
.
getSettleDate
())
.
settleDate
(
record
.
getSettleDate
())
.
cardNo
(
record
.
getCardNo
())
.
cardNo
(
record
.
getCardNo
())
.
bankName
(
record
.
getBankName
())
.
bankName
(
record
.
getBankName
())
.
failMsg
(
record
.
getFailMsg
())
.
failMsg
(
record
.
getFailMsg
())
.
salt
(
record
.
getSalt
())
.
salt
(
record
.
getSalt
())
.
createTime
(
record
.
getCreateTime
())
.
createTime
(
record
.
getCreateTime
())
.
updateTime
(
record
.
getUpdateTime
())
.
updateTime
(
record
.
getUpdateTime
())
.
build
()).
collect
(
Collectors
.
toList
());
.
build
();
}).
collect
(
Collectors
.
toList
());
}
}
public
static
StudioCheckSettleRecord
convertCheckSettle
(
StudioMerchantApply
apply
,
SettleVO
vo
,
public
static
StudioCheckSettleRecord
convertCheckSettle
(
StudioMerchantApply
apply
,
SettleVO
vo
,
...
...
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/SettleServiceImpl.java
View file @
0036c556
...
@@ -5,6 +5,7 @@ import static java.util.stream.Collectors.toList;
...
@@ -5,6 +5,7 @@ import static java.util.stream.Collectors.toList;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Sets
;
import
com.jiejing.common.utils.collection.CollectionUtil
;
import
com.jiejing.common.utils.collection.CollectionUtil
;
import
com.jiejing.common.utils.time.TimeUtil
;
import
com.jiejing.common.utils.time.TimeUtil
;
import
com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum
;
import
com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum
;
...
@@ -30,6 +31,7 @@ import java.time.temporal.ChronoUnit;
...
@@ -30,6 +31,7 @@ import java.time.temporal.ChronoUnit;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.function.Consumer
;
import
java.util.function.Consumer
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
...
@@ -231,20 +233,22 @@ public class SettleServiceImpl implements SettleService {
...
@@ -231,20 +233,22 @@ public class SettleServiceImpl implements SettleService {
private
void
doCheckSettleSuccess
(
SettleVO
vo
,
StudioMerchantApply
apply
,
Date
startDate
,
Date
endDate
)
{
private
void
doCheckSettleSuccess
(
SettleVO
vo
,
StudioMerchantApply
apply
,
Date
startDate
,
Date
endDate
)
{
// 对账成功
// 对账成功
:存在AB两个场馆同时绑定一个商户,A场馆没有收款但发起退款的场景。
Map
<
Long
,
BigDecimal
>
studioPayAmountMap
=
studioCashierRecordRpService
.
sumMerchantPaySuccessGroupByStudioId
(
Map
<
Long
,
BigDecimal
>
studioPayAmountMap
=
studioCashierRecordRpService
.
sumMerchantPaySuccessGroupByStudioId
(
apply
.
getMerchantId
(),
startDate
,
endDate
);
apply
.
getMerchantId
(),
startDate
,
endDate
);
Map
<
Long
,
BigDecimal
>
studioRefundAmountMap
=
studioCashierRecordRpService
.
sumMerchantRefundSuccessGroupByStudioId
(
Map
<
Long
,
BigDecimal
>
studioRefundAmountMap
=
studioCashierRecordRpService
.
sumMerchantRefundSuccessGroupByStudioId
(
apply
.
getMerchantId
(),
startDate
,
endDate
);
apply
.
getMerchantId
(),
startDate
,
endDate
);
Map
<
Long
,
StudioVO
>
studioMap
=
studioRpcService
.
mapStudio
(
Set
<
Long
>
studioIds
=
Sets
.
newHashSet
();
Lists
.
newArrayList
(
studioPayAmountMap
.
keySet
()));
studioIds
.
addAll
(
studioPayAmountMap
.
keySet
());
studioIds
.
addAll
(
studioRefundAmountMap
.
keySet
());
Map
<
Long
,
StudioVO
>
studioMap
=
studioRpcService
.
mapStudio
(
Lists
.
newArrayList
(
studioIds
));
transactionTemplate
.
executeWithoutResult
(
action
->
{
transactionTemplate
.
executeWithoutResult
(
action
->
{
MerchantSettleRecord
record
=
SettleConvert
.
convertMerchantSettle
(
apply
,
vo
);
MerchantSettleRecord
record
=
SettleConvert
.
convertMerchantSettle
(
apply
,
vo
);
merchantSettleRecordRpService
.
insert
(
record
);
merchantSettleRecordRpService
.
insert
(
record
);
studioSettleRecordRpService
.
insertAll
(
studioSettleRecordRpService
.
insertAll
(
SettleConvert
.
convertStudioSettle
(
record
,
studioPayAmountMap
,
studioRefundAmountMap
,
SettleConvert
.
convertStudioSettle
(
record
,
studioPayAmountMap
,
studioRefundAmountMap
,
studioMap
));
studioMap
));
});
});
if
(
TransStateEnums
.
SUCCESS
==
TransStateEnums
.
getByCode
(
vo
.
getTransState
()))
{
if
(
TransStateEnums
.
SUCCESS
==
TransStateEnums
.
getByCode
(
vo
.
getTransState
()))
{
// 结算成功,则更新收银流水状态为记录为入账成功
// 结算成功,则更新收银流水状态为记录为入账成功
...
...
service/src/main/java/com/jiejing/fitness/finance/service/utils/FeeUtil.java
View file @
0036c556
...
@@ -74,39 +74,48 @@ public class FeeUtil {
...
@@ -74,39 +74,48 @@ public class FeeUtil {
BigDecimal
fee1
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount1
,
BigDecimal
fee1
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount1
,
new
BigDecimal
(
"0"
));
new
BigDecimal
(
"0"
));
BigDecimal
refundActualAmount1
=
MoneyUtil
.
subtract
(
refundAmount1
,
fee1
);
BigDecimal
historyRefundActualAmount1
=
MoneyUtil
.
subtract
(
refundAmount1
,
fee1
);
BigDecimal
historyRefundActualAmount1
=
MoneyUtil
.
subtract
(
refundAmount1
,
fee1
);
BigDecimal
leftPayActualAmount1
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount1
);
BigDecimal
leftPayActualAmount1
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount1
);
System
.
out
.
println
(
System
.
out
.
println
(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
+
payFee
+
",退款申请金额:\t"
+
refundAmount1
+
",手续费:\t"
+
fee1
+
",剩余实收金额:\t"
+
leftPayActualAmount1
);
+
payFee
+
",退款申请金额:\t"
+
refundAmount1
+
",手续费:\t"
+
fee1
+
",
实退金额:\t"
+
refundActualAmount1
+
",
剩余实收金额:\t"
+
leftPayActualAmount1
);
BigDecimal
fee2
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount2
,
BigDecimal
fee2
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount2
,
historyRefundActualAmount1
);
historyRefundActualAmount1
);
BigDecimal
historyRefundActualAmount2
=
MoneyUtil
.
add
(
MoneyUtil
.
subtract
(
refundAmount2
,
fee2
),
BigDecimal
refundActualAmount2
=
MoneyUtil
.
subtract
(
refundAmount2
,
fee2
);
historyRefundActualAmount1
);
BigDecimal
historyRefundActualAmount2
=
MoneyUtil
.
add
(
refundActualAmount2
,
historyRefundActualAmount1
);
BigDecimal
leftPayActualAmount2
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount2
);
BigDecimal
leftPayActualAmount2
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount2
);
System
.
out
.
println
(
System
.
out
.
println
(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
+
payFee
+
",退款申请金额:\t"
+
refundAmount2
+
",手续费:\t"
+
fee2
+
",剩余实收金额:\t"
+
leftPayActualAmount2
);
+
payFee
+
",退款申请金额:\t"
+
refundAmount2
+
",手续费:\t"
+
fee2
+
",
实退金额:\t"
+
refundActualAmount2
+
",
剩余实收金额:\t"
+
leftPayActualAmount2
);
BigDecimal
fee3
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount3
,
BigDecimal
fee3
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount3
,
historyRefundActualAmount2
);
historyRefundActualAmount2
);
BigDecimal
historyRefundActualAmount3
=
MoneyUtil
.
add
(
MoneyUtil
.
subtract
(
refundAmount3
,
fee3
),
BigDecimal
refundActualAmount3
=
MoneyUtil
.
subtract
(
refundAmount3
,
fee3
);
historyRefundActualAmount2
);
BigDecimal
historyRefundActualAmount3
=
MoneyUtil
.
add
(
refundActualAmount3
,
historyRefundActualAmount2
);
BigDecimal
leftPayActualAmount3
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount3
);
BigDecimal
leftPayActualAmount3
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount3
);
System
.
out
.
println
(
System
.
out
.
println
(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
+
payFee
+
",退款申请金额:\t"
+
refundAmount3
+
",手续费:\t"
+
fee3
+
",剩余实收金额:\t"
+
leftPayActualAmount3
);
+
payFee
+
",退款申请金额:\t"
+
refundAmount3
+
",手续费:\t"
+
fee3
+
",
实退金额:\t"
+
refundActualAmount3
+
",
剩余实收金额:\t"
+
leftPayActualAmount3
);
BigDecimal
fee4
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount4
,
BigDecimal
fee4
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount4
,
historyRefundActualAmount3
);
historyRefundActualAmount3
);
BigDecimal
historyRefundActualAmount4
=
MoneyUtil
.
add
(
MoneyUtil
.
subtract
(
refundAmount4
,
fee4
),
BigDecimal
refundActualAmount4
=
MoneyUtil
.
subtract
(
refundAmount4
,
fee4
);
historyRefundActualAmount3
);
BigDecimal
historyRefundActualAmount4
=
MoneyUtil
.
add
(
refundActualAmount4
,
historyRefundActualAmount3
);
BigDecimal
leftPayActualAmount4
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount4
);
BigDecimal
leftPayActualAmount4
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount4
);
System
.
out
.
println
(
System
.
out
.
println
(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
+
payFee
+
",退款申请金额:\t"
+
refundAmount4
+
",手续费:\t"
+
fee4
+
",剩余实收金额:\t"
+
leftPayActualAmount4
);
+
payFee
+
",退款申请金额:\t"
+
refundAmount4
+
",手续费:\t"
+
fee4
+
",
实退金额:\t"
+
refundActualAmount4
+
",
剩余实收金额:\t"
+
leftPayActualAmount4
);
BigDecimal
fee5
=
test33
(
payTransAmount
,
payActualAmount
,
payFee
,
refundAmount4
,
historyRefundActualAmount4
);
BigDecimal
refundActualAmount5
=
MoneyUtil
.
subtract
(
refundAmount4
,
fee5
);
BigDecimal
historyRefundActualAmount5
=
MoneyUtil
.
add
(
refundActualAmount5
,
historyRefundActualAmount4
);
BigDecimal
leftPayActualAmount5
=
MoneyUtil
.
subtract
(
payActualAmount
,
historyRefundActualAmount5
);
System
.
out
.
println
(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 收款金额:\t"
+
payTransAmount
+
",实收金额:\t"
+
payActualAmount
+
",收款手续费:\t"
+
payFee
+
",退款申请金额:\t"
+
refundAmount4
+
",手续费:\t"
+
fee5
+
",实退金额:\t"
+
refundActualAmount3
+
",剩余实收金额:\t"
+
leftPayActualAmount5
);
}
}
private
static
BigDecimal
test33
(
BigDecimal
payTransAmount
,
BigDecimal
payActualAmount
,
BigDecimal
payFee
,
private
static
BigDecimal
test33
(
BigDecimal
payTransAmount
,
BigDecimal
payActualAmount
,
BigDecimal
payFee
,
...
...
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