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.
- mns_scheduler/__init__.py +1 -3
- mns_scheduler/company_info/announce/company_announce_sync_service.py +65 -0
- mns_scheduler/company_info/{company_info_sync_api.py → base/sync_company_base_info_api.py} +239 -227
- mns_scheduler/company_info/base/sync_company_hold_info_api.py +37 -0
- mns_scheduler/company_info/base/sync_company_product_area_industry.py +161 -0
- mns_scheduler/company_info/clean/company_info_clean_api.py +133 -0
- mns_scheduler/company_info/constant/company_constant_data.py +497 -0
- mns_scheduler/company_info/{de_list_stock_service.py → de_list_stock/de_list_stock_service.py} +1 -1
- mns_scheduler/company_info/em_stock_info/__init__.py +7 -0
- mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +80 -0
- mns_scheduler/company_info/remark/__init__.py +7 -0
- mns_scheduler/company_info/remark/company_remark_info_sync.py +46 -0
- mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
- mns_scheduler/concept/clean/ths_concept_clean_api.py +74 -51
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +112 -56
- mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +6 -6
- mns_scheduler/concept/ths/detaill/__init__.py +0 -0
- mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +226 -0
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +169 -0
- mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +11 -23
- mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +19 -15
- mns_scheduler/db/col_move_service.py +10 -7
- mns_scheduler/db/db_status.py +1 -1
- mns_scheduler/db/script/__init__.py +7 -0
- mns_scheduler/db/script/col_move_script.py +45 -0
- mns_scheduler/db/script/db_move/__init__.py +7 -0
- mns_scheduler/db/script/db_move/col_move_one_service.py +34 -0
- mns_scheduler/db/script/sync/__init__.py +7 -0
- mns_scheduler/db/script/sync/local_mongo_util.py +231 -0
- mns_scheduler/db/script/sync/remote_data_sync_to_local.py +105 -0
- mns_scheduler/db/script/sync/remote_mongo_util.py +306 -0
- mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +80 -0
- mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +69 -0
- mns_scheduler/db/script/update/__init__.py +7 -0
- mns_scheduler/db/script/update/update_col_field.py +36 -0
- mns_scheduler/finance/__init__.py +1 -1
- mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +3 -3
- mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +30 -25
- mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +4 -4
- mns_scheduler/finance/sync_financial_report_service_task.py +202 -0
- mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
- mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
- mns_scheduler/hk/__init__.py +1 -1
- mns_scheduler/hk/hk_company_info_sync_service_api.py +49 -5
- mns_scheduler/hk/hk_industry_info_sync_service_api.py +68 -0
- mns_scheduler/industry/__init__.py +7 -0
- mns_scheduler/industry/ths/__init__.py +7 -0
- mns_scheduler/industry/ths/ths_industry_index_service.py +58 -0
- mns_scheduler/industry/ths/ths_industry_sync_service.py +68 -0
- mns_scheduler/irm/__init__.py +1 -1
- mns_scheduler/irm/api/__init__.py +1 -1
- mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +1 -1
- mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
- mns_scheduler/irm/stock_irm_cninfo_service.py +15 -13
- mns_scheduler/k_line/clean/daily/__init__.py +1 -1
- mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +57 -7
- mns_scheduler/k_line/clean/daily/daily_k_line_service.py +16 -3
- mns_scheduler/k_line/clean/k_line_info_clean_impl.py +3 -2
- mns_scheduler/k_line/clean/k_line_info_clean_task.py +42 -31
- mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
- mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +125 -27
- mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +72 -17
- mns_scheduler/k_line/common/__init__.py +7 -0
- mns_scheduler/k_line/common/k_line_common_api.py +188 -0
- mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
- mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
- mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +77 -0
- mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +14 -14
- mns_scheduler/k_line/sync_status/__init__.py +7 -0
- mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
- mns_scheduler/k_line/test/__init__.py +7 -0
- mns_scheduler/k_line/test/k_line_info_clean_his_data.py +41 -0
- mns_scheduler/k_line/year_quarter/__init__.py +7 -0
- mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +76 -0
- mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +4 -2
- mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
- mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +12 -7
- mns_scheduler/lhb/__init__.py +1 -1
- mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
- mns_scheduler/open/__init__.py +1 -1
- mns_scheduler/open/sync_one_day_open_data_to_db_service.py +6 -22
- mns_scheduler/risk/__init__.py +1 -1
- mns_scheduler/risk/compliance/__init__.py +0 -0
- mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +71 -0
- mns_scheduler/risk/financial/__init__.py +0 -0
- mns_scheduler/risk/financial/annual_report_audit_check_api.py +54 -0
- mns_scheduler/risk/financial/net_assets_check_api.py +75 -0
- mns_scheduler/risk/financial/profit_income_check_api.py +80 -0
- mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +1 -0
- mns_scheduler/risk/financial_report_risk_check_api.py +42 -0
- mns_scheduler/risk/major_violations/__init__.py +0 -0
- mns_scheduler/risk/{register_and_investigate_stock_sync_api.py → major_violations/register_and_investigate_stock_sync_api.py} +17 -8
- mns_scheduler/risk/self/__init__.py +0 -0
- mns_scheduler/risk/{wei_pan_stock_api.py → self/wei_pan_stock_api.py} +10 -4
- mns_scheduler/risk/test/__init__.py +7 -0
- mns_scheduler/{finance → risk}/test/fix_blask_list.py +6 -10
- mns_scheduler/risk/transactions/__init__.py +0 -0
- mns_scheduler/risk/transactions/transactions_check_api.py +183 -0
- mns_scheduler/self_choose/__init__.py +7 -0
- mns_scheduler/self_choose/ths_self_choose_service.py +158 -0
- mns_scheduler/trade/auto_ipo_buy_api.py +2 -2
- mns_scheduler/trade/auto_login/__init__.py +7 -0
- mns_scheduler/trade/auto_login/trader_auto_service.py +32 -0
- mns_scheduler/trade/auto_sell_service_api.py +10 -8
- mns_scheduler/trade/balance/__init__.py +7 -0
- mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
- mns_scheduler/trade/sync_position_api.py +41 -8
- mns_scheduler/trade/task/__init__.py +7 -0
- mns_scheduler/trade/task/trader_task_service.py +65 -0
- mns_scheduler/trade/tfp/__init__.py +7 -0
- mns_scheduler/trade/tfp/stock_tfp_info_sync.py +56 -0
- mns_scheduler/zb/stock_zb_pool_sync.py +1 -15
- mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +2 -3
- mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +12 -8
- mns_scheduler/zt/open_data/kcx_high_chg_open_data_sync.py +10 -25
- mns_scheduler/zt/script/__init__.py +1 -1
- mns_scheduler/zt/script/fix_error_deal_day.py +41 -0
- mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -11
- mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
- mns_scheduler/zt/script/sync_now_higt_chg_zt.py +43 -0
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +413 -0
- mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +193 -0
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +58 -0
- mns_scheduler/zz_task/compensation/__init__.py +0 -0
- mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
- mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
- mns_scheduler/zz_task/data_sync_task.py +271 -121
- {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/METADATA +1 -1
- mns_scheduler-1.4.3.2.dist-info/RECORD +169 -0
- {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/WHEEL +1 -1
- mns_scheduler/backup/app/ths_new_concept_sync_app.py +0 -122
- mns_scheduler/backup/em/em_new_concept_his_sync.py +0 -99
- mns_scheduler/backup/em/em_new_concept_sync_common_api.py +0 -139
- mns_scheduler/backup/em/em_new_concept_sync_web.py +0 -55
- mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py +0 -51
- mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
- mns_scheduler/company_info/company_constant_data.py +0 -322
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py +0 -103
- mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py +0 -89
- mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py +0 -202
- mns_scheduler/finance/sync_financial_report_service_api.py +0 -113
- mns_scheduler/real_time/realtime_quotes_now_create_db_index.py +0 -27
- mns_scheduler/real_time/realtime_quotes_now_sync.py +0 -232
- mns_scheduler/risk/stock_equity_mortgage_sync_api.py +0 -32
- mns_scheduler/zt/zt_pool/zt_pool_sync_api.py +0 -151
- mns_scheduler/zz_task/sync_realtime_quotes_task.py +0 -28
- mns_scheduler-1.0.8.7.dist-info/RECORD +0 -112
- /mns_scheduler/{backup/app → company_info/announce}/__init__.py +0 -0
- /mns_scheduler/{backup/em → company_info/base}/__init__.py +0 -0
- /mns_scheduler/{backup/wen_cai → company_info/clean}/__init__.py +0 -0
- /mns_scheduler/{big_deal → company_info/constant}/__init__.py +0 -0
- /mns_scheduler/{real_time → company_info/de_list_stock}/__init__.py +0 -0
- /mns_scheduler/{backup → finance/em}/__init__.py +0 -0
- /mns_scheduler/finance/{test → xue_qiu}/__init__.py +0 -0
- /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
- {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.
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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(
|
|
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
|
-
|
|
90
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
#
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|