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
331782f8
Commit
331782f8
authored
May 09, 2024
by
程裕兵
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:refund
parent
1751aced
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
119 additions
and
6 deletions
+119
-6
service/src/main/java/com/jiejing/fitness/finance/service/pay/convert/RefundConvert.java
+14
-0
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/PayServiceImpl.java
+2
-6
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/RefundServiceImpl.java
+82
-0
service/src/main/java/com/jiejing/fitness/finance/service/rpc/PermissionRpcService.java
+21
-0
No files found.
service/src/main/java/com/jiejing/fitness/finance/service/pay/convert/RefundConvert.java
View file @
331782f8
...
@@ -68,4 +68,18 @@ public class RefundConvert {
...
@@ -68,4 +68,18 @@ public class RefundConvert {
.
build
();
.
build
();
}
}
public
static
BrandCashierTransStateEnum
convertTransState
(
String
refundState
)
{
TransStateEnums
state
=
TransStateEnums
.
getByCode
(
refundState
);
switch
(
state
)
{
case
SUCCESS:
return
BrandCashierTransStateEnum
.
REFUND_SUCCESS
;
case
FAIL:
return
BrandCashierTransStateEnum
.
REFUND_FAIL
;
case
INIT:
case
PROCESS:
return
BrandCashierTransStateEnum
.
REFUNDING
;
default
:
return
null
;
}
}
}
}
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/PayServiceImpl.java
View file @
331782f8
...
@@ -217,14 +217,10 @@ public class PayServiceImpl implements PayService {
...
@@ -217,14 +217,10 @@ public class PayServiceImpl implements PayService {
private
List
<
Long
>
getUserIds
(
Long
studioId
)
{
private
List
<
Long
>
getUserIds
(
Long
studioId
)
{
// 有乐动收银查看和操作权限的账户
// 有乐动收银查看和操作权限的账户
Set
<
Long
>
seeUserIds
=
permissionRpcService
.
getUserIdByCode
(
AuthDomainEnum
.
FITNESS_ADMIN
.
getCode
(),
return
permissionRpcService
.
getUserIdsByCodeList
(
AuthDomainEnum
.
FITNESS_ADMIN
.
getCode
(),
studioId
,
TenantTypeEnum
.
STUDIO
.
buildKey
(
studioId
),
"FitSeeXmPay"
,
false
);
Lists
.
newArrayList
(
"FitSeeXmPay"
,
"FitManageXmPay"
),
false
);
Set
<
Long
>
operatorUserIds
=
permissionRpcService
.
getUserIdByCode
(
AuthDomainEnum
.
FITNESS_ADMIN
.
getCode
(),
TenantTypeEnum
.
STUDIO
.
buildKey
(
studioId
),
"FitManageXmPay"
,
false
);
return
seeUserIds
.
stream
().
filter
(
operatorUserIds:
:
contains
).
collect
(
toList
());
}
}
private
void
sendPaySuccessMessage
(
PayEvent
e
)
{
private
void
sendPaySuccessMessage
(
PayEvent
e
)
{
Long
studioId
=
e
.
getExtra
().
getLong
(
"studioId"
);
Long
studioId
=
e
.
getExtra
().
getLong
(
"studioId"
);
String
buyerName
=
e
.
getExtra
().
getString
(
"buyerName"
);
String
buyerName
=
e
.
getExtra
().
getString
(
"buyerName"
);
...
...
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/RefundServiceImpl.java
View file @
331782f8
package
com
.
jiejing
.
fitness
.
finance
.
service
.
pay
.
impl
;
package
com
.
jiejing
.
fitness
.
finance
.
service
.
pay
.
impl
;
import
com.baomidou.mybatisplus.core.toolkit.IdWorker
;
import
com.google.common.collect.Lists
;
import
com.jiejing.common.exception.BizException
;
import
com.jiejing.common.exception.BizException
;
import
com.jiejing.common.utils.collection.CollectionUtil
;
import
com.jiejing.fitness.enums.auth.AuthDomainEnum
;
import
com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum
;
import
com.jiejing.fitness.finance.repository.entity.StudioCashierRecord
;
import
com.jiejing.fitness.finance.repository.entity.StudioCashierRecord
;
import
com.jiejing.fitness.finance.repository.service.StudioCashierRecordRpService
;
import
com.jiejing.fitness.finance.repository.service.StudioCashierRecordRpService
;
import
com.jiejing.fitness.finance.service.enums.FinanceErrorEnums
;
import
com.jiejing.fitness.finance.service.enums.FinanceErrorEnums
;
...
@@ -8,10 +13,21 @@ import com.jiejing.fitness.finance.service.pay.RefundService;
...
@@ -8,10 +13,21 @@ import com.jiejing.fitness.finance.service.pay.RefundService;
import
com.jiejing.fitness.finance.service.pay.convert.RefundConvert
;
import
com.jiejing.fitness.finance.service.pay.convert.RefundConvert
;
import
com.jiejing.fitness.finance.service.pay.params.StudioMerchantRefundParams
;
import
com.jiejing.fitness.finance.service.pay.params.StudioMerchantRefundParams
;
import
com.jiejing.fitness.finance.service.rpc.PayRpcService
;
import
com.jiejing.fitness.finance.service.rpc.PayRpcService
;
import
com.jiejing.fitness.finance.service.rpc.PermissionRpcService
;
import
com.jiejing.fitness.finance.service.rpc.StudioRpcService
;
import
com.jiejing.message.enums.MsgChannelEnum
;
import
com.jiejing.message.event.SendCommonMsgEvent
;
import
com.jiejing.paycenter.api.pay.request.RefundPayRequest
;
import
com.jiejing.paycenter.api.pay.request.RefundPayRequest
;
import
com.jiejing.paycenter.common.enums.common.TransStateEnums
;
import
com.jiejing.paycenter.common.event.RefundEvent
;
import
com.jiejing.paycenter.common.event.RefundEvent
;
import
com.jiejing.paycenter.common.model.vo.RefundVO
;
import
com.jiejing.paycenter.common.model.vo.RefundVO
;
import
com.xiaomai.event.EventAgent
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.Executor
;
import
java.util.stream.Collectors
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -34,6 +50,15 @@ public class RefundServiceImpl implements RefundService {
...
@@ -34,6 +50,15 @@ public class RefundServiceImpl implements RefundService {
@Resource
@Resource
private
TransactionTemplate
transactionTemplate
;
private
TransactionTemplate
transactionTemplate
;
@Resource
private
PermissionRpcService
permissionRpcService
;
@Resource
private
StudioRpcService
studioRpcService
;
@Resource
(
name
=
"financeThreadPool"
)
private
Executor
executor
;
@Override
@Override
public
RefundVO
merchantRefund
(
StudioMerchantRefundParams
params
)
{
public
RefundVO
merchantRefund
(
StudioMerchantRefundParams
params
)
{
StudioCashierRecord
refund
=
transactionTemplate
.
execute
(
action
->
{
StudioCashierRecord
refund
=
transactionTemplate
.
execute
(
action
->
{
...
@@ -65,8 +90,65 @@ public class RefundServiceImpl implements RefundService {
...
@@ -65,8 +90,65 @@ public class RefundServiceImpl implements RefundService {
return
;
return
;
}
}
BrandCashierTransStateEnum
originalState
=
BrandCashierTransStateEnum
.
valueOf
(
record
.
getTransState
());
BrandCashierTransStateEnum
targetState
=
RefundConvert
.
convertTransState
(
event
.
getRefundState
());
if
(
targetState
==
originalState
)
{
return
;
}
StudioCashierRecord
toModify
=
RefundConvert
.
convertRefund
(
record
,
event
);
StudioCashierRecord
toModify
=
RefundConvert
.
convertRefund
(
record
,
event
);
studioCashierRecordRpService
.
updateById
(
toModify
);
studioCashierRecordRpService
.
updateById
(
toModify
);
// 执行后续处理
this
.
doAfterRefund
(
event
,
record
);
}
private
void
doAfterRefund
(
RefundEvent
event
,
StudioCashierRecord
record
)
{
if
(!
TransStateEnums
.
SUCCESS
.
getCode
().
equals
(
event
.
getRefundState
()))
{
return
;
}
executor
.
execute
(()
->
this
.
sendRefundSuccessMessage
(
event
,
record
));
}
private
void
sendRefundSuccessMessage
(
RefundEvent
e
,
StudioCashierRecord
record
)
{
// TODO
List
<
Long
>
targetIds
=
this
.
getAdminIds
(
record
.
getStudioId
());
if
(
CollectionUtil
.
isEmpty
(
targetIds
))
{
return
;
}
List
<
Map
<
String
,
Object
>>
paramList
=
targetIds
.
stream
().
map
(
targetId
->
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>(
1
);
paramMap
.
put
(
"targetId"
,
targetId
);
paramMap
.
put
(
"studioId"
,
record
.
getStudioId
());
paramMap
.
put
(
"buyerName"
,
record
.
getBuyerName
());
paramMap
.
put
(
"amount"
,
record
.
getTransAmount
());
// paramMap.put("appUrl", appUrlProperties.getTransDetail() + e.getTransNo());
return
paramMap
;
}).
collect
(
Collectors
.
toList
());
SendCommonMsgEvent
event
=
new
SendCommonMsgEvent
();
event
.
setChannelEnums
(
Lists
.
newArrayList
(
MsgChannelEnum
.
APP_PUSH
));
event
.
setCovertTarget
(
true
);
event
.
setEventId
(
IdWorker
.
getId
());
event
.
setSourceId
(
record
.
getStudioId
());
event
.
setBizType
(
"CASHIER_REFUND_SUCCESS"
);
event
.
setParams
(
paramList
);
EventAgent
.
of
(
SendCommonMsgEvent
.
class
).
triggerEvent
(
event
);
}
private
List
<
Long
>
getAdminIds
(
Long
studioId
)
{
List
<
Long
>
userIds
=
this
.
getUserIds
(
studioId
);
if
(
CollectionUtil
.
isEmpty
(
userIds
))
{
return
Lists
.
newArrayList
();
}
return
studioRpcService
.
listAdminIdsByUserIds
(
studioId
,
Lists
.
newArrayList
(
userIds
));
}
private
List
<
Long
>
getUserIds
(
Long
studioId
)
{
// 有乐动收银查看和操作权限的账户
return
permissionRpcService
.
getUserIdsByCodeList
(
AuthDomainEnum
.
FITNESS_ADMIN
.
getCode
(),
studioId
,
Lists
.
newArrayList
(
"FitSeeXmPay"
,
"FitManageXmPay"
),
false
);
}
}
}
}
service/src/main/java/com/jiejing/fitness/finance/service/rpc/PermissionRpcService.java
View file @
331782f8
package
com
.
jiejing
.
fitness
.
finance
.
service
.
rpc
;
package
com
.
jiejing
.
fitness
.
finance
.
service
.
rpc
;
import
static
java
.
util
.
stream
.
Collectors
.
toList
;
import
com.google.common.collect.Lists
;
import
com.jiejing.common.model.JsonResult
;
import
com.jiejing.common.model.JsonResult
;
import
com.jiejing.fitness.enums.auth.AuthDomainEnum
;
import
com.jiejing.fitness.enums.tenant.TenantTypeEnum
;
import
com.jiejing.permcenter.api.config.request.QueryUserIdByCodeRequest
;
import
com.jiejing.permcenter.api.config.request.QueryUserIdByCodeRequest
;
import
com.jiejing.permcenter.api.perm.AuthorityPermApi
;
import
com.jiejing.permcenter.api.perm.AuthorityPermApi
;
import
java.util.ArrayList
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.Optional
;
import
java.util.Set
;
import
java.util.Set
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
...
@@ -38,4 +45,18 @@ public class PermissionRpcService {
...
@@ -38,4 +45,18 @@ public class PermissionRpcService {
return
Optional
.
ofNullable
(
result
.
getResult
()).
orElse
(
new
HashSet
<>(
1
));
return
Optional
.
ofNullable
(
result
.
getResult
()).
orElse
(
new
HashSet
<>(
1
));
}
}
public
List
<
Long
>
getUserIdsByCodeList
(
String
domain
,
Long
studioId
,
List
<
String
>
permissionCodeList
,
boolean
includeSubTree
)
{
List
<
Long
>
userIds
=
Lists
.
newArrayList
();
for
(
int
i
=
0
;
i
<
permissionCodeList
.
size
();
i
++)
{
Set
<
Long
>
seeUserIds
=
this
.
getUserIdByCode
(
domain
,
TenantTypeEnum
.
STUDIO
.
buildKey
(
studioId
),
permissionCodeList
.
get
(
i
),
includeSubTree
);
if
(
i
==
0
)
{
userIds
.
addAll
(
seeUserIds
);
}
else
{
userIds
=
userIds
.
stream
().
filter
(
seeUserIds:
:
contains
).
collect
(
toList
());
}
}
return
userIds
;
}
}
}
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