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
0c5d8d94
Commit
0c5d8d94
authored
Dec 27, 2019
by
liwenbin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
14f71cb0
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
122 additions
and
19 deletions
+122
-19
ExecuteType.java
.../com/quantgroup/asset/distribution/enums/ExecuteType.java
+18
-0
AssetForm.java
...m/quantgroup/asset/distribution/model/form/AssetForm.java
+2
-0
AssetServiceImpl.java
...set/distribution/service/asset/impl/AssetServiceImpl.java
+84
-17
FinanceProductHitLog.java
...distribution/service/jpa/entity/FinanceProductHitLog.java
+9
-0
IFinanceProductHitLogService.java
...ibution/service/product/IFinanceProductHitLogService.java
+3
-1
FinanceProductHitLogServiceImpl.java
...service/product/impl/FinanceProductHitLogServiceImpl.java
+6
-1
No files found.
src/main/java/com/quantgroup/asset/distribution/enums/ExecuteType.java
0 → 100644
View file @
0c5d8d94
package
com
.
quantgroup
.
asset
.
distribution
.
enums
;
import
lombok.Getter
;
public
enum
ExecuteType
{
TEST
(
0
,
"测试"
),
ONLINE
(
1
,
"线上"
);
@Getter
private
int
code
;
@Getter
private
String
description
;
ExecuteType
(
int
code
,
String
description
)
{
this
.
code
=
code
;
this
.
description
=
description
;
}
}
src/main/java/com/quantgroup/asset/distribution/model/form/AssetForm.java
View file @
0c5d8d94
...
@@ -49,6 +49,8 @@ public class AssetForm implements Serializable{
...
@@ -49,6 +49,8 @@ public class AssetForm implements Serializable{
private
int
repeatCount
=
0
;
private
int
repeatCount
=
0
;
private
String
refuseReason
;
public
Asset
transToAsset
()
{
public
Asset
transToAsset
()
{
Asset
asset
=
new
Asset
();
Asset
asset
=
new
Asset
();
asset
.
setAssetNo
(
this
.
assetNo
);
asset
.
setAssetNo
(
this
.
assetNo
);
...
...
src/main/java/com/quantgroup/asset/distribution/service/asset/impl/AssetServiceImpl.java
View file @
0c5d8d94
...
@@ -4,6 +4,8 @@ import java.lang.reflect.Field;
...
@@ -4,6 +4,8 @@ import java.lang.reflect.Field;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.CollectionUtils
;
...
@@ -17,6 +19,7 @@ import com.alibaba.fastjson.JSONArray;
...
@@ -17,6 +19,7 @@ import com.alibaba.fastjson.JSONArray;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.google.common.base.Stopwatch
;
import
com.google.common.base.Stopwatch
;
import
com.quantgroup.asset.distribution.config.annotation.Attribute
;
import
com.quantgroup.asset.distribution.config.annotation.Attribute
;
import
com.quantgroup.asset.distribution.enums.ExecuteType
;
import
com.quantgroup.asset.distribution.enums.response.AssetResponse
;
import
com.quantgroup.asset.distribution.enums.response.AssetResponse
;
import
com.quantgroup.asset.distribution.exception.QGException
;
import
com.quantgroup.asset.distribution.exception.QGException
;
import
com.quantgroup.asset.distribution.exception.QGExceptionType
;
import
com.quantgroup.asset.distribution.exception.QGExceptionType
;
...
@@ -65,6 +68,8 @@ public class AssetServiceImpl implements IAssetService{
...
@@ -65,6 +68,8 @@ public class AssetServiceImpl implements IAssetService{
@Autowired
@Autowired
private
IFinanceProductHitLogService
financeProductHitLogService
;
private
IFinanceProductHitLogService
financeProductHitLogService
;
private
static
final
ExecutorService
executorPool
=
Executors
.
newFixedThreadPool
(
100
);
@Async
@Async
@Override
@Override
...
@@ -81,8 +86,12 @@ public class AssetServiceImpl implements IAssetService{
...
@@ -81,8 +86,12 @@ public class AssetServiceImpl implements IAssetService{
assetAttributeService
.
saveAssetAttrubite
(
asset
,
assetAttributeExtendConfigList
,
data
);
assetAttributeService
.
saveAssetAttrubite
(
asset
,
assetAttributeExtendConfigList
,
data
);
// 把资产基础属性值放入data
// 把资产基础属性值放入data
data
=
addAssetAttributeToData
(
asset
,
data
);
data
=
addAssetAttributeToData
(
asset
,
data
);
// 资方配置空跑
doTestExecute
(
JSON
.
parseObject
(
JSON
.
toJSONString
(
assetForm
),
AssetForm
.
class
),
data
);
// 如果使用资方模块则去命中资方,创建金融产品集
// 如果使用资方模块则去命中资方,创建金融产品集
hitFundIfUseFundModule
(
assetForm
,
data
);
String
hitFinanceProduct
=
hitFundIfUseFundModule
(
assetForm
,
data
);
// 资方模块结果处理
checkFundResult
(
assetForm
,
hitFinanceProduct
);
// 资产分发
// 资产分发
assetDistributeService
.
distribute
(
assetForm
,
asset
,
data
);
assetDistributeService
.
distribute
(
assetForm
,
asset
,
data
);
log
.
info
(
"资产分发完成, uuid : {}, bizNo : {}, assetNo : {}, bizChannel : {}, 耗时 : {}"
,
assetForm
.
getUuid
(),
log
.
info
(
"资产分发完成, uuid : {}, bizNo : {}, assetNo : {}, bizChannel : {}, 耗时 : {}"
,
assetForm
.
getUuid
(),
...
@@ -211,10 +220,10 @@ public class AssetServiceImpl implements IAssetService{
...
@@ -211,10 +220,10 @@ public class AssetServiceImpl implements IAssetService{
* 如果使用资方模块,需要去命中资方
* 如果使用资方模块,需要去命中资方
* @param assetForm
* @param assetForm
*/
*/
public
void
hitFundIfUseFundModule
(
AssetForm
assetForm
,
Map
<
String
,
Object
>
data
)
{
public
String
hitFundIfUseFundModule
(
AssetForm
assetForm
,
Map
<
String
,
Object
>
data
)
{
// 如果auditResult为true, amount或term有一个为空, 那就不管是否是测试,都不能使用资方模块了
// 如果auditResult为true, amount或term有一个为空, 那就不管是否是测试,都不能使用资方模块了
if
(
"true"
.
equals
(
assetForm
.
getAuditResult
())
&&
(
StringUtils
.
isEmpty
(
assetForm
.
getAmount
())
||
StringUtils
.
isEmpty
(
assetForm
.
getTerm
())))
{
if
(
"true"
.
equals
(
assetForm
.
getAuditResult
())
&&
(
StringUtils
.
isEmpty
(
assetForm
.
getAmount
())
||
StringUtils
.
isEmpty
(
assetForm
.
getTerm
())))
{
return
;
return
null
;
}
}
// 创建金融产品集,并初始化金额期数
// 创建金融产品集,并初始化金额期数
JSONArray
financeProductArray
=
new
JSONArray
();
JSONArray
financeProductArray
=
new
JSONArray
();
...
@@ -245,9 +254,13 @@ public class AssetServiceImpl implements IAssetService{
...
@@ -245,9 +254,13 @@ public class AssetServiceImpl implements IAssetService{
if
(
CollectionUtils
.
isNotEmpty
(
limits
))
{
if
(
CollectionUtils
.
isNotEmpty
(
limits
))
{
for
(
ChannelFundConfig
.
Limit
limit
:
limits
)
{
for
(
ChannelFundConfig
.
Limit
limit
:
limits
)
{
String
expression
=
limit
.
getLimit
();
String
expression
=
limit
.
getLimit
();
if
(
expression
.
contains
(
"audit
R
esult"
))
{
if
(
expression
.
contains
(
"audit
_r
esult"
))
{
hasAuditResultLimit
=
true
;
hasAuditResultLimit
=
true
;
}
}
// 如果是拒绝原因判断并且没有配置拒绝原因,不满足
if
(
expression
.
contains
(
"refuseReason"
)
&&
data
.
get
(
"refuseReason"
)
==
null
)
{
continue
A
;
}
if
(!
ruleService
.
valid
(
expression
,
data
))
{
if
(!
ruleService
.
valid
(
expression
,
data
))
{
continue
A
;
continue
A
;
}
}
...
@@ -274,7 +287,7 @@ public class AssetServiceImpl implements IAssetService{
...
@@ -274,7 +287,7 @@ public class AssetServiceImpl implements IAssetService{
// 如果审核拒绝,也没命中任何资方, 直接返回
// 如果审核拒绝,也没命中任何资方, 直接返回
if
(
"false"
.
equals
(
assetForm
.
getAuditResult
())
&&
fundArray
.
size
()
==
0
)
{
if
(
"false"
.
equals
(
assetForm
.
getAuditResult
())
&&
fundArray
.
size
()
==
0
)
{
return
;
return
null
;
}
}
QGPreconditions
.
checkArgument
(
fundArray
.
size
()
!=
0
,
QGExceptionType
.
NO_FUND_INFO_BEEN_HIT
,
assetForm
.
getBizChannel
(),
assetForm
.
getAmount
(),
assetForm
.
getTerm
());
QGPreconditions
.
checkArgument
(
fundArray
.
size
()
!=
0
,
QGExceptionType
.
NO_FUND_INFO_BEEN_HIT
,
assetForm
.
getBizChannel
(),
assetForm
.
getAmount
(),
assetForm
.
getTerm
());
...
@@ -293,18 +306,72 @@ public class AssetServiceImpl implements IAssetService{
...
@@ -293,18 +306,72 @@ public class AssetServiceImpl implements IAssetService{
}
}
String
hitFinanceProduct
=
JSON
.
toJSONString
(
financeProductArray
);
String
hitFinanceProduct
=
JSON
.
toJSONString
(
financeProductArray
);
log
.
info
(
"资方模块组成金融产品集完成, uuid : {}, assetNo : {}, bizNo : {}, bizChannel : {}, financeProduct : {}"
,
assetForm
.
getUuid
(),
assetForm
.
getAssetNo
(),
assetForm
.
getBizNo
(),
assetForm
.
getBizChannel
(),
hitFinanceProduct
);
log
.
info
(
"资方模块组成金融产品集完成, uuid : {}, assetNo : {}, bizNo : {}, bizChannel : {}, financeProduct : {}"
,
assetForm
.
getUuid
(),
assetForm
.
getAssetNo
(),
assetForm
.
getBizNo
(),
assetForm
.
getBizChannel
(),
hitFinanceProduct
);
// 如果金融产品集为空, 那就用hit的, 保证流程不会出错,并且没有比较
return
hitFinanceProduct
;
if
(
StringUtils
.
isEmpty
(
assetForm
.
getFinanceProducts
()))
{
}
// 装填金融产品集并返回
assetForm
.
setFinanceProducts
(
hitFinanceProduct
);
/**
}
else
{
* 资方模块命中后结果处理
String
oldFinanceProduct
=
assetForm
.
getFinanceProducts
();
* @param assetForm
// 原金融产品集不为空,如果不是测试,直接返回
* @param hitFinanceProduct
if
(
config
.
getType
()
==
1
)
{
* @return
// 线上需要使用
*/
assetForm
.
setFinanceProducts
(
hitFinanceProduct
);
private
AssetForm
checkFundResult
(
AssetForm
assetForm
,
String
hitFinanceProduct
)
{
}
if
(
hitFinanceProduct
==
null
)
{
financeProductHitLogService
.
saveLog
(
assetForm
,
oldFinanceProduct
,
hitFinanceProduct
)
;
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
);
return
assetForm
;
}
/**
* 资方配置空跑
* @param testAssetForm
* @param data
*/
private
void
doTestExecute
(
AssetForm
assetForm
,
Map
<
String
,
Object
>
data
)
{
executorPool
.
execute
(()
->
{
try
{
assetForm
.
setBizChannel
(
"88888_"
+
assetForm
.
getBizChannel
());
String
hitFundPro
=
hitFundIfUseFundModule
(
assetForm
,
data
);
String
oldFundPro
=
assetForm
.
getFinanceProducts
();
String
oldAuditResult
=
assetForm
.
getAuditResult
();
if
(
hitFundPro
!=
null
)
{
assetForm
.
setFinanceProducts
(
hitFundPro
);
if
(
"false"
.
equals
(
assetForm
.
getAuditResult
()))
{
assetForm
.
setAuditResult
(
"true"
);
}
}
financeProductHitLogService
.
saveLog
(
assetForm
,
oldFundPro
,
hitFundPro
,
oldAuditResult
,
assetForm
.
getAuditResult
(),
ExecuteType
.
TEST
);
}
catch
(
QGException
qe
)
{
log
.
error
(
"资方配置执行空跑出现错误 : {}, uuid : {}, bizChannel : {}, bizType : {}, bizNo : {}, assetNo : {} "
,
qe
.
qgExceptionType
.
code
+
"->"
+
qe
.
detail
,
assetForm
.
getUuid
(),
assetForm
.
getBizChannel
(),
assetForm
.
getBizType
(),
assetForm
.
getBizNo
(),
assetForm
.
getAssetNo
());
alarmService
.
dingtalkAlarm
(
"Warn"
,
"资方配置执行空跑出现错误"
,
"bizChannel : "
+
assetForm
.
getBizChannel
()
+
" , bizType : "
+
assetForm
.
getBizType
()
+
" , bizNo : "
+
assetForm
.
getBizNo
()
+
" , assetNo : "
+
assetForm
.
getAssetNo
()
+
" , uuid : "
+
assetForm
.
getUuid
()
+
" , 错误信息 : "
+
qe
.
qgExceptionType
.
code
+
"->"
+
qe
.
detail
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"资方配置执行空跑出现异常, uuid : {}, bizChannel : {}, bizType : {}, bizNo : {}, assetNo : {} "
,
assetForm
.
getUuid
(),
assetForm
.
getBizChannel
(),
assetForm
.
getBizType
(),
assetForm
.
getBizNo
(),
assetForm
.
getAssetNo
(),
ex
);
alarmService
.
dingtalkAlarm
(
"Warn"
,
"资方配置执行空跑出现异常"
,
"bizChannel : "
+
assetForm
.
getBizChannel
()
+
" , bizType : "
+
assetForm
.
getBizType
()
+
" , bizNo : "
+
assetForm
.
getBizNo
()
+
" , assetNo : "
+
assetForm
.
getAssetNo
()
+
" , uuid : "
+
assetForm
.
getUuid
()
+
" , 错误信息 : 未知错误."
);
}
});
}
}
}
}
src/main/java/com/quantgroup/asset/distribution/service/jpa/entity/FinanceProductHitLog.java
View file @
0c5d8d94
...
@@ -52,12 +52,21 @@ public class FinanceProductHitLog implements Serializable{
...
@@ -52,12 +52,21 @@ public class FinanceProductHitLog implements Serializable{
@Column
(
name
=
"new_finance_product"
)
@Column
(
name
=
"new_finance_product"
)
private
String
newFinanceProduct
;
private
String
newFinanceProduct
;
@Column
(
name
=
"old_audit_result"
)
private
String
oldAuditResult
;
@Column
(
name
=
"new_audit_result"
)
private
String
newAuditResult
;
@Column
(
name
=
"equals"
)
@Column
(
name
=
"equals"
)
private
Boolean
equals
;
private
Boolean
equals
;
@Column
(
name
=
"enable"
)
@Column
(
name
=
"enable"
)
private
Boolean
enable
;
private
Boolean
enable
;
@Column
(
name
=
"execute_type"
)
private
Integer
executeType
;
@Column
(
name
=
"created_at"
)
@Column
(
name
=
"created_at"
)
private
Timestamp
createdAt
;
private
Timestamp
createdAt
;
...
...
src/main/java/com/quantgroup/asset/distribution/service/product/IFinanceProductHitLogService.java
View file @
0c5d8d94
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
product
;
package
com
.
quantgroup
.
asset
.
distribution
.
service
.
product
;
import
com.quantgroup.asset.distribution.enums.ExecuteType
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.model.form.AssetForm
;
/**
/**
...
@@ -15,5 +16,6 @@ public interface IFinanceProductHitLogService {
...
@@ -15,5 +16,6 @@ public interface IFinanceProductHitLogService {
* @param oldFinanceProduct
* @param oldFinanceProduct
* @param newFinanceProduct
* @param newFinanceProduct
*/
*/
public
void
saveLog
(
AssetForm
assetForm
,
String
oldFinanceProduct
,
String
newFinanceProduct
);
public
void
saveLog
(
AssetForm
assetForm
,
String
oldFinanceProduct
,
String
newFinanceProduct
,
String
oldAuditResult
,
String
newAuditResult
,
ExecuteType
executeType
);
}
}
src/main/java/com/quantgroup/asset/distribution/service/product/impl/FinanceProductHitLogServiceImpl.java
View file @
0c5d8d94
...
@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
...
@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
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.model.form.AssetForm
;
import
com.quantgroup.asset.distribution.service.jpa.entity.FinanceProductHitLog
;
import
com.quantgroup.asset.distribution.service.jpa.entity.FinanceProductHitLog
;
import
com.quantgroup.asset.distribution.service.jpa.repository.IFinanceProductHitLogRepository
;
import
com.quantgroup.asset.distribution.service.jpa.repository.IFinanceProductHitLogRepository
;
...
@@ -34,7 +35,8 @@ public class FinanceProductHitLogServiceImpl implements IFinanceProductHitLogSer
...
@@ -34,7 +35,8 @@ public class FinanceProductHitLogServiceImpl implements IFinanceProductHitLogSer
@Async
@Async
@Override
@Override
public
void
saveLog
(
AssetForm
assetForm
,
String
oldFinanceProduct
,
String
newFinanceProduct
)
{
public
void
saveLog
(
AssetForm
assetForm
,
String
oldFinanceProduct
,
String
newFinanceProduct
,
String
oldAuditResult
,
String
newAuditResult
,
ExecuteType
executeType
)
{
try
{
try
{
FinanceProductHitLog
hitLog
=
new
FinanceProductHitLog
();
FinanceProductHitLog
hitLog
=
new
FinanceProductHitLog
();
hitLog
.
setBizChannel
(
assetForm
.
getBizChannel
());
hitLog
.
setBizChannel
(
assetForm
.
getBizChannel
());
...
@@ -43,8 +45,11 @@ public class FinanceProductHitLogServiceImpl implements IFinanceProductHitLogSer
...
@@ -43,8 +45,11 @@ public class FinanceProductHitLogServiceImpl implements IFinanceProductHitLogSer
hitLog
.
setBizNo
(
assetForm
.
getBizNo
());
hitLog
.
setBizNo
(
assetForm
.
getBizNo
());
hitLog
.
setOldFinanceProduct
(
oldFinanceProduct
);
hitLog
.
setOldFinanceProduct
(
oldFinanceProduct
);
hitLog
.
setNewFinanceProduct
(
newFinanceProduct
);
hitLog
.
setNewFinanceProduct
(
newFinanceProduct
);
hitLog
.
setOldAuditResult
(
oldAuditResult
);
hitLog
.
setNewAuditResult
(
newAuditResult
);
hitLog
.
setEnable
(
true
);
hitLog
.
setEnable
(
true
);
hitLog
.
setEquals
(
financeProducEquals
(
oldFinanceProduct
,
newFinanceProduct
));
hitLog
.
setEquals
(
financeProducEquals
(
oldFinanceProduct
,
newFinanceProduct
));
hitLog
.
setExecuteType
(
executeType
.
getCode
());
financeProductHitLogRepository
.
save
(
hitLog
);
financeProductHitLogRepository
.
save
(
hitLog
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"金融产品集命中记录比较保存异常, uuid : {}, bizNo : {}, assetNo : {}, oldFInanceProduct : {}, newFinanceProduct : {}"
,
log
.
error
(
"金融产品集命中记录比较保存异常, uuid : {}, bizNo : {}, assetNo : {}, oldFInanceProduct : {}, newFinanceProduct : {}"
,
...
...
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