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
9f4cd557
Commit
9f4cd557
authored
Apr 17, 2024
by
程裕兵
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:pay
parent
cf8251a2
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
139 additions
and
8 deletions
+139
-8
pom.xml
+6
-1
service/pom.xml
+4
-0
service/src/main/java/com/jiejing/fitness/finance/service/pay/convert/PayConvert.java
+6
-1
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/PayServiceImpl.java
+82
-6
service/src/main/java/com/jiejing/fitness/finance/service/rpc/PermissionRpcService.java
+41
-0
No files found.
pom.xml
View file @
9f4cd557
...
...
@@ -60,7 +60,7 @@
</dependency>
<!-- ======================= spring cloud end ======================= -->
<!-- ======================= jiejing api
end
======================= -->
<!-- ======================= jiejing api
start
======================= -->
<dependency>
<groupId>
com.jiejing.base
</groupId>
<artifactId>
filecenter-api
</artifactId>
...
...
@@ -81,6 +81,11 @@
<artifactId>
message-api
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.jiejing.base
</groupId>
<artifactId>
permcenter-api
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
</dependency>
<!-- ======================= jiejing api end ======================= -->
...
...
service/pom.xml
View file @
9f4cd557
...
...
@@ -32,6 +32,10 @@
<artifactId>
message-api
</artifactId>
</dependency>
<dependency>
<groupId>
com.jiejing.base
</groupId>
<artifactId>
permcenter-api
</artifactId>
</dependency>
<dependency>
<groupId>
com.jiejing.event
</groupId>
<artifactId>
scs-event
</artifactId>
</dependency>
...
...
service/src/main/java/com/jiejing/fitness/finance/service/pay/convert/PayConvert.java
View file @
9f4cd557
...
...
@@ -167,7 +167,7 @@ public class PayConvert {
.
build
();
}
p
rivate
static
BrandCashierTransStateEnum
convertTransState
(
PayStateEnums
state
)
{
p
ublic
static
BrandCashierTransStateEnum
convertTransState
(
PayStateEnums
state
)
{
switch
(
state
)
{
case
SUCCESS:
return
BrandCashierTransStateEnum
.
PAY_SUCCESS
;
...
...
@@ -179,6 +179,10 @@ public class PayConvert {
}
}
public
static
BrandCashierTransStateEnum
convertTransState
(
String
state
)
{
return
convertTransState
(
PayStateEnums
.
getByCode
(
state
));
}
public
static
StudioCashierRecord
convertRefundInit
(
BrandMerchantRefundParams
params
,
StudioCashierRecord
pay
,
BigDecimal
historyRefundActualAmount
)
{
StudioCashierRecord
record
=
BeanUtil
.
map
(
pay
,
StudioCashierRecord
.
class
);
...
...
@@ -293,6 +297,7 @@ public class PayConvert {
.
thirdTransNo
(
vo
.
getThirdTransNo
())
.
failMsg
(
vo
.
getFailMsg
())
.
finishTime
(
vo
.
getFinishTime
())
.
extra
(
request
.
getExtra
())
.
build
();
}
}
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/PayServiceImpl.java
View file @
9f4cd557
...
...
@@ -13,7 +13,9 @@ import com.google.common.collect.Lists;
import
com.jiejing.common.exception.BizException
;
import
com.jiejing.common.utils.collection.CollectionUtil
;
import
com.jiejing.common.utils.time.TimeUtil
;
import
com.jiejing.fitness.enums.auth.AuthDomainEnum
;
import
com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum
;
import
com.jiejing.fitness.enums.tenant.TenantTypeEnum
;
import
com.jiejing.fitness.finance.repository.entity.GlobalConfig
;
import
com.jiejing.fitness.finance.repository.entity.StudioCashierRecord
;
import
com.jiejing.fitness.finance.repository.entity.PartyToMerchant
;
...
...
@@ -35,10 +37,12 @@ import com.jiejing.fitness.finance.service.pay.params.NativePayParams;
import
com.jiejing.fitness.finance.service.pay.params.StudioMerchantPayParams
;
import
com.jiejing.fitness.finance.service.rpc.MerchantRpcService
;
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.fitness.finance.service.utils.DingUtil
;
import
com.jiejing.fitness.finance.service.utils.FeeUtil
;
import
com.jiejing.fitness.finance.service.utils.MoneyUtil
;
import
com.jiejing.message.enums.MsgChannelEnum
;
import
com.jiejing.message.event.SendCommonMsgEvent
;
import
com.jiejing.paycenter.common.enums.common.PayChannelEnums
;
import
com.jiejing.paycenter.common.enums.common.TransStateEnums
;
...
...
@@ -58,19 +62,24 @@ import com.jiejing.wechat.vo.weChat.BaseAuthInfoVO;
import
com.xiaomai.event.EventAgent
;
import
java.math.BigDecimal
;
import
java.time.temporal.ChronoUnit
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
import
java.util.Set
;
import
java.util.concurrent.Executor
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.function.Consumer
;
import
java.util.stream.Collectors
;
import
javax.annotation.PostConstruct
;
import
javax.annotation.Resource
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.data.domain.Page
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.support.TransactionTemplate
;
/**
* @author chengyubing
...
...
@@ -113,6 +122,15 @@ public class PayServiceImpl implements PayService {
@Resource
private
GlobalConfigRpService
globalConfigRpService
;
@Resource
private
TransactionTemplate
transactionTemplate
;
@Resource
private
PermissionRpcService
permissionRpcService
;
@Resource
(
name
=
"financeThreadPool"
)
private
Executor
executor
;
private
final
Map
<
String
,
DefaultAlipayClient
>
aliClientMap
=
new
HashMap
<>();
@PostConstruct
...
...
@@ -182,20 +200,37 @@ public class PayServiceImpl implements PayService {
if
(!
event
.
getChannelNo
().
equals
(
config
.
getCashier
()))
{
return
;
}
StudioCashierRecord
record
=
studioCashierRecordRpService
.
getById
(
Long
.
parseLong
(
event
.
getTransNo
()))
.
orElse
(
null
);
Boolean
result
=
transactionTemplate
.
execute
(
action
->
{
Long
id
=
Long
.
parseLong
(
event
.
getTransNo
());
StudioCashierRecord
record
=
studioCashierRecordRpService
.
getByIdForUpdate
(
id
).
orElse
(
null
);
if
(
null
==
record
)
{
return
;
return
false
;
}
BrandCashierTransStateEnum
originalState
=
BrandCashierTransStateEnum
.
valueOf
(
record
.
getTransState
());
BrandCashierTransStateEnum
targetState
=
PayConvert
.
convertTransState
(
event
.
getPayState
());
if
(
targetState
==
originalState
)
{
return
false
;
}
if
(
isPaying
(
targetState
)
&&
isPayFinished
(
originalState
))
{
return
false
;
}
StudioCashierRecord
toModify
=
PayConvert
.
convertPay
(
record
,
event
);
studioCashierRecordRpService
.
updateById
(
toModify
);
return
true
;
});
if
(
null
!=
result
&&
result
)
{
if
(
PayStateEnums
.
SUCCESS
.
getCode
().
equals
(
event
.
getPayState
()))
{
this
.
sendPaySuccessMessage
(
event
);
executor
.
execute
(()
->
this
.
sendPaySuccessMessage
(
event
)
);
}
}
}
@Override
public
RefundVO
merchantRefund
(
BrandMerchantRefundParams
params
)
{
StudioCashierRecord
pay
=
studioCashierRecordRpService
.
getById
(
Long
.
parseLong
(
params
.
getPayTransNo
()))
...
...
@@ -366,8 +401,49 @@ public class PayServiceImpl implements PayService {
return
req
;
}
private
void
sendPaySuccessMessage
(
PayEvent
event
)
{
// EventAgent.of(SendCommonMsgEvent.class).triggerEvent();
private
void
sendPaySuccessMessage
(
PayEvent
e
)
{
Long
studioId
=
e
.
getExtra
().
getLong
(
"studioId"
);
String
buyerName
=
e
.
getExtra
().
getString
(
"buyerName"
);
// 有乐动收银权限的账户
Set
<
Long
>
targetIds
=
permissionRpcService
.
getUserIdByCode
(
AuthDomainEnum
.
FITNESS_ADMIN
.
getCode
(),
TenantTypeEnum
.
STUDIO
.
buildKey
(
studioId
),
"FitXmPay"
,
false
);
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
(
"buyerName"
,
buyerName
);
paramMap
.
put
(
"amount"
,
e
.
getAmount
());
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
(
studioId
);
event
.
setBizType
(
"CASHIER_PAY_SUCCESS"
);
event
.
setParams
(
paramList
);
EventAgent
.
of
(
SendCommonMsgEvent
.
class
).
triggerEvent
(
event
);
}
private
boolean
isPaying
(
BrandCashierTransStateEnum
state
)
{
return
BrandCashierTransStateEnum
.
PAYING
==
state
||
BrandCashierTransStateEnum
.
PAY_INIT
==
state
;
}
private
boolean
isPayFinished
(
BrandCashierTransStateEnum
state
)
{
return
isPaySuccess
(
state
)
||
isPayFail
(
state
);
}
private
boolean
isPayFail
(
BrandCashierTransStateEnum
state
)
{
return
BrandCashierTransStateEnum
.
PAY_FAIL
==
state
;
}
private
boolean
isPaySuccess
(
BrandCashierTransStateEnum
state
)
{
return
BrandCashierTransStateEnum
.
PAY_SUCCESS
==
state
||
BrandCashierTransStateEnum
.
PAY_IN
==
state
;
}
@Data
...
...
service/src/main/java/com/jiejing/fitness/finance/service/rpc/PermissionRpcService.java
0 → 100644
View file @
9f4cd557
package
com
.
jiejing
.
fitness
.
finance
.
service
.
rpc
;
import
com.jiejing.common.model.JsonResult
;
import
com.jiejing.permcenter.api.config.request.QueryUserIdByCodeRequest
;
import
com.jiejing.permcenter.api.perm.AuthorityPermApi
;
import
java.util.HashSet
;
import
java.util.Optional
;
import
java.util.Set
;
import
javax.annotation.Resource
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
/**
* @author chengyubing
* @since 2024/4/17 17:20
*/
@Slf4j
@Service
public
class
PermissionRpcService
{
@Resource
private
AuthorityPermApi
authorityPermApi
;
/**
* 查询改作用域下具有改权限的人
*
* @param domain 作用域
* @param tenantKey key
* @param permissionCode 权限code
* @param includeSubTree 是否包含下属子权限点
*/
public
Set
<
Long
>
getUserIdByCode
(
String
domain
,
String
tenantKey
,
String
permissionCode
,
boolean
includeSubTree
)
{
QueryUserIdByCodeRequest
request
=
QueryUserIdByCodeRequest
.
builder
()
.
domain
(
domain
).
tenantKey
(
tenantKey
)
.
permissionCode
(
permissionCode
).
includeSubTree
(
includeSubTree
).
build
();
JsonResult
<
Set
<
Long
>>
result
=
authorityPermApi
.
queryUserIdByCode
(
request
);
return
Optional
.
ofNullable
(
result
.
getResult
()).
orElse
(
new
HashSet
<>(
1
));
}
}
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