Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
asset-distribution
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
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
data-spider
asset-distribution
Commits
02f55d66
Commit
02f55d66
authored
Apr 01, 2020
by
liwenbin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
你我贷助贷资金需求
parent
d8107c9e
Changes
35
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
990 additions
and
184 deletions
+990
-184
pom.xml
pom.xml
+1
-1
HttpClientConfig.java
...roup/asset/distribution/config/http/HttpClientConfig.java
+3
-3
ConsumerConfig.java
...up/asset/distribution/config/rabbitmq/ConsumerConfig.java
+1
-1
AidFundConstants.java
...ntgroup/asset/distribution/constant/AidFundConstants.java
+17
-0
AidFundStatus.java
...quantgroup/asset/distribution/constant/AidFundStatus.java
+42
-0
RedisKeyConstants.java
...tgroup/asset/distribution/constant/RedisKeyConstants.java
+7
-2
NiWoDaiController.java
...roup/asset/distribution/controller/NiWoDaiController.java
+118
-0
UserLoanType.java
...com/quantgroup/asset/distribution/enums/UserLoanType.java
+25
-0
QGExceptionType.java
...ntgroup/asset/distribution/exception/QGExceptionType.java
+13
-2
AlarmServiceImpl.java
...set/distribution/service/alarm/impl/AlarmServiceImpl.java
+3
-3
AssetDistributeRecordServiceImpl.java
...ice/distribute/impl/AssetDistributeRecordServiceImpl.java
+1
-1
AssetDistributeServiceImpl.java
...n/service/distribute/impl/AssetDistributeServiceImpl.java
+17
-45
IAidFundAssetService.java
...et/distribution/service/funding/IAidFundAssetService.java
+29
-0
IAidFundAuditOrderService.java
...stribution/service/funding/IAidFundAuditOrderService.java
+30
-0
IAidFundRouteRecordService.java
...tribution/service/funding/IAidFundRouteRecordService.java
+24
-3
IAidFundRouteService.java
...et/distribution/service/funding/IAidFundRouteService.java
+2
-1
AidFundAssetServiceImpl.java
...ibution/service/funding/impl/AidFundAssetServiceImpl.java
+48
-0
AidFundAuditOrderServiceImpl.java
...on/service/funding/impl/AidFundAuditOrderServiceImpl.java
+53
-0
AidFundRouteRecordServiceImpl.java
...n/service/funding/impl/AidFundRouteRecordServiceImpl.java
+24
-4
AidFundRouteServiceImpl.java
...ibution/service/funding/impl/AidFundRouteServiceImpl.java
+81
-32
AidLoanFundAuditOrder.java
...istribution/service/jpa/entity/AidLoanFundAuditOrder.java
+77
-0
IAidLoanFundAuditOrderRepository.java
...vice/jpa/repository/IAidLoanFundAuditOrderRepository.java
+21
-0
IAidLoanFundRouteRecordRepository.java
...ice/jpa/repository/IAidLoanFundRouteRecordRepository.java
+1
-1
INiwodaiAssetService.java
...et/distribution/service/niwodai/INiwodaiAssetService.java
+4
-2
INiwodaiService.java
...p/asset/distribution/service/niwodai/INiwodaiService.java
+3
-4
NiwodaiAssetServiceImpl.java
...ibution/service/niwodai/impl/NiwodaiAssetServiceImpl.java
+96
-53
NiwodaiServiceImpl.java
...distribution/service/niwodai/impl/NiwodaiServiceImpl.java
+29
-21
NiwodaiCostant.java
...asset/distribution/service/niwodai/vo/NiwodaiCostant.java
+21
-0
NiwodaiIncomingRequestVO.java
...ribution/service/niwodai/vo/NiwodaiIncomingRequestVO.java
+6
-0
NiwodaiIncomingResultResponseVO.java
...n/service/niwodai/vo/NiwodaiIncomingResultResponseVO.java
+1
-1
IFinanceProductService.java
.../distribution/service/product/IFinanceProductService.java
+30
-0
FinanceProductServiceImpl.java
...ution/service/product/impl/FinanceProductServiceImpl.java
+96
-0
DateUtil.java
...java/com/quantgroup/asset/distribution/util/DateUtil.java
+11
-0
logback-qa.xml
src/main/resources/logback-qa.xml
+2
-2
NiwodaiTest.java
...om/quantgroup/asset/distribution/niwodai/NiwodaiTest.java
+53
-2
No files found.
pom.xml
View file @
02f55d66
...
...
@@ -302,7 +302,7 @@
<dependency>
<groupId>
com.google.protobuf
</groupId>
<artifactId>
protobuf-java
</artifactId>
<version>
3.6
.0
</version>
<version>
2.5
.0
</version>
</dependency>
<dependency>
<groupId>
com.googlecode.protobuf-java-format
</groupId>
...
...
src/main/java/com/quantgroup/asset/distribution/config/http/HttpClientConfig.java
View file @
02f55d66
...
...
@@ -125,11 +125,11 @@ public class HttpClientConfig {
return
null
;
}
};
String
classesPath
=
ClassUtils
.
getDefaultClassLoader
().
getResource
(
"
"
).
getPath
();
String
classesPath
=
this
.
getClass
().
getClassLoader
().
getResource
(
"niwodai/
"
).
getPath
();
KeyStore
keyStore
=
KeyStore
.
getInstance
(
"PKCS12"
);
keyStore
.
load
(
new
FileInputStream
(
new
File
(
classesPath
+
"
/niwodai/"
+
"
qg-keystore.jks"
)),
"password"
.
toCharArray
());
keyStore
.
load
(
new
FileInputStream
(
new
File
(
classesPath
+
"qg-keystore.jks"
)),
"password"
.
toCharArray
());
SSLContext
sslcontext
=
SSLContexts
.
custom
()
.
loadTrustMaterial
(
new
File
(
classesPath
+
"
/niwodai/"
+
"
qg-truststore.jks"
),
"password"
.
toCharArray
(),
new
TrustSelfSignedStrategy
())
.
loadTrustMaterial
(
new
File
(
classesPath
+
"qg-truststore.jks"
),
"password"
.
toCharArray
(),
new
TrustSelfSignedStrategy
())
.
loadKeyMaterial
(
keyStore
,
"password"
.
toCharArray
())
.
build
();
SSLConnectionSocketFactory
sslConnectionSocketFactory
=
new
SSLConnectionSocketFactory
(
...
...
src/main/java/com/quantgroup/asset/distribution/config/rabbitmq/ConsumerConfig.java
View file @
02f55d66
...
...
@@ -77,7 +77,7 @@ public class ConsumerConfig implements RabbitListenerConfigurer {
log
.
info
(
"资金路由有效MQ消息接收, 消息内容 : {} "
,
ms
);
String
applyNo
=
jo
.
getJSONObject
(
"data"
).
getString
(
"applyNo"
);
String
nextOperateDate
=
getNextOperateDate
(
jo
,
noticeType
);
iAidFundRouteRecordService
.
fundingResultNotity
(
applyNo
,
FundingResult
.
fromCode
(
noticeType
));
//
iAidFundRouteRecordService.fundingResultNotity(applyNo,FundingResult.fromCode(noticeType));
distributeService
.
receiveFundingResult
(
applyNo
,
FundingResult
.
fromCode
(
noticeType
),
nextOperateDate
);
log
.
info
(
"资金路由有效MQ消息处理结束, bizNo : {} ,noticeType : {} , 耗时 : {} "
,
applyNo
,
noticeType
,
stopwatch
.
stop
().
elapsed
(
TimeUnit
.
MILLISECONDS
));
}
...
...
src/main/java/com/quantgroup/asset/distribution/constant/AidFundConstants.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
constant
;
/**
* @author : Hyuk
* @description : AidFundConstants
* @date : 2020/3/27 5:09 下午
*/
public
class
AidFundConstants
{
public
static
class
FundId
{
/**
* 你我贷
*/
public
static
final
String
NIWODAI
=
"970"
;
}
}
src/main/java/com/quantgroup/asset/distribution/constant/AidFundStatus.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
constant
;
/**
* @author : Hyuk
* @description : AidFundIncomingStatus
* @date : 2020/3/30 11:04 上午
*/
public
class
AidFundStatus
{
/**
* 进件状态
*/
public
static
class
Incoming
{
public
static
int
REJECT
=
0
;
public
static
int
PASS
=
1
;
// 资方审核中
public
static
int
WAIT
=
2
;
// 保留状态,如果资方进件成功改为WAIT
public
static
int
PRE
=
3
;
}
/**
* 路由状态
*/
public
static
class
Route
{
// 1-准入成功
public
static
int
PRE_PASS
=
1
;
// 2-准入失败
public
static
int
PRE_REJECT
=
2
;
// 3-进件完成
public
static
int
INCOMING_COMPLETE
=
3
;
}
}
src/main/java/com/quantgroup/asset/distribution/constant/RedisKeyConstants.java
View file @
02f55d66
...
...
@@ -29,10 +29,15 @@ public class RedisKeyConstants {
/**
* 你我贷token
*/
public
static
final
String
NI_WO_DAI_TOKEN_KEY
=
"
DATA_EXPORT_PLATFORM
:NIWODAI:TOKEN:YHABEA"
;
public
static
final
String
NI_WO_DAI_TOKEN_KEY
=
"
ASSET.DISTRIBUTE
:NIWODAI:TOKEN:YHABEA"
;
/**
* 完成路由的资方缓存KEY
*/
public
static
final
String
FINISH_ROUTE_AID_FUND_KEY
=
"FINISH.ROUTE.AID.FUND.KEY.IJN9_"
;
public
static
final
String
FINISH_ROUTE_AID_FUND_KEY
=
"ASSET.DISTRIBUTE:FINISH.ROUTE.AID.FUND.KEY.IJN9_"
;
/**
* 助贷资方审核订单缓存KEY
*/
public
static
final
String
AID_FUND_AUDIT_ORDER_KEY
=
"ASSET.DISTRIBUTE:AID_FUND_AUDIT_ORDER:BY_BIZ_NO_AND_FUND_ID:AKVVS3:"
;
}
src/main/java/com/quantgroup/asset/distribution/controller/NiWoDaiController.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.quantgroup.asset.distribution.constant.AidFundConstants
;
import
com.quantgroup.asset.distribution.constant.AidFundStatus
;
import
com.quantgroup.asset.distribution.constant.StatusConstants
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.model.response.GlobalResponse
;
import
com.quantgroup.asset.distribution.service.alarm.IAlarmService
;
import
com.quantgroup.asset.distribution.service.distribute.IAssetDistributeRecordService
;
import
com.quantgroup.asset.distribution.service.distribute.IAssetDistributeService
;
import
com.quantgroup.asset.distribution.service.funding.IAidFundAuditOrderService
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundAuditOrder
;
import
com.quantgroup.asset.distribution.service.jpa.entity.Asset
;
import
com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiCostant
;
import
com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiIncomingResultResponseVO
;
import
com.quantgroup.asset.distribution.service.notify.INotifyService
;
import
com.quantgroup.asset.distribution.service.product.IFinanceProductService
;
import
com.quantgroup.asset.distribution.service.redis.IRedisService
;
import
com.quantgroup.asset.distribution.util.DateUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.Map
;
/**
* @author : Hyuk
* @description : NiWoDaiContraoller
* @date : 2020/3/27 2:12 下午
*/
@RestController
@Slf4j
@RequestMapping
(
"/niwodai"
)
public
class
NiWoDaiController
{
@Autowired
private
IAidFundAuditOrderService
aidFundAuditOrderService
;
@Autowired
private
IAlarmService
alarmService
;
@Autowired
private
IAssetDistributeService
assetDistributeService
;
@Autowired
private
IAssetDistributeRecordService
assetDistributeRecordService
;
@Autowired
private
IFinanceProductService
financeProductService
;
@Autowired
private
INotifyService
notifyService
;
@RequestMapping
(
"/incoming/callback"
)
public
GlobalResponse
auditResultCallback
(
String
orderId
,
String
type
,
Integer
code
,
Long
timestamp
,
String
data
)
{
log
.
info
(
"你我贷审核进件回调收到结果, orderId : {}, type : {}, code : {}, timestamp : {}, data : {}"
,
orderId
,
type
,
code
,
timestamp
,
data
);
AidLoanFundAuditOrder
aidLoanFundAuditOrder
=
aidFundAuditOrderService
.
findByBizNoAndFundId
(
orderId
,
AidFundConstants
.
FundId
.
NIWODAI
);
if
(
aidLoanFundAuditOrder
==
null
)
{
log
.
info
(
"你我贷审核进件回调结果未找到订单, orderId : {}, type : {}, code : {}, timestamp : {}, data : {}"
,
orderId
,
type
,
code
,
timestamp
,
data
);
alarmService
.
dingtalkAlarm
(
"Error"
,
"你我贷资方审核回调结果未找到订单"
,
"bizNo : "
+
orderId
+
" , type : "
+
type
+
" , code : "
+
code
+
" , timestamp : "
+
timestamp
+
" , data : "
+
data
);
return
GlobalResponse
.
success
();
}
if
(
aidLoanFundAuditOrder
.
getAuditResult
().
intValue
()
!=
AidFundStatus
.
Incoming
.
WAIT
&&
aidLoanFundAuditOrder
.
getAuditResult
().
intValue
()
!=
AidFundStatus
.
Incoming
.
PRE
)
{
log
.
info
(
"你我贷进件回调结果订单重复通知结果, 请查看, orderId : {}, type : {}, code : {}, timestamp : {}, data : {}"
,
orderId
,
type
,
code
,
timestamp
,
data
);
return
GlobalResponse
.
success
();
}
if
(!
"APPLY"
.
equals
(
type
))
{
log
.
info
(
"你我贷审核进件回调结果type出现错误, orderId : {}, type : {}, code : {}, timestamp : {}, data : {}"
,
orderId
,
type
,
code
,
timestamp
,
data
);
alarmService
.
dingtalkAlarm
(
"Error"
,
"你我贷审核结果回调type错误"
,
"bizNo : "
+
orderId
+
" , type : "
+
type
+
" , code : "
+
code
+
" , timestamp : "
+
timestamp
+
" , data : "
+
data
);
return
GlobalResponse
.
success
();
}
if
(
code
==
null
||
(
code
!=
300005
&&
code
!=
300006
))
{
log
.
info
(
"你我贷审核进件回调结果code出现错误, orderId : {}, type : {}, code : {}, timestamp : {}, data : {}"
,
orderId
,
type
,
code
,
timestamp
,
data
);
alarmService
.
dingtalkAlarm
(
"Error"
,
"你我贷审核结果回调code出现错误"
,
"bizNo : "
+
orderId
+
" , type : "
+
type
+
" , code : "
+
code
+
" , timestamp : "
+
timestamp
+
" , data : "
+
data
);
return
GlobalResponse
.
success
();
}
AssetForm
assetForm
=
JSON
.
parseObject
(
aidLoanFundAuditOrder
.
getAssetFormText
(),
AssetForm
.
class
);
Asset
asset
=
JSON
.
parseObject
(
aidLoanFundAuditOrder
.
getAssetText
(),
Asset
.
class
);
Map
<
String
,
Object
>
dataMap
=
JSON
.
parseObject
(
aidLoanFundAuditOrder
.
getDataText
(),
Map
.
class
);
if
(
300005
==
code
)
{
// 将助贷审核订单状态改为拒绝
aidFundAuditOrderService
.
updateOrderStatus
(
aidLoanFundAuditOrder
,
AidFundStatus
.
Incoming
.
REJECT
);
// 将分发记录改为失败
assetDistributeRecordService
.
updateAssetDistributeStatus
(
orderId
,
StatusConstants
.
FAIL
);
// 重新进行分发
assetDistributeService
.
distribute
(
assetForm
,
asset
,
dataMap
);
}
else
{
NiwodaiIncomingResultResponseVO
vo
=
JSON
.
parseObject
(
data
,
NiwodaiIncomingResultResponseVO
.
class
);
if
(!
checkIncomingResult
(
vo
))
{
log
.
info
(
"你我贷审核进件回调结果data出现错误, orderId : {}, type : {}, code : {}, timestamp : {}, data : {}"
,
orderId
,
type
,
code
,
timestamp
,
JSON
.
toJSONString
(
vo
));
alarmService
.
dingtalkAlarm
(
"Error"
,
"你我贷审核结果回调data出现错误"
,
"bizNo : "
+
orderId
+
" , type : "
+
type
+
" , code : "
+
code
+
" , timestamp : "
+
timestamp
+
" , data : "
+
data
);
return
GlobalResponse
.
success
();
}
// 通过了直接通知资金系统
String
finance
=
financeProductService
.
createSingletonFinanceProduct
(
vo
.
getApprovedAmount
().
toString
(),
NiwodaiCostant
.
AUDIT_TERM
,
AidFundConstants
.
FundId
.
NIWODAI
,
null
);
assetForm
=
financeProductService
.
checkFundResult
(
assetForm
,
finance
,
Long
.
parseLong
(
vo
.
getValidBefore
()));
notifyService
.
notifyFundServer
(
assetForm
,
dataMap
);
}
log
.
info
(
"你我贷审核进件回调结果处理完成, orderId : {}, type : {}, code : {}, timestamp : {}, data : {}"
,
orderId
,
type
,
code
,
timestamp
,
data
);
return
GlobalResponse
.
success
();
}
/**
* 审核通过,检验参数
* @param vo
* @return
*/
private
boolean
checkIncomingResult
(
NiwodaiIncomingResultResponseVO
vo
)
{
if
(
vo
==
null
||
vo
.
getApprovedAmount
()
==
null
||
vo
.
getValidBefore
()
==
null
)
{
return
false
;
}
return
true
;
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
System
.
currentTimeMillis
());
}
}
src/main/java/com/quantgroup/asset/distribution/enums/UserLoanType.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
enums
;
import
lombok.Getter
;
/**
* @author : Hyuk
* @description : UserLoanType
* @date : 2020/3/26 7:10 下午
*/
public
enum
UserLoanType
{
FIRST_APPLY
(
0
,
"首申"
),
RE_APPLY
(
1
,
"复申"
),
RE_LOAN
(
2
,
"复贷"
);
@Getter
private
Integer
code
;
@Getter
private
String
title
;
UserLoanType
(
Integer
code
,
String
title
)
{
this
.
code
=
code
;
this
.
title
=
title
;
}
}
src/main/java/com/quantgroup/asset/distribution/exception/QGExceptionType.java
View file @
02f55d66
...
...
@@ -53,8 +53,19 @@ public enum QGExceptionType {
NO_FUND_INFO_BEEN_HIT
(
3002
,
"未命中任何资方, bizChannel : %s, amount : %s, term : %s"
),
FUND_PRIORITY_IS_ERROR
(
3003
,
"资方优先级不符合要求, bizChannel : %s, amount : %s, term : %s"
),
NOT_FOUNT_CHANNEL_FUNDS_INFO
(
3004
,
"未找到渠道资方配置, 请检查; bizChannel : %s"
),
CHANNEL_FUND_CONFIG_GREATER_THAN_TOW
(
3005
,
"渠道资方有效配置大于2条,请检查; bizChannel : % s"
),
HIT_FUND_BUT_AMOUNT_OR_TERM_IS_EMPTY
(
3006
,
"命中资方但额度或期数为空, 请检查!"
);
CHANNEL_FUND_CONFIG_GREATER_THAN_TOW
(
3005
,
"渠道资方有效配置大于2条,请检查; bizChannel : %s"
),
HIT_FUND_BUT_AMOUNT_OR_TERM_IS_EMPTY
(
3006
,
"命中资方但额度或期数为空, 请检查!"
),
GET_USER_INFO_ERROR
(
3007
,
"用户中心获取用户信息异常!"
),
USER_PHONE_NO_EMPTY
(
3008
,
"用户手机号为空"
),
USER_ID_NO_EMPTY
(
3009
,
"用户身份证为空"
),
USER_NAME_EMPTY
(
3010
,
"用户姓名为空"
),
GET_NIWODAI_TOKEN_ERROR
(
3011
,
"获取你我贷token异常"
),
NIWODAI_PRE_AUDIT_RESULAT_ERROR
(
3012
,
"你我贷准入接口返回结果异常, resposne : %s"
),
NIWODAI_INCOMING_RESULT_ERROR
(
3013
,
"你我贷进件返回结果异常, resposne : % s"
),
NIWODAI_INCOMING_AUDIT_RESULT_ERROR
(
3014
,
"你我贷进件审核返回结果异常, response : %s"
),
OCR_DATA_MISS
(
3015
,
"OCR信息数据缺失,请核查"
),
UNKNOW_AID_FUND_ID
(
3016
,
"未知的助贷资方, fundId : %s"
);
...
...
src/main/java/com/quantgroup/asset/distribution/service/alarm/impl/AlarmServiceImpl.java
View file @
02f55d66
...
...
@@ -25,8 +25,8 @@ public class AlarmServiceImpl implements IAlarmService{
private
static
final
String
ALARM_HTTP_URL
=
"http://alertserv-dataservice.quantgroup.cn/common/alert/dingtalk"
;
private
static
final
String
ROBOT_WEB_HOOK
=
"https://oapi.dingtalk.com/robot/send?access_token=53a55ffe3d4a5398a7ba44e4fcee1a3ac006edcba9cfdc4b1f9f692ffc18a5b8"
;
@Value
(
"${
isDebug
}"
)
private
Boolean
isDebug
;
@Value
(
"${
alarmOpen
}"
)
private
Boolean
alarmOpen
;
@Autowired
private
IHttpService
httpService
;
...
...
@@ -34,7 +34,7 @@ public class AlarmServiceImpl implements IAlarmService{
@Override
public
void
dingtalkAlarm
(
String
alarmLevel
,
String
msgTitle
,
String
msgContent
)
{
try
{
if
(
isDebug
)
{
return
;
}
if
(
!
alarmOpen
)
{
return
;
}
Map
<
String
,
String
>
params
=
new
HashMap
<>();
params
.
put
(
"webhook"
,
ROBOT_WEB_HOOK
);
params
.
put
(
"alarmLevel"
,
alarmLevel
);
...
...
src/main/java/com/quantgroup/asset/distribution/service/distribute/impl/AssetDistributeRecordServiceImpl.java
View file @
02f55d66
...
...
@@ -74,8 +74,8 @@ public class AssetDistributeRecordServiceImpl implements IAssetDistributeRecordS
public
void
updateAssetDistributeStatus
(
String
bizNo
,
int
status
)
{
AssetDistributeRecord
assetDistributeRecord
=
assetDistributeRecordRepository
.
findByBizNoOrderByCreatedAtDescLimitOne
(
bizNo
);
if
(
assetDistributeRecord
==
null
)
{
if
(
isDebug
)
{
return
;
}
log
.
info
(
"资产分发记录更改状态未找到订单, bizNo : {}, status : {}"
,
bizNo
,
status
);
if
(
isDebug
)
{
return
;
}
throw
new
QGException
(
QGExceptionType
.
NOT_FOUND_FUND_SERVER_RESULT_BIZNO
,
bizNo
,
status
);
}
else
{
assetDistributeRecord
.
setAssetDistributeStatus
(
status
);
...
...
src/main/java/com/quantgroup/asset/distribution/service/distribute/impl/AssetDistributeServiceImpl.java
View file @
02f55d66
...
...
@@ -28,6 +28,7 @@ import com.quantgroup.asset.distribution.service.jpa.entity.AssetDistributeRuleC
import
com.quantgroup.asset.distribution.service.jpa.entity.FundModuleChannelFundConfigNew
;
import
com.quantgroup.asset.distribution.service.notify.INotifyService
;
import
com.quantgroup.asset.distribution.service.product.IFinanceProductHitLogService
;
import
com.quantgroup.asset.distribution.service.product.IFinanceProductService
;
import
com.quantgroup.asset.distribution.service.redis.IRedisService
;
import
com.quantgroup.asset.distribution.service.rule.IRuleService
;
import
com.quantgroup.asset.distribution.service.rule.vo.IRuleVO
;
...
...
@@ -74,6 +75,8 @@ public class AssetDistributeServiceImpl implements IAssetDistributeService{
@Autowired
private
IRuleService
ruleService
;
@Autowired
private
IFinanceProductService
financeProductService
;
@Autowired
private
IFinanceProductHitLogService
financeProductHitLogService
;
private
static
final
ExecutorService
executorPool
=
Executors
.
newFixedThreadPool
(
4
);
...
...
@@ -108,6 +111,10 @@ public class AssetDistributeServiceImpl implements IAssetDistributeService{
assetForm
.
getUuid
(),
assetForm
.
getBizNo
(),
assetForm
.
getAssetNo
(),
assetForm
.
getBizChannel
(),
ruleConfig
.
getId
(),
ruleConfig
.
getAssetDistributeRuleName
(),
distributeStatus
);
success
=
true
;
}
else
if
(
distributeStatus
==
StatusConstants
.
FAIL
)
{
// 如果分发失败,直接更改状态
assetDistributeRecord
.
setAssetDistributeStatus
(
StatusConstants
.
FAIL
);
assetDistributeRecordService
.
updateAssetDistribute
(
assetDistributeRecord
);
}
}
// 保存节点尝试记录
...
...
@@ -135,28 +142,22 @@ public class AssetDistributeServiceImpl implements IAssetDistributeService{
try
{
switch
(
ruleType
)
{
case
DistributeConstants
.
RuleType
.
FUND_ROUTE
:
// 资方配置空跑
// 资方配置空跑
,这里的目的是深度拷贝一个新对象,避免发生错乱
doTestExecute
(
JSON
.
parseObject
(
JSON
.
toJSONString
(
assetForm
),
AssetForm
.
class
),
data
);
// 如果使用资方模块则去命中资方,创建金融产品集
String
hitFinanceProduct
=
hitFundIfUseFundModule
(
assetForm
,
data
,
ExecuteType
.
ONLINE
);
// 资方模块结果处理
checkFundResult
(
assetForm
,
hitFinanceProduct
);
financeProductService
.
checkFundResult
(
assetForm
,
hitFinanceProduct
);
if
(
StringUtils
.
isNotEmpty
(
hitFinanceProduct
))
{
notifyService
.
notifyFundServer
(
assetForm
,
data
);
return
StatusConstants
.
WAIT
;
}
return
StatusConstants
.
FAIL
;
case
DistributeConstants
.
RuleType
.
AID_FUND_ROUTE
:
{
GlobalResponse
response
=
aidFundRouteService
.
aidFundRoute
(
assetForm
,
asset
.
getUserLoanType
(),
data
);
int
status
=
response
.
getCode
()
==
0
?
StatusConstants
.
WAIT
:
StatusConstants
.
FAIL
;
//助贷资金路由 分配失败没有 mq消息 成功有
if
(
status
==
0
){
// 助贷资金路由目前不从mq里接受终态
assetDistributeRecord
.
setAssetDistributeStatus
(
status
);
assetDistributeRecordService
.
updateAssetDistribute
(
assetDistributeRecord
);
}
return
status
;
}
case
DistributeConstants
.
RuleType
.
DIVERSION
:
boolean
response
=
aidFundRouteService
.
aidFundRoute
(
assetForm
,
asset
,
data
);
return
response
?
StatusConstants
.
WAIT
:
StatusConstants
.
FAIL
;
}
case
DistributeConstants
.
RuleType
.
DIVERSION
:
notifyService
.
notifyFundServer
(
assetForm
,
data
);
return
StatusConstants
.
WAIT
;
default
:
...
...
@@ -230,7 +231,10 @@ public class AssetDistributeServiceImpl implements IAssetDistributeService{
try
{
Stopwatch
stopwatch
=
Stopwatch
.
createStarted
();
// 1、更改分配记录状态
assetDistributeRecordService
.
updateAssetDistributeStatus
(
bizNo
,
fundingResult
==
FundingResult
.
FUAD_ASSIGN_SUCC
?
StatusConstants
.
SUCCESS
:
StatusConstants
.
FAIL
);
if
(
fundingResult
!=
FundingResult
.
HANG_UP
)
{
// HANG_UP不更改,
assetDistributeRecordService
.
updateAssetDistributeStatus
(
bizNo
,
fundingResult
==
FundingResult
.
FUAD_ASSIGN_SUCC
?
StatusConstants
.
SUCCESS
:
StatusConstants
.
FAIL
);
}
// 2、通知业务流系统
notifyService
.
notifyBusinessFlow
(
bizNo
,
fundingResult
,
nextOperateDate
);
// 3、重新进行分发, 目前还没有,等接了助贷资金路由以后再增加
...
...
@@ -329,38 +333,6 @@ public class AssetDistributeServiceImpl implements IAssetDistributeService{
return
hitFinanceProduct
;
}
/**
* 资方模块命中后结果处理
* @param assetForm
* @param hitFinanceProduct
* @return
*/
private
AssetForm
checkFundResult
(
AssetForm
assetForm
,
String
hitFinanceProduct
)
{
if
(
hitFinanceProduct
==
null
)
{
if
(
"false"
.
equals
(
assetForm
.
getAuditResult
()))
{
// 把传过来的额度和期数处理为null
assetForm
.
setAmount
(
null
);
assetForm
.
setTerm
(
null
);
}
return
assetForm
;
}
// 金融产品集替换
String
oldFinanceProduct
=
assetForm
.
getFinanceProducts
();
assetForm
.
setFinanceProducts
(
hitFinanceProduct
);
// 审核结果替换
String
oldAuditResult
=
assetForm
.
getAuditResult
();
if
(
"false"
.
equals
(
oldAuditResult
))
{
assetForm
.
setAuditResult
(
"true"
);
}
// 保存日志
financeProductHitLogService
.
saveLog
(
assetForm
,
oldFinanceProduct
,
hitFinanceProduct
,
oldAuditResult
,
assetForm
.
getAuditResult
(),
ExecuteType
.
ONLINE
);
log
.
info
(
"资方命中后,审核最终结果, assetForm : {}"
,
JSON
.
toJSONString
(
assetForm
));
return
assetForm
;
}
/**
* 组建金融产品集
* @param assetForm
...
...
src/main/java/com/quantgroup/asset/distribution/service/funding/IAidFundAssetService.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
funding
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
java.util.Map
;
/**
* @author : Hyuk
* @description : IAidFundAssetService
* @date : 2020/3/27 5:07 下午
*/
public
interface
IAidFundAssetService
{
/**
* 准入审核,预审
* @param assetForm
* @return
*/
public
boolean
preAudit
(
AssetForm
assetForm
,
String
fundId
);
/**
* 进件审核
* @param assetForm
* @param data
* @param userLoanType
* @return true:进件成功 false:进件失败
*/
public
boolean
audit
(
AssetForm
assetForm
,
Map
<
String
,
Object
>
data
,
Integer
userLoanType
,
String
fundId
);
}
src/main/java/com/quantgroup/asset/distribution/service/funding/IAidFundAuditOrderService.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
funding
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundAuditOrder
;
/**
* @author : Hyuk
* @description : IAidFundAuditOrderService
* @date : 2020/3/30 10:31 上午
*/
public
interface
IAidFundAuditOrderService
{
public
AidLoanFundAuditOrder
saveAidFundAuditOrder
(
AidLoanFundAuditOrder
aidLoanFundAuditOrder
);
/**
* 更改助贷资金路由审核订单状态
* @param aidLoanFundAuditOrder
* @param status
* @return
*/
public
AidLoanFundAuditOrder
updateOrderStatus
(
AidLoanFundAuditOrder
aidLoanFundAuditOrder
,
Integer
status
);
/**
* 根据三元素查找审核订单
* @param bizNo
* @param fundId
* @param auditResult
* @return
*/
public
AidLoanFundAuditOrder
findByBizNoAndFundId
(
String
bizNo
,
String
fundId
);
}
src/main/java/com/quantgroup/asset/distribution/service/funding/IAidFundRouteRecordService.java
View file @
02f55d66
...
...
@@ -3,6 +3,10 @@ package com.quantgroup.asset.distribution.service.funding;
import
com.quantgroup.asset.distribution.enums.funding.FundingResult
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundRouteRecord
;
import
java.util.concurrent.TimeUnit
;
import
static
com
.
quantgroup
.
asset
.
distribution
.
constant
.
RedisKeyConstants
.
FINISH_ROUTE_AID_FUND_KEY
;
/**
* Created by renfeng on 2019/7/17.
*/
...
...
@@ -11,20 +15,37 @@ public interface IAidFundRouteRecordService {
/**
* 资金分配结果通知
*
* @param bizNo
* @param fundingResult
*/
void
fundingResultNotity
(
String
bizNo
,
FundingResult
fundingResult
);
void
fundingResultNotity
(
String
bizNo
,
FundingResult
fundingResult
);
/**
* 保存主贷资金路由记录
*
* @param aidLoanFundRouteRecord
*/
void
saveAidLoanFundRouteRecord
(
AidLoanFundRouteRecord
aidLoanFundRouteRecord
);
AidLoanFundRouteRecord
saveAidLoanFundRouteRecord
(
AidLoanFundRouteRecord
aidLoanFundRouteRecord
);
/**
* 根据bizNo和fundId找路由记录
*
* @param bizNo
* @param fundId
* @return
*/
AidLoanFundRouteRecord
findByBizNoAndFundId
(
String
bizNo
,
String
fundId
);
/**
* 更改助贷资金路由记录状态
*
* @param aidLoanFundRouteRecord
* @param status
* @return
*/
AidLoanFundRouteRecord
updateAidLoanFundRouteRecordStatus
(
AidLoanFundRouteRecord
aidLoanFundRouteRecord
,
Integer
status
);
}
src/main/java/com/quantgroup/asset/distribution/service/funding/IAidFundRouteService.java
View file @
02f55d66
...
...
@@ -4,6 +4,7 @@ import java.util.Map;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.model.response.GlobalResponse
;
import
com.quantgroup.asset.distribution.service.jpa.entity.Asset
;
/**
* Created by renfeng on 2019/7/17.
...
...
@@ -17,6 +18,6 @@ public interface IAidFundRouteService {
* @param userLoanType
* @return
*/
GlobalResponse
aidFundRoute
(
AssetForm
assetForm
,
Integer
userLoanType
,
Map
<
String
,
Object
>
data
);
boolean
aidFundRoute
(
AssetForm
assetForm
,
Asset
asset
,
Map
<
String
,
Object
>
data
);
}
src/main/java/com/quantgroup/asset/distribution/service/funding/impl/AidFundAssetServiceImpl.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
funding
.
impl
;
import
com.quantgroup.asset.distribution.constant.AidFundConstants
;
import
com.quantgroup.asset.distribution.exception.QGException
;
import
com.quantgroup.asset.distribution.exception.QGExceptionType
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.service.funding.IAidFundAssetService
;
import
com.quantgroup.asset.distribution.service.niwodai.INiwodaiAssetService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Map
;
/**
* @author : Hyuk
* @description : AidFundAssetServiceIMpl
* @date : 2020/3/27 5:22 下午
*/
@Slf4j
@Service
public
class
AidFundAssetServiceImpl
implements
IAidFundAssetService
{
@Autowired
private
INiwodaiAssetService
niwodaiAssetService
;
@Override
public
boolean
preAudit
(
AssetForm
assetForm
,
String
fundId
)
{
switch
(
fundId
)
{
case
AidFundConstants
.
FundId
.
NIWODAI
:
{
return
niwodaiAssetService
.
preAudit
(
assetForm
.
getUuid
()).
getPass
().
booleanValue
();
}
default
:
throw
new
QGException
(
QGExceptionType
.
UNKNOW_AID_FUND_ID
);
}
}
@Override
public
boolean
audit
(
AssetForm
assetForm
,
Map
<
String
,
Object
>
data
,
Integer
userLoanType
,
String
fundId
)
{
switch
(
fundId
)
{
case
AidFundConstants
.
FundId
.
NIWODAI
:
{
return
niwodaiAssetService
.
incoming
(
assetForm
,
data
,
userLoanType
).
getCode
().
equals
(
300007
);
}
default
:
throw
new
QGException
(
QGExceptionType
.
UNKNOW_AID_FUND_ID
);
}
}
}
src/main/java/com/quantgroup/asset/distribution/service/funding/impl/AidFundAuditOrderServiceImpl.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
funding
.
impl
;
import
com.quantgroup.asset.distribution.constant.RedisKeyConstants
;
import
com.quantgroup.asset.distribution.service.funding.IAidFundAuditOrderService
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundAuditOrder
;
import
com.quantgroup.asset.distribution.service.jpa.repository.IAidLoanFundAuditOrderRepository
;
import
com.quantgroup.asset.distribution.service.redis.IRedisService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.concurrent.TimeUnit
;
/**
* @author : Hyuk
* @description : AidFundAuditOrderServiceIMpl
* @date : 2020/3/30 11:14 上午
*/
@Service
public
class
AidFundAuditOrderServiceImpl
implements
IAidFundAuditOrderService
{
@Autowired
private
IAidLoanFundAuditOrderRepository
aidLoanFundAuditOrderRepository
;
@Autowired
private
IRedisService
<
AidLoanFundAuditOrder
>
redisService
;
@Override
public
AidLoanFundAuditOrder
saveAidFundAuditOrder
(
AidLoanFundAuditOrder
aidLoanFundAuditOrder
)
{
aidLoanFundAuditOrder
=
aidLoanFundAuditOrderRepository
.
save
(
aidLoanFundAuditOrder
);
String
key
=
RedisKeyConstants
.
AID_FUND_AUDIT_ORDER_KEY
+
aidLoanFundAuditOrder
.
getBizNo
()
+
"_"
+
aidLoanFundAuditOrder
.
getFundId
();
redisService
.
setEntityEx
(
key
,
aidLoanFundAuditOrder
,
30
,
TimeUnit
.
MINUTES
);
return
aidLoanFundAuditOrder
;
}
@Override
public
AidLoanFundAuditOrder
updateOrderStatus
(
AidLoanFundAuditOrder
aidLoanFundAuditOrder
,
Integer
status
)
{
aidLoanFundAuditOrder
.
setAuditResult
(
status
);
return
saveAidFundAuditOrder
(
aidLoanFundAuditOrder
);
}
@Override
public
AidLoanFundAuditOrder
findByBizNoAndFundId
(
String
bizNo
,
String
fundId
)
{
String
key
=
RedisKeyConstants
.
AID_FUND_AUDIT_ORDER_KEY
+
bizNo
+
"_"
+
fundId
;
AidLoanFundAuditOrder
aidLoanFundAuditOrder
=
redisService
.
getEntity
(
key
);
if
(
aidLoanFundAuditOrder
==
null
)
{
aidLoanFundAuditOrder
=
aidLoanFundAuditOrderRepository
.
findByBizNoAndFundIdAndEnableIsTrue
(
bizNo
,
fundId
);
if
(
aidLoanFundAuditOrder
!=
null
)
{
redisService
.
setEntityEx
(
key
,
aidLoanFundAuditOrder
,
30
,
TimeUnit
.
MINUTES
);
}
}
return
aidLoanFundAuditOrder
;
}
}
src/main/java/com/quantgroup/asset/distribution/service/funding/impl/AidFundRouteRecordServiceImpl.java
View file @
02f55d66
...
...
@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
import
java.util.concurrent.TimeUnit
;
import
static
com
.
quantgroup
.
asset
.
distribution
.
constant
.
RedisKeyConstants
.
AID_LOAN_COUNT_LIMIT_KEY
;
import
static
com
.
quantgroup
.
asset
.
distribution
.
constant
.
RedisKeyConstants
.
FINISH_ROUTE_AID_FUND_KEY
;
/**
* Created by renfeng on 2019/7/19.
...
...
@@ -26,9 +27,8 @@ public class AidFundRouteRecordServiceImpl implements IAidFundRouteRecordService
@Autowired
private
IAidLoanFundRouteRecordRepository
iAidLoanFundRouteRecordRepository
;
@Autowired
private
IRedisService
<
String
>
redisService
;
private
IRedisService
<
AidLoanFundRouteRecord
>
redisService
;
/**
* 资金分配结果通知
...
...
@@ -59,9 +59,29 @@ public class AidFundRouteRecordServiceImpl implements IAidFundRouteRecordService
* @param aidLoanFundRouteRecord
*/
@Override
public
void
saveAidLoanFundRouteRecord
(
AidLoanFundRouteRecord
aidLoanFundRouteRecord
)
{
iAidLoanFundRouteRecordRepository
.
save
(
aidLoanFundRouteRecord
);
public
AidLoanFundRouteRecord
saveAidLoanFundRouteRecord
(
AidLoanFundRouteRecord
aidLoanFundRouteRecord
)
{
AidLoanFundRouteRecord
record
=
iAidLoanFundRouteRecordRepository
.
save
(
aidLoanFundRouteRecord
);
redisService
.
setEntityEx
(
FINISH_ROUTE_AID_FUND_KEY
+
record
.
getBizNo
()
+
"_"
+
record
.
getFundId
(),
record
,
30
,
TimeUnit
.
MINUTES
);
return
record
;
}
@Override
public
AidLoanFundRouteRecord
findByBizNoAndFundId
(
String
bizNo
,
String
fundId
)
{
String
key
=
FINISH_ROUTE_AID_FUND_KEY
+
bizNo
+
"_"
+
fundId
;
AidLoanFundRouteRecord
record
=
redisService
.
getEntity
(
key
);
if
(
record
==
null
)
{
record
=
iAidLoanFundRouteRecordRepository
.
findByBizNoAndFundId
(
bizNo
,
fundId
);
if
(
record
!=
null
)
{
redisService
.
setEntityEx
(
key
,
record
,
30
,
TimeUnit
.
MINUTES
);
}
}
return
record
;
}
@Override
public
AidLoanFundRouteRecord
updateAidLoanFundRouteRecordStatus
(
AidLoanFundRouteRecord
aidLoanFundRouteRecord
,
Integer
status
)
{
aidLoanFundRouteRecord
.
setAidFundRouteStatus
(
status
);
return
saveAidLoanFundRouteRecord
(
aidLoanFundRouteRecord
);
}
}
src/main/java/com/quantgroup/asset/distribution/service/funding/impl/AidFundRouteServiceImpl.java
View file @
02f55d66
...
...
@@ -2,14 +2,16 @@ package com.quantgroup.asset.distribution.service.funding.impl;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.base.Stopwatch
;
import
com.quantgroup.asset.distribution.constant.AidFundStatus
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.model.response.GlobalResponse
;
import
com.quantgroup.asset.distribution.service.funding.IAidFundRouteRecordService
;
import
com.quantgroup.asset.distribution.service.funding.IAidFundRouteService
;
import
com.quantgroup.asset.distribution.service.funding.IAidLoanFundConfigService
;
import
com.quantgroup.asset.distribution.service.funding.*
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundAuditOrder
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundConfig
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundRouteRecord
;
import
com.quantgroup.asset.distribution.service.jpa.entity.Asset
;
import
com.quantgroup.asset.distribution.service.jpa.repository.ICustomerTypeRuleConfigRepository
;
import
com.quantgroup.asset.distribution.service.niwodai.INiwodaiAssetService
;
import
com.quantgroup.asset.distribution.service.redis.IRedisService
;
import
com.quantgroup.asset.distribution.service.rule.IRuleService
;
import
com.quantgroup.asset.distribution.util.DateUtil
;
...
...
@@ -43,14 +45,16 @@ public class AidFundRouteServiceImpl implements IAidFundRouteService {
private
IAidFundRouteRecordService
iAidFundRouteRecordService
;
@Autowired
private
IRedisService
<
String
>
redisService
;
@Autowired
private
IRedisService
<
AssetForm
>
redisServiceAssetForm
;
private
IRedisService
<
AidLoanFundRouteRecord
>
redisRouteRecord
;
@Autowired
private
IRuleService
ruleService
;
@Autowired
private
ICustomerTypeRuleConfigRepository
iCustomerTypeRuleConfigRepository
;
@Autowired
private
IAidFundAssetService
aidFundAssetService
;
@Autowired
private
IAidFundAuditOrderService
aidFundAuditOrderService
;
/**
* 助贷资金路由
...
...
@@ -60,7 +64,7 @@ public class AidFundRouteServiceImpl implements IAidFundRouteService {
* @return
*/
@Override
public
GlobalResponse
aidFundRoute
(
AssetForm
assetForm
,
Integer
userLoanType
,
Map
<
String
,
Object
>
data
)
{
public
boolean
aidFundRoute
(
AssetForm
assetForm
,
Asset
asset
,
Map
<
String
,
Object
>
data
)
{
Stopwatch
started
=
Stopwatch
.
createStarted
();
...
...
@@ -97,29 +101,36 @@ public class AidFundRouteServiceImpl implements IAidFundRouteService {
for
(
AidLoanFundConfig
aidLoanFundConfig
:
aidLoanFundConfigSet
){
//此助贷资方如果已经被这笔订单路由过 就跳过
if
(
String
.
valueOf
(
aidLoanFundConfig
.
getFundId
())
.
equals
(
redisServiceAssetForm
.
getString
(
FINISH_ROUTE_AID_FUND_KEY
+
assetForm
.
getBizNo
())))
AidLoanFundRouteRecord
aidLoanFundRouteRecord
=
iAidFundRouteRecordService
.
findByBizNoAndFundId
(
assetForm
.
getBizNo
(),
aidLoanFundConfig
.
getFundId
());
int
status
=
aidLoanFundRouteRecord
==
null
?
-
1
:
aidLoanFundRouteRecord
.
getAidFundRouteStatus
().
intValue
();
if
(
status
==
AidFundStatus
.
Route
.
INCOMING_COMPLETE
||
status
==
AidFundStatus
.
Route
.
PRE_REJECT
)
{
// 进件完成和准入拒绝的直接跳过
continue
;
}
//助贷资金分配规则校验
if
(
ruleService
.
valid
(
aidLoanFundConfig
.
getFundRuleEl
(),
data
)){
//助贷资金准入接口调用
boolean
accessResult
=
false
;
//todo 调用真实的准入接口
//保存主贷资金路由记录
AidLoanFundRouteRecord
aidLoanFundRouteRecord
=
new
AidLoanFundRouteRecord
();
aidLoanFundRouteRecord
.
setAidFundRouteStatus
(
accessResult
?
1
:
2
);
//1-准入成功 2-准入失败 3-进件成功 4-进件失败
aidLoanFundRouteRecord
.
setAssetNo
(
assetForm
.
getAssetNo
());
aidLoanFundRouteRecord
.
setUuid
(
assetForm
.
getUuid
());
aidLoanFundRouteRecord
.
setBizChannel
(
assetForm
.
getBizChannel
());
aidLoanFundRouteRecord
.
setBizNo
(
assetForm
.
getBizNo
());
aidLoanFundRouteRecord
.
setFinanceProductType
(
Integer
.
parseInt
(
assetForm
.
getBizType
()));
aidLoanFundRouteRecord
.
setUserLoanType
(
userLoanType
);
aidLoanFundRouteRecord
.
setFundNo
(
aidLoanFundConfig
.
getFundNo
());
aidLoanFundRouteRecord
.
setFundId
(
aidLoanFundConfig
.
getFundId
());
aidLoanFundRouteRecord
.
setEnable
(
true
);
iAidFundRouteRecordService
.
saveAidLoanFundRouteRecord
(
aidLoanFundRouteRecord
);
log
.
info
(
"主贷资金路由-准入完成, bizChannel : {} , uuid : {} , bizNo : {} , fundId : {} , 准入结果: {} , 耗时 : {}"
,
assetForm
.
getBizChannel
(),
assetForm
.
getUuid
(),
assetForm
.
getBizNo
(),
aidLoanFundRouteRecord
.
getFundId
(),
accessResult
,
started
.
stop
().
elapsed
(
TimeUnit
.
MILLISECONDS
));
// 助贷资金准入接口调用
boolean
accessResult
=
false
;
if
(
status
==
AidFundStatus
.
Route
.
PRE_PASS
)
{
accessResult
=
true
;
}
else
{
accessResult
=
aidFundAssetService
.
preAudit
(
assetForm
,
aidLoanFundConfig
.
getFundId
());
// 保存主贷资金路由记录
aidLoanFundRouteRecord
=
new
AidLoanFundRouteRecord
();
aidLoanFundRouteRecord
.
setAidFundRouteStatus
(
accessResult
?
AidFundStatus
.
Route
.
PRE_PASS
:
AidFundStatus
.
Route
.
PRE_REJECT
);
//1-准入成功 2-准入失败 3-进件完成
aidLoanFundRouteRecord
.
setAssetNo
(
assetForm
.
getAssetNo
());
aidLoanFundRouteRecord
.
setUuid
(
assetForm
.
getUuid
());
aidLoanFundRouteRecord
.
setBizChannel
(
assetForm
.
getBizChannel
());
aidLoanFundRouteRecord
.
setBizNo
(
assetForm
.
getBizNo
());
aidLoanFundRouteRecord
.
setFinanceProductType
(
Integer
.
parseInt
(
assetForm
.
getBizType
()));
aidLoanFundRouteRecord
.
setUserLoanType
(
asset
.
getUserLoanType
());
aidLoanFundRouteRecord
.
setFundNo
(
aidLoanFundConfig
.
getFundNo
());
aidLoanFundRouteRecord
.
setFundId
(
aidLoanFundConfig
.
getFundId
());
aidLoanFundRouteRecord
.
setEnable
(
true
);
aidLoanFundRouteRecord
=
iAidFundRouteRecordService
.
saveAidLoanFundRouteRecord
(
aidLoanFundRouteRecord
);
log
.
info
(
"助贷资金路由-准入完成, bizChannel : {} , uuid : {} , bizNo : {} , fundId : {} , 准入结果 : {} , 耗时 : {}"
,
assetForm
.
getBizChannel
(),
assetForm
.
getUuid
(),
assetForm
.
getBizNo
(),
aidLoanFundRouteRecord
.
getFundId
(),
accessResult
,
started
.
elapsed
(
TimeUnit
.
MILLISECONDS
));
}
if
(
accessResult
){
//客户类别区分 1-自然流量 2-拒绝流量 留在这里 你我贷暂时不用 等以后要用时 随时可用
...
...
@@ -132,14 +143,52 @@ public class AidFundRouteServiceImpl implements IAidFundRouteService {
// }
// }
// }
//todo 调用助贷资方进件接口 异步
log
.
info
(
"主贷资金路由-进件完成, bizChannel : {} , uuid : {} , bizNo : {} , fundId : {} , 耗时 : {} "
,
assetForm
.
getBizChannel
(),
assetForm
.
getUuid
(),
assetForm
.
getBizNo
(),
aidLoanFundRouteRecord
.
getFundId
(),
started
.
stop
().
elapsed
(
TimeUnit
.
MILLISECONDS
));
return
GlobalResponse
.
success
();
// 先创建进件订单记录
AidLoanFundAuditOrder
aidLoanFundAuditOrder
=
createAidFundAuditOrder
(
aidLoanFundRouteRecord
,
assetForm
,
asset
,
data
);
// 调用助贷资方进件接口 异步
boolean
incomingResult
=
aidFundAssetService
.
audit
(
assetForm
,
data
,
asset
.
getUserLoanType
(),
aidLoanFundConfig
.
getFundId
());
// 将助贷路由记录状态改为进件完成
iAidFundRouteRecordService
.
updateAidLoanFundRouteRecordStatus
(
aidLoanFundRouteRecord
,
AidFundStatus
.
Route
.
INCOMING_COMPLETE
);
log
.
info
(
"助贷资金路由-进件完成, bizChannel : {} , uuid : {} , bizNo : {} , fundId : {} , 进件结果 : {}, 耗时 : {} "
,
assetForm
.
getBizChannel
(),
assetForm
.
getUuid
(),
assetForm
.
getBizNo
(),
aidLoanFundRouteRecord
.
getFundId
(),
incomingResult
,
started
.
stop
().
elapsed
(
TimeUnit
.
MILLISECONDS
));
if
(
incomingResult
)
{
aidFundAuditOrderService
.
updateOrderStatus
(
aidLoanFundAuditOrder
,
AidFundStatus
.
Incoming
.
WAIT
);
return
true
;
}
else
{
aidFundAuditOrderService
.
updateOrderStatus
(
aidLoanFundAuditOrder
,
AidFundStatus
.
Incoming
.
REJECT
);
}
}
}
}
}
return
GlobalResponse
.
error
(
"未匹配到助贷资金"
);
return
false
;
}
/**
* 创建资方审核订单
* @param aidLoanFundRouteRecord
* @param assetForm
* @param asset
* @param data
*/
private
AidLoanFundAuditOrder
createAidFundAuditOrder
(
AidLoanFundRouteRecord
aidLoanFundRouteRecord
,
AssetForm
assetForm
,
Asset
asset
,
Map
<
String
,
Object
>
data
)
{
AidLoanFundAuditOrder
aidLoanFundAuditOrder
=
aidFundAuditOrderService
.
findByBizNoAndFundId
(
assetForm
.
getBizNo
(),
aidLoanFundRouteRecord
.
getFundId
());
if
(
aidLoanFundAuditOrder
!=
null
)
{
log
.
info
(
"助贷资方审核订单已存在, 直接返回订单, uuid : {}, bizNo : {}, assetNo : {}, bizChannel : {}, orderStatus : {}"
,
assetForm
.
getUuid
(),
assetForm
.
getBizNo
(),
assetForm
.
getAssetNo
(),
assetForm
.
getBizChannel
(),
aidLoanFundAuditOrder
.
getAuditResult
());
return
aidLoanFundAuditOrder
;
}
aidLoanFundAuditOrder
=
new
AidLoanFundAuditOrder
();
aidLoanFundAuditOrder
.
setAssetNo
(
asset
.
getAssetNo
());
aidLoanFundAuditOrder
.
setFundNo
(
aidLoanFundRouteRecord
.
getFundNo
());
aidLoanFundAuditOrder
.
setUuid
(
assetForm
.
getUuid
());
aidLoanFundAuditOrder
.
setBizNo
(
assetForm
.
getBizNo
());
aidLoanFundAuditOrder
.
setFundId
(
aidLoanFundRouteRecord
.
getFundId
());
aidLoanFundAuditOrder
.
setAssetFormText
(
JSON
.
toJSONString
(
assetForm
));
aidLoanFundAuditOrder
.
setAssetText
(
JSON
.
toJSONString
(
asset
));
aidLoanFundAuditOrder
.
setDataText
(
JSON
.
toJSONString
(
data
));
aidLoanFundAuditOrder
.
setAuditResult
(
AidFundStatus
.
Incoming
.
PRE
);
aidLoanFundAuditOrder
.
setEnable
(
true
);
return
aidFundAuditOrderService
.
saveAidFundAuditOrder
(
aidLoanFundAuditOrder
);
}
}
src/main/java/com/quantgroup/asset/distribution/service/jpa/entity/AidLoanFundAuditOrder.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
jpa
.
entity
;
import
lombok.Data
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
/**
* @author : Hyuk
* @description : AidLoanFundAuditOrder
* @date : 2020/3/30 1:28 上午
*/
@Entity
@Table
(
name
=
"aid_loan_fund_audit_order"
)
@Data
public
class
AidLoanFundAuditOrder
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1L
;
@Id
@Column
(
name
=
"id"
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
@Column
(
name
=
"asset_no"
)
private
String
assetNo
;
@Column
(
name
=
"fund_no"
)
private
String
fundNo
;
@Column
(
name
=
"uuid"
)
private
String
uuid
;
@Column
(
name
=
"biz_no"
)
private
String
bizNo
;
@Column
(
name
=
"fund_id"
)
private
String
fundId
;
@Column
(
name
=
"asset_form_text"
)
private
String
assetFormText
;
@Column
(
name
=
"asset_text"
)
private
String
assetText
;
@Column
(
name
=
"data_text"
)
private
String
dataText
;
// 1-通过,2-拒绝,3-审核中
@Column
(
name
=
"audit_result"
)
private
Integer
auditResult
;
@Column
(
name
=
"audit_context"
)
private
String
auditContext
;
@Column
(
name
=
"enable"
)
private
Boolean
enable
;
@Column
(
name
=
"created_at"
)
private
Timestamp
createdAt
;
@Column
(
name
=
"updated_at"
)
private
Timestamp
updatedAt
;
@PrePersist
public
void
prePersist
()
{
Timestamp
timestamp
=
new
Timestamp
(
System
.
currentTimeMillis
());
createdAt
=
timestamp
;
updatedAt
=
timestamp
;
}
@PreUpdate
public
void
preUpdate
()
{
updatedAt
=
new
Timestamp
(
System
.
currentTimeMillis
());
}
}
src/main/java/com/quantgroup/asset/distribution/service/jpa/repository/IAidLoanFundAuditOrderRepository.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
jpa
.
repository
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundAuditOrder
;
import
org.springframework.data.jpa.repository.JpaRepository
;
/**
* @author : Hyuk
* @description : IAidLoanFundAuditOrderRepository
* @date : 2020/3/30 1:34 上午
*/
public
interface
IAidLoanFundAuditOrderRepository
extends
JpaRepository
<
AidLoanFundAuditOrder
,
Long
>
{
/**
* 根据三元素查找订单
* @param bizNo
* @param fundId
* @param auditResult
* @return
*/
public
AidLoanFundAuditOrder
findByBizNoAndFundIdAndEnableIsTrue
(
String
bizNo
,
String
fundId
);
}
src/main/java/com/quantgroup/asset/distribution/service/jpa/repository/IAidLoanFundRouteRecordRepository.java
View file @
02f55d66
...
...
@@ -13,5 +13,5 @@ public interface IAidLoanFundRouteRecordRepository extends JpaRepository<AidLoan
AidLoanFundRouteRecord
findByBizNoAndAidFundRouteStatus
(
String
bizNo
,
Integer
aidFundRouteStatus
);
AidLoanFundRouteRecord
findByBizNoAndFundId
(
String
bizNo
,
String
fundId
);
}
src/main/java/com/quantgroup/asset/distribution/service/niwodai/INiwodaiAssetService.java
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
niwodai
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.service.jpa.entity.Asset
;
import
com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiDataImportCheckResponseVO
;
import
com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiIncomingResponseVO
;
import
com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiIncomingResultResponseVO
;
...
...
@@ -11,9 +13,9 @@ public interface INiwodaiAssetService {
NiwodaiIncomingResultResponseVO
incomingResult
(
String
orderId
);
NiwodaiDataImportCheckResponseVO
dataCheck
(
String
uuid
);
NiwodaiDataImportCheckResponseVO
preAudit
(
String
uuid
);
NiwodaiIncomingResponseVO
incoming
(
String
uuid
,
String
orderId
,
String
amount
,
Integer
term
);
NiwodaiIncomingResponseVO
incoming
(
AssetForm
assetForm
,
Map
<
String
,
Object
>
data
,
Integer
userLoanType
);
Map
<
String
,
Object
>
queryUserBasic2Info
(
String
userId
,
String
phoneNo
,
boolean
isQuery
);
}
src/main/java/com/quantgroup/asset/distribution/service/niwodai/INiwodaiService.java
View file @
02f55d66
...
...
@@ -5,10 +5,9 @@ import com.quantgroup.asset.distribution.service.niwodai.vo.*;
public
interface
INiwodaiService
{
NiwodaiDataImportCheckResponseVO
dataImportCheck
(
NiwodaiDataImportCheckRequestVO
requestVO
);
NiwodaiDataImportCheckResponseVO
dataImportCheck
(
NiwodaiDataImportCheckRequestVO
requestVO
,
String
uuid
);
NiwodaiIncomingResponseVO
incoming
(
NiwodaiIncomingRequestVO
niwodaiIncomingRequestVO
,
String
uuid
);
NiwodaiIncomingResponseVO
incoming
(
NiwodaiIncomingRequestVO
niwodaiIncomingRequestVO
);
NiwodaiIncomingResultResponseVO
incoingResult
(
NiwodaiIncomingResultRequestVO
requestVO
);
NiwodaiIncomingResultResponseVO
incoingResult
(
NiwodaiIncomingResultRequestVO
requestVO
);
}
src/main/java/com/quantgroup/asset/distribution/service/niwodai/impl/NiwodaiAssetServiceImpl.java
View file @
02f55d66
...
...
@@ -6,16 +6,20 @@ import cn.quantgroup.user.IUserSdkService;
import
cn.quantgroup.user.UserSdkServiceFactory
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.common.base.Stopwatch
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
com.lkb.data.hbase.dataservice.verify.OCRIdCardDataService
;
import
com.lkb.data.hbase.row.verify.OCRIdCardRow
;
import
com.quantgroup.asset.distribution.enums.UserLoanType
;
import
com.quantgroup.asset.distribution.exception.QGException
;
import
com.quantgroup.asset.distribution.exception.QGExceptionType
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.service.httpclient.IHttpService
;
import
com.quantgroup.asset.distribution.service.niwodai.INiwodaiAssetService
;
import
com.quantgroup.asset.distribution.service.niwodai.INiwodaiService
;
import
com.quantgroup.asset.distribution.service.niwodai.vo.*
;
import
javafx.scene.paint.Stop
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -31,6 +35,7 @@ import java.math.BigDecimal;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
@Slf4j
@Service
...
...
@@ -64,54 +69,48 @@ public class NiwodaiAssetServiceImpl implements INiwodaiAssetService {
}
@Override
public
NiwodaiDataImportCheckResponseVO
dataCheck
(
String
uuid
)
{
public
NiwodaiDataImportCheckResponseVO
preAudit
(
String
uuid
)
{
NiwodaiDataImportCheckRequestVO
requestVO
=
new
NiwodaiDataImportCheckRequestVO
();
requestVO
.
setExternalUserId
(
uuid
);
UserSysResult
<
UserInfo
>
userInfoByUuid
=
userSdkService
.
findUserInfoByUuid
(
uuid
);
if
(!
userInfoByUuid
.
isSuccess
()){
log
.
error
(
"准入检查获取用户中心信息失败 uuid : {}"
,
uuid
);
throw
new
QGException
(
"获取用户中心信息失败"
,
QGExceptionType
.
COMMON_ILLEGAL_PARAM
);
log
.
error
(
"
你我贷
准入检查获取用户中心信息失败 uuid : {}"
,
uuid
);
throw
new
QGException
(
QGExceptionType
.
GET_USER_INFO_ERROR
);
}
requestVO
.
setPhone
(
userInfoByUuid
.
getData
().
getPhoneNo
());
List
<
OCRIdCardRow
>
list
=
OCRIdCardDataService
.
get
(
uuid
);
if
(
CollectionUtils
.
isEmpty
(
list
))
{
log
.
error
(
"准入检查获取用户OCR信息失败 uuid : {}"
,
uuid
);
throw
new
QGException
(
"没有相关用户信息"
,
QGExceptionType
.
COMMON_ILLEGAL_PARAM
);
}
OCRIdCardRow
ocrIdCardRow
=
list
.
get
(
0
);
IdCardA
idCardFront
=
JSON
.
parseObject
(
ocrIdCardRow
.
getIdCardContentA
(),
IdCardA
.
class
);
requestVO
.
setIdcardNumber
(
idCardFront
.
getCitizen_id
());
requestVO
.
setRealName
(
idCardFront
.
getName
());
return
niwodaiService
.
dataImportCheck
(
requestVO
);
requestVO
.
setPhone
(
getPhoneNoMask
(
userInfoByUuid
.
getData
().
getPhoneNo
()));
requestVO
.
setIdcardNumber
(
getIdNoMask
(
userInfoByUuid
.
getData
().
getIdNo
()));
requestVO
.
setRealName
(
userInfoByUuid
.
getData
().
getName
());
Stopwatch
stopwatch
=
Stopwatch
.
createStarted
();
NiwodaiDataImportCheckResponseVO
responseVO
=
niwodaiService
.
dataImportCheck
(
requestVO
,
uuid
);
log
.
info
(
"你我贷进件接口调用完成, uuid : {}, requestVo : {}, responseVo : {}, 耗时 : {}"
,
uuid
,
JSON
.
toJSONString
(
requestVO
),
JSON
.
toJSONString
(
responseVO
),
stopwatch
.
stop
().
elapsed
(
TimeUnit
.
SECONDS
));
return
responseVO
;
}
@Override
public
NiwodaiIncomingResponseVO
incoming
(
String
uuid
,
String
orderId
,
String
amount
,
Integer
term
)
{
List
<
OCRIdCardRow
>
list
=
OCRIdCardDataService
.
get
(
uuid
);
public
NiwodaiIncomingResponseVO
incoming
(
AssetForm
assetForm
,
Map
<
String
,
Object
>
data
,
Integer
userLoanType
)
{
List
<
OCRIdCardRow
>
list
=
OCRIdCardDataService
.
get
(
assetForm
.
getUuid
()
);
if
(
CollectionUtils
.
isEmpty
(
list
))
{
log
.
error
(
"
进件申请获取用户OCR信息失败 uuid : {}"
,
uuid
);
throw
new
QGException
(
"没有相关用户信息"
,
QGExceptionType
.
COMMON_ILLEGAL_PARAM
);
log
.
error
(
"
你我贷进件申请获取用户OCR信息失败 uuid : {}, orderId : {}"
,
assetForm
.
getUuid
(),
assetForm
.
getBizNo
()
);
throw
new
QGException
(
QGExceptionType
.
OCR_DATA_MISS
);
}
OCRIdCardRow
ocrIdCardRow
=
list
.
get
(
0
);
UserSysResult
<
UserInfo
>
userInfoByUuid
=
userSdkService
.
findUserInfoByUuid
(
uuid
);
UserSysResult
<
UserInfo
>
userInfoByUuid
=
userSdkService
.
findUserInfoByUuid
(
assetForm
.
getUuid
()
);
if
(!
userInfoByUuid
.
isSuccess
()){
log
.
error
(
"
进件申请获取用户中心信息失败 uuid : {}"
,
uuid
);
throw
new
QGException
(
"获取用户中心信息失败"
,
QGExceptionType
.
COMMON_ILLEGAL_PARAM
);
log
.
error
(
"
你我贷进件申请获取用户中心信息失败, uuid : {}, orderId : {}"
,
assetForm
.
getUuid
(),
assetForm
.
getBizNo
()
);
throw
new
QGException
(
QGExceptionType
.
GET_USER_INFO_ERROR
);
}
IdCardA
idCardFront
=
JSON
.
parseObject
(
ocrIdCardRow
.
getIdCardContentA
(),
IdCardA
.
class
);
IdCardB
idCardBack
=
JSON
.
parseObject
(
ocrIdCardRow
.
getIdCardContentB
(),
IdCardB
.
class
);
Map
<
String
,
Object
>
infoMap
=
queryUserBasic2Info
(
uuid
,
userInfoByUuid
.
getData
().
getPhoneNo
(),
true
);
Map
<
String
,
Object
>
infoMap
=
(
Map
<
String
,
Object
>)
queryUserBasic2Info
(
assetForm
.
getUuid
(),
userInfoByUuid
.
getData
().
getPhoneNo
(),
true
).
get
(
"info"
);
NiwodaiIncomingRequestVO
vo
=
new
NiwodaiIncomingRequestVO
();
vo
.
setOrderId
(
orderId
);
vo
.
setOrderId
(
assetForm
.
getBizNo
()
);
NiwodaiCostant
.
UserInfo
userInfo
=
new
NiwodaiCostant
.
UserInfo
();
userInfo
.
setRealName
(
idCardFront
.
getName
());
userInfo
.
setIdcardNumber
(
idCardFront
.
getCitizen_id
());
userInfo
.
setIdcardNumber
(
idCardFront
.
getCitizen_id
()
.
replaceAll
(
"x"
,
"X"
)
);
userInfo
.
setPhone
(
userInfoByUuid
.
getData
().
getPhoneNo
());
userInfo
.
setMaritalStatus
(
conversMarryStatus
((
String
)
infoMap
.
get
(
"marryStatus"
)).
name
());
userInfo
.
setGender
(
"男"
.
equals
(
idCardFront
.
getGender
())
?
NiwodaiCostant
.
Gender
.
MALE
.
name
()
:
NiwodaiCostant
.
Gender
.
FEMALE
.
name
());
userInfo
.
setEducation
(
conversEducation
((
String
)
infoMap
.
get
(
"education"
)).
name
());
// TODO 职业
userInfo
.
setOccupation
(
conversOccupation
((
String
)
infoMap
.
get
(
"vocation"
)).
name
());
userInfo
.
setIdcardValidity
(
idCardBack
.
getValid_date_begin
()
+
"-"
+
idCardBack
.
getValid_date_end
());
userInfo
.
setIdcardFront
(
ocrIdCardRow
.
getIdCardBaseContentA
());
...
...
@@ -122,17 +121,16 @@ public class NiwodaiAssetServiceImpl implements INiwodaiAssetService {
userInfo
.
setCity
((
String
)
infoMap
.
get
(
"city"
));
userInfo
.
setDistrict
((
String
)
infoMap
.
get
(
"district"
));
userInfo
.
setAddress
(
idCardFront
.
getAddress
());
// TODO 行业,不给随机值
userInfo
.
setIndustry
(
random
(
NiwodaiCostant
.
Industry
.
values
()).
name
());
userInfo
.
setIndustry
(
conversIndustry
((
String
)
infoMap
.
get
(
"vocation"
)).
name
());
userInfo
.
setIncome
(
conversIncome
((
String
)
infoMap
.
get
(
"salary"
)).
name
());
userInfo
.
setIncomeType
(
random
(
NiwodaiCostant
.
IncomeType
.
values
()).
name
());
//
userInfo.setIncomeType(random(NiwodaiCostant.IncomeType.values()).name());
userInfo
.
setDebt
(
NiwodaiCostant
.
Debt
.
ZERO
.
name
());
vo
.
setUserInfo
(
userInfo
);
// TODO 从哪取需要确认, 借款金额12000,期数12,贷款用途 日常消费 写死
NiwodaiCostant
.
LoanInfo
loanInfo
=
new
NiwodaiCostant
.
LoanInfo
();
loanInfo
.
setAmount
(
new
BigDecimal
(
amount
));
loanInfo
.
setTerm
(
term
);
loanInfo
.
setPurpose
(
random
(
NiwodaiCostant
.
Purpose
.
values
()).
name
());
// 写死
loanInfo
.
setAmount
(
new
BigDecimal
(
12000
));
loanInfo
.
setTerm
(
12
);
loanInfo
.
setPurpose
(
NiwodaiCostant
.
Purpose
.
CONSUMPTION
.
name
());
vo
.
setLoanInfo
(
loanInfo
);
NiwodaiCostant
.
Contacts
contacts
=
new
NiwodaiCostant
.
Contacts
();
contacts
.
setNameA
((
String
)
infoMap
.
get
(
"firstName"
));
...
...
@@ -143,26 +141,17 @@ public class NiwodaiAssetServiceImpl implements INiwodaiAssetService {
contacts
.
setRelationshipB
(
conversRelationship
((
String
)
infoMap
.
get
(
"secondRelation"
)).
name
());
vo
.
setContacts
(
contacts
);
NiwodaiCostant
.
CompnayInfo
compnayInfo
=
new
NiwodaiCostant
.
CompnayInfo
();
compnayInfo
.
setName
(
random
CompanyName
(
));
compnayInfo
.
setAddress
(
userInfo
.
getProvince
()
+
userInfo
.
getCity
()+
compnayInfo
.
getName
());
compnayInfo
.
setName
(
random
(
NiwodaiCostant
.
COMPANY_NAMES
));
compnayInfo
.
setAddress
(
userInfo
.
getProvince
()
+
userInfo
.
getCity
()
+
compnayInfo
.
getName
());
compnayInfo
.
setCity
(
userInfo
.
getCity
());
compnayInfo
.
setProvince
(
userInfo
.
getProvince
());
vo
.
setCompanyInfo
(
compnayInfo
);
vo
.
setMnoData
(
new
NiwodaiCostant
.
MnoData
());
return
niwodaiService
.
incoming
(
vo
);
vo
.
setChannelRiskData
(
getUserTag
(
userLoanType
,
data
));
return
niwodaiService
.
incoming
(
vo
,
assetForm
.
getUuid
());
}
// TODO 工作单位名称(对方给几个固定的工作单位名称)
//
//工作单位地址(需要加身份证上的省市+工作单位名称)
//
//负债情况(传“0”)
private
static
String
randomCompanyName
(){
int
index
=
(
int
)
(
Math
.
random
()
*
companyNames
.
length
);
return
companyNames
[
index
];
}
private
static
<
T
>
T
random
(
T
[]
objects
){
int
index
=
(
int
)
(
Math
.
random
()
*
objects
.
length
);
return
objects
[
index
];
...
...
@@ -319,22 +308,39 @@ public class NiwodaiAssetServiceImpl implements INiwodaiAssetService {
}
}
private
static
NiwodaiCostant
.
Industry
conversIndustry
(
String
occupation
)
{
switch
(
occupation
)
{
case
(
"工人"
)
:
return
NiwodaiCostant
.
Industry
.
AGRICULTURE
;
case
(
"教师"
)
:
return
NiwodaiCostant
.
Industry
.
EDUCATION
;
case
(
"白领"
)
:
return
NiwodaiCostant
.
Industry
.
INFORMATION_TECHNOLOGY_SERVICES
;
case
(
"学生"
)
:
return
NiwodaiCostant
.
Industry
.
EDUCATION
;
case
(
"创业者"
)
:
return
NiwodaiCostant
.
Industry
.
TECHNOLOGICAL_SERVICES
;
case
(
"个体户"
)
:
return
NiwodaiCostant
.
Industry
.
RETAIL
;
case
(
"公司职员"
)
:
return
NiwodaiCostant
.
Industry
.
FINANCE
;
case
(
"企业法人"
)
:
return
NiwodaiCostant
.
Industry
.
ESTATE
;
case
(
"网店店主"
)
:
return
NiwodaiCostant
.
Industry
.
ENTERTAINMENT
;
case
(
"暂无职业"
)
:
case
(
"其他"
)
:
default
:
return
NiwodaiCostant
.
Industry
.
UNKNOWN
;
}
}
private
static
NiwodaiCostant
.
Occupation
conversOccupation
(
String
occupation
){
switch
(
occupation
){
case
(
"工人"
)
:
case
(
"公司职员"
)
:
case
(
"白领"
)
:
case
(
"教师"
)
:
case
(
"白领"
)
:
case
(
"公司职员"
)
:
return
NiwodaiCostant
.
Occupation
.
WORKER
;
case
(
"学生"
)
:
return
NiwodaiCostant
.
Occupation
.
STUDENT
;
case
(
"创业者"
)
:
return
NiwodaiCostant
.
Occupation
.
PROFESSIONAL
;
case
(
"创业者"
)
:
case
(
"企业法人"
)
:
return
NiwodaiCostant
.
Occupation
.
PRIVATE_OWNERS
;
case
(
"个体户"
)
:
return
NiwodaiCostant
.
Occupation
.
BUSINESSMEN
;
case
(
"网店店主"
)
:
return
NiwodaiCostant
.
Occupation
.
PRIVATE_OWNERS
;
case
(
"企业法人"
)
:
return
NiwodaiCostant
.
Occupation
.
BUSINESSMEN
;
case
(
"其他"
)
:
return
NiwodaiCostant
.
Occupation
.
PROFESSIONAL
;
case
(
"暂无职业"
)
:
case
(
"其他"
)
:
default
:
return
NiwodaiCostant
.
Occupation
.
BE_UNEMPLOYED
;
default
:
return
NiwodaiCostant
.
Occupation
.
BE_UNEMPLOYED
;
}
}
private
static
NiwodaiCostant
.
EducationalBackground
conversEducation
(
String
education
){
...
...
@@ -391,5 +397,42 @@ public class NiwodaiAssetServiceImpl implements INiwodaiAssetService {
}
}
/**
* 获取手机号掩码,后4位掩码
* @param phoneNo
* @return
*/
private
static
String
getPhoneNoMask
(
String
phoneNo
)
{
// if (StringUtils.isEmpty(phoneNo)) { throw new QGException(QGExceptionType.USER_PHONE_NO_EMPTY); }
// return phoneNo.substring(0, phoneNo.length() - 4) + "****";
return
phoneNo
;
}
/**
* 身份证号掩码,后5位掩码
* @param idNo
* @return
*/
private
static
String
getIdNoMask
(
String
idNo
)
{
// if (StringUtils.isEmpty(idNo)) { throw new QGException(QGExceptionType.USER_ID_NO_EMPTY); }
// return idNo.substring(0, idNo.length() - 5) + "*****";
return
idNo
;
}
/**
* 获取用户标签
* @param data
* @return
*/
private
Integer
getUserTag
(
int
userLoanType
,
Map
<
String
,
Object
>
data
)
{
if
(
userLoanType
==
UserLoanType
.
FIRST_APPLY
.
getCode
()
||
userLoanType
==
UserLoanType
.
RE_APPLY
.
getCode
())
{
return
NiwodaiCostant
.
Tag
.
NATURE
;
}
else
{
if
(
data
.
get
(
"model_exec_data_source#xinyan_v5"
)
!=
null
&&
data
.
get
(
"third_data_source#tencent_md5_risk_new_riskScore"
)
!=
null
)
{
return
NiwodaiCostant
.
Tag
.
REJECT
;
}
else
{
return
NiwodaiCostant
.
Tag
.
NATURE
;
}
}
}
}
src/main/java/com/quantgroup/asset/distribution/service/niwodai/impl/NiwodaiServiceImpl.java
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
niwodai
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.common.collect.Maps
;
import
com.quantgroup.asset.distribution.constant.RedisKeyConstants
;
import
com.quantgroup.asset.distribution.exception.QGException
;
import
com.quantgroup.asset.distribution.exception.QGExceptionType
;
import
com.quantgroup.asset.distribution.service.httpclient.IHttpService
;
import
com.quantgroup.asset.distribution.service.niwodai.INiwodaiService
;
import
com.quantgroup.asset.distribution.service.niwodai.vo.*
;
...
...
@@ -18,9 +20,6 @@ import java.util.Base64;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
import
static
com
.
quantgroup
.
asset
.
distribution
.
exception
.
QGExceptionType
.
COMMON_THIRD_PARTY_TIMEOUT
;
@Slf4j
@Service
public
class
NiwodaiServiceImpl
implements
INiwodaiService
{
...
...
@@ -46,49 +45,58 @@ public class NiwodaiServiceImpl implements INiwodaiService {
IHttpService
iHttpService
;
@Override
public
NiwodaiDataImportCheckResponseVO
dataImportCheck
(
NiwodaiDataImportCheckRequestVO
requestVO
)
{
// TODO 用户三要素打掩码,http://confluence.quantgroup.cn/pages/viewpage.action?pageId=20562643, 撞库方式
public
NiwodaiDataImportCheckResponseVO
dataImportCheck
(
NiwodaiDataImportCheckRequestVO
requestVO
,
String
uuid
)
{
String
token
=
getToken
();
if
(
StringUtils
.
isEmpty
(
token
))
{
log
.
error
(
"你我贷准入检查时获取token失败,
requestVO : {}"
,
JSON
.
toJSONString
(
requestVO
)
);
throw
new
QGException
(
"你我贷准入检查时获取token失败"
,
COMMON_THIRD_PARTY_TIMEOUT
);
log
.
error
(
"你我贷准入检查时获取token失败,
uuid : {}"
,
uuid
);
throw
new
QGException
(
QGExceptionType
.
GET_NIWODAI_TOKEN_ERROR
);
}
String
result
=
iHttpService
.
postNiwodaiJson
(
domain2
+
dataImportCheckUrl
,
commonHeader
(
token
),
JSON
.
toJSONString
(
requestVO
),
true
);
String
result
=
iHttpService
.
postNiwodaiJson
(
domain2
+
dataImportCheckUrl
,
commonHeader
(
token
),
JSON
.
toJSONString
(
requestVO
),
false
);
log
.
info
(
"你我贷准入检查接口调用结束, uuid : {}, requestVo : {}, response : {}"
,
uuid
,
JSON
.
toJSONString
(
requestVO
),
result
);
if
(
StringUtils
.
isNotEmpty
(
result
))
{
return
JSON
.
parseObject
(
result
,
NiwodaiDataImportCheckResponseVO
.
class
);
NiwodaiDataImportCheckResponseVO
vo
=
JSON
.
parseObject
(
result
,
NiwodaiDataImportCheckResponseVO
.
class
);
if
(
vo
!=
null
&&
vo
.
getPass
()
!=
null
)
{
return
JSON
.
parseObject
(
result
,
NiwodaiDataImportCheckResponseVO
.
class
);
}
}
return
null
;
throw
new
QGException
(
QGExceptionType
.
NIWODAI_PRE_AUDIT_RESULAT_ERROR
,
result
)
;
}
@Override
public
NiwodaiIncomingResponseVO
incoming
(
NiwodaiIncomingRequestVO
requestVO
)
{
public
NiwodaiIncomingResponseVO
incoming
(
NiwodaiIncomingRequestVO
requestVO
,
String
uuid
)
{
String
token
=
getToken
();
if
(
StringUtils
.
isEmpty
(
token
))
{
log
.
error
(
"你我贷进件时获取token失败,
requestVO : {}"
,
JSON
.
toJSONString
(
requestVO
));
throw
new
QGException
(
"你我贷进件时获取token失败"
,
COMMON_THIRD_PARTY_TIMEOUT
);
log
.
error
(
"你我贷进件时获取token失败,
uuid : {}, bizNo : {}"
,
uuid
,
requestVO
.
getOrderId
(
));
throw
new
QGException
(
QGExceptionType
.
GET_NIWODAI_TOKEN_ERROR
);
}
String
result
=
iHttpService
.
postNiwodaiJson
(
domain2
+
incomingUrl
,
commonHeader
(
token
),
JSON
.
toJSONString
(
requestVO
),
true
);
String
result
=
iHttpService
.
postNiwodaiJson
(
domain2
+
incomingUrl
,
commonHeader
(
token
),
JSON
.
toJSONString
(
requestVO
),
false
);
log
.
info
(
"你我贷进件接口审核接口结束, uuid : {}, bizNo : {}, response : {}"
,
uuid
,
requestVO
.
getOrderId
(),
result
);
if
(
StringUtils
.
isNotEmpty
(
result
))
{
return
JSON
.
parseObject
(
result
,
NiwodaiIncomingResponseVO
.
class
);
NiwodaiIncomingResponseVO
vo
=
JSON
.
parseObject
(
result
,
NiwodaiIncomingResponseVO
.
class
);
if
(
vo
!=
null
&&
vo
.
getCode
()
!=
null
)
{
return
vo
;
}
}
return
null
;
throw
new
QGException
(
QGExceptionType
.
NIWODAI_INCOMING_RESULT_ERROR
)
;
}
@Override
public
NiwodaiIncomingResultResponseVO
incoingResult
(
NiwodaiIncomingResultRequestVO
requestVO
){
String
token
=
getToken
();
if
(
StringUtils
.
isEmpty
(
token
))
{
log
.
error
(
"你我贷获取进件结果时获取token失败,requestVO : {}"
,
JSON
.
toJSONString
(
requestVO
));
throw
new
QGException
(
"你我贷获取进件结果时获取token失败"
,
COMMON_THIRD_PARTY_TIMEOUT
);
log
.
error
(
"你我贷获取进件结果时获取token失败,
requestVO : {}"
,
JSON
.
toJSONString
(
requestVO
));
throw
new
QGException
(
QGExceptionType
.
GET_NIWODAI_TOKEN_ERROR
);
}
String
result
=
iHttpService
.
postNiwodaiJson
(
domain2
+
getIncomingResult
,
commonHeader
(
token
),
JSON
.
toJSONString
(
requestVO
),
true
);
if
(
StringUtils
.
isNotEmpty
(
result
)){
return
JSON
.
parseObject
(
result
,
NiwodaiIncomingResultResponseVO
.
class
);
NiwodaiIncomingResultResponseVO
vo
=
JSON
.
parseObject
(
result
,
NiwodaiIncomingResultResponseVO
.
class
);
if
(
vo
!=
null
&&
vo
.
getCode
()
!=
null
)
{
return
vo
;
}
}
return
null
;
throw
new
QGException
(
QGExceptionType
.
NIWODAI_INCOMING_AUDIT_RESULT_ERROR
)
;
}
public
String
getToken
()
{
String
token
=
iRedisService
.
getString
(
RedisKeyConstants
.
NI_WO_DAI_TOKEN_KEY
);
if
(
StringUtils
.
isBlank
(
token
))
{
...
...
src/main/java/com/quantgroup/asset/distribution/service/niwodai/vo/NiwodaiCostant.java
View file @
02f55d66
...
...
@@ -5,6 +5,10 @@ import lombok.Data;
import
java.math.BigDecimal
;
public
class
NiwodaiCostant
{
// 你我贷审核期数固定为12期
public
static
final
String
AUDIT_TERM
=
"12"
;
@Data
public
static
class
UserInfo
{
/**
...
...
@@ -642,4 +646,21 @@ public class NiwodaiCostant {
UNKNOWN
;
}
/**
* 公司名称固定几个
*/
public
static
final
String
[]
COMPANY_NAMES
=
{
"外企人力资源公司"
,
"中智人力资源公司"
,
"新绿人力资源公司"
,
"东浩人力资源公司"
};
public
static
class
Tag
{
/**
* 自然流量标签
*/
public
static
final
Integer
NATURE
=
1
;
/**
* 拒绝流量标签
*/
public
static
final
Integer
REJECT
=
2
;
}
}
src/main/java/com/quantgroup/asset/distribution/service/niwodai/vo/NiwodaiIncomingRequestVO.java
View file @
02f55d66
...
...
@@ -48,6 +48,12 @@ public class NiwodaiIncomingRequestVO implements Serializable {
*/
private
NiwodaiCostant
.
CreditRefData
creditRefData
;
/**
* 渠道风控信息,用与联合建模
* 1-自然流量,2-拒绝流量
*/
private
Integer
channelRiskData
;
public
Map
<
String
,
Object
>
toMap
(){
return
JSONObject
.
parseObject
(
JSON
.
toJSONString
(
this
));
}
...
...
src/main/java/com/quantgroup/asset/distribution/service/niwodai/vo/NiwodaiIncomingResultResponseVO.java
View file @
02f55d66
...
...
@@ -32,5 +32,5 @@ public class NiwodaiIncomingResultResponseVO implements Serializable {
/**
* 额度有效期
*/
private
Date
validBefore
;
private
String
validBefore
;
}
src/main/java/com/quantgroup/asset/distribution/service/product/IFinanceProductService.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
product
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
/**
* @author : Hyuk
* @description : IFinanceProductService
* @date : 2020/3/30 5:10 下午
*/
public
interface
IFinanceProductService
{
/**
* 创建单个资方金融产品集
* @param amount
* @param term
* @param fundId
* @return
*/
public
String
createSingletonFinanceProduct
(
String
amount
,
String
term
,
String
fundId
,
String
fundProId
);
/**
* 结果处理
* @param assetForm
* @param hitFinanceProduct
* @return
*/
public
AssetForm
checkFundResult
(
AssetForm
assetForm
,
String
hitFinanceProduct
,
Long
deadLine
);
public
AssetForm
checkFundResult
(
AssetForm
assetForm
,
String
hitFinanceProduct
);
}
src/main/java/com/quantgroup/asset/distribution/service/product/impl/FinanceProductServiceImpl.java
0 → 100644
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
product
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.quantgroup.asset.distribution.enums.ExecuteType
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.service.product.IFinanceProductHitLogService
;
import
com.quantgroup.asset.distribution.service.product.IFinanceProductService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @author : Hyuk
* @description : FInanceProdcutServiceIMpl
* @date : 2020/3/30 5:11 下午
*/
@Slf4j
@Service
public
class
FinanceProductServiceImpl
implements
IFinanceProductService
{
@Autowired
private
IFinanceProductHitLogService
financeProductHitLogService
;
@Override
public
String
createSingletonFinanceProduct
(
String
amount
,
String
term
,
String
fundId
,
String
fundProId
)
{
JSONArray
fundArray
=
createSingletonFundArr
(
fundId
,
null
);
JSONArray
financeProductArray
=
new
JSONArray
();
JSONObject
amountJSON
=
new
JSONObject
();
financeProductArray
.
add
(
amountJSON
);
amountJSON
.
put
(
"min"
,
amount
);
amountJSON
.
put
(
"max"
,
amount
);
JSONArray
termArray
=
new
JSONArray
();
amountJSON
.
put
(
"terms"
,
termArray
);
JSONObject
termJSON
=
new
JSONObject
();
termArray
.
add
(
termJSON
);
try
{
// 不能是string,否则资方那边会报错
termJSON
.
put
(
"term"
,
Integer
.
parseInt
(
term
));
}
catch
(
Exception
e
)
{
termJSON
.
put
(
"term"
,
Double
.
parseDouble
(
term
));
}
termJSON
.
put
(
"fundInfo"
,
fundArray
);
return
JSON
.
toJSONString
(
financeProductArray
);
}
@Override
public
AssetForm
checkFundResult
(
AssetForm
assetForm
,
String
hitFinanceProduct
,
Long
deadLine
)
{
if
(
hitFinanceProduct
==
null
)
{
if
(
"false"
.
equals
(
assetForm
.
getAuditResult
()))
{
// 把传过来的额度和期数处理为null
assetForm
.
setAmount
(
null
);
assetForm
.
setTerm
(
null
);
}
return
assetForm
;
}
// 金融产品集替换
String
oldFinanceProduct
=
assetForm
.
getFinanceProducts
();
assetForm
.
setFinanceProducts
(
hitFinanceProduct
);
// 审核结果替换
String
oldAuditResult
=
assetForm
.
getAuditResult
();
if
(
"false"
.
equals
(
oldAuditResult
))
{
assetForm
.
setAuditResult
(
"true"
);
}
// 截止时间替换
if
(
deadLine
!=
null
)
{
assetForm
.
setDeadLine
(
String
.
valueOf
(
deadLine
));
}
// 保存日志
financeProductHitLogService
.
saveLog
(
assetForm
,
oldFinanceProduct
,
hitFinanceProduct
,
oldAuditResult
,
assetForm
.
getAuditResult
(),
ExecuteType
.
ONLINE
);
log
.
info
(
"资方命中后,审核最终结果, assetForm : {}"
,
JSON
.
toJSONString
(
assetForm
));
return
assetForm
;
}
@Override
public
AssetForm
checkFundResult
(
AssetForm
assetForm
,
String
hitFinanceProduct
)
{
return
checkFundResult
(
assetForm
,
hitFinanceProduct
,
null
);
}
private
JSONArray
createSingletonFundArr
(
String
fundId
,
String
fundProductId
)
{
JSONArray
fundArray
=
new
JSONArray
();
JSONObject
fundInfoJSON
=
new
JSONObject
();
fundInfoJSON
.
put
(
"fundId"
,
fundId
);
fundInfoJSON
.
put
(
"fundProductId"
,
fundProductId
);
fundInfoJSON
.
put
(
"priority"
,
1
);
fundInfoJSON
.
put
(
"feeType"
,
1
);
fundInfoJSON
.
put
(
"rateType"
,
1
);
fundInfoJSON
.
put
(
"rate"
,
0
);
fundArray
.
add
(
fundInfoJSON
);
return
fundArray
;
}
}
src/main/java/com/quantgroup/asset/distribution/util/DateUtil.java
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
util
;
import
java.sql.Timestamp
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
...
...
@@ -27,4 +28,14 @@ public class DateUtil {
public
static
String
getCurDateTime
()
{
return
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
LocalDateTime
.
now
());
}
/**
* 将时间类型字符串转换为Long类型
* @param dateTime
* @param pattern
* @return
*/
public
static
Long
transStringToLong
(
String
dateTime
,
String
pattern
)
{
return
Timestamp
.
valueOf
(
LocalDateTime
.
parse
(
dateTime
,
DateTimeFormatter
.
ofPattern
(
pattern
))).
getTime
();
}
}
src/main/resources/logback-qa.xml
View file @
02f55d66
...
...
@@ -7,10 +7,10 @@
value=
"${FILE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} --- [%thread] [%file:%line] %logger - %msg%n}"
/>
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<file>
/vpants/shaun/asset-distribution-9051/logs/
rule-engine
.log
</file>
<file>
/vpants/shaun/asset-distribution-9051/logs/
asset-distribution
.log
</file>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<fileNamePattern>
/vpants/shaun/asset-distribution-9051/logs/
rule-engine
.log.%d{yyyy-MM-dd}
/vpants/shaun/asset-distribution-9051/logs/
asset-distribution
.log.%d{yyyy-MM-dd}
</fileNamePattern>
<maxHistory>
7
</maxHistory>
</rollingPolicy>
...
...
src/test/java/com/quantgroup/asset/distribution/niwodai/NiwodaiTest.java
View file @
02f55d66
package
com
.
quantgroup
.
asset
.
distribution
.
niwodai
;
import
cn.quantgroup.user.IUserSdkService
;
import
cn.quantgroup.user.UserSdkServiceFactory
;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.base.Stopwatch
;
import
com.quantgroup.asset.distribution.AssetDistributionBootstrap
;
import
com.quantgroup.asset.distribution.service.funding.IAidFundRouteRecordService
;
import
com.quantgroup.asset.distribution.service.jpa.entity.AidLoanFundRouteRecord
;
import
com.quantgroup.asset.distribution.service.niwodai.INiwodaiAssetService
;
import
com.quantgroup.asset.distribution.service.niwodai.INiwodaiService
;
import
com.quantgroup.asset.distribution.service.niwodai.vo.*
;
import
com.quantgroup.asset.distribution.service.redis.IRedisService
;
import
com.quantgroup.asset.distribution.util.GZIPUtils
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
javax.annotation.PostConstruct
;
import
java.math.BigDecimal
;
import
java.util.concurrent.TimeUnit
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
(
classes
=
AssetDistributionBootstrap
.
class
)
...
...
@@ -22,6 +33,21 @@ public class NiwodaiTest {
private
INiwodaiService
niwodaiService
;
@Autowired
private
INiwodaiAssetService
niwodaiAssetService
;
@Autowired
private
IAidFundRouteRecordService
aidFundRouteRecordService
;
@Autowired
private
IRedisService
<
AidLoanFundRouteRecord
>
redisService
;
@Autowired
@Qualifier
(
"httpClient"
)
private
CloseableHttpClient
httpClient
;
@Value
(
"${user.sdk.url}"
)
private
String
userSysUrl
;
private
IUserSdkService
userSdkService
;
@PostConstruct
public
void
init
()
{
userSdkService
=
UserSdkServiceFactory
.
generateSDKService
(
userSysUrl
,
httpClient
);
}
@Test
public
void
testCheck
()
throws
Exception
{
...
...
@@ -31,7 +57,7 @@ public class NiwodaiTest {
vo
.
setIdcardNumber
(
"130723199304300031"
);
vo
.
setRealName
(
"郑健"
);
vo
.
setPhone
(
"18631397042"
);
NiwodaiDataImportCheckResponseVO
responseVO
=
niwodaiService
.
dataImportCheck
(
vo
);
NiwodaiDataImportCheckResponseVO
responseVO
=
niwodaiService
.
dataImportCheck
(
vo
,
""
);
//todo 传入错误身份证号返回400 确认是否正确
System
.
out
.
println
(
JSON
.
toJSONString
(
responseVO
));
}
...
...
@@ -88,8 +114,33 @@ public class NiwodaiTest {
vo
.
setCompanyInfo
(
compnayInfo
);
NiwodaiCostant
.
MnoData
mnoData
=
new
NiwodaiCostant
.
MnoData
();
vo
.
setMnoData
(
mnoData
);
NiwodaiIncomingResponseVO
responseVO
=
niwodaiService
.
incoming
(
vo
);
NiwodaiIncomingResponseVO
responseVO
=
niwodaiService
.
incoming
(
vo
,
""
);
System
.
out
.
println
(
JSON
.
toJSONString
(
responseVO
));
}
@Test
public
void
testRedis
()
{
String
bizNo
=
"427114368038989811"
;
String
fundId
=
"240"
;
AidLoanFundRouteRecord
record
=
aidFundRouteRecordService
.
findByBizNoAndFundId
(
bizNo
,
fundId
);
redisService
.
setEntityEx
(
"testestst"
,
record
,
5
,
TimeUnit
.
MINUTES
);
AidLoanFundRouteRecord
record1
=
redisService
.
getEntity
(
"testestst"
);
aidFundRouteRecordService
.
updateAidLoanFundRouteRecordStatus
(
record1
,
3
);
System
.
out
.
println
(
"完成"
);
}
@Test
public
void
testResult
()
{
// String bizNo = "AN00000013443572551716033";
// System.out.println(niwodaiAssetService.incomingResult(bizNo));
System
.
out
.
println
(
JSON
.
toJSONString
(
userSdkService
.
findUserInfoByUuid
(
"c5e485e2-8cfc-4d65-b090-47d96e4fca41"
).
getData
()));
}
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
Stopwatch
stopwatch
=
Stopwatch
.
createStarted
();
System
.
out
.
println
(
stopwatch
.
elapsed
(
TimeUnit
.
MILLISECONDS
));
TimeUnit
.
SECONDS
.
sleep
(
10
);
System
.
out
.
println
(
stopwatch
.
stop
().
elapsed
(
TimeUnit
.
MILLISECONDS
));
}
}
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