mns-scheduler 1.1.5.3__py3-none-any.whl → 1.1.5.6__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.

@@ -401,7 +401,12 @@ def get_recent_year_income(symbol, company_info_type, exist_company_df):
401
401
  em_stock_profit = mongodb_util.descend_query(query, db_name_constant.EM_STOCK_PROFIT, 'REPORT_DATE', 1)
402
402
  if data_frame_util.is_not_empty(em_stock_profit):
403
403
  company_info_type['operate_profit'] = list(em_stock_profit['OPERATE_PROFIT'])[0]
404
- company_info_type['total_operate_income'] = list(em_stock_profit['TOTAL_OPERATE_INCOME'])[0]
404
+ total_operate_income = list(em_stock_profit['TOTAL_OPERATE_INCOME'])[0]
405
+ # 金融机构大多收入计入在这个字段中
406
+ if total_operate_income == 0:
407
+ total_operate_income = list(em_stock_profit['OPERATE_INCOME'])[0]
408
+
409
+ company_info_type['total_operate_income'] = total_operate_income
405
410
  else:
406
411
  company_info_type['operate_profit'] = 0
407
412
  company_info_type['total_operate_income'] = 0
@@ -17,6 +17,7 @@ import mns_scheduler.risk.financial_report_risk_check_api as financial_report_ri
17
17
  import mns_common.utils.data_frame_util as data_frame_util
18
18
  import mns_scheduler.finance.finance_common_api as finance_common_api
19
19
  import mns_scheduler.risk.compliance.undisclosed_annual_report_api as undisclosed_annual_report_api
20
+
20
21
  mongodb_util = MongodbUtil('27017')
21
22
 
22
23
 
@@ -58,6 +59,10 @@ def sync_financial_report():
58
59
  period_time = str(now_year) + "-09-30 00:00:00"
59
60
  sync_profit_report(period_time, sync_time, period)
60
61
  sync_asset_liability_report(period_time, sync_time, period)
62
+ else:
63
+
64
+ sync_miss_report(sync_time)
65
+
61
66
  # 未出报告check
62
67
  undisclosed_annual_report_api.un_disclosed_report_check(sync_time, now_year, period, period_time)
63
68
 
@@ -82,7 +87,7 @@ def sync_asset_liability_report(period_time, sync_time, period):
82
87
 
83
88
  # 年报审核
84
89
  financial_report_risk_check_api.financial_report_check(new_asset_df, period_time, period,
85
- db_name_constant.EM_STOCK_ASSET_LIABILITY)
90
+ db_name_constant.EM_STOCK_ASSET_LIABILITY)
86
91
 
87
92
  except Exception as e:
88
93
  logger.error("同步资产表异常:{},{},{}", symbol, period_time, e)
@@ -104,10 +109,43 @@ def sync_profit_report(period_time, sync_time, period):
104
109
 
105
110
  # 年报审核
106
111
  financial_report_risk_check_api.financial_report_check(new_profit_df, period_time,
107
- period, db_name_constant.EM_STOCK_PROFIT)
112
+ period, db_name_constant.EM_STOCK_PROFIT)
108
113
  except Exception as e:
109
114
  logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
110
115
 
111
116
 
117
+ def sync_miss_report(sync_time):
118
+ query = {"total_operate_income": 0}
119
+ un_report_company_info = mongodb_util.find_query_data(db_name_constant.COMPANY_INFO, query)
120
+ for un_report_one in un_report_company_info.itertuples():
121
+ try:
122
+ symbol = un_report_one.symbol
123
+ new_profit_df = em_financial_profit_sync_service_api.get_em_profit_api(symbol)
124
+ if data_frame_util.is_empty(new_profit_df):
125
+ continue
126
+ new_profit_df['sync_time'] = sync_time
127
+
128
+ new_profit_df['symbol'] = symbol
129
+ mongodb_util.insert_mongo(new_profit_df, db_name_constant.EM_STOCK_PROFIT)
130
+
131
+ new_asset_df = em_financial_asset_liability_sync_service_api.get_em_asset_liability_api(symbol)
132
+ # 负债比
133
+ new_asset_df['liability_ratio'] = round(
134
+ new_asset_df['TOTAL_LIABILITIES'] * 100 / new_asset_df['TOTAL_ASSETS'],
135
+ 2)
136
+ new_asset_df['sync_time'] = sync_time
137
+ if data_frame_util.is_empty(new_asset_df):
138
+ continue
139
+ new_asset_df['symbol'] = symbol
140
+ mongodb_util.insert_mongo(new_asset_df, db_name_constant.EM_STOCK_ASSET_LIABILITY)
141
+
142
+ except Exception as e:
143
+ logger.error("同步财报补偿任务异常:{},{},{}", symbol, e)
144
+
145
+
112
146
  if __name__ == '__main__':
113
- sync_financial_report()
147
+ now_date = datetime.now()
148
+ now_year = now_date.year
149
+ now_month = now_date.month
150
+ sync_time_test = now_date.strftime('%Y-%m-%d %H:%M:%S')
151
+ sync_miss_report(sync_time_test)
@@ -63,7 +63,7 @@ def sync_hk_company_info():
63
63
  hk_real_time_df['_id'] = hk_real_time_df['symbol']
64
64
 
65
65
  hk_real_time_df.fillna(0, inplace=True)
66
-
66
+ mongodb_util.remove_all_data(db_name_constant.COMPANY_INFO_HK)
67
67
  mongodb_util.save_mongo(hk_real_time_df, db_name_constant.COMPANY_INFO_HK)
68
68
 
69
69
 
@@ -0,0 +1,69 @@
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.api.em.east_money_stock_hk_api as east_money_stock_hk_api
10
+ import akshare as ak
11
+ import mns_common.constant.db_name_constant as db_name_constant
12
+ from mns_common.db.MongodbUtil import MongodbUtil
13
+ from functools import lru_cache
14
+ import mns_common.component.common_service_fun_api as common_service_fun_api
15
+ import mns_common.component.zt.zt_common_service_api as zt_common_service_api
16
+
17
+ mongodb_util = MongodbUtil('27017')
18
+
19
+
20
+ # 获取陆股通的列表
21
+ @lru_cache(maxsize=None)
22
+ def get_hk_ggt_component():
23
+ stock_hk_ggt_components_em_df = ak.stock_hk_ggt_components_em()
24
+ stock_hk_ggt_components_em_df = stock_hk_ggt_components_em_df.rename(columns={
25
+ "序号": "index",
26
+ "代码": "symbol",
27
+ "名称": "name"
28
+ })
29
+ return stock_hk_ggt_components_em_df
30
+
31
+
32
+ # 获取em cookie
33
+ @lru_cache(maxsize=None)
34
+ def get_em_cookie():
35
+ query = {"type": "em_cookie"}
36
+ stock_account_info = mongodb_util.find_query_data(db_name_constant.STOCK_ACCOUNT_INFO, query)
37
+ cookie = list(stock_account_info['cookie'])[0]
38
+ return cookie
39
+
40
+
41
+ def sync_hk_company_industry():
42
+ cookie = get_em_cookie()
43
+ hk_real_time_df = east_money_stock_hk_api.hk_real_time_quotes(cookie)
44
+
45
+ hk_real_time_df = hk_real_time_df[[
46
+ "symbol",
47
+ "name",
48
+ "chg",
49
+ "total_mv",
50
+ "flow_mv",
51
+ "list_date",
52
+ "industry",
53
+ "amount",
54
+ "now_price"
55
+ ]]
56
+ hk_real_time_df = hk_real_time_df.loc[(hk_real_time_df['total_mv'] != '-')]
57
+ hk_real_time_df['total_mv'] = hk_real_time_df['total_mv'].astype(float)
58
+ hk_real_time_df['flow_mv'] = hk_real_time_df['flow_mv'].astype(float)
59
+ hk_real_time_df = hk_real_time_df.loc[hk_real_time_df['total_mv'] != 0]
60
+
61
+ hk_real_time_df.loc[hk_real_time_df['industry'] == '-', 'industry'] = '其他'
62
+
63
+ group_industry_df = zt_common_service_api.group_by_industry(hk_real_time_df, 'industry')
64
+ group_industry_df['_id'] = group_industry_df['industry']
65
+ mongodb_util.remove_all_data(db_name_constant.HK_COMPANY_INDUSTRY)
66
+ mongodb_util.save_mongo(group_industry_df, db_name_constant.HK_COMPANY_INDUSTRY)
67
+
68
+ if __name__ == '__main__':
69
+ sync_hk_company_industry()
@@ -16,6 +16,7 @@ from loguru import logger
16
16
  import mns_common.utils.data_frame_util as data_frame_util
17
17
  import mns_common.component.common_service_fun_api as common_service_fun_api
18
18
  import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
19
+ import mns_common.api.ths.zt.ths_stock_zt_pool_v2_api as ths_stock_zt_pool_v2_api
19
20
 
20
21
  '''
21
22
  东方财富涨停池
@@ -37,8 +38,8 @@ ZT_FIELD = ['_id', 'symbol', 'name', 'now_price', 'chg', 'first_closure_time',
37
38
  'ths_concept_code', 'ths_concept_sync_day', 'em_industry',
38
39
  'mv_circulation_ratio', 'ths_concept_list_info', 'kpl_plate_name',
39
40
  'kpl_plate_list_info', 'company_type', 'diff_days', 'symbol', 'amount',
40
- 'quantity_ratio', 'high', 'low', 'high', 'low', 'open', 'list_date',
41
- 'exchange', 'wei_bi', 'flow_mv', 'total_mv', 'buy_1_num',
41
+ 'list_date',
42
+ 'exchange', 'flow_mv', 'total_mv',
42
43
  'classification', 'flow_mv_sp', 'total_mv_sp', 'flow_mv_level',
43
44
  'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day']
44
45
 
@@ -59,7 +60,7 @@ def save_zt_info(str_day):
59
60
  stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data)
60
61
  try:
61
62
  # 同花顺问财涨停池
62
- ths_zt_pool_df_data = ths_stock_zt_pool_api.get_real_time_zt_info()
63
+ ths_zt_pool_df_data = ths_stock_zt_pool_v2_api.get_ths_stock_zt_reason_with_cache(str_day)
63
64
 
64
65
  # del stock_em_zt_pool_df_data['ths_concept_name']
65
66
  # del stock_em_zt_pool_df_data['ths_concept_code']
@@ -74,22 +75,6 @@ def save_zt_info(str_day):
74
75
  continue
75
76
  stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_reason'] = \
76
77
  list(ths_zt_pool_one_df['zt_reason'])[0]
77
-
78
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'quantity_ratio'] = \
79
- list(ths_zt_pool_one_df['quantity_ratio'])[0]
80
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'high'] = \
81
- list(ths_zt_pool_one_df['high'])[0]
82
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'low'] = \
83
- list(ths_zt_pool_one_df['low'])[0]
84
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'open'] = \
85
- list(ths_zt_pool_one_df['open'])[0]
86
-
87
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'wei_bi'] = \
88
- list(ths_zt_pool_one_df['wei_bi'])[0]
89
-
90
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'buy_1_num'] = \
91
- list(ths_zt_pool_one_df['buy_1_num'])[0]
92
-
93
78
  except BaseException as e:
94
79
  logger.error("出现异常:{}", e)
95
80
  except BaseException as e:
@@ -132,7 +117,7 @@ def save_zt_info(str_day):
132
117
 
133
118
 
134
119
  if __name__ == '__main__':
135
- save_zt_info('2024-07-22')
120
+ save_zt_info('2024-09-30')
136
121
  # from datetime import datetime
137
122
  #
138
123
  # if __name__ == '__main__':
@@ -230,6 +230,8 @@ if __name__ == '__main__':
230
230
  # trade_date = '2024-08-01'
231
231
  # zt_df = ths_zt_pool(trade_date, None)
232
232
  # save_ths_zt_pool(zt_df, trade_date)
233
+ trade_date = '2024-09-30'
234
+ zt_df = ths_zt_pool(trade_date, None)
233
235
 
234
236
  query = {"$and": [{'_id': {"$gte": '2013-07-04'}}, {'_id': {"$lte": '2015-04-30'}}]}
235
237
  # query = {"$and": [{'_id': {"$gte": '2024-07-24'}}, {'_id': {"$lte": '2024-08-01'}}]}
@@ -52,6 +52,8 @@ import mns_scheduler.db.real_time_task_check as real_time_task_check_api
52
52
  import mns_scheduler.trade.task.trader_task_service as trader_task_service
53
53
  import mns_scheduler.company_info.remark.company_remark_info_sync as company_remark_info_sync
54
54
  import mns_scheduler.finance.sync_financial_report_service_api as sync_financial_report_service_api
55
+ import mns_scheduler.hk.hk_industry_info_sync_service_api as hk_industry_info_sync_service_api
56
+ import mns_scheduler.hk.hk_company_info_sync_service_api as hk_company_info_sync_service_api
55
57
 
56
58
 
57
59
  # 同步交易日期任务完成
@@ -374,6 +376,14 @@ def sync_financial_report_task():
374
376
  sync_financial_report_service_api.sync_financial_report()
375
377
 
376
378
 
379
+ # 同步hk公司信息
380
+ def sync_hk_company_industry_info():
381
+ # 同步所有港股信息
382
+ hk_company_info_sync_service_api.sync_hk_company_info()
383
+ # 同步所有港股行业信息
384
+ hk_industry_info_sync_service_api.sync_hk_company_industry()
385
+
386
+
377
387
  # # 定义BlockingScheduler
378
388
  blockingScheduler = BlockingScheduler()
379
389
  # sync_trade_date 同步交易日期
@@ -465,6 +475,10 @@ blockingScheduler.add_job(sync_company_remark_info, 'cron', hour='22', minute='3
465
475
  blockingScheduler.add_job(self_choose_stock_task, 'cron', hour='17,22', minute='30')
466
476
  # 同步财务报表任务
467
477
  blockingScheduler.add_job(sync_financial_report_task, 'cron', hour='17', minute='30')
478
+
479
+ # 同步港股公司和行业信息
480
+ blockingScheduler.add_job(sync_hk_company_industry_info, 'cron', hour='09,19', minute='10')
481
+
468
482
  print('定时任务启动成功')
469
483
  blockingScheduler.start()
470
484
  #
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.1.5.3
3
+ Version: 1.1.5.6
4
4
 
@@ -5,7 +5,7 @@ mns_scheduler/big_deal/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9
5
5
  mns_scheduler/big_deal/ths_big_deal_sync.py,sha256=aMFj-_pLprh4vGjSSzmr_tlYoPA0L4Lm0SkLRkQwIiw,4564
6
6
  mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
7
7
  mns_scheduler/company_info/base/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
8
- mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=ELPKg-9R3J1f_PKqXwpYJXg7OAdRNEdt0e5la4W2d4M,19394
8
+ mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=AAylhSj6Ca8s0NoeWdCEdB4Uva3VDeAlvz-4rwAzrEw,19627
9
9
  mns_scheduler/company_info/clean/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
10
10
  mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=n3kxsqihPjKJvGDkAjMYqB_U2EPemOi1Yjez5yOYJeo,4858
11
11
  mns_scheduler/company_info/constant/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -43,9 +43,10 @@ mns_scheduler/finance/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1t
43
43
  mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py,sha256=kEZQZkxB7RF7UPH4DmHoRWfEKgI61ZN8BcNOzmBUoV0,19417
44
44
  mns_scheduler/finance/em_financial_profit_sync_service_api.py,sha256=A_ONxC-1giGUWUhMJG1fE6jem52uJYtzlewzxPZtdd0,14270
45
45
  mns_scheduler/finance/finance_common_api.py,sha256=_cjNHntTgXVbsfDT5F5KtCV_QNq2gbclgZ8UxrgGP64,2471
46
- mns_scheduler/finance/sync_financial_report_service_api.py,sha256=YSSVt5R1EqYbW8C3JH4ng2iq7UkQynAMA1ye6G4iecw,5086
46
+ mns_scheduler/finance/sync_financial_report_service_api.py,sha256=45udF-6soKULbIxTrJWDXkWkg55F5ajJX0G2mH6Fv38,6625
47
47
  mns_scheduler/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
48
- mns_scheduler/hk/hk_company_info_sync_service_api.py,sha256=S5h55Igzumlzfikc0Dez47aL_pD2JkYoZVqVvjeUg2E,2257
48
+ mns_scheduler/hk/hk_company_info_sync_service_api.py,sha256=WdzrWH0cjTfEHMBzT0__nlmMjy7Vqbr1-X9lemv3OM8,2323
49
+ mns_scheduler/hk/hk_industry_info_sync_service_api.py,sha256=RUcmguyIMgh9xI09XyM7_So2E1_r1F36EEU-V-EYVio,2409
49
50
  mns_scheduler/irm/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
50
51
  mns_scheduler/irm/stock_irm_cninfo_service.py,sha256=mTwD7ZYKk9XlA3KD1SQWz2A8-OKAH2mdUl2A9Pzwrz8,9560
51
52
  mns_scheduler/irm/api/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -125,11 +126,11 @@ mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py,sha256=aTrYgshcccoH
125
126
  mns_scheduler/zt/script/sync_high_chg_pool_his_data.py,sha256=dtREQdNpoDM4KLTvdXuiEhXmdjpc1dScMDgR3fbEbww,1685
126
127
  mns_scheduler/zt/script/sync_now_higt_chg_zt.py,sha256=bhoIGDWTI3w0YKVfIAVNHWpUrYqJYDMGPt-1i3d_Zmw,1850
127
128
  mns_scheduler/zt/zt_pool/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
128
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=x3-NCugHoY5IuX2s1UOUMl8DZsi9nrtMbEGzxWqJj3c,7642
129
- mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py,sha256=LJVGqJyLn04oC-Xp59RVE1IOz7lx6ao78bw9l67sKBM,10382
129
+ mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=Y2TattsWufh8rSYxN5szSU_F5dnRELEdcA8jgF-h6Zo,6603
130
+ mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py,sha256=Sy39T-yFwLSIIoSZqQzS-6-W1RlaFWvYpksEXKQVFdI,10456
130
131
  mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
131
- mns_scheduler/zz_task/data_sync_task.py,sha256=OK6ynbUuMehQmPgIbrn3lZmY9_TDj1IUgaCHp0H3tgE,19613
132
- mns_scheduler-1.1.5.3.dist-info/METADATA,sha256=CsygKJLXdLrlylyqdpyurTaE1tKhMcg6iASXnA71oBE,64
133
- mns_scheduler-1.1.5.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
134
- mns_scheduler-1.1.5.3.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
135
- mns_scheduler-1.1.5.3.dist-info/RECORD,,
132
+ mns_scheduler/zz_task/data_sync_task.py,sha256=DczJjItL2JjaDd_bNAkviXtDdZIhTiwIox90q9qw4Qk,20200
133
+ mns_scheduler-1.1.5.6.dist-info/METADATA,sha256=C1O6d1PTatClun2cwTJXW-WNb3_8fCi1M9hT5hz8MdY,64
134
+ mns_scheduler-1.1.5.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
135
+ mns_scheduler-1.1.5.6.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
136
+ mns_scheduler-1.1.5.6.dist-info/RECORD,,