Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
Project
Project
Details
Activity
Releases
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
youjj
cloud-platform
Commits
6055e6c1
Commit
6055e6c1
authored
Oct 12, 2019
by
libin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提现
parent
88c275cb
Changes
25
Show whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
645 additions
and
232 deletions
+645
-232
BaseException.java
...thub/wxiaoqi/security/common/exception/BaseException.java
+14
-1
WalletCathListDTO.java
.../github/wxiaoqi/security/admin/dto/WalletCathListDTO.java
+8
-1
WalletDetailListDTO.java
...ithub/wxiaoqi/security/admin/dto/WalletDetailListDTO.java
+4
-1
MyWalletCath.java
...om/github/wxiaoqi/security/admin/entity/MyWalletCath.java
+5
-5
MyWalletDetail.java
.../github/wxiaoqi/security/admin/entity/MyWalletDetail.java
+5
-1
PayAccountVo.java
...va/com/github/wxiaoqi/security/admin/vo/PayAccountVo.java
+29
-0
WalletCathAdminVo.java
...m/github/wxiaoqi/security/admin/vo/WalletCathAdminVo.java
+9
-2
WalletCathDetailVo.java
.../github/wxiaoqi/security/admin/vo/WalletCathDetailVo.java
+18
-1
WalletDetailAdminVo.java
...github/wxiaoqi/security/admin/vo/WalletDetailAdminVo.java
+3
-0
AppUserSellingWaterBiz.java
...ub/wxiaoqi/security/admin/biz/AppUserSellingWaterBiz.java
+7
-1
MyWalletBiz.java
...va/com/github/wxiaoqi/security/admin/biz/MyWalletBiz.java
+274
-179
MyWalletCathBiz.java
...om/github/wxiaoqi/security/admin/biz/MyWalletCathBiz.java
+19
-11
MyWalletController.java
...ithub/wxiaoqi/security/admin/rest/MyWalletController.java
+13
-0
WalletCathAdminController.java
.../security/admin/rest/admin/WalletCathAdminController.java
+1
-2
MyWalletCathMapper.xml
...ce-admin/src/main/resources/mapper/MyWalletCathMapper.xml
+1
-0
MyWalletDetailMapper.xml
...-admin/src/main/resources/mapper/MyWalletDetailMapper.xml
+1
-0
ThirdFeign.java
...in/java/com/xxfc/platform/universal/feign/ThirdFeign.java
+4
-4
FundPayVo.java
...c/main/java/com/xxfc/platform/universal/vo/FundPayVo.java
+14
-0
WXSuppToUserPay.java
...m/xxfc/platform/universal/weixin/api/WXSuppToUserPay.java
+4
-4
AliNeedPayErrorEnum.java
...atform/universal/weixin/constant/AliNeedPayErrorEnum.java
+33
-0
PaySubErrorCodeEnum.java
...atform/universal/weixin/constant/PaySubErrorCodeEnum.java
+33
-0
WxNeedPayErrorEnum.java
...latform/universal/weixin/constant/WxNeedPayErrorEnum.java
+42
-0
WxResponseProperties.java
...tform/universal/weixin/constant/WxResponseProperties.java
+18
-0
OrderPayBiz.java
...ain/java/com/xxfc/platform/universal/biz/OrderPayBiz.java
+78
-19
OrderPayController.java
...xfc/platform/universal/controller/OrderPayController.java
+8
-0
No files found.
ace-common/src/main/java/com/github/wxiaoqi/security/common/exception/BaseException.java
View file @
6055e6c1
...
...
@@ -11,7 +11,7 @@ import java.util.Set;
*/
public
class
BaseException
extends
RuntimeException
{
private
int
status
=
200
;
private
String
subCode
;
public
int
getStatus
()
{
return
status
;
}
...
...
@@ -20,6 +20,14 @@ public class BaseException extends RuntimeException {
this
.
status
=
status
;
}
public
String
getSubCode
()
{
return
subCode
;
}
public
void
setSubCode
(
String
subCode
)
{
this
.
subCode
=
subCode
;
}
public
BaseException
()
{
}
...
...
@@ -28,6 +36,11 @@ public class BaseException extends RuntimeException {
this
.
status
=
status
;
}
public
BaseException
(
String
message
,
String
subCode
){
super
(
message
);
this
.
subCode
=
subCode
;
}
public
BaseException
(
String
message
)
{
super
(
message
);
}
...
...
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/dto/WalletCathListDTO.java
View file @
6055e6c1
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
...
...
@@ -12,6 +14,8 @@ import java.math.BigDecimal;
* @data 2019/7/17 20:40
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
WalletCathListDTO
{
private
Long
id
;
...
...
@@ -41,9 +45,12 @@ public class WalletCathListDTO {
@ApiModelProperty
(
value
=
"审核日期"
)
private
Long
finishTime
;
@ApiModelProperty
(
"单号"
)
@ApiModelProperty
(
"
第三方
单号"
)
private
String
cono
;
@ApiModelProperty
(
"提现单号"
)
private
String
orderNo
;
@ApiModelProperty
(
value
=
"用户账号"
)
private
String
accountNumber
;
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/dto/WalletDetailListDTO.java
View file @
6055e6c1
...
...
@@ -52,9 +52,12 @@ public class WalletDetailListDTO {
private
String
activityName
;
@ApiModelProperty
(
value
=
"单号"
)
@ApiModelProperty
(
value
=
"
第三方
单号"
)
private
Integer
cono
;
@ApiModelProperty
(
value
=
"提现单号"
)
private
String
withDrawOrderNo
;
@ApiModelProperty
(
value
=
"操作时间"
,
hidden
=
true
)
private
Long
crtTime
;
...
...
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/entity/MyWalletCath.java
View file @
6055e6c1
...
...
@@ -47,11 +47,9 @@ public class MyWalletCath implements Serializable {
@ApiModelProperty
(
value
=
"用户账号"
)
private
String
accountNumber
;
/**
* 第三方订单号:如微信,支付宝,银行卡等
*/
@Column
(
name
=
"cono"
)
@ApiModelProperty
(
value
=
"
第三方订单号:如微信,支付宝,银行卡等
"
)
@ApiModelProperty
(
value
=
"
提现单号
"
)
private
String
cono
;
...
...
@@ -122,5 +120,7 @@ public class MyWalletCath implements Serializable {
@ApiModelProperty
(
value
=
"操作者ID"
)
private
String
updUser
;
@Column
(
name
=
"order_no"
)
@ApiModelProperty
(
value
=
"第三方订单号:如微信,支付宝,银行卡等"
)
private
String
orderNo
;
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/entity/MyWalletDetail.java
View file @
6055e6c1
...
...
@@ -109,4 +109,8 @@ public class MyWalletDetail implements Serializable {
@ApiModelProperty
(
value
=
"操作时间"
,
hidden
=
true
)
private
Long
crtTime
;
@ApiModelProperty
(
value
=
"提现"
)
@Column
(
name
=
"with_draw_order_no"
)
private
String
withDrawOrderNo
;
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/PayAccountVo.java
0 → 100644
View file @
6055e6c1
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/10 17:52
*/
@Data
@Builder
(
toBuilder
=
true
)
@AllArgsConstructor
@NoArgsConstructor
public
class
PayAccountVo
{
@ApiModelProperty
(
value
=
"微信用户名 | 支付宝帐号"
)
private
String
accountDesc
;
@ApiModelProperty
(
"微信用户名 | 支付宝账号"
)
private
String
account
;
@ApiModelProperty
(
value
=
"帐户类型 0:微信 1:支付宝 2:银行卡"
)
private
Integer
accountType
;
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/WalletCathAdminVo.java
View file @
6055e6c1
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
...
...
@@ -12,6 +14,8 @@ import java.math.BigDecimal;
* @data 2019/7/17 20:22
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
WalletCathAdminVo
{
private
Long
id
;
...
...
@@ -37,10 +41,13 @@ public class WalletCathAdminVo {
@ApiModelProperty
(
value
=
"审核日期"
)
private
Long
finishTime
;
@ApiModelProperty
(
"单号"
)
private
String
con
o
;
@ApiModelProperty
(
"
提现
单号"
)
private
String
withDrawOrderN
o
;
@ApiModelProperty
(
value
=
"用户账号"
)
private
String
accountNumber
;
@ApiModelProperty
(
value
=
"用户账号描述"
)
private
String
accountNumberDesc
;
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/WalletCathDetailVo.java
View file @
6055e6c1
...
...
@@ -3,6 +3,8 @@ package com.github.wxiaoqi.security.admin.vo;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* @author libin
* @version 1.0
...
...
@@ -30,9 +32,24 @@ public class WalletCathDetailVo {
@ApiModelProperty
(
value
=
"审核日期"
)
private
Long
finishTime
;
@ApiModelProperty
(
value
=
"帐号"
)
@ApiModelProperty
(
value
=
"帐号
:支付宝帐号|微信名
"
)
private
String
accountNumber
;
@ApiModelProperty
(
"审核失败原因"
)
private
String
reason
;
@ApiModelProperty
(
value
=
"提现类别,第三方提现类别(0-微信,1-支付宝,2-银行卡)"
)
private
Integer
cathType
;
@ApiModelProperty
(
value
=
"提现单号"
)
private
String
orderNo
;
@ApiModelProperty
(
value
=
"手续费"
)
private
BigDecimal
commission
;
@ApiModelProperty
(
value
=
"提现金额"
)
private
BigDecimal
amount
;
@ApiModelProperty
(
value
=
"到账金额"
)
private
BigDecimal
realAmount
;
}
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/vo/WalletDetailAdminVo.java
View file @
6055e6c1
...
...
@@ -46,6 +46,9 @@ public class WalletDetailAdminVo {
@ApiModelProperty
(
value
=
"单号"
)
private
Integer
cono
;
@ApiModelProperty
(
value
=
"提现单号"
)
private
String
withDrawOrderNo
;
@ApiModelProperty
(
value
=
"操作时间"
,
hidden
=
true
)
private
Long
crtTime
;
...
...
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/AppUserSellingWaterBiz.java
View file @
6055e6c1
...
...
@@ -184,7 +184,9 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
BigDecimal
amount
=
new
BigDecimal
(
"0.00"
);
Integer
userId
=
0
;
Integer
orderType
=
0
;
String
orderNo
=
""
;
if
(
list
.
size
()
>
0
)
{
orderNo
=
list
.
get
(
0
).
getOrderNo
();
for
(
AppUserSellingWater
sellingWater
:
list
)
{
Integer
id
=
sellingWater
.
getId
();
orderType
=
sellingWater
.
getOrderType
();
...
...
@@ -204,6 +206,7 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
detail
.
setUserId
(
userId
);
detail
.
setAmount
(
amount
);
detail
.
setCono
(
orderId
);
detail
.
setWithDrawOrderNo
(
orderNo
);
detail
.
setSource
(
1
);
myWaterBiz
.
updMyWater
(
detail
);
if
(
orderType
==
1
||
orderType
==
2
)
{
...
...
@@ -229,7 +232,9 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
BigDecimal
unbooked
=
new
BigDecimal
(
"0.00"
);
Integer
userId
=
0
;
Integer
orderType
=
0
;
String
orderNo
=
""
;
if
(
list
.
size
()
>
0
)
{
orderNo
=
list
.
get
(
0
).
getOrderNo
();
for
(
AppUserSellingWater
sellingWater
:
list
)
{
Integer
id
=
sellingWater
.
getId
();
orderType
=
sellingWater
.
getOrderType
();
...
...
@@ -251,6 +256,7 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
detail
.
setUserId
(
userId
);
detail
.
setAmount
(
amount
);
detail
.
setCono
(
orderId
);
detail
.
setWithDrawOrderNo
(
orderNo
);
detail
.
setSource
(
1
);
myWaterBiz
.
updMyWater
(
detail
);
}
...
...
@@ -370,7 +376,7 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
sellingWalletVo
.
setUsername
(
username
);
if
(
userIdAndAppUserDetailMap
!=
null
)
{
AppUserDetail
appUserDetail
=
userIdAndAppUserDetailMap
.
get
(
sellingWalletVo
.
getSourceId
());
sellingWalletVo
.
setNickName
(
appUserDetail
==
null
?
""
:
appUserDetail
.
get
Nick
name
());
sellingWalletVo
.
setNickName
(
appUserDetail
==
null
?
""
:
appUserDetail
.
get
Real
name
());
sellingWalletVo
.
setHeadUrl
(
appUserDetail
==
null
?
""
:
appUserDetail
.
getHeadimgurl
());
}
//取消单
...
...
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MyWalletBiz.java
View file @
6055e6c1
package
com
.
github
.
wxiaoqi
.
security
.
admin
.
biz
;
import
cn.hutool.core.lang.Snowflake
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.github.wxiaoqi.security.admin.dto.WalletCathSumDto
;
...
...
@@ -10,29 +11,44 @@ import com.github.wxiaoqi.security.admin.mapper.MyWalletMapper;
import
com.github.wxiaoqi.security.admin.rpc.service.AppPermissionService
;
import
com.github.wxiaoqi.security.admin.vo.AppletWalletVo
;
import
com.github.wxiaoqi.security.admin.vo.ApplyCathVo
;
import
com.github.wxiaoqi.security.admin.vo.PayAccountVo
;
import
com.github.wxiaoqi.security.admin.vo.WalletPageVo
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.constant.UserConstant
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.util.ClientUtil
;
import
com.github.wxiaoqi.security.common.util.OrderUtil
;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.github.wxiaoqi.security.common.vo.PageDataVO
;
import
com.xxfc.platform.app.entity.vo.WithDrawRuleVo
;
import
com.xxfc.platform.app.feign.ConfigFeign
;
import
com.xxfc.platform.im.utils.StringUtil
;
import
com.xxfc.platform.universal.feign.ThirdFeign
;
import
com.xxfc.platform.universal.vo.FundPayVo
;
import
com.xxfc.platform.universal.weixin.constant.PaySubErrorCodeEnum
;
import
lombok.extern.slf4j.Slf4j
;
import
net.bytebuddy.implementation.bytecode.Throw
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
tk.mybatis.mapper.entity.Example
;
import
javax.servlet.http.HttpServletRequest
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.Instant
;
import
java.time.LocalDate
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.concurrent.Executors
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -44,7 +60,7 @@ import java.util.stream.Collectors;
@Transactional
@Service
@Slf4j
public
class
MyWalletBiz
extends
BaseBiz
<
MyWalletMapper
,
MyWallet
>
{
public
class
MyWalletBiz
extends
BaseBiz
<
MyWalletMapper
,
MyWallet
>
implements
InitializingBean
{
@Autowired
private
MyWalletDetailBiz
myWalletDetailBiz
;
...
...
@@ -62,11 +78,20 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
private
ConfigFeign
configFeign
;
@Autowired
private
AppUserAlipayBiz
alipay
Biz
;
private
AppUserDetailBiz
appUserDetail
Biz
;
@Autowired
private
AppUserLoginBiz
appUserLoginBiz
;
@Autowired
private
AppUserAlipayBiz
appUserAlipayBiz
;
@Autowired
private
ThirdFeign
thirdFeign
;
private
Snowflake
snowflake
;
private
DateTimeFormatter
dateTimeFormatter
;
private
BCryptPasswordEncoder
encoder
=
new
BCryptPasswordEncoder
(
12
);
...
...
@@ -81,10 +106,10 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
List
<
MyWallet
>
wallets
=
mapper
.
selectByExample
(
example
);
MyWallet
myWallet
=
wallets
.
get
(
0
);
appletWalletVo
.
setBalance
(
myWallet
.
getBalance
()
==
null
?
new
BigDecimal
(
0
):
myWallet
.
getBalance
());
appletWalletVo
.
setTodayAmount
(
myWallet
.
getTodayAmount
()
==
null
?
new
BigDecimal
(
0
):
myWallet
.
getTodayAmount
());
appletWalletVo
.
setTotalAmount
(
myWallet
.
getTotalAmount
()
==
null
?
new
BigDecimal
(
0
):
myWallet
.
getTotalAmount
());
appletWalletVo
.
setUnbooked
(
myWallet
.
getUnbooked
()
==
null
?
new
BigDecimal
(
0
):
myWallet
.
getUnbooked
());
appletWalletVo
.
setBalance
(
myWallet
.
getBalance
()
==
null
?
new
BigDecimal
(
0
)
:
myWallet
.
getBalance
());
appletWalletVo
.
setTodayAmount
(
myWallet
.
getTodayAmount
()
==
null
?
new
BigDecimal
(
0
)
:
myWallet
.
getTodayAmount
());
appletWalletVo
.
setTotalAmount
(
myWallet
.
getTotalAmount
()
==
null
?
new
BigDecimal
(
0
)
:
myWallet
.
getTotalAmount
());
appletWalletVo
.
setUnbooked
(
myWallet
.
getUnbooked
()
==
null
?
new
BigDecimal
(
0
)
:
myWallet
.
getUnbooked
());
appletWalletVo
.
setUserId
(
myWallet
.
getUserId
());
return
appletWalletVo
;
}
...
...
@@ -94,34 +119,33 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
PageDataVO
<
WalletPageVo
>
walletPageVo
=
new
PageDataVO
<>();
PageDataVO
<
WalletListDTO
>
walletPage
=
PageDataVO
.
pageInfo
(
walletFindDTO
.
getPage
(),
walletFindDTO
.
getLimit
(),
()
->
mapper
.
selectByPhoneOrUserName
(
walletFindDTO
.
getPhone
(),
walletFindDTO
.
getUsername
()));
List
<
WalletListDTO
>
wallets
=
walletPage
.
getData
();
if
(
CollectionUtils
.
isEmpty
(
wallets
))
{
if
(
CollectionUtils
.
isEmpty
(
wallets
))
{
return
walletPageVo
;
}
List
<
Integer
>
userIds
=
wallets
.
stream
().
map
(
WalletListDTO:
:
getUserId
).
collect
(
Collectors
.
toList
());
Map
<
Integer
,
BigDecimal
>
userIdAndTotalConsumptionMap
=
myWalletDetailBiz
.
finduserIdAndPersonalTotalConsumptionMapByUserIds
(
userIds
);
Map
<
Integer
,
BigDecimal
>
userIdAndWithdrawalingMap
=
myWalletCathBiz
.
findUserIdAndWithdrawalingMapByUserIds
(
userIds
);
Map
<
Integer
,
BigDecimal
>
userIdAndWithdrawalingMap
=
myWalletCathBiz
.
findUserIdAndWithdrawalingMapByUserIds
(
userIds
);
List
<
WalletPageVo
>
walletPageVos
=
new
ArrayList
<>();
WalletPageVo
walletpg
;
WalletPageVo
walletpg
;
for
(
WalletListDTO
wallet
:
wallets
)
{
walletpg
=
new
WalletPageVo
();
BeanUtils
.
copyProperties
(
wallet
,
walletpg
);
walletpg
.
setUsername
(
StringUtils
.
isEmpty
(
wallet
.
getRealname
())
?
wallet
.
getNickname
():
wallet
.
getRealname
());
BeanUtils
.
copyProperties
(
wallet
,
walletpg
);
walletpg
.
setUsername
(
StringUtils
.
isEmpty
(
wallet
.
getRealname
())
?
wallet
.
getNickname
()
:
wallet
.
getRealname
());
walletpg
.
setPhone
(
wallet
.
getUsername
());
BigDecimal
totalConsumpution
=
userIdAndTotalConsumptionMap
==
null
?
new
BigDecimal
(
0
):
userIdAndTotalConsumptionMap
.
get
(
wallet
.
getUserId
())==
null
?
new
BigDecimal
(
0
):
userIdAndTotalConsumptionMap
.
get
(
wallet
.
getUserId
());
BigDecimal
withDrawaling
=
userIdAndWithdrawalingMap
==
null
?
new
BigDecimal
(
0
):
userIdAndWithdrawalingMap
.
get
(
wallet
.
getUserId
())==
null
?
new
BigDecimal
(
0
):
userIdAndWithdrawalingMap
.
get
(
wallet
.
getUserId
());
BigDecimal
totalConsumpution
=
userIdAndTotalConsumptionMap
==
null
?
new
BigDecimal
(
0
)
:
userIdAndTotalConsumptionMap
.
get
(
wallet
.
getUserId
())
==
null
?
new
BigDecimal
(
0
)
:
userIdAndTotalConsumptionMap
.
get
(
wallet
.
getUserId
());
BigDecimal
withDrawaling
=
userIdAndWithdrawalingMap
==
null
?
new
BigDecimal
(
0
)
:
userIdAndWithdrawalingMap
.
get
(
wallet
.
getUserId
())
==
null
?
new
BigDecimal
(
0
)
:
userIdAndWithdrawalingMap
.
get
(
wallet
.
getUserId
());
walletpg
.
setWithdrawaling
(
withDrawaling
);
walletpg
.
setWithdrawals
(
walletpg
.
getWithdrawals
()
==
null
?
new
BigDecimal
(
0
):
walletpg
.
getWithdrawals
());
walletpg
.
setUnbooked
(
walletpg
.
getUnbooked
()
==
null
?
new
BigDecimal
(
0
):
walletpg
.
getUnbooked
());
walletpg
.
setTotalAmount
(
walletpg
.
getTodayAmount
()
==
null
?
new
BigDecimal
(
0
):
walletpg
.
getTotalAmount
());
walletpg
.
setWithdrawals
(
walletpg
.
getWithdrawals
()
==
null
?
new
BigDecimal
(
0
)
:
walletpg
.
getWithdrawals
());
walletpg
.
setUnbooked
(
walletpg
.
getUnbooked
()
==
null
?
new
BigDecimal
(
0
)
:
walletpg
.
getUnbooked
());
walletpg
.
setTotalAmount
(
walletpg
.
getTodayAmount
()
==
null
?
new
BigDecimal
(
0
)
:
walletpg
.
getTotalAmount
());
walletpg
.
setTotalConsumption
(
totalConsumpution
);
walletPageVos
.
add
(
walletpg
);
}
walletPageVos
.
sort
(
Comparator
.
comparing
(
WalletPageVo:
:
getTotalAmount
).
reversed
());
walletPageVo
.
setPageNum
(
walletFindDTO
.
getPage
());
walletPageVo
.
setPageSize
(
walletFindDTO
.
getLimit
());
...
...
@@ -132,113 +156,113 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
}
//检查手机号码是否正确
public
ObjectRestResponse
checkCode
(
String
phone
,
String
mobilecod
)
{
boolean
flag
=
false
;
String
key
=
permissionService
.
checkCodeByUsername
(
phone
,
mobilecod
);
if
(
StringUtils
.
isNotBlank
(
key
)){
flag
=
true
;
public
ObjectRestResponse
checkCode
(
String
phone
,
String
mobilecod
)
{
boolean
flag
=
false
;
String
key
=
permissionService
.
checkCodeByUsername
(
phone
,
mobilecod
);
if
(
StringUtils
.
isNotBlank
(
key
))
{
flag
=
true
;
}
return
ObjectRestResponse
.
succ
(
flag
);
}
//设置密码type 1-设置密码;2-修改密码
public
ObjectRestResponse
setPwd
(
Integer
userId
,
String
phone
,
String
mobilecod
,
String
password
,
Integer
type
)
{
if
(
StringUtils
.
isBlank
(
phone
)
||
StringUtils
.
isBlank
(
mobilecod
)||
StringUtils
.
isBlank
(
password
))
{
public
ObjectRestResponse
setPwd
(
Integer
userId
,
String
phone
,
String
mobilecod
,
String
password
,
Integer
type
)
{
if
(
StringUtils
.
isBlank
(
phone
)
||
StringUtils
.
isBlank
(
mobilecod
)
||
StringUtils
.
isBlank
(
password
))
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"参数为空"
);
}
String
key
=
permissionService
.
checkCodeByUsername
(
phone
,
mobilecod
);
if
(
StringUtils
.
isBlank
(
key
)){
String
key
=
permissionService
.
checkCodeByUsername
(
phone
,
mobilecod
);
if
(
StringUtils
.
isBlank
(
key
))
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NOTEXIST_CODE
,
"验证码错误"
);
}
userRedisTemplate
.
delete
(
key
);
MyWallet
myWallet
=
new
MyWallet
();
MyWallet
myWallet
=
new
MyWallet
();
myWallet
.
setUserId
(
userId
);
myWallet
=
selectOne
(
myWallet
);
if
(
myWallet
==
null
)
{
if
(
myWallet
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"钱包不存在"
);
}
if
(
type
==
1
&&
StringUtils
.
isNotBlank
(
myWallet
.
getPayPassword
()))
{
if
(
type
==
1
&&
StringUtils
.
isNotBlank
(
myWallet
.
getPayPassword
()))
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
EXIST_CODE
,
"密码已存在"
);
}
password
=
new
BCryptPasswordEncoder
(
UserConstant
.
PW_ENCORDER_SALT
).
encode
(
password
);
password
=
new
BCryptPasswordEncoder
(
UserConstant
.
PW_ENCORDER_SALT
).
encode
(
password
);
myWallet
.
setPayPassword
(
password
);
updateSelectiveById
(
myWallet
);
return
ObjectRestResponse
.
succ
();
}
//检查用户是否设置过密码
public
ObjectRestResponse
checkSetPwd
(
Integer
userId
){
MyWallet
myWallet
=
new
MyWallet
();
public
ObjectRestResponse
checkSetPwd
(
Integer
userId
)
{
MyWallet
myWallet
=
new
MyWallet
();
myWallet
.
setUserId
(
userId
);
myWallet
=
selectOne
(
myWallet
);
if
(
myWallet
==
null
)
{
if
(
myWallet
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"钱包不存在"
);
}
boolean
flag
=
false
;
if
(
StringUtils
.
isNotBlank
(
myWallet
.
getPayPassword
()))
{
flag
=
true
;
boolean
flag
=
false
;
if
(
StringUtils
.
isNotBlank
(
myWallet
.
getPayPassword
()))
{
flag
=
true
;
}
return
ObjectRestResponse
.
succ
(
flag
);
}
//检查提成下一步操作
public
ObjectRestResponse
checkAmount
(
Integer
userId
,
BigDecimal
amount
,
String
password
)
{
if
(
amount
.
compareTo
(
BigDecimal
.
ZERO
)
<
1
)
{
public
ObjectRestResponse
checkAmount
(
Integer
userId
,
BigDecimal
amount
,
String
password
)
{
if
(
amount
.
compareTo
(
BigDecimal
.
ZERO
)
<
1
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现金额不能小于0"
);
}
MyWallet
myWallet
=
new
MyWallet
();
MyWallet
myWallet
=
new
MyWallet
();
myWallet
.
setUserId
(
userId
);
myWallet
=
selectOne
(
myWallet
);
if
(
myWallet
==
null
)
{
if
(
myWallet
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"钱包不存在"
);
}
if
(
amount
.
compareTo
(
myWallet
.
getBalance
())
>
0
)
{
if
(
amount
.
compareTo
(
myWallet
.
getBalance
())
>
0
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现金额不能大于钱包金额"
);
}
if
(
StringUtils
.
isNotBlank
(
password
)
&&!
encoder
.
matches
(
password
,
myWallet
.
getPayPassword
()))
{
if
(
StringUtils
.
isNotBlank
(
password
)
&&
!
encoder
.
matches
(
password
,
myWallet
.
getPayPassword
()))
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"支付密码错误"
);
}
WithDrawRuleVo
ruleVo
=
configFeign
.
getWithDrawRule
();
BigDecimal
proceduReates
=
BigDecimal
.
ZERO
;
WalletCathSumDto
sumDto
=
new
WalletCathSumDto
();
if
(
ruleVo
!=
null
)
{
proceduReates
=
ruleVo
.
getProceduReates
();
WithDrawRuleVo
ruleVo
=
configFeign
.
getWithDrawRule
();
BigDecimal
proceduReates
=
BigDecimal
.
ZERO
;
WalletCathSumDto
sumDto
=
new
WalletCathSumDto
();
if
(
ruleVo
!=
null
)
{
proceduReates
=
ruleVo
.
getProceduReates
();
//提现次数
Integer
number
=
1
;
Integer
number
=
1
;
//最小金额
BigDecimal
mimAmount
=
ruleVo
.
getMinAmount
();
if
(
mimAmount
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
&&
amount
.
compareTo
(
mimAmount
)<
0
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现金额不能小于"
+
mimAmount
+
"元"
);
BigDecimal
mimAmount
=
ruleVo
.
getMinAmount
();
if
(
mimAmount
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
&&
amount
.
compareTo
(
mimAmount
)
<
0
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现金额不能小于"
+
mimAmount
+
"元"
);
}
//日额度
BigDecimal
amountOfDay
=
ruleVo
.
getAmountOfDay
();
BigDecimal
amountOfDay
=
ruleVo
.
getAmountOfDay
();
//每日次数
Integer
maxNumberOfDay
=
ruleVo
.
getMaxNumberOfDay
()==
null
?
0
:
ruleVo
.
getMaxNumberOfDay
();
Integer
maxNumberOfDay
=
ruleVo
.
getMaxNumberOfDay
()
==
null
?
0
:
ruleVo
.
getMaxNumberOfDay
();
//查询当日次数和金额
sumDto
=
myWalletCathBiz
.
sumCathAmount
(
userId
,
1
);
BigDecimal
ramount
=
amount
.
add
(
sumDto
.
getSumAmount
());
if
(
amountOfDay
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
&&
ramount
.
compareTo
(
amountOfDay
)>
0
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现金额超过日额度"
+
amountOfDay
+
"元"
);
sumDto
=
myWalletCathBiz
.
sumCathAmount
(
userId
,
1
);
BigDecimal
ramount
=
amount
.
add
(
sumDto
.
getSumAmount
());
if
(
amountOfDay
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
&&
ramount
.
compareTo
(
amountOfDay
)
>
0
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现金额超过日额度"
+
amountOfDay
+
"元"
);
}
number
+=
sumDto
.
getNumber
();
if
(
maxNumberOfDay
>
0
&&
number
>
maxNumberOfDay
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现当日次数超过"
+
maxNumberOfDay
+
"次"
);
number
+=
sumDto
.
getNumber
();
if
(
maxNumberOfDay
>
0
&&
number
>
maxNumberOfDay
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现当日次数超过"
+
maxNumberOfDay
+
"次"
);
}
number
=
1
;
number
=
1
;
//月额度
BigDecimal
amountOfMonth
=
ruleVo
.
getAmountOfMonth
();
BigDecimal
amountOfMonth
=
ruleVo
.
getAmountOfMonth
();
//月次数
Integer
maxNumberOfMonth
=
ruleVo
.
getMaxNumberOfMonth
();
Integer
maxNumberOfMonth
=
ruleVo
.
getMaxNumberOfMonth
();
//查询当月次数和金额
sumDto
=
myWalletCathBiz
.
sumCathAmount
(
userId
,
2
);
BigDecimal
yamount
=
amount
.
add
(
sumDto
.
getSumAmount
());
if
(
amountOfMonth
.
compareTo
(
BigDecimal
.
ZERO
)>
0
&&
yamount
.
compareTo
(
amountOfMonth
)>
0
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现金额超过月额度"
+
amountOfMonth
+
"元"
);
sumDto
=
myWalletCathBiz
.
sumCathAmount
(
userId
,
2
);
BigDecimal
yamount
=
amount
.
add
(
sumDto
.
getSumAmount
());
if
(
amountOfMonth
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
&&
yamount
.
compareTo
(
amountOfMonth
)
>
0
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现金额超过月额度"
+
amountOfMonth
+
"元"
);
}
number
+=
sumDto
.
getNumber
();
if
(
maxNumberOfMonth
>
0
&&
number
>
maxNumberOfMonth
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现当月次数超过"
+
maxNumberOfMonth
+
"次"
);
number
+=
sumDto
.
getNumber
();
if
(
maxNumberOfMonth
>
0
&&
number
>
maxNumberOfMonth
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
FAILED_CODE
,
"提现当月次数超过"
+
maxNumberOfMonth
+
"次"
);
}
}
...
...
@@ -251,43 +275,47 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
//返回提现规则
public
ObjectRestResponse
getCathRule
(){
public
ObjectRestResponse
getCathRule
()
{
return
ObjectRestResponse
.
succ
(
configFeign
.
getWithDrawRule
());
}
//提现申请
public
ObjectRestResponse
applyCath
(
ApplyCathVo
applyCathVo
)
{
if
(
applyCathVo
==
null
)
{
public
ObjectRestResponse
applyCath
(
ApplyCathVo
applyCathVo
)
{
if
(
applyCathVo
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"参数不能为空"
);
}
Integer
userId
=
applyCathVo
.
getUserId
();
BigDecimal
amount
=
applyCathVo
.
getAmount
();
String
password
=
applyCathVo
.
getPassword
();
String
accountNumber
=
applyCathVo
.
getAccountNumber
();
Integer
cathType
=
applyCathVo
.
getCathType
()==
null
?
1
:
applyCathVo
.
getCathType
();
if
(
StringUtils
.
isBlank
(
password
)
||
amount
.
compareTo
(
BigDecimal
.
ZERO
)<
1
)
{
Integer
userId
=
applyCathVo
.
getUserId
();
BigDecimal
amount
=
applyCathVo
.
getAmount
();
String
password
=
applyCathVo
.
getPassword
();
String
accountNumber
=
applyCathVo
.
getAccountNumber
();
Integer
cathType
=
applyCathVo
.
getCathType
()
==
null
?
1
:
applyCathVo
.
getCathType
();
if
(
StringUtils
.
isBlank
(
password
)
||
amount
.
compareTo
(
BigDecimal
.
ZERO
)
<
1
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"参数不能为空"
);
}
ObjectRestResponse
restResponse
=
checkAmount
(
userId
,
amount
,
password
);
if
(
restResponse
.
getStatus
()
!=
ResultCode
.
SUCCESS_CODE
)
{
ObjectRestResponse
restResponse
=
checkAmount
(
userId
,
amount
,
password
);
if
(
restResponse
.
getStatus
()
!=
ResultCode
.
SUCCESS_CODE
)
{
return
restResponse
;
}
String
data
=
JSONObject
.
toJSONString
(
restResponse
.
getData
());
WalletCathSumDto
sumDto
=
JSONUtil
.
toBean
(
data
,
WalletCathSumDto
.
class
);
if
(
sumDto
==
null
)
{
String
data
=
JSONObject
.
toJSONString
(
restResponse
.
getData
());
WalletCathSumDto
sumDto
=
JSONUtil
.
toBean
(
data
,
WalletCathSumDto
.
class
);
if
(
sumDto
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"参数不能为空"
);
}
BigDecimal
commission
=
amount
.
multiply
(
sumDto
.
getProceduReates
()).
divide
(
new
BigDecimal
(
"100"
)).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
BigDecimal
balnece
=
sumDto
.
getBalance
();
BigDecimal
commission
=
amount
.
multiply
(
sumDto
.
getProceduReates
()).
divide
(
new
BigDecimal
(
"100"
)).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
BigDecimal
balnece
=
sumDto
.
getBalance
();
//到账金额
BigDecimal
realAmount
=
amount
;
if
(
amount
.
compareTo
(
realAmount
)>
0
)
{
realAmount
=
balnece
.
subtract
(
commission
);
BigDecimal
realAmount
=
amount
;
if
(
(
realAmount
.
add
(
commission
)).
compareTo
(
balnece
)
>
0
)
{
realAmount
=
balnece
.
subtract
(
commission
);
}
log
.
info
(
"-----提现申请-----proceduReates==="
+
sumDto
.
getProceduReates
()+
"----commission===="
+
commission
+
"---realAmount==="
+
realAmount
);
log
.
info
(
"-----提现申请-----proceduReates==="
+
sumDto
.
getProceduReates
()
+
"----commission===="
+
commission
+
"---realAmount==="
+
realAmount
);
//添加账号
alipayBiz
.
addAlipay
(
userId
,
accountNumber
);
MyWalletCath
walletCath
=
new
MyWalletCath
();
// alipayBiz.addAlipay(userId,accountNumber);
MyWalletCath
walletCath
=
new
MyWalletCath
();
//提现单号
String
orderNo
=
snowflake
.
nextIdStr
();
orderNo
=
String
.
format
(
"%s%s"
,
dateTimeFormatter
.
format
(
LocalDate
.
now
()),
orderNo
);
walletCath
.
setOrderNo
(
orderNo
);
walletCath
.
setUserId
(
userId
);
walletCath
.
setBalance
(
balnece
);
walletCath
.
setCathType
(
cathType
);
...
...
@@ -297,10 +325,10 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
walletCath
.
setRealAmount
(
realAmount
);
myWalletCathBiz
.
insertSelective
(
walletCath
);
//提现金额
BigDecimal
withdrawals
=
realAmount
.
add
(
commission
);
balnece
=
balnece
.
subtract
(
withdrawals
).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
log
.
info
(
"------钱包----withdrawals==="
+
withdrawals
+
"----balnece===="
+
balnece
);
MyWallet
myWallet
=
new
MyWallet
();
BigDecimal
withdrawals
=
realAmount
.
add
(
commission
);
balnece
=
balnece
.
subtract
(
withdrawals
).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
log
.
info
(
"------钱包----withdrawals==="
+
withdrawals
+
"----balnece===="
+
balnece
);
MyWallet
myWallet
=
new
MyWallet
();
myWallet
.
setId
(
sumDto
.
getWalletId
());
myWallet
.
setUserId
(
userId
);
myWallet
.
setBalance
(
balnece
);
...
...
@@ -312,62 +340,129 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
//提现审核
public
ObjectRestResponse
verifyCath
(
Integer
cathId
,
String
cono
,
String
reason
,
Integer
status
)
{
if
(
(
status
==
1
&&
StringUtils
.
isBlank
(
cono
))||(
status
==
2
&&
StringUtils
.
isBlank
(
reason
))||
cathId
==
null
||
cathId
==
0
)
{
public
ObjectRestResponse
verifyCath
(
Integer
cathId
,
String
reason
,
Integer
status
)
{
if
(
status
==
2
&&
StringUtils
.
isBlank
(
reason
)
||
cathId
==
null
||
cathId
==
0
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NULL_CODE
,
"参数不能为空"
);
}
MyWalletCath
cath
=
myWalletCathBiz
.
selectById
(
cathId
);
if
(
cath
==
null
){
MyWalletCath
cath
=
myWalletCathBiz
.
selectById
(
cathId
);
cath
.
getUserId
();
if
(
cath
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
NOTEXIST_CODE
,
"提现记录不存在"
);
}
cath
.
setStauts
(
status
);
cath
.
setCono
(
cono
);
cath
.
setReason
(
reason
);
cath
.
setFinishTime
(
System
.
currentTimeMillis
());
int
num
=
myWalletCathBiz
.
updateSelectiveByIdRe
(
cath
);
if
(
num
>
0
){
Integer
userId
=
cath
.
getUserId
();
MyWallet
wallet
=
new
MyWallet
();
boolean
isContinuePay
=
false
;
String
errorMsg
=
""
;
Integer
userId
=
cath
.
getUserId
();
MyWallet
wallet
=
new
MyWallet
();
wallet
.
setUserId
(
userId
);
wallet
=
selectOne
(
wallet
);
if
(
wallet
!=
null
)
{
wallet
=
selectOne
(
wallet
);
if
(
wallet
!=
null
)
{
//当时钱包的余额
BigDecimal
balance
=
cath
.
getBalance
();
BigDecimal
realAmount
=
cath
.
getRealAmount
();
BigDecimal
commission
=
cath
.
getCommission
();
if
(
status
==
1
){
MyWalletDetail
detail
=
new
MyWalletDetail
();
BigDecimal
balance
=
cath
.
getBalance
();
BigDecimal
realAmount
=
cath
.
getRealAmount
();
BigDecimal
commission
=
cath
.
getCommission
();
if
(
status
==
1
)
{
String
cono
=
StringUtil
.
isEmpty
(
cath
.
getCono
())
?
OrderUtil
.
GetOrderNumber
(
"TX"
):
cath
.
getCono
();
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
host
=
StringUtils
.
defaultIfBlank
(
request
.
getHeader
(
"userHost"
),
ClientUtil
.
getClientIp
(
request
));
FundPayVo
fundPayVo
=
FundPayVo
.
builder
()
.
amount
(
cath
.
getCathType
()
==
0
?
String
.
valueOf
(
cath
.
getRealAmount
().
multiply
(
new
BigDecimal
(
100
)).
doubleValue
())
:
String
.
format
(
"%.2f"
,
cath
.
getRealAmount
().
doubleValue
()))
.
outBizNo
(
cono
)
.
payeeAccount
(
cath
.
getAccountNumber
())
.
payerShowName
(
"欣新房车网络科技(广东)股份有限公司"
)
.
remark
(
"提现转账"
)
.
type
(
cath
.
getCathType
())
.
creatIp
(
host
)
.
build
();
try
{
cono
=
thirdFeign
.
transferAccount
(
fundPayVo
);
}
catch
(
BaseException
bex
)
{
if
(
PaySubErrorCodeEnum
.
PAY_NEED_ERROR
.
getSubCode
().
equals
(
bex
.
getSubCode
()))
{
isContinuePay
=
true
;
errorMsg
=
bex
.
getMessage
();
}
else
{
throw
new
BaseException
(
bex
.
getMessage
(),
400
);
}
}
catch
(
Exception
ex
)
{
throw
new
BaseException
(
ex
);
}
cath
.
setStauts
(
isContinuePay
?
0
:
status
);
//设置第三方单号
cath
.
setCono
(
cono
);
cath
.
setFinishTime
(
System
.
currentTimeMillis
());
myWalletCathBiz
.
updateSelectiveByIdRe
(
cath
);
MyWalletDetail
detail
=
new
MyWalletDetail
();
detail
.
setUserId
(
userId
);
detail
.
setItype
(
1
);
detail
.
setCono
(
cathId
);
//设置提现单号
detail
.
setWithDrawOrderNo
(
cath
.
getOrderNo
());
detail
.
setBalance
(
balance
);
detail
.
setAmount
(
realAmount
);
detail
.
setSource
(
10
);
myWalletDetailBiz
.
insertSelective
(
detail
);
detail
.
setId
(
null
);
detail
.
setSource
(
13
);
balance
=
balance
.
subtract
(
realAmount
).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
balance
=
balance
.
subtract
(
realAmount
).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
detail
.
setBalance
(
balance
);
detail
.
setAmount
(
commission
);
myWalletDetailBiz
.
insertSelective
(
detail
);
}
else
{
BigDecimal
amount
=
realAmount
.
add
(
commission
);
balance
=
wallet
.
getBalance
().
add
(
amount
);
BigDecimal
withdrawals
=
wallet
.
getWithdrawals
().
subtract
(
amount
);
}
else
{
cath
.
setStauts
(
status
);
cath
.
setReason
(
reason
);
cath
.
setFinishTime
(
System
.
currentTimeMillis
());
myWalletCathBiz
.
updateSelectiveByIdRe
(
cath
);
BigDecimal
amount
=
realAmount
.
add
(
commission
);
balance
=
wallet
.
getBalance
().
add
(
amount
);
BigDecimal
withdrawals
=
wallet
.
getWithdrawals
().
subtract
(
amount
);
wallet
.
setBalance
(
balance
);
wallet
.
setWithdrawals
(
withdrawals
);
mapper
.
updMyWater
(
wallet
);
}
}
if
(
isContinuePay
)
{
return
ObjectRestResponse
.
createFailedResult
(
10001
,
errorMsg
);
}
return
ObjectRestResponse
.
succ
();
}
public
void
deleteByUserIds
(
Collection
<
Integer
>
userIds
)
{
Example
example
=
new
Example
(
MyWallet
.
class
);
Example
example
=
new
Example
(
MyWallet
.
class
);
Example
.
Criteria
criteria
=
example
.
createCriteria
();
criteria
.
andIn
(
"userId"
,
userIds
);
criteria
.
andIn
(
"userId"
,
userIds
);
mapper
.
deleteByExample
(
example
);
}
public
List
<
PayAccountVo
>
listPayAccountByUserId
(
Integer
userId
)
{
List
<
PayAccountVo
>
payAccountVos
=
new
ArrayList
<>();
List
<
AppUserAlipay
>
alipayAccounts
=
appUserAlipayBiz
.
getListByUserId
(
userId
);
if
(
CollectionUtils
.
isNotEmpty
(
alipayAccounts
))
{
AppUserAlipay
appUserAlipay
=
alipayAccounts
.
get
(
0
);
PayAccountVo
alipayAccount
=
PayAccountVo
.
builder
()
.
account
(
appUserAlipay
.
getTxAlipay
())
.
accountType
(
1
)
.
accountDesc
(
String
.
format
(
"%s%s%s"
,
"支付宝余额("
,
appUserAlipay
.
getTxAlipay
(),
")"
))
.
build
();
payAccountVos
.
add
(
alipayAccount
);
}
AppUserDetail
appUserDetail
=
appUserDetailBiz
.
getUserByUserid
(
userId
);
AppUserLogin
appUserLogin
=
appUserLoginBiz
.
getUserById
(
userId
);
if
(!
org
.
springframework
.
util
.
StringUtils
.
isEmpty
(
appUserLogin
.
getOpenid
()))
{
PayAccountVo
wxAccount
=
PayAccountVo
.
builder
()
.
account
(
appUserLogin
.
getOpenid
())
.
accountType
(
0
)
.
accountDesc
(
String
.
format
(
"%s%s%s"
,
"微信零钱("
,
appUserDetail
.
getNickname
(),
")"
))
.
build
();
payAccountVos
.
add
(
wxAccount
);
}
return
payAccountVos
;
}
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
snowflake
=
new
Snowflake
(
2
,
2
,
false
);
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"YYYYMMdd"
);
}
}
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/MyWalletCathBiz.java
View file @
6055e6c1
...
...
@@ -95,16 +95,24 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
()
->
mapper
.
selectByUserNameOrPhoneOrWithDrawSate
(
walletCathFindDTO
.
getUsername
(),
walletCathFindDTO
.
getPhone
(),
walletCathFindDTO
.
getState
()));
List
<
WalletCathListDTO
>
walletCathListDTOList
=
walletCathListDTOPage
.
getData
();
if
(
CollectionUtils
.
isEmpty
(
walletCathListDTOList
)){
if
(
CollectionUtils
.
isEmpty
(
walletCathListDTOList
))
{
return
walletCathAdminVoPage
;
}
List
<
WalletCathAdminVo
>
walletCathAdminVos
=
new
ArrayList
<>();
WalletCathAdminVo
walletCathAdminVo
;
WalletCathAdminVo
walletCathAdminVo
;
for
(
WalletCathListDTO
walletCathListDTO
:
walletCathListDTOList
)
{
walletCathAdminVo
=
new
WalletCathAdminVo
();
BeanUtils
.
copyProperties
(
walletCathListDTO
,
walletCathAdminVo
);
walletCathAdminVo
.
setUsername
(
StringUtils
.
isEmpty
(
walletCathListDTO
.
getRealname
())
?
walletCathListDTO
.
getNickname
():
walletCathListDTO
.
getRealname
());
BeanUtils
.
copyProperties
(
walletCathListDTO
,
walletCathAdminVo
);
walletCathAdminVo
.
setUsername
(
StringUtils
.
isEmpty
(
walletCathListDTO
.
getRealname
())
?
walletCathListDTO
.
getNickname
()
:
walletCathListDTO
.
getRealname
());
walletCathAdminVo
.
setPhone
(
walletCathListDTO
.
getUsername
());
//微信
if
(
walletCathListDTO
.
getCathType
()==
0
){
walletCathAdminVo
.
setAccountNumberDesc
(
String
.
format
(
"%s%s%s"
,
"提现到微信("
,
walletCathListDTO
.
getAccountNumber
(),
")"
));
}
//支付宝
if
(
walletCathListDTO
.
getCathType
()==
1
){
walletCathAdminVo
.
setAccountNumberDesc
(
String
.
format
(
"%s%s%s"
,
"提现到支付宝("
,
walletCathListDTO
.
getAccountNumber
(),
")"
));
}
walletCathAdminVos
.
add
(
walletCathAdminVo
);
}
walletCathAdminVos
.
sort
(
Comparator
.
comparing
(
WalletCathAdminVo:
:
getCrtTime
).
reversed
());
...
...
@@ -123,14 +131,14 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
return
userIdAndPersonalConsumptionMap
;
}
public
WalletCathSumDto
sumCathAmount
(
Integer
userId
,
Integer
type
)
{
return
mapper
.
sumCathAmount
(
userId
,
type
);
public
WalletCathSumDto
sumCathAmount
(
Integer
userId
,
Integer
type
)
{
return
mapper
.
sumCathAmount
(
userId
,
type
);
}
public
void
deleteByUserIds
(
Collection
<
Integer
>
userIds
)
{
Example
example
=
new
Example
(
MyWalletCath
.
class
);
Example
.
Criteria
criteria
=
example
.
createCriteria
();
criteria
.
andIn
(
"userId"
,
userIds
);
criteria
.
andIn
(
"userId"
,
userIds
);
mapper
.
deleteByExample
(
example
);
}
}
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rest/MyWalletController.java
View file @
6055e6c1
...
...
@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.admin.biz.AppUserAlipayBiz;
import
com.github.wxiaoqi.security.admin.biz.MyWalletBiz
;
import
com.github.wxiaoqi.security.admin.vo.AppletWalletVo
;
import
com.github.wxiaoqi.security.admin.vo.ApplyCathVo
;
import
com.github.wxiaoqi.security.admin.vo.PayAccountVo
;
import
com.github.wxiaoqi.security.auth.client.config.UserAuthConfig
;
import
com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil
;
import
com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo
;
...
...
@@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* @author libin
...
...
@@ -125,4 +127,15 @@ public class MyWalletController {
}
}
@ApiOperation
(
"获取支付账号(微信|支付宝|银行卡)"
)
@GetMapping
(
"/pay_account_list"
)
public
ObjectRestResponse
listPayAccount
(
HttpServletRequest
request
){
try
{
Integer
userId
=
Integer
.
parseInt
(
userAuthUtil
.
getInfoFromToken
(
userAuthConfig
.
getToken
(
request
)).
getId
());
List
<
PayAccountVo
>
payAccountVos
=
myWalletBiz
.
listPayAccountByUserId
(
userId
);
return
ObjectRestResponse
.
succ
(
payAccountVos
);
}
catch
(
Exception
ex
){
throw
new
BaseException
(
ex
);
}
}
}
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rest/admin/WalletCathAdminController.java
View file @
6055e6c1
...
...
@@ -37,11 +37,10 @@ public class WalletCathAdminController {
@ApiOperation
(
"提现审核"
)
public
ObjectRestResponse
verifyCath
(
@RequestParam
(
value
=
"cathId"
,
defaultValue
=
"0"
)
Integer
cathId
,
@RequestParam
(
value
=
"cono"
,
defaultValue
=
""
)
String
cono
,
@RequestParam
(
value
=
"reason"
,
defaultValue
=
""
)
String
reason
,
@RequestParam
(
value
=
"status"
,
defaultValue
=
"1"
)
Integer
status
){
try
{
return
myWalletBiz
.
verifyCath
(
cathId
,
cono
,
reason
,
status
);
return
myWalletBiz
.
verifyCath
(
cathId
,
reason
,
status
);
}
catch
(
Exception
e
)
{
throw
new
BaseException
(
e
);
}
...
...
ace-modules/ace-admin/src/main/resources/mapper/MyWalletCathMapper.xml
View file @
6055e6c1
...
...
@@ -15,6 +15,7 @@
wc.crt_time AS `crtTime`,
wc.finish_time AS `finishTime`,
wc.cono,
wc.order_no AS `orderNo`,
wc.account_number AS `accountNumber`
FROM
(SELECT * FROM `my_wallet_cath`
<if
test=
"state != null"
>
...
...
ace-modules/ace-admin/src/main/resources/mapper/MyWalletDetailMapper.xml
View file @
6055e6c1
...
...
@@ -8,6 +8,7 @@
wd.source,
wd.amount,
wd.cono,
wd.with_draw_order_no AS `withDrawOrderNo`,
wd.itype,
wd.activity_id AS `activityId`,
wd.activity_name AS `activityName`,
...
...
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/feign/ThirdFeign.java
View file @
6055e6c1
...
...
@@ -5,10 +5,7 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import
com.xxfc.platform.universal.dto.SmsTemplateDTO
;
import
com.xxfc.platform.universal.entity.Dictionary
;
import
com.xxfc.platform.universal.entity.IdInformation
;
import
com.xxfc.platform.universal.vo.OrderPayVo
;
import
com.xxfc.platform.universal.vo.OrderRefundVo
;
import
com.xxfc.platform.universal.vo.TrafficViolations
;
import
com.xxfc.platform.universal.vo.ViolationVO
;
import
com.xxfc.platform.universal.vo.*
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
...
...
@@ -83,4 +80,7 @@ public interface ThirdFeign {
public
ObjectRestResponse
<
List
<
ViolationVO
>>
getRentViolation
(
@RequestParam
(
value
=
"rentViolationDTO"
)
Map
<
String
,
Object
>
rentViolationDTO
);
/*************************************支付***************************************/
@PostMapping
(
"/pay/app/unauth/transfer_account"
)
String
transferAccount
(
@RequestBody
FundPayVo
fundPayVo
)
throws
Exception
;
}
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/vo/FundPayVo.java
View file @
6055e6c1
package
com
.
xxfc
.
platform
.
universal
.
vo
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
(
toBuilder
=
true
)
@NoArgsConstructor
@AllArgsConstructor
public
class
FundPayVo
{
//转账单号
...
...
@@ -19,4 +25,12 @@ public class FundPayVo {
//转账备注
private
String
remark
;
//转账类型
private
Integer
type
;
private
String
creatIp
;
private
String
checkName
;
}
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/weixin/api/WXSuppToUserPay.java
View file @
6055e6c1
...
...
@@ -55,7 +55,7 @@ public class WXSuppToUserPay {
private
String
key
;
public
static
void
main
(
String
[]
args
)
throws
Exception
,
IOException
{
Map
<
String
,
String
>
map
=
WXSuppToUserPay
.
WeiXinTiXian
(
"oRhMfwKwjNq2Ce-TxlqfoAqsYfww"
,
"NO_CHECK"
,
500
+
""
,
"活动提现"
,
"192.168.8.109"
);
Map
<
String
,
String
>
map
=
WXSuppToUserPay
.
WeiXinTiXian
(
"oRhMfwKwjNq2Ce-TxlqfoAqsYfww"
,
OrderUtil
.
GetOrderNumber
(
"TX"
),
"NO_CHECK"
,
500
+
""
,
"活动提现"
,
"192.168.8.109"
);
if
(
"SUCCESS"
.
equals
(
map
.
get
(
"return_code"
)))
{
if
(!
StringUtils
.
isBlank
(
map
.
get
(
"payment_no"
))
&&
!
StringUtils
.
isBlank
(
map
.
get
(
"partner_trade_no"
))
)
...
...
@@ -108,14 +108,14 @@ public class WXSuppToUserPay {
// System.out.println(map.get("payment_time"));
}
public
static
Map
<
String
,
String
>
WeiXinTiXian
(
String
openid
,
String
check_name
,
String
amount
,
String
desc
,
String
spbill_create_ip
)
throws
Exception
public
static
Map
<
String
,
String
>
WeiXinTiXian
(
String
openid
,
String
partnerTradeNo
,
String
check_name
,
String
amount
,
String
desc
,
String
spbill_create_ip
)
throws
Exception
{
WXSuppToUserPay
prePay
=
new
WXSuppToUserPay
();
prePay
.
setMch_appid
(
SystemConfig
.
WINXIN_AppID
);
prePay
.
setMchid
(
SystemConfig
.
WINXIN_PARTNER
);
prePay
.
setNonce_str
(
OrderUtil
.
CreateNoncestr
());
prePay
.
setPartner_trade_no
(
OrderUtil
.
GetOrderNumber
(
"TX"
)
);
prePay
.
setPartner_trade_no
(
partnerTradeNo
);
prePay
.
setOpenid
(
openid
);
prePay
.
setCheck_name
(
check_name
);
prePay
.
setAmount
(
amount
);
...
...
@@ -130,7 +130,7 @@ public class WXSuppToUserPay {
CloseableHttpClient
httpclient
=
null
;
try
{
KeyStore
keyStore
=
KeyStore
.
getInstance
(
"PKCS12"
);
//FileInputStream instream = new FileInputStream(new File("E:
/apiclient_cert.p12"));
// FileInputStream instream = new FileInputStream(new File("E:/cert
/apiclient_cert.p12"));
String
path
=
Thread
.
currentThread
().
getContextClassLoader
().
getResource
(
"/"
).
getPath
();
FileInputStream
instream
=
new
FileInputStream
(
new
File
(
path
+
"/apiclient_cert.p12"
));
try
{
...
...
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/weixin/constant/AliNeedPayErrorEnum.java
0 → 100644
View file @
6055e6c1
package
com
.
xxfc
.
platform
.
universal
.
weixin
.
constant
;
import
lombok.AllArgsConstructor
;
/**
* @author libin
* @version 1.0
* @description 以下错误 如需继续打款,要使用原来的订单号
* @data 2019/10/12 9:40
*/
@AllArgsConstructor
public
enum
AliNeedPayErrorEnum
{
SYSTEM_ERROR
(
"系统繁忙"
,
"系统繁忙"
);
private
String
desc
;
private
String
reason
;
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
String
getReason
()
{
return
reason
;
}
public
void
setReason
(
String
reason
)
{
this
.
reason
=
reason
;
}
}
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/weixin/constant/PaySubErrorCodeEnum.java
0 → 100644
View file @
6055e6c1
package
com
.
xxfc
.
platform
.
universal
.
weixin
.
constant
;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/12 10:22
*/
public
enum
PaySubErrorCodeEnum
{
/**
* 普通付款异常
*/
PAY_ERROR
(
"EPAY_10000"
),
/**
* 需要继续付款错误码
*/
PAY_NEED_ERROR
(
"EPAY_10001"
);
private
String
subCode
;
PaySubErrorCodeEnum
(
String
subCode
)
{
this
.
subCode
=
subCode
;
}
public
String
getSubCode
()
{
return
subCode
;
}
public
void
setSubCode
(
String
subCode
)
{
this
.
subCode
=
subCode
;
}
}
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/weixin/constant/WxNeedPayErrorEnum.java
0 → 100644
View file @
6055e6c1
package
com
.
xxfc
.
platform
.
universal
.
weixin
.
constant
;
import
lombok.AllArgsConstructor
;
/**
* @author libin
* @version 1.0
* @description 以下错误 如需继续打款,要使用原来的商户订单号
* @data 2019/10/12 9:11
*/
@AllArgsConstructor
public
enum
WxNeedPayErrorEnum
{
NOTENOUGH
(
"余额不足"
,
"付款帐号余额不足或资金未到账"
),
SYSTEMERROR
(
"系统繁忙,请稍后再试"
,
"微信内部接口调用发生错误"
),
NAME_MISMATCH
(
"姓名校验出错"
,
"付款人身份校验不通过"
),
SIGN_ERROR
(
"签名错误"
,
"校验签名错误"
),
FREQ_LIMIT
(
"超过频率限制,请稍后再试"
,
"接口请求频率超时接口限制"
),
MONEY_LIMIT
(
"已经达到今日付款总额上限/已达到付款给此用户额度上限"
,
"请关注接口的付款限额条件"
),
CA_ERROR
(
"商户API证书校验出错"
,
"请求没带商户API证书或者带上了错误的商户API证书"
),
V2_ACCOUNT_SIMPLE_BAN
(
"无法给非实名用户付款"
,
"用户微信支付账户未知名,无法付款"
),
PARAM_IS_NOT_UTF8
(
"请求参数中包含非utf8编码字符"
,
"接口规范要求所有请求参数都必须为utf8编码"
),
SENDNUM_LIMIT
(
"该用户今日付款次数超过限制"
,
"该用户今日付款次数超过限制"
);
private
String
desc
;
private
String
reason
;
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
String
getReason
()
{
return
reason
;
}
public
void
setReason
(
String
reason
)
{
this
.
reason
=
reason
;
}
}
xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/weixin/constant/WxResponseProperties.java
0 → 100644
View file @
6055e6c1
package
com
.
xxfc
.
platform
.
universal
.
weixin
.
constant
;
/**
* @author libin
* @version 1.0
* @description 微信请求响应字段
* @data 2019/10/12 9:57
*/
public
class
WxResponseProperties
{
public
static
final
String
ERROR_CODE
=
"err_code"
;
public
static
final
String
RETURN_CODE
=
"return_code"
;
public
static
final
String
RESULT_CODE
=
"result_code"
;
public
static
final
String
ERR_CODE_DES
=
"err_code_des"
;
public
static
final
String
PARTNER_TRADE_NO
=
"partner_trade_no"
;
}
xx-universal/xx-universal-server/src/main/java/com/xxfc/platform/universal/biz/OrderPayBiz.java
View file @
6055e6c1
...
...
@@ -12,6 +12,7 @@ import com.alipay.api.request.*;
import
com.alipay.api.response.*
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.util.HTTPSUtils
;
import
com.github.wxiaoqi.security.common.util.OrderUtil
;
...
...
@@ -23,11 +24,16 @@ import com.xxfc.platform.universal.entity.OrderPay;
import
com.xxfc.platform.universal.mapper.OrderPayMapper
;
import
com.xxfc.platform.universal.vo.FundPayVo
;
import
com.xxfc.platform.universal.vo.OrderPayVo
;
import
com.xxfc.platform.universal.weixin.api.WXPay
;
import
com.xxfc.platform.universal.weixin.api.*
;
import
com.xxfc.platform.universal.weixin.constant.AliNeedPayErrorEnum
;
import
com.xxfc.platform.universal.weixin.constant.PaySubErrorCodeEnum
;
import
com.xxfc.platform.universal.weixin.constant.WxNeedPayErrorEnum
;
import
com.xxfc.platform.universal.weixin.constant.WxResponseProperties
;
import
com.xxfc.platform.universal.weixin.util.HTTPUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.beanutils.BeanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
...
...
@@ -35,10 +41,8 @@ import tk.mybatis.mapper.entity.Example;
import
javax.servlet.http.HttpServletRequest
;
import
java.math.BigDecimal
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
static
com
.
xxfc
.
platform
.
universal
.
constant
.
DictionaryKey
.
PAY_DEMOTION
;
import
static
com
.
xxfc
.
platform
.
universal
.
constant
.
DictionaryKey
.
UNIVERSAL_PAY
;
...
...
@@ -52,7 +56,7 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.UNIVERSAL_PAY;
*/
@Service
@Slf4j
public
class
OrderPayBiz
extends
BaseBiz
<
OrderPayMapper
,
OrderPay
>
{
public
class
OrderPayBiz
extends
BaseBiz
<
OrderPayMapper
,
OrderPay
>
implements
InitializingBean
{
@Autowired
DictionaryBiz
dictionaryBiz
;
...
...
@@ -69,6 +73,11 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
@Value
(
"${wx.appSercet}"
)
private
String
wy_secret
;
private
List
<
String
>
wxNeedPayErrorCodes
;
private
List
<
String
>
aliNeedPayErrorCodes
;
private
static
final
String
SUCCESS
=
"SUCCESS"
;
public
JSONObject
preparepay
(
OrderPayVo
orderPayVo
)
{
...
...
@@ -108,16 +117,16 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
String
sellerAccount
=
null
;
if
(
type
==
2
&&
payWay
==
1
)
{
sellerAccount
=
SystemConfig
.
APP_PARTNER
;
jsParam
=
WXPay
.
webPay
(
amount
+
""
,
orderPayVo
.
getBody
(),
notify_url
,
trade_no
,
orderPayVo
.
getBuyerIp
(),
orderPayVo
.
getBuyerAccount
(),
null
);
jsParam
=
WXPay
.
webPay
(
amount
+
""
,
orderPayVo
.
getBody
(),
notify_url
,
trade_no
,
orderPayVo
.
getBuyerIp
(),
orderPayVo
.
getBuyerAccount
(),
null
);
}
else
if
(
type
==
1
&&
payWay
==
1
)
{
sellerAccount
=
SystemConfig
.
APP_PARTNER
;
jsParam
=
WXPay
.
apppay
(
amount
+
""
,
orderPayVo
.
getBody
(),
notify_url
,
trade_no
,
orderPayVo
.
getBuyerIp
(),
0
);
}
else
if
(
type
==
1
&&
payWay
==
2
)
{
sellerAccount
=
SystemConfig
.
ALIPAY_PID
;
jsParam
=
generateAliPayment
(
orderPayVo
,
notifyUrl
);
}
else
if
(
type
==
3
&&
payWay
==
1
)
{
}
else
if
(
type
==
3
&&
payWay
==
1
)
{
sellerAccount
=
SystemConfig
.
APP_PARTNER
;
jsParam
=
WXPay
.
webPay
(
amount
+
""
,
orderPayVo
.
getBody
(),
notify_url
,
trade_no
,
orderPayVo
.
getBuyerIp
(),
orderPayVo
.
getBuyerAccount
(),
wy_appid
);
jsParam
=
WXPay
.
webPay
(
amount
+
""
,
orderPayVo
.
getBody
(),
notify_url
,
trade_no
,
orderPayVo
.
getBuyerIp
(),
orderPayVo
.
getBuyerAccount
(),
wy_appid
);
}
log
.
info
(
"报名费回调路径jsParam:"
+
jsParam
);
if
(!
StringUtils
.
isBlank
(
jsParam
))
{
...
...
@@ -303,6 +312,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
"utf-8"
,
SystemConfig
.
ALIPAY_PUBLIC_KEY
,
AlipayConstants
.
SIGN_TYPE_RSA2
);
return
alipayClient
;
}
//balance 余额
//moneyFund 余额宝
//coupon 红包
...
...
@@ -371,26 +381,68 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
}
}
/**
* 转账功能 微信 | 支付宝
*
* @param fundPayVo
* @return
* @throws Exception
*/
public
String
fundTrans
(
FundPayVo
fundPayVo
)
throws
Exception
{
if
(
fundPayVo
.
getType
()
==
0
)
{
//微信
fundPayVo
.
setCheckName
(
"NO_CHECK"
);
return
wxpayfundTrans
(
fundPayVo
);
}
if
(
fundPayVo
.
getType
()
==
1
)
{
//支付宝
return
alipayfundTrans
(
getAlipayClient
(),
fundPayVo
);
}
throw
new
BaseException
(
"提现方式不对"
);
}
/**
* 支付宝转账功能 单笔最小转账0.1 最大小数点位数前支持13位,实际限额和签约一致
*
* @param alipayClient
* @throws AlipayApiException
*/
public
void
fundTrans
(
AlipayClient
alipayClient
,
FundPayVo
fundPayVo
)
throws
AlipayApiException
{
public
String
alipayfundTrans
(
AlipayClient
alipayClient
,
FundPayVo
fundPayVo
)
throws
AlipayApiException
{
AlipayFundTransToaccountTransferRequest
request
=
new
AlipayFundTransToaccountTransferRequest
();
request
.
setBizContent
(
"{"
+
"\"out_biz_no\":\""
+
fundPayVo
.
getOutBizNo
()
+
"\","
+
"\"payee_type\":\"ALIPAY_LOGONID\","
+
"\"payee_account\":\""
+
fundPayVo
.
getPayeeAccount
()
+
"\","
+
"\"amount\":\""
+
fundPayVo
.
getAmount
()
+
"\","
+
"\"payer_show_name\":\""
+
fundPayVo
.
getPayerShowName
()
+
"\","
+
"\"payer_show_name\":\""
+
fundPayVo
.
getPayerShowName
()
+
"\","
+
"\"remark\":\""
+
fundPayVo
.
getRemark
()
+
"\""
+
" }"
);
AlipayFundTransToaccountTransferResponse
response
=
alipayClient
.
execute
(
request
);
if
(
response
.
isSuccess
())
{
if
(
response
.
isSuccess
())
{
log
.
info
(
"转账调用成功"
);
return
fundPayVo
.
getOutBizNo
();
}
else
{
log
.
info
(
"转账调用失败"
);
String
subCode
=
response
.
getSubCode
();
if
(
aliNeedPayErrorCodes
.
contains
(
subCode
))
{
throw
new
BaseException
(
"支付宝账号余额不足"
,
PaySubErrorCodeEnum
.
PAY_NEED_ERROR
.
getSubCode
());
}
throw
new
BaseException
(
"支付宝转账失败:【错误码:"
+
response
.
getSubCode
()
+
" 错误信息:"
+
response
.
getSubMsg
()
+
"】"
,
PaySubErrorCodeEnum
.
PAY_ERROR
.
getSubCode
());
}
}
public
String
wxpayfundTrans
(
FundPayVo
fundPayVo
)
throws
Exception
{
Map
<
String
,
String
>
map
=
WXSuppToUserPay
.
WeiXinTiXian
(
fundPayVo
.
getAmount
(),
fundPayVo
.
getOutBizNo
(),
fundPayVo
.
getCheckName
(),
fundPayVo
.
getAmount
(),
fundPayVo
.
getRemark
(),
fundPayVo
.
getCreatIp
());
log
.
info
(
"微信转账【{}】"
,
map
);
if
(
SUCCESS
.
equals
(
map
.
get
(
WxResponseProperties
.
RETURN_CODE
))
&&
SUCCESS
.
equals
(
map
.
get
(
WxResponseProperties
.
RESULT_CODE
)))
{
return
map
.
get
(
WxResponseProperties
.
PARTNER_TRADE_NO
);
}
String
errorCode
=
map
.
get
(
WxResponseProperties
.
ERROR_CODE
);
if
(
wxNeedPayErrorCodes
.
contains
(
errorCode
))
{
throw
new
BaseException
(
WxNeedPayErrorEnum
.
valueOf
(
errorCode
).
getDesc
(),
PaySubErrorCodeEnum
.
PAY_NEED_ERROR
.
getSubCode
());
}
else
{
throw
new
BaseException
(
"微信转账失败:【错误码"
+
errorCode
+
" 错误信息:"
+
map
.
get
(
WxResponseProperties
.
ERR_CODE_DES
)
+
"】"
,
PaySubErrorCodeEnum
.
PAY_ERROR
.
getSubCode
());
}
}
...
...
@@ -480,7 +532,8 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
* outRequestNo 退款请求标示 用于分批退款,每笔退款标示不一样,同样标示不会重复退款
* @return
*/
public
boolean
alipayOrderRefund
(
String
outTradeNo
,
String
tradNo
,
Integer
refundAmount
,
String
refundReason
,
String
outRequestNo
)
{
public
boolean
alipayOrderRefund
(
String
outTradeNo
,
String
tradNo
,
Integer
refundAmount
,
String
refundReason
,
String
outRequestNo
)
{
AlipayClient
alipayClient
=
getAlipayClient
();
AlipayTradeRefundRequest
request
=
new
AlipayTradeRefundRequest
();
BigDecimal
realAmount
=
new
BigDecimal
(
refundAmount
.
toString
()).
divide
(
new
BigDecimal
(
"100"
),
2
,
BigDecimal
.
ROUND_UP
);
...
...
@@ -488,7 +541,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
"\"out_trade_no\":\""
+
outTradeNo
+
"\","
+
"\"trade_no\":\""
+
tradNo
+
"\","
+
"\"refund_amount\":"
+
realAmount
+
","
+
"\"refund_reason\":\""
+
refundReason
+
"\","
+
"\"refund_reason\":\""
+
refundReason
+
"\","
+
"\"out_request_no\":\""
+
outRequestNo
+
"\""
+
" }"
);
try
{
...
...
@@ -512,14 +565,20 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
AlipayClient
alipayClient
=
orderPayBiz
.
getAlipayClient
();
FundPayVo
fundPayVo
=
new
FundPayVo
();
fundPayVo
.
setAmount
(
"0.50"
);
fundPayVo
.
setOutBizNo
(
"201910101554"
);
fundPayVo
.
setPayeeAccount
(
"
15362885034
"
);
fundPayVo
.
setOutBizNo
(
"201910101554
3
"
);
fundPayVo
.
setPayeeAccount
(
"
2724520350@qq.com
"
);
fundPayVo
.
setPayerShowName
(
"欣欣房车网络科技"
);
fundPayVo
.
setRemark
(
"测试转账"
);
try
{
orderPayBiz
.
fundTrans
(
alipayClient
,
fundPayVo
);
orderPayBiz
.
alipay
fundTrans
(
alipayClient
,
fundPayVo
);
}
catch
(
AlipayApiException
e
)
{
e
.
printStackTrace
();
}
}
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
wxNeedPayErrorCodes
=
EnumSet
.
allOf
(
WxNeedPayErrorEnum
.
class
).
stream
().
map
(
WxNeedPayErrorEnum:
:
name
).
collect
(
Collectors
.
toList
());
aliNeedPayErrorCodes
=
EnumSet
.
allOf
(
AliNeedPayErrorEnum
.
class
).
stream
().
map
(
AliNeedPayErrorEnum:
:
name
).
collect
(
Collectors
.
toList
());
}
}
xx-universal/xx-universal-server/src/main/java/com/xxfc/platform/universal/controller/OrderPayController.java
View file @
6055e6c1
...
...
@@ -5,6 +5,7 @@ import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import
com.github.wxiaoqi.security.common.rest.BaseController
;
import
com.xxfc.platform.universal.biz.OrderPayBiz
;
import
com.xxfc.platform.universal.entity.OrderPay
;
import
com.xxfc.platform.universal.vo.FundPayVo
;
import
com.xxfc.platform.universal.vo.OrderPayVo
;
import
com.xxfc.platform.universal.weixin.util.XMLUtil
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -102,4 +103,11 @@ public class OrderPayController extends BaseController<OrderPayBiz,OrderPay> {
}
@PostMapping
(
"/app/unauth/transfer_account"
)
@IgnoreUserToken
public
String
transferAccount
(
@RequestBody
FundPayVo
fundPayVo
)
throws
Exception
{
return
baseBiz
.
fundTrans
(
fundPayVo
);
}
}
\ 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