主要業務邏輯:
一共通過獲取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