mns-scheduler 1.0.4.6__py3-none-any.whl → 1.0.4.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mns-scheduler might be problematic. Click here for more details.

@@ -0,0 +1,436 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import akshare as ak
9
+ from mns_common.db.MongodbUtil import MongodbUtil
10
+ import mns_scheduler.finance.finance_common_api as finance_common_api
11
+ import mns_common.constant.db_name_constant as db_name_constant
12
+ mongodb_util = MongodbUtil('27017')
13
+ from loguru import logger
14
+ import mns_common.utils.data_frame_util as data_frame_util
15
+
16
+
17
+ #
18
+ # {
19
+ # "_id" : ObjectId("6644358f8eb1db9684c8b75d"),
20
+ # "SECUCODE" : "600519.SH",
21
+ # "SECURITY_CODE" : "600519",
22
+ # "SECURITY_NAME_ABBR" : "贵州茅台",
23
+ # "ORG_CODE" : "10002602",
24
+ # "ORG_TYPE" : "通用",
25
+ # "REPORT_DATE" : "2024-03-31 00:00:00",
26
+ # "REPORT_TYPE" : "一季报",
27
+ # "REPORT_DATE_NAME" : "2024一季报",
28
+ # "SECURITY_TYPE_CODE" : "058001001",
29
+ # "NOTICE_DATE" : "2024-04-27 00:00:00",
30
+ # "UPDATE_DATE" : "2024-04-27 00:00:00",
31
+ # "CURRENCY" : "CNY",
32
+ # "ACCEPT_DEPOSIT_INTERBANK" : 8381544929.17,
33
+ # "ACCOUNTS_PAYABLE" : 4022842219.54, 其中:应付账款
34
+ # "ACCOUNTS_RECE" : 73124662.68, 应收账款
35
+ # "ACCRUED_EXPENSE" : NaN,
36
+ # "ADVANCE_RECEIVABLES" : NaN,
37
+ # "AGENT_TRADE_SECURITY" : NaN,
38
+ # "AGENT_UNDERWRITE_SECURITY" : NaN,
39
+ # "AMORTIZE_COST_FINASSET" : NaN,
40
+ # "AMORTIZE_COST_FINLIAB" : NaN,
41
+ # "AMORTIZE_COST_NCFINASSET" : NaN,
42
+ # "AMORTIZE_COST_NCFINLIAB" : NaN,
43
+ # "APPOINT_FVTPL_FINASSET" : NaN,
44
+ # "APPOINT_FVTPL_FINLIAB" : NaN,
45
+ # "ASSET_BALANCE" : 0.0,
46
+ # "ASSET_OTHER" : NaN,
47
+ # "ASSIGN_CASH_DIVIDEND" : NaN,
48
+ # "AVAILABLE_SALE_FINASSET" : NaN,
49
+ # "BOND_PAYABLE" : NaN,
50
+ # "BORROW_FUND" : NaN,
51
+ # "BUY_RESALE_FINASSET" : 7111997692.87, 买入返售金融资产
52
+ # "CAPITAL_RESERVE" : 1374964415.72, 资本公积
53
+ # "CIP" : 2813289076.98, 在建工程
54
+ # "CONSUMPTIVE_BIOLOGICAL_ASSET" : NaN,
55
+ # "CONTRACT_ASSET" : NaN,
56
+ # "CONTRACT_LIAB" : 9523298229.75, 合同负债
57
+ # "CONVERT_DIFF" : NaN,
58
+ # "CREDITOR_INVEST" : 5335437085.68, 债权投资
59
+ # "CURRENT_ASSET_BALANCE" : 0.0,
60
+ # "CURRENT_ASSET_OTHER" : NaN,
61
+ # "CURRENT_LIAB_BALANCE" : 0.0,
62
+ # "CURRENT_LIAB_OTHER" : NaN,
63
+ # "DEFER_INCOME" : NaN,
64
+ # "DEFER_INCOME_1YEAR" : NaN,
65
+ # "DEFER_TAX_ASSET" : 4477172963.01, 递延所得税资产
66
+ # "DEFER_TAX_LIAB" : 80835441.75, 递延所得税负债
67
+ # "DERIVE_FINASSET" : NaN,
68
+ # "DERIVE_FINLIAB" : NaN,
69
+ # "DEVELOP_EXPENSE" : 222425799.33, 开发支出
70
+ # "DIV_HOLDSALE_ASSET" : NaN,
71
+ # "DIV_HOLDSALE_LIAB" : NaN,
72
+ # "DIVIDEND_PAYABLE" : NaN,
73
+ # "DIVIDEND_RECE" : NaN,
74
+ # "EQUITY_BALANCE" : 0.0,
75
+ # "EQUITY_OTHER" : NaN,
76
+ # "EXPORT_REFUND_RECE" : NaN,
77
+ # "FEE_COMMISSION_PAYABLE" : NaN,
78
+ # "FIN_FUND" : NaN,
79
+ # "FINANCE_RECE" : NaN,
80
+ # "FIXED_ASSET" : 19541551054.14, 固定资产
81
+ # "FIXED_ASSET_DISPOSAL" : NaN,
82
+ # "FVTOCI_FINASSET" : NaN,
83
+ # "FVTOCI_NCFINASSET" : NaN,
84
+ # "FVTPL_FINASSET" : NaN,
85
+ # "FVTPL_FINLIAB" : NaN,
86
+ # "GENERAL_RISK_RESERVE" : 1061529724.0, 一般风险准备
87
+ # "GOODWILL" : NaN,
88
+ # "HOLD_MATURITY_INVEST" : NaN,
89
+ # "HOLDSALE_ASSET" : NaN,
90
+ # "HOLDSALE_LIAB" : NaN,
91
+ # "INSURANCE_CONTRACT_RESERVE" : NaN,
92
+ # "INTANGIBLE_ASSET" : 8517877019.46, 无形资产
93
+ # "INTEREST_PAYABLE" : NaN,
94
+ # "INTEREST_RECE" : NaN,
95
+ # "INTERNAL_PAYABLE" : NaN,
96
+ # "INTERNAL_RECE" : NaN,
97
+ # "INVENTORY" : 46852227606.93, 存货
98
+ # "INVEST_REALESTATE" : 3959373.06, 投资性房地产
99
+ # "LEASE_LIAB" : 280265260.71, 租赁负债
100
+ # "LEND_FUND" : 105060937860.99, 拆出资金
101
+ # "LIAB_BALANCE" : 0.0,
102
+ # "LIAB_EQUITY_BALANCE" : NaN,
103
+ # "LIAB_EQUITY_OTHER" : NaN,
104
+ # "LIAB_OTHER" : NaN,
105
+ # "LOAN_ADVANCE" : 2603796544.91, 发放贷款及垫款
106
+ # "LOAN_PBC" : NaN,
107
+ # "LONG_EQUITY_INVEST" : NaN,
108
+ # "LONG_LOAN" : NaN,
109
+ # "LONG_PAYABLE" : NaN,
110
+ # "LONG_PREPAID_EXPENSE" : 157773820.24, 长期待摊费用
111
+ # "LONG_RECE" : NaN,
112
+ # "LONG_STAFFSALARY_PAYABLE" : NaN,
113
+ # "MINORITY_EQUITY" : 8804982639.98, 少数股东权益
114
+ # "MONETARYFUNDS" : 74197126391.43, 货币资金
115
+ # "NONCURRENT_ASSET_1YEAR" : NaN,
116
+ # "NONCURRENT_ASSET_BALANCE" : 0.0,
117
+ # "NONCURRENT_ASSET_OTHER" : NaN,
118
+ # "NONCURRENT_LIAB_1YEAR" : 56128002.7, 一年内到期的非流动负债
119
+ # "NONCURRENT_LIAB_BALANCE" : 0.0,
120
+ # "NONCURRENT_LIAB_OTHER" : NaN,
121
+ # "NOTE_ACCOUNTS_PAYABLE" : 4022842219.54, 应付票据及应付账款
122
+ # "NOTE_ACCOUNTS_RECE" : 213804940.68,应收票据及应收账款 总
123
+ # "NOTE_PAYABLE" : NaN,
124
+ # "NOTE_RECE" : 140680278.0, 应收票据
125
+ # "OIL_GAS_ASSET" : NaN,
126
+ # "OTHER_COMPRE_INCOME" : -8109798.54, 其他综合收益
127
+ # "OTHER_CREDITOR_INVEST" : NaN,
128
+ # "OTHER_CURRENT_ASSET" : 61062481.87, 其他流动资产
129
+ # "OTHER_CURRENT_LIAB" : 1145591991.93, 其他流动负债
130
+ # "OTHER_EQUITY_INVEST" : NaN,
131
+ # "OTHER_EQUITY_OTHER" : NaN,
132
+ # "OTHER_EQUITY_TOOL" : NaN,
133
+ # "OTHER_NONCURRENT_ASSET" : 154011277.63, 其他非流动资产
134
+ # "OTHER_NONCURRENT_FINASSET" : 4004528610.65, 其他非流动金融资产
135
+ # "OTHER_NONCURRENT_LIAB" : NaN,
136
+ # "OTHER_PAYABLE" : NaN,
137
+ # "OTHER_RECE" : NaN,
138
+ # "PARENT_EQUITY_BALANCE" : 0.0,
139
+ # "PARENT_EQUITY_OTHER" : NaN,
140
+ # "PERPETUAL_BOND" : NaN,
141
+ # "PERPETUAL_BOND_PAYBALE" : NaN,
142
+ # "PREDICT_CURRENT_LIAB" : NaN,
143
+ # "PREDICT_LIAB" : NaN,
144
+ # "PREFERRED_SHARES" : NaN,
145
+ # "PREFERRED_SHARES_PAYBALE" : NaN,
146
+ # "PREMIUM_RECE" : NaN,
147
+ # "PREPAYMENT" : 41204652.37, 预付款项
148
+ # "PRODUCTIVE_BIOLOGY_ASSET" : NaN,
149
+ # "PROJECT_MATERIAL" : NaN,
150
+ # "RC_RESERVE_RECE" : NaN,
151
+ # "REINSURE_PAYABLE" : NaN,
152
+ # "REINSURE_RECE" : NaN,
153
+ # "SELL_REPO_FINASSET" : NaN,
154
+ # "SETTLE_EXCESS_RESERVE" : NaN,
155
+ # "SHARE_CAPITAL" : 1256197800.0, 实收资本(或股本)
156
+ # "SHORT_BOND_PAYABLE" : NaN,
157
+ # "SHORT_FIN_PAYABLE" : NaN,
158
+ # "SHORT_LOAN" : NaN,
159
+ # "SPECIAL_PAYABLE" : NaN,
160
+ # "SPECIAL_RESERVE" : NaN,
161
+ # "STAFF_SALARY_PAYABLE" : 764260631.72, 应付职工薪酬
162
+ # "SUBSIDY_RECE" : NaN,
163
+ # "SURPLUS_RESERVE" : 38998763095.13, 盈余公积
164
+ # "TAX_PAYABLE" : 7015986396.93, 应交税费
165
+ # "TOTAL_ASSETS" : 285524543268.38, 资产总计
166
+ # "TOTAL_CURRENT_ASSETS" : 237376996384.72, 流动资产合计
167
+ # "TOTAL_CURRENT_LIAB" : 36626674015.39, 流动负债合计
168
+ # "TOTAL_EQUITY" : 248536768550.53, 股东权益合计
169
+ # "TOTAL_LIAB_EQUITY" : 285524543268.38, 负债和股东权益总计
170
+ # "TOTAL_LIABILITIES" : 36987774717.85, 负债合计
171
+ # "TOTAL_NONCURRENT_ASSETS" : 48147546883.66, 非流动资产合计
172
+ # "TOTAL_NONCURRENT_LIAB" : 361100702.46, 非流动负债合计
173
+ # "TOTAL_OTHER_PAYABLE" : 5717021613.65, 其他应付款合计
174
+ # "TOTAL_OTHER_RECE" : 26297328.18, 其他应收款合计
175
+ # "TOTAL_PARENT_EQUITY" : 239731785910.55, 归属于母公司股东权益总计
176
+ # "TRADE_FINASSET" : NaN,
177
+ # "TRADE_FINASSET_NOTFVTPL" : 3812337429.4, 交易性金融资产
178
+ # "TRADE_FINLIAB" : NaN,
179
+ # "TRADE_FINLIAB_NOTFVTPL" : NaN,
180
+ # "TREASURY_SHARES" : NaN,
181
+ # "UNASSIGN_RPOFIT" : 197048440674.24, 未分配利润
182
+ # "UNCONFIRM_INVEST_LOSS" : NaN,
183
+ # "USERIGHT_ASSET" : 315724258.57, 使用权资产
184
+ # "ACCEPT_DEPOSIT_INTERBANK_YOY" : 6.5949245759,
185
+ # "ACCOUNTS_PAYABLE_YOY" : 52.3685299106,
186
+ # "ACCOUNTS_RECE_YOY" : 25.1911350968,
187
+ # "ACCRUED_EXPENSE_YOY" : NaN,
188
+ # "ADVANCE_RECEIVABLES_YOY" : NaN,
189
+ # "AGENT_TRADE_SECURITY_YOY" : NaN,
190
+ # "AGENT_UNDERWRITE_SECURITY_YOY" : NaN,
191
+ # "AMORTIZE_COST_FINASSET_YOY" : NaN,
192
+ # "AMORTIZE_COST_FINLIAB_YOY" : NaN,
193
+ # "AMORTIZE_COST_NCFINASSET_YOY" : NaN,
194
+ # "AMORTIZE_COST_NCFINLIAB_YOY" : NaN,
195
+ # "APPOINT_FVTPL_FINASSET_YOY" : NaN,
196
+ # "APPOINT_FVTPL_FINLIAB_YOY" : NaN,
197
+ # "ASSET_BALANCE_YOY" : NaN,
198
+ # "ASSET_OTHER_YOY" : NaN,
199
+ # "ASSIGN_CASH_DIVIDEND_YOY" : NaN,
200
+ # "AVAILABLE_SALE_FINASSET_YOY" : NaN,
201
+ # "BOND_PAYABLE_YOY" : NaN,
202
+ # "BORROW_FUND_YOY" : NaN,
203
+ # "BUY_RESALE_FINASSET_YOY" : NaN,
204
+ # "CAPITAL_RESERVE_YOY" : 0.0,
205
+ # "CIP_YOY" : 16.3686330752,
206
+ # "CONSUMPTIVE_BIOLOGICAL_ASSET_YOY" : NaN,
207
+ # "CONTRACT_ASSET_YOY" : NaN,
208
+ # "CONTRACT_LIAB_YOY" : 14.3255118595,
209
+ # "CONVERT_DIFF_YOY" : NaN,
210
+ # "CREDITOR_INVEST_YOY" : 285.3261659949,
211
+ # "CURRENT_ASSET_BALANCE_YOY" : NaN,
212
+ # "CURRENT_ASSET_OTHER_YOY" : NaN,
213
+ # "CURRENT_LIAB_BALANCE_YOY" : NaN,
214
+ # "CURRENT_LIAB_OTHER_YOY" : NaN,
215
+ # "DEFER_INCOME_1YEAR_YOY" : NaN,
216
+ # "DEFER_INCOME_YOY" : NaN,
217
+ # "DEFER_TAX_ASSET_YOY" : 28.901621248,
218
+ # "DEFER_TAX_LIAB_YOY" : -50.2942934041,
219
+ # "DERIVE_FINASSET_YOY" : NaN,
220
+ # "DERIVE_FINLIAB_YOY" : NaN,
221
+ # "DEVELOP_EXPENSE_YOY" : 2.5846179105,
222
+ # "DIV_HOLDSALE_ASSET_YOY" : NaN,
223
+ # "DIV_HOLDSALE_LIAB_YOY" : NaN,
224
+ # "DIVIDEND_PAYABLE_YOY" : NaN,
225
+ # "DIVIDEND_RECE_YOY" : NaN,
226
+ # "EQUITY_BALANCE_YOY" : NaN,
227
+ # "EQUITY_OTHER_YOY" : NaN,
228
+ # "EXPORT_REFUND_RECE_YOY" : NaN,
229
+ # "FEE_COMMISSION_PAYABLE_YOY" : NaN,
230
+ # "FIN_FUND_YOY" : NaN,
231
+ # "FINANCE_RECE_YOY" : NaN,
232
+ # "FIXED_ASSET_DISPOSAL_YOY" : NaN,
233
+ # "FIXED_ASSET_YOY" : 0.2675488842,
234
+ # "FVTOCI_FINASSET_YOY" : NaN,
235
+ # "FVTOCI_NCFINASSET_YOY" : NaN,
236
+ # "FVTPL_FINASSET_YOY" : NaN,
237
+ # "FVTPL_FINLIAB_YOY" : NaN,
238
+ # "GENERAL_RISK_RESERVE_YOY" : 0.0,
239
+ # "GOODWILL_YOY" : NaN,
240
+ # "HOLD_MATURITY_INVEST_YOY" : NaN,
241
+ # "HOLDSALE_ASSET_YOY" : NaN,
242
+ # "HOLDSALE_LIAB_YOY" : NaN,
243
+ # "INSURANCE_CONTRACT_RESERVE_YOY" : NaN,
244
+ # "INTANGIBLE_ASSET_YOY" : 1.0527955969,
245
+ # "INTEREST_PAYABLE_YOY" : NaN,
246
+ # "INTEREST_RECE_YOY" : NaN,
247
+ # "INTERNAL_PAYABLE_YOY" : NaN,
248
+ # "INTERNAL_RECE_YOY" : NaN,
249
+ # "INVENTORY_YOY" : 16.9761008245,
250
+ # "INVEST_REALESTATE_YOY" : -13.4284669865,
251
+ # "LEASE_LIAB_YOY" : -16.5811741118,
252
+ # "LEND_FUND_YOY" : -0.3509101173,
253
+ # "LIAB_BALANCE_YOY" : NaN,
254
+ # "LIAB_EQUITY_BALANCE_YOY" : NaN,
255
+ # "LIAB_EQUITY_OTHER_YOY" : NaN,
256
+ # "LIAB_OTHER_YOY" : NaN,
257
+ # "LOAN_ADVANCE_YOY" : -38.6288828825,
258
+ # "LOAN_PBC_YOY" : NaN,
259
+ # "LONG_EQUITY_INVEST_YOY" : NaN,
260
+ # "LONG_LOAN_YOY" : NaN,
261
+ # "LONG_PAYABLE_YOY" : NaN,
262
+ # "LONG_PREPAID_EXPENSE_YOY" : 8.0142948307,
263
+ # "LONG_RECE_YOY" : NaN,
264
+ # "LONG_STAFFSALARY_PAYABLE_YOY" : NaN,
265
+ # "MINORITY_EQUITY_YOY" : 7.5367435942,
266
+ # "MONETARYFUNDS_YOY" : 2.4104551404,
267
+ # "NONCURRENT_ASSET_1YEAR_YOY" : NaN,
268
+ # "NONCURRENT_ASSET_BALANCE_YOY" : NaN,
269
+ # "NONCURRENT_ASSET_OTHER_YOY" : NaN,
270
+ # "NONCURRENT_LIAB_1YEAR_YOY" : -37.7830800373,
271
+ # "NONCURRENT_LIAB_BALANCE_YOY" : NaN,
272
+ # "NONCURRENT_LIAB_OTHER_YOY" : NaN,
273
+ # "NOTE_ACCOUNTS_PAYABLE_YOY" : 52.3685299106,
274
+ # "NOTE_ACCOUNTS_RECE_YOY" : 266.0390657824,
275
+ # "NOTE_PAYABLE_YOY" : NaN,
276
+ # "NOTE_RECE_YOY" : NaN,
277
+ # "OIL_GAS_ASSET_YOY" : NaN,
278
+ # "OTHER_COMPRE_INCOME_YOY" : 18.9797836371,
279
+ # "OTHER_CREDITOR_INVEST_YOY" : NaN,
280
+ # "OTHER_CURRENT_ASSET_YOY" : -23.5699370064,
281
+ # "OTHER_CURRENT_LIAB_YOY" : 16.8415197677,
282
+ # "OTHER_EQUITY_INVEST_YOY" : NaN,
283
+ # "OTHER_EQUITY_OTHER_YOY" : NaN,
284
+ # "OTHER_EQUITY_TOOL_YOY" : NaN,
285
+ # "OTHER_NONCURRENT_ASSET_YOY" : NaN,
286
+ # "OTHER_NONCURRENT_FINASSET_YOY" : NaN,
287
+ # "OTHER_NONCURRENT_LIAB_YOY" : NaN,
288
+ # "OTHER_PAYABLE_YOY" : NaN,
289
+ # "OTHER_RECE_YOY" : NaN,
290
+ # "PARENT_EQUITY_BALANCE_YOY" : NaN,
291
+ # "PARENT_EQUITY_OTHER_YOY" : NaN,
292
+ # "PERPETUAL_BOND_PAYBALE_YOY" : NaN,
293
+ # "PERPETUAL_BOND_YOY" : NaN,
294
+ # "PREDICT_CURRENT_LIAB_YOY" : NaN,
295
+ # "PREDICT_LIAB_YOY" : NaN,
296
+ # "PREFERRED_SHARES_PAYBALE_YOY" : NaN,
297
+ # "PREFERRED_SHARES_YOY" : NaN,
298
+ # "PREMIUM_RECE_YOY" : NaN,
299
+ # "PREPAYMENT_YOY" : -56.3999888135,
300
+ # "PRODUCTIVE_BIOLOGY_ASSET_YOY" : NaN,
301
+ # "PROJECT_MATERIAL_YOY" : NaN,
302
+ # "RC_RESERVE_RECE_YOY" : NaN,
303
+ # "REINSURE_PAYABLE_YOY" : NaN,
304
+ # "REINSURE_RECE_YOY" : NaN,
305
+ # "SELL_REPO_FINASSET_YOY" : NaN,
306
+ # "SETTLE_EXCESS_RESERVE_YOY" : NaN,
307
+ # "SHARE_CAPITAL_YOY" : 0.0,
308
+ # "SHORT_BOND_PAYABLE_YOY" : NaN,
309
+ # "SHORT_FIN_PAYABLE_YOY" : NaN,
310
+ # "SHORT_LOAN_YOY" : NaN,
311
+ # "SPECIAL_PAYABLE_YOY" : NaN,
312
+ # "SPECIAL_RESERVE_YOY" : NaN,
313
+ # "STAFF_SALARY_PAYABLE_YOY" : 71.7783411719,
314
+ # "SUBSIDY_RECE_YOY" : NaN,
315
+ # "SURPLUS_RESERVE_YOY" : 19.9219406872,
316
+ # "TAX_PAYABLE_YOY" : 2.2341617814,
317
+ # "TOTAL_ASSETS_YOY" : 10.501055862,
318
+ # "TOTAL_CURRENT_ASSETS_YOY" : 8.7885311339,
319
+ # "TOTAL_CURRENT_LIAB_YOY" : 16.5392858116,
320
+ # "TOTAL_EQUITY_YOY" : 9.7469071685,
321
+ # "TOTAL_LIAB_EQUITY_YOY" : 10.501055862,
322
+ # "TOTAL_LIABILITIES_YOY" : 15.8503242759,
323
+ # "TOTAL_NONCURRENT_ASSETS_YOY" : 19.7986394071,
324
+ # "TOTAL_NONCURRENT_LIAB_YOY" : -27.5773258656,
325
+ # "TOTAL_OTHER_PAYABLE_YOY" : 35.5651942454,
326
+ # "TOTAL_OTHER_RECE_YOY" : -20.5943342049,
327
+ # "TOTAL_PARENT_EQUITY_YOY" : 9.8298140667,
328
+ # "TRADE_FINASSET_NOTFVTPL_YOY" : NaN,
329
+ # "TRADE_FINASSET_YOY" : NaN,
330
+ # "TRADE_FINLIAB_NOTFVTPL_YOY" : NaN,
331
+ # "TRADE_FINLIAB_YOY" : NaN,
332
+ # "TREASURY_SHARES_YOY" : NaN,
333
+ # "UNASSIGN_RPOFIT_YOY" : 8.225033105,
334
+ # "UNCONFIRM_INVEST_LOSS_YOY" : NaN,
335
+ # "USERIGHT_ASSET_YOY" : -18.2349946142,
336
+ # "OPINION_TYPE" : null, 审计意见(境内)
337
+ # "OSOPINION_TYPE" : NaN,
338
+ # "LISTING_STATE" : "0"
339
+ # }
340
+
341
+ # 资产负债表
342
+ # https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#zcfzb-0
343
+ def get_em_asset_liability_api(symbol):
344
+ sec_code = finance_common_api.get_sec_code(symbol)
345
+ try:
346
+ stock_balance_sheet_by_report_em_df = ak.stock_balance_sheet_by_report_em(sec_code)
347
+ except Exception as e:
348
+ logger.error("同步利润表异常:{},{}", symbol, e)
349
+ return None
350
+ if data_frame_util.is_empty(stock_balance_sheet_by_report_em_df):
351
+ return None
352
+ stock_balance_sheet_by_report_em_df = stock_balance_sheet_by_report_em_df[[
353
+ 'SECUCODE',
354
+ 'SECURITY_CODE',
355
+ 'SECURITY_NAME_ABBR',
356
+ 'ORG_CODE',
357
+ 'ORG_TYPE',
358
+ 'REPORT_DATE',
359
+ 'REPORT_TYPE',
360
+ 'REPORT_DATE_NAME',
361
+ 'SECURITY_TYPE_CODE',
362
+ 'NOTICE_DATE',
363
+ 'UPDATE_DATE',
364
+ 'CURRENCY',
365
+ 'ACCOUNTS_PAYABLE',
366
+ 'ACCOUNTS_RECE',
367
+ 'BUY_RESALE_FINASSET',
368
+ 'CAPITAL_RESERVE',
369
+ 'CIP',
370
+ 'CONTRACT_LIAB',
371
+ 'CREDITOR_INVEST',
372
+ 'DEFER_TAX_ASSET',
373
+ 'DEFER_TAX_LIAB',
374
+ 'DEVELOP_EXPENSE',
375
+ 'FIXED_ASSET',
376
+ 'GENERAL_RISK_RESERVE',
377
+ 'INTANGIBLE_ASSET',
378
+ 'INVENTORY',
379
+ 'INVEST_REALESTATE',
380
+ 'LEASE_LIAB',
381
+ 'LEND_FUND',
382
+ 'LOAN_ADVANCE',
383
+ 'LONG_PREPAID_EXPENSE',
384
+ 'MINORITY_EQUITY',
385
+ 'MONETARYFUNDS',
386
+ 'NONCURRENT_LIAB_1YEAR',
387
+ 'NOTE_ACCOUNTS_PAYABLE',
388
+ 'NOTE_ACCOUNTS_RECE',
389
+ 'NOTE_RECE',
390
+ 'OTHER_COMPRE_INCOME',
391
+ 'OTHER_CURRENT_ASSET',
392
+ 'OTHER_CURRENT_LIAB',
393
+ 'OTHER_NONCURRENT_ASSET',
394
+ 'OTHER_NONCURRENT_FINASSET',
395
+ 'PREPAYMENT',
396
+ 'SHARE_CAPITAL',
397
+ 'STAFF_SALARY_PAYABLE',
398
+ 'SURPLUS_RESERVE',
399
+ 'TAX_PAYABLE',
400
+ 'TOTAL_ASSETS',
401
+ 'TOTAL_CURRENT_ASSETS',
402
+ 'TOTAL_CURRENT_LIAB',
403
+ 'TOTAL_EQUITY',
404
+ 'TOTAL_LIAB_EQUITY',
405
+ 'TOTAL_LIABILITIES',
406
+ 'TOTAL_NONCURRENT_ASSETS',
407
+ 'TOTAL_NONCURRENT_LIAB',
408
+ 'TOTAL_OTHER_PAYABLE',
409
+ 'TOTAL_OTHER_RECE',
410
+ 'TOTAL_PARENT_EQUITY',
411
+ 'TRADE_FINASSET_NOTFVTPL',
412
+ 'UNASSIGN_RPOFIT',
413
+ 'USERIGHT_ASSET',
414
+ 'OPINION_TYPE'
415
+ ]]
416
+ stock_balance_sheet_by_report_em_df['_id'] = (stock_balance_sheet_by_report_em_df['SECURITY_CODE']
417
+ + "_" + stock_balance_sheet_by_report_em_df['REPORT_DATE'])
418
+
419
+ query = {'SECURITY_CODE': symbol}
420
+ exist_asset_em_df = mongodb_util.find_query_data(db_name_constant.EM_STOCK_ASSET_LIABILITY, query)
421
+ if data_frame_util.is_not_empty(exist_asset_em_df):
422
+ new_asset_df = stock_balance_sheet_by_report_em_df.loc[
423
+ ~(stock_balance_sheet_by_report_em_df['SECURITY_CODE'].isin(list(exist_asset_em_df['SECURITY_CODE'])))]
424
+ else:
425
+ new_asset_df = stock_balance_sheet_by_report_em_df
426
+ if data_frame_util.is_empty(new_asset_df):
427
+ return None
428
+ new_asset_df.fillna(0, inplace=True)
429
+ mongodb_util.insert_mongo(new_asset_df, db_name_constant.EM_STOCK_ASSET_LIABILITY)
430
+
431
+
432
+ if __name__ == '__main__':
433
+ get_em_asset_liability_api('832876')
434
+
435
+ stock_cash_flow_sheet_by_report_em_df = ak.stock_cash_flow_sheet_by_report_em(symbol="SH600519")
436
+ print(stock_cash_flow_sheet_by_report_em_df)
@@ -0,0 +1,340 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+ import akshare as ak
10
+ from mns_common.db.MongodbUtil import MongodbUtil
11
+ import mns_common.utils.data_frame_util as data_frame_util
12
+
13
+ mongodb_util = MongodbUtil('27017')
14
+ import mns_common.constant.db_name_constant as db_name_constant
15
+ import mns_scheduler.finance.finance_common_api as finance_common_api
16
+ from loguru import logger
17
+
18
+
19
+ # 利润表
20
+ # "_id" : ObjectId("6644085f608b7737dee21a3a"),
21
+ # "SECUCODE" : "600519.SH",
22
+ # "SECURITY_CODE" : "600519",
23
+ # "SECURITY_NAME_ABBR" : "贵州茅台",
24
+ # "ORG_CODE" : "10002602",
25
+ # "ORG_TYPE" : "通用",
26
+ # "REPORT_DATE" : "2023-12-31 00:00:00",
27
+ # "REPORT_TYPE" : "年报",
28
+ # "REPORT_DATE_NAME" : "2023年报",
29
+ # "SECURITY_TYPE_CODE" : "058001001",
30
+ # "NOTICE_DATE" : "2024-04-03 00:00:00",
31
+ # "UPDATE_DATE" : "2024-04-03 00:00:00",
32
+ # "CURRENCY" : "CNY",
33
+ # "TOTAL_OPERATE_INCOME" : 150560330316.45, 营业总收入
34
+ # "TOTAL_OPERATE_INCOME_YOY" : 18.0365792459, 总运营收入修正
35
+ # "OPERATE_INCOME" : 147693604994.14, 营业收入
36
+ # "OPERATE_INCOME_YOY" : 19.0119185529, 营业收入修正
37
+ # "INTEREST_INCOME" : 2866725322.31, 利息收入
38
+ # "INTEREST_INCOME_YOY" : 利息收入修正
39
+ # "EARNED_PREMIUM" : NaN,
40
+ # "EARNED_PREMIUM_YOY" : NaN,
41
+ # "FEE_COMMISSION_INCOME" : NaN,
42
+ # "FEE_COMMISSION_INCOME_YOY" : NaN,
43
+ # "OTHER_BUSINESS_INCOME" : NaN,
44
+ # "OTHER_BUSINESS_INCOME_YOY" : NaN,
45
+ # "TOI_OTHER" : NaN,
46
+ # "TOI_OTHER_YOY" : NaN,
47
+ # "TOTAL_OPERATE_COST" : 46960889468.54, 营业总成本
48
+ # "TOTAL_OPERATE_COST_YOY" : 18.1456266222,
49
+ # "OPERATE_COST" : 11867273851.78, 营业成本
50
+ # "OPERATE_COST_YOY" : 17.5737925437,
51
+ # "INTEREST_EXPENSE" : 113500129.93, 利息支出
52
+ # "INTEREST_EXPENSE_YOY" : 7.4972611642,
53
+ # "FEE_COMMISSION_EXPENSE" : 68578.57, 手续费及佣金支出
54
+ # "FEE_COMMISSION_EXPENSE_YOY" : -52.0903684752,
55
+ # "RESEARCH_EXPENSE" : 157371873.01, 研发费用
56
+ # "RESEARCH_EXPENSE_YOY" : 16.4116440028,
57
+ # "SURRENDER_VALUE" : NaN,
58
+ # "SURRENDER_VALUE_YOY" : NaN,
59
+ # "NET_COMPENSATE_EXPENSE" : NaN,
60
+ # "NET_COMPENSATE_EXPENSE_YOY" : NaN,
61
+ # "NET_CONTRACT_RESERVE" : NaN,
62
+ # "NET_CONTRACT_RESERVE_YOY" : NaN,
63
+ # "POLICY_BONUS_EXPENSE" : NaN,
64
+ # "POLICY_BONUS_EXPENSE_YOY" : NaN,
65
+ # "REINSURE_EXPENSE" : NaN,
66
+ # "REINSURE_EXPENSE_YOY" : NaN,
67
+ # "OTHER_BUSINESS_COST" : NaN,
68
+ # "OTHER_BUSINESS_COST_YOY" : NaN,
69
+ # "OPERATE_TAX_ADD" : 22234175898.6, 税金及附加
70
+ # "OPERATE_TAX_ADD_YOY" : 20.2119055043,
71
+ # "SALE_EXPENSE" : 4648613585.82, 销售费用
72
+ # "SALE_EXPENSE_YOY" : 40.9642928475,
73
+ # "MANAGE_EXPENSE" : 9729389252.31, 管理费用
74
+ # "MANAGE_EXPENSE_YOY" : 7.9580889133,
75
+ # "ME_RESEARCH_EXPENSE" : NaN,
76
+ # "ME_RESEARCH_EXPENSE_YOY" : NaN,
77
+ # "FINANCE_EXPENSE" : -1789503701.48, 财务费用
78
+ # "FINANCE_EXPENSE_YOY" : -28.5742355094,
79
+ # "FE_INTEREST_EXPENSE" : 12624628.35, 利息费用
80
+ # "FE_INTEREST_EXPENSE_YOY" : 5.0021902771,
81
+ # "FE_INTEREST_INCOME" : 1942301920.98, 利息收入
82
+ # "FE_INTEREST_INCOME_YOY" : 31.6437955552,
83
+ # "ASSET_IMPAIRMENT_LOSS" : NaN,
84
+ # "ASSET_IMPAIRMENT_LOSS_YOY" : NaN,
85
+ # "CREDIT_IMPAIRMENT_LOSS" : NaN,
86
+ # "CREDIT_IMPAIRMENT_LOSS_YOY" : NaN,
87
+ # "TOC_OTHER" : NaN,
88
+ # "TOC_OTHER_YOY" : NaN,
89
+ # "FAIRVALUE_CHANGE_INCOME" : 3151962.5, :公允价值变动收益
90
+ # "FAIRVALUE_CHANGE_INCOME_YOY" : NaN,
91
+ # "INVEST_INCOME" : 34025967.82, 投资收益
92
+ # "INVEST_INCOME_YOY" : -46.7011782268,
93
+ # "INVEST_JOINT_INCOME" : NaN,
94
+ # "INVEST_JOINT_INCOME_YOY" : NaN,
95
+ # "NET_EXPOSURE_INCOME" : NaN,
96
+ # "NET_EXPOSURE_INCOME_YOY" : NaN,
97
+ # "EXCHANGE_INCOME" : NaN,
98
+ # "EXCHANGE_INCOME_YOY" : NaN,
99
+ # "ASSET_DISPOSAL_INCOME" : -479736.97, 资产处置收益
100
+ # "ASSET_DISPOSAL_INCOME_YOY" : -324.9796785895,
101
+ # "ASSET_IMPAIRMENT_INCOME" : NaN,
102
+ # "ASSET_IMPAIRMENT_INCOME_YOY" : NaN,
103
+ # "CREDIT_IMPAIRMENT_INCOME" : 37871293.26, 信用减值损失(新)
104
+ # "CREDIT_IMPAIRMENT_INCOME_YOY" : 357.8638477375,
105
+ # "OTHER_INCOME" : 34644873.86, 其他收益
106
+ # "OTHER_INCOME_YOY" : 41.3767542405,
107
+ # "OPERATE_PROFIT_OTHER" : NaN,
108
+ # "OPERATE_PROFIT_OTHER_YOY" : NaN,
109
+ # "OPERATE_PROFIT_BALANCE" : 0.0,
110
+ # "OPERATE_PROFIT_BALANCE_YOY" : NaN,
111
+ # "OPERATE_PROFIT" : 103708655208.38, 营业利润
112
+ # "OPERATE_PROFIT_YOY" : 18.0123117479,
113
+ # "NONBUSINESS_INCOME" : 86779655.95, 加:营业外收入
114
+ # "NONBUSINESS_INCOME_YOY" : 22.4796849672,
115
+ # "NONCURRENT_DISPOSAL_INCOME" : NaN,
116
+ # "NONCURRENT_DISPOSAL_INCOME_YOY" : NaN,
117
+ # "NONBUSINESS_EXPENSE" : 132881174.52, 减:营业外支出
118
+ # "NONBUSINESS_EXPENSE_YOY" : -46.6092621953,
119
+ # "NONCURRENT_DISPOSAL_LOSS" : NaN,
120
+ # "NONCURRENT_DISPOSAL_LOSS_YOY" : NaN,
121
+ # "EFFECT_TP_OTHER" : NaN,
122
+ # "EFFECT_TP_OTHER_YOY" : NaN,
123
+ # "TOTAL_PROFIT_BALANCE" : 0.0,
124
+ # "TOTAL_PROFIT_BALANCE_YOY" : NaN,
125
+ # "TOTAL_PROFIT" : 103662553689.81, 利润总额
126
+ # "TOTAL_PROFIT_YOY" : 18.1993076599,
127
+ # "INCOME_TAX" : 26141077412.01, 减:所得税
128
+ # "INCOME_TAX_YOY" : 17.0909328034,
129
+ # "EFFECT_NETPROFIT_OTHER" : NaN,
130
+ # "EFFECT_NETPROFIT_OTHER_YOY" : NaN,
131
+ # "EFFECT_NETPROFIT_BALANCE" : NaN,
132
+ # "EFFECT_NETPROFIT_BALANCE_YOY" : NaN,
133
+ # "UNCONFIRM_INVEST_LOSS" : NaN,
134
+ # "UNCONFIRM_INVEST_LOSS_YOY" : NaN,
135
+ # "NETPROFIT" : 77521476277.8, 净利润
136
+ # "NETPROFIT_YOY" : 18.5778097415,
137
+ # "PRECOMBINE_PROFIT" : NaN,
138
+ # "PRECOMBINE_PROFIT_YOY" : NaN,
139
+ # "CONTINUED_NETPROFIT" : 77521476277.8, 持续经营净利润
140
+ # "CONTINUED_NETPROFIT_YOY" : 18.5778097415,
141
+ # "DISCONTINUED_NETPROFIT" : NaN,
142
+ # "DISCONTINUED_NETPROFIT_YOY" : NaN,
143
+ # "PARENT_NETPROFIT" : 74734071550.75, 归属于母公司股东的净利润
144
+ # "PARENT_NETPROFIT_YOY" : 19.1598992892,
145
+ # "MINORITY_INTEREST" : 2787404727.05, 少数股东损益
146
+ # "MINORITY_INTEREST_YOY" : 4.8459336455,
147
+ # "DEDUCT_PARENT_NETPROFIT" : 74752564425.52, 扣除非经常性损益后的净利润
148
+ # "DEDUCT_PARENT_NETPROFIT_YOY" : 19.0462109566,
149
+ # "NETPROFIT_OTHER" : NaN,
150
+ # "NETPROFIT_OTHER_YOY" : NaN,
151
+ # "NETPROFIT_BALANCE" : NaN,
152
+ # "NETPROFIT_BALANCE_YOY" : NaN,
153
+ # "BASIC_EPS" : 59.49, 基本每股收益
154
+ # "BASIC_EPS_YOY" : 19.1468055277,
155
+ # "DILUTED_EPS" : 59.49, 稀释每股收益
156
+ # "DILUTED_EPS_YOY" : 19.1468055277,
157
+ # "OTHER_COMPRE_INCOME" : 4715179.82, 其他综合收益
158
+ # "OTHER_COMPRE_INCOME_YOY" : 110.40766101,
159
+ # "PARENT_OCI" : 4715179.82, 归属于母公司股东的其他综合收益
160
+ # "PARENT_OCI_YOY" : 110.40766101,
161
+ # "MINORITY_OCI" : NaN,
162
+ # "MINORITY_OCI_YOY" : NaN,
163
+ # "PARENT_OCI_OTHER" : NaN,
164
+ # "PARENT_OCI_OTHER_YOY" : NaN,
165
+ # "PARENT_OCI_BALANCE" : NaN,
166
+ # "PARENT_OCI_BALANCE_YOY" : NaN,
167
+ # "UNABLE_OCI" : NaN,
168
+ # "UNABLE_OCI_YOY" : NaN,
169
+ # "CREDITRISK_FAIRVALUE_CHANGE" : NaN,
170
+ # "CREDITRISK_FAIRVALUE_CHANGE_YOY" : NaN,
171
+ # "OTHERRIGHT_FAIRVALUE_CHANGE" : NaN,
172
+ # "OTHERRIGHT_FAIRVALUE_CHANGE_YOY" : NaN,
173
+ # "SETUP_PROFIT_CHANGE" : NaN,
174
+ # "SETUP_PROFIT_CHANGE_YOY" : NaN,
175
+ # "RIGHTLAW_UNABLE_OCI" : NaN,
176
+ # "RIGHTLAW_UNABLE_OCI_YOY" : NaN,
177
+ # "UNABLE_OCI_OTHER" : NaN,
178
+ # "UNABLE_OCI_OTHER_YOY" : NaN,
179
+ # "UNABLE_OCI_BALANCE" : NaN,
180
+ # "UNABLE_OCI_BALANCE_YOY" : NaN,
181
+ # "ABLE_OCI" : 4715179.82,
182
+ # "ABLE_OCI_YOY" : 110.40766101,
183
+ # "RIGHTLAW_ABLE_OCI" : NaN,
184
+ # "RIGHTLAW_ABLE_OCI_YOY" : NaN,
185
+ # "AFA_FAIRVALUE_CHANGE" : NaN,
186
+ # "AFA_FAIRVALUE_CHANGE_YOY" : NaN,
187
+ # "HMI_AFA" : NaN,
188
+ # "HMI_AFA_YOY" : NaN,
189
+ # "CASHFLOW_HEDGE_VALID" : NaN,
190
+ # "CASHFLOW_HEDGE_VALID_YOY" : NaN,
191
+ # "CREDITOR_FAIRVALUE_CHANGE" : NaN,
192
+ # "CREDITOR_FAIRVALUE_CHANGE_YOY" : NaN,
193
+ # "CREDITOR_IMPAIRMENT_RESERVE" : NaN,
194
+ # "CREDITOR_IMPAIRMENT_RESERVE_YOY" : NaN,
195
+ # "FINANCE_OCI_AMT" : NaN,
196
+ # "FINANCE_OCI_AMT_YOY" : NaN,
197
+ # "CONVERT_DIFF" : 4715179.82,
198
+ # "CONVERT_DIFF_YOY" : 110.40766101,
199
+ # "ABLE_OCI_OTHER" : NaN,
200
+ # "ABLE_OCI_OTHER_YOY" : NaN,
201
+ # "ABLE_OCI_BALANCE" : NaN,
202
+ # "ABLE_OCI_BALANCE_YOY" : NaN,
203
+ # "OCI_OTHER" : NaN,
204
+ # "OCI_OTHER_YOY" : NaN,
205
+ # "OCI_BALANCE" : NaN,
206
+ # "OCI_BALANCE_YOY" : NaN,
207
+ # "TOTAL_COMPRE_INCOME" : 77526191457.62, 综合收益总额
208
+ # "TOTAL_COMPRE_INCOME_YOY" : 18.5809573963,
209
+ # "PARENT_TCI" : 74738786730.57, 归属于母公司股东的综合收益总额
210
+ # "PARENT_TCI_YOY" : 19.1631595692,
211
+ # "MINORITY_TCI" : 2787404727.05, 归属于少数股东的综合收益总额
212
+ # "MINORITY_TCI_YOY" : 4.8459336455,
213
+ # "PRECOMBINE_TCI" : NaN,
214
+ # "PRECOMBINE_TCI_YOY" : NaN,
215
+ # "EFFECT_TCI_BALANCE" : NaN,
216
+ # "EFFECT_TCI_BALANCE_YOY" : NaN,
217
+ # "TCI_OTHER" : NaN,
218
+ # "TCI_OTHER_YOY" : NaN,
219
+ # "TCI_BALANCE" : NaN,
220
+ # "TCI_BALANCE_YOY" : NaN,
221
+ # "ACF_END_INCOME" : NaN,
222
+ # "ACF_END_INCOME_YOY" : NaN,
223
+ # "OPINION_TYPE" : "标准无保留意见" 审计意见(境内)
224
+ # https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0
225
+ def get_em_profit_api(symbol):
226
+ sec_code = finance_common_api.get_sec_code(symbol)
227
+ try:
228
+ stock_profit_sheet_by_report_em = ak.stock_profit_sheet_by_report_em(sec_code)
229
+ except Exception as e:
230
+ logger.error("同步利润表异常:{},{}", symbol, e)
231
+ if data_frame_util.is_empty(stock_profit_sheet_by_report_em):
232
+ return None
233
+ stock_profit_sheet_by_report_em = check_columns(stock_profit_sheet_by_report_em)
234
+ stock_profit_sheet_by_report_em = stock_profit_sheet_by_report_em[[
235
+ "SECUCODE",
236
+ "SECURITY_CODE",
237
+ "SECURITY_NAME_ABBR",
238
+ "ORG_CODE",
239
+ "ORG_TYPE",
240
+ "REPORT_DATE",
241
+ "REPORT_TYPE",
242
+ "REPORT_DATE_NAME",
243
+ "SECURITY_TYPE_CODE",
244
+ "NOTICE_DATE",
245
+ "UPDATE_DATE",
246
+ "CURRENCY",
247
+ "TOTAL_OPERATE_INCOME",
248
+ "OPERATE_INCOME",
249
+ "INTEREST_INCOME",
250
+ "TOTAL_OPERATE_COST",
251
+ "OPERATE_COST",
252
+ "INTEREST_EXPENSE",
253
+ "FEE_COMMISSION_EXPENSE",
254
+ "RESEARCH_EXPENSE",
255
+ "OPERATE_TAX_ADD",
256
+ "SALE_EXPENSE",
257
+ "MANAGE_EXPENSE",
258
+ "FINANCE_EXPENSE",
259
+ "FE_INTEREST_EXPENSE",
260
+ "FE_INTEREST_INCOME",
261
+ "FAIRVALUE_CHANGE_INCOME",
262
+ "INVEST_INCOME",
263
+ "ASSET_DISPOSAL_INCOME",
264
+ "CREDIT_IMPAIRMENT_INCOME",
265
+ "OTHER_INCOME",
266
+ "OPERATE_PROFIT",
267
+ "NONBUSINESS_INCOME",
268
+ "NONBUSINESS_EXPENSE",
269
+ "TOTAL_PROFIT",
270
+ "INCOME_TAX",
271
+ "NETPROFIT",
272
+ "CONTINUED_NETPROFIT",
273
+ "PARENT_NETPROFIT",
274
+ 'MINORITY_INTEREST',
275
+ 'DEDUCT_PARENT_NETPROFIT',
276
+ 'BASIC_EPS',
277
+ 'DILUTED_EPS',
278
+ 'OTHER_COMPRE_INCOME',
279
+ 'PARENT_OCI',
280
+ 'TOTAL_COMPRE_INCOME',
281
+ 'PARENT_TCI',
282
+ 'MINORITY_TCI',
283
+ 'OPINION_TYPE'
284
+ ]]
285
+ stock_profit_sheet_by_report_em['_id'] = (stock_profit_sheet_by_report_em['SECURITY_CODE']
286
+ + "_" + stock_profit_sheet_by_report_em['REPORT_DATE'])
287
+
288
+ query = {'SECURITY_CODE': symbol}
289
+ exist_profit_em_df = mongodb_util.find_query_data(db_name_constant.EM_STOCK_PROFIT, query)
290
+ if data_frame_util.is_not_empty(exist_profit_em_df):
291
+ new_profit_df = stock_profit_sheet_by_report_em.loc[
292
+ ~(stock_profit_sheet_by_report_em['SECURITY_CODE'].isin(list(exist_profit_em_df['SECURITY_CODE'])))]
293
+ else:
294
+ new_profit_df = stock_profit_sheet_by_report_em
295
+ if data_frame_util.is_empty(new_profit_df):
296
+ return None
297
+ new_profit_df.fillna(0, inplace=True)
298
+ return new_profit_df
299
+
300
+
301
+ def check_columns(profit_df):
302
+ if 'TOTAL_OPERATE_INCOME' not in profit_df.columns:
303
+ profit_df['TOTAL_OPERATE_INCOME'] = 0
304
+
305
+ if 'INTEREST_INCOME' not in profit_df.columns:
306
+ profit_df['INTEREST_INCOME'] = 0
307
+ if 'TOTAL_OPERATE_COST' not in profit_df.columns:
308
+ profit_df['TOTAL_OPERATE_COST'] = 0
309
+ if 'OPERATE_COST' not in profit_df.columns:
310
+ profit_df['OPERATE_COST'] = 0
311
+ if 'INTEREST_EXPENSE' not in profit_df.columns:
312
+ profit_df['INTEREST_EXPENSE'] = 0
313
+ if 'FEE_COMMISSION_EXPENSE' not in profit_df.columns:
314
+ profit_df['FEE_COMMISSION_EXPENSE'] = 0
315
+ if 'RESEARCH_EXPENSE' not in profit_df.columns:
316
+ profit_df['RESEARCH_EXPENSE'] = 0
317
+ if 'SALE_EXPENSE' not in profit_df.columns:
318
+ profit_df['SALE_EXPENSE'] = 0
319
+ if 'MANAGE_EXPENSE' not in profit_df.columns:
320
+ profit_df['MANAGE_EXPENSE'] = 0
321
+ if 'FINANCE_EXPENSE' not in profit_df.columns:
322
+ profit_df['FINANCE_EXPENSE'] = 0
323
+ if 'FE_INTEREST_EXPENSE' not in profit_df.columns:
324
+ profit_df['FE_INTEREST_EXPENSE'] = 0
325
+ if 'FE_INTEREST_INCOME' not in profit_df.columns:
326
+ profit_df['FE_INTEREST_INCOME'] = 0
327
+ if 'CREDIT_IMPAIRMENT_INCOME' not in profit_df.columns:
328
+ profit_df['CREDIT_IMPAIRMENT_INCOME'] = 0
329
+ return profit_df
330
+
331
+
332
+ import mns_common.api.em.east_money_stock_api as east_money_stock_api
333
+
334
+ if __name__ == '__main__':
335
+ em_df = east_money_stock_api.get_real_time_quotes_all_stocks()
336
+ for em_one in em_df.itertuples():
337
+ try:
338
+ get_em_profit_api(em_one.symbol)
339
+ except Exception as e:
340
+ logger.error("同步利润表异常:{},{}", em_one.symbol, e)
@@ -0,0 +1,35 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+ import mns_common.component.common_service_fun_api as common_service_fun_api
10
+ from mns_common.db.MongodbUtil import MongodbUtil
11
+ import mns_common.constant.db_name_constant as db_name_constant
12
+
13
+ mongodb_util = MongodbUtil('27017')
14
+
15
+
16
+ def get_sec_code(symbol):
17
+ classification = common_service_fun_api.classify_symbol_one(symbol)
18
+ if classification in ['K', 'H']:
19
+ return 'SH' + symbol
20
+ elif classification in ['C', 'S']:
21
+ return 'SZ' + symbol
22
+ else:
23
+ return 'BJ' + symbol
24
+
25
+
26
+ # 查询利润表数据
27
+ def find_profit_report(period_time):
28
+ query = {"REPORT_DATE": period_time}
29
+ return mongodb_util.find_query_data(db_name_constant.EM_STOCK_PROFIT, query)
30
+
31
+
32
+ # 查询资产表
33
+ def find_asset_liability_report(period_time):
34
+ query = {"REPORT_DATE": period_time}
35
+ return mongodb_util.find_query_data(db_name_constant.EM_STOCK_ASSET_LIABILITY, query)
@@ -0,0 +1,168 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ from datetime import datetime
9
+ import mns_common.component.self_choose.black_list_service_api as black_list_service_api
10
+ import mns_scheduler.finance.finance_common_api as finance_common_api
11
+ from loguru import logger
12
+ import mns_common.constant.db_name_constant as db_name_constant
13
+ from mns_common.db.MongodbUtil import MongodbUtil
14
+ import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
15
+ import mns_common.component.common_service_fun_api as common_service_fun_api
16
+ import pandas as pd
17
+
18
+ mongodb_util = MongodbUtil('27017')
19
+ # 审核标准意见
20
+ OPINION_TYPE = "标准无保留意见"
21
+
22
+ # 利润为负的时候最小营业收入 主板
23
+ MIN_INCOME_MAIN = 350000000
24
+ # 利润为负的时候最小营业收入 科创 创业
25
+ MIN_INCOME_SUB = 150000000
26
+ # 最大负债比
27
+ MAX_LIABILITY_RATIO = 90
28
+ # 最迟出报告的天数
29
+ LATE_REPORT_DAYS = 3
30
+
31
+
32
+ #### 退市新规 ####
33
+ # 1 股价类:连续20个交易日估价低于1元
34
+ # 2 市值类: 主板小于5亿、创业板3亿
35
+ # 3 财务类: (1) 利润总额 净利润 扣非净利润三者最小值为负 且营业收入小于3亿 创业板营业收入小于1元
36
+ # (2) 资不抵债
37
+
38
+ # 财报审核
39
+ def financial_report_check(new_report_df, period_time, period, report_type):
40
+ if period == 4:
41
+ # 年报异常审核
42
+ year_report_exception_check(new_report_df, period_time, report_type)
43
+ # 负债过高
44
+ liability_ratio_check(report_type, new_report_df, period_time)
45
+
46
+
47
+ # 年报审核异常
48
+ def year_report_exception_check(new_report_df, period_time, report_type):
49
+ new_report_one_df = new_report_df.loc[new_report_df['REPORT_DATE'] == period_time]
50
+ # 审核意见
51
+ opinion_type = list(new_report_one_df['OPINION_TYPE'])[0]
52
+ symbol = list(new_report_one_df['SECURITY_CODE'])[0]
53
+ name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
54
+ now_date = datetime.now()
55
+ str_day = now_date.strftime('%Y-%m-%d')
56
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
57
+ id_key = symbol + "_" + period_time
58
+ # 年报有问题
59
+ if opinion_type != OPINION_TYPE:
60
+ black_list_service_api.save_black_stock(id_key,
61
+ symbol,
62
+ name,
63
+ str_day,
64
+ str_now_date,
65
+ '年报审计有问题',
66
+ '年报审计有问题',
67
+ '',
68
+ black_list_service_api.FINANCIAL_PROBLEM)
69
+
70
+ if report_type == db_name_constant.EM_STOCK_PROFIT:
71
+ # 利润总额 净利润 扣除非经常性损益后的净利润 三者最小为负
72
+ # 利润总额
73
+ total_profit = list(new_report_one_df['TOTAL_PROFIT'])[0]
74
+ # 净利润
75
+ net_profit = list(new_report_one_df['NETPROFIT'])[0]
76
+ # 营业利润
77
+ operate_profit = list(new_report_one_df['OPERATE_PROFIT'])[0]
78
+ # 持续经营净利润
79
+ continued_profit = list(new_report_one_df['CONTINUED_NETPROFIT'])[0]
80
+ # 归属于母公司股东的净利润
81
+ parent_profit = list(new_report_one_df['PARENT_NETPROFIT'])[0]
82
+ # 扣除非经常性损益后的净利润
83
+ deduct_parent_profit = list(new_report_one_df['DEDUCT_PARENT_NETPROFIT'])[0]
84
+ # 营业总收入
85
+ total_operate_income = list(new_report_one_df['TOTAL_OPERATE_INCOME'])[0]
86
+
87
+ # 最小利润收入
88
+ min_profit = min(total_profit, net_profit, operate_profit,
89
+ continued_profit, parent_profit, deduct_parent_profit)
90
+ if min_profit < 0:
91
+
92
+ classification = common_service_fun_api.classify_symbol_one(symbol)
93
+ if ((classification in ['S', 'H'] and total_operate_income < MIN_INCOME_MAIN)
94
+ | (classification in ['K', 'C'] and total_operate_income < MIN_INCOME_SUB)):
95
+ id_key = symbol + "_" + period_time
96
+ black_list_service_api.save_black_stock(id_key,
97
+ symbol,
98
+ name,
99
+ str_day,
100
+ str_now_date,
101
+ '年报&利润收入触发退市',
102
+ '年报&利润收入触发退市',
103
+ '',
104
+ black_list_service_api.FINANCIAL_PROBLEM)
105
+
106
+
107
+ # 负债比校验
108
+ def liability_ratio_check(report_type, new_report_df, period_time):
109
+ if report_type == db_name_constant.EM_STOCK_ASSET_LIABILITY:
110
+ new_report_df = new_report_df.sort_values(by=['REPORT_DATE'], ascending=False)
111
+ new_report_one_df = new_report_df.iloc[0:1]
112
+ # 负债比
113
+ liability_ratio = list(new_report_one_df['liability_ratio'])[0]
114
+
115
+ symbol = list(new_report_one_df['SECURITY_CODE'])[0]
116
+ name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
117
+ now_date = datetime.now()
118
+ str_day = now_date.strftime('%Y-%m-%d')
119
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
120
+ id_key = symbol + "_" + period_time
121
+
122
+ if liability_ratio >= MAX_LIABILITY_RATIO:
123
+ black_list_service_api.save_black_stock(id_key,
124
+ symbol,
125
+ name,
126
+ str_day,
127
+ str_now_date,
128
+ '负债过高',
129
+ '负债过高',
130
+ '',
131
+ black_list_service_api.FINANCIAL_PROBLEM)
132
+
133
+
134
+ # 未出财报
135
+ def un_report_check(sync_time, now_year, period, period_time):
136
+ un_report_asset_df = finance_common_api.find_un_report_symbol(period_time,
137
+ db_name_constant.EM_STOCK_ASSET_LIABILITY)
138
+ un_report_profit_df = finance_common_api.find_un_report_symbol(period_time,
139
+ db_name_constant.EM_STOCK_PROFIT)
140
+ un_report_df = pd.concat([un_report_asset_df, un_report_profit_df])
141
+ if period == 4 or period == 1:
142
+ last_report_day = str(now_year) + "-05-01"
143
+ elif period == 2:
144
+ last_report_day = str(now_year) + "-07-01"
145
+ elif period == 3:
146
+ last_report_day = str(now_year) + "-10-01"
147
+ max_report_day = trade_date_common_service_api.get_before_trade_date(last_report_day, LATE_REPORT_DAYS)
148
+ if max_report_day > sync_time:
149
+
150
+ for un_asset_one in un_report_df.itertuples():
151
+ symbol = un_asset_one.symbol
152
+ id_key = symbol + "_" + period_time
153
+ name = un_asset_one.name
154
+ now_date = datetime.now()
155
+ str_day = now_date.strftime('%Y-%m-%d')
156
+ try:
157
+
158
+ black_list_service_api.save_black_stock(id_key,
159
+ symbol,
160
+ name,
161
+ str_day,
162
+ sync_time,
163
+ '未出财报',
164
+ '未出财报',
165
+ '',
166
+ black_list_service_api.FINANCIAL_PROBLEM)
167
+ except Exception as e:
168
+ logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
@@ -0,0 +1,127 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ from datetime import datetime
9
+ import mns_common.api.em.east_money_stock_api as east_money_stock_api
10
+ import mns_scheduler.finance.finance_common_api as finance_common_api
11
+ import mns_common.constant.db_name_constant as db_name_constant
12
+ import mns_scheduler.finance.em_financial_profit_sync_service_api as em_financial_profit_sync_service_api
13
+ from mns_common.db.MongodbUtil import MongodbUtil
14
+ from loguru import logger
15
+ import \
16
+ mns_scheduler.finance.em_financial_asset_liability_sync_service_api as em_financial_asset_liability_sync_service_api
17
+ import mns_scheduler.finance.financial_high_risk_stock_clean_service_api as financial_high_risk_stock_clean_service_api
18
+ import mns_common.utils.data_frame_util as data_frame_util
19
+
20
+ mongodb_util = MongodbUtil('27017')
21
+
22
+
23
+ # 上市公司年报披露时间:每年1月1日一- 4月30日。
24
+ # 2、上市公司中年报披露时间:每年7月1日--8月30日。
25
+ # 3、上市公司季报披露时间:
26
+ # 1季报:每年4月1日-- -4月30日。
27
+ # 2季报(中报) :每年7月1日--8月30日。
28
+ # 3季报:每年10月1日--10月31日4季报(年报) :每年1月1日--4月30日
29
+
30
+ def sync_financial_report():
31
+ now_date = datetime.now()
32
+ now_year = now_date.year
33
+ now_month = now_date.month
34
+ sync_time = now_date.strftime('%Y-%m-%d %H:%M:%S')
35
+ # 年报
36
+ if 1 <= now_month <= 5:
37
+ period = 4
38
+ period_time = str(now_year - 1) + "-12-31 00:00:00"
39
+ sync_profit_report(period_time, sync_time, period, now_year)
40
+ sync_asset_liability_report(period_time, sync_time, period, now_year)
41
+
42
+ # 一季报
43
+ elif now_month == 5:
44
+ period = 1
45
+ period_time = str(now_year) + "-03-31 00:00:00"
46
+ sync_profit_report(period_time, sync_time, period, now_year)
47
+ sync_asset_liability_report(period_time, sync_time, period, now_year)
48
+
49
+ # 二季报
50
+ elif 7 <= now_month <= 8:
51
+ period = 2
52
+ period_time = str(now_year) + "-06-30 00:00:00"
53
+ sync_profit_report(period_time, sync_time, period, now_year)
54
+ sync_asset_liability_report(period_time, sync_time, period, now_year)
55
+ # 三季报
56
+ elif now_month == 10:
57
+ period = 3
58
+ period_time = str(now_year) + "-09-30 00:00:00"
59
+ sync_profit_report(period_time, sync_time, period, now_year)
60
+ sync_asset_liability_report(period_time, sync_time, period, now_year)
61
+ # 未出报告check
62
+ financial_high_risk_stock_clean_service_api.un_report_check(sync_time, now_year, period, period_time)
63
+
64
+
65
+ # 同步资产表
66
+ def sync_asset_liability_report(period_time, sync_time, period, now_year):
67
+ un_report_asset_df = find_un_report_symbol(period_time, db_name_constant.EM_STOCK_ASSET_LIABILITY)
68
+ for un_report_asset_one in un_report_asset_df.itertuples():
69
+ try:
70
+ symbol = un_report_asset_one.symbol
71
+ new_asset_df = em_financial_asset_liability_sync_service_api.get_em_asset_liability_api(symbol)
72
+ # 负债比
73
+ new_asset_df['liability_ratio'] = round(
74
+ new_asset_df['TOTAL_LIABILITIES'] * 100 / new_asset_df['TOTAL_ASSETS'],
75
+ 2)
76
+ new_asset_df['sync_time'] = sync_time
77
+ if data_frame_util.is_empty(new_asset_df):
78
+ continue
79
+ new_asset_df['symbol'] = symbol
80
+ mongodb_util.insert_mongo(new_asset_df, db_name_constant.EM_STOCK_ASSET_LIABILITY)
81
+
82
+ # 年报审核
83
+ financial_high_risk_stock_clean_service_api.financial_report_check(new_asset_df, period_time, period,
84
+ db_name_constant.EM_STOCK_ASSET_LIABILITY)
85
+
86
+ except Exception as e:
87
+ logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
88
+
89
+
90
+ # 同步利润表
91
+ def sync_profit_report(period_time, sync_time, period, now_year):
92
+ un_report_profit_df = find_un_report_symbol(period_time, db_name_constant.EM_STOCK_PROFIT)
93
+ for un_report_profit_one in un_report_profit_df.itertuples():
94
+ try:
95
+ symbol = un_report_profit_one.symbol
96
+ new_profit_df = em_financial_profit_sync_service_api.get_em_profit_api(symbol)
97
+ new_profit_df['sync_time'] = sync_time
98
+ if data_frame_util.is_empty(new_profit_df):
99
+ continue
100
+ new_profit_df['symbol'] = symbol
101
+ mongodb_util.insert_mongo(new_profit_df, db_name_constant.EM_STOCK_PROFIT)
102
+
103
+ # 年报审核
104
+ financial_high_risk_stock_clean_service_api.financial_report_check(new_profit_df, period_time,
105
+ period, db_name_constant.EM_STOCK_PROFIT)
106
+ except Exception as e:
107
+ logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
108
+
109
+
110
+ # 查出未报告的股票
111
+ def find_un_report_symbol(period_time, report_name):
112
+ real_time_quotes_df = east_money_stock_api.get_real_time_quotes_all_stocks()
113
+ if report_name == db_name_constant.EM_STOCK_ASSET_LIABILITY:
114
+ had_asset_df = finance_common_api.find_asset_liability_report(period_time)
115
+ if data_frame_util.is_not_empty(had_asset_df):
116
+ real_time_quotes_df = real_time_quotes_df.loc[
117
+ ~(real_time_quotes_df['symbol'].isin(list(had_asset_df['SECURITY_CODE'])))]
118
+ if report_name == db_name_constant.EM_STOCK_PROFIT:
119
+ had_profit_df = finance_common_api.find_profit_report(period_time)
120
+ if data_frame_util.is_not_empty(had_profit_df):
121
+ real_time_quotes_df = real_time_quotes_df.loc[
122
+ ~(real_time_quotes_df['symbol'].isin(list(had_profit_df['SECURITY_CODE'])))]
123
+ return real_time_quotes_df
124
+
125
+
126
+ if __name__ == '__main__':
127
+ sync_financial_report()
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,118 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import requests
9
+ import pandas as pd
10
+ from datetime import datetime
11
+ import mns_common.component.self_choose.black_list_service_api as black_list_service_api
12
+ import mns_common.utils.date_handle_util as date_handle_util
13
+ from loguru import logger
14
+ import mns_common.constant.db_name_constant as db_name_constant
15
+ from mns_common.db.MongodbUtil import MongodbUtil
16
+ import mns_common.utils.data_frame_util as data_frame_util
17
+
18
+ mongodb_util = MongodbUtil('27017')
19
+
20
+
21
+ # 立案调查股票
22
+ # http://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search&lastPage=index
23
+
24
+ def sync_investigate_stocks_api(page_num, page_size, search_key, begin_day, end_day):
25
+ url = ('http://www.cninfo.com.cn/new/hisAnnouncement/query?'
26
+ 'pageNum=' + str(page_num) +
27
+ '&pageSize=' + str(page_size) +
28
+ '&column=szse&tabName=fulltext&plate=&stock=&searchkey=' + search_key +
29
+ '&secid=&category=&trade=&seDate=' + begin_day +
30
+ '~' + end_day +
31
+ '&sortName=&sortType=&isHLtitle=true')
32
+
33
+ headers = {
34
+ "Content-Type": "application/json"
35
+ }
36
+ r = requests.post(url, headers=headers)
37
+ data_json = r.json()
38
+ total_record_num = data_json['totalRecordNum']
39
+ data_list = data_json['announcements']
40
+ data_df = pd.DataFrame(data_list)
41
+ result = {'total_record_num': total_record_num,
42
+ 'data_df': data_df}
43
+ return result
44
+
45
+
46
+ def sync_all_investigate_stocks(page_size, search_key, begin_day, end_day):
47
+ page_num = 1
48
+ data_result_df = None
49
+ while True:
50
+ result = sync_investigate_stocks_api(page_num, page_size, search_key, begin_day, end_day)
51
+ data_df = result['data_df']
52
+ if data_result_df is None:
53
+ data_result_df = data_df
54
+ else:
55
+ data_result_df = pd.concat([data_df, data_result_df])
56
+
57
+ if data_df.shape[0] < page_size:
58
+ break
59
+ page_num = page_num + 1
60
+ return data_result_df
61
+
62
+
63
+ # 立案调查的股票
64
+ def sync_new_high_risk_stocks():
65
+ before_days = 30
66
+ const_num = 30
67
+ init_date = datetime.now()
68
+ str_day = init_date.strftime('%Y-%m-%d')
69
+ # 过去30天新增风险股票
70
+ begin_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_day), -before_days)
71
+ begin_day = begin_date.strftime('%Y-%m-%d')
72
+ search_key = '立案'
73
+ new_high_risk_stocks_df = sync_all_investigate_stocks(const_num, search_key, begin_day, str_day)
74
+ if data_frame_util.is_empty(new_high_risk_stocks_df):
75
+ return None
76
+ new_high_risk_stocks_df = new_high_risk_stocks_df.sort_values(by=['announcementTime'], ascending=False)
77
+ for high_risk_stocks_one in new_high_risk_stocks_df.itertuples():
78
+ try:
79
+ symbol = high_risk_stocks_one.secCode
80
+ announcement_id = high_risk_stocks_one.announcementId
81
+
82
+ key_id = symbol + "_" + str(announcement_id)
83
+ query_exist = {"_id": key_id}
84
+ if mongodb_util.exist_data_query(db_name_constant.SELF_BLACK_STOCK,
85
+ query_exist):
86
+ continue
87
+ else:
88
+ announcement_time = high_risk_stocks_one.announcementTime
89
+ # 将毫秒转换为秒
90
+ seconds = announcement_time // 1000
91
+ # 使用datetime模块从秒转换为日期
92
+ announce_date = datetime.fromtimestamp(seconds)
93
+ announce_str_day = announce_date.strftime('%Y-%m-%d')
94
+ announce_time = announce_date.strftime('%Y-%m-%d %H:%M:%S')
95
+ announce_url = ('http://www.cninfo.com.cn/new/disclosure/detail?stockCode=' + str(symbol) +
96
+ '&announcementId=' + str(announcement_id) +
97
+ '&orgId=' + str(high_risk_stocks_one.orgId) +
98
+ '&announcementTime=' + announce_str_day)
99
+
100
+ black_list_service_api.save_black_stock(
101
+ key_id,
102
+ symbol,
103
+ high_risk_stocks_one.secName,
104
+ announce_str_day,
105
+ announce_time,
106
+ high_risk_stocks_one.announcementTitle,
107
+ high_risk_stocks_one.announcementTitle,
108
+ announce_url,
109
+ black_list_service_api.REGISTER_INVESTIGATE)
110
+ except Exception as e:
111
+ logger.error("保存风险警示股票异常:{},{}", symbol, e)
112
+
113
+
114
+ if __name__ == '__main__':
115
+ sync_new_high_risk_stocks()
116
+ result_df = sync_all_investigate_stocks(30, '立案', '2023-01-01', '2024-05-15')
117
+ result_df = result_df.sort_values(by=['announcementTime'], ascending=False)
118
+ print(result_df)
@@ -6,6 +6,7 @@ end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
 
9
+ import mns_scheduler.risk.register_and_investigate_stock_sync_api as register_and_investigate_stock_sync_api
9
10
  from loguru import logger
10
11
  from apscheduler.schedulers.blocking import BlockingScheduler
11
12
  from datetime import datetime
@@ -312,6 +313,12 @@ def sync_kpl_best_his_quotes():
312
313
  logger.info('同步开盘啦当日精选指数行情数据任务完成')
313
314
 
314
315
 
316
+ # 同步被立案调查的股票
317
+ def sync_new_high_risk_stocks():
318
+ logger.info('同步被立案调查的股票')
319
+ register_and_investigate_stock_sync_api.sync_new_high_risk_stocks()
320
+
321
+
315
322
  # # 定义BlockingScheduler
316
323
  blockingScheduler = BlockingScheduler()
317
324
  # sync_trade_date 同步交易日期
@@ -384,6 +391,9 @@ blockingScheduler.add_job(sync_kpl_best_his_quotes, 'cron', hour='18,22', minute
384
391
  # 更新开盘啦指数关系
385
392
  blockingScheduler.add_job(sync_position, 'cron', hour='0,08', minute='10')
386
393
 
394
+ # 同步被立案调查的股票
395
+ blockingScheduler.add_job(sync_new_high_risk_stocks, 'cron', hour='0,09', minute='20')
396
+
387
397
  print('定时任务启动成功')
388
398
  blockingScheduler.start()
389
399
  #
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.0.4.6
3
+ Version: 1.0.4.8
4
4
 
@@ -33,6 +33,11 @@ mns_scheduler/db/db_status.py,sha256=K1jtYIGZzDV6knpoJLLnXEhN3tyziJp_zY2gSfguHCA
33
33
  mns_scheduler/dt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
34
34
  mns_scheduler/dt/stock_dt_pool_sync.py,sha256=5ivRUOnFtOapZniwTbujf1lVq3y4btm2Cmd5R6JJAVo,3466
35
35
  mns_scheduler/finance/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
36
+ mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py,sha256=7Y5Nc2yzF19LD0j0pqSUtWdeOA08QFgjTfFtfQnF0vA,17231
37
+ mns_scheduler/finance/em_financial_profit_sync_service_api.py,sha256=KZm4cGXJbcRRCbvK08ftf2QP9VWr8UqLAfAJOskte50,13875
38
+ mns_scheduler/finance/finance_common_api.py,sha256=yPE0at1WFDyYZ3IAjkgCj6xMH7gPp8sAkJsYj5jhmLk,1075
39
+ mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py,sha256=ilf5eAWJT9SKXQJbMP-GLp3H-nY7m5MMn-asaTAMMq0,8328
40
+ mns_scheduler/finance/sync_financial_report_service_api.py,sha256=e8ZHmnXr9LOjJc3LuQ1_t9g-5NEDsmjTQn85wVMCQMM,6007
36
41
  mns_scheduler/k_line/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
37
42
  mns_scheduler/k_line/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
38
43
  mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=3NPu-bkBw5ARW2yoMAmf_-au6vxQdSjzGlT-l4dqV4w,21833
@@ -51,6 +56,8 @@ mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py,sha256=WRK-Pu0
51
56
  mns_scheduler/real_time/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
52
57
  mns_scheduler/real_time/realtime_quotes_now_create_db_index.py,sha256=qQCjcsG3WYgn3zemS45Ms0AHtbkCwlSVPPCntxVvK8Q,1066
53
58
  mns_scheduler/real_time/realtime_quotes_now_sync.py,sha256=XIz454cysRO-xfdgsEw3glR0LgTxFdZoCNONd4O7EgM,9165
59
+ mns_scheduler/risk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
60
+ mns_scheduler/risk/register_and_investigate_stock_sync_api.py,sha256=_6Eh5nPQu5KJ0lherAmB8e-pnk8UHsX3WGZ-Xfqk7Fc,4949
54
61
  mns_scheduler/trade/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
55
62
  mns_scheduler/trade/auto_ipo_buy_api.py,sha256=QXNzFJGNGveVUcXBh0RRJb_HV7abbLYXRljezPJf9ZM,377
56
63
  mns_scheduler/trade/auto_sell_service_api.py,sha256=HaauZeOsuLNBrowXT8IKaSgWLR2Huott6mg_AoLhpUY,4423
@@ -64,9 +71,9 @@ mns_scheduler/zt/today_high_chg_pool_sync_api.py,sha256=G6FXMH7HnvhyMFoE-RszggkB
64
71
  mns_scheduler/zt/zt_five_boards_sync_api.py,sha256=HfjPHKD99fU9c37kSenEX2_qNvFAjQGgy8ERuacSxwk,10916
65
72
  mns_scheduler/zt/zt_pool_sync_api.py,sha256=RrVAbU1u-HTqXF9BSwNlzIxMHrUgjNaLpDKFgXC1XuY,7604
66
73
  mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
67
- mns_scheduler/zz_task/data_sync_task.py,sha256=kS8HR6OZcsre3MWOyHFKEqG-S2v3SKUeezDLh5pCn5w,15670
74
+ mns_scheduler/zz_task/data_sync_task.py,sha256=P75noN2J8YOqht_wyTN5IOZ6NPeTIKhRN4SPZhe6x2A,16100
68
75
  mns_scheduler/zz_task/sync_realtime_quotes_task.py,sha256=DN3bq2XCDZC-PHlbD2NTog48bR44EruIEc2QVGKg7Tk,932
69
- mns_scheduler-1.0.4.6.dist-info/METADATA,sha256=sJ-dI0AER3Y4Kch_aBT5k0KOC7wkNdGImv0cx3Rc7eg,64
70
- mns_scheduler-1.0.4.6.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
71
- mns_scheduler-1.0.4.6.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
72
- mns_scheduler-1.0.4.6.dist-info/RECORD,,
76
+ mns_scheduler-1.0.4.8.dist-info/METADATA,sha256=gXAIfuOiGUMYWRx8O7hafzW4UAkN5R8Kg1BM0ciSgl8,64
77
+ mns_scheduler-1.0.4.8.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
78
+ mns_scheduler-1.0.4.8.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
79
+ mns_scheduler-1.0.4.8.dist-info/RECORD,,