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
68b952f3
Commit
68b952f3
authored
Apr 11, 2024
by
程裕兵
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:pay order type
parent
d227d82d
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
237 additions
and
10 deletions
+237
-10
api/src/main/java/com/jiejing/fitness/finance/api/pay/FitPayApi.java
+4
-3
api/src/main/java/com/jiejing/fitness/finance/api/pay/FitPayApiFallback.java
+3
-1
api/src/main/java/com/jiejing/fitness/finance/api/pay/request/JsPayRequest.java
+21
-0
api/src/main/java/com/jiejing/fitness/finance/api/pay/request/MiniPayRequest.java
+21
-0
api/src/main/java/com/jiejing/fitness/finance/api/pay/request/NativePayRequest.java
+58
-0
app/src/main/java/com/jiejing/fitness/finance/app/controller/pay/FitPayController.java
+20
-4
service/src/main/java/com/jiejing/fitness/finance/service/pay/PayService.java
+9
-0
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/PayServiceImpl.java
+43
-2
service/src/main/java/com/jiejing/fitness/finance/service/pay/params/NativePayParams.java
+58
-0
No files found.
api/src/main/java/com/jiejing/fitness/finance/api/pay/FitPayApi.java
View file @
68b952f3
package
com
.
jiejing
.
fitness
.
finance
.
api
.
pay
;
import
com.jiejing.common.model.JsonResult
;
import
com.jiejing.fitness.finance.api.pay.request.NativePayRequest
;
import
com.jiejing.paycenter.api.pay.request.PayRequest
;
import
com.jiejing.paycenter.api.pay.request.SyncPayRequest
;
import
com.jiejing.paycenter.common.model.vo.PayVO
;
...
...
@@ -17,9 +18,9 @@ public interface FitPayApi {
String
TAG
=
"乐动支付-支付管理"
;
@ApiOperation
(
value
=
"支付"
,
tags
=
{
TAG
})
@PostMapping
(
value
=
"/private/pay/
p
ay"
)
JsonResult
<
PayVO
>
pay
(
PayRequest
request
);
@ApiOperation
(
value
=
"
Native
支付"
,
tags
=
{
TAG
})
@PostMapping
(
value
=
"/private/pay/
nativeP
ay"
)
JsonResult
<
PayVO
>
nativePay
(
Native
PayRequest
request
);
@ApiOperation
(
value
=
"同步支付状态"
,
tags
=
{
TAG
})
@PostMapping
(
value
=
"/private/pay/get"
)
...
...
api/src/main/java/com/jiejing/fitness/finance/api/pay/FitPayApiFallback.java
View file @
68b952f3
package
com
.
jiejing
.
fitness
.
finance
.
api
.
pay
;
import
com.jiejing.common.model.JsonResult
;
import
com.jiejing.fitness.finance.api.pay.request.NativePayRequest
;
import
com.jiejing.paycenter.api.pay.request.PayRequest
;
import
com.jiejing.paycenter.api.pay.request.SyncPayRequest
;
import
com.jiejing.paycenter.common.model.vo.PayVO
;
...
...
@@ -17,8 +18,9 @@ public class FitPayApiFallback implements FallbackFactory<FitPayApi> {
@Override
public
FitPayApi
create
(
Throwable
throwable
)
{
return
new
FitPayApi
()
{
@Override
public
JsonResult
<
PayVO
>
pay
(
PayRequest
request
)
{
public
JsonResult
<
PayVO
>
nativePay
(
Native
PayRequest
request
)
{
return
JsonResult
.
rpcError
();
}
...
...
api/src/main/java/com/jiejing/fitness/finance/api/pay/request/JsPayRequest.java
0 → 100644
View file @
68b952f3
package
com
.
jiejing
.
fitness
.
finance
.
api
.
pay
.
request
;
import
io.swagger.annotations.ApiModel
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel
(
description
=
"Js支付请求"
)
public
class
JsPayRequest
{
}
\ No newline at end of file
api/src/main/java/com/jiejing/fitness/finance/api/pay/request/MiniPayRequest.java
0 → 100644
View file @
68b952f3
package
com
.
jiejing
.
fitness
.
finance
.
api
.
pay
.
request
;
import
io.swagger.annotations.ApiModel
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel
(
description
=
"小程序支付请求"
)
public
class
MiniPayRequest
{
}
\ No newline at end of file
api/src/main/java/com/jiejing/fitness/finance/api/pay/request/NativePayRequest.java
0 → 100644
View file @
68b952f3
package
com
.
jiejing
.
fitness
.
finance
.
api
.
pay
.
request
;
import
com.alibaba.fastjson.JSONObject
;
import
com.jiejing.fitness.enums.finance.PayOrderTypeEnum
;
import
com.jiejing.paycenter.common.enums.common.PayChannelEnums
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.math.BigDecimal
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel
(
description
=
"Native支付请求"
)
public
class
NativePayRequest
{
@ApiModelProperty
(
name
=
"业务订单号"
,
required
=
true
)
@NotBlank
(
message
=
"业务订单号不能为空"
)
private
String
orderNo
;
@ApiModelProperty
(
name
=
"支付渠道"
,
required
=
true
)
@NotNull
(
message
=
"支付渠道不能为空"
)
private
PayChannelEnums
channel
;
@ApiModelProperty
(
name
=
"业务订单类型"
,
required
=
true
)
@NotNull
(
message
=
"业务订单类型不能为空"
)
private
PayOrderTypeEnum
orderType
;
@ApiModelProperty
(
name
=
"商品名称"
,
required
=
true
)
@NotBlank
(
message
=
"商品名称不能为空"
)
private
String
goods
;
@ApiModelProperty
(
name
=
"支付总金额(元)"
,
required
=
true
)
@NotNull
(
message
=
"支付总金额不能为空"
)
private
BigDecimal
amount
;
@ApiModelProperty
(
name
=
"过期时间(单位:秒)"
,
required
=
true
)
@NotNull
(
message
=
"过期时间不能为空"
)
@Min
(
value
=
60
,
message
=
"过期时间最低60秒"
)
private
Integer
timeExpire
;
@ApiModelProperty
(
name
=
"业务扩展信息"
,
required
=
true
)
@NotNull
(
message
=
"业务参扩展信息不能为空"
)
private
JSONObject
extra
;
}
\ No newline at end of file
app/src/main/java/com/jiejing/fitness/finance/app/controller/pay/FitPayController.java
View file @
68b952f3
package
com
.
jiejing
.
fitness
.
finance
.
app
.
controller
.
pay
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.toolkit.IdWorker
;
import
com.jiejing.common.exception.BizException
;
import
com.jiejing.common.model.JsonResult
;
import
com.jiejing.common.utils.convert.BeanUtil
;
import
com.jiejing.fitness.enums.finance.PayOrderTypeEnum
;
import
com.jiejing.fitness.finance.api.pay.FitPayApi
;
import
com.jiejing.fitness.finance.api.pay.request.NativePayRequest
;
import
com.jiejing.fitness.finance.service.enums.FinanceErrorEnums
;
import
com.jiejing.fitness.finance.service.pay.PayService
;
import
com.jiejing.fitness.finance.service.pay.params.NativePayParams
;
import
com.jiejing.paycenter.api.pay.PayApi
;
import
com.jiejing.paycenter.api.pay.request.PayRequest
;
import
com.jiejing.paycenter.api.pay.request.SyncPayRequest
;
import
com.jiejing.paycenter.common.enums.pay.PayTypeEnums
;
import
com.jiejing.paycenter.common.model.vo.PayVO
;
import
io.swagger.annotations.ApiOperation
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
javax.annotation.Resource
;
import
javax.validation.Valid
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -21,12 +33,16 @@ import org.springframework.web.bind.annotation.RestController;
public
class
FitPayController
implements
FitPayApi
{
@Resource
private
PayService
payService
;
@Resource
private
PayApi
payApi
;
@ApiOperation
(
value
=
"支付"
,
tags
=
{
TAG
})
@PostMapping
(
value
=
"/private/pay/pay"
)
public
JsonResult
<
PayVO
>
pay
(
@RequestBody
@Valid
PayRequest
request
)
{
return
payApi
.
pay
(
request
);
@ApiOperation
(
value
=
"Native支付"
,
tags
=
{
TAG
})
@PostMapping
(
value
=
"/private/pay/nativePay"
)
@Override
public
JsonResult
<
PayVO
>
nativePay
(
@RequestBody
@Valid
NativePayRequest
request
)
{
return
JsonResult
.
success
(
payService
.
nativePay
(
BeanUtil
.
map
(
request
,
NativePayParams
.
class
)));
}
@ApiOperation
(
value
=
"同步支付状态"
,
tags
=
{
TAG
})
...
...
service/src/main/java/com/jiejing/fitness/finance/service/pay/PayService.java
View file @
68b952f3
package
com
.
jiejing
.
fitness
.
finance
.
service
.
pay
;
import
com.jiejing.fitness.finance.service.pay.params.NativePayParams
;
import
com.jiejing.fitness.finance.service.pay.params.StudioMerchantPayParams
;
import
com.jiejing.fitness.finance.service.pay.params.BrandMerchantRefundParams
;
import
com.jiejing.paycenter.common.model.vo.PayVO
;
...
...
@@ -15,6 +16,14 @@ import java.util.Date;
public
interface
PayService
{
/**
* Native支付
*
* @param params 参数
* @return 结果
*/
PayVO
nativePay
(
NativePayParams
params
);
/**
* 支付
*
* @param params 请求参数
...
...
service/src/main/java/com/jiejing/fitness/finance/service/pay/impl/PayServiceImpl.java
View file @
68b952f3
...
...
@@ -2,12 +2,14 @@ package com.jiejing.fitness.finance.service.pay.impl;
import
static
java
.
util
.
stream
.
Collectors
.
toList
;
import
com.baomidou.mybatisplus.core.toolkit.IdWorker
;
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.finance.BrandCashierTransStateEnum
;
import
com.jiejing.fitness.enums.finance.PartyTypeEnum
;
import
com.jiejing.fitness.finance.api.pay.request.NativePayRequest
;
import
com.jiejing.fitness.finance.repository.entity.StudioCashierRecord
;
import
com.jiejing.fitness.finance.repository.entity.PartyToMerchant
;
import
com.jiejing.fitness.finance.repository.entity.StudioCheckSettleRecord
;
...
...
@@ -22,12 +24,14 @@ import com.jiejing.fitness.finance.service.enums.FinanceErrorEnums;
import
com.jiejing.fitness.finance.service.pay.PayService
;
import
com.jiejing.fitness.finance.service.pay.convert.PayConvert
;
import
com.jiejing.fitness.finance.service.pay.params.BrandMerchantRefundParams
;
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.StudioRpcService
;
import
com.jiejing.fitness.finance.service.utils.DingUtil
;
import
com.jiejing.paycenter.common.enums.common.TransStateEnums
;
import
com.jiejing.paycenter.common.enums.pay.PayTypeEnums
;
import
com.jiejing.paycenter.common.model.vo.MerchantVO
;
import
com.jiejing.paycenter.api.pay.request.PayRequest
;
import
com.jiejing.paycenter.api.pay.request.RefundPayRequest
;
...
...
@@ -86,6 +90,11 @@ public class PayServiceImpl implements PayService {
private
StudioCheckSettleRecordRpService
studioCheckSettleRecordRpService
;
@Override
public
PayVO
nativePay
(
NativePayParams
params
)
{
return
payRpcService
.
pay
(
convertNativePay
(
params
));
}
@Override
public
PayVO
merchantPay
(
StudioMerchantPayParams
params
)
{
StudioVO
studio
=
studioRpcService
.
getStudio
(
params
.
getStudioId
());
PartyToMerchant
relation
=
partyToMerchantRpService
.
getByStudioId
(
studio
.
getId
(),
channel
);
...
...
@@ -104,6 +113,9 @@ public class PayServiceImpl implements PayService {
@Override
public
void
payCallback
(
PayEvent
event
)
{
if
(!
event
.
getChannelNo
().
equals
(
channel
))
{
return
;
}
StudioCashierRecord
record
=
studioCashierRecordRpService
.
getById
(
Long
.
parseLong
(
event
.
getTransNo
()))
.
orElse
(
null
);
if
(
null
==
record
)
{
...
...
@@ -170,8 +182,10 @@ public class PayServiceImpl implements PayService {
// 对账成功
Map
<
Long
,
BigDecimal
>
studioTransAmountMap
=
studioCashierRecordRpService
.
sumMerchantPaySuccessGroupByStudioId
(
apply
.
getMerchantId
(),
startDate
,
endDate
);
Map
<
Long
,
StudioVO
>
studioMap
=
studioRpcService
.
mapStudio
(
Lists
.
newArrayList
(
studioTransAmountMap
.
keySet
()));
studioSettleRecordRpService
.
insertAll
(
PayConvert
.
convertSettle
(
apply
,
studioTransAmountMap
,
vo
,
studioMap
));
Map
<
Long
,
StudioVO
>
studioMap
=
studioRpcService
.
mapStudio
(
Lists
.
newArrayList
(
studioTransAmountMap
.
keySet
()));
studioSettleRecordRpService
.
insertAll
(
PayConvert
.
convertSettle
(
apply
,
studioTransAmountMap
,
vo
,
studioMap
));
if
(
TransStateEnums
.
SUCCESS
==
TransStateEnums
.
getByCode
(
vo
.
getTransState
()))
{
// 结算成功,则更新收银流水状态为记录为入账成功
this
.
updatePayIn
(
apply
.
getMerchantId
(),
startDate
,
endDate
);
...
...
@@ -248,4 +262,31 @@ public class PayServiceImpl implements PayService {
log
.
info
(
"consumer merchant apply finished"
);
}
private
String
getChannelNo
(
NativePayParams
params
)
{
switch
(
params
.
getChannel
())
{
case
WX:
return
"003"
;
case
ALI:
return
"002"
;
default
:
throw
new
BizException
(
FinanceErrorEnums
.
NOT_SUPPORT_TYPE
);
}
}
private
PayRequest
convertNativePay
(
NativePayParams
params
)
{
PayRequest
req
=
new
PayRequest
();
req
.
setChannelNo
(
getChannelNo
(
params
));
req
.
setTransNo
(
IdWorker
.
getIdStr
());
req
.
setAmount
(
params
.
getAmount
());
req
.
setPayType
(
PayTypeEnums
.
NATIVE
);
req
.
setGoods
(
params
.
getGoods
());
req
.
setOrderNo
(
params
.
getOrderNo
());
req
.
setOrderType
(
params
.
getOrderType
().
getCode
());
req
.
setTimeExpire
(
params
.
getTimeExpire
());
req
.
setTransTime
(
new
Date
());
req
.
setExtra
(
params
.
getExtra
());
return
req
;
}
}
service/src/main/java/com/jiejing/fitness/finance/service/pay/params/NativePayParams.java
0 → 100644
View file @
68b952f3
package
com
.
jiejing
.
fitness
.
finance
.
service
.
pay
.
params
;
import
com.alibaba.fastjson.JSONObject
;
import
com.jiejing.fitness.enums.finance.PayOrderTypeEnum
;
import
com.jiejing.paycenter.common.enums.common.PayChannelEnums
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.math.BigDecimal
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel
(
description
=
"Native支付请求"
)
public
class
NativePayParams
{
@ApiModelProperty
(
name
=
"业务订单号"
,
required
=
true
)
@NotBlank
(
message
=
"业务订单号不能为空"
)
private
String
orderNo
;
@ApiModelProperty
(
name
=
"支付渠道"
,
required
=
true
)
@NotNull
(
message
=
"支付渠道不能为空"
)
private
PayChannelEnums
channel
;
@ApiModelProperty
(
name
=
"业务订单类型"
,
required
=
true
)
@NotNull
(
message
=
"业务订单类型不能为空"
)
private
PayOrderTypeEnum
orderType
;
@ApiModelProperty
(
name
=
"商品名称"
,
required
=
true
)
@NotBlank
(
message
=
"商品名称不能为空"
)
private
String
goods
;
@ApiModelProperty
(
name
=
"支付总金额(元)"
,
required
=
true
)
@NotNull
(
message
=
"支付总金额不能为空"
)
private
BigDecimal
amount
;
@ApiModelProperty
(
name
=
"过期时间(单位:秒)"
,
required
=
true
)
@NotNull
(
message
=
"过期时间不能为空"
)
@Min
(
value
=
60
,
message
=
"过期时间最低60秒"
)
private
Integer
timeExpire
;
@ApiModelProperty
(
name
=
"业务扩展信息"
,
required
=
true
)
@NotNull
(
message
=
"业务参扩展信息不能为空"
)
private
JSONObject
extra
;
}
\ No newline at end of file
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