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
@@ -0,0 +1,497 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import pandas as pd
9
+ from mns_common.db.MongodbUtil import MongodbUtil
10
+ import mns_common.utils.data_frame_util as data_frame_util
11
+
12
+ mongodb_util = MongodbUtil('27017')
13
+
14
+
15
+ # 修改行业分类的股票
16
+ def get_fix_symbol_industry():
17
+ return pd.DataFrame([['688480', '赛恩斯', '760103', '环境治理'],
18
+ ['000032', '深桑达A', '730204', '通信网络设备及器件'],
19
+ ['688480', '赛恩斯', '640704', '自动化设备'],
20
+ ['603260', '合盛硅业', '220316', '有机硅'],
21
+ ['300559', '佳发教育', '461102', '培训教育'],
22
+ ['300836', '佰奥智能', '640701', '机器人'],
23
+ ['300293', '蓝英装备', '640701', '机器人'],
24
+ ['688630', '芯碁微装', '270108', '半导体设备'],
25
+ ['001309', '德明利', '270104', '数字芯片设计'],
26
+ ['600338', '西藏珠峰', '240303', '铅锌'],
27
+ ['300042', '朗科科技', '270108', '半导体设备'],
28
+ ['688507', '索辰科技', '710402', '横向通用软件'],
29
+ ['301387', '光大同创', '270504', '消费电子零部件及组装'],
30
+ ['300295', '三六五网', '430301', '物业管理'],
31
+ ['300947', '德必集团', '430301', '物业管理'],
32
+ ['300483', '首华燃气', '410301', '燃气Ⅲ'],
33
+ ['300215', '电科院', '410110', '电能综合服务'],
34
+ # 持有上海微电子装备有限公司10%的股份 国产光刻机 主要炒作在芯片概念 不在房地产
35
+ ['600895', '张江高科', '270108', '半导体设备'],
36
+ ['301112', '信邦智能', '640704', '其他自动化设备'],
37
+ ['002693', '双成药业', '270104', '数字芯片设计'],
38
+ ['000670', '盈方微', '270401', '其他电子'],
39
+ ['300803', '指南针', '490101', '证券'],
40
+ ['300085', '银之杰', '490101', '证券'],
41
+ ['300380', '安硕信息', '490101', '证券'],
42
+ ['600446', '金证股份', '490101', '证券'],
43
+ ['688318', '财富趋势', '490101', '证券'],
44
+ ['600570', '恒生电子', '490101', '证券'],
45
+ ['837592', '华信永道', '490101', '证券'],
46
+ ['830799', '艾融软件', '490101', '证券'],
47
+ ['300033', '同花顺', '490101', '证券'],
48
+ ['300399', '天利科技', '490201', '保险'],
49
+ # EDA软件
50
+ ['301269', '华大九天', '270108', '半导体设备'],
51
+ ['688206', '概伦电子', '270108', '半导体设备'],
52
+ ['301095', '广立微', '270108', '半导体设备'],
53
+ ['002131', '利欧股份', '720501', '营销代理'],
54
+
55
+ ],
56
+ columns=['symbol',
57
+ 'name',
58
+ 'new_industry_code', # 三级行业代码
59
+ 'new_industry'])
60
+
61
+
62
+ # 修改二级行业分类的股票
63
+ def get_fix_second_industry_info():
64
+ return pd.DataFrame([
65
+ ['110200', '渔业', "农林牧渔", "110000", '农业综合Ⅱ', '110900'],
66
+
67
+ ['110300', '林业', "农林牧渔", "110000", '农业综合Ⅱ', '110900'],
68
+
69
+ ['450700', '旅游零售Ⅱ', '社会服务', '460000', '旅游及景区', '461000'],
70
+
71
+ ['220700', '化工新材料Ⅱ', '基础化工', '220000', '非金属材料Ⅱ', '220900'],
72
+
73
+ ['330700', '其他家电Ⅱ', '家用电器', '330000', '小家电', '330300'],
74
+
75
+ ['250100', '建筑材料', '建筑材料', '610000', '装修建材', '610300'],
76
+
77
+ ['460600', '体育Ⅱ', '综合', '510000', '综合Ⅱ', '510100'],
78
+
79
+ ['770300', '医疗美容', '美容护理', '770000', '化妆品', '770200'],
80
+
81
+ ],
82
+ columns=['original_second_industry_code',
83
+ 'original_second_industry_name',
84
+ 'first_sw_industry',
85
+ 'first_industry_code',
86
+ 'second_sw_industry', # 二级级行业代码
87
+ 'second_industry_code'])
88
+
89
+
90
+ def fix_second_industry(company_info):
91
+ fix_second_industry_df = get_fix_second_industry_info()
92
+ del fix_second_industry_df['original_second_industry_name']
93
+ fix_second_company_df = company_info.loc[
94
+ company_info['second_industry_code'].isin(fix_second_industry_df['original_second_industry_code'])]
95
+
96
+ no_fix_second_company_df = company_info.loc[~(
97
+ company_info['second_industry_code'].isin(fix_second_industry_df['original_second_industry_code']))]
98
+
99
+ fix_second_company_df = fix_second_company_df.set_index(['second_industry_code'], drop=True)
100
+ del fix_second_company_df['second_sw_industry']
101
+ del fix_second_company_df['first_industry_code']
102
+ del fix_second_company_df['first_sw_industry']
103
+ fix_second_industry_df = fix_second_industry_df.set_index(['original_second_industry_code'], drop=True)
104
+
105
+ fix_second_company_df = pd.merge(fix_second_company_df, fix_second_industry_df, how='outer',
106
+ left_index=True, right_index=True)
107
+
108
+ return pd.concat([no_fix_second_company_df, fix_second_company_df])
109
+
110
+
111
+ # 修改行业名
112
+ def get_fix_industry_name_df():
113
+ return pd.DataFrame([
114
+
115
+ # 交通运输 1
116
+ ['物流', '物流'],
117
+ ['铁路公路', '铁路公路'],
118
+ ['航运港口', '航运港口'],
119
+ ['航空机场', '航空机场'],
120
+
121
+ # 传媒 2
122
+ ['数字媒体', '数字媒体'],
123
+ ['电视广播Ⅱ', '电视广播'],
124
+ ['游戏Ⅱ', '游戏'],
125
+ ['出版', '出版'],
126
+ ['影视院线', '影视院线'],
127
+ ['广告营销', '广告营销'],
128
+
129
+ # 公用事业 3
130
+ ['燃气Ⅱ', '燃气'],
131
+ ['电力', '电力'],
132
+
133
+ # 农林牧渔 4
134
+ ['养殖业', '养殖业'],
135
+ ['农产品加工', '农产品加工'],
136
+ ['饲料', '饲料'],
137
+ ['渔业', '渔业'], # merge to 农业综合
138
+ ['动物保健Ⅱ', '动物保健'],
139
+ ['种植业', '种植业'],
140
+ # ['林业Ⅱ', '林业'], # merge 农业综合
141
+ ['农业综合Ⅱ', '农业综合'], #
142
+
143
+ # 医药生物 5
144
+ ['化学制药', '化学制药'],
145
+ ['生物制品', '生物制品'],
146
+ ['中药Ⅱ', '中药'],
147
+ ['医疗器械', '医疗器械'],
148
+ ['医疗服务', '医疗服务'],
149
+ ['医药商业', '医药商业'],
150
+
151
+ # 商贸零售 6
152
+ ['一般零售', '一般零售'],
153
+ ['互联网电商', '互联网电商'],
154
+ ['贸易Ⅱ', '贸易'], #
155
+ ['专业连锁Ⅱ', '零售专业连锁'], # 专业连锁 综合Ⅱ
156
+ # ['旅游零售Ⅱ', '旅游零售'], # merge旅游及景区
157
+
158
+ # 国防 7
159
+ ['军工电子Ⅱ', '军工电子'],
160
+ ['地面兵装Ⅱ', '地面兵装'],
161
+ ['航天装备Ⅱ', '航天装备'],
162
+ ['航空装备Ⅱ', '航空装备'],
163
+ ['航海装备Ⅱ', '航海装备'],
164
+
165
+ # 基础化工 8
166
+ ['化学制品', '化学制品'],
167
+ ['化学原料', '化学原料'],
168
+ ['化学纤维', '化学纤维'],
169
+ ['农化制品', '化肥农药'],
170
+ ['塑料', '塑料'],
171
+ ['橡胶', '橡胶'],
172
+ ['非金属材料Ⅱ', '非金属材料'],
173
+
174
+ # 家用电器 9
175
+ ['白色家电', '白色家电'], # merge 家用电器
176
+ ['照明设备Ⅱ', '照明设备'], # merge 家用电器
177
+ # ['其他家电Ⅱ', '其他家电'], # merge 小家电
178
+ ['家电零部件Ⅱ', '家电零部件'], # merge 家用电器
179
+ ['小家电', '小家电'], # merge '家用电器'
180
+ ['黑色家电', '黑色家电'], # merge 家用电器
181
+ ['厨卫电器', '厨卫电器'], # merge 家用电器
182
+
183
+ # 建筑材料 10
184
+ ['装修建材', '装修建材'], #
185
+ ['建筑建材', '装修建材'], #
186
+ ['玻璃玻纤', '玻璃玻纤'],
187
+ ['水泥', '水泥'],
188
+
189
+ # 建筑装饰 11
190
+ ['基础建设', '基础建设'],
191
+ ['房屋建设Ⅱ', '房屋建设'],
192
+ ['工程咨询服务Ⅱ', '工程咨询服务'],
193
+ ['专业工程', '建筑专业工程'],
194
+ ['装修装饰Ⅱ', '装修装饰'],
195
+
196
+ # 房地产 12
197
+ ['房地产开发', '房地产'],
198
+ ['房地产服务', '房地产'],
199
+
200
+ # 有色金属 13
201
+ ['能源金属', '能源金属'],
202
+ ['小金属', '小金属'],
203
+ ['贵金属', '贵金属'], #
204
+ ['金属新材料', '金属新材料'],
205
+ ['工业金属', '工业金属'], # 铅锌 铝 铜
206
+
207
+ # 机械设备 14
208
+ ['自动化设备', '自动化设备'],
209
+ ['轨交设备Ⅱ', '轨交设备'],
210
+ ['通用设备', '通用设备'],
211
+ ['专用设备', '专用设备'],
212
+ ['工程机械', '工程机械'],
213
+
214
+ # 汽车 15
215
+ ['汽车零部件', '汽车零部件'],
216
+ ['汽车服务', '汽车服务'],
217
+ ['乘用车', '乘用车'], # = merge 汽车整车
218
+ ['商用车', '商用车'],
219
+ ['摩托车及其他', '摩托车及其他'],
220
+
221
+ # 煤炭 16
222
+ ['焦炭Ⅱ', '焦炭'], # merge to 煤炭
223
+ ['煤炭开采', '煤炭开采'], # merge 煤炭
224
+
225
+ # 环保 17
226
+ ['环境治理', '环境治理'], # merge, 环保
227
+ ['环保设备Ⅱ', '环保设备'], # merge '环保'
228
+
229
+ # 电力设备 18
230
+ ['电网设备', '电网设备'],
231
+ ['电池', '电池'],
232
+ ['电机Ⅱ', '电机'], #
233
+ ['光伏设备', '光伏设备'],
234
+ ['风电设备', '风电设备'],
235
+ ['其他电源设备Ⅱ', '其他电源设备'],
236
+
237
+ # 电子 19
238
+ ['半导体', '半导体'],
239
+ ['电子化学品Ⅱ', '电子化学品'],
240
+ ['光学光电子', '光学光电子'],
241
+ ['消费电子', '消费电子'],
242
+ ['元件', '元件'],
243
+ ['其他电子Ⅱ', '其他电子'], #
244
+
245
+ # 石油石化 20
246
+ ['炼化及贸易', '石油行业'], # merge 石油行业
247
+ ['油服工程', '采掘行业'], # merge '采掘行业'
248
+ ['油气开采Ⅱ', '石油行业'], # merge to 石油行业
249
+
250
+ # 社会服务 21
251
+ ['专业服务', '社会专业服务'],
252
+ ['旅游及景区', '旅游及景区'],
253
+ ['酒店餐饮', '旅游酒店'],
254
+ ['教育', '教育'],
255
+ # ['体育Ⅱ', '体育'],
256
+
257
+ # 纺织服装 22
258
+ ['服装家纺', '纺织服装'], # merge 纺织服装
259
+ ['纺织制造', '纺织服装'], # merge 纺织服装
260
+ ['饰品', '饰品'],
261
+
262
+ # 综合 23
263
+ ['综合Ⅱ', '综合'],
264
+
265
+ # 美容护理 24
266
+ ['化妆品', '化妆美容'], # merge to 化妆美容
267
+ # ['医疗美容', '化妆美容'], # merge 化妆美容
268
+ ['个护用品', '个护用品'],
269
+
270
+ # 计算机 25
271
+ ['计算机设备', '计算机设备'],
272
+ ['IT服务Ⅱ', 'IT服务'],
273
+ ['软件开发', '软件开发'],
274
+
275
+ # 轻工制造 26
276
+ ['造纸', '造纸'],
277
+ ['包装印刷', '包装印刷'], #
278
+ ['文娱用品', '文娱用品'], #
279
+ ['家居用品', '家居用品'],
280
+
281
+ # 通信 27
282
+ ['通信服务', '通信服务'],
283
+ ['通信设备', '通信设备'],
284
+
285
+ # 钢铁 28
286
+ ['普钢', '普钢'], #
287
+ ['特钢Ⅱ', '特钢'],
288
+ ['冶钢原料', '冶钢原料'],
289
+
290
+ # 银行 29
291
+ ['国有大型银行Ⅱ', '银行'], # merge to 银行
292
+ ['城商行Ⅱ', '银行'], #
293
+ ['农商行Ⅱ', '银行'], # merge 银行
294
+ ['股份制银行Ⅱ', '银行'], # merge to 银行
295
+
296
+ # 非银金融 30
297
+ ['证券Ⅱ', '证券'],
298
+ ['保险Ⅱ', '保险'],
299
+ ['多元金融', '多元金融'],
300
+
301
+ # 食品饮料 31
302
+ ['饮料乳品', '饮料乳品'], # merge 食品饮料
303
+ ['食品加工', '食品加工'], # merge 食品饮料
304
+ ['调味发酵品Ⅱ', '调味发酵品'], # merge to 食品饮料
305
+ ['休闲食品', '休闲食品'], # merge '食品饮料'
306
+ ['白酒Ⅱ', '白酒'],
307
+ ['非白酒', '非白酒']
308
+
309
+ ], columns=['second_sw_industry', 'industry'])
310
+
311
+
312
+ # 第三行业作为行业
313
+ def fix_industry_use_sw_third(company_info_df):
314
+ # 细分工业金属行业
315
+ company_info = company_info_df.copy()
316
+ company_info.loc[company_info.third_industry_code == '240303', 'industry'] = '铅锌'
317
+ company_info.loc[company_info.third_industry_code == '240301', 'industry'] = '铝'
318
+ company_info.loc[company_info.third_industry_code == '240302', 'industry'] = '铜'
319
+
320
+ company_info.loc[company_info.third_industry_code == '240303', 'second_sw_industry'] = '铅锌'
321
+ company_info.loc[company_info.third_industry_code == '240301', 'second_sw_industry'] = '铝'
322
+ company_info.loc[company_info.third_industry_code == '240302', 'second_sw_industry'] = '铜'
323
+
324
+ company_info.loc[company_info.third_industry_code == '240303', 'second_industry_code'] = '240303'
325
+ company_info.loc[company_info.third_industry_code == '240301', 'second_industry_code'] = '240301'
326
+ company_info.loc[company_info.third_industry_code == '240302', 'second_industry_code'] = '240302'
327
+
328
+ # 细分专业设备
329
+ company_info.loc[company_info.third_industry_code == '640203', 'industry'] = '能源及重型设备'
330
+ company_info.loc[company_info.third_industry_code == '640204', 'industry'] = '楼宇设备'
331
+ company_info.loc[company_info.third_industry_code == '640206', 'industry'] = '纺织服装设备'
332
+ company_info.loc[company_info.third_industry_code == '640207', 'industry'] = '农用机械'
333
+ company_info.loc[company_info.third_industry_code == '640208', 'industry'] = '印刷包装机械'
334
+
335
+ company_info.loc[company_info.third_industry_code == '640203', 'second_sw_industry'] = '能源及重型设备'
336
+ company_info.loc[company_info.third_industry_code == '640204', 'second_sw_industry'] = '楼宇设备'
337
+ company_info.loc[company_info.third_industry_code == '640206', 'second_sw_industry'] = '纺织服装设备'
338
+ company_info.loc[company_info.third_industry_code == '640207', 'second_sw_industry'] = '农用机械'
339
+ company_info.loc[company_info.third_industry_code == '640208', 'second_sw_industry'] = '印刷包装机械'
340
+
341
+ company_info.loc[company_info.third_industry_code == '640203', 'second_industry_code'] = '640203'
342
+ company_info.loc[company_info.third_industry_code == '640204', 'second_industry_code'] = '640204'
343
+ company_info.loc[company_info.third_industry_code == '640206', 'second_industry_code'] = '640206'
344
+ company_info.loc[company_info.third_industry_code == '640207', 'second_industry_code'] = '640207'
345
+ company_info.loc[company_info.third_industry_code == '640208', 'second_industry_code'] = '640208'
346
+
347
+ # todo 细分
348
+ company_info.loc[company_info.third_industry_code == '640209', 'industry'] = '专用设备'
349
+ company_info.loc[company_info.third_industry_code == '640209', 'second_sw_industry'] = '专用设备'
350
+ company_info.loc[company_info.third_industry_code == '640209', 'second_industry_code'] = '640208'
351
+
352
+ company_info.loc[company_info.third_industry_code == '260205', 'industry'] = '专用设备'
353
+ company_info.loc[company_info.third_industry_code == '260205', 'second_sw_industry'] = '专用设备'
354
+ company_info.loc[company_info.third_industry_code == '260205', 'second_industry_code'] = '260205'
355
+
356
+ # 细分通用设备
357
+ company_info.loc[company_info.third_industry_code == '640101', 'industry'] = '机床工具'
358
+ company_info.loc[company_info.third_industry_code == '640103', 'industry'] = '磨具磨料'
359
+ company_info.loc[company_info.third_industry_code == '640105', 'industry'] = '制冷空调设备'
360
+ company_info.loc[company_info.third_industry_code == '640106', 'industry'] = '通用设备'
361
+ company_info.loc[company_info.third_industry_code == '640107', 'industry'] = '仪器仪表'
362
+ company_info.loc[company_info.third_industry_code == '640108', 'industry'] = '金属制品'
363
+
364
+ company_info.loc[company_info.third_industry_code == '640101', 'second_sw_industry'] = '机床工具'
365
+ company_info.loc[company_info.third_industry_code == '640103', 'second_sw_industry'] = '磨具磨料'
366
+ company_info.loc[company_info.third_industry_code == '640105', 'second_sw_industry'] = '制冷空调设备'
367
+ company_info.loc[company_info.third_industry_code == '640106', 'second_sw_industry'] = '通用设备'
368
+ company_info.loc[company_info.third_industry_code == '640107', 'second_sw_industry'] = '仪器仪表'
369
+ company_info.loc[company_info.third_industry_code == '640108', 'second_sw_industry'] = '金属制品'
370
+
371
+ company_info.loc[company_info.third_industry_code == '640101', 'second_industry_code'] = '640101'
372
+ company_info.loc[company_info.third_industry_code == '640103', 'second_industry_code'] = '640103'
373
+ company_info.loc[company_info.third_industry_code == '640105', 'second_industry_code'] = '640105'
374
+ company_info.loc[company_info.third_industry_code == '640106', 'second_industry_code'] = '640106'
375
+ company_info.loc[company_info.third_industry_code == '640107', 'second_industry_code'] = '640107'
376
+ company_info.loc[company_info.third_industry_code == '640108', 'second_industry_code'] = '640108'
377
+
378
+ return company_info
379
+
380
+
381
+ def find_sw_third_industry(new_third_industry_code):
382
+ sw_third_industry = mongodb_util.find_query_data('sw_industry', query={"_id": new_third_industry_code})
383
+ first_sw_industry_name = list(sw_third_industry['first_sw_industry'])[0]
384
+ second_sw_industry_name = list(sw_third_industry['second_sw_industry'])[0]
385
+
386
+ first_sw_industry = mongodb_util.find_query_data('sw_industry', query={'first_sw_industry': first_sw_industry_name,
387
+ "second_sw_industry": 0,
388
+ "third_sw_industry": 0
389
+ })
390
+
391
+ second_sw_industry = mongodb_util.find_query_data('sw_industry',
392
+ query={'second_sw_industry': second_sw_industry_name,
393
+ "third_sw_industry": 0
394
+ })
395
+
396
+ sw_third_industry['first_industry_code'] = first_sw_industry['_id']
397
+ sw_third_industry['second_industry_code'] = second_sw_industry['_id']
398
+ return sw_third_industry
399
+
400
+
401
+ # 修改行业信息
402
+ def fix_industry_data(new_third_industry_code, company_info):
403
+ sw_industry = find_sw_third_industry(new_third_industry_code)
404
+ company_info['first_sw_industry'] = sw_industry.first_sw_industry
405
+ company_info['first_industry_code'] = sw_industry.industry_code
406
+ company_info['second_sw_industry'] = sw_industry.second_sw_industry
407
+ company_info['second_industry_code'] = sw_industry.second_industry_code
408
+ company_info['third_sw_industry'] = sw_industry.third_sw_industry
409
+ company_info['third_industry_code'] = sw_industry.industry_code
410
+ return company_info
411
+
412
+
413
+ # 手动修改股票行业代码
414
+ def fix_symbol_industry(company_info, symbol):
415
+ fix_symbol_df = get_fix_symbol_industry()
416
+ fix_symbol_df_one = fix_symbol_df.loc[fix_symbol_df['symbol'] == symbol]
417
+ if data_frame_util.is_not_empty(fix_symbol_df_one):
418
+ new_third_industry_code = list(fix_symbol_df_one['new_industry_code'])[0]
419
+ company_info = fix_industry_data(new_third_industry_code, company_info)
420
+
421
+ return company_info
422
+
423
+
424
+ def filed_sort(company_info):
425
+ return company_info[[
426
+ "_id",
427
+ "name",
428
+ "industry",
429
+ "first_sw_industry",
430
+ "first_industry_code",
431
+ "second_sw_industry",
432
+ "second_industry_code",
433
+ "third_sw_industry",
434
+ "third_industry_code",
435
+ "ths_concept_name",
436
+ "ths_concept_code",
437
+ "ths_concept_sync_day",
438
+ "em_industry",
439
+ "em_concept",
440
+ "business_nature",
441
+ "actual_controller_name",
442
+ "actual_controller_rate",
443
+ "final_controller_name",
444
+ "final_controller_rate",
445
+ "mv_circulation_ratio",
446
+ 'qfii_type',
447
+ 'qfii_number',
448
+ 'share_holder_sync_day',
449
+ "flow_mv_sp",
450
+ "total_mv_sp",
451
+ "now_price",
452
+ "total_share",
453
+ "flow_share",
454
+ "total_mv",
455
+ "flow_mv",
456
+ "flow_mv_level",
457
+ "holder_controller_name",
458
+ "holder_controller_rate",
459
+ "area",
460
+ "list_date",
461
+ "deal_days",
462
+ "pe_ttm",
463
+ "pb",
464
+ "ROE",
465
+ "classification",
466
+ "base_business",
467
+ "intro",
468
+ "address",
469
+ "market_id",
470
+ "symbol",
471
+ "amount",
472
+ "sync_date",
473
+ "ths_concept_list_info",
474
+ 'ths_concept_name_list_str',
475
+ 'ths_concept_count',
476
+ 'ths_concept_most_relative_name',
477
+ 'ths_concept_most_relative_code',
478
+ 'ths_concept_list',
479
+ "kpl_plate_name",
480
+ "kpl_most_relative_name",
481
+ "kpl_plate_list_info",
482
+ 'operate_profit',
483
+ 'total_operate_income',
484
+ 'operate_date_name',
485
+ 'kzz_debt_list',
486
+ 'hk_stock_code',
487
+ 'hk_stock_name',
488
+ 'main_business_list',
489
+ 'most_profitable_business',
490
+ 'most_profitable_business_rate',
491
+ 'most_profitable_business_profit',
492
+ ]]
493
+
494
+
495
+ if __name__ == '__main__':
496
+ industry_df_test = get_fix_industry_name_df()
497
+ print(industry_df_test)
@@ -2,7 +2,7 @@ import sys
2
2
  import os
3
3
 
4
4
  file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
5
+ end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
  import pandas as pd
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,80 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+ from mns_common.db.MongodbUtil import MongodbUtil
10
+ from loguru import logger
11
+ import mns_common.api.em.real_time.east_money_debt_api as east_money_debt_api
12
+ import mns_common.api.em.real_time.east_money_etf_api as east_money_etf_api
13
+ import mns_common.api.em.real_time.east_money_stock_a_v2_api as east_money_stock_a_v2_api
14
+ from datetime import datetime
15
+ import mns_common.constant.extra_income_db_name as extra_income_db_name
16
+ import mns_common.api.em.real_time.east_money_stock_hk_api as east_money_stock_hk_api
17
+ import mns_common.component.cookie.cookie_info_service as cookie_info_service
18
+ import mns_common.api.em.real_time.east_money_stock_us_api as east_money_stock_us_api
19
+
20
+ mongodb_util = MongodbUtil('27017')
21
+
22
+
23
+ def sync_all_em_stock_info():
24
+ now_date = datetime.now()
25
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
26
+
27
+ logger.info("同步东方财富a,etf,kzz,us,hk,信息开始")
28
+
29
+ try:
30
+ # 这里需要使用详情接口 获取全量数据
31
+ em_a_stock_info_df = east_money_stock_a_v2_api.get_stock_real_time_quotes(60)
32
+ em_a_stock_info_df['list_date'] = em_a_stock_info_df['list_date'].fillna(19890604)
33
+ em_a_stock_info_df['_id'] = em_a_stock_info_df['symbol']
34
+ em_a_stock_info_df['sync_time'] = str_now_date
35
+ mongodb_util.save_mongo(em_a_stock_info_df, extra_income_db_name.EM_A_STOCK_INFO)
36
+ except BaseException as e:
37
+ logger.error("同步东方财富A股信息异常:{}", e)
38
+ try:
39
+ em_etf_info = east_money_etf_api.get_etf_real_time_quotes(30, 6)
40
+ em_etf_info['sync_time'] = str_now_date
41
+ mongodb_util.save_mongo(em_etf_info, extra_income_db_name.EM_ETF_INFO)
42
+ except BaseException as e:
43
+ logger.error("同步东方财富ETF信息异常:{}", e)
44
+
45
+ try:
46
+ em_kzz_info = east_money_debt_api.get_kzz_real_time_quotes(30, 6)
47
+ em_kzz_info['_id'] = em_kzz_info['symbol']
48
+ em_kzz_info['sync_time'] = str_now_date
49
+ mongodb_util.save_mongo(em_kzz_info, extra_income_db_name.EM_KZZ_INFO)
50
+ except BaseException as e:
51
+ logger.error("同步东方财富可转债信息异常:{}", e)
52
+
53
+ # em_cookie = cookie_info_service.get_em_cookie()
54
+ # try:
55
+ # em_hk_stock_info = east_money_stock_hk_api.get_hk_real_time_quotes(em_cookie, proxies)
56
+ # em_hk_stock_info['_id'] = em_hk_stock_info['symbol']
57
+ # mongodb_util.save_mongo(em_hk_stock_info, extra_income_db_name.EM_HK_STOCK_INFO)
58
+ # except BaseException as e:
59
+ # logger.error("同步东方财富港股信息异常:{}", e)
60
+ #
61
+ # try:
62
+ # em_cookie = cookie_info_service.get_em_cookie()
63
+ # em_us_stock_info = east_money_stock_us_api.get_us_stock_real_time_quotes(em_cookie, proxies)
64
+ # em_us_stock_info['_id'] = em_us_stock_info['symbol']
65
+ # mongodb_util.save_mongo(em_us_stock_info, extra_income_db_name.EM_US_STOCK_INFO)
66
+ # em_us_etf_info = em_us_stock_info.loc[(em_us_stock_info['amount'] != 0) & (em_us_stock_info['total_mv'] == 0)]
67
+ # em_us_etf_info = em_us_etf_info.sort_values(by=['amount'], ascending=False)
68
+ # mongodb_util.save_mongo(em_us_etf_info, extra_income_db_name.EM_US_ETF_INFO)
69
+ #
70
+ # except BaseException as e:
71
+ # logger.error("同步东方财富美股信息异常:{}", e)
72
+ logger.info("同步东方财富a,etf,kzz,us,hk,信息完成")
73
+
74
+
75
+ if __name__ == '__main__':
76
+ sync_all_em_stock_info()
77
+ # em_cookie = cookie_info_service.get_em_cookie()
78
+ # em_us_stock_info = east_money_stock_us_api.get_us_stock_real_time_quotes(em_cookie, None)
79
+ # em_us_stock_info['_id'] = em_us_stock_info['symbol']
80
+ # mongodb_util.save_mongo(em_us_stock_info, db_name_constant.EM_US_STOCK_INFO)
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,46 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import mns_common.api.ths.concept.web.ths_company_info_web as ths_company_info_web
9
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
10
+ from mns_common.db.MongodbUtil import MongodbUtil
11
+ import mns_common.utils.data_frame_util as data_frame_util
12
+ import mns_common.constant.db_name_constant as db_name_constant
13
+ import mns_common.component.company.company_common_service_api as company_common_service_api
14
+ import mns_common.component.common_service_fun_api as common_service_fun_api
15
+ from loguru import logger
16
+
17
+ mongodb_util = MongodbUtil('27017')
18
+
19
+
20
+ def sync_company_remark_info():
21
+ east_money_stock_info = em_stock_info_api.get_a_stock_info()
22
+ de_listed_stock_list = company_common_service_api.get_de_list_company()
23
+ east_money_stock_info = east_money_stock_info.loc[~(
24
+ east_money_stock_info['symbol'].isin(de_listed_stock_list))]
25
+ east_money_stock_info = common_service_fun_api.exclude_ts_symbol(east_money_stock_info)
26
+ east_money_stock_info = east_money_stock_info.loc[~((east_money_stock_info['industry'] == '-')
27
+ & (east_money_stock_info['now_price'] == 0))]
28
+
29
+ for stock_one in east_money_stock_info.itertuples():
30
+ try:
31
+ company_remark_info = ths_company_info_web.get_company_info(stock_one.symbol)
32
+ company_remark_info['_id'] = stock_one.symbol
33
+ company_remark_info['symbol'] = stock_one.symbol
34
+ company_remark_info['remark'] = ''
35
+ exist_company_remark_df = mongodb_util.find_query_data(db_name_constant.COMPANY_REMARK_INFO,
36
+ query={"symbol": stock_one.symbol})
37
+ if data_frame_util.is_not_empty(exist_company_remark_df):
38
+ company_remark_info['remark'] = list(exist_company_remark_df['remark'])[0]
39
+ mongodb_util.save_mongo(company_remark_info, db_name_constant.COMPANY_REMARK_INFO)
40
+ except BaseException as e:
41
+
42
+ logger.error("同步公司备注信息发生异常:{},{}", stock_one.symbol, e)
43
+
44
+
45
+ if __name__ == '__main__':
46
+ sync_company_remark_info()
@@ -2,7 +2,7 @@ import sys
2
2
  import os
3
3
 
4
4
  file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
5
+ end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
  from mns_common.db.MongodbUtil import MongodbUtil