mns-scheduler 1.3.5.1__tar.gz → 1.3.5.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mns-scheduler might be problematic. Click here for more details.
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/PKG-INFO +1 -1
- mns-scheduler-1.3.5.3/mns_scheduler/finance/em/__init__.py +7 -0
- {mns-scheduler-1.3.5.1/mns_scheduler/finance → mns-scheduler-1.3.5.3/mns_scheduler/finance/em}/em_financial_asset_liability_sync_service_api.py +1 -1
- {mns-scheduler-1.3.5.1/mns_scheduler/finance → mns-scheduler-1.3.5.3/mns_scheduler/finance/em}/em_financial_profit_sync_service_api.py +5 -3
- mns-scheduler-1.3.5.1/mns_scheduler/finance/sync_financial_report_service_api.py → mns-scheduler-1.3.5.3/mns_scheduler/finance/sync_financial_report_service_task.py +75 -22
- mns-scheduler-1.3.5.3/mns_scheduler/finance/xue_qiu/__init__.py +7 -0
- mns-scheduler-1.3.5.3/mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
- mns-scheduler-1.3.5.3/mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +154 -0
- mns-scheduler-1.3.5.3/mns_scheduler/k_line/sync_status/__init__.py +7 -0
- mns-scheduler-1.3.5.3/mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +3 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +1 -1
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zz_task/data_sync_task.py +12 -2
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler.egg-info/PKG-INFO +1 -1
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler.egg-info/SOURCES.txt +10 -4
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/setup.py +1 -1
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/README.md +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/announce/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/announce/company_announce_sync_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/base/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/base/sync_company_base_info_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/base/sync_company_hold_info_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/clean/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/clean/company_info_clean_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/constant/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/constant/company_constant_data.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/de_list_stock/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/em_stock_info/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/remark/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/clean/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/clean/kpl_concept_clean_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/clean/ths_concept_clean_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/common/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/detaill/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/sync_new_index/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/update_concept_info/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/col_move_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/db_status.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/col_move_script.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/db_move/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/db_move/col_move_one_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/sync/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/sync/local_mongo_util.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/sync/remote_data_sync_to_local.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/sync/remote_mongo_util.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/update/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/db/script/update/update_col_field.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/debt/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/debt/kzz_bond_info_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/dt/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/dt/stock_dt_pool_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/finance/__init__.py +0 -0
- {mns-scheduler-1.3.5.1/mns_scheduler/finance → mns-scheduler-1.3.5.3/mns_scheduler/finance/em}/finance_common_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/hk/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/hk/hk_company_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/hk/hk_industry_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/industry/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/industry/ths/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/industry/ths/ths_industry_index_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/industry/ths/ths_industry_sync_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/irm/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/irm/api/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/irm/stock_irm_cninfo_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/daily/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/daily/daily_k_line_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/k_line_info_clean_impl.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/k_line_info_clean_task.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/week_month/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/common/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/common/k_line_common_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/hot_stocks/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/month_week_daily/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/month_week_daily/daily_week_month_line_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/test/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/test/k_line_info_clean_his_data.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/year_quarter/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/index/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/index/sync_best_choose_his_index.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/index/sync_best_choose_index.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/symbol/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/total/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/lhb/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/lhb/stock_lhb_sync_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/open/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/open/sync_one_day_open_data_to_db_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/compliance/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/financial/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/financial/annual_report_audit_check_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/financial/net_assets_check_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/financial/profit_income_check_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/financial_report_risk_check_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/major_violations/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/self/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/self/wei_pan_stock_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/test/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/test/fix_blask_list.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/transactions/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/risk/transactions/transactions_check_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/self_choose/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/self_choose/ths_self_choose_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/auto_ipo_buy_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/auto_login/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/auto_login/trader_auto_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/auto_sell_service_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/balance/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/balance/ths_account_balance_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/sync_position_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/task/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/task/trader_task_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/tfp/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/trade/tfp/stock_tfp_info_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zb/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zb/stock_zb_pool_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/connected_boards/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/connected_boards/zt_five_boards_sync_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/export/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/export/export_kcx_high_chg_open_data_to_excel.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/high_chg/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/open_data/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/open_data/kcx_high_chg_open_data_sync.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/script/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/script/fix_error_deal_day.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/script/sync_now_higt_chg_zt.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/zt_pool/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zz_task/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zz_task/compensation/__init__.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zz_task/compensation/compensate_task.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/zz_task/compensation/compensate_task_one_day.py +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler.egg-info/dependency_links.txt +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler.egg-info/top_level.txt +0 -0
- {mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/setup.cfg +0 -0
|
@@ -7,7 +7,7 @@ project_path = file_path[0:end]
|
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import akshare as ak
|
|
9
9
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
|
-
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
10
|
+
import mns_scheduler.finance.em.finance_common_api as finance_common_api
|
|
11
11
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
12
|
|
|
13
13
|
mongodb_util = MongodbUtil('27017')
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
|
+
import pandas as pd
|
|
5
|
+
|
|
4
6
|
file_path = os.path.abspath(__file__)
|
|
5
7
|
end = file_path.index('mns') + 17
|
|
6
8
|
project_path = file_path[0:end]
|
|
@@ -12,7 +14,7 @@ import mns_common.utils.data_frame_util as data_frame_util
|
|
|
12
14
|
|
|
13
15
|
mongodb_util = MongodbUtil('27017')
|
|
14
16
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
15
|
-
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
17
|
+
import mns_scheduler.finance.em.finance_common_api as finance_common_api
|
|
16
18
|
from loguru import logger
|
|
17
19
|
|
|
18
20
|
|
|
@@ -293,7 +295,7 @@ def get_em_profit_api(symbol):
|
|
|
293
295
|
else:
|
|
294
296
|
new_profit_df = stock_profit_sheet_by_report_em
|
|
295
297
|
if data_frame_util.is_empty(new_profit_df):
|
|
296
|
-
return
|
|
298
|
+
return pd.DataFrame()
|
|
297
299
|
new_profit_df = new_profit_df.fillna(0)
|
|
298
300
|
return new_profit_df
|
|
299
301
|
|
|
@@ -341,7 +343,7 @@ def check_columns(profit_df):
|
|
|
341
343
|
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
342
344
|
|
|
343
345
|
if __name__ == '__main__':
|
|
344
|
-
get_em_profit_api('
|
|
346
|
+
get_em_profit_api('688302')
|
|
345
347
|
em_df = em_stock_info_api.get_a_stock_info()
|
|
346
348
|
for em_one in em_df.itertuples():
|
|
347
349
|
try:
|
|
@@ -8,15 +8,16 @@ sys.path.append(project_path)
|
|
|
8
8
|
from datetime import datetime
|
|
9
9
|
|
|
10
10
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
11
|
-
import mns_scheduler.finance.em_financial_profit_sync_service_api as em_financial_profit_sync_service_api
|
|
11
|
+
import mns_scheduler.finance.em.em_financial_profit_sync_service_api as em_financial_profit_sync_service_api
|
|
12
12
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
13
|
from loguru import logger
|
|
14
14
|
import \
|
|
15
|
-
mns_scheduler.finance.em_financial_asset_liability_sync_service_api as em_financial_asset_liability_sync_service_api
|
|
15
|
+
mns_scheduler.finance.em.em_financial_asset_liability_sync_service_api as em_financial_asset_liability_sync_service_api
|
|
16
16
|
import mns_scheduler.risk.financial_report_risk_check_api as financial_report_risk_check_api
|
|
17
17
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
18
|
-
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
18
|
+
import mns_scheduler.finance.em.finance_common_api as finance_common_api
|
|
19
19
|
import mns_scheduler.risk.compliance.undisclosed_annual_report_api as undisclosed_annual_report_api
|
|
20
|
+
import mns_scheduler.finance.xue_qiu.sync_xue_qiu_fiance_data as sync_xue_qiu_fiance_data
|
|
20
21
|
|
|
21
22
|
mongodb_util = MongodbUtil('27017')
|
|
22
23
|
|
|
@@ -26,39 +27,90 @@ mongodb_util = MongodbUtil('27017')
|
|
|
26
27
|
# 3、上市公司季报披露时间:
|
|
27
28
|
# 1季报:每年4月1日-- -4月30日。
|
|
28
29
|
# 2季报(中报) :每年7月1日--8月30日。
|
|
29
|
-
# 3季报:每年10月1日--10月31日
|
|
30
|
+
# 3季报:每年10月1日--10月31日
|
|
31
|
+
# 4季报(年报) :每年1月1日--4月30日
|
|
30
32
|
|
|
31
33
|
def sync_financial_report():
|
|
32
34
|
now_date = datetime.now()
|
|
33
35
|
now_year = now_date.year
|
|
34
36
|
now_month = now_date.month
|
|
35
37
|
sync_time = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
36
|
-
|
|
37
|
-
if 1
|
|
38
|
+
|
|
39
|
+
if now_month in [1, 2, 3, 4]:
|
|
40
|
+
sync_xue_qiu_fiance_data.sync_xue_qiu_very_period_report(str(now_year - 1) + '年报')
|
|
41
|
+
|
|
42
|
+
# 年报
|
|
38
43
|
period = 4
|
|
39
44
|
period_time = str(now_year - 1) + "-12-31 00:00:00"
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
sync_em_profit_report(period_time, sync_time, period)
|
|
46
|
+
sync_em_asset_liability_report(period_time, sync_time, period)
|
|
47
|
+
|
|
48
|
+
# 一季报
|
|
49
|
+
if now_month == 4:
|
|
50
|
+
sync_xue_qiu_fiance_data.sync_xue_qiu_very_period_report(str(now_year) + '一季报')
|
|
51
|
+
|
|
52
|
+
period = 1
|
|
53
|
+
period_time = str(now_year) + "-03-31 00:00:00"
|
|
54
|
+
sync_em_profit_report(period_time, sync_time, period)
|
|
55
|
+
sync_em_asset_liability_report(period_time, sync_time, period)
|
|
56
|
+
|
|
42
57
|
|
|
43
|
-
# 一季报
|
|
44
|
-
elif now_month == 5:
|
|
45
|
-
period = 1
|
|
46
|
-
period_time = str(now_year) + "-03-31 00:00:00"
|
|
47
|
-
sync_profit_report(period_time, sync_time, period)
|
|
48
|
-
sync_asset_liability_report(period_time, sync_time, period)
|
|
49
58
|
|
|
50
59
|
# 二季报
|
|
51
|
-
elif
|
|
60
|
+
elif now_month in [7, 8]:
|
|
61
|
+
sync_xue_qiu_fiance_data.sync_xue_qiu_very_period_report(str(now_year) + '中报')
|
|
62
|
+
|
|
52
63
|
period = 2
|
|
53
64
|
period_time = str(now_year) + "-06-30 00:00:00"
|
|
54
|
-
|
|
55
|
-
|
|
65
|
+
sync_em_profit_report(period_time, sync_time, period)
|
|
66
|
+
sync_em_asset_liability_report(period_time, sync_time, period)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
56
70
|
# 三季报
|
|
57
71
|
elif now_month == 10:
|
|
72
|
+
sync_xue_qiu_fiance_data.sync_xue_qiu_very_period_report(str(now_year) + '三季报')
|
|
73
|
+
|
|
58
74
|
period = 3
|
|
59
75
|
period_time = str(now_year) + "-09-30 00:00:00"
|
|
60
|
-
|
|
61
|
-
|
|
76
|
+
sync_em_profit_report(period_time, sync_time, period)
|
|
77
|
+
sync_em_asset_liability_report(period_time, sync_time, period)
|
|
78
|
+
|
|
79
|
+
elif now_month == 5:
|
|
80
|
+
|
|
81
|
+
sync_xue_qiu_fiance_data.sync_xue_qiu_very_period_report(str(now_year - 1) + '年报')
|
|
82
|
+
sync_xue_qiu_fiance_data.sync_xue_qiu_very_period_report(str(now_year) + '一季报')
|
|
83
|
+
|
|
84
|
+
# 补偿年报和一季度,出不了报告的
|
|
85
|
+
miss_period_04 = 4
|
|
86
|
+
miss_period_time_04 = str(now_year - 1) + "-12-31 00:00:00"
|
|
87
|
+
|
|
88
|
+
sync_em_profit_report(miss_period_time_04, sync_time, miss_period_04)
|
|
89
|
+
sync_em_asset_liability_report(miss_period_time_04, sync_time, miss_period_04)
|
|
90
|
+
|
|
91
|
+
period_01 = 1
|
|
92
|
+
period_time_01 = str(now_year) + "-03-31 00:00:00"
|
|
93
|
+
sync_em_profit_report(period_time_01, sync_time, period_01)
|
|
94
|
+
sync_em_asset_liability_report(period_time_01, sync_time, period_01)
|
|
95
|
+
|
|
96
|
+
elif now_month == 9:
|
|
97
|
+
sync_xue_qiu_fiance_data.sync_xue_qiu_very_period_report(str(now_year) + '中报')
|
|
98
|
+
|
|
99
|
+
# 补偿二季度
|
|
100
|
+
period_02 = 2
|
|
101
|
+
period_time_02 = str(now_year) + "-06-30 00:00:00"
|
|
102
|
+
sync_em_profit_report(period_time_02, sync_time, period_02)
|
|
103
|
+
sync_em_asset_liability_report(period_time_02, sync_time, period_02)
|
|
104
|
+
|
|
105
|
+
elif now_month in [11, 12]:
|
|
106
|
+
sync_xue_qiu_fiance_data.sync_xue_qiu_very_period_report(str(now_year) + '三季报')
|
|
107
|
+
|
|
108
|
+
# 补偿三季度
|
|
109
|
+
period_03 = 3
|
|
110
|
+
period_time_03 = str(now_year) + "-09-30 00:00:00"
|
|
111
|
+
sync_em_profit_report(period_time_03, sync_time, period_03)
|
|
112
|
+
sync_em_asset_liability_report(period_time_03, sync_time, period_03)
|
|
113
|
+
|
|
62
114
|
# 未出报告check
|
|
63
115
|
undisclosed_annual_report_api.un_disclosed_report_check(sync_time, now_year, period, period_time)
|
|
64
116
|
# 新股或者未出报告的
|
|
@@ -66,7 +118,7 @@ def sync_financial_report():
|
|
|
66
118
|
|
|
67
119
|
|
|
68
120
|
# 同步资产表
|
|
69
|
-
def
|
|
121
|
+
def sync_em_asset_liability_report(period_time, sync_time, period):
|
|
70
122
|
un_report_asset_df = finance_common_api.find_un_report_symbol(period_time,
|
|
71
123
|
db_name_constant.EM_STOCK_ASSET_LIABILITY)
|
|
72
124
|
for un_report_asset_one in un_report_asset_df.itertuples():
|
|
@@ -91,8 +143,8 @@ def sync_asset_liability_report(period_time, sync_time, period):
|
|
|
91
143
|
logger.error("同步资产表异常:{},{},{}", symbol, period_time, e)
|
|
92
144
|
|
|
93
145
|
|
|
94
|
-
#
|
|
95
|
-
def
|
|
146
|
+
# 同步em利润表
|
|
147
|
+
def sync_em_profit_report(period_time, sync_time, period):
|
|
96
148
|
un_report_profit_df = finance_common_api.find_un_report_symbol(period_time, db_name_constant.EM_STOCK_PROFIT)
|
|
97
149
|
for un_report_profit_one in un_report_profit_df.itertuples():
|
|
98
150
|
try:
|
|
@@ -146,4 +198,5 @@ if __name__ == '__main__':
|
|
|
146
198
|
now_year_test = now_date_test.year
|
|
147
199
|
now_month_test = now_date_test.month
|
|
148
200
|
sync_time_test = now_date_test.strftime('%Y-%m-%d %H:%M:%S')
|
|
201
|
+
sync_miss_report(sync_time_test)
|
|
149
202
|
sync_financial_report()
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import requests
|
|
9
|
+
import pandas as pd
|
|
10
|
+
from loguru import logger
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# report_type income 利润表
|
|
14
|
+
# cash_flow 现金流量
|
|
15
|
+
# balance 资产负债
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_xue_qiu_report(symbol, report_type, cookie, count, period_type):
|
|
19
|
+
# 请求 URL
|
|
20
|
+
url = (f"https://stock.xueqiu.com/v5/stock/finance/cn/{report_type}.json?symbol={symbol}&type={period_type}"
|
|
21
|
+
f"&is_detail=true&count={count}")
|
|
22
|
+
|
|
23
|
+
# 请求头(关键是 cookies)
|
|
24
|
+
headers = {
|
|
25
|
+
"accept": "application/json, text/plain, */*",
|
|
26
|
+
"accept-language": "zh-CN,zh;q=0.9",
|
|
27
|
+
"origin": "https://xueqiu.com",
|
|
28
|
+
"referer": f"https://xueqiu.com/snowman/S/{symbol}/detail",
|
|
29
|
+
"sec-fetch-mode": "cors",
|
|
30
|
+
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
|
|
31
|
+
# ⚠ 替换为你浏览器访问雪球后的 Cookie(需含 xq_a_token)
|
|
32
|
+
"cookie": cookie,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# 发送请求
|
|
36
|
+
response = requests.get(url, headers=headers)
|
|
37
|
+
|
|
38
|
+
# 检查结果
|
|
39
|
+
if response.status_code == 200:
|
|
40
|
+
data = response.json()
|
|
41
|
+
|
|
42
|
+
# 提取财报数据列表
|
|
43
|
+
raw_list = data['data']['list']
|
|
44
|
+
processed_list = []
|
|
45
|
+
|
|
46
|
+
for entry in raw_list:
|
|
47
|
+
flat_entry = {}
|
|
48
|
+
for key, value in entry.items():
|
|
49
|
+
if isinstance(value, list) and len(value) == 2:
|
|
50
|
+
# 处理列表字段:提取两个值,空则填 0
|
|
51
|
+
v0 = value[0] if value[0] is not None else 0
|
|
52
|
+
v1 = value[1] if value[1] is not None else 0
|
|
53
|
+
flat_entry[key] = v0
|
|
54
|
+
flat_entry[key + "_chg"] = round(v1 * 100, 2)
|
|
55
|
+
elif value is None:
|
|
56
|
+
# 整个字段为空,设置为 0 和 0(变化量)
|
|
57
|
+
flat_entry[key] = 0
|
|
58
|
+
else:
|
|
59
|
+
flat_entry[key] = value
|
|
60
|
+
processed_list.append(flat_entry)
|
|
61
|
+
|
|
62
|
+
# 转换为 DataFrame
|
|
63
|
+
df = pd.DataFrame(processed_list)
|
|
64
|
+
return df
|
|
65
|
+
|
|
66
|
+
else:
|
|
67
|
+
logger.error("请求失败,状态码:{}", response.status_code)
|
|
68
|
+
return pd.DataFrame()
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
import mns_common.component.cookie.cookie_info_service as cookie_info_service
|
|
72
|
+
|
|
73
|
+
if __name__ == '__main__':
|
|
74
|
+
cash_flow_df = get_xue_qiu_report('SZ301662', 'cash_flow', cookie_info_service.get_xue_qiu_cookie(), 1, 'all')
|
|
75
|
+
income_df = get_xue_qiu_report('SZ301662', 'income', cookie_info_service.get_xue_qiu_cookie(), 1, 'all')
|
|
76
|
+
balance_df = get_xue_qiu_report('SZ301662', 'balance', cookie_info_service.get_xue_qiu_cookie(), 1, 'all')
|
|
77
|
+
pass
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
|
|
9
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
|
+
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
11
|
+
import mns_scheduler.finance.xue_qiu.down_load_xueqiu_report_api as down_load_xueqiu_report_api
|
|
12
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
13
|
+
import pandas as pd
|
|
14
|
+
from loguru import logger
|
|
15
|
+
import time
|
|
16
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
17
|
+
import mns_common.component.cookie.cookie_info_service as cookie_info_service
|
|
18
|
+
from datetime import datetime
|
|
19
|
+
|
|
20
|
+
mongodb_util_27017 = MongodbUtil('27017')
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# report_type income 利润表
|
|
24
|
+
# cash_flow 现金流量
|
|
25
|
+
# balance 资产负债
|
|
26
|
+
# 同步所有股票 报表
|
|
27
|
+
def sync_all_stocks_report():
|
|
28
|
+
em_a_stock_info_df = mongodb_util_27017.find_all_data('em_a_stock_info')
|
|
29
|
+
em_a_stock_info_df = common_service_fun_api.add_pre_prefix(em_a_stock_info_df)
|
|
30
|
+
# 或等效写法 df['A'].str[0:6]
|
|
31
|
+
|
|
32
|
+
fail_list = []
|
|
33
|
+
|
|
34
|
+
xue_qiu_cookie = cookie_info_service.get_xue_qiu_cookie()
|
|
35
|
+
report_type_list = ['income', 'balance', 'cash_flow']
|
|
36
|
+
for stock_one in em_a_stock_info_df.itertuples():
|
|
37
|
+
fail_list = save_one_symbol_data(stock_one, report_type_list, xue_qiu_cookie, True, fail_list, '', False)
|
|
38
|
+
|
|
39
|
+
handle_number = 0
|
|
40
|
+
# 处理失败的
|
|
41
|
+
while len(fail_list) > 0:
|
|
42
|
+
fail_df = em_a_stock_info_df.loc[em_a_stock_info_df['symbol'].isin(fail_list)]
|
|
43
|
+
for fail_one in fail_df.itertuples():
|
|
44
|
+
fail_list = save_one_symbol_data(fail_one, report_type_list, xue_qiu_cookie, True, fail_list, '', False)
|
|
45
|
+
handle_number = handle_number + 1
|
|
46
|
+
if handle_number > 10:
|
|
47
|
+
break
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def save_one_symbol_data(stock_one, report_type_list, xue_qiu_cookie, save_tag, fail_list, report_name, check_exist):
|
|
51
|
+
try:
|
|
52
|
+
symbol_prefix = stock_one.symbol_prefix
|
|
53
|
+
name = stock_one.name
|
|
54
|
+
symbol = stock_one.symbol
|
|
55
|
+
for report_type in report_type_list:
|
|
56
|
+
if report_type == 'income':
|
|
57
|
+
col_name = extra_income_db_name.XUE_QIU_LRB_INCOME
|
|
58
|
+
elif report_type == 'balance':
|
|
59
|
+
col_name = extra_income_db_name.XUE_QIU_ASSET_DEBT
|
|
60
|
+
elif report_type == 'cash_flow':
|
|
61
|
+
col_name = extra_income_db_name.XUE_QIU_CASH_FLOW
|
|
62
|
+
if check_exist:
|
|
63
|
+
query_exist = {'symbol': symbol, 'report_name': report_name}
|
|
64
|
+
# 存在数据 不在同步
|
|
65
|
+
if mongodb_util_27017.exist_data_query(col_name, query_exist):
|
|
66
|
+
continue
|
|
67
|
+
|
|
68
|
+
index_create = [('symbol', 1), ('report_date', 1)]
|
|
69
|
+
mongodb_util_27017.create_index(col_name, index_create)
|
|
70
|
+
|
|
71
|
+
index_create_01 = [('symbol', 1), ('sync_time', 1)]
|
|
72
|
+
mongodb_util_27017.create_index(col_name, index_create_01)
|
|
73
|
+
|
|
74
|
+
if check_exist:
|
|
75
|
+
# 季度同步只同步一条数据
|
|
76
|
+
result_df = down_load_xueqiu_report_api.get_xue_qiu_report(symbol_prefix, report_type, xue_qiu_cookie,
|
|
77
|
+
1,
|
|
78
|
+
'all')
|
|
79
|
+
else:
|
|
80
|
+
result_df = down_load_xueqiu_report_api.get_xue_qiu_report(symbol_prefix, report_type, xue_qiu_cookie,
|
|
81
|
+
200,
|
|
82
|
+
'all')
|
|
83
|
+
|
|
84
|
+
now_date = datetime.now()
|
|
85
|
+
sync_time = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
86
|
+
|
|
87
|
+
if data_frame_util.is_empty(result_df):
|
|
88
|
+
logger.error("财务信息为空,代码:{}:{}", symbol, name)
|
|
89
|
+
continue
|
|
90
|
+
else:
|
|
91
|
+
# 季度同步check
|
|
92
|
+
if check_exist:
|
|
93
|
+
result_df = result_df.loc[result_df['report_name'] == report_name]
|
|
94
|
+
if data_frame_util.is_empty(result_df):
|
|
95
|
+
continue
|
|
96
|
+
|
|
97
|
+
result_df['sync_time'] = sync_time
|
|
98
|
+
time.sleep(0.5)
|
|
99
|
+
# 1. 将毫秒时间戳转为 datetime
|
|
100
|
+
result_df['report_date'] = pd.to_datetime(result_df['report_date'], unit='ms')
|
|
101
|
+
|
|
102
|
+
# 2. 格式化为 '%Y-%m-%d' 字符串
|
|
103
|
+
result_df['report_date'] = result_df['report_date'].dt.strftime('%Y-%m-%d')
|
|
104
|
+
|
|
105
|
+
result_df['_id'] = symbol + '_' + result_df['report_date']
|
|
106
|
+
result_df['symbol'] = symbol
|
|
107
|
+
|
|
108
|
+
# 1. 将毫秒时间戳转为 datetime
|
|
109
|
+
result_df['ctime'] = pd.to_datetime(result_df['ctime'], unit='ms')
|
|
110
|
+
|
|
111
|
+
# 2. 格式化为 '%Y-%m-%d' 字符串
|
|
112
|
+
result_df['ctime'] = result_df['ctime'].dt.strftime('%Y-%m-%d')
|
|
113
|
+
|
|
114
|
+
if save_tag:
|
|
115
|
+
mongodb_util_27017.save_mongo(result_df, col_name)
|
|
116
|
+
else:
|
|
117
|
+
mongodb_util_27017.insert_mongo(result_df, col_name)
|
|
118
|
+
|
|
119
|
+
if symbol in fail_list:
|
|
120
|
+
fail_list.remove(symbol)
|
|
121
|
+
logger.info("同步完成数据:{}:{}", symbol, name)
|
|
122
|
+
except BaseException as e:
|
|
123
|
+
logger.error("同步错误:{},异常信息:{}", symbol, e)
|
|
124
|
+
fail_list.append(symbol)
|
|
125
|
+
return fail_list
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def sync_xue_qiu_very_period_report(report_name):
|
|
129
|
+
em_a_stock_info_df = mongodb_util_27017.find_all_data('em_a_stock_info')
|
|
130
|
+
em_a_stock_info_df = common_service_fun_api.add_pre_prefix(em_a_stock_info_df)
|
|
131
|
+
# 或等效写法 df['A'].str[0:6]
|
|
132
|
+
|
|
133
|
+
fail_list = []
|
|
134
|
+
|
|
135
|
+
xue_qiu_cookie = cookie_info_service.get_xue_qiu_cookie()
|
|
136
|
+
report_type_list = ['income', 'balance', 'cash_flow']
|
|
137
|
+
for stock_one in em_a_stock_info_df.itertuples():
|
|
138
|
+
fail_list = save_one_symbol_data(stock_one, report_type_list, xue_qiu_cookie, False, fail_list, report_name,
|
|
139
|
+
True)
|
|
140
|
+
|
|
141
|
+
handle_number = 0
|
|
142
|
+
# 处理失败的
|
|
143
|
+
while len(fail_list) > 0:
|
|
144
|
+
fail_df = em_a_stock_info_df.loc[em_a_stock_info_df['symbol'].isin(fail_list)]
|
|
145
|
+
for fail_one in fail_df.itertuples():
|
|
146
|
+
fail_list = save_one_symbol_data(fail_one, report_type_list, xue_qiu_cookie, False, fail_list, report_name,
|
|
147
|
+
True)
|
|
148
|
+
handle_number = handle_number + 1
|
|
149
|
+
if handle_number > 10:
|
|
150
|
+
break
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
if __name__ == '__main__':
|
|
154
|
+
sync_all_stocks_report()
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
10
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
11
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
|
+
import mns_common.utils.date_handle_util as date_handle_util
|
|
13
|
+
import mns_common.api.msg.push_msg_api as push_msg_api
|
|
14
|
+
|
|
15
|
+
mongodb_util = MongodbUtil('27017')
|
|
16
|
+
|
|
17
|
+
min_k_line_count = 5200
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# check下一个交易日k线同步状态
|
|
21
|
+
def check_k_line_sync_count():
|
|
22
|
+
now_date = datetime.now()
|
|
23
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
24
|
+
hour = now_date.hour
|
|
25
|
+
# 是否是交易日
|
|
26
|
+
if trade_date_common_service_api.is_trade_day(str_day):
|
|
27
|
+
if hour > 15:
|
|
28
|
+
qfq_day = str_day
|
|
29
|
+
k_line_day = trade_date_common_service_api.get_further_trade_date(str_day, 2)
|
|
30
|
+
else:
|
|
31
|
+
qfq_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
32
|
+
k_line_day = str_day
|
|
33
|
+
else:
|
|
34
|
+
qfq_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
35
|
+
k_line_day = trade_date_common_service_api.get_further_trade_date(str_day, 1)
|
|
36
|
+
|
|
37
|
+
# check 当日k线同步状态
|
|
38
|
+
query_qfq = {'date': date_handle_util.no_slash_date(qfq_day)}
|
|
39
|
+
qfq_k_line_count = mongodb_util.count(query_qfq, db_name_constant.STOCK_QFQ_DAILY)
|
|
40
|
+
if qfq_k_line_count < min_k_line_count:
|
|
41
|
+
title = '当日k线同步数量不对'
|
|
42
|
+
msg = '当日k线同步数量不对,当前k线数量:' + str(qfq_k_line_count)
|
|
43
|
+
push_msg_api.push_msg_to_wechat(title, msg)
|
|
44
|
+
|
|
45
|
+
query_last_trade = {'str_day': k_line_day}
|
|
46
|
+
last_trade_day_k_line_count = mongodb_util.count(query_last_trade, 'k_line_info')
|
|
47
|
+
if last_trade_day_k_line_count < min_k_line_count:
|
|
48
|
+
title = '下一个交易日策略k线数量不对'
|
|
49
|
+
msg = '下一个交易日策略k线数量不对,当前数量:' + str(last_trade_day_k_line_count)
|
|
50
|
+
push_msg_api.push_msg_to_wechat(title, msg)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == '__main__':
|
|
54
|
+
check_k_line_sync_count()
|
|
@@ -51,6 +51,9 @@ def update_symbol_new_concept_reason(plate_code, kpl_symbol_list):
|
|
|
51
51
|
symbol_str = ','.join(kpl_symbol_list)
|
|
52
52
|
choose_reason_df = kpl_common_api.get_kpl_concept_choose_reason(plate_code, symbol_str)
|
|
53
53
|
if data_frame_util.is_not_empty(choose_reason_df):
|
|
54
|
+
choose_reason_df = choose_reason_df[choose_reason_df['choose_reason'] != '']
|
|
55
|
+
if data_frame_util.is_empty(choose_reason_df):
|
|
56
|
+
return
|
|
54
57
|
for choose_reason_one in choose_reason_df.itertuples():
|
|
55
58
|
symbol = choose_reason_one.symbol
|
|
56
59
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
import mns_common.component.self_choose.black_list_service_api as black_list_service_api
|
|
3
|
-
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
3
|
+
import mns_scheduler.finance.em.finance_common_api as finance_common_api
|
|
4
4
|
from loguru import logger
|
|
5
5
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
6
6
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
@@ -53,13 +53,14 @@ import mns_scheduler.company_info.clean.company_info_clean_api as company_info_c
|
|
|
53
53
|
import mns_scheduler.zt.zt_pool.ths_zt_pool_sync_api as ths_zt_pool_sync_api
|
|
54
54
|
import mns_scheduler.trade.task.trader_task_service as trader_task_service
|
|
55
55
|
import mns_scheduler.company_info.remark.company_remark_info_sync as company_remark_info_sync
|
|
56
|
-
import mns_scheduler.finance.
|
|
56
|
+
import mns_scheduler.finance.sync_financial_report_service_task as sync_financial_report_service_task
|
|
57
57
|
import mns_scheduler.hk.hk_industry_info_sync_service_api as hk_industry_info_sync_service_api
|
|
58
58
|
import mns_scheduler.hk.hk_company_info_sync_service_api as hk_company_info_sync_service_api
|
|
59
59
|
import mns_scheduler.zt.zt_pool.update_null_zt_reason_api as update_null_zt_reason_api
|
|
60
60
|
import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
|
|
61
61
|
import mns_scheduler.industry.ths.ths_industry_sync_service as ths_industry_sync_service
|
|
62
62
|
import mns_scheduler.k_line.year_quarter.year_quarter_line_sync as year_quarter_line_sync
|
|
63
|
+
import mns_scheduler.k_line.sync_status.k_line_sync_status_check as k_line_sync_status_check
|
|
63
64
|
|
|
64
65
|
|
|
65
66
|
# 同步交易日期任务完成
|
|
@@ -387,7 +388,7 @@ def self_choose_stock_task():
|
|
|
387
388
|
# 同步财务报表
|
|
388
389
|
def sync_financial_report_task():
|
|
389
390
|
logger.info('同步财务报表任务')
|
|
390
|
-
|
|
391
|
+
sync_financial_report_service_task.sync_financial_report()
|
|
391
392
|
|
|
392
393
|
|
|
393
394
|
# 同步hk公司信息
|
|
@@ -438,6 +439,12 @@ def sync_all_em_stock_info():
|
|
|
438
439
|
sync_em_stock_info_sync.sync_all_em_stock_info()
|
|
439
440
|
|
|
440
441
|
|
|
442
|
+
# check 前复权k线和下一个交易日策略k线数据同步状态
|
|
443
|
+
def check_k_line_sync_count():
|
|
444
|
+
logger.info("check前复权k线和下一个交易日策略k线数据同步状态")
|
|
445
|
+
k_line_sync_status_check.check_k_line_sync_count()
|
|
446
|
+
|
|
447
|
+
|
|
441
448
|
# # 定义BlockingScheduler
|
|
442
449
|
blockingScheduler = BlockingScheduler()
|
|
443
450
|
|
|
@@ -552,6 +559,9 @@ blockingScheduler.add_job(sync_all_kpl_plate_info, 'interval', minutes=5, max_in
|
|
|
552
559
|
# 同步新公告信息 感觉没有必要同步 直接连接过去查看
|
|
553
560
|
# blockingScheduler.add_job(sync_company_announce, 'cron', hour='07,18,23', minute='33')
|
|
554
561
|
|
|
562
|
+
# check 前复权k线和下一个交易日策略k线数据同步状态
|
|
563
|
+
blockingScheduler.add_job(check_k_line_sync_count, 'cron', hour='0,23', minute='10')
|
|
564
|
+
|
|
555
565
|
print('定时任务启动成功')
|
|
556
566
|
blockingScheduler.start()
|
|
557
567
|
#
|
|
@@ -56,10 +56,14 @@ mns_scheduler/debt/kzz_bond_info_sync.py
|
|
|
56
56
|
mns_scheduler/dt/__init__.py
|
|
57
57
|
mns_scheduler/dt/stock_dt_pool_sync.py
|
|
58
58
|
mns_scheduler/finance/__init__.py
|
|
59
|
-
mns_scheduler/finance/
|
|
60
|
-
mns_scheduler/finance/
|
|
61
|
-
mns_scheduler/finance/
|
|
62
|
-
mns_scheduler/finance/
|
|
59
|
+
mns_scheduler/finance/sync_financial_report_service_task.py
|
|
60
|
+
mns_scheduler/finance/em/__init__.py
|
|
61
|
+
mns_scheduler/finance/em/em_financial_asset_liability_sync_service_api.py
|
|
62
|
+
mns_scheduler/finance/em/em_financial_profit_sync_service_api.py
|
|
63
|
+
mns_scheduler/finance/em/finance_common_api.py
|
|
64
|
+
mns_scheduler/finance/xue_qiu/__init__.py
|
|
65
|
+
mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py
|
|
66
|
+
mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py
|
|
63
67
|
mns_scheduler/hk/__init__.py
|
|
64
68
|
mns_scheduler/hk/hk_company_info_sync_service_api.py
|
|
65
69
|
mns_scheduler/hk/hk_industry_info_sync_service_api.py
|
|
@@ -89,6 +93,8 @@ mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py
|
|
|
89
93
|
mns_scheduler/k_line/month_week_daily/__init__.py
|
|
90
94
|
mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py
|
|
91
95
|
mns_scheduler/k_line/month_week_daily/daily_week_month_line_sync.py
|
|
96
|
+
mns_scheduler/k_line/sync_status/__init__.py
|
|
97
|
+
mns_scheduler/k_line/sync_status/k_line_sync_status_check.py
|
|
92
98
|
mns_scheduler/k_line/test/__init__.py
|
|
93
99
|
mns_scheduler/k_line/test/k_line_info_clean_his_data.py
|
|
94
100
|
mns_scheduler/k_line/year_quarter/__init__.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/announce/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/clean/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/constant/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mns-scheduler-1.3.5.1 → mns-scheduler-1.3.5.3}/mns_scheduler/company_info/de_list_stock/__init__.py
RENAMED
|
File without changes
|