mns-scheduler 1.0.8.7__py3-none-any.whl → 1.4.3.2__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.
Files changed (156) hide show
  1. mns_scheduler/__init__.py +1 -3
  2. mns_scheduler/company_info/announce/company_announce_sync_service.py +65 -0
  3. mns_scheduler/company_info/{company_info_sync_api.py → base/sync_company_base_info_api.py} +239 -227
  4. mns_scheduler/company_info/base/sync_company_hold_info_api.py +37 -0
  5. mns_scheduler/company_info/base/sync_company_product_area_industry.py +161 -0
  6. mns_scheduler/company_info/clean/company_info_clean_api.py +133 -0
  7. mns_scheduler/company_info/constant/company_constant_data.py +497 -0
  8. mns_scheduler/company_info/{de_list_stock_service.py → de_list_stock/de_list_stock_service.py} +1 -1
  9. mns_scheduler/company_info/em_stock_info/__init__.py +7 -0
  10. mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +80 -0
  11. mns_scheduler/company_info/remark/__init__.py +7 -0
  12. mns_scheduler/company_info/remark/company_remark_info_sync.py +46 -0
  13. mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
  14. mns_scheduler/concept/clean/ths_concept_clean_api.py +74 -51
  15. mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +112 -56
  16. mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +6 -6
  17. mns_scheduler/concept/ths/detaill/__init__.py +0 -0
  18. mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +226 -0
  19. mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +169 -0
  20. mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +11 -23
  21. mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +19 -15
  22. mns_scheduler/db/col_move_service.py +10 -7
  23. mns_scheduler/db/db_status.py +1 -1
  24. mns_scheduler/db/script/__init__.py +7 -0
  25. mns_scheduler/db/script/col_move_script.py +45 -0
  26. mns_scheduler/db/script/db_move/__init__.py +7 -0
  27. mns_scheduler/db/script/db_move/col_move_one_service.py +34 -0
  28. mns_scheduler/db/script/sync/__init__.py +7 -0
  29. mns_scheduler/db/script/sync/local_mongo_util.py +231 -0
  30. mns_scheduler/db/script/sync/remote_data_sync_to_local.py +105 -0
  31. mns_scheduler/db/script/sync/remote_mongo_util.py +306 -0
  32. mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +80 -0
  33. mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +69 -0
  34. mns_scheduler/db/script/update/__init__.py +7 -0
  35. mns_scheduler/db/script/update/update_col_field.py +36 -0
  36. mns_scheduler/finance/__init__.py +1 -1
  37. mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +3 -3
  38. mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +30 -25
  39. mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +4 -4
  40. mns_scheduler/finance/sync_financial_report_service_task.py +202 -0
  41. mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
  42. mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
  43. mns_scheduler/hk/__init__.py +1 -1
  44. mns_scheduler/hk/hk_company_info_sync_service_api.py +49 -5
  45. mns_scheduler/hk/hk_industry_info_sync_service_api.py +68 -0
  46. mns_scheduler/industry/__init__.py +7 -0
  47. mns_scheduler/industry/ths/__init__.py +7 -0
  48. mns_scheduler/industry/ths/ths_industry_index_service.py +58 -0
  49. mns_scheduler/industry/ths/ths_industry_sync_service.py +68 -0
  50. mns_scheduler/irm/__init__.py +1 -1
  51. mns_scheduler/irm/api/__init__.py +1 -1
  52. mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +1 -1
  53. mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
  54. mns_scheduler/irm/stock_irm_cninfo_service.py +15 -13
  55. mns_scheduler/k_line/clean/daily/__init__.py +1 -1
  56. mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +57 -7
  57. mns_scheduler/k_line/clean/daily/daily_k_line_service.py +16 -3
  58. mns_scheduler/k_line/clean/k_line_info_clean_impl.py +3 -2
  59. mns_scheduler/k_line/clean/k_line_info_clean_task.py +42 -31
  60. mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
  61. mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +125 -27
  62. mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +72 -17
  63. mns_scheduler/k_line/common/__init__.py +7 -0
  64. mns_scheduler/k_line/common/k_line_common_api.py +188 -0
  65. mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
  66. mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
  67. mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +77 -0
  68. mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +14 -14
  69. mns_scheduler/k_line/sync_status/__init__.py +7 -0
  70. mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
  71. mns_scheduler/k_line/test/__init__.py +7 -0
  72. mns_scheduler/k_line/test/k_line_info_clean_his_data.py +41 -0
  73. mns_scheduler/k_line/year_quarter/__init__.py +7 -0
  74. mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +76 -0
  75. mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +4 -2
  76. mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
  77. mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +12 -7
  78. mns_scheduler/lhb/__init__.py +1 -1
  79. mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
  80. mns_scheduler/open/__init__.py +1 -1
  81. mns_scheduler/open/sync_one_day_open_data_to_db_service.py +6 -22
  82. mns_scheduler/risk/__init__.py +1 -1
  83. mns_scheduler/risk/compliance/__init__.py +0 -0
  84. mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +71 -0
  85. mns_scheduler/risk/financial/__init__.py +0 -0
  86. mns_scheduler/risk/financial/annual_report_audit_check_api.py +54 -0
  87. mns_scheduler/risk/financial/net_assets_check_api.py +75 -0
  88. mns_scheduler/risk/financial/profit_income_check_api.py +80 -0
  89. mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +1 -0
  90. mns_scheduler/risk/financial_report_risk_check_api.py +42 -0
  91. mns_scheduler/risk/major_violations/__init__.py +0 -0
  92. mns_scheduler/risk/{register_and_investigate_stock_sync_api.py → major_violations/register_and_investigate_stock_sync_api.py} +17 -8
  93. mns_scheduler/risk/self/__init__.py +0 -0
  94. mns_scheduler/risk/{wei_pan_stock_api.py → self/wei_pan_stock_api.py} +10 -4
  95. mns_scheduler/risk/test/__init__.py +7 -0
  96. mns_scheduler/{finance → risk}/test/fix_blask_list.py +6 -10
  97. mns_scheduler/risk/transactions/__init__.py +0 -0
  98. mns_scheduler/risk/transactions/transactions_check_api.py +183 -0
  99. mns_scheduler/self_choose/__init__.py +7 -0
  100. mns_scheduler/self_choose/ths_self_choose_service.py +158 -0
  101. mns_scheduler/trade/auto_ipo_buy_api.py +2 -2
  102. mns_scheduler/trade/auto_login/__init__.py +7 -0
  103. mns_scheduler/trade/auto_login/trader_auto_service.py +32 -0
  104. mns_scheduler/trade/auto_sell_service_api.py +10 -8
  105. mns_scheduler/trade/balance/__init__.py +7 -0
  106. mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
  107. mns_scheduler/trade/sync_position_api.py +41 -8
  108. mns_scheduler/trade/task/__init__.py +7 -0
  109. mns_scheduler/trade/task/trader_task_service.py +65 -0
  110. mns_scheduler/trade/tfp/__init__.py +7 -0
  111. mns_scheduler/trade/tfp/stock_tfp_info_sync.py +56 -0
  112. mns_scheduler/zb/stock_zb_pool_sync.py +1 -15
  113. mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +2 -3
  114. mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +12 -8
  115. mns_scheduler/zt/open_data/kcx_high_chg_open_data_sync.py +10 -25
  116. mns_scheduler/zt/script/__init__.py +1 -1
  117. mns_scheduler/zt/script/fix_error_deal_day.py +41 -0
  118. mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -11
  119. mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
  120. mns_scheduler/zt/script/sync_now_higt_chg_zt.py +43 -0
  121. mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +413 -0
  122. mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +193 -0
  123. mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +58 -0
  124. mns_scheduler/zz_task/compensation/__init__.py +0 -0
  125. mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
  126. mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
  127. mns_scheduler/zz_task/data_sync_task.py +271 -121
  128. {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/METADATA +1 -1
  129. mns_scheduler-1.4.3.2.dist-info/RECORD +169 -0
  130. {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/WHEEL +1 -1
  131. mns_scheduler/backup/app/ths_new_concept_sync_app.py +0 -122
  132. mns_scheduler/backup/em/em_new_concept_his_sync.py +0 -99
  133. mns_scheduler/backup/em/em_new_concept_sync_common_api.py +0 -139
  134. mns_scheduler/backup/em/em_new_concept_sync_web.py +0 -55
  135. mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py +0 -51
  136. mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
  137. mns_scheduler/company_info/company_constant_data.py +0 -322
  138. mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py +0 -103
  139. mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py +0 -89
  140. mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py +0 -202
  141. mns_scheduler/finance/sync_financial_report_service_api.py +0 -113
  142. mns_scheduler/real_time/realtime_quotes_now_create_db_index.py +0 -27
  143. mns_scheduler/real_time/realtime_quotes_now_sync.py +0 -232
  144. mns_scheduler/risk/stock_equity_mortgage_sync_api.py +0 -32
  145. mns_scheduler/zt/zt_pool/zt_pool_sync_api.py +0 -151
  146. mns_scheduler/zz_task/sync_realtime_quotes_task.py +0 -28
  147. mns_scheduler-1.0.8.7.dist-info/RECORD +0 -112
  148. /mns_scheduler/{backup/app → company_info/announce}/__init__.py +0 -0
  149. /mns_scheduler/{backup/em → company_info/base}/__init__.py +0 -0
  150. /mns_scheduler/{backup/wen_cai → company_info/clean}/__init__.py +0 -0
  151. /mns_scheduler/{big_deal → company_info/constant}/__init__.py +0 -0
  152. /mns_scheduler/{real_time → company_info/de_list_stock}/__init__.py +0 -0
  153. /mns_scheduler/{backup → finance/em}/__init__.py +0 -0
  154. /mns_scheduler/finance/{test → xue_qiu}/__init__.py +0 -0
  155. /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
  156. {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/top_level.txt +0 -0
@@ -7,11 +7,13 @@ 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_common.api.ths.ths_stock_api as ths_stock_api
10
+ import mns_common.api.ths.concept.web.ths_concept_index_web as ths_concept_index_web
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
16
+ import mns_common.api.ths.concept.app.ths_concept_index_app as ths_concept_index_app
15
17
 
16
18
  mongodb_util = MongodbUtil('27017')
17
19
 
@@ -21,59 +23,78 @@ def update_ths_concept_info():
21
23
  ths_concept_list = mongodb_util.find_all_data(db_name_constant.THS_CONCEPT_LIST)
22
24
  for ths_concept_one in ths_concept_list.itertuples():
23
25
  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
-
26
+ update_one_concept_relevance_industry(ths_concept_one.symbol)
73
27
  except BaseException as e:
74
28
  logger.error("更新概念信息异常:{},{}", e, ths_concept_one.name)
75
29
 
76
30
 
31
+ # 更新一个概念行业相关
32
+ def update_one_concept_relevance_industry(concept_code):
33
+ query = {'concept_code': concept_code}
34
+ ths_stock_concept_detail_df = (mongodb_util
35
+ .find_query_data(db_name_constant.THS_STOCK_CONCEPT_DETAIL, query))
36
+ concept_count = ths_stock_concept_detail_df.shape[0]
37
+ ths_concept_list = ths_concept_common_service_api.get_all_ths_concept()
38
+ ths_concept_list_one_df = ths_concept_list.loc[ths_concept_list['symbol'] == concept_code]
39
+ ths_concept_list_one_df['concept_count'] = concept_count
40
+
41
+ ths_stock_concept_detail_df = ths_stock_concept_detail_df.reset_index(drop=True)
42
+ if 'industry' in ths_stock_concept_detail_df.columns:
43
+ del ths_stock_concept_detail_df['industry']
44
+
45
+ company_info_df = company_common_service_api.get_company_info_industry()
46
+ company_info_df = company_info_df[['_id', 'industry']]
47
+ company_info_df = company_info_df.loc[
48
+ company_info_df['_id'].isin(list(ths_stock_concept_detail_df['symbol']))]
49
+ company_info_df = company_info_df.set_index(['_id'], drop=True)
50
+
51
+ ths_stock_concept_detail_df = ths_stock_concept_detail_df.set_index(['symbol'], drop=False)
52
+ ths_stock_concept_detail_df = pd.merge(ths_stock_concept_detail_df, company_info_df,
53
+ how='outer',
54
+ left_index=True, right_index=True)
55
+ ths_stock_concept_detail_df.dropna(subset=['industry'], axis=0, inplace=True)
56
+
57
+ grouped = ths_stock_concept_detail_df.groupby('industry')
58
+ result_list = grouped.size()
59
+ ths_concept_group = pd.DataFrame(result_list, columns=['number'])
60
+ ths_concept_group['industry'] = ths_concept_group.index
61
+ ths_concept_group = ths_concept_group.sort_values(by=['number'], ascending=False)
62
+ if ths_concept_group.shape[0] >= 2:
63
+ first_relevance_industry = list(ths_concept_group.iloc[0:1]['industry'])[0]
64
+ first_relevance_industry_number = list(ths_concept_group.iloc[0:1]['number'])[0]
65
+ second_relevance_industry = list(ths_concept_group.iloc[1:2]['industry'])[0]
66
+ second_relevance_industry_number = list(ths_concept_group.iloc[1:2]['number'])[0]
67
+ else:
68
+ first_relevance_industry = list(ths_concept_group.iloc[0:1]['industry'])[0]
69
+ first_relevance_industry_number = list(ths_concept_group.iloc[0:1]['number'])[0]
70
+ second_relevance_industry = '无'
71
+ second_relevance_industry_number = 0
72
+ ths_concept_list_one_df['first_relevance_industry'] = first_relevance_industry
73
+ ths_concept_list_one_df['second_relevance_industry'] = second_relevance_industry
74
+ ths_concept_list_one_df['first_relevance_industry_number'] = first_relevance_industry_number
75
+ ths_concept_list_one_df['second_relevance_industry_number'] = second_relevance_industry_number
76
+
77
+ ths_stock_concept_detail_df['first_relevance_industry'] = first_relevance_industry
78
+ ths_stock_concept_detail_df['second_relevance_industry'] = second_relevance_industry
79
+
80
+ new_values_list = {"$set": {"first_relevance_industry": first_relevance_industry,
81
+ "second_relevance_industry": second_relevance_industry,
82
+ "first_relevance_industry_number": first_relevance_industry_number,
83
+ "second_relevance_industry_number": second_relevance_industry_number,
84
+ "concept_count": concept_count
85
+ }}
86
+
87
+ update_query = {"symbol": concept_code}
88
+ mongodb_util.update_one_query(update_query, new_values_list, db_name_constant.THS_CONCEPT_LIST)
89
+
90
+ new_values_detail = {"$set": {"first_relevance_industry": first_relevance_industry,
91
+ "second_relevance_industry": second_relevance_industry
92
+
93
+ }}
94
+ update_query_detail = {"concept_code": concept_code}
95
+ mongodb_util.update_one_query(update_query_detail, new_values_detail, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
96
+
97
+
77
98
  # 更新空名字
78
99
  def update_null_name():
79
100
  query = {"_id": {'$gte': 886025}}
@@ -86,7 +107,7 @@ def update_null_name():
86
107
  exist_url = concept_one.url
87
108
 
88
109
  if name == '':
89
- concept_name = ths_stock_api.get_concept_name(concept_code)
110
+ concept_name = ths_concept_index_web.get_concept_name(concept_code)
90
111
  query_concept = {"symbol": concept_code}
91
112
  new_values = {'$set': {"name": concept_name}}
92
113
  mongodb_util.update_one_query(query_concept, new_values, 'ths_concept_list')
@@ -107,6 +128,8 @@ def update_null_name():
107
128
 
108
129
 
109
130
  if __name__ == '__main__':
131
+ # update_one_concept_relevance_industry(886095)
132
+ update_null_name()
110
133
  logger.info("开始")
111
134
  update_ths_concept_info()
112
135
  logger.info("结束")
@@ -2,7 +2,6 @@ import sys
2
2
  import os
3
3
 
4
4
  import pandas as pd
5
- import mns_common.api.ths.ths_stock_api as ths_stock_api
6
5
  from mns_common.db.MongodbUtil import MongodbUtil
7
6
  import mns_common.component.company.company_common_service_api as company_common_service_api
8
7
 
@@ -12,49 +11,31 @@ project_path = file_path[0:end]
12
11
  sys.path.append(project_path)
13
12
  mongodb_util = MongodbUtil('27017')
14
13
  import mns_common.api.msg.push_msg_api as push_msg_api
15
- import mns_scheduler.company_info.company_info_sync_api as company_info_sync_api
16
-
17
- max_concept_code = 886110
18
-
19
- order_fields = [
20
- "index",
21
- "symbol",
22
- "name",
23
- "now_price",
24
- "chg",
25
- "change",
26
- "exchange",
27
- "amount",
28
- "concept_code",
29
- ]
30
-
31
-
32
- # 推送到手机
33
- def push_msg_to_we_chat_web(concept_code, concept_name, url):
14
+ import mns_scheduler.company_info.base.sync_company_base_info_api as company_info_sync_api
15
+ import mns_scheduler.company_info.clean.company_info_clean_api as company_info_clean_api
16
+ import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
17
+ import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
18
+ import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
19
+ import mns_common.utils.data_frame_util as data_frame_util
20
+ import mns_common.constant.db_name_constant as db_name_constant
21
+ import mns_scheduler.concept.clean.ths_concept_clean_api as ths_concept_clean_api
22
+ import mns_common.constant.redis_msg_constant as redis_msg_constant
23
+ import mns_common.component.redis_msg.redis_msg_publish_service as redis_msg_publish_service
24
+ from loguru import logger
25
+
26
+
27
+ # 推送消息
28
+ def push_msg_to_we_chat_and_redis(concept_code, concept_name, url):
34
29
  msg = "概念代码:" + str(concept_code) + "," + "概念名称:" + concept_name + "," + "url: " + url
35
30
  title = "新增同花顺概念:" + str(concept_code) + "-" + concept_name
31
+ # 推送到微信
36
32
  push_msg_api.push_msg_to_wechat(title, msg)
33
+ # 项目之前推送消息
34
+ redis_msg_publish_service.send_redis_msg(redis_msg_constant.THS_CONCEPT_MSG_TOPIC,
35
+ redis_msg_constant.THS_NEW_CONCEPT_ADD_MSG)
37
36
 
38
-
39
- # 保存新概念信息到数据库
40
- def save_ths_concept_list(concept_code, concept_name, str_day, str_now_time):
41
- url = 'http://q.10jqka.com.cn/thshy/detail/code/' + str(concept_code)
42
- ths_concept_list = pd.DataFrame([
43
- [concept_code, concept_code, concept_name, str_day, url, str_now_time, True, True],
44
- ], columns=['_id', 'symbol', 'name', 'str_day', 'url', 'str_now_time', 'success', 'valid'])
45
- mongodb_util.save_mongo(ths_concept_list, 'ths_concept_list')
46
-
47
-
48
- # 获取最大概念代码
49
- def get_max_concept_code():
50
- query = {"symbol": {'$ne': 'null'}, "success": True}
51
- ths_concept_max = mongodb_util.descend_query(query, 'ths_concept_list', 'symbol', 1)
52
- if ths_concept_max.shape[0] == 0:
53
- concept_code = 885284
54
- else:
55
- concept_code = list(ths_concept_max['symbol'])[0]
56
-
57
- return concept_code
37
+ # 更新ths概念信息
38
+ ths_concept_clean_api.update_ths_concept_info()
58
39
 
59
40
 
60
41
  # 保存新概念详细信息到数据库
@@ -69,12 +50,13 @@ def save_ths_concept_detail(new_concept_symbol_df,
69
50
 
70
51
  new_concept_symbol_df['concept_name'] = new_concept_symbol_df['concept_name'].replace(" ", "")
71
52
 
72
- query_ths_concept = {'symbol': concept_code}
73
- ths_concept_list = mongodb_util.find_query_data('ths_concept_list', query_ths_concept)
74
- if ths_concept_list.shape[0] == 0:
53
+ all_ths_concept_df = ths_concept_common_service_api.get_all_ths_concept()
54
+ ths_concept_one_df = all_ths_concept_df.loc[all_ths_concept_df['symbol'] == int(concept_code)]
55
+
56
+ if data_frame_util.is_empty(ths_concept_one_df):
75
57
  concept_create_day = str_day
76
58
  else:
77
- concept_create_day = list(ths_concept_list['str_day'])[0]
59
+ concept_create_day = list(ths_concept_one_df['str_day'])[0]
78
60
 
79
61
  new_concept_symbol_df['str_day'] = str_day
80
62
  new_concept_symbol_df['str_now_time'] = str_now_time
@@ -83,24 +65,42 @@ def save_ths_concept_detail(new_concept_symbol_df,
83
65
  new_concept_symbol_list = list(new_concept_symbol_df['symbol'])
84
66
 
85
67
  query_company_info = {'symbol': {'$in': new_concept_symbol_list}}
68
+ query_company_info_key = str(query_company_info)
86
69
  query_field = {"first_industry": 1, "first_industry": 1, "industry": 1,
87
70
  "company_type": 1, "flow_mv_sp": 1,
88
71
  "total_mv_sp": 1}
89
- company_info = mongodb_util.find_query_data_choose_field('company_info',
90
- query_company_info, query_field)
72
+ query_field_key = str(query_field)
73
+ company_info = company_common_service_new_api.get_company_info_by_field(query_company_info_key, query_field_key)
74
+
75
+ if 'industry' in new_concept_symbol_df.columns:
76
+ del new_concept_symbol_df['industry']
77
+ if 'company_type' in new_concept_symbol_df.columns:
78
+ del new_concept_symbol_df['company_type']
79
+ if 'flow_mv_sp' in new_concept_symbol_df.columns:
80
+ del new_concept_symbol_df['flow_mv_sp']
81
+ if 'total_mv_sp' in new_concept_symbol_df.columns:
82
+ del new_concept_symbol_df['total_mv_sp']
91
83
 
92
84
  company_info = company_info.set_index(['_id'], drop=True)
93
85
  new_concept_symbol_df = new_concept_symbol_df.set_index(['symbol'], drop=False)
94
86
 
95
87
  new_concept_symbol_df = pd.merge(new_concept_symbol_df, company_info, how='outer',
96
88
  left_index=True, right_index=True)
89
+
90
+ if 'index' not in company_info.columns:
91
+ new_concept_symbol_df['index'] = 0
92
+
93
+ if 'change' not in company_info.columns:
94
+ new_concept_symbol_df['change'] = 0
95
+
97
96
  new_concept_symbol_df['concept_name'] = new_concept_symbol_df['concept_name'].replace(" ", "")
98
- query = {'concept_code': concept_code}
99
97
 
100
98
  if bool(1 - ('way' in new_concept_symbol_df.columns)):
101
99
  new_concept_symbol_df['way'] = 'symbol_sync'
102
100
  if "long" not in new_concept_symbol_df.columns:
103
101
  new_concept_symbol_df['long'] = ''
102
+ if "short" not in new_concept_symbol_df.columns:
103
+ new_concept_symbol_df['short'] = new_concept_symbol_df['long']
104
104
  new_concept_symbol_df = new_concept_symbol_df[[
105
105
  "_id",
106
106
  "index",
@@ -121,41 +121,97 @@ def save_ths_concept_detail(new_concept_symbol_df,
121
121
  "company_type",
122
122
  "concept_create_day",
123
123
  "way",
124
- "long"
124
+ "long",
125
+ 'short'
125
126
  ]]
127
+ query_detail = {"concept_code": int(concept_code)}
128
+ exist_concept_detail = mongodb_util.find_query_data(db_name_constant.THS_STOCK_CONCEPT_DETAIL, query_detail)
126
129
 
127
- exist_concept_detail = mongodb_util.find_query_data('ths_stock_concept_detail', query)
128
130
  if exist_concept_detail is None or exist_concept_detail.shape[0] == 0:
129
- mongodb_util.save_mongo(new_concept_symbol_df, 'ths_stock_concept_detail')
131
+ new_concept_symbol_df['grade'] = 1
132
+ # 详细标识
133
+ new_concept_symbol_df['remark'] = ''
134
+ # 简单标识
135
+ new_concept_symbol_df['remark_flag'] = ''
136
+ mongodb_util.save_mongo(new_concept_symbol_df, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
130
137
  # 保存到当日新增概念列表
131
138
  new_concept_symbol_df['concept_type'] = 'ths'
132
- mongodb_util.save_mongo(new_concept_symbol_df, 'today_new_concept_list')
139
+ mongodb_util.save_mongo(new_concept_symbol_df, db_name_constant.TODAY_NEW_CONCEPT_LIST)
133
140
  else:
134
141
  exist_concept_detail_symbol_list = list(exist_concept_detail['symbol'])
135
142
  new_concept_symbol_df = new_concept_symbol_df.loc[~(
136
143
  new_concept_symbol_df['symbol'].isin(exist_concept_detail_symbol_list))]
137
144
  if new_concept_symbol_df.shape[0] > 0:
138
- mongodb_util.save_mongo(new_concept_symbol_df, 'ths_stock_concept_detail')
145
+ new_concept_symbol_df['grade'] = 1
146
+ # 详细标识
147
+ new_concept_symbol_df['remark'] = ''
148
+ # 简单标识
149
+ new_concept_symbol_df['remark_flag'] = ''
150
+ mongodb_util.save_mongo(new_concept_symbol_df, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
139
151
  # 保存到当日新增概念列表
140
152
  new_concept_symbol_df['concept_type'] = 'ths'
141
- mongodb_util.save_mongo(new_concept_symbol_df, 'today_new_concept_list')
153
+ mongodb_util.save_mongo(new_concept_symbol_df, db_name_constant.TODAY_NEW_CONCEPT_LIST)
154
+
142
155
  update_company_info(new_concept_symbol_df)
143
156
  # 公司缓存信息清除
144
157
  company_common_service_api.company_info_industry_cache_clear()
145
158
 
146
159
 
147
- # 更新公司表信息 todo 清空cache 公司表中 common_service_fun_api.py get_company_info_industry
160
+ # 更新入选理由
161
+ def update_long_short(new_concept_symbol_df, exist_concept_detail):
162
+ if data_frame_util.is_empty(new_concept_symbol_df):
163
+ return None
164
+ for new_concept_one in new_concept_symbol_df.itertuples():
165
+ try:
166
+ query = {'symbol': new_concept_one.symbol, 'concept_code': new_concept_one.concept_code}
167
+ new_values = {"$set": {'long': new_concept_one.long, "short": new_concept_one.short}}
168
+ mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
169
+ mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP)
170
+ except BaseException as e:
171
+ logger.error("更新入选理由异常:{}", e)
172
+ # 更新已经被删除概念的股票
173
+ # update_delete_concept_symbol(list(new_concept_symbol_df['concept_code'])[0], new_concept_symbol_df,
174
+ # exist_concept_detail)
175
+ # 更新公司表信息 todo 清空cache 公司表中 common_service_fun_api.py get_company_info_industry
176
+
177
+
178
+ ## 更新已经被删除这个概念的股票
179
+ # def update_delete_concept_symbol(concept_code, new_concept_symbol_df, exist_concept_detail):
180
+ # delete_concept_symbol_df = exist_concept_detail.loc[
181
+ # ~(exist_concept_detail['symbol'].isin(list(new_concept_symbol_df['symbol'])))]
182
+ #
183
+ # if data_frame_util.is_not_empty(delete_concept_symbol_df):
184
+ # new_values = {"$set": {"grade": 0}}
185
+ # query = {'symbol': {"$in": list(delete_concept_symbol_df['symbol'])}, 'concept_code': concept_code}
186
+ # mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
187
+ # mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP)
188
+ #
189
+ # exist_concept_detail = exist_concept_detail.loc[exist_concept_detail]
190
+
191
+
148
192
  def update_company_info(new_concept_symbol_df):
149
193
  if new_concept_symbol_df.shape[0] > 0:
150
194
  symbol_list = list(new_concept_symbol_df['symbol'])
151
195
  company_info_sync_api.sync_company_base_info(symbol_list)
152
- company_info_sync_api.fix_company_industry(None)
196
+ company_info_clean_api.clean_company_info(None)
153
197
  # 公司缓存信息清除
154
198
  company_common_service_api.company_info_industry_cache_clear()
155
199
 
156
200
 
201
+ # 获取最大概念代码
202
+ def get_max_concept_code():
203
+ query = {"symbol": {'$ne': 'null'}, "success": True}
204
+ ths_concept_max = mongodb_util.descend_query(query, 'ths_concept_list', 'symbol', 1)
205
+ if ths_concept_max.shape[0] == 0:
206
+ concept_code = 885284
207
+ else:
208
+ concept_code = list(ths_concept_max['symbol'])[0]
209
+
210
+ return concept_code
211
+
212
+
157
213
  def get_concept_detail_info_web(concept_code):
158
- new_concept_symbol_list = ths_stock_api.ths_stock_concept(concept_code)
214
+ new_concept_symbol_list = ths_concept_detail_api.get_ths_concept_detail(concept_code, None)
159
215
  if new_concept_symbol_list is None or new_concept_symbol_list.shape[0] == 0:
160
216
  return None
161
217
  new_concept_symbol_list['_id'] = str(concept_code) + '-' + new_concept_symbol_list['symbol']
@@ -13,9 +13,7 @@ import mns_common.utils.data_frame_util as data_frame_util
13
13
  import mns_common.constant.db_name_constant as db_name_constant
14
14
  import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
15
15
  from datetime import datetime
16
- import mns_common.api.ths.ths_stock_api as ths_stock_api
17
- import pandas as pd
18
-
16
+ import mns_common.api.ths.concept.web.ths_concept_detail_web as ths_concept_detail_web
19
17
  mongodb_util = MongodbUtil('27017')
20
18
 
21
19
 
@@ -33,7 +31,10 @@ def update_ths_concept_choose_reason(ths_symbol_all_concepts, symbol):
33
31
  {'symbol': symbol, "concept_code": int(concept_one.cid)}]}
34
32
  short = concept_one.short
35
33
  long = concept_one.long
36
- new_values = {"$set": {"short": short, "long": long}}
34
+ if data_frame_util.is_string_not_empty(long):
35
+ new_values = {"$set": {"short": short, "long": long}}
36
+ else:
37
+ new_values = {"$set": {"grade": 0}}
37
38
  mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
38
39
  except BaseException as e:
39
40
  logger.error("更新ths概念入选理由异常{},{},{}", symbol, concept_one.title, e)
@@ -69,8 +70,7 @@ def update_null_reason(nan_reason_df):
69
70
  continue
70
71
  web_concept_code = list(ths_concept_one_df['web_concept_code'])[0]
71
72
 
72
- ths_concept_json = ths_stock_api.get_symbol_add_new_concept(nan_one.symbol)
73
- symbol_ths_concept_all_df = pd.DataFrame(ths_concept_json)
73
+ symbol_ths_concept_all_df = ths_concept_detail_web.get_one_symbol_all_ths_concepts(nan_one.symbol)
74
74
 
75
75
  symbol_ths_concept_one_df = symbol_ths_concept_all_df[
76
76
  symbol_ths_concept_all_df['cid'] == web_concept_code]
File without changes