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

Files changed (28) hide show
  1. mns_scheduler/common/redis/redis_msg_push_service.py +18 -0
  2. mns_scheduler/company_info/clean/company_info_clean_api.py +1 -1
  3. mns_scheduler/concept/clean/ths_concept_clean_api.py +56 -50
  4. mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +24 -29
  5. mns_scheduler/concept/{common → ths}/detaill/ths_concept_detail_api.py +34 -6
  6. mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +19 -26
  7. mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +9 -21
  8. mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +12 -8
  9. mns_scheduler/risk/self/wei_pan_stock_api.py +1 -1
  10. mns_scheduler/zz_task/data_sync_task.py +1 -1
  11. {mns_scheduler-1.1.3.6.dist-info → mns_scheduler-1.1.4.0.dist-info}/METADATA +1 -1
  12. {mns_scheduler-1.1.3.6.dist-info → mns_scheduler-1.1.4.0.dist-info}/RECORD +17 -27
  13. mns_scheduler/backup/data/collection_move.py +0 -53
  14. mns_scheduler/backup/data/sync_data_to_local.py +0 -55
  15. mns_scheduler/backup/data/sync_remote_by_str_day.py +0 -33
  16. mns_scheduler/backup/em/__init__.py +0 -7
  17. mns_scheduler/backup/em/em_new_concept_his_sync.py +0 -99
  18. mns_scheduler/backup/em/em_new_concept_sync_common_api.py +0 -139
  19. mns_scheduler/backup/em/em_new_concept_sync_web.py +0 -55
  20. mns_scheduler/backup/ths/sync_ths_concept_by_ak_api.py +0 -103
  21. mns_scheduler/backup/ths/sync_ths_new_concept_by_web_api.py +0 -88
  22. mns_scheduler/concept/common/__init__.py +0 -0
  23. mns_scheduler/concept/common/detaill/__init__.py +0 -0
  24. /mns_scheduler/{backup → common}/__init__.py +0 -0
  25. /mns_scheduler/{backup/data → common/redis}/__init__.py +0 -0
  26. /mns_scheduler/{backup/ths → concept/ths/detaill}/__init__.py +0 -0
  27. {mns_scheduler-1.1.3.6.dist-info → mns_scheduler-1.1.4.0.dist-info}/WHEEL +0 -0
  28. {mns_scheduler-1.1.3.6.dist-info → mns_scheduler-1.1.4.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,18 @@
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 redis
9
+ import mns_common.constant.redis_msg_constant as redis_msg_constant
10
+
11
+ # 连接到Redis服务器
12
+ r = redis.Redis(host='localhost', port=6379, db=0)
13
+
14
+
15
+ # 发送消息
16
+ def send_redis_msg(message):
17
+ # 将消息推送到队列中
18
+ r.publish(redis_msg_constant.REDIS_MSG_TOPIC, message)
@@ -11,7 +11,7 @@ from datetime import datetime
11
11
  from loguru import logger
12
12
  import mns_scheduler.company_info.constant.company_constant_data as company_constant_data
13
13
  import mns_common.constant.db_name_constant as db_name_constant
14
- import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
14
+ import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
15
15
  import mns_scheduler.company_info.base.sync_company_base_info_api as company_info_sync_api
16
16
 
17
17
  mongodb_util = MongodbUtil('27017')
@@ -7,11 +7,12 @@ project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
  from mns_common.db.MongodbUtil import MongodbUtil
9
9
  import pandas as pd
10
- import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
10
+ import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
11
11
  import time
12
12
  from loguru import logger
13
13
  import mns_common.component.company.company_common_service_api as company_common_service_api
14
14
  import mns_common.constant.db_name_constant as db_name_constant
15
+ import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
15
16
 
16
17
  mongodb_util = MongodbUtil('27017')
17
18
 
@@ -21,59 +22,64 @@ def update_ths_concept_info():
21
22
  ths_concept_list = mongodb_util.find_all_data(db_name_constant.THS_CONCEPT_LIST)
22
23
  for ths_concept_one in ths_concept_list.itertuples():
23
24
  try:
24
- query = {'concept_code': ths_concept_one.symbol}
25
- ths_stock_concept_detail_df = (mongodb_util
26
- .find_query_data(db_name_constant.THS_STOCK_CONCEPT_DETAIL, query))
27
- concept_count = ths_stock_concept_detail_df.shape[0]
28
- ths_concept_list_one_df = ths_concept_list.loc[ths_concept_list['symbol'] == ths_concept_one.symbol]
29
- ths_concept_list_one_df['concept_count'] = concept_count
30
-
31
- ths_stock_concept_detail_df = ths_stock_concept_detail_df.reset_index(drop=True)
32
- if 'industry' in ths_stock_concept_detail_df.columns:
33
- del ths_stock_concept_detail_df['industry']
34
-
35
- company_info_df = company_common_service_api.get_company_info_industry()
36
- company_info_df = company_info_df[['_id', 'industry']]
37
- company_info_df = company_info_df.loc[
38
- company_info_df['_id'].isin(list(ths_stock_concept_detail_df['symbol']))]
39
- company_info_df = company_info_df.set_index(['_id'], drop=True)
40
-
41
- ths_stock_concept_detail_df = ths_stock_concept_detail_df.set_index(['symbol'], drop=False)
42
- ths_stock_concept_detail_df = pd.merge(ths_stock_concept_detail_df, company_info_df,
43
- how='outer',
44
- left_index=True, right_index=True)
45
- ths_stock_concept_detail_df.dropna(subset=['industry'], axis=0, inplace=True)
46
-
47
- grouped = ths_stock_concept_detail_df.groupby('industry')
48
- result_list = grouped.size()
49
- ths_concept_group = pd.DataFrame(result_list, columns=['number'])
50
- ths_concept_group['industry'] = ths_concept_group.index
51
- ths_concept_group = ths_concept_group.sort_values(by=['number'], ascending=False)
52
- if ths_concept_group.shape[0] >= 2:
53
- first_relevance_industry = list(ths_concept_group.iloc[0:1]['industry'])[0]
54
- first_relevance_industry_number = list(ths_concept_group.iloc[0:1]['number'])[0]
55
- second_relevance_industry = list(ths_concept_group.iloc[1:2]['industry'])[0]
56
- second_relevance_industry_number = list(ths_concept_group.iloc[1:2]['number'])[0]
57
- else:
58
- first_relevance_industry = list(ths_concept_group.iloc[0:1]['industry'])[0]
59
- first_relevance_industry_number = list(ths_concept_group.iloc[0:1]['number'])[0]
60
- second_relevance_industry = '无'
61
- second_relevance_industry_number = 0
62
- ths_concept_list_one_df['first_relevance_industry'] = first_relevance_industry
63
- ths_concept_list_one_df['second_relevance_industry'] = second_relevance_industry
64
- ths_concept_list_one_df['first_relevance_industry_number'] = first_relevance_industry_number
65
- ths_concept_list_one_df['second_relevance_industry_number'] = second_relevance_industry_number
66
-
67
- ths_stock_concept_detail_df['first_relevance_industry'] = first_relevance_industry
68
- ths_stock_concept_detail_df['second_relevance_industry'] = second_relevance_industry
69
-
70
- mongodb_util.save_mongo(ths_concept_list_one_df, db_name_constant.THS_CONCEPT_LIST)
71
- mongodb_util.save_mongo(ths_stock_concept_detail_df, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
72
-
25
+ update_one_concept_relevance_industry(ths_concept_one.symbol)
73
26
  except BaseException as e:
74
27
  logger.error("更新概念信息异常:{},{}", e, ths_concept_one.name)
75
28
 
76
29
 
30
+ # 更新一个概念行业相关
31
+ def update_one_concept_relevance_industry(concept_code):
32
+ query = {'concept_code': concept_code}
33
+ ths_stock_concept_detail_df = (mongodb_util
34
+ .find_query_data(db_name_constant.THS_STOCK_CONCEPT_DETAIL, query))
35
+ concept_count = ths_stock_concept_detail_df.shape[0]
36
+ ths_concept_list = ths_concept_common_service_api.get_all_ths_concept()
37
+ ths_concept_list_one_df = ths_concept_list.loc[ths_concept_list['symbol'] == concept_code]
38
+ ths_concept_list_one_df['concept_count'] = concept_count
39
+
40
+ ths_stock_concept_detail_df = ths_stock_concept_detail_df.reset_index(drop=True)
41
+ if 'industry' in ths_stock_concept_detail_df.columns:
42
+ del ths_stock_concept_detail_df['industry']
43
+
44
+ company_info_df = company_common_service_api.get_company_info_industry()
45
+ company_info_df = company_info_df[['_id', 'industry']]
46
+ company_info_df = company_info_df.loc[
47
+ company_info_df['_id'].isin(list(ths_stock_concept_detail_df['symbol']))]
48
+ company_info_df = company_info_df.set_index(['_id'], drop=True)
49
+
50
+ ths_stock_concept_detail_df = ths_stock_concept_detail_df.set_index(['symbol'], drop=False)
51
+ ths_stock_concept_detail_df = pd.merge(ths_stock_concept_detail_df, company_info_df,
52
+ how='outer',
53
+ left_index=True, right_index=True)
54
+ ths_stock_concept_detail_df.dropna(subset=['industry'], axis=0, inplace=True)
55
+
56
+ grouped = ths_stock_concept_detail_df.groupby('industry')
57
+ result_list = grouped.size()
58
+ ths_concept_group = pd.DataFrame(result_list, columns=['number'])
59
+ ths_concept_group['industry'] = ths_concept_group.index
60
+ ths_concept_group = ths_concept_group.sort_values(by=['number'], ascending=False)
61
+ if ths_concept_group.shape[0] >= 2:
62
+ first_relevance_industry = list(ths_concept_group.iloc[0:1]['industry'])[0]
63
+ first_relevance_industry_number = list(ths_concept_group.iloc[0:1]['number'])[0]
64
+ second_relevance_industry = list(ths_concept_group.iloc[1:2]['industry'])[0]
65
+ second_relevance_industry_number = list(ths_concept_group.iloc[1:2]['number'])[0]
66
+ else:
67
+ first_relevance_industry = list(ths_concept_group.iloc[0:1]['industry'])[0]
68
+ first_relevance_industry_number = list(ths_concept_group.iloc[0:1]['number'])[0]
69
+ second_relevance_industry = '无'
70
+ second_relevance_industry_number = 0
71
+ ths_concept_list_one_df['first_relevance_industry'] = first_relevance_industry
72
+ ths_concept_list_one_df['second_relevance_industry'] = second_relevance_industry
73
+ ths_concept_list_one_df['first_relevance_industry_number'] = first_relevance_industry_number
74
+ ths_concept_list_one_df['second_relevance_industry_number'] = second_relevance_industry_number
75
+
76
+ ths_stock_concept_detail_df['first_relevance_industry'] = first_relevance_industry
77
+ ths_stock_concept_detail_df['second_relevance_industry'] = second_relevance_industry
78
+
79
+ mongodb_util.save_mongo(ths_concept_list_one_df, db_name_constant.THS_CONCEPT_LIST)
80
+ mongodb_util.save_mongo(ths_stock_concept_detail_df, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
81
+
82
+
77
83
  # 更新空名字
78
84
  def update_null_name():
79
85
  query = {"_id": {'$gte': 886025}}
@@ -13,32 +13,27 @@ mongodb_util = MongodbUtil('27017')
13
13
  import mns_common.api.msg.push_msg_api as push_msg_api
14
14
  import mns_scheduler.company_info.base.sync_company_base_info_api as company_info_sync_api
15
15
  import mns_scheduler.company_info.clean.company_info_clean_api as company_info_clean_api
16
- import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
16
+ import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
17
17
  import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
18
18
  import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
19
19
  import mns_common.utils.data_frame_util as data_frame_util
20
20
  import mns_common.constant.db_name_constant as db_name_constant
21
+ import mns_scheduler.common.redis.redis_msg_push_service as redis_msg_push_service
22
+ import mns_scheduler.concept.clean.ths_concept_clean_api as ths_concept_clean_api
23
+ import mns_common.constant.redis_msg_constant as redis_msg_constant
21
24
 
22
- max_concept_code = 886110
23
25
 
24
- order_fields = [
25
- "index",
26
- "symbol",
27
- "name",
28
- "now_price",
29
- "chg",
30
- "change",
31
- "exchange",
32
- "amount",
33
- "concept_code",
34
- ]
35
-
36
-
37
- # 推送到手机
38
- def push_msg_to_we_chat_web(concept_code, concept_name, url):
26
+ # 推送消息
27
+ def push_msg_to_we_chat_and_redis(concept_code, concept_name, url):
39
28
  msg = "概念代码:" + str(concept_code) + "," + "概念名称:" + concept_name + "," + "url: " + url
40
29
  title = "新增同花顺概念:" + str(concept_code) + "-" + concept_name
30
+ # 推送到微信
41
31
  push_msg_api.push_msg_to_wechat(title, msg)
32
+ # 项目之前推送消息
33
+ redis_msg_push_service.send_redis_msg(redis_msg_constant.THS_NEW_CONCEPT_ADD_MSG)
34
+
35
+ # 更新ths概念信息
36
+ ths_concept_clean_api.update_ths_concept_info()
42
37
 
43
38
 
44
39
  # 保存新概念信息到数据库
@@ -50,18 +45,6 @@ def save_ths_concept_list(concept_code, concept_name, str_day, str_now_time):
50
45
  mongodb_util.save_mongo(ths_concept_list, 'ths_concept_list')
51
46
 
52
47
 
53
- # 获取最大概念代码
54
- def get_max_concept_code():
55
- query = {"symbol": {'$ne': 'null'}, "success": True}
56
- ths_concept_max = mongodb_util.descend_query(query, 'ths_concept_list', 'symbol', 1)
57
- if ths_concept_max.shape[0] == 0:
58
- concept_code = 885284
59
- else:
60
- concept_code = list(ths_concept_max['symbol'])[0]
61
-
62
- return concept_code
63
-
64
-
65
48
  # 保存新概念详细信息到数据库
66
49
  def save_ths_concept_detail(new_concept_symbol_df,
67
50
  concept_name, str_day,
@@ -179,6 +162,18 @@ def update_company_info(new_concept_symbol_df):
179
162
  company_common_service_api.company_info_industry_cache_clear()
180
163
 
181
164
 
165
+ # 获取最大概念代码
166
+ def get_max_concept_code():
167
+ query = {"symbol": {'$ne': 'null'}, "success": True}
168
+ ths_concept_max = mongodb_util.descend_query(query, 'ths_concept_list', 'symbol', 1)
169
+ if ths_concept_max.shape[0] == 0:
170
+ concept_code = 885284
171
+ else:
172
+ concept_code = list(ths_concept_max['symbol'])[0]
173
+
174
+ return concept_code
175
+
176
+
182
177
  def get_concept_detail_info_web(concept_code):
183
178
  new_concept_symbol_list = ths_concept_detail_api.get_ths_concept_detail(concept_code, None)
184
179
  if new_concept_symbol_list is None or new_concept_symbol_list.shape[0] == 0:
@@ -16,6 +16,11 @@ import math
16
16
  from loguru import logger
17
17
  import pandas as pd
18
18
  import mns_common.utils.data_frame_util as data_frame_util
19
+ import time
20
+ from datetime import datetime
21
+ import mns_scheduler.concept.ths.common.ths_concept_sync_common_api as ths_concept_sync_common_api
22
+ import mns_scheduler.common.redis.redis_msg_push_service as redis_msg_push_service
23
+ import mns_common.constant.redis_msg_constant as redis_msg_constant
19
24
 
20
25
 
21
26
  def get_ths_concept_detail(concept_code, concept_name):
@@ -55,6 +60,9 @@ def get_ths_concept_detail(concept_code, concept_name):
55
60
  not_in_ths_concept_detail_by_explain = result_df.loc[~(
56
61
  result_df['symbol'].isin(ths_concept_detail_by_explain['symbol']))]
57
62
  result_df = pd.concat([ths_concept_detail_by_explain_new, not_in_ths_concept_detail_by_explain])
63
+ result_df['concept_code'] = concept_code
64
+ result_df['change'] = 0
65
+ result_df['index'] = 0
58
66
  return result_df
59
67
 
60
68
 
@@ -188,10 +196,30 @@ def merge_data_common_fun(result_df, real_time_quotes_all_stocks):
188
196
  return result_df
189
197
 
190
198
 
199
+ # 同步概念详情到db
200
+ def sync_ths_concept_detail_to_db(concept_code, concept_name):
201
+ new_concept_symbol_detail_df = get_ths_concept_detail(concept_code, concept_name)
202
+ if data_frame_util.is_empty(new_concept_symbol_detail_df):
203
+ time.sleep(10)
204
+ return None
205
+ now_date = datetime.now()
206
+ str_now_time = now_date.strftime('%Y-%m-%d %H:%M:%S')
207
+ time.sleep(1)
208
+ str_day = now_date.strftime('%Y-%m-%d')
209
+ new_concept_symbol_detail_df.loc[:, 'way'] = 'index_sync'
210
+ ths_concept_sync_common_api.save_ths_concept_detail(new_concept_symbol_detail_df,
211
+ concept_name,
212
+ str_day,
213
+ str_now_time, concept_code)
214
+
215
+ # 项目之前推送消息
216
+ redis_msg_push_service.send_redis_msg(redis_msg_constant.THS_NEW_CONCEPT_ADD_MSG)
217
+
218
+
191
219
  if __name__ == '__main__':
192
- get_ths_concept_detail('886080', '财税数字化')
193
- real_time_quotes_all_stocks_df = east_money_stock_api.get_real_time_quotes_all_stocks()
194
- get_ths_concept_detail_by_explain('886078', real_time_quotes_all_stocks_df)
195
- get_ths_concept_detail_from_web('886078', real_time_quotes_all_stocks_df)
196
- get_ths_concept_detail('886073', '铜缆高速连接')
197
- get_ths_concept_detail_by_wen_cai('PCB概念', real_time_quotes_all_stocks_df)
220
+ sync_ths_concept_detail_to_db('886084', '光纤概念')
221
+ # real_time_quotes_all_stocks_df = east_money_stock_api.get_real_time_quotes_all_stocks()
222
+ # get_ths_concept_detail_by_explain('886084', real_time_quotes_all_stocks_df)
223
+ # get_ths_concept_detail_from_web('886084', real_time_quotes_all_stocks_df)
224
+ # get_ths_concept_detail('886084', '光纤概念')
225
+ # get_ths_concept_detail_by_wen_cai('光纤概念', real_time_quotes_all_stocks_df)
@@ -14,10 +14,13 @@ from mns_common.db.MongodbUtil import MongodbUtil
14
14
  from datetime import datetime
15
15
  import mns_scheduler.concept.clean.ths_concept_clean_api as ths_concept_clean_api
16
16
  import pandas as pd
17
- import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
17
+ import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
18
18
  import mns_common.constant.db_name_constant as db_name_constant
19
+ import mns_scheduler.common.redis.redis_msg_push_service as redis_msg_push_service
20
+ import mns_common.constant.redis_msg_constant as redis_msg_constant
19
21
 
20
22
  mongodb_util = MongodbUtil('27017')
23
+ import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
21
24
 
22
25
 
23
26
  def sync_ths_concept_new_index():
@@ -28,17 +31,17 @@ def sync_ths_concept_new_index():
28
31
 
29
32
 
30
33
  '''
31
- 同步ths新概念 通过app搜索
34
+ 同步ths新概念 通过app搜索代码
32
35
  '''
33
36
 
34
37
 
35
38
  def sync_ths_concept_new_index_from_app():
36
39
  # 当前最大概念代码
37
40
  max_concept_code = ths_concept_sync_common_api.get_max_concept_code()
38
- # 最大概念代码上线
41
+ # 最大概念代码上限
39
42
  max_concept_code_limit = max_concept_code + 2
40
43
  # 同花顺概念列表
41
- ths_concept_list_exist = mongodb_util.find_all_data(db_name_constant.THS_CONCEPT_LIST)
44
+ ths_concept_list_exist = ths_concept_common_service_api.get_all_ths_concept()
42
45
  # 同步向上3次
43
46
  while max_concept_code <= max_concept_code_limit:
44
47
  try:
@@ -76,16 +79,10 @@ def sync_ths_concept_new_index_from_app():
76
79
  diff_one_df = pd.DataFrame(new_concept_one, index=[1])
77
80
  mongodb_util.save_mongo(diff_one_df, db_name_constant.THS_CONCEPT_LIST)
78
81
  # 新增概念信息处理
79
- handle_new_concept_msg(concept_code, concept_name, url)
80
-
81
- new_concept_symbol_detail_df = ths_concept_detail_api.get_ths_concept_detail(concept_code, concept_name)
82
- if data_frame_util.is_empty(new_concept_symbol_detail_df):
83
- continue
84
- new_concept_symbol_detail_df.loc[:, 'way'] = 'index_sync'
85
- ths_concept_sync_common_api.save_ths_concept_detail(new_concept_symbol_detail_df,
86
- concept_name,
87
- str_day,
88
- str_now_time, concept_code)
82
+ ths_concept_sync_common_api.push_msg_to_we_chat_and_redis(concept_code, concept_name,
83
+ url)
84
+ # 同步概念详情到db
85
+ ths_concept_detail_api.sync_ths_concept_detail_to_db(concept_code, concept_name)
89
86
  # 更新ths概念统计信息
90
87
  ths_concept_clean_api.update_ths_concept_info()
91
88
 
@@ -96,7 +93,7 @@ def sync_ths_concept_new_index_from_app():
96
93
 
97
94
 
98
95
  '''
99
- 同步新概念 by ths detail
96
+ 同步新概念 by ths detail 通过详情判断
100
97
  '''
101
98
 
102
99
 
@@ -142,7 +139,8 @@ def sync_ths_concept_new_index_from_detail():
142
139
  diff_one_df = pd.DataFrame(new_concept_one, index=[1])
143
140
  mongodb_util.save_mongo(diff_one_df, db_name_constant.THS_CONCEPT_LIST)
144
141
  # 新增概念信息处理
145
- handle_new_concept_msg(concept_code, concept_name, url)
142
+ ths_concept_sync_common_api.push_msg_to_we_chat_and_redis(concept_code, concept_name,
143
+ url)
146
144
 
147
145
  new_concept_symbol_detail_df.loc[:, 'way'] = 'index_sync'
148
146
  ths_concept_sync_common_api.save_ths_concept_detail(new_concept_symbol_detail_df,
@@ -150,21 +148,16 @@ def sync_ths_concept_new_index_from_detail():
150
148
  str_day,
151
149
  str_now_time,
152
150
  concept_code)
153
- # 更新ths概念统计信息
154
- ths_concept_clean_api.update_ths_concept_info()
155
151
 
156
152
  logger.info("新增同花顺新概念:{}", concept_name)
157
153
 
158
154
  except BaseException as e:
159
155
  logger.error("同步新增概念代码:{},信息异常:{}", max_concept_code, e)
160
-
161
-
162
- # 新增消息处理
163
- def handle_new_concept_msg(concept_code, concept_name, url):
164
- # 推送新概念信息到微信
165
- ths_concept_sync_common_api.push_msg_to_we_chat_web(concept_code, concept_name,
166
- url)
156
+ # 更新ths概念统计信息
157
+ ths_concept_clean_api.update_ths_concept_info()
158
+ # 项目之前推送消息
159
+ redis_msg_push_service.send_redis_msg(redis_msg_constant.THS_NEW_CONCEPT_ADD_MSG)
167
160
 
168
161
 
169
162
  if __name__ == '__main__':
170
- sync_ths_concept_new_index_from_detail()
163
+ sync_ths_concept_new_index()
@@ -5,36 +5,24 @@ file_path = os.path.abspath(__file__)
5
5
  end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
-
9
- import time
10
8
  import datetime
11
- from mns_common.db.MongodbUtil import MongodbUtil
12
- import mns_scheduler.concept.ths.common.ths_concept_sync_common_api as ths_concept_sync_common_api
13
-
14
- mongodb_util = MongodbUtil('27017')
9
+ import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
10
+ import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
11
+ from loguru import logger
15
12
 
16
13
 
17
14
  # 通过概念指数同步所有概念下的股票组成
18
15
 
19
16
  # 同步概念下所有股票组成
20
17
  def update_concept_all_detail_info():
21
- query = {"symbol": {'$exists': True}}
22
- new_concept_list = mongodb_util.find_query_data("ths_concept_list", query)
18
+ new_concept_list = ths_concept_common_service_api.get_all_ths_concept()
23
19
  new_concept_list = new_concept_list.sort_values(by=['symbol'], ascending=False)
24
- if new_concept_list.shape[0] > 0:
25
- for one_concept in new_concept_list.itertuples():
26
- now_date_time = datetime.datetime.now()
27
- str_day = now_date_time.strftime('%Y-%m-%d')
28
- str_now_time = now_date_time.strftime('%Y-%m-%d %H:%M:%S')
29
- new_concept_symbol_df = ths_concept_sync_common_api.get_concept_detail_info_web(one_concept.symbol)
30
20
 
31
- if new_concept_symbol_df is None or new_concept_symbol_df.shape[0] == 0:
32
- time.sleep(10)
33
- continue
34
- time.sleep(1)
35
- new_concept_symbol_df.loc[:, 'way'] = 'index_sync'
36
- ths_concept_sync_common_api.save_ths_concept_detail(new_concept_symbol_df, one_concept.name,
37
- str_day, str_now_time, one_concept.symbol)
21
+ for one_concept in new_concept_list.itertuples():
22
+ try:
23
+ ths_concept_detail_api.sync_ths_concept_detail_to_db(one_concept.symbol, one_concept.name)
24
+ except BaseException as e:
25
+ logger.error("同步概念下所有股票组成异常:{},{},{}", one_concept.symbol, one_concept.name, e)
38
26
 
39
27
 
40
28
  if __name__ == '__main__':
@@ -1,6 +1,5 @@
1
1
  import os
2
2
  import sys
3
- import pandas as pd
4
3
  import mns_common.api.ths.concept.web.ths_concept_detail_web as ths_concept_detail_web
5
4
  import mns_common.api.em.east_money_stock_api as east_money_stock_api
6
5
  import mns_common.component.common_service_fun_api as common_service_fun_api
@@ -13,6 +12,9 @@ import mns_scheduler.concept.ths.common.ths_concept_sync_common_api as ths_conce
13
12
  import threading
14
13
  import mns_scheduler.concept.ths.common.ths_concept_update_common_api as ths_concept_update_common_api
15
14
  import mns_common.utils.date_handle_util as date_handle_util
15
+ import mns_common.constant.db_name_constant as db_name_constant
16
+ import mns_scheduler.common.redis.redis_msg_push_service as redis_msg_push_service
17
+ import mns_common.constant.redis_msg_constant as redis_msg_constant
16
18
 
17
19
  file_path = os.path.abspath(__file__)
18
20
  end = file_path.index('mns') + 17
@@ -21,16 +23,16 @@ sys.path.append(project_path)
21
23
  mongodb_util = MongodbUtil('27017')
22
24
  # 分页大小
23
25
  MAX_PAGE_NUMBER = 2500
24
- # 获取单只股票新增概念
25
26
 
26
- db_name = 'ths_stock_concept_detail_app'
27
+
28
+ # 获取单只股票新增概念
27
29
 
28
30
 
29
31
  def create_index():
30
- mongodb_util.create_index(db_name, [("symbol", 1)])
31
- mongodb_util.create_index(db_name, [("str_day", 1)])
32
- mongodb_util.create_index(db_name, [("title", 1)])
33
- mongodb_util.create_index(db_name, [("str_now_date", 1)])
32
+ mongodb_util.create_index(db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP, [("symbol", 1)])
33
+ mongodb_util.create_index(db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP, [("str_day", 1)])
34
+ mongodb_util.create_index(db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP, [("title", 1)])
35
+ mongodb_util.create_index(db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP, [("str_now_date", 1)])
34
36
 
35
37
 
36
38
  # 同步新概念到详情表中
@@ -52,6 +54,8 @@ def sync_new_concept_to_ths_detail(symbol_add_new_concept_df, str_day, str_now_t
52
54
 
53
55
  except BaseException as e:
54
56
  logger.error("转换同花顺概念异常:{},{}", new_concept_one, e)
57
+ # 项目之前推送消息
58
+ redis_msg_push_service.send_redis_msg(redis_msg_constant.THS_NEW_CONCEPT_ADD_MSG)
55
59
 
56
60
 
57
61
  # 保存数据到对比
@@ -60,7 +64,7 @@ def save_data_to_db(ths_concept_df):
60
64
  if data_frame_util.is_empty(ths_concept_df):
61
65
  return
62
66
  json_data = ths_concept_df.to_dict(orient='records')
63
- mongodb_util.save_mongo_json(json_data, db_name)
67
+ mongodb_util.save_mongo_json(json_data, db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP)
64
68
 
65
69
 
66
70
  # 对比数据库和接口概念详情的差值
@@ -6,7 +6,7 @@ end = file_path.index('mns') + 16
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
 
9
- import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
9
+ import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
10
10
  import mns_common.component.self_choose.black_list_service_api as black_list_service_api
11
11
  from datetime import datetime
12
12
  from loguru import logger
@@ -437,7 +437,7 @@ blockingScheduler.add_job(update_best_choose_plate_relation, 'cron', hour='09,18
437
437
  blockingScheduler.add_job(sync_kpl_best_his_quotes, 'cron', hour='18,22', minute='25')
438
438
 
439
439
  # 更新开盘啦指数关系
440
- blockingScheduler.add_job(sync_position, 'cron', hour='0,08', minute='10')
440
+ blockingScheduler.add_job(sync_position, 'cron', hour='0,09', minute='10')
441
441
 
442
442
  # 同步高风险股票
443
443
  blockingScheduler.add_job(sync_high_risk_stocks, 'cron', hour='0,09,12,16', minute='20')
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.1.3.6
3
+ Version: 1.1.4.0
4
4
 
@@ -1,23 +1,14 @@
1
1
  mns_scheduler/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
2
- mns_scheduler/backup/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
3
- mns_scheduler/backup/data/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
4
- mns_scheduler/backup/data/collection_move.py,sha256=WZN6-312jBbWrNqXCSk-0yTQ60ajUUWAqr2exVfotKU,2005
5
- mns_scheduler/backup/data/sync_data_to_local.py,sha256=o_kEcBoG8-CjLS7f_cXUBMo_z5MHn2z1WYnaobNDW90,1737
6
- mns_scheduler/backup/data/sync_remote_by_str_day.py,sha256=uEi-8j5gqRvWoJwIJGAr1Dc7UCmpXAh7q1IMS-Z88Fw,1220
7
- mns_scheduler/backup/em/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
8
- mns_scheduler/backup/em/em_new_concept_his_sync.py,sha256=Yqbuz9VE9433o0Z6BvDo5adhj3lK4vmN66XNQBIdC1k,4992
9
- mns_scheduler/backup/em/em_new_concept_sync_common_api.py,sha256=KnNCf0KXy31GFwF1-wbbkfDM-H7-cEtcVoCwl4QmoVs,7083
10
- mns_scheduler/backup/em/em_new_concept_sync_web.py,sha256=wVS0yLyPYzpcxfWAuUqmqbYkjw9wjpo48CvLSZFckzw,2334
11
- mns_scheduler/backup/ths/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- mns_scheduler/backup/ths/sync_ths_concept_by_ak_api.py,sha256=8QBiRKc0Q3ez-kBwvz7G8HrFDD_ANd8smOpQtGyvKIs,5371
13
- mns_scheduler/backup/ths/sync_ths_new_concept_by_web_api.py,sha256=dLd2V67AFnE9xf5H8YGyaJ0j7z8FhtTemFVGOuOeHJ4,4087
14
2
  mns_scheduler/big_deal/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
15
3
  mns_scheduler/big_deal/ths_big_deal_sync.py,sha256=aMFj-_pLprh4vGjSSzmr_tlYoPA0L4Lm0SkLRkQwIiw,4564
4
+ mns_scheduler/common/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
5
+ mns_scheduler/common/redis/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
6
+ mns_scheduler/common/redis/redis_msg_push_service.py,sha256=uJxiwc5SVQnAX7Pc_w7tgXBK_H2SP1LhjgdL2QZQnm8,472
16
7
  mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
17
8
  mns_scheduler/company_info/base/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
18
9
  mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=NRuwc5oJF9Ngt932OrnG76oP22OmkjbGgcWKgWplafg,19106
19
10
  mns_scheduler/company_info/clean/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
20
- mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=Pn2cRt3oRH-VRkHMZdsp-nJTFWrD5VSVRoH_uI_8-j0,4861
11
+ mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=n3kxsqihPjKJvGDkAjMYqB_U2EPemOi1Yjez5yOYJeo,4858
21
12
  mns_scheduler/company_info/constant/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
22
13
  mns_scheduler/company_info/constant/company_constant_data.py,sha256=XIM81fA4PNalVJNBYXiMddkcW012fFtofoPGYy2VtD0,16001
23
14
  mns_scheduler/company_info/de_list_stock/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -27,19 +18,18 @@ mns_scheduler/company_info/remark/company_remark_info_sync.py,sha256=hzQ8uBK4-od
27
18
  mns_scheduler/concept/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
28
19
  mns_scheduler/concept/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
29
20
  mns_scheduler/concept/clean/kpl_concept_clean_api.py,sha256=xxIIgrXLI6xLf10t4unJa7aMB_QeKeki1HJVeXsntkY,4512
30
- mns_scheduler/concept/clean/ths_concept_clean_api.py,sha256=42sbd8VqJeOKxJuxLVsU9YFK_YUSePTGrK2AWbabhA0,5964
31
- mns_scheduler/concept/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- mns_scheduler/concept/common/detaill/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- mns_scheduler/concept/common/detaill/ths_concept_detail_api.py,sha256=Au_l7SVcp4kRaR2vo1FP3BmYHeRI9fkOk_sTwzpRYw4,9435
21
+ mns_scheduler/concept/clean/ths_concept_clean_api.py,sha256=wxdT5Eb3awHW9HuFlgSe8-C6sC6TNaDYozr8VvNdYe0,5953
34
22
  mns_scheduler/concept/ths/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
35
23
  mns_scheduler/concept/ths/common/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
36
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py,sha256=CDo5d2dA36a99bS4vxg2ZRdSc-l_NwPSzmkxjAWLyFY,8146
24
+ mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py,sha256=nvPo4EW7nsULLoZhRF5E5a6Qm4svd6EScWUsB0MmDa0,8416
37
25
  mns_scheduler/concept/ths/common/ths_concept_update_common_api.py,sha256=4BQT3A9t-nDIyCpILgRZF7ZOgK1oabp-gJl5nyWvKWc,4418
26
+ mns_scheduler/concept/ths/detaill/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py,sha256=qPJllFhy9BSM4LOCAbQ5MLhpOvP3oNxlwzhgvHFKsn4,10784
38
28
  mns_scheduler/concept/ths/sync_new_index/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
39
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py,sha256=9ol2cvxSO2Ot4Z5fmlo9tUPFe6WwsuVX_H9ogtv3QrI,7841
29
+ mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py,sha256=vNe9Wt0yTiPLj0svA-2H4Pd94P9yr1kNM0EJmaw85uE,7621
40
30
  mns_scheduler/concept/ths/update_concept_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
41
- mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py,sha256=wlsr70rcS-uAH6b8NXPbA-wG37saeIQ0FIg8vSSTXQA,1920
42
- mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py,sha256=HVqDSBruORebtiliKps2swJo_GNg_8mqT0r9cZX6sj8,8839
31
+ mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py,sha256=wwuLfjj9AnFcHP-oQPC5AhpwgZ8IsPiNUh-Z6swcngA,1380
32
+ mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py,sha256=nwDsH3wD_EXf4HHtwEsj0HFezGdIe0MPB-r6l8WOjY8,9305
43
33
  mns_scheduler/db/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
44
34
  mns_scheduler/db/col_move_service.py,sha256=-d3JUCjWyaGKBhyUSkqwpCgZtHkIy1JOasgpxmH74zg,4057
45
35
  mns_scheduler/db/db_status.py,sha256=e5eW5ZSm5J7tHvmxxhFmFdbZb2_oB_SAcdcFqc4KDmw,733
@@ -102,7 +92,7 @@ mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py,sha256=SQ7dieSCO
102
92
  mns_scheduler/risk/major_violations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
93
  mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py,sha256=_xPQxT6OS7J7_PtA7hbfCmMS7VzpZTWoZUOXzwoesUs,5672
104
94
  mns_scheduler/risk/self/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
- mns_scheduler/risk/self/wei_pan_stock_api.py,sha256=osU3XrPZXDzPdtVCq601ZlSTZUqIhGxoXsowWgPAM4w,1902
95
+ mns_scheduler/risk/self/wei_pan_stock_api.py,sha256=5ebrjFqK49j_yEMffFBCumMeBzq_rmtsA4--lL5mhZs,1899
106
96
  mns_scheduler/risk/test/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
107
97
  mns_scheduler/risk/test/fix_blask_list.py,sha256=jjLhhIWH1L4CgNp2jQ_HAHbC3wVgeX1TzhqC--_D2MI,1249
108
98
  mns_scheduler/risk/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -137,8 +127,8 @@ mns_scheduler/zt/zt_pool/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJw
137
127
  mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=x3-NCugHoY5IuX2s1UOUMl8DZsi9nrtMbEGzxWqJj3c,7642
138
128
  mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py,sha256=LJVGqJyLn04oC-Xp59RVE1IOz7lx6ao78bw9l67sKBM,10382
139
129
  mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
140
- mns_scheduler/zz_task/data_sync_task.py,sha256=EexJz4F5WtyZ5N7qG3U6IzHHQwnvN-EqQEUxcTyRRyk,19069
141
- mns_scheduler-1.1.3.6.dist-info/METADATA,sha256=opxAG3nIDFb9cCSSwfu74O337LqTVNM3majHT4m9AP8,64
142
- mns_scheduler-1.1.3.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
143
- mns_scheduler-1.1.3.6.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
144
- mns_scheduler-1.1.3.6.dist-info/RECORD,,
130
+ mns_scheduler/zz_task/data_sync_task.py,sha256=KI7I5R4RFZ67KSzXJiObnIrsKecvvvMQpCFNMX1qHJQ,19069
131
+ mns_scheduler-1.1.4.0.dist-info/METADATA,sha256=yPwQkWkKLxLHIzzyZIWpcotteXG5QNZAF-7y25ISL3k,64
132
+ mns_scheduler-1.1.4.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
133
+ mns_scheduler-1.1.4.0.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
134
+ mns_scheduler-1.1.4.0.dist-info/RECORD,,