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.
- mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py +436 -0
- mns_scheduler/finance/em_financial_profit_sync_service_api.py +340 -0
- mns_scheduler/finance/finance_common_api.py +35 -0
- mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py +168 -0
- mns_scheduler/finance/sync_financial_report_service_api.py +127 -0
- mns_scheduler/risk/__init__.py +7 -0
- mns_scheduler/risk/register_and_investigate_stock_sync_api.py +118 -0
- mns_scheduler/zz_task/data_sync_task.py +10 -0
- {mns_scheduler-1.0.4.6.dist-info → mns_scheduler-1.0.4.8.dist-info}/METADATA +1 -1
- {mns_scheduler-1.0.4.6.dist-info → mns_scheduler-1.0.4.8.dist-info}/RECORD +12 -5
- {mns_scheduler-1.0.4.6.dist-info → mns_scheduler-1.0.4.8.dist-info}/WHEEL +0 -0
- {mns_scheduler-1.0.4.6.dist-info → mns_scheduler-1.0.4.8.dist-info}/top_level.txt +0 -0
|
@@ -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,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
|
#
|
|
@@ -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=
|
|
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.
|
|
70
|
-
mns_scheduler-1.0.4.
|
|
71
|
-
mns_scheduler-1.0.4.
|
|
72
|
-
mns_scheduler-1.0.4.
|
|
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,,
|
|
File without changes
|
|
File without changes
|