Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
youka-api
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
java-youka-wallet
youka-api
Commits
8575dbee
Commit
8575dbee
authored
Jun 13, 2018
by
tang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
分润,部分校验等
parent
a16cc3e6
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
615 additions
and
369 deletions
+615
-369
PayApiController.java
src/main/java/com/thinkgem/jeesite/modules/pay/api/PayApiController.java
+35
-0
PayApiDao.java
src/main/java/com/thinkgem/jeesite/modules/pay/dao/PayApiDao.java
+4
-0
JuHeZhongPayJFenService.java
src/main/java/com/thinkgem/jeesite/modules/pay/juhezhong/service/JuHeZhongPayJFenService.java
+15
-5
PayApiService.java
src/main/java/com/thinkgem/jeesite/modules/pay/service/PayApiService.java
+469
-355
UserApiController.java
src/main/java/com/thinkgem/jeesite/modules/user/api/UserApiController.java
+36
-1
UserApiDao.java
src/main/java/com/thinkgem/jeesite/modules/user/dao/UserApiDao.java
+2
-0
UserApiService.java
src/main/java/com/thinkgem/jeesite/modules/user/service/UserApiService.java
+28
-6
PayApiDao.xml
src/main/resources/mappings/modules/pay/PayApiDao.xml
+18
-1
UserDao.xml
src/main/resources/mappings/modules/user/UserDao.xml
+8
-1
No files found.
src/main/java/com/thinkgem/jeesite/modules/pay/api/PayApiController.java
View file @
8575dbee
package
com
.
thinkgem
.
jeesite
.
modules
.
pay
.
api
;
import
com.google.common.collect.Maps
;
import
com.thinkgem.jeesite.common.baseBean.Request
;
import
com.thinkgem.jeesite.common.baseBean.Response
;
import
com.thinkgem.jeesite.common.constant.ComCode
;
import
com.thinkgem.jeesite.common.utils.IdGen
;
import
com.thinkgem.jeesite.modules.commonError.MyException
;
import
com.thinkgem.jeesite.modules.pay.entity.BalanceEntity
;
import
com.thinkgem.jeesite.modules.pay.entity.OrderEntity
;
...
...
@@ -30,6 +32,7 @@ import javax.servlet.http.HttpServletResponse;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.io.UnsupportedEncodingException
;
import
java.text.DecimalFormat
;
import
java.util.*
;
/**
...
...
@@ -664,4 +667,36 @@ public class PayApiController {
return
resp
;
}
/**
* 测试分润
* @param request
* @return
*/
@PostMapping
(
"/testBenefit"
)
public
Response
testBenefit
(
JuHeZhongPayRequest
request
){
Response
resp
=
new
Response
();
try
{
// UserEntity userEntity, OrderEntity orderEntity, String code, JuHeZhongPayRequest request
Request
re
=
new
Request
();
re
.
setSubMerchantCode
(
request
.
getSubMerchantCode
());
UserEntity
userInfo
=
userApiService
.
getUserInfo
(
re
);
// 2. 创建支付订单信息,并保存
String
code
=
IdGen
.
randomBase62
(
64
);
String
payNo
=
ComCode
.
YYYYMMDDHHMM
.
format
(
new
Date
())
+
IdGen
.
randomBase62
(
8
);
// 订单号
String
payCode
=
IdGen
.
randomBase62
(
64
);
DecimalFormat
df
=
new
DecimalFormat
(
"######0.00"
);
String
amount
=
df
.
format
(
Double
.
valueOf
(
request
.
getAmount
()));
// 4. JuHeZhong支付
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
"6"
,
request
.
getCardCode
());
payService
.
addUserBenefits
(
userInfo
,
orderEntity
,
orderEntity
.
getCode
(),
request
);
resp
.
setMessage
(
ComCode
.
STATUS_CODE_2000_DESC
);
resp
.
setStatus
(
ComCode
.
STATUS_CODE_2000
);
}
catch
(
Exception
e
){
resp
.
setMessage
(
ComCode
.
STATUS_CODE_9998_DESC
);
resp
.
setStatus
(
ComCode
.
STATUS_CODE_9998
);
resp
.
setError
(
e
.
getMessage
());
}
return
resp
;
}
}
src/main/java/com/thinkgem/jeesite/modules/pay/dao/PayApiDao.java
View file @
8575dbee
...
...
@@ -37,4 +37,8 @@ public interface PayApiDao {
//获取不同渠道最新使用的额度
Double
getLastLimit
(
Map
<
String
,
String
>
map
);
//获取用户的费率信息
UserRateEntity
getUpUser
(
Map
<
String
,
String
>
map
);
}
src/main/java/com/thinkgem/jeesite/modules/pay/juhezhong/service/JuHeZhongPayJFenService.java
View file @
8575dbee
...
...
@@ -9,10 +9,7 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.dto.CommonDto;
import
com.thinkgem.jeesite.modules.pay.juhezhong.dto.QrCodeDto
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.dto.QuickDto
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.utils.Bean2Map
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.utils.JFenHttpUtil
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.utils.SignUtils
;
import
com.thinkgem.jeesite.modules.pay.juhezhong.utils.*
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
...
...
@@ -27,7 +24,7 @@ import java.util.Map;
@Service
@Transactional
(
readOnly
=
true
)
public
class
JuHeZhongPayJFenService
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
Logger
.
class
);
private
Logger
logger
=
LoggerFactory
.
getLogger
(
JuHeZhongPayJFenService
.
class
);
/**
* 查询订单状态
...
...
@@ -129,6 +126,19 @@ public class JuHeZhongPayJFenService {
return
JSONObject
.
parseObject
(
respStr
);
}
public
JSONObject
quickPayHandle
(
JSONObject
dto
)
throws
Exception
{
dto
.
put
(
"merchantKey"
,
ComCode
.
JFEN_MERCHANT_KEY
);
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
logger
.
debug
(
"HL2通道请求参数:{}"
,
dto
);
String
signBefore
=
SignUtils
.
signBefore
(
dto
);
String
sign
=
SignUtils
.
sign
(
signBefore
,
ComCode
.
JFEN_MERCHANT_SECRET
);
dto
.
put
(
"sign"
,
sign
);
logger
.
info
(
"signBefore:{},sign:{}"
,
signBefore
,
sign
);
String
respStr
=
HttpUtil
.
post
(
ComCode
.
HOST
+
ComCode
.
JFEN_QUICK_PAY_URL
,
dto
.
toJSONString
());
System
.
out
.
println
(
respStr
);
return
JSONObject
.
parseObject
(
respStr
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
JuHeZhongPayJFenService
juHeZhongPayJFenService
=
new
JuHeZhongPayJFenService
();
...
...
src/main/java/com/thinkgem/jeesite/modules/pay/service/PayApiService.java
View file @
8575dbee
...
...
@@ -25,6 +25,7 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService;
import
com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum
;
import
com.thinkgem.jeesite.modules.pay.pinganbank.PingAnBankService
;
import
com.thinkgem.jeesite.modules.pay.pinganbank.dto.PingAnBankDto
;
import
com.thinkgem.jeesite.modules.sys.dao.UserDao
;
import
com.thinkgem.jeesite.modules.sys.entity.Dict
;
import
com.thinkgem.jeesite.modules.sys.utils.DictUtils
;
import
com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest
;
...
...
@@ -40,10 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
import
java.math.BigDecimal
;
import
java.text.DecimalFormat
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
/**
* 支付相关
...
...
@@ -53,7 +51,9 @@ import java.util.Map;
@Lazy
(
false
)
@Transactional
(
readOnly
=
true
)
public
class
PayApiService
{
/** log */
/**
* log
*/
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
PayApiService
.
class
);
@Autowired
private
PayApiDao
payDao
;
...
...
@@ -86,6 +86,7 @@ public class PayApiService {
/**
* 快捷支付(分为不同的渠道)
*
* @param request
* @return
* @throws MyException
...
...
@@ -93,7 +94,7 @@ public class PayApiService {
*/
@Transactional
(
readOnly
=
false
)
public
PayBackDto
quickPay
(
JuHeZhongPayRequest
request
)
throws
MyException
,
Exception
{
if
(
ComCode
.
PAYCHANNEL_HL2
.
equals
(
request
.
getPayChannel
()))
{
if
(
ComCode
.
PAYCHANNEL_HL2
.
equals
(
request
.
getPayChannel
()))
{
PayBackDto
payBackDto
=
this
.
jFenPayJuhezhong
(
request
);
payBackDto
.
setIsUrl
(
"0"
);
return
payBackDto
;
...
...
@@ -108,7 +109,7 @@ public class PayApiService {
userEntity
.
getUserDetail
().
setCard
(
cardEntity
);
//获取当前渠道当日剩余额度
BigDecimal
limitNumber
=
getLimitNumber
(
userEntity
.
getLevel
(),
userEntity
.
getCode
(),
request
.
getPayChannel
());
if
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
request
.
getAmount
())).
compareTo
(
limitNumber
)>
0
)
{
if
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
request
.
getAmount
())).
compareTo
(
limitNumber
)
>
0
)
{
throw
new
MyException
(
"超出额度"
);
}
// 2. 创建支付订单信息,并保存
...
...
@@ -119,9 +120,9 @@ public class PayApiService {
String
amount
=
df
.
format
(
Double
.
valueOf
(
request
.
getAmount
()));
// 4. JuHeZhong支付
PayBackDto
payBackDto
=
new
PayBackDto
();
if
(
ComCode
.
PAYCHANNEL_HL1
.
equals
(
request
.
getPayChannel
()))
{
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
if
(
ComCode
.
PAYCHANNEL_HL1
.
equals
(
request
.
getPayChannel
()))
{
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
// payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...
...
@@ -135,10 +136,10 @@ public class PayApiService {
// 获取支付卡号
CardEntity
cardEntityPay
=
userService
.
getCardInfo
(
request
);
payBackDto
=
this
.
payJuhezhong
(
request
,
userEntity
,
orderEntity
,
cardEntityPay
);
}
else
if
(
ComCode
.
PAYCHANNEL_HL3
.
equals
(
request
.
getPayChannel
()))
{
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
payBackDto
=
this
.
payJuhezhong
(
request
,
userEntity
,
orderEntity
,
cardEntityPay
);
}
else
if
(
ComCode
.
PAYCHANNEL_HL3
.
equals
(
request
.
getPayChannel
()))
{
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
// payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...
...
@@ -152,17 +153,17 @@ public class PayApiService {
// 获取支付卡号
CardEntity
cardEntityPay
=
userService
.
getCardInfo
(
request
);
if
(!
"C"
.
equals
(
cardEntityPay
.
getCardType
()))
{
if
(!
"C"
.
equals
(
cardEntityPay
.
getCardType
()))
{
payBackDto
.
setMessage
(
"只能用信用卡支付"
);
}
else
if
(
cardEntityPay
.
getSupportPayChannel
()==
null
||
!
cardEntityPay
.
getSupportPayChannel
().
contains
(
request
.
getPayChannel
()))
{
payBackDto
.
setMessage
(
"不支持"
+
cardEntityPay
.
getBankName
());
}
else
{
payBackDto
=
this
.
quickPayJuHeZhongIntegralPay
(
userEntity
,
orderEntity
,
request
,
cardEntityPay
);
}
else
if
(
cardEntityPay
.
getSupportPayChannel
()
==
null
||
!
cardEntityPay
.
getSupportPayChannel
().
contains
(
request
.
getPayChannel
()))
{
payBackDto
.
setMessage
(
"不支持"
+
cardEntityPay
.
getBankName
());
}
else
{
payBackDto
=
this
.
quickPayJuHeZhongIntegralPay
(
userEntity
,
orderEntity
,
request
,
cardEntityPay
);
}
}
else
if
(
ComCode
.
PAYCHANNEL_HUANQIUHUIJU
.
equals
(
request
.
getPayChannel
()))
{
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
}
else
if
(
ComCode
.
PAYCHANNEL_HUANQIUHUIJU
.
equals
(
request
.
getPayChannel
()))
{
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
// payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...
...
@@ -177,10 +178,10 @@ public class PayApiService {
// 获取支付卡号
CardEntity
cardEntityPay
=
userService
.
getCardInfo
(
request
);
payBackDto
=
this
.
huanqiuhujuPay
(
userEntity
,
orderEntity
,
request
,
cardEntityPay
);
}
else
{
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
ComCode
.
PAYCHANNEL_HL3
,
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
payBackDto
=
this
.
huanqiuhujuPay
(
userEntity
,
orderEntity
,
request
,
cardEntityPay
);
}
else
{
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
ComCode
.
PAYCHANNEL_HL3
,
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userEntity
.
getUserDetail
().
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
// payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...
...
@@ -194,12 +195,12 @@ public class PayApiService {
// 获取支付卡号
CardEntity
cardEntityPay
=
userService
.
getCardInfo
(
request
);
if
(!
"C"
.
equals
(
cardEntityPay
.
getCardType
()))
{
if
(!
"C"
.
equals
(
cardEntityPay
.
getCardType
()))
{
payBackDto
.
setMessage
(
"只能用信用卡支付"
);
}
else
if
(
cardEntityPay
.
getSupportPayChannel
()==
null
||
!
cardEntityPay
.
getSupportPayChannel
().
contains
(
"ComCode.PAYCHANNEL_HL3,"
))
{
payBackDto
.
setMessage
(
"不支持"
+
cardEntityPay
.
getBankName
());
}
else
{
payBackDto
=
this
.
quickPayJuHeZhongIntegralPay
(
userEntity
,
orderEntity
,
request
,
cardEntityPay
);
}
else
if
(
cardEntityPay
.
getSupportPayChannel
()
==
null
||
!
cardEntityPay
.
getSupportPayChannel
().
contains
(
"ComCode.PAYCHANNEL_HL3,"
))
{
payBackDto
.
setMessage
(
"不支持"
+
cardEntityPay
.
getBankName
());
}
else
{
payBackDto
=
this
.
quickPayJuHeZhongIntegralPay
(
userEntity
,
orderEntity
,
request
,
cardEntityPay
);
}
}
...
...
@@ -210,18 +211,20 @@ public class PayApiService {
/**
* 共用的分润信息
*
* @param userEntity
* @param orderEntity
* @param code
* @param request
*/
private
void
addUserBenefits
(
UserEntity
userEntity
,
OrderEntity
orderEntity
,
String
code
,
JuHeZhongPayRequest
request
){
@Transactional
(
readOnly
=
false
)
public
void
addUserBenefits
(
UserEntity
userEntity
,
OrderEntity
orderEntity
,
String
code
,
JuHeZhongPayRequest
request
)
{
payDao
.
saveOrderInfo
(
orderEntity
);
// 3. 创建分润信息,并保存
Map
<
String
,
String
>
userBenefits
=
getUserBenefit
(
userEntity
,
request
);
for
(
String
key
:
userBenefits
.
keySet
())
{
String
benefitCode
=
IdGen
.
randomBase62
(
64
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
(
benefitCode
,
request
.
getSubMerchantCode
()
,
code
,
request
.
getPayChannel
(),
"0"
,
"A"
,
userBenefits
.
get
(
key
),
""
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
(
benefitCode
,
key
,
code
,
request
.
getPayChannel
(),
"0"
,
"A"
,
userBenefits
.
get
(
key
),
""
);
benefitEntity
.
setAmount
(
String
.
valueOf
(
Double
.
valueOf
(
benefitEntity
.
getAmount
())));
benefitEntity
.
setPayMethod
(
orderEntity
.
getPayMethod
());
payDao
.
saveBenefitInfo
(
benefitEntity
);
...
...
@@ -239,7 +242,7 @@ public class PayApiService {
* @param request
* @throws Exception
*/
public
PayBackDto
quickPayJuHeZhongPay
(
UserEntity
userEntity
,
OrderEntity
orderEntity
,
JuHeZhongPayRequest
request
,
CardEntity
cardEntity
)
throws
Exception
{
public
PayBackDto
quickPayJuHeZhongPay
(
UserEntity
userEntity
,
OrderEntity
orderEntity
,
JuHeZhongPayRequest
request
,
CardEntity
cardEntity
)
throws
Exception
{
// 快捷支付
// ApiQuickPayDto quickPayDto = new ApiQuickPayDto();
// quickPayDto.setMerchantId(ComCode.MERCHANT_ID);
...
...
@@ -268,7 +271,7 @@ public class PayApiService {
quickDto
.
setTrxType
(
3
);
quickDto
.
setMerchantId
(
ComCode
.
MERCHANT_ID
);
quickDto
.
setOrderId
(
orderEntity
.
getPayCode
());
// 将订单的支付号传给第三方平台
quickDto
.
setAmount
(
Long
.
parseLong
(
request
.
getAmount
())
*
100
);
quickDto
.
setAmount
(
Long
.
parseLong
(
request
.
getAmount
())
*
100
);
// 获取支付卡号
quickDto
.
setBankNo
(
cardEntity
.
getCardNo
());
// 支付卡号
...
...
@@ -286,19 +289,19 @@ public class PayApiService {
rateEntity
.
setPayMethod
(
"quick"
);
rateEntity
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HL1
);
rateEntity
=
userService
.
getRateByLevel
(
rateEntity
);
if
(
rateEntity
!=
null
)
{
double
userFee
=
Long
.
parseLong
(
request
.
getAmount
())
*
100
*
Double
.
valueOf
(
rateEntity
.
getRate
());
if
(
userFee
<
100
)
{
if
(
rateEntity
!=
null
)
{
double
userFee
=
Long
.
parseLong
(
request
.
getAmount
())
*
100
*
Double
.
valueOf
(
rateEntity
.
getRate
());
if
(
userFee
<
100
)
{
userFee
=
100
;
}
BigDecimal
bigDecimal
=
new
BigDecimal
(
100
+
Double
.
valueOf
(
Global
.
getConfig
(
"pay.y"
))*
100
);
BigDecimal
bigDecimal
=
new
BigDecimal
(
100
+
Double
.
valueOf
(
Global
.
getConfig
(
"pay.y"
))
*
100
);
quickDto
.
setUserFee
(
bigDecimal
);
// 手续费 单位:分 ,D0 业务必传
}
else
{
}
else
{
quickDto
.
setUserFee
(
new
BigDecimal
(
0
));
}
quickDto
.
setFrontUrl
(
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyPay"
);
// 前台地址
quickDto
.
setNotifyUrl
(
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyPay"
);
// 通知url
quickDto
.
setFrontUrl
(
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyPay"
);
// 前台地址
quickDto
.
setNotifyUrl
(
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyPay"
);
// 通知url
quickDto
.
setTimestamp
(
System
.
currentTimeMillis
());
quickDto
.
setMerchantKey
(
ComCode
.
MERCHANT_KEY
);
JSONObject
jsonObject
=
juHeZhongPayService
.
quickPay
(
quickDto
);
...
...
@@ -307,15 +310,13 @@ public class PayApiService {
if
(!
"0000"
.
equals
(
jsonObject
.
getString
(
"code"
)))
{
throw
new
MyException
(
jsonObject
.
getString
(
"msg"
));
}
else
{
}
else
{
payBackDto
.
setUrl
(
jsonObject
.
getString
(
"url"
));
}
return
payBackDto
;
}
/**
* JuHeZhong积分快捷支付
*
...
...
@@ -323,13 +324,13 @@ public class PayApiService {
* @param request
* @throws Exception
*/
public
PayBackDto
quickPayJuHeZhongIntegralPay
(
UserEntity
userEntity
,
OrderEntity
orderEntity
,
JuHeZhongPayRequest
request
,
CardEntity
cardEntity
)
throws
Exception
{
public
PayBackDto
quickPayJuHeZhongIntegralPay
(
UserEntity
userEntity
,
OrderEntity
orderEntity
,
JuHeZhongPayRequest
request
,
CardEntity
cardEntity
)
throws
Exception
{
UserSubMchId
userSubMchId
=
new
UserSubMchId
();
userSubMchId
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HL3
);
userSubMchId
.
setUserCode
(
userEntity
.
getCode
());
userSubMchId
=
userService
.
getUserSubmchid
(
userSubMchId
);
String
subMchId
=
null
;
if
(
userSubMchId
==
null
)
{
if
(
userSubMchId
==
null
)
{
UserRequest
userRequest
=
new
UserRequest
();
userRequest
.
setSubMerchantCode
(
request
.
getSubMerchantCode
());
userRequest
.
setBelongBank
(
userEntity
.
getUserDetail
().
getCard
().
getBelongBank
());
...
...
@@ -338,30 +339,30 @@ public class PayApiService {
userRequest
.
setMobile
(
userEntity
.
getMobile
());
userRequest
.
setIdCard
(
userEntity
.
getUserDetail
().
getIdCard
());
userRequest
.
setCardPlace
(
userEntity
.
getUserDetail
().
getCard
().
getCardPlace
());
subMchId
=
userService
.
quickPayHandleJuhezhong
(
userRequest
,
""
,
userEntity
.
getLevel
());
subMchId
=
userService
.
quickPayHandleJuhezhong
(
userRequest
,
""
,
userEntity
.
getLevel
());
userSubMchId
=
new
UserSubMchId
();
userSubMchId
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HL3
);
userSubMchId
.
setUserCode
(
userEntity
.
getCode
());
userSubMchId
.
setSubmchid
(
subMchId
);
userService
.
addUserSubmchid
(
userSubMchId
);
}
else
{
}
else
{
subMchId
=
userSubMchId
.
getSubmchid
();
}
JSONObject
dto
=
new
JSONObject
();
dto
.
put
(
"serviceType"
,
4
);
// 服务类型
dto
.
put
(
"orderId"
,
orderEntity
.
getPayCode
());
//订单号
dto
.
put
(
"amount"
,
Long
.
parseLong
(
request
.
getAmount
())
*
100
);
//交易金额
dto
.
put
(
"merchantId"
,
ComCode
.
INTEGRAL_MERCHANT_ID
);
//商户号
dto
.
put
(
"amount"
,
Long
.
parseLong
(
request
.
getAmount
())
*
100
);
//交易金额
dto
.
put
(
"merchantId"
,
ComCode
.
INTEGRAL_MERCHANT_ID
);
//商户号
// dto.put("subMchId", userEntity.getUserDetail().getCard().getSubMerchantId());//由系统分配的商户号
dto
.
put
(
"subMchId"
,
subMchId
);
dto
.
put
(
"subMchId"
,
subMchId
);
dto
.
put
(
"accNo"
,
cardEntity
.
getCardNo
());
//开卡 唯一标识
// dto.put("accNo", "6210210010501799229");//开卡 唯一标识
dto
.
put
(
"mobile"
,
cardEntity
.
getCardMobile
());
dto
.
put
(
"mobile"
,
cardEntity
.
getCardMobile
());
dto
.
put
(
"productName"
,
"收款"
);
//标题
dto
.
put
(
"notifyUrl"
,
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyPay"
);
//支付完成 异步通知结果
dto
.
put
(
"frontUrl"
,
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyPay"
);
//返回商户页面
dto
.
put
(
"notifyUrl"
,
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyPay"
);
//支付完成 异步通知结果
dto
.
put
(
"frontUrl"
,
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyPay"
);
//返回商户页面
dto
.
put
(
"merchantKey"
,
ComCode
.
INTEGRAL_MERCHANT_KEY
);
//商户key
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
//时间戳
System
.
out
.
println
(
dto
.
toJSONString
());
...
...
@@ -372,79 +373,176 @@ public class PayApiService {
if
(!
"0000"
.
equals
(
jsonObject
.
getString
(
"code"
)))
{
throw
new
MyException
(
jsonObject
.
getString
(
"msg"
));
}
else
{
}
else
{
payBackDto
.
setUrl
(
jsonObject
.
getString
(
"url"
));
}
return
payBackDto
;
}
//TODO
//C黄金 D白银 E青铜
//根据分润变化重新写的分润方法
public
Map
<
String
,
String
>
getUserBenefit
(
UserEntity
userEntity
,
JuHeZhongPayRequest
request
)
{
Map
<
String
,
String
>
userBenefit
=
new
HashMap
<>();
String
recommendedPath
=
""
;
if
(
userEntity
.
get
RecommendedPath
()!=
null
&&
userEntity
.
getRecommendedPath
().
length
()>
0
){
re
commendedPath
=
userEntity
.
getRecommendedPath
().
substring
(
1
)
;
//用户等级为C,即黄金级别,上级用户不参与分成,直接返回
if
(
userEntity
.
get
Level
().
equals
(
"C"
)
){
re
turn
userBenefit
;
}
String
[]
pathIds
=
(
recommendedPath
+
userEntity
.
getId
()
+
","
).
split
(
","
);
S
ystem
.
out
.
println
(
"recommendedPath:"
+
recommendedPath
);
System
.
out
.
println
(
"pathIds:"
+
pathIds
);
// 获取三级的会员
List
<
UserRateEntity
>
pathCDEUsers
=
payDao
.
getCDEUsers
(
pathIds
);
int
countLevelC
=
0
;
// 判断上级有几个黄金会员(C)
for
(
UserRateEntity
entity
:
pathCDEUsers
)
{
// 不考虑该用户本身
if
(
entity
.
getUserCode
().
equals
(
userEntity
.
getCode
())
)
{
continue
;
}
if
(
"C"
.
equals
(
entity
.
getUserLevel
()))
{
countLevelC
++;
}
//该笔交易的支付方式,获取不同费率
String
payChannel
=
request
.
getPayChannel
();
//获取该笔交易的金额
S
tring
amount
=
request
.
getAmount
(
);
HashMap
<
String
,
String
>
map
=
Maps
.
newHashMap
(
);
map
.
put
(
"pay_channel"
,
payChannel
);
map
.
put
(
"id"
,
userEntity
.
getId
());
//当前用户费率实体
UserRateEntity
userRateEntity
=
payDao
.
getUpUser
(
map
)
;
List
<
String
>
idsList
=
new
ArrayList
<>();
//根据user表中recommendPath的值获取推荐人
if
(
userEntity
.
getRecommendedPath
()
!=
null
&&
userEntity
.
getRecommendedPath
().
length
()
>
0
)
{
String
[]
ids
=
userEntity
.
getRecommendedPath
().
split
(
","
)
;
idsList
=
Arrays
.
asList
(
ids
);
//因只取两级推荐用户也就是取,上级,上上级,而当前字符串包含了所有的推荐层级
//进行逆序排序,只取前两级用户id
Collections
.
sort
(
idsList
,
(
a
,
b
)
->
b
.
compareTo
(
a
));
}
double
minRate
=
1
;
int
levelCPosition
=
0
;
for
(
UserRateEntity
entity
:
pathCDEUsers
)
{
levelCPosition
++;
minRate
=
minRate
>=
Double
.
parseDouble
(
entity
.
getRate
())
?
Double
.
parseDouble
(
entity
.
getRate
())
:
minRate
;
if
(
entity
.
getUserCode
().
equals
(
userEntity
.
getCode
()))
{
continue
;
}
// 只有黄金会员(C)以上才分润
if
(
"C"
.
equals
(
entity
.
getUserLevel
()))
{
double
percent
=
countLevelC
==
1
?
1
d
:
(
levelCPosition
==
2
?
0.95
:
0.05
);
userBenefit
.
put
(
entity
.
getUserCode
(),
String
.
valueOf
((
minRate
-
Double
.
parseDouble
(
entity
.
getRate
()))
>
0
?
(
minRate
-
Double
.
parseDouble
(
entity
.
getRate
()))
*
Double
.
parseDouble
(
request
.
getAmount
())
*
percent
:
"0"
));
//获取当前用户的推荐者,只获取了上级和上上级
//上级
UserRateEntity
upUser
=
null
;
if
(
idsList
.
size
()>
0
){
String
upId
=
idsList
.
get
(
0
);
map
.
put
(
"id"
,
upId
);
upUser
=
payDao
.
getUpUser
(
map
);
if
(
upUser
!=
null
&&
upUser
.
getUserLevel
().
equals
(
"C"
)){
//AC1=(A-C1)乘以X=(0.55%-0.5%)乘以X
//当前用户(A,B只有这两种等级会给上级分成),也就是当前用户的费率与上级用户费率的差值
BigDecimal
rateResult
=
BigDecimal
.
valueOf
(
Double
.
valueOf
(
userRateEntity
.
getRate
())).
subtract
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
upUser
.
getRate
())));
BigDecimal
benefitResult
=
rateResult
.
multiply
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
amount
)));
userBenefit
.
put
(
upUser
.
getUserCode
(),
benefitResult
.
toString
());
}
}
// EE1C2=(E1-C2)乘以X=(0.55%-0.5%)乘以X
// ED1C2=(D1-C2)乘以X=(0.52%-0.5%)乘以X
// DE1C2=(D-C2)乘以X=(0.52%-0.5%)乘以X
// DD1C2=(D1-C2)乘以X=(0.52%-O.5%)乘以X
// 同上级分利润一样,当前用户是C,即黄金会员时,不参与分成;上上级用户只有是黄金会员时才能参与分成,即必须为C
// 出现的分成情况只有四种:
// 1.当前用户是E(青铜),上级用户是E1(青铜),上上级用户是C(黄金),当前用户费率与上上级用户费率差值
// 2.当前用户是E(青铜),上级用户是D1(白银),上上级用户是C(黄金),上级用户费率与上上级用户费率差值
// 3.当前用户是D(白银),上级用户是E1(青铜),上上级用户是C(黄金),当前用户费率与上上级用户费率差值
// 4.当前用户是D(白银),上级用户是D1(白银),上上级用户是C(黄金),上级用户费率与上上级用户费率差值
//
//上上级
if
(
idsList
.
size
()>
1
){
String
upUpId
=
idsList
.
get
(
1
);
map
.
put
(
"id"
,
upUpId
);
UserRateEntity
upUpUser
=
payDao
.
getUpUser
(
map
);
if
(
upUpUser
!=
null
&&
upUpUser
.
getUserLevel
().
equals
(
"C"
)){
//第一种情况
if
(
userEntity
.
getLevel
().
equals
(
"E"
)
&&
upUser
.
getUserLevel
().
equals
(
"E"
)){
BigDecimal
rateResult
=
BigDecimal
.
valueOf
(
Double
.
valueOf
(
userRateEntity
.
getRate
())).
subtract
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
upUpUser
.
getRate
())));
BigDecimal
benefitResult
=
rateResult
.
multiply
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
amount
)));
userBenefit
.
put
(
upUpUser
.
getUserCode
(),
benefitResult
.
toString
());
}
//第二种情况
if
(
userEntity
.
getLevel
().
equals
(
"E"
)
&&
upUser
.
getUserLevel
().
equals
(
"D"
)){
BigDecimal
rateResult
=
BigDecimal
.
valueOf
(
Double
.
valueOf
(
upUser
.
getRate
())).
subtract
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
upUpUser
.
getRate
())));
BigDecimal
benefitResult
=
rateResult
.
multiply
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
amount
)));
userBenefit
.
put
(
upUpUser
.
getUserCode
(),
benefitResult
.
toString
());
}
// 获取顶级管理员
UserRateEntity
userRateEntity
=
new
UserRateEntity
();
userRateEntity
.
setPathIds
(
pathIds
);
userRateEntity
.
setPayChannel
(
request
.
getPayChannel
());
List
<
UserRateEntity
>
pathSABUsers
=
payDao
.
getSABUsers
(
userRateEntity
);
if
(
pathSABUsers
!=
null
&&
pathSABUsers
.
size
()>
0
){
for
(
UserRateEntity
entity
:
pathSABUsers
)
{
System
.
out
.
println
(
entity
.
getRate
());
System
.
out
.
println
(
entity
.
getUserCode
());
System
.
out
.
println
(
entity
.
getUserLevel
());
System
.
out
.
println
(
request
.
getAmount
());
userBenefit
.
put
(
entity
.
getUserCode
(),
String
.
valueOf
((
minRate
-
Double
.
parseDouble
(
entity
.
getRate
()))
*
Double
.
parseDouble
(
request
.
getAmount
())));
minRate
=
Double
.
valueOf
(
entity
.
getRate
());
//第三种情况
if
(
userEntity
.
getLevel
().
equals
(
"D"
)
&&
upUser
.
getUserLevel
().
equals
(
"E"
)){
BigDecimal
rateResult
=
BigDecimal
.
valueOf
(
Double
.
valueOf
(
userRateEntity
.
getRate
())).
subtract
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
upUpUser
.
getRate
())));
BigDecimal
benefitResult
=
rateResult
.
multiply
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
amount
)));
userBenefit
.
put
(
upUpUser
.
getUserCode
(),
benefitResult
.
toString
());
}
//第四种情况
if
(
userEntity
.
getLevel
().
equals
(
"D"
)
&&
upUser
.
getUserLevel
().
equals
(
"D"
)){
BigDecimal
rateResult
=
BigDecimal
.
valueOf
(
Double
.
valueOf
(
upUser
.
getRate
())).
subtract
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
upUpUser
.
getRate
())));
BigDecimal
benefitResult
=
rateResult
.
multiply
(
BigDecimal
.
valueOf
(
Double
.
valueOf
(
amount
)));
userBenefit
.
put
(
upUpUser
.
getUserCode
(),
benefitResult
.
toString
());
}
}
}
return
userBenefit
;
}
//最初分润方法
// public Map<String, String> getUserBenefit(UserEntity userEntity, JuHeZhongPayRequest request) {
// Map<String, String> userBenefit = new HashMap<>();
// String recommendedPath = "";
// if(userEntity.getRecommendedPath()!=null && userEntity.getRecommendedPath().length()>0){
// recommendedPath = userEntity.getRecommendedPath().substring(1);
// }
// String[] pathIds = (recommendedPath + userEntity.getId() + ",").split(",");
//
//
// System.out.println("recommendedPath:"+recommendedPath);
// System.out.println("pathIds:"+pathIds);
//
// // 获取三级的会员
// List<UserRateEntity> pathCDEUsers = payDao.getCDEUsers(pathIds);
// int countLevelC = 0;
// // 判断上级有几个黄金会员(C)
// for (UserRateEntity entity : pathCDEUsers) {
// // 不考虑该用户本身
// if (entity.getUserCode().equals(userEntity.getCode())) {
// continue;
// }
// if ("C".equals(entity.getUserLevel())) {
// countLevelC++;
// }
// }
// double minRate = 1;
// int levelCPosition = 0;
// for (UserRateEntity entity : pathCDEUsers) {
// levelCPosition++;
// minRate = minRate >= Double.parseDouble(entity.getRate()) ? Double.parseDouble(entity.getRate()) : minRate;
// if (entity.getUserCode().equals(userEntity.getCode())) {
// continue;
// }
// // 只有黄金会员(C)以上才分润
// if ("C".equals(entity.getUserLevel())) {
// double percent = countLevelC == 1 ? 1d : (levelCPosition == 2 ? 0.95 : 0.05);
// userBenefit.put(entity.getUserCode(), String.valueOf((minRate - Double.parseDouble(entity.getRate())) > 0 ? (minRate - Double.parseDouble(entity.getRate())) * Double.parseDouble(request.getAmount()) * percent : "0"));
// }
// }
//
//
// // 获取顶级管理员
// UserRateEntity userRateEntity = new UserRateEntity();
// userRateEntity.setPathIds(pathIds);
// userRateEntity.setPayChannel(request.getPayChannel());
// List<UserRateEntity> pathSABUsers = payDao.getSABUsers(userRateEntity);
//
// if(pathSABUsers!=null && pathSABUsers.size()>0){
// for (UserRateEntity entity : pathSABUsers) {
// System.out.println(entity.getRate());
// System.out.println(entity.getUserCode());
// System.out.println(entity.getUserLevel());
// System.out.println(request.getAmount());
// userBenefit.put(entity.getUserCode(), String.valueOf((minRate - Double.parseDouble(entity.getRate())) * Double.parseDouble(request.getAmount())));
// minRate = Double.valueOf(entity.getRate());
// }
// }
//
// return userBenefit;
// }
/**
* HL2 通道 即JFEN 开卡 需要得参数
*
* @param request
* @return
*/
public
Response
openCardJFen
(
UserRequest
request
){
public
Response
openCardJFen
(
UserRequest
request
)
{
Response
response
=
new
Response
();
CardEntity
cardEntity
=
userService
.
getCardInfo
(
request
);
...
...
@@ -456,7 +554,7 @@ public class PayApiService {
UserDetailEntity
userDetailEntity
=
userService
.
getUserDetailByCode
(
request
.
getSubMerchantCode
());
// 如果没有注册 则先注册
if
(
userSubMchId
==
null
)
{
if
(
userSubMchId
==
null
)
{
CardEntity
cardEntityDebit
=
userService
.
getCardInfoByCode
(
userEntity
);
JSONObject
dto
=
new
JSONObject
();
...
...
@@ -464,30 +562,30 @@ public class PayApiService {
dto
.
put
(
"orderId"
,
MakeOrderNum
.
makeOrderNum
());
//
dto
.
put
(
"serviceType"
,
1
);
dto
.
put
(
"subMerchantName"
,
userDetailEntity
.
getRealName
()+
System
.
currentTimeMillis
());
dto
.
put
(
"subMerchantType"
,
"PERSON"
);
dto
.
put
(
"businessLicense"
,
userDetailEntity
.
getRealName
()+
System
.
currentTimeMillis
());
dto
.
put
(
"legalPersonName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"legalPersonID"
,
userDetailEntity
.
getIdCard
());
dto
.
put
(
"subMerchantPersonName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"subMerchantPersonPhone"
,
cardEntityDebit
.
getCardMobile
());
dto
.
put
(
"bankType"
,
"TOPRIVATE"
);
dto
.
put
(
"accountName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"accountNo"
,
cardEntityDebit
.
getCardNo
());
dto
.
put
(
"bankName"
,
cardEntityDebit
.
getBankName
());
dto
.
put
(
"bankProv"
,
"天津市"
);
dto
.
put
(
"bankCity"
,
"天津市"
);
dto
.
put
(
"bankBranch"
,
"天津市职场"
);
dto
.
put
(
"serviceType"
,
1
);
dto
.
put
(
"subMerchantName"
,
userDetailEntity
.
getRealName
()
+
System
.
currentTimeMillis
());
dto
.
put
(
"subMerchantType"
,
"PERSON"
);
dto
.
put
(
"businessLicense"
,
userDetailEntity
.
getRealName
()
+
System
.
currentTimeMillis
());
dto
.
put
(
"legalPersonName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"legalPersonID"
,
userDetailEntity
.
getIdCard
());
dto
.
put
(
"subMerchantPersonName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"subMerchantPersonPhone"
,
cardEntityDebit
.
getCardMobile
());
dto
.
put
(
"bankType"
,
"TOPRIVATE"
);
dto
.
put
(
"accountName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"accountNo"
,
cardEntityDebit
.
getCardNo
());
dto
.
put
(
"bankName"
,
cardEntityDebit
.
getBankName
());
dto
.
put
(
"bankProv"
,
"天津市"
);
dto
.
put
(
"bankCity"
,
"天津市"
);
dto
.
put
(
"bankBranch"
,
"天津市职场"
);
// dto.put("bankProv",cardEntityDebit.getCity());
// dto.put("bankCity",cardEntityDebit.getCity());
// dto.put("bankBranch",cardEntityDebit.getCardPlace());
dto
.
put
(
"bankCode"
,
cardEntityDebit
.
getBelongBank
());
dto
.
put
(
"bankCode"
,
cardEntityDebit
.
getBelongBank
());
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
// dto.put("legalPersonID",userDetailEntity.getIdCard());
// dto.put("subMerchantPersonName",userDetailEntity.getRealName());
// dto.put("subMerchantPersonPhone",cardEntityDebit.getCardMobile());
...
...
@@ -548,35 +646,34 @@ public class PayApiService {
rateEntity
=
userService
.
getRateByLevel
(
rateEntity
);
JSONObject
dto
=
new
JSONObject
();
dto
.
put
(
"orderId"
,
MakeOrderNum
.
makeOrderNum
());
dto
.
put
(
"merchantId"
,
ComCode
.
JFEN_MERCHANT_ID
);
dto
.
put
(
"serviceType"
,
"8"
);
dto
.
put
(
"subMchId"
,
userSubMchId
.
getSubmchid
());
dto
.
put
(
"idType"
,
"01"
);
dto
.
put
(
"idNo"
,
userDetailEntity
.
getIdCard
());
if
(
rateEntity
==
null
)
{
dto
.
put
(
"d0Fee"
,
"0.0043"
);
}
else
{
dto
.
put
(
"d0Fee"
,
rateEntity
.
getRate
());
dto
.
put
(
"merchantId"
,
ComCode
.
JFEN_MERCHANT_ID
);
dto
.
put
(
"serviceType"
,
"8"
);
dto
.
put
(
"subMchId"
,
userSubMchId
.
getSubmchid
());
dto
.
put
(
"idType"
,
"01"
);
dto
.
put
(
"idNo"
,
userDetailEntity
.
getIdCard
());
if
(
rateEntity
==
null
)
{
dto
.
put
(
"d0Fee"
,
"0.0043"
);
}
else
{
dto
.
put
(
"d0Fee"
,
rateEntity
.
getRate
());
}
dto
.
put
(
"accountName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"accountNo"
,
cardEntity
.
getCardNo
());
dto
.
put
(
"mobile"
,
cardEntity
.
getCardMobile
());
dto
.
put
(
"notifyUrl"
,
Global
.
getConfig
(
"project.access.url"
)+
"/api/pay/openCardCallback"
);
dto
.
put
(
"merchantKey"
,
ComCode
.
JFEN_MERCHANT_KEY
);
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
dto
.
put
(
"accountName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"accountNo"
,
cardEntity
.
getCardNo
());
dto
.
put
(
"mobile"
,
cardEntity
.
getCardMobile
());
dto
.
put
(
"notifyUrl"
,
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/openCardCallback"
);
dto
.
put
(
"merchantKey"
,
ComCode
.
JFEN_MERCHANT_KEY
);
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
PayBackDto
payBackDto
=
new
PayBackDto
();
try
{
JSONObject
jsonObject
=
juHeZhongPayJFenService
.
openCard
(
dto
);
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
payBackDto
.
setUrl
(
jsonObject
.
getString
(
"url"
));
response
.
setData
(
payBackDto
);
response
.
setStatus
(
ComCode
.
STATUS_CODE_2000
);
return
response
;
}
else
{
}
else
{
payBackDto
.
setUrl
(
jsonObject
.
getString
(
"url"
));
response
.
setData
(
payBackDto
);
...
...
@@ -596,7 +693,7 @@ public class PayApiService {
// HL2 通道 即JFEN 发送验证码 需要的参数 SubMerchantCode\amount\cardCode\PayChannel 通道\
@Transactional
(
readOnly
=
false
)
public
Response
sendMessageJFen
(
JuHeZhongPayRequest
request
)
{
public
Response
sendMessageJFen
(
JuHeZhongPayRequest
request
)
{
request
.
setPayMethod
(
"quick"
);
CardEntity
cardEntity
=
userService
.
getCardInfoSwpaccid
(
request
);
UserSubMchId
userSubMchId
=
new
UserSubMchId
();
...
...
@@ -605,7 +702,7 @@ public class PayApiService {
userSubMchId
=
userService
.
getUserSubmchid
(
userSubMchId
);
UserEntity
userEntity
=
userService
.
getUserInfo
(
request
);
UserDetailEntity
userDetailEntity
=
userService
.
getUserDetailByCode
(
request
.
getSubMerchantCode
());
userDetailEntity
.
setCard
(
cardEntity
);
userDetailEntity
.
setCard
(
cardEntity
);
userEntity
.
setUserDetail
(
userDetailEntity
);
// 2. 创建支付订单信息,并保存
...
...
@@ -614,10 +711,10 @@ public class PayApiService {
String
payCode
=
IdGen
.
randomBase62
(
64
);
DecimalFormat
df
=
new
DecimalFormat
(
"######0.00"
);
String
amount
=
df
.
format
(
Double
.
valueOf
(
request
.
getAmount
()));
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userDetailEntity
.
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userDetailEntity
.
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
"quick"
,
request
.
getPayChannel
(),
"1"
,
amount
,
request
.
getSubject
(),
""
,
String
.
valueOf
(
"D"
.
equalsIgnoreCase
(
userDetailEntity
.
getCard
().
getCardType
())
?
5
:
(
"C"
.
equalsIgnoreCase
(
userDetailEntity
.
getCard
().
getCardType
())
?
6
:
0
)),
request
.
getCardCode
());
//3. 分润信息
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
addUserBenefits
(
userEntity
,
orderEntity
,
code
,
request
);
// payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...
...
@@ -631,24 +728,26 @@ public class PayApiService {
Response
response
=
new
Response
();
JSONObject
dto
=
new
JSONObject
();
dto
.
put
(
"orderId"
,
payCode
);
// 订单号
dto
.
put
(
"merchantId"
,
ComCode
.
JFEN_MERCHANT_ID
);
dto
.
put
(
"serviceType"
,
"4"
);
dto
.
put
(
"subMchId"
,
userSubMchId
.
getSubmchid
());
dto
.
put
(
"merchantKey"
,
ComCode
.
JFEN_MERCHANT_KEY
);
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
dto
.
put
(
"amount"
,
amount
);
dto
.
put
(
"idNo"
,
userDetailEntity
.
getIdCard
());
dto
.
put
(
"accountName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"accountNo"
,
cardEntity
.
getCardNo
());
dto
.
put
(
"mobile"
,
cardEntity
.
getCardMobile
());
dto
.
put
(
"swpaccid"
,
cardEntity
.
getSwpaccid
());
dto
.
put
(
"notifyUrl"
,
Global
.
getConfig
(
"project.access.url"
)+
"/api/pay/openCardCallback"
);
dto
.
put
(
"orderId"
,
payCode
);
// 订单号
dto
.
put
(
"merchantId"
,
ComCode
.
JFEN_MERCHANT_ID
);
dto
.
put
(
"serviceType"
,
"4"
);
dto
.
put
(
"subMchId"
,
userSubMchId
.
getSubmchid
());
dto
.
put
(
"merchantKey"
,
ComCode
.
JFEN_MERCHANT_KEY
);
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
int
amountInt
=
(
int
)
(
Double
.
valueOf
(
request
.
getAmount
())
*
100
);
dto
.
put
(
"amount"
,
amountInt
);
dto
.
put
(
"idNo"
,
userDetailEntity
.
getIdCard
());
dto
.
put
(
"accountName"
,
userDetailEntity
.
getRealName
());
dto
.
put
(
"accountNo"
,
cardEntity
.
getCardNo
());
dto
.
put
(
"mobile"
,
cardEntity
.
getCardMobile
());
dto
.
put
(
"swpaccid"
,
cardEntity
.
getSwpaccid
());
dto
.
put
(
"notifyUrl"
,
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/openCardCallback"
);
try
{
//发送短信
JSONObject
jsonObject
=
juHeZhongPayIntegralService
.
quickPayHandle
(
dto
);
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
))){
//发送短信
JSONObject
jsonObject
=
juHeZhongPayJFenService
.
quickPayHandle
(
dto
);
// JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle ( dto );
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
orderEntity
.
setTradeNo
(
jsonObject
.
getString
(
"trade_no"
));
payDao
.
updateOrderTradeNo
(
orderEntity
);
response
.
setData
(
orderEntity
);
...
...
@@ -673,7 +772,7 @@ public class PayApiService {
// HL2 通道 即JFEN 发送验证码 需要的参数 SubMerchantCode\payNo\passwd\cardCode \
@Transactional
(
readOnly
=
false
)
public
PayBackDto
jFenPayJuhezhong
(
JuHeZhongPayRequest
request
)
throws
Exception
{
public
PayBackDto
jFenPayJuhezhong
(
JuHeZhongPayRequest
request
)
throws
Exception
{
request
.
setPayMethod
(
"quick"
);
CardEntity
cardEntity
=
userService
.
getCardInfoSwpaccid
(
request
);
...
...
@@ -682,8 +781,8 @@ public class PayApiService {
userSubMchId
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HL2
);
userSubMchId
=
userService
.
getUserSubmchid
(
userSubMchId
);
// 如果没有注册 则先注册
if
(
userSubMchId
==
null
)
{
throw
new
MyException
(
"未开卡,请先开卡"
);
if
(
userSubMchId
==
null
)
{
throw
new
MyException
(
"未开卡,请先开卡"
);
}
OrderEntity
orderEntity
=
this
.
getOrder
(
request
.
getPayNo
());
...
...
@@ -692,26 +791,26 @@ public class PayApiService {
payBackDto
.
setIsUrl
(
"0"
);
JSONObject
dto
=
new
JSONObject
();
dto
.
put
(
"orderId"
,
MakeOrderNum
.
makeOrderNum
());
// 非订单号
dto
.
put
(
"merchantId"
,
ComCode
.
JFEN_MERCHANT_ID
);
// 商户号
dto
.
put
(
"serviceType"
,
"5"
);
// 操作类型 5
dto
.
put
(
"subMchId"
,
userSubMchId
.
getSubmchid
());
// 子商户号
dto
.
put
(
"merchantKey"
,
ComCode
.
JFEN_MERCHANT_KEY
);
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
dto
.
put
(
"passwd"
,
request
.
getPasswd
());
dto
.
put
(
"productName"
,
"productName"
);
dto
.
put
(
"tradeNo"
,
orderEntity
.
getTradeNo
());
dto
.
put
(
"swpaccid"
,
cardEntity
.
getSwpaccid
());
dto
.
put
(
"orderId"
,
MakeOrderNum
.
makeOrderNum
());
// 非订单号
dto
.
put
(
"merchantId"
,
ComCode
.
JFEN_MERCHANT_ID
);
// 商户号
dto
.
put
(
"serviceType"
,
"5"
);
// 操作类型 5
dto
.
put
(
"subMchId"
,
userSubMchId
.
getSubmchid
());
// 子商户号
dto
.
put
(
"merchantKey"
,
ComCode
.
JFEN_MERCHANT_KEY
);
dto
.
put
(
"timestamp"
,
System
.
currentTimeMillis
());
dto
.
put
(
"passwd"
,
request
.
getPasswd
());
dto
.
put
(
"productName"
,
"productName"
);
dto
.
put
(
"tradeNo"
,
orderEntity
.
getTradeNo
());
dto
.
put
(
"swpaccid"
,
cardEntity
.
getSwpaccid
());
JSONObject
jsonObject
=
juHeZhongPayJFenService
.
openCard
(
dto
);
payBackDto
.
setMessage
(
jsonObject
.
getString
(
"msg"
));
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
this
.
notifyPay
(
orderEntity
);
return
payBackDto
;
}
else
{
}
else
{
throw
new
MyException
(
jsonObject
.
getString
(
"msg"
));
}
...
...
@@ -720,7 +819,7 @@ public class PayApiService {
// HL4 通道
@Transactional
(
readOnly
=
false
)
public
PayBackDto
payJuhezhong
(
JuHeZhongPayRequest
request
,
UserEntity
userEntity
,
OrderEntity
orderEntity
,
CardEntity
cardEntity
)
throws
Exception
{
public
PayBackDto
payJuhezhong
(
JuHeZhongPayRequest
request
,
UserEntity
userEntity
,
OrderEntity
orderEntity
,
CardEntity
cardEntity
)
throws
Exception
{
//获取用户对应等级费率以及每笔需要的手续费
RateEntity
gradeRate
=
getGradeRate
(
userEntity
.
getLevel
(),
request
.
getPayChannel
());
...
...
@@ -739,16 +838,17 @@ public class PayApiService {
dto
.
setOrderId
(
MakeOrderNum
.
makeOrderNum
());
//非订单号
dto
.
setMerchantId
(
ComCode
.
MERCHANT_ID
);
//商户号
dto
.
setMerchantKey
(
ComCode
.
MERCHANT_KEY
);
dto
.
setAmount
(
Integer
.
valueOf
(
request
.
getAmount
())
*
100
);
//订单金额,单位为分
dto
.
setAmount
(
Integer
.
valueOf
(
request
.
getAmount
())
*
100
);
//订单金额,单位为分
dto
.
setTrxType
(
3
);
//交易类型,默认传3
dto
.
setType
(
cardEntity
.
getCardType
().
equals
(
"D"
)
?
6
:
5
);
//5 借记卡 只能 D0 6 贷记卡 D0 t1 ,表中 银行卡类型 D储蓄卡 C信用卡'
dto
.
setType
(
cardEntity
.
getCardType
().
equals
(
"D"
)
?
6
:
5
);
//5 借记卡 只能 D0 6 贷记卡 D0 t1 ,表中 银行卡类型 D储蓄卡 C信用卡'
dto
.
setBankNo
(
cardEntity
.
getCardNo
());
//支付卡号
dto
.
setCvn2
(
request
.
getCvn2
());
//安全码
dto
.
setPhone
(
cardEntity
.
getCardMobile
());
//支付卡预留手机号
dto
.
setExpired
(
request
.
getExpireDate
());
//信用卡有效期(MMYY)
dto
.
setUserFee
(
amount
<
200
?
Integer
.
valueOf
(
ComCode
.
EXTRA_RATE
)
:
amount
);
//手续费 单位:分 ,D0 业务必传,商家约定
if
(
cardEntity
.
getCardType
().
equals
(
"C"
)){
if
(
cardEntityDebit
==
null
){
dto
.
setUserFee
(
amount
<
200
?
Integer
.
valueOf
(
ComCode
.
EXTRA_RATE
)
:
amount
);
//手续费 单位:分 ,D0 业务必传,商家约定
if
(
cardEntity
.
getCardType
().
equals
(
"C"
))
{
if
(
cardEntityDebit
==
null
)
{
throw
new
MyException
(
"还没有结算卡!"
);
}
dto
.
setSettleBankName
(
cardEntityDebit
.
getBankName
());
//结算银行 D0 业务必传
...
...
@@ -760,15 +860,20 @@ public class PayApiService {
dto
.
setNotifyUrl
(
ComCode
.
NOTIFY_CALLBACK_URL
);
//通知url
dto
.
setFrontUrl
(
ComCode
.
NOTIFY_CALLBACK_URL
);
//前台地址url(保留)
dto
.
setTimestamp
(
System
.
currentTimeMillis
());
logger
.
debug
(
"HL4支付请求参数, expireDate: {}, cvn2: {}, cardMobile: {}, "
+
"cardNo: {}, settleBankName: {}, settleBankNo: {}, settleBankPhone:{}, "
+
"name:{}, certificateCode:{}"
,
request
.
getExpireDate
(),
request
.
getCvn2
(),
cardEntity
.
getCardMobile
(),
cardEntity
.
getCardNo
(),
cardEntityDebit
.
getBankName
(),
cardEntityDebit
.
getCardNo
(),
cardEntityDebit
.
getCardMobile
(),
userDetail
.
getRealName
(),
userDetail
.
getIdCard
());
JSONObject
jsonObject
=
juHeZhongPayService
.
quickPay
(
dto
);
logger
.
debug
(
"HL4支付返回结果信息:{}"
+
jsonObject
.
toJSONString
());
logger
.
debug
(
"HL4支付返回结果信息:{}"
+
jsonObject
.
toJSONString
());
payBackDto
.
setMessage
(
jsonObject
.
getString
(
"msg"
));
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
//订单支付成功,则进行一次查询,修改订单状态
this
.
notifyPay
(
orderEntity
);
return
payBackDto
;
}
else
{
}
else
{
throw
new
MyException
(
jsonObject
.
getString
(
"msg"
));
}
...
...
@@ -776,119 +881,122 @@ public class PayApiService {
/**
* huanqiuhuiju 快捷支付
*
* @param request
* @return
*/
public
PayBackDto
huanqiuhujuPay
(
UserEntity
userEntity
,
OrderEntity
orderEntity
,
JuHeZhongPayRequest
request
,
CardEntity
cardEntity
)
throws
Exception
{
PayBackDto
payBackDto
=
new
PayBackDto
();
JSONObject
dto
=
new
JSONObject
();
String
orderId
=
IdGen
.
randomBase62
(
32
);
RateEntity
rateEntity
=
new
RateEntity
();
rateEntity
.
setUserLevel
(
userEntity
.
getLevel
());
rateEntity
.
setPayMethod
(
"quick"
);
rateEntity
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HUANQIUHUIJU
);
rateEntity
=
userService
.
getRateByLevel
(
rateEntity
);
dto
.
put
(
"transcode"
,
"300"
);
// 交易码
dto
.
put
(
"version"
,
"0100"
);
// 版本号
dto
.
put
(
"ordersn"
,
MakeOrderNum
.
makeOrderNum
());
// 流水号 每次交易都唯一
dto
.
put
(
"merchno"
,
ComCode
.
HUANQIUHUIJU_MERCHANT_ID
);
// 商户号
dto
.
put
(
"dsorderid"
,
orderId
);
// 订单号 唯一
dto
.
put
(
"txnAmt"
,
request
.
getAmount
());
// 交易金额
dto
.
put
(
"txnRate"
,
String
.
valueOf
(
Double
.
valueOf
(
rateEntity
.
getRate
())*
100
));
// 费率
dto
.
put
(
"siglePrice"
,
rateEntity
.
getSiglePrice
()
);
// 单笔价格
dto
.
put
(
"merchno"
,
ComCode
.
HUANQIUHUIJU_MERCHANT_ID
);
// 商户号
dto
.
put
(
"realName"
,
userEntity
.
getUserDetail
().
getRealName
());
// 真实姓名
dto
.
put
(
"idCardNo"
,
userEntity
.
getUserDetail
().
getIdCard
());
// 身份证号
dto
.
put
(
"bankCardNo"
,
cardEntity
.
getCardNo
());
// 银行卡号
dto
.
put
(
"bankCode"
,
cardEntity
.
getBelongBank
());
// 银行代码
dto
.
put
(
"bankName"
,
cardEntity
.
getBankName
());
// 消费卡银行名称
dto
.
put
(
"phone"
,
cardEntity
.
getCardMobile
());
// 手机号
dto
.
put
(
"cvn2"
,
request
.
getCvn2
());
dto
.
put
(
"expireDate"
,
request
.
getExpireDate
());
dto
.
put
(
"notifyUrl"
,
Global
.
getConfig
(
"project.access.url"
)+
"/api/pay/notifyHuanqiuhuijuPay"
);
dto
.
put
(
"settleBankCode"
,
userEntity
.
getUserDetail
().
getCard
().
getBelongBank
());
// 结算银行代码
dto
.
put
(
"settleCardNo"
,
userEntity
.
getUserDetail
().
getCard
().
getCardNo
());
// 结算银行卡
dto
.
put
(
"settlePhone"
,
userEntity
.
getUserDetail
().
getCard
().
getCardMobile
());
// 结算手机号
dto
.
put
(
"settleCardBankName"
,
userEntity
.
getUserDetail
().
getCard
().
getBankName
());
// 结算卡银行名称
System
.
out
.
println
(
dto
.
toJSONString
());
JSONObject
jsonObject
=
huanqiuhuijuService
.
huanqiuhuijuPay
(
dto
);
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"returncode"
)))
{
payBackDto
.
setIsUrl
(
"0"
);
payBackDto
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HUANQIUHUIJU
);
this
.
notifyPay
(
orderEntity
);
return
payBackDto
;
}
else
{
orderFail
(
orderEntity
);
throw
new
MyException
(
jsonObject
.
getString
(
"errtext"
));
}
}
public
PayBackDto
huanqiuhujuPay
(
UserEntity
userEntity
,
OrderEntity
orderEntity
,
JuHeZhongPayRequest
request
,
CardEntity
cardEntity
)
throws
Exception
{
PayBackDto
payBackDto
=
new
PayBackDto
();
JSONObject
dto
=
new
JSONObject
();
String
orderId
=
IdGen
.
randomBase62
(
32
);
RateEntity
rateEntity
=
new
RateEntity
();
rateEntity
.
setUserLevel
(
userEntity
.
getLevel
());
rateEntity
.
setPayMethod
(
"quick"
);
rateEntity
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HUANQIUHUIJU
);
rateEntity
=
userService
.
getRateByLevel
(
rateEntity
);
dto
.
put
(
"transcode"
,
"300"
);
// 交易码
dto
.
put
(
"version"
,
"0100"
);
// 版本号
dto
.
put
(
"ordersn"
,
MakeOrderNum
.
makeOrderNum
());
// 流水号 每次交易都唯一
dto
.
put
(
"merchno"
,
ComCode
.
HUANQIUHUIJU_MERCHANT_ID
);
// 商户号
dto
.
put
(
"dsorderid"
,
orderId
);
// 订单号 唯一
dto
.
put
(
"txnAmt"
,
request
.
getAmount
());
// 交易金额
dto
.
put
(
"txnRate"
,
String
.
valueOf
(
Double
.
valueOf
(
rateEntity
.
getRate
())
*
100
));
// 费率
dto
.
put
(
"siglePrice"
,
rateEntity
.
getSiglePrice
()
);
// 单笔价格
dto
.
put
(
"merchno"
,
ComCode
.
HUANQIUHUIJU_MERCHANT_ID
);
// 商户号
dto
.
put
(
"realName"
,
userEntity
.
getUserDetail
().
getRealName
());
// 真实姓名
dto
.
put
(
"idCardNo"
,
userEntity
.
getUserDetail
().
getIdCard
());
// 身份证号
dto
.
put
(
"bankCardNo"
,
cardEntity
.
getCardNo
());
// 银行卡号
dto
.
put
(
"bankCode"
,
cardEntity
.
getBelongBank
());
// 银行代码
dto
.
put
(
"bankName"
,
cardEntity
.
getBankName
());
// 消费卡银行名称
dto
.
put
(
"phone"
,
cardEntity
.
getCardMobile
());
// 手机号
dto
.
put
(
"cvn2"
,
request
.
getCvn2
());
dto
.
put
(
"expireDate"
,
request
.
getExpireDate
());
dto
.
put
(
"notifyUrl"
,
Global
.
getConfig
(
"project.access.url"
)
+
"/api/pay/notifyHuanqiuhuijuPay"
);
dto
.
put
(
"settleBankCode"
,
userEntity
.
getUserDetail
().
getCard
().
getBelongBank
());
// 结算银行代码
dto
.
put
(
"settleCardNo"
,
userEntity
.
getUserDetail
().
getCard
().
getCardNo
());
// 结算银行卡
dto
.
put
(
"settlePhone"
,
userEntity
.
getUserDetail
().
getCard
().
getCardMobile
());
// 结算手机号
dto
.
put
(
"settleCardBankName"
,
userEntity
.
getUserDetail
().
getCard
().
getBankName
());
// 结算卡银行名称
System
.
out
.
println
(
dto
.
toJSONString
());
JSONObject
jsonObject
=
huanqiuhuijuService
.
huanqiuhuijuPay
(
dto
);
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"returncode"
)))
{
payBackDto
.
setIsUrl
(
"0"
);
payBackDto
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HUANQIUHUIJU
);
this
.
notifyPay
(
orderEntity
);
return
payBackDto
;
}
else
{
orderFail
(
orderEntity
);
throw
new
MyException
(
jsonObject
.
getString
(
"errtext"
));
}
}
/**
* 支付宝支付
*
* @param request
* @return
* @throws AlipayApiException
*/
@Transactional
(
readOnly
=
false
)
public
PayBackDto
aliPay
(
JuHeZhongPayRequest
request
)
throws
AlipayApiException
{
// 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity
userEntity
=
userService
.
getUserInfo
(
new
Request
(
request
.
getSubMerchantCode
()));
userEntity
=
userService
.
getUserDetailInfo
(
userEntity
);
// 2. 创建支付订单信息,并保存
String
code
=
IdGen
.
randomBase62
(
64
);
String
payNo
=
ComCode
.
YYYYMMDDHHMM
.
format
(
new
Date
())
+
IdGen
.
randomBase62
(
8
);
// 订单号
String
payCode
=
IdGen
.
randomBase62
(
64
);
DecimalFormat
df
=
new
DecimalFormat
(
"######0.00"
);
List
<
Dict
>
list
=
DictUtils
.
getDictList
(
"level_"
+
request
.
getLevel
());
String
amount
=
"398"
;
if
(
list
!=
null
&&
list
.
size
()>
0
)
{
public
PayBackDto
aliPay
(
JuHeZhongPayRequest
request
)
throws
AlipayApiException
{
// 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity
userEntity
=
userService
.
getUserInfo
(
new
Request
(
request
.
getSubMerchantCode
()));
userEntity
=
userService
.
getUserDetailInfo
(
userEntity
);
// 2. 创建支付订单信息,并保存
String
code
=
IdGen
.
randomBase62
(
64
);
String
payNo
=
ComCode
.
YYYYMMDDHHMM
.
format
(
new
Date
())
+
IdGen
.
randomBase62
(
8
);
// 订单号
String
payCode
=
IdGen
.
randomBase62
(
64
);
DecimalFormat
df
=
new
DecimalFormat
(
"######0.00"
);
List
<
Dict
>
list
=
DictUtils
.
getDictList
(
"level_"
+
request
.
getLevel
());
String
amount
=
"398"
;
if
(
list
!=
null
&&
list
.
size
()
>
0
)
{
amount
=
list
.
get
(
0
).
getValue
();
}
// 创建订单保存
if
(
"D"
.
equals
(
request
.
getLevel
()))
{
request
.
setSubject
(
"升级成白银会员"
);
}
else
if
(
"C"
.
equals
(
request
.
getLevel
()))
{
request
.
setSubject
(
"升级成黄金会员"
);
}
else
if
(
"B"
.
equals
(
request
.
getLevel
()))
{
request
.
setSubject
(
"升级成钻石会员"
);
}
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
request
.
getPayMethod
(),
"ali"
,
"1"
,
amount
,
request
.
getLevel
()
+
":"
+
request
.
getSubject
(),
""
,
"0"
,
request
.
getCardCode
());
payDao
.
saveOrderInfo
(
orderEntity
);
if
(
"B"
.
equals
(
request
.
getLevel
()))
{
UpgradeUserEntity
upgradeUserEntity
=
new
UpgradeUserEntity
();
upgradeUserEntity
.
setUserCode
(
request
.
getSubMerchantCode
());
upgradeUserEntity
.
setLevel
(
request
.
getLevel
());
upgradeUserEntity
.
setOrderCode
(
payCode
);
upgradeUserEntity
.
setStatus
(
"0"
);
upgradeUserEntity
.
setAfterMobile
(
request
.
getAfterMobile
());
userService
.
addUpgradeUser
(
upgradeUserEntity
);
}
// 支付宝支付返回对应支付信息
JSONObject
dto
=
new
JSONObject
();
dto
.
put
(
"payCode"
,
payCode
);
dto
.
put
(
"subject"
,
request
.
getSubject
());
dto
.
put
(
"amount"
,
amount
);
dto
.
put
(
"body"
,
new
HashMap
<>());
String
body
=
alipayService
.
aliPay
(
dto
);
PayBackDto
payBackDto
=
new
PayBackDto
();
payBackDto
.
setBody
(
body
);
return
payBackDto
;
}
}
// 创建订单保存
if
(
"D"
.
equals
(
request
.
getLevel
()))
{
request
.
setSubject
(
"升级成白银会员"
);
}
else
if
(
"C"
.
equals
(
request
.
getLevel
()))
{
request
.
setSubject
(
"升级成黄金会员"
);
}
else
if
(
"B"
.
equals
(
request
.
getLevel
()))
{
request
.
setSubject
(
"升级成钻石会员"
);
}
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
request
.
getPayMethod
(),
"ali"
,
"1"
,
amount
,
request
.
getLevel
()
+
":"
+
request
.
getSubject
(),
""
,
"0"
,
request
.
getCardCode
());
payDao
.
saveOrderInfo
(
orderEntity
);
if
(
"B"
.
equals
(
request
.
getLevel
()))
{
UpgradeUserEntity
upgradeUserEntity
=
new
UpgradeUserEntity
();
upgradeUserEntity
.
setUserCode
(
request
.
getSubMerchantCode
());
upgradeUserEntity
.
setLevel
(
request
.
getLevel
());
upgradeUserEntity
.
setOrderCode
(
payCode
);
upgradeUserEntity
.
setStatus
(
"0"
);
upgradeUserEntity
.
setAfterMobile
(
request
.
getAfterMobile
());
userService
.
addUpgradeUser
(
upgradeUserEntity
);
}
// 支付宝支付返回对应支付信息
JSONObject
dto
=
new
JSONObject
();
dto
.
put
(
"payCode"
,
payCode
);
dto
.
put
(
"subject"
,
request
.
getSubject
());
dto
.
put
(
"amount"
,
amount
);
dto
.
put
(
"body"
,
new
HashMap
<>());
String
body
=
alipayService
.
aliPay
(
dto
);
PayBackDto
payBackDto
=
new
PayBackDto
();
payBackDto
.
setBody
(
body
);
return
payBackDto
;
}
/**
* 提现
*
* @param request
* @return
* @throws AlipayApiException
...
...
@@ -900,7 +1008,7 @@ public class PayApiService {
entity
.
setUserCode
(
request
.
getSubMerchantCode
());
BalanceEntity
balanceEntity
=
benefitSevice
.
getBalanceM
(
entity
);
if
(
balanceEntity
!=
null
&&
StringUtils
.
isNotBlank
(
balanceEntity
.
getBalance
())
&&
Double
.
valueOf
(
balanceEntity
.
getBalance
())>=
Double
.
valueOf
(
request
.
getAmount
()
))
{
if
(
balanceEntity
!=
null
&&
StringUtils
.
isNotBlank
(
balanceEntity
.
getBalance
())
&&
Double
.
valueOf
(
balanceEntity
.
getBalance
())
>=
Double
.
valueOf
(
request
.
getAmount
()))
{
// 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity
userEntity
=
userService
.
getUserInfo
(
new
Request
(
request
.
getSubMerchantCode
()));
userEntity
=
userService
.
getUserDetailInfo
(
userEntity
);
...
...
@@ -912,7 +1020,7 @@ public class PayApiService {
String
payNo
=
ComCode
.
YYYYMMDDHHMM
.
format
(
new
Date
())
+
IdGen
.
randomBase62
(
8
);
// 订单号
String
payCode
=
IdGen
.
randomBase62
(
20
);
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
"1"
,
request
.
getAmount
()
,
"提现"
,
""
,
"0"
,
request
.
getCardCode
());
OrderEntity
orderEntity
=
new
OrderEntity
(
code
,
request
.
getSubMerchantCode
(),
payNo
,
payCode
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
ComCode
.
PAYMETHOD_PUTFORWARD
,
"1"
,
request
.
getAmount
(),
"提现"
,
""
,
"0"
,
request
.
getCardCode
());
payDao
.
saveOrderInfo
(
orderEntity
);
// 添加提现记录
...
...
@@ -929,26 +1037,26 @@ public class PayApiService {
// dto.setEnterprisecode("00103082100008003000");
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"ThirdVoucher"
,
payCode
);
// 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列
jsonObject
.
put
(
"CcyCode"
,
"RMB"
);
// 货币类型 RMB-人民币
jsonObject
.
put
(
"OutAcctNo"
,
ComCode
.
PINGANBANK_OUTACCTNO
);
// 付款人账户 扣款账户
jsonObject
.
put
(
"OutAcctName"
,
ComCode
.
PINGANBANK_OUTACCTNAME
);
// 付款人名称 付款账户户名
jsonObject
.
put
(
"OutAcctAddr"
,
"34343"
);
// 付款人地址 建议填写付款账户的分行、网点名称 非必输
jsonObject
.
put
(
"InAcctBankNode"
,
cardEntity
.
getBelongBank
());
// 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号
jsonObject
.
put
(
"ThirdVoucher"
,
payCode
);
// 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列
jsonObject
.
put
(
"CcyCode"
,
"RMB"
);
// 货币类型 RMB-人民币
jsonObject
.
put
(
"OutAcctNo"
,
ComCode
.
PINGANBANK_OUTACCTNO
);
// 付款人账户 扣款账户
jsonObject
.
put
(
"OutAcctName"
,
ComCode
.
PINGANBANK_OUTACCTNAME
);
// 付款人名称 付款账户户名
jsonObject
.
put
(
"OutAcctAddr"
,
"34343"
);
// 付款人地址 建议填写付款账户的分行、网点名称 非必输
jsonObject
.
put
(
"InAcctBankNode"
,
cardEntity
.
getBelongBank
());
// 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号
jsonObject
.
put
(
"InAcctNo"
,
cardEntity
.
getCardNo
());
// 收款人账户
jsonObject
.
put
(
"InAcctName"
,
userEntity
.
getUserDetail
().
getRealName
());
// 收款人账户户名
jsonObject
.
put
(
"InAcctNo"
,
cardEntity
.
getCardNo
());
// 收款人账户
jsonObject
.
put
(
"InAcctName"
,
userEntity
.
getUserDetail
().
getRealName
());
// 收款人账户户名
jsonObject
.
put
(
"InAcctBankName"
,
cardEntity
.
getBankName
());
// 收款人开户行名称
jsonObject
.
put
(
"TranAmount"
,
request
.
getAmount
());
// 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
jsonObject
.
put
(
"UseEx"
,
"ZZZZZtestreturn"
);
// 资金用途 30个汉字。现金管理代理结算 非必输
jsonObject
.
put
(
"UnionFlag"
,
cardEntity
.
getBelongBank
().
equals
(
ComCode
.
PINGANBANK_OUTACCTBANK
)?
1
:
0
);
// 行内跨行标志 1:行内转账,0:跨行转账
jsonObject
.
put
(
"SysFlag"
,
"1"
);
// Y:加急 N:普通S:特急默认为N
jsonObject
.
put
(
"AddrFlag"
,
"1"
);
// 同城/异地标志 “1”—同城 “2”—异地;若无法区分,可默认送1-同城。
jsonObject
.
put
(
"InAcctBankName"
,
cardEntity
.
getBankName
());
// 收款人开户行名称
jsonObject
.
put
(
"TranAmount"
,
request
.
getAmount
());
// 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
jsonObject
.
put
(
"UseEx"
,
"ZZZZZtestreturn"
);
// 资金用途 30个汉字。现金管理代理结算 非必输
jsonObject
.
put
(
"UnionFlag"
,
cardEntity
.
getBelongBank
().
equals
(
ComCode
.
PINGANBANK_OUTACCTBANK
)
?
1
:
0
);
// 行内跨行标志 1:行内转账,0:跨行转账
jsonObject
.
put
(
"SysFlag"
,
"1"
);
// Y:加急 N:普通S:特急默认为N
jsonObject
.
put
(
"AddrFlag"
,
"1"
);
// 同城/异地标志 “1”—同城 “2”—异地;若无法区分,可默认送1-同城。
JSONObject
result
=
pingAnBankService
.
singleTransfer
(
dto
,
jsonObject
);
JSONObject
result
=
pingAnBankService
.
singleTransfer
(
dto
,
jsonObject
);
if
(
result
.
get
(
"all"
)
!=
null
)
{
if
(
result
.
get
(
"all"
)
!=
null
)
{
String
str
=
result
.
getString
(
"all"
);
String
reg
=
"[^\u4e00-\u9fa5]"
;
...
...
@@ -970,12 +1078,12 @@ public class PayApiService {
return
response
;
}
/**
* 回调
*
* @param orderEntity
* @return
* @throws Exception
...
...
@@ -990,33 +1098,33 @@ public class PayApiService {
orderEntity
=
payDao
.
getOrder
(
orderEntity
);
JSONObject
jsonObject
=
null
;
if
(
ComCode
.
PAYCHANNEL_HL3
.
equals
(
orderEntity
.
getPayChannel
()))
{
if
(
ComCode
.
PAYCHANNEL_HL3
.
equals
(
orderEntity
.
getPayChannel
()))
{
dto
.
setMerchantId
(
ComCode
.
INTEGRAL_MERCHANT_ID
);
dto
.
setMerchantKey
(
ComCode
.
INTEGRAL_MERCHANT_KEY
);
jsonObject
=
juHeZhongPayIntegralService
.
query
(
dto
);
}
else
if
(
ComCode
.
PAYCHANNEL_HL1
.
equals
(
orderEntity
.
getPayChannel
()))
{
}
else
if
(
ComCode
.
PAYCHANNEL_HL1
.
equals
(
orderEntity
.
getPayChannel
()))
{
jsonObject
=
juHeZhongPayService
.
query
(
dto
);
}
else
if
(
ComCode
.
PAYCHANNEL_HL2
.
equals
(
orderEntity
.
getPayChannel
()))
{
}
else
if
(
ComCode
.
PAYCHANNEL_HL2
.
equals
(
orderEntity
.
getPayChannel
()))
{
dto
.
setMerchantId
(
ComCode
.
JFEN_MERCHANT_ID
);
dto
.
setMerchantKey
(
ComCode
.
JFEN_MERCHANT_KEY
);
jsonObject
=
juHeZhongPayJFenService
.
query
(
dto
);
}
else
if
(
ComCode
.
PAYCHANNEL_HUANQIUHUIJU
.
equals
(
orderEntity
.
getPayChannel
()))
{
}
else
if
(
ComCode
.
PAYCHANNEL_HUANQIUHUIJU
.
equals
(
orderEntity
.
getPayChannel
()))
{
orderEntity
.
setPayStatus
(
"2"
);
payDao
.
updateOrderStatus
(
orderEntity
);
return
orderEntity
;
}
logger
.
debug
(
"查询订单返回结果: {}"
+
jsonObject
.
toJSONString
());
logger
.
debug
(
"查询订单返回结果: {}"
+
jsonObject
.
toJSONString
());
// 支付成功
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
//订单已经支付成功,则不进行再次修改,可能存在多次回调,所以进行判断
if
(
orderEntity
.
getPayStatus
()!=
"2"
)
{
if
(
orderEntity
.
getPayStatus
()
!=
"2"
)
{
orderEntity
.
setPayStatus
(
"2"
);
payDao
.
updateOrderStatus
(
orderEntity
);
}
}
else
{
// 支付失败
}
else
{
// 支付失败
orderFail
(
orderEntity
);
}
orderEntity
=
payDao
.
getOrder
(
orderEntity
);
...
...
@@ -1026,14 +1134,15 @@ public class PayApiService {
/**
* 回调
*
* @param orderEntity
* @return
* @throws Exception
*/
@Transactional
(
readOnly
=
false
)
public
OrderEntity
aliPayNotifyPay
(
OrderEntity
orderEntity
,
String
code
)
throws
Exception
{
public
OrderEntity
aliPayNotifyPay
(
OrderEntity
orderEntity
,
String
code
)
throws
Exception
{
if
(
"TRADE_SUCCESS"
.
equals
(
code
))
{
if
(
"TRADE_SUCCESS"
.
equals
(
code
))
{
orderEntity
.
setPayStatus
(
"2"
);
payDao
.
updateOrderStatus
(
orderEntity
);
...
...
@@ -1042,31 +1151,31 @@ public class PayApiService {
UserEntity
userEntity
=
new
UserEntity
();
userEntity
.
setCode
(
orderEntity
.
getUserCode
());
if
(
orderEntity
.
getSubject
()
!=
null
&&
!
""
.
equals
(
orderEntity
.
getSubject
()))
{
userEntity
.
setLevel
(
orderEntity
.
getSubject
().
substring
(
0
,
1
));
if
(
orderEntity
.
getSubject
()
!=
null
&&
!
""
.
equals
(
orderEntity
.
getSubject
()))
{
userEntity
.
setLevel
(
orderEntity
.
getSubject
().
substring
(
0
,
1
));
if
(
"B"
.
equals
(
userEntity
.
getLevel
()))
{
if
(
"B"
.
equals
(
userEntity
.
getLevel
()))
{
UpgradeUserEntity
upgradeUserEntity
=
new
UpgradeUserEntity
();
upgradeUserEntity
.
setUserCode
(
orderEntity
.
getUserCode
());
upgradeUserEntity
.
setLevel
(
userEntity
.
getLevel
());
upgradeUserEntity
.
setStatus
(
"1"
);
upgradeUserEntity
.
setOrderCode
(
orderEntity
.
getPayCode
());
userService
.
updateUpgradeUser
(
upgradeUserEntity
);
}
else
{
}
else
{
userService
.
updateUserLevelByCode
(
userEntity
);
}
}
}
else
{
}
else
{
orderEntity
.
setPayStatus
(
"4"
);
payDao
.
updateOrderStatus
(
orderEntity
);
orderEntity
=
payDao
.
getOrder
(
orderEntity
);
if
(
orderEntity
.
getSubject
()
!=
null
&&
!
""
.
equals
(
orderEntity
.
getSubject
())
&&
"A"
.
equals
(
orderEntity
.
getSubject
().
substring
(
0
,
1
)))
{
if
(
orderEntity
.
getSubject
()
!=
null
&&
!
""
.
equals
(
orderEntity
.
getSubject
())
&&
"A"
.
equals
(
orderEntity
.
getSubject
().
substring
(
0
,
1
)))
{
UpgradeUserEntity
upgradeUserEntity
=
new
UpgradeUserEntity
();
upgradeUserEntity
.
setUserCode
(
orderEntity
.
getUserCode
());
upgradeUserEntity
.
setLevel
(
orderEntity
.
getSubject
().
substring
(
0
,
1
));
upgradeUserEntity
.
setLevel
(
orderEntity
.
getSubject
().
substring
(
0
,
1
));
upgradeUserEntity
.
setOrderCode
(
orderEntity
.
getPayCode
());
upgradeUserEntity
.
setStatus
(
"3"
);
userService
.
updateUpgradeUser
(
upgradeUserEntity
);
...
...
@@ -1076,11 +1185,11 @@ public class PayApiService {
}
public
OrderEntity
getOrder
(
OrderEntity
orderEntity
){
public
OrderEntity
getOrder
(
OrderEntity
orderEntity
)
{
return
payDao
.
getOrder
(
orderEntity
);
}
public
OrderEntity
getOrder
(
String
payNo
){
public
OrderEntity
getOrder
(
String
payNo
)
{
OrderEntity
orderEntity
=
new
OrderEntity
();
orderEntity
.
setPayNo
(
payNo
);
return
payDao
.
getOrder
(
orderEntity
);
...
...
@@ -1090,12 +1199,12 @@ public class PayApiService {
* 交易超过7天则修改为交易失败
*/
@Transactional
(
readOnly
=
false
)
public
void
updateOrderTiming
(){
public
void
updateOrderTiming
()
{
// System.out.println("。。。。。。。定时任务。updateOrderTiming开始。。。。");
OrderEntity
orderEntity
=
new
OrderEntity
();
orderEntity
.
setEndTime
(
DateUtils
.
getDateByDay
(
"yyyy-MM-dd HH:mm:ss"
,-
7
));
orderEntity
.
setEndTime
(
DateUtils
.
getDateByDay
(
"yyyy-MM-dd HH:mm:ss"
,
-
7
));
List
<
OrderEntity
>
list
=
payDao
.
getOrderListTimeing
(
orderEntity
);
for
(
OrderEntity
order:
list
)
{
for
(
OrderEntity
order
:
list
)
{
order
.
setPayStatus
(
"3"
);
payDao
.
updateOrderStatus
(
order
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
();
...
...
@@ -1109,43 +1218,43 @@ public class PayApiService {
* 查询交易的状态并修改
*/
@Transactional
(
readOnly
=
false
)
public
void
updateOrders
(){
public
void
updateOrders
()
{
// System.out.println("。。。。。。。定时任务。updateOrders开始。。。。");
try
{
OrderEntity
orderEntity
=
new
OrderEntity
();
orderEntity
.
setStartTime
(
DateUtils
.
getDateByDay
(
"yyyy-MM-dd HH:mm:ss"
,-
7
));
orderEntity
.
setEndTime
(
DateUtils
.
formatDate
(
DateUtils
.
addHours
(
new
Date
(),
-
12
),
"yyyy-MM-dd HH:mm:ss"
));
orderEntity
.
setStartTime
(
DateUtils
.
getDateByDay
(
"yyyy-MM-dd HH:mm:ss"
,
-
7
));
orderEntity
.
setEndTime
(
DateUtils
.
formatDate
(
DateUtils
.
addHours
(
new
Date
(),
-
12
),
"yyyy-MM-dd HH:mm:ss"
));
List
<
OrderEntity
>
list
=
payDao
.
getOrderListTimeing
(
orderEntity
);
for
(
OrderEntity
order:
list
)
{
for
(
OrderEntity
order
:
list
)
{
// 快捷支付
if
(
"quick"
.
equals
(
order
.
getPayMethod
()))
{
if
(
"quick"
.
equals
(
order
.
getPayMethod
()))
{
QuickDto
dto
=
new
QuickDto
();
dto
.
setOrderId
(
order
.
getPayCode
());
dto
.
setTimestamp
(
System
.
currentTimeMillis
());
JSONObject
jsonObject
=
null
;
if
(
ComCode
.
PAYCHANNEL_HL3
.
equals
(
order
.
getPayChannel
()))
{
if
(
ComCode
.
PAYCHANNEL_HL3
.
equals
(
order
.
getPayChannel
()))
{
dto
.
setMerchantId
(
ComCode
.
MERCHANT_ID
);
dto
.
setMerchantKey
(
ComCode
.
MERCHANT_KEY
);
jsonObject
=
juHeZhongPayIntegralService
.
query
(
dto
);
}
else
if
(
ComCode
.
PAYCHANNEL_HL1
.
equals
(
order
.
getPayChannel
()))
{
}
else
if
(
ComCode
.
PAYCHANNEL_HL1
.
equals
(
order
.
getPayChannel
()))
{
jsonObject
=
juHeZhongPayService
.
query
(
dto
);
}
if
(
jsonObject
!=
null
)
{
if
(
jsonObject
!=
null
)
{
// System.out.println("查询订单返回结果:"+jsonObject.toJSONString());
// 支付成功
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
System
.
out
.
println
(
"查询订单返回结果:"
+
jsonObject
.
toJSONString
());
if
(
"0000"
.
equals
(
jsonObject
.
get
(
"code"
)))
{
System
.
out
.
println
(
"查询订单返回结果:"
+
jsonObject
.
toJSONString
());
order
.
setPayStatus
(
"2"
);
payDao
.
updateOrderStatus
(
order
);
}
else
{
// 支付失败
}
else
{
// 支付失败
orderFail
(
order
);
}
}
}
else
if
(
"put_forward"
.
equals
(
order
.
getPayMethod
()))
{
// 提现
}
else
if
(
"put_forward"
.
equals
(
order
.
getPayMethod
()))
{
// 提现
// 查询单笔转账
PingAnBankDto
dto
=
new
PingAnBankDto
();
...
...
@@ -1154,10 +1263,10 @@ public class PayApiService {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"OrigThirdVoucher"
,
order
.
getPayCode
());
// 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
jsonObject
.
put
(
"OrigThirdVoucher"
,
order
.
getPayCode
());
// 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
JSONObject
jsonObject1
=
pingAnBankService
.
querySingleTransfer
(
dto
,
jsonObject
);
if
(
"20"
.
equals
(
jsonObject1
.
getString
(
"Stt"
)))
{
// 交易成功
JSONObject
jsonObject1
=
pingAnBankService
.
querySingleTransfer
(
dto
,
jsonObject
);
if
(
"20"
.
equals
(
jsonObject1
.
getString
(
"Stt"
)))
{
// 交易成功
order
.
setPayStatus
(
"2"
);
payDao
.
updateOrderStatus
(
order
);
...
...
@@ -1186,21 +1295,21 @@ public class PayApiService {
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"OrigThirdVoucher"
,
payCode
);
// 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
jsonObject
.
put
(
"OrigThirdVoucher"
,
payCode
);
// 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
JSONObject
jsonObject1
=
pingAnBankService
.
querySingleTransfer
(
dto
,
jsonObject
);
JSONObject
jsonObject1
=
pingAnBankService
.
querySingleTransfer
(
dto
,
jsonObject
);
return
jsonObject1
;
}
public
BalanceEntity
getPutForwardNum
(
JuHeZhongPayRequest
request
){
public
BalanceEntity
getPutForwardNum
(
JuHeZhongPayRequest
request
)
{
BenefitEntity
entity
=
new
BenefitEntity
();
entity
.
setUserCode
(
request
.
getSubMerchantCode
());
BalanceEntity
balanceEntity
=
benefitSevice
.
getBalanceM
(
entity
);
return
balanceEntity
;
return
balanceEntity
;
}
private
void
orderFail
(
OrderEntity
orderEntity
){
private
void
orderFail
(
OrderEntity
orderEntity
)
{
orderEntity
.
setPayStatus
(
"4"
);
payDao
.
updateOrderStatus
(
orderEntity
);
BenefitEntity
benefitEntity
=
new
BenefitEntity
();
...
...
@@ -1211,26 +1320,28 @@ public class PayApiService {
/**
* 获取对应用户等级的费率
*
* @param user_level
* @param pay_channel
* @return
*/
public
RateEntity
getGradeRate
(
String
user_level
,
String
pay_channel
)
{
public
RateEntity
getGradeRate
(
String
user_level
,
String
pay_channel
)
{
Map
<
String
,
String
>
maps
=
Maps
.
newHashMap
();
maps
.
put
(
"user_level"
,
user_level
);
maps
.
put
(
"pay_channel"
,
pay_channel
);
maps
.
put
(
"user_level"
,
user_level
);
maps
.
put
(
"pay_channel"
,
pay_channel
);
RateEntity
rateList
=
rateDao
.
getRateEntity
(
maps
);
return
rateList
;
return
rateList
;
}
/**
* 获取用户当日已使用额度,已支付完成时间为准
*
* @param user_code
* @param pay_channel
* @return
*/
public
Double
getUseNum
(
String
user_code
,
String
pay_channel
)
{
public
Double
getUseNum
(
String
user_code
,
String
pay_channel
)
{
HashMap
<
String
,
String
>
maps
=
Maps
.
newHashMap
();
maps
.
put
(
"user_code"
,
user_code
);
maps
.
put
(
"pay_channel"
,
pay_channel
);
...
...
@@ -1240,25 +1351,27 @@ public class PayApiService {
/**
* 计算当日剩余额度
*
* @param dayLimit
* @param num
* @return
*/
public
BigDecimal
getLimitNum
(
String
dayLimit
,
Double
num
)
{
public
BigDecimal
getLimitNum
(
String
dayLimit
,
Double
num
)
{
return
BigDecimal
.
valueOf
(
Long
.
valueOf
(
dayLimit
)).
subtract
(
BigDecimal
.
valueOf
(
num
));
}
/**
* 计算当日剩余额度(集中)
*
* @param user_level
* @param user_code
* @param pay_channel
* @return
*/
public
BigDecimal
getLimitNumber
(
String
user_level
,
String
user_code
,
String
pay_channel
)
{
public
BigDecimal
getLimitNumber
(
String
user_level
,
String
user_code
,
String
pay_channel
)
{
Map
<
String
,
String
>
maps
=
Maps
.
newHashMap
();
maps
.
put
(
"user_level"
,
user_level
);
maps
.
put
(
"pay_channel"
,
pay_channel
);
maps
.
put
(
"user_level"
,
user_level
);
maps
.
put
(
"pay_channel"
,
pay_channel
);
maps
.
put
(
"user_code"
,
user_code
);
RateEntity
rateList
=
rateDao
.
getRateEntity
(
maps
);
Double
num
=
payDao
.
getLastLimit
(
maps
);
...
...
@@ -1267,11 +1380,12 @@ public class PayApiService {
/**
* 计算每笔交易手续费的和
*
* @param gradeRate
* @param amount
* @return
*/
public
int
calculationAmount
(
RateEntity
gradeRate
,
String
amount
)
{
public
int
calculationAmount
(
RateEntity
gradeRate
,
String
amount
)
{
Double
siglePrice
=
Double
.
valueOf
(
gradeRate
.
getSiglePrice
());
Double
rate
=
Double
.
valueOf
(
gradeRate
.
getRate
());
Double
amountDouble
=
Double
.
valueOf
(
amount
);
...
...
src/main/java/com/thinkgem/jeesite/modules/user/api/UserApiController.java
View file @
8575dbee
...
...
@@ -14,6 +14,7 @@ import com.thinkgem.jeesite.modules.user.entity.IdentityCodeEntity;
import
com.thinkgem.jeesite.modules.user.entity.Level
;
import
com.thinkgem.jeesite.modules.user.entity.UserEntity
;
import
com.thinkgem.jeesite.modules.user.service.UserApiService
;
import
org.apache.commons.lang3.math.NumberUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.regex.Pattern
;
/**
* 前端用户相关
...
...
@@ -33,6 +35,9 @@ import java.util.Map;
public
class
UserApiController
{
/** log */
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
UserApiController
.
class
);
/** 手机号码校验 */
private
static
final
Pattern
regex
=
Pattern
.
compile
(
"^(((1[3-9]))\\d{9})|(0\\d{2}-\\d{8})|(0\\d{3}-\\d{7})$"
);
@Autowired
private
UserApiService
userService
;
...
...
@@ -322,11 +327,20 @@ public class UserApiController {
Response
resp
=
new
Response
();
try
{
// 判断业务入参是否为空
if
(
StringUtils
.
isBlank
(
request
.
getSubMerchantCode
())
||
StringUtils
.
isBlank
(
request
.
getIdentityCode
())
||
StringUtils
.
isBlank
(
request
.
getFunction
())
||
StringUtils
.
isBlank
(
request
.
getCardType
())
||
StringUtils
.
isBlank
(
request
.
getCardNo
())
||
StringUtils
.
isBlank
(
request
.
getCardMobile
())
||
StringUtils
.
isBlank
(
request
.
getBelongBank
())
||
StringUtils
.
isBlank
(
request
.
getCardBank
()))
{
if
(
StringUtils
.
isBlank
(
request
.
getSubMerchantCode
())
||
// StringUtils.isBlank(request.getIdentityCode()) ||
StringUtils
.
isBlank
(
request
.
getFunction
())
||
StringUtils
.
isBlank
(
request
.
getCardType
())
||
StringUtils
.
isBlank
(
request
.
getCardNo
())
||
StringUtils
.
isBlank
(
request
.
getCardMobile
())
||
StringUtils
.
isBlank
(
request
.
getBelongBank
())
||
StringUtils
.
isBlank
(
request
.
getCardBank
()))
{
resp
.
setStatus
(
ComCode
.
STATUS_CODE_4001
);
resp
.
setMessage
(
ComCode
.
STATUS_CODE_4001_DESC
);
return
resp
;
}
//进行初步校验
if
(!
NumberUtils
.
isNumber
(
request
.
getCardNo
())){
throw
new
MyException
(
"卡号格式不正确"
);
}
if
(!
regex
.
matcher
(
request
.
getCardMobile
()).
matches
()){
throw
new
MyException
(
"手机号码格式不正确"
);
}
// 根据手机号 + 使用场景 + 验证码查询
request
.
setMobile
(
request
.
getCardMobile
());
// IdentityCodeEntity identityCodeEntity = userService.getIdentifyCode(request);
...
...
@@ -433,6 +447,19 @@ public class UserApiController {
resp
.
setMessage
(
ComCode
.
STATUS_CODE_4001_DESC
);
return
resp
;
}
//身份证参数格式校验
if
(!
verifyIdentityCard
(
request
.
getIdCard
())){
throw
new
MyException
(
"身份证号码格式不正确"
);
}
//进行卡片校验
if
(!
NumberUtils
.
isNumber
(
request
.
getCardNo
())){
throw
new
MyException
(
"卡号格式不正确"
);
}
//手机号码校验
if
(!
regex
.
matcher
(
request
.
getCardMobile
()).
matches
()){
throw
new
MyException
(
"手机号码格式不正确"
);
}
// // 根据手机号 + 使用场景 + 验证码查询
// request.setMobile(request.getCardMobile());
// IdentityCodeEntity identityCodeEntity = userService.getIdentifyCode(request);
...
...
@@ -650,4 +677,12 @@ public class UserApiController {
return
resp
;
}
private
boolean
verifyIdentityCard
(
String
num
)
{
String
reg
=
"^\\d{15}$|^\\d{17}[0-9Xx]$"
;
if
(!
num
.
matches
(
reg
))
{
return
false
;
}
return
true
;
}
}
src/main/java/com/thinkgem/jeesite/modules/user/dao/UserApiDao.java
View file @
8575dbee
...
...
@@ -113,4 +113,6 @@ public interface UserApiDao {
List
<
UserEntity
>
getMyInviting
(
UserRequest
request
);
//激活用户数量
public
Integer
getActiveUserNum
(
UserRequest
request
);
public
Integer
checkNoUser
();
}
src/main/java/com/thinkgem/jeesite/modules/user/service/UserApiService.java
View file @
8575dbee
...
...
@@ -20,6 +20,8 @@ import com.thinkgem.jeesite.modules.user.bean.UserRequest;
import
com.thinkgem.jeesite.modules.user.dao.UserApiDao
;
import
com.thinkgem.jeesite.modules.user.entity.*
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Lazy
;
import
org.springframework.stereotype.Service
;
...
...
@@ -42,6 +44,8 @@ import java.util.List;
@Lazy
(
false
)
@Transactional
public
class
UserApiService
{
/** log */
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
UserApiService
.
class
);
@Autowired
private
UserApiDao
userDao
;
...
...
@@ -130,11 +134,14 @@ public class UserApiService {
}
@Transactional
(
readOnly
=
false
)
public
UserEntity
signUp
(
UserRequest
request
)
{
public
UserEntity
signUp
(
UserRequest
request
)
throws
MyException
{
// 保存用户信息
String
code
=
IdGen
.
randomBase62
(
64
);
UserEntity
recommend
=
userDao
.
checkRecommend
(
request
);
UserEntity
userEntity
=
new
UserEntity
(
code
,
""
,
request
.
getMobile
(),
MD5
.
sign
(
request
.
getNewPassword
(),
ComCode
.
signCode
,
"utf-8"
),
request
.
getRecommendedMobile
(),
","
+
recommend
.
getRecommendedPath
()
+
recommend
.
getId
()
+
","
,
recommend
.
getBelongTo
());
if
(
recommend
==
null
||
userDao
.
checkNoUser
()
>
0
){
throw
new
MyException
(
"推荐人手机号码不存在"
);
}
UserEntity
userEntity
=
new
UserEntity
(
code
,
""
,
request
.
getMobile
(),
MD5
.
sign
(
request
.
getNewPassword
(),
ComCode
.
signCode
,
"utf-8"
),
request
.
getRecommendedMobile
(),
recommend
==
null
?
"0"
+
","
:
recommend
.
getRecommendedPath
()
+
recommend
.
getId
()
+
","
,
recommend
.
getBelongTo
());
userDao
.
signUp
(
userEntity
);
UserEntity
user
=
userDao
.
getUserInfo
(
new
Request
(
code
));
// 以下两行代码应Android要求,增加空detail和card
...
...
@@ -237,12 +244,15 @@ public class UserApiService {
// 实名认证
@Transactional
(
readOnly
=
false
)
public
void
certification
(
UserRequest
request
)
throws
MyException
,
Exception
{
logger
.
debug
(
"进入实名认证service"
);
// 更新用户详情
UserDetailEntity
userDetailEntity
=
new
UserDetailEntity
(
IdGen
.
randomBase62
(
64
),
request
.
getSubMerchantCode
(),
request
.
getRealName
(),
request
.
getIdCard
(),
request
.
getProvince
()+
request
.
getCity
(),
""
,
""
,
""
,
""
);
if
(
userDao
.
getUserDetailByCode
(
new
UserEntity
(
request
.
getSubMerchantCode
()))
==
null
)
{
userDao
.
saveUserDetail
(
userDetailEntity
);
logger
.
debug
(
"存完userdetail信息"
);
}
else
{
userDao
.
updateUserDetail
(
userDetailEntity
);
logger
.
debug
(
"修改完userdetail信息"
);
}
// 为用户卡注册subMerchantId
String
type
=
"1"
;
// 默认将卡片添加为对私
...
...
@@ -255,6 +265,7 @@ public class UserApiService {
// 更新银行卡详情
CardEntity
cardStatusEntity
=
new
CardEntity
(
request
.
getSubMerchantCode
(),
"N"
);
userDao
.
updateCardStatus
(
cardStatusEntity
);
logger
.
debug
(
"修改完银行卡信息"
);
CardEntity
cardEntity
=
new
CardEntity
(
IdGen
.
randomBase62
(
64
),
request
.
getSubMerchantCode
(),
"D"
,
request
.
getCardNo
(),
request
.
getCardMobile
(),
request
.
getBelongBank
(),
request
.
getCardBank
(),
request
.
getCardPlace
(),
"Y"
,
subMerchantId
,
""
,
type
,
status
,
request
.
getProvince
(),
request
.
getCity
());
userDao
.
addNewCard
(
cardEntity
);
...
...
@@ -267,10 +278,14 @@ public class UserApiService {
// 与实名用户的推荐人,推荐了4名及以上人员实名
if
(
countRecommend
.
size
()
>=
4
)
{
String
[]
recommendPath
=
countRecommend
.
get
(
0
).
getRecommendedPath
().
split
(
","
);
UserEntity
recommendedUser
=
userDao
.
getUserInfoById
(
recommendPath
[
recommendPath
.
length
-
1
]);
recommendedUser
.
setLevel
(
"D"
);
// 实名用户的推荐人等级由E(青铜)升为D(白银)
userDao
.
updateUserLevel
(
recommendedUser
);
// 实名用户的推荐人等级由E(青铜)升为D(白银)
if
(
recommendedUser
.
getLevel
().
equals
(
"E"
)){
recommendedUser
.
setLevel
(
"D"
);
userDao
.
updateUserLevel
(
recommendedUser
);
}
RateEntity
rateEntityParam
=
new
RateEntity
();
rateEntityParam
.
setUserLevel
(
"D"
);
...
...
@@ -371,10 +386,11 @@ public class UserApiService {
userEntity
.
setCode
(
request
.
getSubMerchantCode
());
userEntity
.
setStatus
(
"2"
);
//根据第三方接口返回信息更改用户状态
userDao
.
updateUserInfo
(
userEntity
);
logger
.
debug
(
"更新用户信息完成"
);
userSubMchIdRequest
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HL2
);
userSubMchIdRequest
.
setSubmchid
(
JFenSubMchId
);
this
.
addUserSubmchid
(
userSubMchIdRequest
);
logger
.
debug
(
"添加用户submchid完成"
);
rate
.
setPayChannel
(
ComCode
.
PAYCHANNEL_HL2
);
rate
.
setPayMethod
(
"quick"
);
//全部写死是quick
RateEntity
rateEntity
=
this
.
getRateByLevel
(
rate
);
...
...
@@ -504,6 +520,7 @@ public class UserApiService {
// JFen 商户入网
public
String
merchantInJFenJuhezhong
(
UserRequest
request
)
throws
MyException
,
Exception
{
logger
.
debug
(
"开始商户入网"
);
UserEntity
userEntity
=
userDao
.
getUserInfo
(
request
);
BelongBankEntity
belongBankEntity
=
userDao
.
getBelongBankEntity
(
request
);
if
(
userEntity
==
null
)
{
...
...
@@ -543,8 +560,10 @@ public class UserApiService {
JSONObject
jsonObject
=
juHeZhongPayJFenService
.
merchantIn
(
dto
);
if
(!
"0000"
.
equals
(
jsonObject
.
getString
(
"code"
)))
{
logger
.
debug
(
"商户入网失败,jsonObject: {} "
+
jsonObject
);
throw
new
MyException
(
jsonObject
.
getString
(
"msg"
));
}
logger
.
debug
(
"商户入网完成"
);
return
jsonObject
.
getString
(
"subMchId"
);
}
...
...
@@ -574,6 +593,7 @@ public class UserApiService {
* @throws Exception
*/
public
void
merchantFeelJFen
(
String
subMchId
,
RateEntity
rateEntity
)
throws
MyException
,
Exception
{
logger
.
debug
(
"进入增加或修改支付用户费率开始"
);
// 修改费率
JSONObject
dto
=
new
JSONObject
();
dto
.
put
(
"subMchId"
,
subMchId
);
...
...
@@ -588,8 +608,10 @@ public class UserApiService {
}
if
(!
"0000"
.
equals
(
jsonObject
.
getString
(
"code"
)))
{
logger
.
debug
(
"增加或修改用户费率失败, jsonObject: {}"
,
jsonObject
);
throw
new
MyException
(
jsonObject
.
getString
(
"msg"
));
}
logger
.
debug
(
"增加或修改用户费率结束"
);
}
/**
...
...
src/main/resources/mappings/modules/pay/PayApiDao.xml
View file @
8575dbee
...
...
@@ -126,7 +126,9 @@
<select
id=
"getBenefitSum"
resultType=
"com.thinkgem.jeesite.modules.pay.entity.BenefitEntity"
>
SELECT
SUM(b.amount) AS amount
CAST(
sum(b.amount) AS DECIMAL (19, 3)
) AS amount
FROM youka_benefit b
LEFT JOIN youka_orders o ON o.`code` = b.order_code
WHERE b.user_code = #{userCode}
...
...
@@ -189,4 +191,18 @@
AND update_date >= date(now())
AND update_date
<
DATE_ADD(date(now()), INTERVAL 1 DAY)
</select>
<select
id=
"getUpUser"
resultType=
"com.thinkgem.jeesite.modules.pay.entity.UserRateEntity"
>
SELECT
yu.code AS userCode,
yu.level AS userLevel,
yr.rate AS rate
FROM
youka_users yu
LEFT JOIN youka_rate yr ON yu.level = yr.user_level AND yr.pay_method = 'quick'
WHERE
yu.id = #{id}
AND
yr.pay_channel = #{pay_channel}
</select>
</mapper>
\ No newline at end of file
src/main/resources/mappings/modules/user/UserDao.xml
View file @
8575dbee
...
...
@@ -79,7 +79,7 @@
FROM
youka_users yu
WHERE
yu.
recommended_
mobile = #{recommendedMobile}
yu.mobile = #{recommendedMobile}
LIMIT 1
</select>
...
...
@@ -925,4 +925,10 @@
recommended_mobile = (SELECT mobile FROM youka_users WHERE code = #{subMerchantCode})
</select>
<select
id=
"checkNoUser"
resultType=
"java.lang.Integer"
>
SELECT
COUNT (id)
FROM
youka_users
</select>
</mapper>
\ 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