Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cash-loan-flow-boss
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
胡慧
cash-loan-flow-boss
Commits
a0142d4b
Commit
a0142d4b
authored
Aug 16, 2019
by
suntao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
订单状态查询
parent
bb1edc18
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
390 additions
and
30 deletions
+390
-30
OrderApprove.java
...group/cashloanflowboss/api/order/entity/OrderApprove.java
+5
-2
QueryXyqbOrderStatus.java
...ashloanflowboss/api/order/model/QueryXyqbOrderStatus.java
+15
-0
XyqbCurrentOrderStatusServiceResultModel.java
...order/model/XyqbCurrentOrderStatusServiceResultModel.java
+16
-0
XyqbHistoryOrderStatusServiceResultModel.java
...order/model/XyqbHistoryOrderStatusServiceResultModel.java
+18
-0
OrderRepository.java
...ashloanflowboss/api/order/repository/OrderRepository.java
+4
-3
OrderService.java
...roup/cashloanflowboss/api/order/service/OrderService.java
+28
-25
OrderUtil.java
...quantgroup/cashloanflowboss/api/order/util/OrderUtil.java
+113
-0
Tuple.java
.../java/cn/quantgroup/cashloanflowboss/core/base/Tuple.java
+37
-0
XYQBCenter.java
...antgroup/cashloanflowboss/spi/xyqb/client/XYQBCenter.java
+19
-0
XYQBCenterService.java
.../cashloanflowboss/spi/xyqb/service/XYQBCenterService.java
+37
-0
SignUtil.java
...n/quantgroup/cashloanflowboss/spi/xyqb/util/SignUtil.java
+98
-0
No files found.
src/main/java/cn/quantgroup/cashloanflowboss/api/order/entity/Order.java
→
src/main/java/cn/quantgroup/cashloanflowboss/api/order/entity/Order
Approve
.java
View file @
a0142d4b
...
...
@@ -8,6 +8,7 @@ import javax.persistence.Entity;
import
javax.persistence.Table
;
/**
* 审批时 boss 创建的审批订单记录
* function:
* date: 2019/8/12
*
...
...
@@ -16,8 +17,8 @@ import javax.persistence.Table;
@Data
@Entity
@Table
(
name
=
"order"
)
public
class
Order
extends
Primary
{
@Table
(
name
=
"order
_approve
"
)
public
class
Order
Approve
extends
Primary
{
@Column
(
name
=
"channel_order_number"
)
private
String
channelOrderNumber
;
@Column
(
name
=
"credit_number"
)
...
...
@@ -26,6 +27,8 @@ public class Order extends Primary {
private
Long
channelId
;
@Column
(
name
=
"fund_id"
)
private
Integer
fundId
;
/** 0:非存管;1:存管 */
@Column
(
name
=
"fund_type"
)
private
Integer
fundType
;
@Column
(
name
=
"ext_data"
)
...
...
src/main/java/cn/quantgroup/cashloanflowboss/api/order/model/QueryXyqbOrderStatus.java
0 → 100644
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
order
.
model
;
import
lombok.Data
;
/**
* function:
* date: 2019/8/16
*
* @author: suntao
*/
@Data
public
class
QueryXyqbOrderStatus
{
private
String
status
;
private
Long
updateTime
;
}
src/main/java/cn/quantgroup/cashloanflowboss/api/order/model/XyqbCurrentOrderStatusServiceResultModel.java
0 → 100644
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
order
.
model
;
import
lombok.Data
;
/**
* function:
* date: 2019/8/15
*
* @author: suntao
*/
@Data
public
class
XyqbCurrentOrderStatusServiceResultModel
{
private
QueryXyqbOrderStatus
currentStatus
;
}
src/main/java/cn/quantgroup/cashloanflowboss/api/order/model/XyqbHistoryOrderStatusServiceResultModel.java
0 → 100644
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
order
.
model
;
import
lombok.Data
;
import
java.util.List
;
/**
* function:
* date: 2019/8/15
*
* @author: suntao
*/
@Data
public
class
XyqbHistoryOrderStatusServiceResultModel
{
private
List
<
QueryXyqbOrderStatus
>
historyStatus
;
}
src/main/java/cn/quantgroup/cashloanflowboss/api/order/repository/OrderRepository.java
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
order
.
repository
;
import
cn.quantgroup.cashloanflowboss.api.order.entity.Order
;
import
cn.quantgroup.cashloanflowboss.api.order.entity.Order
Approve
;
import
cn.quantgroup.cashloanflowboss.core.persistence.CashLoanFlowBossDataSource
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.stereotype.Repository
;
...
...
@@ -13,8 +13,9 @@ import org.springframework.stereotype.Repository;
*/
@CashLoanFlowBossDataSource
@Repository
public
interface
OrderRepository
extends
JpaRepository
<
Order
,
Long
>
{
public
interface
OrderRepository
extends
JpaRepository
<
Order
Approve
,
Long
>
{
Order
findOrderByChannelOrderNumber
(
String
channelOrderNumber
);
OrderApprove
findByChannelOrderNumber
(
String
channelOrderNumber
);
OrderApprove
findByCreditNumber
(
String
creditOrderNumber
);
}
src/main/java/cn/quantgroup/cashloanflowboss/api/order/service/OrderService.java
View file @
a0142d4b
...
...
@@ -3,13 +3,12 @@ package cn.quantgroup.cashloanflowboss.api.order.service;
import
cn.quantgroup.cashloanflowboss.api.channel.entity.ChannelConf
;
import
cn.quantgroup.cashloanflowboss.api.channel.repository.ChannelConfRepository
;
import
cn.quantgroup.cashloanflowboss.api.channel.util.ChannelConfUtil
;
import
cn.quantgroup.cashloanflowboss.api.order.entity.Order
;
import
cn.quantgroup.cashloanflowboss.api.order.model.ApproveVo
;
import
cn.quantgroup.cashloanflowboss.api.order.model.LendingFormModel
;
import
cn.quantgroup.cashloanflowboss.api.order.model.OrderVo
;
import
cn.quantgroup.cashloanflowboss.api.order.entity.OrderApprove
;
import
cn.quantgroup.cashloanflowboss.api.order.model.*
;
import
cn.quantgroup.cashloanflowboss.api.order.repository.OrderRepository
;
import
cn.quantgroup.cashloanflowboss.api.order.util.OrderUtil
;
import
cn.quantgroup.cashloanflowboss.core.Application
;
import
cn.quantgroup.cashloanflowboss.core.base.Tuple
;
import
cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderMapping
;
import
cn.quantgroup.cashloanflowboss.spi.clf.repository.ClfOrderMappingRepository
;
import
cn.quantgroup.cashloanflowboss.spi.clotho.client.ClothoCenter
;
...
...
@@ -90,6 +89,7 @@ public class OrderService {
},
new
PageRequest
(
pageNumber
,
pageSize
));
return
page
.
map
(
it
->
{
OrderVo
orderVo
=
new
OrderVo
();
orderVo
.
setId
(
it
.
getId
());
...
...
@@ -97,16 +97,19 @@ public class OrderService {
orderVo
.
setChannelOrderNumber
(
it
.
getChannelOrderNo
());
orderVo
.
setCreatedAt
(
it
.
getCreatedAt
().
getTime
());
OrderVo
.
OptButton
button
=
new
OrderVo
.
OptButton
();
button
.
setAction
(
OrderVo
.
OptButtonAction
.
audit
.
name
());
button
.
setName
(
OrderVo
.
OptButtonAction
.
audit
.
getDesc
());
OrderApprove
orderApprove
=
orderRepository
.
findByCreditNumber
(
it
.
getApplyNo
());
List
<
OrderVo
.
OptButton
>
buttonList
=
new
ArrayList
<>();
buttonList
.
add
(
button
);
XyqbCurrentOrderStatusServiceResultModel
xyqbOrderStatus
=
xyqbCenterService
.
getXyqbOrderStatus
(
it
.
getApplyNo
(),
it
.
getLoanId
());
if
(
xyqbOrderStatus
!=
null
)
{
QueryXyqbOrderStatus
currentStatus
=
xyqbOrderStatus
.
getCurrentStatus
();
orderVo
.
setStatus
(
OrderVo
.
OptButtonAction
.
audit
.
getDesc
());
orderVo
.
setOpt
(
buttonList
);
orderVo
.
setMessage
(
""
);
Tuple
<
String
,
List
<
OrderVo
.
OptButton
>>
currentStatusAndButtons
=
OrderUtil
.
getCurrentStatusAndButtons
(
currentStatus
,
orderApprove
);
orderVo
.
setStatus
(
currentStatusAndButtons
.
getKey
());
orderVo
.
setOpt
(
currentStatusAndButtons
.
getValue
());
orderVo
.
setMessage
(
""
);
}
else
{
orderVo
.
setMessage
(
"订单查询错误"
);
}
return
orderVo
;
});
}
...
...
@@ -148,15 +151,15 @@ public class OrderService {
approveVo
.
getPeriod
(),
fundId
);
Order
order
=
new
Order
();
order
.
setChannelOrderNumber
(
approveVo
.
getChannelOrderNumber
());
order
.
setCreditNumber
(
orderMapping
.
getApplyNo
());
order
.
setChannelId
(
orderMapping
.
getRegisteredFrom
());
order
.
setFundId
(
fundId
);
order
.
setFundType
(
approveVo
.
getFundType
());
order
.
setCreateTime
(
new
Date
());
order
.
setUpdateTime
(
new
Date
());
orderRepository
.
save
(
order
);
Order
Approve
orderApprove
=
new
OrderApprove
();
order
Approve
.
setChannelOrderNumber
(
approveVo
.
getChannelOrderNumber
());
order
Approve
.
setCreditNumber
(
orderMapping
.
getApplyNo
());
order
Approve
.
setChannelId
(
orderMapping
.
getRegisteredFrom
());
order
Approve
.
setFundId
(
fundId
);
order
Approve
.
setFundType
(
approveVo
.
getFundType
());
order
Approve
.
setCreateTime
(
new
Date
());
order
Approve
.
setUpdateTime
(
new
Date
());
orderRepository
.
save
(
order
Approve
);
Map
<
String
,
Object
>
data
=
new
HashMap
<>(
16
);
...
...
@@ -193,7 +196,7 @@ public class OrderService {
boolean
result
;
Order
order
=
this
.
orderRepository
.
findOrder
ByChannelOrderNumber
(
lendingFormModel
.
getChannelOrderNumber
());
Order
Approve
orderApprove
=
this
.
orderRepository
.
find
ByChannelOrderNumber
(
lendingFormModel
.
getChannelOrderNumber
());
ClfOrderMapping
orderMapping
=
this
.
clfOrderMappingRepository
.
findByChannelOrderNoAndRegisteredFromLastOne
(
lendingFormModel
.
getChannelOrderNumber
(),
lendingFormModel
.
getChannelId
());
...
...
@@ -203,12 +206,12 @@ public class OrderService {
// 更新待放款时间
this
.
xyqbCenterService
.
updateFundLendingTime
(
orderMapping
.
getLoanId
());
Map
data
=
this
.
xyqbCenterService
.
queryLendingRecordCount
(
order
.
getFundId
(),
0
);
Map
data
=
this
.
xyqbCenterService
.
queryLendingRecordCount
(
order
Approve
.
getFundId
(),
0
);
result
=
this
.
clothoCenterService
.
lending
(
order
.
getFundId
(),
new
BigDecimal
(
String
.
valueOf
(
data
.
get
(
"totalAmount"
))),
Integer
.
valueOf
(
String
.
valueOf
(
data
.
get
(
"totalCount"
))));
result
=
this
.
clothoCenterService
.
lending
(
order
Approve
.
getFundId
(),
new
BigDecimal
(
String
.
valueOf
(
data
.
get
(
"totalAmount"
))),
Integer
.
valueOf
(
String
.
valueOf
(
data
.
get
(
"totalCount"
))));
// 如果是非存管,创建放款MQ
if
(
order
.
getFundType
()
==
0
)
{
if
(
order
Approve
.
getFundType
()
==
0
)
{
this
.
xyqbCenterService
.
pushLendingResult
(
orderMapping
.
getLoanId
(),
lendingFormModel
.
getResult
()
?
3
:
4
);
}
...
...
src/main/java/cn/quantgroup/cashloanflowboss/api/order/util/OrderUtil.java
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
order
.
util
;
import
cn.quantgroup.cashloanflowboss.api.order.entity.OrderApprove
;
import
cn.quantgroup.cashloanflowboss.api.order.model.OrderVo
;
import
cn.quantgroup.cashloanflowboss.api.order.model.QueryXyqbOrderStatus
;
import
cn.quantgroup.cashloanflowboss.core.base.Tuple
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* function:
* date: 2019/8/8
...
...
@@ -8,4 +17,108 @@ package cn.quantgroup.cashloanflowboss.api.order.util;
*/
public
class
OrderUtil
{
public
static
final
String
financeProductsFormat
=
"[{\"min\":%s,\"max\":%s,\"terms\":[{\"term\":%s,\"fundInfo\":[{\"fundId\":%s,\"rate\":\"0\",\"rateType\":1,\"priority\":\"1\",\"feeType\":\"1\"}]}]}]"
;
public
static
Tuple
<
String
,
List
<
OrderVo
.
OptButton
>>
getCurrentStatusAndButtons
(
QueryXyqbOrderStatus
currentStatus
,
OrderApprove
orderApprove
)
{
Tuple
tuple
=
new
Tuple
();
List
<
OrderVo
.
OptButton
>
buttonList
=
new
ArrayList
<>();
if
(
currentStatus
!=
null
)
{
if
(
StringUtils
.
isNotEmpty
(
currentStatus
.
getStatus
()))
{
OrderVo
.
OptButton
buttonBeforeCancel
=
new
OrderVo
.
OptButton
();
buttonBeforeCancel
.
setAction
(
OrderVo
.
OptButtonAction
.
cancel
.
name
());
buttonBeforeCancel
.
setName
(
OrderVo
.
OptButtonAction
.
cancel
.
getDesc
());
switch
(
currentStatus
.
getStatus
())
{
case
"CREDIT_SUCC"
:
// 授信成功 需要 审批
OrderVo
.
OptButton
buttonApprove
=
new
OrderVo
.
OptButton
();
buttonApprove
.
setAction
(
OrderVo
.
OptButtonAction
.
audit
.
name
());
buttonApprove
.
setName
(
OrderVo
.
OptButtonAction
.
audit
.
getDesc
());
buttonList
.
add
(
buttonApprove
);
buttonList
.
add
(
buttonBeforeCancel
);
tuple
.
setKey
(
"授信成功"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"APPROVE_ING"
:
tuple
.
setKey
(
"审批中"
);
buttonList
.
add
(
buttonBeforeCancel
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"REJECT"
:
tuple
.
setKey
(
"审批拒绝"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"FUAD_ASSIFN_SUCC"
:
tuple
.
setKey
(
"审批通过,待提现"
);
buttonList
.
add
(
buttonBeforeCancel
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"WITHDRAW"
:
// 提现申请成功 需要放款
tuple
.
setKey
(
"申请提现成功"
);
OrderVo
.
OptButton
buttonPaySucc
=
new
OrderVo
.
OptButton
();
buttonPaySucc
.
setAction
(
OrderVo
.
OptButtonAction
.
pay_succ
.
name
());
buttonPaySucc
.
setName
(
OrderVo
.
OptButtonAction
.
pay_succ
.
getDesc
());
buttonList
.
add
(
buttonPaySucc
);
OrderVo
.
OptButton
buttonPayFail
=
new
OrderVo
.
OptButton
();
buttonPayFail
.
setAction
(
OrderVo
.
OptButtonAction
.
pay_fail
.
name
());
buttonPayFail
.
setName
(
OrderVo
.
OptButtonAction
.
pay_fail
.
getDesc
());
buttonList
.
add
(
buttonPayFail
);
buttonList
.
add
(
buttonBeforeCancel
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"PAY_ING"
:
tuple
.
setKey
(
"放款中"
);
buttonList
.
add
(
buttonBeforeCancel
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"FUND_SUCC"
:
if
(
orderApprove
!=
null
&&
orderApprove
.
getFundType
()
!=
0
)
{
// 是存管
tuple
.
setKey
(
"放款到存管,待提现"
);
OrderVo
.
OptButton
cancelAfterButton
=
new
OrderVo
.
OptButton
();
cancelAfterButton
.
setAction
(
OrderVo
.
OptButtonAction
.
cancel_after
.
name
());
cancelAfterButton
.
setName
(
OrderVo
.
OptButtonAction
.
cancel_after
.
getDesc
());
buttonList
.
add
(
cancelAfterButton
);
}
else
{
tuple
.
setKey
(
"放款成功"
);
}
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"FUND_WITHDRAW_SUCC"
:
tuple
.
setKey
(
"存管提现成功"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"FUND_FAIL"
:
tuple
.
setKey
(
"放款失败"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"ALL_REPAID"
:
tuple
.
setKey
(
"已结清"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"CANCEL_LOAN"
:
tuple
.
setKey
(
"已关单"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
case
"CANCEL_AFTER_LOAN"
:
tuple
.
setKey
(
"存管提现超时或贷后关单"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
default
:
tuple
.
setKey
(
"未知状态"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
}
}
}
else
{
tuple
.
setKey
(
"未知状态"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
}
tuple
.
setKey
(
"未知状态"
);
tuple
.
setValue
(
buttonList
);
return
tuple
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/core/base/Tuple.java
0 → 100644
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
core
.
base
;
/**
* Created by Miraculous on 15/11/24.
*/
public
class
Tuple
<
K
,
V
>
{
private
K
key
;
private
V
value
;
public
Tuple
()
{
}
public
Tuple
(
K
key
,
V
value
)
{
this
.
key
=
key
;
this
.
value
=
value
;
}
public
K
getKey
()
{
return
key
;
}
public
Tuple
<
K
,
V
>
setKey
(
K
key
)
{
this
.
key
=
key
;
return
this
;
}
public
V
getValue
()
{
return
value
;
}
public
Tuple
<
K
,
V
>
setValue
(
V
value
)
{
this
.
value
=
value
;
return
this
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/spi/xyqb/client/XYQBCenter.java
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
spi
.
xyqb
.
client
;
import
cn.quantgroup.cashloanflowboss.api.order.model.XyqbCurrentOrderStatusServiceResultModel
;
import
cn.quantgroup.cashloanflowboss.api.order.model.XyqbHistoryOrderStatusServiceResultModel
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
...
...
@@ -17,6 +20,12 @@ public interface XYQBCenter {
@PostMapping
(
value
=
"/ex/paycenter/pay_notify"
,
consumes
=
"application/x-www-form-urlencoded"
)
String
pushLendingResult
(
@RequestParam
Map
parameter
);
@PostMapping
(
value
=
"/ex/ka/order/status"
,
consumes
=
"application/x-www-form-urlencoded"
)
XyqbCurrentOrderStatusServiceResultModel
getOrderStatus
(
@RequestParam
Map
orderNo
);
@PostMapping
(
value
=
"/ex/ka/order/status/history"
,
consumes
=
"application/x-www-form-urlencoded"
)
XyqbHistoryOrderStatusServiceResultModel
getXyqbOrderHistoryStatus
(
Map
paramMap
);
@Component
class
Fallback
implements
XYQBCenter
{
...
...
@@ -25,6 +34,16 @@ public interface XYQBCenter {
return
null
;
}
@Override
public
XyqbCurrentOrderStatusServiceResultModel
getOrderStatus
(
Map
orderNo
)
{
return
null
;
}
@Override
public
XyqbHistoryOrderStatusServiceResultModel
getXyqbOrderHistoryStatus
(
Map
paramMap
)
{
return
null
;
}
}
}
src/main/java/cn/quantgroup/cashloanflowboss/spi/xyqb/service/XYQBCenterService.java
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
spi
.
xyqb
.
service
;
import
cn.quantgroup.cashloanflowboss.api.order.model.XyqbCurrentOrderStatusServiceResultModel
;
import
cn.quantgroup.cashloanflowboss.api.order.model.XyqbHistoryOrderStatusServiceResultModel
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.client.XYQBCenter
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.repository.ContractRepository
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.repository.FundLendingRepository
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.util.SignUtil
;
import
com.google.common.collect.Maps
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -77,4 +81,37 @@ public class XYQBCenterService {
}
/**
* 查询订单当前状态
* @param creditOrderNumber
* @param loanId
* @return
*/
public
XyqbCurrentOrderStatusServiceResultModel
getXyqbOrderStatus
(
String
creditOrderNumber
,
Long
loanId
)
{
Map
paramMap
=
Maps
.
newHashMap
();
paramMap
=
SignUtil
.
sign
(
SignUtil
.
KA_API_KEY
,
paramMap
);
paramMap
.
put
(
"orderNo"
,
creditOrderNumber
);
paramMap
.
put
(
"loanId"
,
loanId
);
return
xyqbCenter
.
getOrderStatus
(
paramMap
);
}
/**
* 查询订单当前状态
* @param creditOrderNumber
* @param loanId
* @return
*/
public
XyqbHistoryOrderStatusServiceResultModel
getXyqbOrderHistoryStatus
(
String
creditOrderNumber
,
Long
loanId
)
{
Map
paramMap
=
Maps
.
newHashMap
();
paramMap
=
SignUtil
.
sign
(
SignUtil
.
KA_API_KEY
,
paramMap
);
paramMap
.
put
(
"orderNo"
,
creditOrderNumber
);
paramMap
.
put
(
"loanId"
,
loanId
);
return
xyqbCenter
.
getXyqbOrderHistoryStatus
(
paramMap
);
}
}
src/main/java/cn/quantgroup/cashloanflowboss/spi/xyqb/util/SignUtil.java
0 → 100644
View file @
a0142d4b
package
cn
.
quantgroup
.
cashloanflowboss
.
spi
.
xyqb
.
util
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.lang3.RandomStringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.security.SignatureException
;
import
java.util.*
;
/**
* xyqb 加签验证工具类
* @author Feng
* @version 2017.12.22
*/
public
class
SignUtil
{
public
static
final
String
KA_API_KEY
=
"100011"
;
private
static
final
long
MAX_RATIO
=
0x258
;
// 十分钟 10 * 60
private
static
Map
<
String
,
String
>
apiKeys
=
new
HashMap
<>();
static
{
apiKeys
.
put
(
KA_API_KEY
,
"aukpaqy3za9lkjisdfaoqtdtxumrjqzm"
);
}
public
static
void
addKeys
(
String
appid
,
String
key
)
{
apiKeys
.
put
(
appid
,
key
);
}
/**
* 参数签名
*
* @return map 所有参数 以及 sign
*/
public
static
Map
<
String
,
?>
sign
(
String
appid
,
Map
<
String
,
?>
params
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
map
.
putAll
(
params
);
map
.
put
(
"app_id"
,
appid
);
map
.
put
(
"timestamp"
,
String
.
valueOf
(
System
.
currentTimeMillis
()
/
1000
));
map
.
put
(
"noncestr"
,
RandomStringUtils
.
randomAlphanumeric
(
8
));
String
sign
=
signParams
(
map
,
appid
);
map
.
put
(
"sign"
,
sign
);
return
map
;
}
/**
* 签名
*
* @param map
* @return
*/
private
static
String
signParams
(
Map
<
String
,
?>
map
,
String
appid
)
{
List
<
String
>
names
=
new
ArrayList
<
String
>(
map
.
keySet
());
Collections
.
sort
(
names
);
StringBuffer
buffer
=
new
StringBuffer
();
for
(
String
key
:
names
)
{
buffer
.
append
(
key
).
append
(
"="
).
append
(
map
.
get
(
key
)).
append
(
"&"
);
}
buffer
.
append
(
"security_code="
).
append
(
apiKeys
.
get
(
appid
));
String
sign
=
DigestUtils
.
md5Hex
(
buffer
.
toString
());
return
sign
;
}
/**
* 验证签名
*
* @param params
* 1、参数中必须包含 app_id 、timestamp、noncestr,sign
* @return
* @throws IllegalAccessException
*/
public
static
boolean
checkSign
(
Map
<
String
,
?>
params
)
throws
SignatureException
{
String
pid
=
Objects
.
toString
(
params
.
get
(
"app_id"
),
null
);
String
noncestr
=
Objects
.
toString
(
params
.
get
(
"noncestr"
),
null
);
String
timestamp
=
Objects
.
toString
(
params
.
get
(
"timestamp"
),
null
);
String
sign
=
Objects
.
toString
(
params
.
get
(
"sign"
),
null
);
if
(
StringUtils
.
isBlank
(
pid
)
||
StringUtils
.
isBlank
(
noncestr
)
||
StringUtils
.
isBlank
(
timestamp
)
||
StringUtils
.
isBlank
(
sign
))
{
throw
new
SignatureException
(
"参数中必须包含 app_id 、timestamp、noncestr 、sign"
);
}
// 验证时间
if
(
timestamp
.
length
()
==
13
)
{
long
ratio
=
System
.
currentTimeMillis
()
-
Long
.
valueOf
(
timestamp
);
if
(
ratio
>
(
MAX_RATIO
*
1000
))
{
throw
new
SignatureException
(
"request overdue ...."
);
}
}
else
{
long
ratio
=
(
System
.
currentTimeMillis
()
/
1000
)
-
Long
.
valueOf
(
timestamp
);
if
(
ratio
>
MAX_RATIO
)
{
throw
new
SignatureException
(
"request overdue ...."
);
}
}
params
.
remove
(
"sign"
);
String
signVal
=
signParams
(
params
,
pid
);
// 签名
return
StringUtils
.
equalsIgnoreCase
(
signVal
,
sign
);
}
}
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