ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springbatch

2021-10-16 19:33:19  阅读:227  来源: 互联网

标签:文件 中证 全价 估值 step springbatch 中债


主要业务逻辑:
一共通过获取4种文件后,对文件相关数据进行处理,之后关联相关已有数据库进行监控视图的填充.
一共含有中证/中债两类文件类型, 每种类型对应全价/特殊两种区分.

流程图:

4种文件类型枚举及入库表:
文件类型code 对应写入数据库
market_cs_txt_valuation (从txt文件第20行开始读取入库数据) market_cs_valuation 中证全价
market_cs_txt_specified (从txt文件第13行开始读取入库数据) market_cs_specified 中证特殊
market_cb_dbf_valuation (第一行是标头) market_cb_dbf_valuation 中债全价
market_cb_dbf_specified (第一行是标头) market_cb_dbf_specified 中债特殊

market_topic_records 用来记录文件到没到,记录到达日期,以及批次号
(前置step查询文件数据到达与否时需要关联查询到是该表数据)
record_id file_date file_type batch_code create_time update_time topic_time
market_monitor_common_config(已经改为了不设置其他值只设定偏离度阈值时便为公共阈值)
config_id holding_deviation assessment_deviation create_time delete_flag version
market_exception_deviation
deviation_id

market_results
对比结果表,记录某种估值偏离计算今日是否达成,记录相关jobId,stepResults等

偏离度计算需要用到的总共相关表:

特殊估值监控获取逻辑:

偏离度&首日出现对比并对比结果入库的刷新机制(monitor)

提醒邮件发送机制:

*return null 时 processor将不会将null的数据传入writer进行update

当第二份当日文件重复到达后,进行相应处理

情况分多种
[ ] 当第二份文件数据与第一份文件数据一致时,可以不根据bondCode,bondMarket来进行更新
[ ] 当第二份文件数据与第一份文件数据有重叠部分但也有少有多时,需要先将数据根据bondCode,bondMarket来进行更新,
而还需要将少的数据进行数值额外清理,将多的数据进行额外插入数值
[X] 确定直接按照第二份文件

发送每条对比结果 module:core
调用faAutoIndexFeignClient发送对比结果

每次跑批查询数据根据查询关联列表,关联持仓债券市场与债券

文档:
[X] 持仓债券首次出现在特殊估值行情文件中,哪个属于持仓债券 第三方数据
[X] 两种偏离度的计算
1) 中证&中债行情偏离度监控:获取所持仓债券监控日的中证行情、中债行情。
计算中证和中债两个行情的偏离度(包括正常全价和特殊估值价),若偏离度超过所设阈值(如10%),做出提示。
偏离度计算公式:|(中证行情-中债行情)/中债行情|
注:以上公式中的中证行情包括中证全价和中证特殊估值,中债全价包括中债全价和中债特殊估值(下同)。
中证和中债的特殊估值行情会同时出现吗?
2) 估值价格偏离监控:获取所持仓债券监控日的中证行情、中债行情以及估值全价。
计算估值全价与第三方价格的偏离度(包括特殊估值价格),若偏离度超过所设阈值(如1%),做出提示;
偏离度计算公式=|(估值全价-中证行情(或中债行情))/中证行情(或中债行情)|
注:考虑到估值价格保留位数的处理,因此通过设置阈值来监控价格的准确性。
[X] 监控日是哪些天
[X] 估值全价计算 (估值表,债券市值,应收债券利息) 第三方数据
[ ] 估值中 债券代码是复数的都有哪些
[X] 业务需求1监控特殊行情文件是对比哪个字段实际的 maybe
[X] 计算偏离度 外层绝对值

文档变更:

:一个债券在中证行情中出现则不会在中证特殊估值行情中出现,中债行情同理。

ZQTZ_CB

持仓证券视图
market_hoding_view
通过查询视图参数不同 secDate (到天的时间)
根据不同的secCode,查看该持仓债券所在交易市场
可以使用到的字段值:
SYMBOL(无中文的证券代码),secCode(带中文SH,SZ,CY,HK的证券代码),
secName(证券名称),mktCode(证券市场XSHG上海,XCFE(银行间),XSHE(深圳),XHKG(香港)),
fundCode(基金代码),fundName(基金名称),fundType(基金类型),secDate(数据时间)
特殊估值&持仓债券
1.根据持仓证券的联查,判定特殊估值属于哪个证券交易市场
持仓债券表视图: market_hoding_view
select * from market_hoding_view where SYMBOL in (110059)

select v.SYMBOL as bondCode,secName as bondName,secDate as marketTime,中证特殊估值价,中债特殊估值价,fundCode as productCode,
fundName as productName,fundType as productType

Specified 特殊估值的取值:
[X] 或更改: marketSpecialMonitorServiceImpl: 201 & 207

其他接口:
1.估值全价 估值表 (赢时胜)
2.工作日

【中债全价】
文件:债券估值yyyymmdd,一般18点到达,取文件“zqdm(证券代码)、kxd(可信度)、 rzgjqj(日终估价全价)、ltcszqdm(流通场所债券代码)。
银行间债券代码:取“zqdm”
交易所债券(含上交所、深交所)代码:取“ltcszqdm”
若债券只有一条估值价格,则直接取其“rzgjqj”
若债券有两条估值价格,取kxd 为“推荐”的“rzgjqj”
该行情文件存放地址:H:\fund519008\yyyymmdd

zhon

在视图中,SYMBOL=bondCode

4种文件,3个monitor(specified,cscb,value monitor)
,3对数据对比 (cs->cb , value->cs , value->cb)

通过task将偏离度计算并写入对应monitor
关系关联表

偏离度计算入库流程:

估值全价计算流程:

对偏离度set表的取值及common(公共值),针对值,以及对比不对比(估值价格偏离监控)

spring batch 比较偏离度以及入库monitor
1.配置相关springbatchconfig,oracle,mybatisplus
2.关联4种基础文件,关联持仓债券,如果为cscb对比偏离度,先获取中证的数据条目,则将获取对应的该条目对应到的中债数据,
通过持仓债券冗余字段填充了monitor,首先进行了cscbMonitor的保存。
3.cscbMonitor保存后,再根据获取到的相关数据(持仓债券view),获取到对应的估值全价表关联数据,获取到估值全价,再返回跟中证或
中债数据进行计算,得出估值全价中证偏离度,估值全价中债偏离度,并将关联估值全价前到数据按照是否超过阈值,插入valueMonitor。
其中valueMonitor中包含value-cs(估值与中证),value-cb(估值与中债)。

springbatch flow :https://blog.csdn.net/wuzhiwei549/article/details/85405443

springbatch flow https://blog.csdn.net/shaoyangdd/article/details/100862924

SpringBatch 不同reader,processor,writer配置不同的单个内置static class @Configuration区分
对应每种monitor的writer

job的配置

配置batchStep流程 将batchJobs指示图中每个不同级别(>,>>,>>>)分为不同步骤

step 6 个
刷新结果

batchStep及对应的前置后置step关系
对应step:
特殊估值:(特殊文件)
special:
判定csSp文件数据今日是否存在(topic_records)
[csSpSpecialStep],
判定cbSp文件数据今日是否存在(topic_records)
[cbSpSpecialStep]

中证中债:(2类/4个文件都用得到,对比一种必须用到两个文件数据)
initMonitor (将持仓债券数据初始化进cscb-monitor本日)
cscb:
判定csVa & cbVa文件数据今日是否存在(topic_records)
[csVaCsCbStep],
判定csSp & cbSp文件数据今日是否存在(topic_records)
[csSpCsCbStep]

估值全价计算:
initMonitor (将持仓债券数据初始化进value-monitor本日)
value:
判定csVa文件数据今日是否存在(topic_records)
[csVaValueStep],
判定csSp文件数据今日是否存在(topic_records)
[csSpValueStep],
判定cbVa文件数据今日是否存在(topic_records)
[cbVaValueStep],
判定cbSp文件数据今日是否存在(topic_records)
[cbSpValueStep]

job开始时,根据monitor类型,来获取isInitMonitor单独的flow,在单独的flow中,执行完判定isInitMonitor后再执行下面的step.从混乱的并行中回到前需判定的flow中

乱序并行初始化视图到常规判定初始化视图

各个step只包括读转写
比如
csva文件发起的step可以转到cscb-monitor也可以转到value-cs到value-monitor
则将该csva-begin-job做flow,并行,并行第一个step就应该是判断csva入库与否到tasklet step
具体到csva-cscb-step时只要判定cbva文件tasklet step即可
而value-monitor无需再判定
所以在生成flow时,如果不需要再判定文件入库,需要改为可以执行在tasklet step返回finished

springbatch
https://blog.csdn.net/m0_37895553/article/details/105008083
springbatch可读多文件写list,需要转换器改为单个实体->转到多个实体 maybe
https://blog.csdn.net/lyf_ldh/article/details/98471353

springbatch优势
chunk分批进行处理,在异常断点处继续

beforeJob(可以判定是否这个job所需文件是否都具备)
afterJob(对比结果)

记录job结果的同时发送比对 超过阈值 或 首日出现 数据

● 问题: 可能update时间会跟beginJob,monitorJob有冲突,可能同时
● 问题: write count获取时 并不能获取完全是这个job进行更新的

● 解决: 根据step 名称获取这个step id 之后是否还有相同的step, 如果有,则统一获取回来 将 write count加总 进行相关monitor表的查询
● step步骤数组,判定monitor类型的step而不是initstep等,获取后将step对应monitortype进行查询

发送邮箱提醒,区分文件到达的jobBegin方式以及单个刷新monitor两种类型

jobExecutionId -> jobInstanceId(batchJobInstance) 查询jobName是否是beginJob或是refreshJob

标签:文件,中证,全价,估值,step,springbatch,中债
来源: https://www.cnblogs.com/ukzq/p/15415047.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有