mns-scheduler 1.0.4.7__py3-none-any.whl → 1.0.4.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mns-scheduler might be problematic. Click here for more details.
- mns_scheduler/finance/{em_financial_sync_service_api.py → em_financial_asset_liability_sync_service_api.py} +27 -269
- mns_scheduler/finance/em_financial_profit_sync_service_api.py +340 -0
- mns_scheduler/finance/finance_common_api.py +35 -0
- mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py +168 -0
- mns_scheduler/finance/sync_financial_report_service_api.py +127 -0
- mns_scheduler/risk/register_and_investigate_stock_sync_api.py +2 -1
- {mns_scheduler-1.0.4.7.dist-info → mns_scheduler-1.0.4.8.dist-info}/METADATA +1 -1
- {mns_scheduler-1.0.4.7.dist-info → mns_scheduler-1.0.4.8.dist-info}/RECORD +10 -6
- {mns_scheduler-1.0.4.7.dist-info → mns_scheduler-1.0.4.8.dist-info}/WHEEL +0 -0
- {mns_scheduler-1.0.4.7.dist-info → mns_scheduler-1.0.4.8.dist-info}/top_level.txt +0 -0
|
@@ -7,8 +7,11 @@ 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
|
-
|
|
10
|
+
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
11
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
11
12
|
mongodb_util = MongodbUtil('27017')
|
|
13
|
+
from loguru import logger
|
|
14
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
15
|
|
|
13
16
|
|
|
14
17
|
#
|
|
@@ -337,8 +340,15 @@ mongodb_util = MongodbUtil('27017')
|
|
|
337
340
|
|
|
338
341
|
# 资产负债表
|
|
339
342
|
# https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#zcfzb-0
|
|
340
|
-
def
|
|
341
|
-
|
|
343
|
+
def get_em_asset_liability_api(symbol):
|
|
344
|
+
sec_code = finance_common_api.get_sec_code(symbol)
|
|
345
|
+
try:
|
|
346
|
+
stock_balance_sheet_by_report_em_df = ak.stock_balance_sheet_by_report_em(sec_code)
|
|
347
|
+
except Exception as e:
|
|
348
|
+
logger.error("同步利润表异常:{},{}", symbol, e)
|
|
349
|
+
return None
|
|
350
|
+
if data_frame_util.is_empty(stock_balance_sheet_by_report_em_df):
|
|
351
|
+
return None
|
|
342
352
|
stock_balance_sheet_by_report_em_df = stock_balance_sheet_by_report_em_df[[
|
|
343
353
|
'SECUCODE',
|
|
344
354
|
'SECURITY_CODE',
|
|
@@ -403,276 +413,24 @@ def get_em_debt_api(symbol):
|
|
|
403
413
|
'USERIGHT_ASSET',
|
|
404
414
|
'OPINION_TYPE'
|
|
405
415
|
]]
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
416
|
+
stock_balance_sheet_by_report_em_df['_id'] = (stock_balance_sheet_by_report_em_df['SECURITY_CODE']
|
|
417
|
+
+ "_" + stock_balance_sheet_by_report_em_df['REPORT_DATE'])
|
|
409
418
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
# "NOTICE_DATE" : "2024-04-03 00:00:00",
|
|
422
|
-
# "UPDATE_DATE" : "2024-04-03 00:00:00",
|
|
423
|
-
# "CURRENCY" : "CNY",
|
|
424
|
-
# "TOTAL_OPERATE_INCOME" : 150560330316.45, 营业总收入
|
|
425
|
-
# "TOTAL_OPERATE_INCOME_YOY" : 18.0365792459, 总运营收入修正
|
|
426
|
-
# "OPERATE_INCOME" : 147693604994.14, 营业收入
|
|
427
|
-
# "OPERATE_INCOME_YOY" : 19.0119185529, 营业收入修正
|
|
428
|
-
# "INTEREST_INCOME" : 2866725322.31, 利息收入
|
|
429
|
-
# "INTEREST_INCOME_YOY" : 利息收入修正
|
|
430
|
-
# "EARNED_PREMIUM" : NaN,
|
|
431
|
-
# "EARNED_PREMIUM_YOY" : NaN,
|
|
432
|
-
# "FEE_COMMISSION_INCOME" : NaN,
|
|
433
|
-
# "FEE_COMMISSION_INCOME_YOY" : NaN,
|
|
434
|
-
# "OTHER_BUSINESS_INCOME" : NaN,
|
|
435
|
-
# "OTHER_BUSINESS_INCOME_YOY" : NaN,
|
|
436
|
-
# "TOI_OTHER" : NaN,
|
|
437
|
-
# "TOI_OTHER_YOY" : NaN,
|
|
438
|
-
# "TOTAL_OPERATE_COST" : 46960889468.54, 营业总成本
|
|
439
|
-
# "TOTAL_OPERATE_COST_YOY" : 18.1456266222,
|
|
440
|
-
# "OPERATE_COST" : 11867273851.78, 营业成本
|
|
441
|
-
# "OPERATE_COST_YOY" : 17.5737925437,
|
|
442
|
-
# "INTEREST_EXPENSE" : 113500129.93, 利息支出
|
|
443
|
-
# "INTEREST_EXPENSE_YOY" : 7.4972611642,
|
|
444
|
-
# "FEE_COMMISSION_EXPENSE" : 68578.57, 手续费及佣金支出
|
|
445
|
-
# "FEE_COMMISSION_EXPENSE_YOY" : -52.0903684752,
|
|
446
|
-
# "RESEARCH_EXPENSE" : 157371873.01, 研发费用
|
|
447
|
-
# "RESEARCH_EXPENSE_YOY" : 16.4116440028,
|
|
448
|
-
# "SURRENDER_VALUE" : NaN,
|
|
449
|
-
# "SURRENDER_VALUE_YOY" : NaN,
|
|
450
|
-
# "NET_COMPENSATE_EXPENSE" : NaN,
|
|
451
|
-
# "NET_COMPENSATE_EXPENSE_YOY" : NaN,
|
|
452
|
-
# "NET_CONTRACT_RESERVE" : NaN,
|
|
453
|
-
# "NET_CONTRACT_RESERVE_YOY" : NaN,
|
|
454
|
-
# "POLICY_BONUS_EXPENSE" : NaN,
|
|
455
|
-
# "POLICY_BONUS_EXPENSE_YOY" : NaN,
|
|
456
|
-
# "REINSURE_EXPENSE" : NaN,
|
|
457
|
-
# "REINSURE_EXPENSE_YOY" : NaN,
|
|
458
|
-
# "OTHER_BUSINESS_COST" : NaN,
|
|
459
|
-
# "OTHER_BUSINESS_COST_YOY" : NaN,
|
|
460
|
-
# "OPERATE_TAX_ADD" : 22234175898.6, 税金及附加
|
|
461
|
-
# "OPERATE_TAX_ADD_YOY" : 20.2119055043,
|
|
462
|
-
# "SALE_EXPENSE" : 4648613585.82, 销售费用
|
|
463
|
-
# "SALE_EXPENSE_YOY" : 40.9642928475,
|
|
464
|
-
# "MANAGE_EXPENSE" : 9729389252.31, 管理费用
|
|
465
|
-
# "MANAGE_EXPENSE_YOY" : 7.9580889133,
|
|
466
|
-
# "ME_RESEARCH_EXPENSE" : NaN,
|
|
467
|
-
# "ME_RESEARCH_EXPENSE_YOY" : NaN,
|
|
468
|
-
# "FINANCE_EXPENSE" : -1789503701.48, 财务费用
|
|
469
|
-
# "FINANCE_EXPENSE_YOY" : -28.5742355094,
|
|
470
|
-
# "FE_INTEREST_EXPENSE" : 12624628.35, 利息费用
|
|
471
|
-
# "FE_INTEREST_EXPENSE_YOY" : 5.0021902771,
|
|
472
|
-
# "FE_INTEREST_INCOME" : 1942301920.98, 利息收入
|
|
473
|
-
# "FE_INTEREST_INCOME_YOY" : 31.6437955552,
|
|
474
|
-
# "ASSET_IMPAIRMENT_LOSS" : NaN,
|
|
475
|
-
# "ASSET_IMPAIRMENT_LOSS_YOY" : NaN,
|
|
476
|
-
# "CREDIT_IMPAIRMENT_LOSS" : NaN,
|
|
477
|
-
# "CREDIT_IMPAIRMENT_LOSS_YOY" : NaN,
|
|
478
|
-
# "TOC_OTHER" : NaN,
|
|
479
|
-
# "TOC_OTHER_YOY" : NaN,
|
|
480
|
-
# "FAIRVALUE_CHANGE_INCOME" : 3151962.5, :公允价值变动收益
|
|
481
|
-
# "FAIRVALUE_CHANGE_INCOME_YOY" : NaN,
|
|
482
|
-
# "INVEST_INCOME" : 34025967.82, 投资收益
|
|
483
|
-
# "INVEST_INCOME_YOY" : -46.7011782268,
|
|
484
|
-
# "INVEST_JOINT_INCOME" : NaN,
|
|
485
|
-
# "INVEST_JOINT_INCOME_YOY" : NaN,
|
|
486
|
-
# "NET_EXPOSURE_INCOME" : NaN,
|
|
487
|
-
# "NET_EXPOSURE_INCOME_YOY" : NaN,
|
|
488
|
-
# "EXCHANGE_INCOME" : NaN,
|
|
489
|
-
# "EXCHANGE_INCOME_YOY" : NaN,
|
|
490
|
-
# "ASSET_DISPOSAL_INCOME" : -479736.97, 资产处置收益
|
|
491
|
-
# "ASSET_DISPOSAL_INCOME_YOY" : -324.9796785895,
|
|
492
|
-
# "ASSET_IMPAIRMENT_INCOME" : NaN,
|
|
493
|
-
# "ASSET_IMPAIRMENT_INCOME_YOY" : NaN,
|
|
494
|
-
# "CREDIT_IMPAIRMENT_INCOME" : 37871293.26, 信用减值损失(新)
|
|
495
|
-
# "CREDIT_IMPAIRMENT_INCOME_YOY" : 357.8638477375,
|
|
496
|
-
# "OTHER_INCOME" : 34644873.86, 其他收益
|
|
497
|
-
# "OTHER_INCOME_YOY" : 41.3767542405,
|
|
498
|
-
# "OPERATE_PROFIT_OTHER" : NaN,
|
|
499
|
-
# "OPERATE_PROFIT_OTHER_YOY" : NaN,
|
|
500
|
-
# "OPERATE_PROFIT_BALANCE" : 0.0,
|
|
501
|
-
# "OPERATE_PROFIT_BALANCE_YOY" : NaN,
|
|
502
|
-
# "OPERATE_PROFIT" : 103708655208.38, 营业利润
|
|
503
|
-
# "OPERATE_PROFIT_YOY" : 18.0123117479,
|
|
504
|
-
# "NONBUSINESS_INCOME" : 86779655.95, 加:营业外收入
|
|
505
|
-
# "NONBUSINESS_INCOME_YOY" : 22.4796849672,
|
|
506
|
-
# "NONCURRENT_DISPOSAL_INCOME" : NaN,
|
|
507
|
-
# "NONCURRENT_DISPOSAL_INCOME_YOY" : NaN,
|
|
508
|
-
# "NONBUSINESS_EXPENSE" : 132881174.52, 减:营业外支出
|
|
509
|
-
# "NONBUSINESS_EXPENSE_YOY" : -46.6092621953,
|
|
510
|
-
# "NONCURRENT_DISPOSAL_LOSS" : NaN,
|
|
511
|
-
# "NONCURRENT_DISPOSAL_LOSS_YOY" : NaN,
|
|
512
|
-
# "EFFECT_TP_OTHER" : NaN,
|
|
513
|
-
# "EFFECT_TP_OTHER_YOY" : NaN,
|
|
514
|
-
# "TOTAL_PROFIT_BALANCE" : 0.0,
|
|
515
|
-
# "TOTAL_PROFIT_BALANCE_YOY" : NaN,
|
|
516
|
-
# "TOTAL_PROFIT" : 103662553689.81, 利润总额
|
|
517
|
-
# "TOTAL_PROFIT_YOY" : 18.1993076599,
|
|
518
|
-
# "INCOME_TAX" : 26141077412.01, 减:所得税
|
|
519
|
-
# "INCOME_TAX_YOY" : 17.0909328034,
|
|
520
|
-
# "EFFECT_NETPROFIT_OTHER" : NaN,
|
|
521
|
-
# "EFFECT_NETPROFIT_OTHER_YOY" : NaN,
|
|
522
|
-
# "EFFECT_NETPROFIT_BALANCE" : NaN,
|
|
523
|
-
# "EFFECT_NETPROFIT_BALANCE_YOY" : NaN,
|
|
524
|
-
# "UNCONFIRM_INVEST_LOSS" : NaN,
|
|
525
|
-
# "UNCONFIRM_INVEST_LOSS_YOY" : NaN,
|
|
526
|
-
# "NETPROFIT" : 77521476277.8, 净利润
|
|
527
|
-
# "NETPROFIT_YOY" : 18.5778097415,
|
|
528
|
-
# "PRECOMBINE_PROFIT" : NaN,
|
|
529
|
-
# "PRECOMBINE_PROFIT_YOY" : NaN,
|
|
530
|
-
# "CONTINUED_NETPROFIT" : 77521476277.8, 持续经营净利润
|
|
531
|
-
# "CONTINUED_NETPROFIT_YOY" : 18.5778097415,
|
|
532
|
-
# "DISCONTINUED_NETPROFIT" : NaN,
|
|
533
|
-
# "DISCONTINUED_NETPROFIT_YOY" : NaN,
|
|
534
|
-
# "PARENT_NETPROFIT" : 74734071550.75, 归属于母公司股东的净利润
|
|
535
|
-
# "PARENT_NETPROFIT_YOY" : 19.1598992892,
|
|
536
|
-
# "MINORITY_INTEREST" : 2787404727.05, 少数股东损益
|
|
537
|
-
# "MINORITY_INTEREST_YOY" : 4.8459336455,
|
|
538
|
-
# "DEDUCT_PARENT_NETPROFIT" : 74752564425.52, 扣除非经常性损益后的净利润
|
|
539
|
-
# "DEDUCT_PARENT_NETPROFIT_YOY" : 19.0462109566,
|
|
540
|
-
# "NETPROFIT_OTHER" : NaN,
|
|
541
|
-
# "NETPROFIT_OTHER_YOY" : NaN,
|
|
542
|
-
# "NETPROFIT_BALANCE" : NaN,
|
|
543
|
-
# "NETPROFIT_BALANCE_YOY" : NaN,
|
|
544
|
-
# "BASIC_EPS" : 59.49, 基本每股收益
|
|
545
|
-
# "BASIC_EPS_YOY" : 19.1468055277,
|
|
546
|
-
# "DILUTED_EPS" : 59.49, 稀释每股收益
|
|
547
|
-
# "DILUTED_EPS_YOY" : 19.1468055277,
|
|
548
|
-
# "OTHER_COMPRE_INCOME" : 4715179.82, 其他综合收益
|
|
549
|
-
# "OTHER_COMPRE_INCOME_YOY" : 110.40766101,
|
|
550
|
-
# "PARENT_OCI" : 4715179.82, 归属于母公司股东的其他综合收益
|
|
551
|
-
# "PARENT_OCI_YOY" : 110.40766101,
|
|
552
|
-
# "MINORITY_OCI" : NaN,
|
|
553
|
-
# "MINORITY_OCI_YOY" : NaN,
|
|
554
|
-
# "PARENT_OCI_OTHER" : NaN,
|
|
555
|
-
# "PARENT_OCI_OTHER_YOY" : NaN,
|
|
556
|
-
# "PARENT_OCI_BALANCE" : NaN,
|
|
557
|
-
# "PARENT_OCI_BALANCE_YOY" : NaN,
|
|
558
|
-
# "UNABLE_OCI" : NaN,
|
|
559
|
-
# "UNABLE_OCI_YOY" : NaN,
|
|
560
|
-
# "CREDITRISK_FAIRVALUE_CHANGE" : NaN,
|
|
561
|
-
# "CREDITRISK_FAIRVALUE_CHANGE_YOY" : NaN,
|
|
562
|
-
# "OTHERRIGHT_FAIRVALUE_CHANGE" : NaN,
|
|
563
|
-
# "OTHERRIGHT_FAIRVALUE_CHANGE_YOY" : NaN,
|
|
564
|
-
# "SETUP_PROFIT_CHANGE" : NaN,
|
|
565
|
-
# "SETUP_PROFIT_CHANGE_YOY" : NaN,
|
|
566
|
-
# "RIGHTLAW_UNABLE_OCI" : NaN,
|
|
567
|
-
# "RIGHTLAW_UNABLE_OCI_YOY" : NaN,
|
|
568
|
-
# "UNABLE_OCI_OTHER" : NaN,
|
|
569
|
-
# "UNABLE_OCI_OTHER_YOY" : NaN,
|
|
570
|
-
# "UNABLE_OCI_BALANCE" : NaN,
|
|
571
|
-
# "UNABLE_OCI_BALANCE_YOY" : NaN,
|
|
572
|
-
# "ABLE_OCI" : 4715179.82,
|
|
573
|
-
# "ABLE_OCI_YOY" : 110.40766101,
|
|
574
|
-
# "RIGHTLAW_ABLE_OCI" : NaN,
|
|
575
|
-
# "RIGHTLAW_ABLE_OCI_YOY" : NaN,
|
|
576
|
-
# "AFA_FAIRVALUE_CHANGE" : NaN,
|
|
577
|
-
# "AFA_FAIRVALUE_CHANGE_YOY" : NaN,
|
|
578
|
-
# "HMI_AFA" : NaN,
|
|
579
|
-
# "HMI_AFA_YOY" : NaN,
|
|
580
|
-
# "CASHFLOW_HEDGE_VALID" : NaN,
|
|
581
|
-
# "CASHFLOW_HEDGE_VALID_YOY" : NaN,
|
|
582
|
-
# "CREDITOR_FAIRVALUE_CHANGE" : NaN,
|
|
583
|
-
# "CREDITOR_FAIRVALUE_CHANGE_YOY" : NaN,
|
|
584
|
-
# "CREDITOR_IMPAIRMENT_RESERVE" : NaN,
|
|
585
|
-
# "CREDITOR_IMPAIRMENT_RESERVE_YOY" : NaN,
|
|
586
|
-
# "FINANCE_OCI_AMT" : NaN,
|
|
587
|
-
# "FINANCE_OCI_AMT_YOY" : NaN,
|
|
588
|
-
# "CONVERT_DIFF" : 4715179.82,
|
|
589
|
-
# "CONVERT_DIFF_YOY" : 110.40766101,
|
|
590
|
-
# "ABLE_OCI_OTHER" : NaN,
|
|
591
|
-
# "ABLE_OCI_OTHER_YOY" : NaN,
|
|
592
|
-
# "ABLE_OCI_BALANCE" : NaN,
|
|
593
|
-
# "ABLE_OCI_BALANCE_YOY" : NaN,
|
|
594
|
-
# "OCI_OTHER" : NaN,
|
|
595
|
-
# "OCI_OTHER_YOY" : NaN,
|
|
596
|
-
# "OCI_BALANCE" : NaN,
|
|
597
|
-
# "OCI_BALANCE_YOY" : NaN,
|
|
598
|
-
# "TOTAL_COMPRE_INCOME" : 77526191457.62, 综合收益总额
|
|
599
|
-
# "TOTAL_COMPRE_INCOME_YOY" : 18.5809573963,
|
|
600
|
-
# "PARENT_TCI" : 74738786730.57, 归属于母公司股东的综合收益总额
|
|
601
|
-
# "PARENT_TCI_YOY" : 19.1631595692,
|
|
602
|
-
# "MINORITY_TCI" : 2787404727.05, 归属于少数股东的综合收益总额
|
|
603
|
-
# "MINORITY_TCI_YOY" : 4.8459336455,
|
|
604
|
-
# "PRECOMBINE_TCI" : NaN,
|
|
605
|
-
# "PRECOMBINE_TCI_YOY" : NaN,
|
|
606
|
-
# "EFFECT_TCI_BALANCE" : NaN,
|
|
607
|
-
# "EFFECT_TCI_BALANCE_YOY" : NaN,
|
|
608
|
-
# "TCI_OTHER" : NaN,
|
|
609
|
-
# "TCI_OTHER_YOY" : NaN,
|
|
610
|
-
# "TCI_BALANCE" : NaN,
|
|
611
|
-
# "TCI_BALANCE_YOY" : NaN,
|
|
612
|
-
# "ACF_END_INCOME" : NaN,
|
|
613
|
-
# "ACF_END_INCOME_YOY" : NaN,
|
|
614
|
-
# "OPINION_TYPE" : "标准无保留意见" 审计意见(境内)
|
|
615
|
-
# https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0
|
|
616
|
-
def get_em_benefit_api(symbol):
|
|
617
|
-
stock_financial_benefit_ths_df = ak.stock_profit_sheet_by_report_em(symbol)
|
|
618
|
-
stock_financial_benefit_ths_df = stock_financial_benefit_ths_df[[
|
|
619
|
-
"SECUCODE",
|
|
620
|
-
"SECURITY_CODE",
|
|
621
|
-
"SECURITY_NAME_ABBR",
|
|
622
|
-
"ORG_CODE",
|
|
623
|
-
"ORG_TYPE",
|
|
624
|
-
"REPORT_DATE",
|
|
625
|
-
"REPORT_TYPE",
|
|
626
|
-
"REPORT_DATE_NAME",
|
|
627
|
-
"SECURITY_TYPE_CODE",
|
|
628
|
-
"NOTICE_DATE",
|
|
629
|
-
"UPDATE_DATE",
|
|
630
|
-
"CURRENCY",
|
|
631
|
-
"TOTAL_OPERATE_INCOME",
|
|
632
|
-
"OPERATE_INCOME",
|
|
633
|
-
"INTEREST_INCOME",
|
|
634
|
-
"TOTAL_OPERATE_COST",
|
|
635
|
-
"OPERATE_COST",
|
|
636
|
-
"INTEREST_EXPENSE",
|
|
637
|
-
"FEE_COMMISSION_EXPENSE",
|
|
638
|
-
"RESEARCH_EXPENSE",
|
|
639
|
-
"OPERATE_TAX_ADD",
|
|
640
|
-
"SALE_EXPENSE",
|
|
641
|
-
"MANAGE_EXPENSE",
|
|
642
|
-
"FINANCE_EXPENSE",
|
|
643
|
-
"FE_INTEREST_EXPENSE",
|
|
644
|
-
"FE_INTEREST_INCOME",
|
|
645
|
-
"FAIRVALUE_CHANGE_INCOME",
|
|
646
|
-
"INVEST_INCOME",
|
|
647
|
-
"ASSET_DISPOSAL_INCOME",
|
|
648
|
-
"CREDIT_IMPAIRMENT_INCOME",
|
|
649
|
-
"OTHER_INCOME",
|
|
650
|
-
"OPERATE_PROFIT",
|
|
651
|
-
"NONBUSINESS_INCOME",
|
|
652
|
-
"NONBUSINESS_EXPENSE",
|
|
653
|
-
"TOTAL_PROFIT",
|
|
654
|
-
"INCOME_TAX",
|
|
655
|
-
"NETPROFIT",
|
|
656
|
-
"CONTINUED_NETPROFIT",
|
|
657
|
-
"PARENT_NETPROFIT",
|
|
658
|
-
'MINORITY_INTEREST',
|
|
659
|
-
'DEDUCT_PARENT_NETPROFIT',
|
|
660
|
-
'BASIC_EPS',
|
|
661
|
-
'DILUTED_EPS',
|
|
662
|
-
'OTHER_COMPRE_INCOME',
|
|
663
|
-
'PARENT_OCI',
|
|
664
|
-
'TOTAL_COMPRE_INCOME',
|
|
665
|
-
'PARENT_TCI',
|
|
666
|
-
'MINORITY_TCI',
|
|
667
|
-
'OPINION_TYPE'
|
|
668
|
-
]]
|
|
669
|
-
mongodb_util.insert_mongo(stock_financial_benefit_ths_df, 'stock_financial_benefit_ths_df')
|
|
670
|
-
return stock_financial_benefit_ths_df
|
|
419
|
+
query = {'SECURITY_CODE': symbol}
|
|
420
|
+
exist_asset_em_df = mongodb_util.find_query_data(db_name_constant.EM_STOCK_ASSET_LIABILITY, query)
|
|
421
|
+
if data_frame_util.is_not_empty(exist_asset_em_df):
|
|
422
|
+
new_asset_df = stock_balance_sheet_by_report_em_df.loc[
|
|
423
|
+
~(stock_balance_sheet_by_report_em_df['SECURITY_CODE'].isin(list(exist_asset_em_df['SECURITY_CODE'])))]
|
|
424
|
+
else:
|
|
425
|
+
new_asset_df = stock_balance_sheet_by_report_em_df
|
|
426
|
+
if data_frame_util.is_empty(new_asset_df):
|
|
427
|
+
return None
|
|
428
|
+
new_asset_df.fillna(0, inplace=True)
|
|
429
|
+
mongodb_util.insert_mongo(new_asset_df, db_name_constant.EM_STOCK_ASSET_LIABILITY)
|
|
671
430
|
|
|
672
431
|
|
|
673
432
|
if __name__ == '__main__':
|
|
674
|
-
|
|
675
|
-
get_em_debt_api('SH600519')
|
|
433
|
+
get_em_asset_liability_api('832876')
|
|
676
434
|
|
|
677
435
|
stock_cash_flow_sheet_by_report_em_df = ak.stock_cash_flow_sheet_by_report_em(symbol="SH600519")
|
|
678
436
|
print(stock_cash_flow_sheet_by_report_em_df)
|
|
@@ -0,0 +1,340 @@
|
|
|
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
|
+
import akshare as ak
|
|
10
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
11
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
|
+
|
|
13
|
+
mongodb_util = MongodbUtil('27017')
|
|
14
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
15
|
+
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
16
|
+
from loguru import logger
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# 利润表
|
|
20
|
+
# "_id" : ObjectId("6644085f608b7737dee21a3a"),
|
|
21
|
+
# "SECUCODE" : "600519.SH",
|
|
22
|
+
# "SECURITY_CODE" : "600519",
|
|
23
|
+
# "SECURITY_NAME_ABBR" : "贵州茅台",
|
|
24
|
+
# "ORG_CODE" : "10002602",
|
|
25
|
+
# "ORG_TYPE" : "通用",
|
|
26
|
+
# "REPORT_DATE" : "2023-12-31 00:00:00",
|
|
27
|
+
# "REPORT_TYPE" : "年报",
|
|
28
|
+
# "REPORT_DATE_NAME" : "2023年报",
|
|
29
|
+
# "SECURITY_TYPE_CODE" : "058001001",
|
|
30
|
+
# "NOTICE_DATE" : "2024-04-03 00:00:00",
|
|
31
|
+
# "UPDATE_DATE" : "2024-04-03 00:00:00",
|
|
32
|
+
# "CURRENCY" : "CNY",
|
|
33
|
+
# "TOTAL_OPERATE_INCOME" : 150560330316.45, 营业总收入
|
|
34
|
+
# "TOTAL_OPERATE_INCOME_YOY" : 18.0365792459, 总运营收入修正
|
|
35
|
+
# "OPERATE_INCOME" : 147693604994.14, 营业收入
|
|
36
|
+
# "OPERATE_INCOME_YOY" : 19.0119185529, 营业收入修正
|
|
37
|
+
# "INTEREST_INCOME" : 2866725322.31, 利息收入
|
|
38
|
+
# "INTEREST_INCOME_YOY" : 利息收入修正
|
|
39
|
+
# "EARNED_PREMIUM" : NaN,
|
|
40
|
+
# "EARNED_PREMIUM_YOY" : NaN,
|
|
41
|
+
# "FEE_COMMISSION_INCOME" : NaN,
|
|
42
|
+
# "FEE_COMMISSION_INCOME_YOY" : NaN,
|
|
43
|
+
# "OTHER_BUSINESS_INCOME" : NaN,
|
|
44
|
+
# "OTHER_BUSINESS_INCOME_YOY" : NaN,
|
|
45
|
+
# "TOI_OTHER" : NaN,
|
|
46
|
+
# "TOI_OTHER_YOY" : NaN,
|
|
47
|
+
# "TOTAL_OPERATE_COST" : 46960889468.54, 营业总成本
|
|
48
|
+
# "TOTAL_OPERATE_COST_YOY" : 18.1456266222,
|
|
49
|
+
# "OPERATE_COST" : 11867273851.78, 营业成本
|
|
50
|
+
# "OPERATE_COST_YOY" : 17.5737925437,
|
|
51
|
+
# "INTEREST_EXPENSE" : 113500129.93, 利息支出
|
|
52
|
+
# "INTEREST_EXPENSE_YOY" : 7.4972611642,
|
|
53
|
+
# "FEE_COMMISSION_EXPENSE" : 68578.57, 手续费及佣金支出
|
|
54
|
+
# "FEE_COMMISSION_EXPENSE_YOY" : -52.0903684752,
|
|
55
|
+
# "RESEARCH_EXPENSE" : 157371873.01, 研发费用
|
|
56
|
+
# "RESEARCH_EXPENSE_YOY" : 16.4116440028,
|
|
57
|
+
# "SURRENDER_VALUE" : NaN,
|
|
58
|
+
# "SURRENDER_VALUE_YOY" : NaN,
|
|
59
|
+
# "NET_COMPENSATE_EXPENSE" : NaN,
|
|
60
|
+
# "NET_COMPENSATE_EXPENSE_YOY" : NaN,
|
|
61
|
+
# "NET_CONTRACT_RESERVE" : NaN,
|
|
62
|
+
# "NET_CONTRACT_RESERVE_YOY" : NaN,
|
|
63
|
+
# "POLICY_BONUS_EXPENSE" : NaN,
|
|
64
|
+
# "POLICY_BONUS_EXPENSE_YOY" : NaN,
|
|
65
|
+
# "REINSURE_EXPENSE" : NaN,
|
|
66
|
+
# "REINSURE_EXPENSE_YOY" : NaN,
|
|
67
|
+
# "OTHER_BUSINESS_COST" : NaN,
|
|
68
|
+
# "OTHER_BUSINESS_COST_YOY" : NaN,
|
|
69
|
+
# "OPERATE_TAX_ADD" : 22234175898.6, 税金及附加
|
|
70
|
+
# "OPERATE_TAX_ADD_YOY" : 20.2119055043,
|
|
71
|
+
# "SALE_EXPENSE" : 4648613585.82, 销售费用
|
|
72
|
+
# "SALE_EXPENSE_YOY" : 40.9642928475,
|
|
73
|
+
# "MANAGE_EXPENSE" : 9729389252.31, 管理费用
|
|
74
|
+
# "MANAGE_EXPENSE_YOY" : 7.9580889133,
|
|
75
|
+
# "ME_RESEARCH_EXPENSE" : NaN,
|
|
76
|
+
# "ME_RESEARCH_EXPENSE_YOY" : NaN,
|
|
77
|
+
# "FINANCE_EXPENSE" : -1789503701.48, 财务费用
|
|
78
|
+
# "FINANCE_EXPENSE_YOY" : -28.5742355094,
|
|
79
|
+
# "FE_INTEREST_EXPENSE" : 12624628.35, 利息费用
|
|
80
|
+
# "FE_INTEREST_EXPENSE_YOY" : 5.0021902771,
|
|
81
|
+
# "FE_INTEREST_INCOME" : 1942301920.98, 利息收入
|
|
82
|
+
# "FE_INTEREST_INCOME_YOY" : 31.6437955552,
|
|
83
|
+
# "ASSET_IMPAIRMENT_LOSS" : NaN,
|
|
84
|
+
# "ASSET_IMPAIRMENT_LOSS_YOY" : NaN,
|
|
85
|
+
# "CREDIT_IMPAIRMENT_LOSS" : NaN,
|
|
86
|
+
# "CREDIT_IMPAIRMENT_LOSS_YOY" : NaN,
|
|
87
|
+
# "TOC_OTHER" : NaN,
|
|
88
|
+
# "TOC_OTHER_YOY" : NaN,
|
|
89
|
+
# "FAIRVALUE_CHANGE_INCOME" : 3151962.5, :公允价值变动收益
|
|
90
|
+
# "FAIRVALUE_CHANGE_INCOME_YOY" : NaN,
|
|
91
|
+
# "INVEST_INCOME" : 34025967.82, 投资收益
|
|
92
|
+
# "INVEST_INCOME_YOY" : -46.7011782268,
|
|
93
|
+
# "INVEST_JOINT_INCOME" : NaN,
|
|
94
|
+
# "INVEST_JOINT_INCOME_YOY" : NaN,
|
|
95
|
+
# "NET_EXPOSURE_INCOME" : NaN,
|
|
96
|
+
# "NET_EXPOSURE_INCOME_YOY" : NaN,
|
|
97
|
+
# "EXCHANGE_INCOME" : NaN,
|
|
98
|
+
# "EXCHANGE_INCOME_YOY" : NaN,
|
|
99
|
+
# "ASSET_DISPOSAL_INCOME" : -479736.97, 资产处置收益
|
|
100
|
+
# "ASSET_DISPOSAL_INCOME_YOY" : -324.9796785895,
|
|
101
|
+
# "ASSET_IMPAIRMENT_INCOME" : NaN,
|
|
102
|
+
# "ASSET_IMPAIRMENT_INCOME_YOY" : NaN,
|
|
103
|
+
# "CREDIT_IMPAIRMENT_INCOME" : 37871293.26, 信用减值损失(新)
|
|
104
|
+
# "CREDIT_IMPAIRMENT_INCOME_YOY" : 357.8638477375,
|
|
105
|
+
# "OTHER_INCOME" : 34644873.86, 其他收益
|
|
106
|
+
# "OTHER_INCOME_YOY" : 41.3767542405,
|
|
107
|
+
# "OPERATE_PROFIT_OTHER" : NaN,
|
|
108
|
+
# "OPERATE_PROFIT_OTHER_YOY" : NaN,
|
|
109
|
+
# "OPERATE_PROFIT_BALANCE" : 0.0,
|
|
110
|
+
# "OPERATE_PROFIT_BALANCE_YOY" : NaN,
|
|
111
|
+
# "OPERATE_PROFIT" : 103708655208.38, 营业利润
|
|
112
|
+
# "OPERATE_PROFIT_YOY" : 18.0123117479,
|
|
113
|
+
# "NONBUSINESS_INCOME" : 86779655.95, 加:营业外收入
|
|
114
|
+
# "NONBUSINESS_INCOME_YOY" : 22.4796849672,
|
|
115
|
+
# "NONCURRENT_DISPOSAL_INCOME" : NaN,
|
|
116
|
+
# "NONCURRENT_DISPOSAL_INCOME_YOY" : NaN,
|
|
117
|
+
# "NONBUSINESS_EXPENSE" : 132881174.52, 减:营业外支出
|
|
118
|
+
# "NONBUSINESS_EXPENSE_YOY" : -46.6092621953,
|
|
119
|
+
# "NONCURRENT_DISPOSAL_LOSS" : NaN,
|
|
120
|
+
# "NONCURRENT_DISPOSAL_LOSS_YOY" : NaN,
|
|
121
|
+
# "EFFECT_TP_OTHER" : NaN,
|
|
122
|
+
# "EFFECT_TP_OTHER_YOY" : NaN,
|
|
123
|
+
# "TOTAL_PROFIT_BALANCE" : 0.0,
|
|
124
|
+
# "TOTAL_PROFIT_BALANCE_YOY" : NaN,
|
|
125
|
+
# "TOTAL_PROFIT" : 103662553689.81, 利润总额
|
|
126
|
+
# "TOTAL_PROFIT_YOY" : 18.1993076599,
|
|
127
|
+
# "INCOME_TAX" : 26141077412.01, 减:所得税
|
|
128
|
+
# "INCOME_TAX_YOY" : 17.0909328034,
|
|
129
|
+
# "EFFECT_NETPROFIT_OTHER" : NaN,
|
|
130
|
+
# "EFFECT_NETPROFIT_OTHER_YOY" : NaN,
|
|
131
|
+
# "EFFECT_NETPROFIT_BALANCE" : NaN,
|
|
132
|
+
# "EFFECT_NETPROFIT_BALANCE_YOY" : NaN,
|
|
133
|
+
# "UNCONFIRM_INVEST_LOSS" : NaN,
|
|
134
|
+
# "UNCONFIRM_INVEST_LOSS_YOY" : NaN,
|
|
135
|
+
# "NETPROFIT" : 77521476277.8, 净利润
|
|
136
|
+
# "NETPROFIT_YOY" : 18.5778097415,
|
|
137
|
+
# "PRECOMBINE_PROFIT" : NaN,
|
|
138
|
+
# "PRECOMBINE_PROFIT_YOY" : NaN,
|
|
139
|
+
# "CONTINUED_NETPROFIT" : 77521476277.8, 持续经营净利润
|
|
140
|
+
# "CONTINUED_NETPROFIT_YOY" : 18.5778097415,
|
|
141
|
+
# "DISCONTINUED_NETPROFIT" : NaN,
|
|
142
|
+
# "DISCONTINUED_NETPROFIT_YOY" : NaN,
|
|
143
|
+
# "PARENT_NETPROFIT" : 74734071550.75, 归属于母公司股东的净利润
|
|
144
|
+
# "PARENT_NETPROFIT_YOY" : 19.1598992892,
|
|
145
|
+
# "MINORITY_INTEREST" : 2787404727.05, 少数股东损益
|
|
146
|
+
# "MINORITY_INTEREST_YOY" : 4.8459336455,
|
|
147
|
+
# "DEDUCT_PARENT_NETPROFIT" : 74752564425.52, 扣除非经常性损益后的净利润
|
|
148
|
+
# "DEDUCT_PARENT_NETPROFIT_YOY" : 19.0462109566,
|
|
149
|
+
# "NETPROFIT_OTHER" : NaN,
|
|
150
|
+
# "NETPROFIT_OTHER_YOY" : NaN,
|
|
151
|
+
# "NETPROFIT_BALANCE" : NaN,
|
|
152
|
+
# "NETPROFIT_BALANCE_YOY" : NaN,
|
|
153
|
+
# "BASIC_EPS" : 59.49, 基本每股收益
|
|
154
|
+
# "BASIC_EPS_YOY" : 19.1468055277,
|
|
155
|
+
# "DILUTED_EPS" : 59.49, 稀释每股收益
|
|
156
|
+
# "DILUTED_EPS_YOY" : 19.1468055277,
|
|
157
|
+
# "OTHER_COMPRE_INCOME" : 4715179.82, 其他综合收益
|
|
158
|
+
# "OTHER_COMPRE_INCOME_YOY" : 110.40766101,
|
|
159
|
+
# "PARENT_OCI" : 4715179.82, 归属于母公司股东的其他综合收益
|
|
160
|
+
# "PARENT_OCI_YOY" : 110.40766101,
|
|
161
|
+
# "MINORITY_OCI" : NaN,
|
|
162
|
+
# "MINORITY_OCI_YOY" : NaN,
|
|
163
|
+
# "PARENT_OCI_OTHER" : NaN,
|
|
164
|
+
# "PARENT_OCI_OTHER_YOY" : NaN,
|
|
165
|
+
# "PARENT_OCI_BALANCE" : NaN,
|
|
166
|
+
# "PARENT_OCI_BALANCE_YOY" : NaN,
|
|
167
|
+
# "UNABLE_OCI" : NaN,
|
|
168
|
+
# "UNABLE_OCI_YOY" : NaN,
|
|
169
|
+
# "CREDITRISK_FAIRVALUE_CHANGE" : NaN,
|
|
170
|
+
# "CREDITRISK_FAIRVALUE_CHANGE_YOY" : NaN,
|
|
171
|
+
# "OTHERRIGHT_FAIRVALUE_CHANGE" : NaN,
|
|
172
|
+
# "OTHERRIGHT_FAIRVALUE_CHANGE_YOY" : NaN,
|
|
173
|
+
# "SETUP_PROFIT_CHANGE" : NaN,
|
|
174
|
+
# "SETUP_PROFIT_CHANGE_YOY" : NaN,
|
|
175
|
+
# "RIGHTLAW_UNABLE_OCI" : NaN,
|
|
176
|
+
# "RIGHTLAW_UNABLE_OCI_YOY" : NaN,
|
|
177
|
+
# "UNABLE_OCI_OTHER" : NaN,
|
|
178
|
+
# "UNABLE_OCI_OTHER_YOY" : NaN,
|
|
179
|
+
# "UNABLE_OCI_BALANCE" : NaN,
|
|
180
|
+
# "UNABLE_OCI_BALANCE_YOY" : NaN,
|
|
181
|
+
# "ABLE_OCI" : 4715179.82,
|
|
182
|
+
# "ABLE_OCI_YOY" : 110.40766101,
|
|
183
|
+
# "RIGHTLAW_ABLE_OCI" : NaN,
|
|
184
|
+
# "RIGHTLAW_ABLE_OCI_YOY" : NaN,
|
|
185
|
+
# "AFA_FAIRVALUE_CHANGE" : NaN,
|
|
186
|
+
# "AFA_FAIRVALUE_CHANGE_YOY" : NaN,
|
|
187
|
+
# "HMI_AFA" : NaN,
|
|
188
|
+
# "HMI_AFA_YOY" : NaN,
|
|
189
|
+
# "CASHFLOW_HEDGE_VALID" : NaN,
|
|
190
|
+
# "CASHFLOW_HEDGE_VALID_YOY" : NaN,
|
|
191
|
+
# "CREDITOR_FAIRVALUE_CHANGE" : NaN,
|
|
192
|
+
# "CREDITOR_FAIRVALUE_CHANGE_YOY" : NaN,
|
|
193
|
+
# "CREDITOR_IMPAIRMENT_RESERVE" : NaN,
|
|
194
|
+
# "CREDITOR_IMPAIRMENT_RESERVE_YOY" : NaN,
|
|
195
|
+
# "FINANCE_OCI_AMT" : NaN,
|
|
196
|
+
# "FINANCE_OCI_AMT_YOY" : NaN,
|
|
197
|
+
# "CONVERT_DIFF" : 4715179.82,
|
|
198
|
+
# "CONVERT_DIFF_YOY" : 110.40766101,
|
|
199
|
+
# "ABLE_OCI_OTHER" : NaN,
|
|
200
|
+
# "ABLE_OCI_OTHER_YOY" : NaN,
|
|
201
|
+
# "ABLE_OCI_BALANCE" : NaN,
|
|
202
|
+
# "ABLE_OCI_BALANCE_YOY" : NaN,
|
|
203
|
+
# "OCI_OTHER" : NaN,
|
|
204
|
+
# "OCI_OTHER_YOY" : NaN,
|
|
205
|
+
# "OCI_BALANCE" : NaN,
|
|
206
|
+
# "OCI_BALANCE_YOY" : NaN,
|
|
207
|
+
# "TOTAL_COMPRE_INCOME" : 77526191457.62, 综合收益总额
|
|
208
|
+
# "TOTAL_COMPRE_INCOME_YOY" : 18.5809573963,
|
|
209
|
+
# "PARENT_TCI" : 74738786730.57, 归属于母公司股东的综合收益总额
|
|
210
|
+
# "PARENT_TCI_YOY" : 19.1631595692,
|
|
211
|
+
# "MINORITY_TCI" : 2787404727.05, 归属于少数股东的综合收益总额
|
|
212
|
+
# "MINORITY_TCI_YOY" : 4.8459336455,
|
|
213
|
+
# "PRECOMBINE_TCI" : NaN,
|
|
214
|
+
# "PRECOMBINE_TCI_YOY" : NaN,
|
|
215
|
+
# "EFFECT_TCI_BALANCE" : NaN,
|
|
216
|
+
# "EFFECT_TCI_BALANCE_YOY" : NaN,
|
|
217
|
+
# "TCI_OTHER" : NaN,
|
|
218
|
+
# "TCI_OTHER_YOY" : NaN,
|
|
219
|
+
# "TCI_BALANCE" : NaN,
|
|
220
|
+
# "TCI_BALANCE_YOY" : NaN,
|
|
221
|
+
# "ACF_END_INCOME" : NaN,
|
|
222
|
+
# "ACF_END_INCOME_YOY" : NaN,
|
|
223
|
+
# "OPINION_TYPE" : "标准无保留意见" 审计意见(境内)
|
|
224
|
+
# https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0
|
|
225
|
+
def get_em_profit_api(symbol):
|
|
226
|
+
sec_code = finance_common_api.get_sec_code(symbol)
|
|
227
|
+
try:
|
|
228
|
+
stock_profit_sheet_by_report_em = ak.stock_profit_sheet_by_report_em(sec_code)
|
|
229
|
+
except Exception as e:
|
|
230
|
+
logger.error("同步利润表异常:{},{}", symbol, e)
|
|
231
|
+
if data_frame_util.is_empty(stock_profit_sheet_by_report_em):
|
|
232
|
+
return None
|
|
233
|
+
stock_profit_sheet_by_report_em = check_columns(stock_profit_sheet_by_report_em)
|
|
234
|
+
stock_profit_sheet_by_report_em = stock_profit_sheet_by_report_em[[
|
|
235
|
+
"SECUCODE",
|
|
236
|
+
"SECURITY_CODE",
|
|
237
|
+
"SECURITY_NAME_ABBR",
|
|
238
|
+
"ORG_CODE",
|
|
239
|
+
"ORG_TYPE",
|
|
240
|
+
"REPORT_DATE",
|
|
241
|
+
"REPORT_TYPE",
|
|
242
|
+
"REPORT_DATE_NAME",
|
|
243
|
+
"SECURITY_TYPE_CODE",
|
|
244
|
+
"NOTICE_DATE",
|
|
245
|
+
"UPDATE_DATE",
|
|
246
|
+
"CURRENCY",
|
|
247
|
+
"TOTAL_OPERATE_INCOME",
|
|
248
|
+
"OPERATE_INCOME",
|
|
249
|
+
"INTEREST_INCOME",
|
|
250
|
+
"TOTAL_OPERATE_COST",
|
|
251
|
+
"OPERATE_COST",
|
|
252
|
+
"INTEREST_EXPENSE",
|
|
253
|
+
"FEE_COMMISSION_EXPENSE",
|
|
254
|
+
"RESEARCH_EXPENSE",
|
|
255
|
+
"OPERATE_TAX_ADD",
|
|
256
|
+
"SALE_EXPENSE",
|
|
257
|
+
"MANAGE_EXPENSE",
|
|
258
|
+
"FINANCE_EXPENSE",
|
|
259
|
+
"FE_INTEREST_EXPENSE",
|
|
260
|
+
"FE_INTEREST_INCOME",
|
|
261
|
+
"FAIRVALUE_CHANGE_INCOME",
|
|
262
|
+
"INVEST_INCOME",
|
|
263
|
+
"ASSET_DISPOSAL_INCOME",
|
|
264
|
+
"CREDIT_IMPAIRMENT_INCOME",
|
|
265
|
+
"OTHER_INCOME",
|
|
266
|
+
"OPERATE_PROFIT",
|
|
267
|
+
"NONBUSINESS_INCOME",
|
|
268
|
+
"NONBUSINESS_EXPENSE",
|
|
269
|
+
"TOTAL_PROFIT",
|
|
270
|
+
"INCOME_TAX",
|
|
271
|
+
"NETPROFIT",
|
|
272
|
+
"CONTINUED_NETPROFIT",
|
|
273
|
+
"PARENT_NETPROFIT",
|
|
274
|
+
'MINORITY_INTEREST',
|
|
275
|
+
'DEDUCT_PARENT_NETPROFIT',
|
|
276
|
+
'BASIC_EPS',
|
|
277
|
+
'DILUTED_EPS',
|
|
278
|
+
'OTHER_COMPRE_INCOME',
|
|
279
|
+
'PARENT_OCI',
|
|
280
|
+
'TOTAL_COMPRE_INCOME',
|
|
281
|
+
'PARENT_TCI',
|
|
282
|
+
'MINORITY_TCI',
|
|
283
|
+
'OPINION_TYPE'
|
|
284
|
+
]]
|
|
285
|
+
stock_profit_sheet_by_report_em['_id'] = (stock_profit_sheet_by_report_em['SECURITY_CODE']
|
|
286
|
+
+ "_" + stock_profit_sheet_by_report_em['REPORT_DATE'])
|
|
287
|
+
|
|
288
|
+
query = {'SECURITY_CODE': symbol}
|
|
289
|
+
exist_profit_em_df = mongodb_util.find_query_data(db_name_constant.EM_STOCK_PROFIT, query)
|
|
290
|
+
if data_frame_util.is_not_empty(exist_profit_em_df):
|
|
291
|
+
new_profit_df = stock_profit_sheet_by_report_em.loc[
|
|
292
|
+
~(stock_profit_sheet_by_report_em['SECURITY_CODE'].isin(list(exist_profit_em_df['SECURITY_CODE'])))]
|
|
293
|
+
else:
|
|
294
|
+
new_profit_df = stock_profit_sheet_by_report_em
|
|
295
|
+
if data_frame_util.is_empty(new_profit_df):
|
|
296
|
+
return None
|
|
297
|
+
new_profit_df.fillna(0, inplace=True)
|
|
298
|
+
return new_profit_df
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def check_columns(profit_df):
|
|
302
|
+
if 'TOTAL_OPERATE_INCOME' not in profit_df.columns:
|
|
303
|
+
profit_df['TOTAL_OPERATE_INCOME'] = 0
|
|
304
|
+
|
|
305
|
+
if 'INTEREST_INCOME' not in profit_df.columns:
|
|
306
|
+
profit_df['INTEREST_INCOME'] = 0
|
|
307
|
+
if 'TOTAL_OPERATE_COST' not in profit_df.columns:
|
|
308
|
+
profit_df['TOTAL_OPERATE_COST'] = 0
|
|
309
|
+
if 'OPERATE_COST' not in profit_df.columns:
|
|
310
|
+
profit_df['OPERATE_COST'] = 0
|
|
311
|
+
if 'INTEREST_EXPENSE' not in profit_df.columns:
|
|
312
|
+
profit_df['INTEREST_EXPENSE'] = 0
|
|
313
|
+
if 'FEE_COMMISSION_EXPENSE' not in profit_df.columns:
|
|
314
|
+
profit_df['FEE_COMMISSION_EXPENSE'] = 0
|
|
315
|
+
if 'RESEARCH_EXPENSE' not in profit_df.columns:
|
|
316
|
+
profit_df['RESEARCH_EXPENSE'] = 0
|
|
317
|
+
if 'SALE_EXPENSE' not in profit_df.columns:
|
|
318
|
+
profit_df['SALE_EXPENSE'] = 0
|
|
319
|
+
if 'MANAGE_EXPENSE' not in profit_df.columns:
|
|
320
|
+
profit_df['MANAGE_EXPENSE'] = 0
|
|
321
|
+
if 'FINANCE_EXPENSE' not in profit_df.columns:
|
|
322
|
+
profit_df['FINANCE_EXPENSE'] = 0
|
|
323
|
+
if 'FE_INTEREST_EXPENSE' not in profit_df.columns:
|
|
324
|
+
profit_df['FE_INTEREST_EXPENSE'] = 0
|
|
325
|
+
if 'FE_INTEREST_INCOME' not in profit_df.columns:
|
|
326
|
+
profit_df['FE_INTEREST_INCOME'] = 0
|
|
327
|
+
if 'CREDIT_IMPAIRMENT_INCOME' not in profit_df.columns:
|
|
328
|
+
profit_df['CREDIT_IMPAIRMENT_INCOME'] = 0
|
|
329
|
+
return profit_df
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
import mns_common.api.em.east_money_stock_api as east_money_stock_api
|
|
333
|
+
|
|
334
|
+
if __name__ == '__main__':
|
|
335
|
+
em_df = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
336
|
+
for em_one in em_df.itertuples():
|
|
337
|
+
try:
|
|
338
|
+
get_em_profit_api(em_one.symbol)
|
|
339
|
+
except Exception as e:
|
|
340
|
+
logger.error("同步利润表异常:{},{}", em_one.symbol, e)
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
10
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
11
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
|
+
|
|
13
|
+
mongodb_util = MongodbUtil('27017')
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def get_sec_code(symbol):
|
|
17
|
+
classification = common_service_fun_api.classify_symbol_one(symbol)
|
|
18
|
+
if classification in ['K', 'H']:
|
|
19
|
+
return 'SH' + symbol
|
|
20
|
+
elif classification in ['C', 'S']:
|
|
21
|
+
return 'SZ' + symbol
|
|
22
|
+
else:
|
|
23
|
+
return 'BJ' + symbol
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# 查询利润表数据
|
|
27
|
+
def find_profit_report(period_time):
|
|
28
|
+
query = {"REPORT_DATE": period_time}
|
|
29
|
+
return mongodb_util.find_query_data(db_name_constant.EM_STOCK_PROFIT, query)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# 查询资产表
|
|
33
|
+
def find_asset_liability_report(period_time):
|
|
34
|
+
query = {"REPORT_DATE": period_time}
|
|
35
|
+
return mongodb_util.find_query_data(db_name_constant.EM_STOCK_ASSET_LIABILITY, query)
|
|
@@ -0,0 +1,168 @@
|
|
|
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.self_choose.black_list_service_api as black_list_service_api
|
|
10
|
+
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
11
|
+
from loguru import logger
|
|
12
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
13
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
14
|
+
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
15
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
16
|
+
import pandas as pd
|
|
17
|
+
|
|
18
|
+
mongodb_util = MongodbUtil('27017')
|
|
19
|
+
# 审核标准意见
|
|
20
|
+
OPINION_TYPE = "标准无保留意见"
|
|
21
|
+
|
|
22
|
+
# 利润为负的时候最小营业收入 主板
|
|
23
|
+
MIN_INCOME_MAIN = 350000000
|
|
24
|
+
# 利润为负的时候最小营业收入 科创 创业
|
|
25
|
+
MIN_INCOME_SUB = 150000000
|
|
26
|
+
# 最大负债比
|
|
27
|
+
MAX_LIABILITY_RATIO = 90
|
|
28
|
+
# 最迟出报告的天数
|
|
29
|
+
LATE_REPORT_DAYS = 3
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
#### 退市新规 ####
|
|
33
|
+
# 1 股价类:连续20个交易日估价低于1元
|
|
34
|
+
# 2 市值类: 主板小于5亿、创业板3亿
|
|
35
|
+
# 3 财务类: (1) 利润总额 净利润 扣非净利润三者最小值为负 且营业收入小于3亿 创业板营业收入小于1元
|
|
36
|
+
# (2) 资不抵债
|
|
37
|
+
|
|
38
|
+
# 财报审核
|
|
39
|
+
def financial_report_check(new_report_df, period_time, period, report_type):
|
|
40
|
+
if period == 4:
|
|
41
|
+
# 年报异常审核
|
|
42
|
+
year_report_exception_check(new_report_df, period_time, report_type)
|
|
43
|
+
# 负债过高
|
|
44
|
+
liability_ratio_check(report_type, new_report_df, period_time)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# 年报审核异常
|
|
48
|
+
def year_report_exception_check(new_report_df, period_time, report_type):
|
|
49
|
+
new_report_one_df = new_report_df.loc[new_report_df['REPORT_DATE'] == period_time]
|
|
50
|
+
# 审核意见
|
|
51
|
+
opinion_type = list(new_report_one_df['OPINION_TYPE'])[0]
|
|
52
|
+
symbol = list(new_report_one_df['SECURITY_CODE'])[0]
|
|
53
|
+
name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
|
|
54
|
+
now_date = datetime.now()
|
|
55
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
56
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
57
|
+
id_key = symbol + "_" + period_time
|
|
58
|
+
# 年报有问题
|
|
59
|
+
if opinion_type != OPINION_TYPE:
|
|
60
|
+
black_list_service_api.save_black_stock(id_key,
|
|
61
|
+
symbol,
|
|
62
|
+
name,
|
|
63
|
+
str_day,
|
|
64
|
+
str_now_date,
|
|
65
|
+
'年报审计有问题',
|
|
66
|
+
'年报审计有问题',
|
|
67
|
+
'',
|
|
68
|
+
black_list_service_api.FINANCIAL_PROBLEM)
|
|
69
|
+
|
|
70
|
+
if report_type == db_name_constant.EM_STOCK_PROFIT:
|
|
71
|
+
# 利润总额 净利润 扣除非经常性损益后的净利润 三者最小为负
|
|
72
|
+
# 利润总额
|
|
73
|
+
total_profit = list(new_report_one_df['TOTAL_PROFIT'])[0]
|
|
74
|
+
# 净利润
|
|
75
|
+
net_profit = list(new_report_one_df['NETPROFIT'])[0]
|
|
76
|
+
# 营业利润
|
|
77
|
+
operate_profit = list(new_report_one_df['OPERATE_PROFIT'])[0]
|
|
78
|
+
# 持续经营净利润
|
|
79
|
+
continued_profit = list(new_report_one_df['CONTINUED_NETPROFIT'])[0]
|
|
80
|
+
# 归属于母公司股东的净利润
|
|
81
|
+
parent_profit = list(new_report_one_df['PARENT_NETPROFIT'])[0]
|
|
82
|
+
# 扣除非经常性损益后的净利润
|
|
83
|
+
deduct_parent_profit = list(new_report_one_df['DEDUCT_PARENT_NETPROFIT'])[0]
|
|
84
|
+
# 营业总收入
|
|
85
|
+
total_operate_income = list(new_report_one_df['TOTAL_OPERATE_INCOME'])[0]
|
|
86
|
+
|
|
87
|
+
# 最小利润收入
|
|
88
|
+
min_profit = min(total_profit, net_profit, operate_profit,
|
|
89
|
+
continued_profit, parent_profit, deduct_parent_profit)
|
|
90
|
+
if min_profit < 0:
|
|
91
|
+
|
|
92
|
+
classification = common_service_fun_api.classify_symbol_one(symbol)
|
|
93
|
+
if ((classification in ['S', 'H'] and total_operate_income < MIN_INCOME_MAIN)
|
|
94
|
+
| (classification in ['K', 'C'] and total_operate_income < MIN_INCOME_SUB)):
|
|
95
|
+
id_key = symbol + "_" + period_time
|
|
96
|
+
black_list_service_api.save_black_stock(id_key,
|
|
97
|
+
symbol,
|
|
98
|
+
name,
|
|
99
|
+
str_day,
|
|
100
|
+
str_now_date,
|
|
101
|
+
'年报&利润收入触发退市',
|
|
102
|
+
'年报&利润收入触发退市',
|
|
103
|
+
'',
|
|
104
|
+
black_list_service_api.FINANCIAL_PROBLEM)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
# 负债比校验
|
|
108
|
+
def liability_ratio_check(report_type, new_report_df, period_time):
|
|
109
|
+
if report_type == db_name_constant.EM_STOCK_ASSET_LIABILITY:
|
|
110
|
+
new_report_df = new_report_df.sort_values(by=['REPORT_DATE'], ascending=False)
|
|
111
|
+
new_report_one_df = new_report_df.iloc[0:1]
|
|
112
|
+
# 负债比
|
|
113
|
+
liability_ratio = list(new_report_one_df['liability_ratio'])[0]
|
|
114
|
+
|
|
115
|
+
symbol = list(new_report_one_df['SECURITY_CODE'])[0]
|
|
116
|
+
name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
|
|
117
|
+
now_date = datetime.now()
|
|
118
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
119
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
120
|
+
id_key = symbol + "_" + period_time
|
|
121
|
+
|
|
122
|
+
if liability_ratio >= MAX_LIABILITY_RATIO:
|
|
123
|
+
black_list_service_api.save_black_stock(id_key,
|
|
124
|
+
symbol,
|
|
125
|
+
name,
|
|
126
|
+
str_day,
|
|
127
|
+
str_now_date,
|
|
128
|
+
'负债过高',
|
|
129
|
+
'负债过高',
|
|
130
|
+
'',
|
|
131
|
+
black_list_service_api.FINANCIAL_PROBLEM)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
# 未出财报
|
|
135
|
+
def un_report_check(sync_time, now_year, period, period_time):
|
|
136
|
+
un_report_asset_df = finance_common_api.find_un_report_symbol(period_time,
|
|
137
|
+
db_name_constant.EM_STOCK_ASSET_LIABILITY)
|
|
138
|
+
un_report_profit_df = finance_common_api.find_un_report_symbol(period_time,
|
|
139
|
+
db_name_constant.EM_STOCK_PROFIT)
|
|
140
|
+
un_report_df = pd.concat([un_report_asset_df, un_report_profit_df])
|
|
141
|
+
if period == 4 or period == 1:
|
|
142
|
+
last_report_day = str(now_year) + "-05-01"
|
|
143
|
+
elif period == 2:
|
|
144
|
+
last_report_day = str(now_year) + "-07-01"
|
|
145
|
+
elif period == 3:
|
|
146
|
+
last_report_day = str(now_year) + "-10-01"
|
|
147
|
+
max_report_day = trade_date_common_service_api.get_before_trade_date(last_report_day, LATE_REPORT_DAYS)
|
|
148
|
+
if max_report_day > sync_time:
|
|
149
|
+
|
|
150
|
+
for un_asset_one in un_report_df.itertuples():
|
|
151
|
+
symbol = un_asset_one.symbol
|
|
152
|
+
id_key = symbol + "_" + period_time
|
|
153
|
+
name = un_asset_one.name
|
|
154
|
+
now_date = datetime.now()
|
|
155
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
156
|
+
try:
|
|
157
|
+
|
|
158
|
+
black_list_service_api.save_black_stock(id_key,
|
|
159
|
+
symbol,
|
|
160
|
+
name,
|
|
161
|
+
str_day,
|
|
162
|
+
sync_time,
|
|
163
|
+
'未出财报',
|
|
164
|
+
'未出财报',
|
|
165
|
+
'',
|
|
166
|
+
black_list_service_api.FINANCIAL_PROBLEM)
|
|
167
|
+
except Exception as e:
|
|
168
|
+
logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
|
|
@@ -0,0 +1,127 @@
|
|
|
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.api.em.east_money_stock_api as east_money_stock_api
|
|
10
|
+
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
11
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
|
+
import mns_scheduler.finance.em_financial_profit_sync_service_api as em_financial_profit_sync_service_api
|
|
13
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
14
|
+
from loguru import logger
|
|
15
|
+
import \
|
|
16
|
+
mns_scheduler.finance.em_financial_asset_liability_sync_service_api as em_financial_asset_liability_sync_service_api
|
|
17
|
+
import mns_scheduler.finance.financial_high_risk_stock_clean_service_api as financial_high_risk_stock_clean_service_api
|
|
18
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
19
|
+
|
|
20
|
+
mongodb_util = MongodbUtil('27017')
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# 上市公司年报披露时间:每年1月1日一- 4月30日。
|
|
24
|
+
# 2、上市公司中年报披露时间:每年7月1日--8月30日。
|
|
25
|
+
# 3、上市公司季报披露时间:
|
|
26
|
+
# 1季报:每年4月1日-- -4月30日。
|
|
27
|
+
# 2季报(中报) :每年7月1日--8月30日。
|
|
28
|
+
# 3季报:每年10月1日--10月31日4季报(年报) :每年1月1日--4月30日
|
|
29
|
+
|
|
30
|
+
def sync_financial_report():
|
|
31
|
+
now_date = datetime.now()
|
|
32
|
+
now_year = now_date.year
|
|
33
|
+
now_month = now_date.month
|
|
34
|
+
sync_time = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
35
|
+
# 年报
|
|
36
|
+
if 1 <= now_month <= 5:
|
|
37
|
+
period = 4
|
|
38
|
+
period_time = str(now_year - 1) + "-12-31 00:00:00"
|
|
39
|
+
sync_profit_report(period_time, sync_time, period, now_year)
|
|
40
|
+
sync_asset_liability_report(period_time, sync_time, period, now_year)
|
|
41
|
+
|
|
42
|
+
# 一季报
|
|
43
|
+
elif now_month == 5:
|
|
44
|
+
period = 1
|
|
45
|
+
period_time = str(now_year) + "-03-31 00:00:00"
|
|
46
|
+
sync_profit_report(period_time, sync_time, period, now_year)
|
|
47
|
+
sync_asset_liability_report(period_time, sync_time, period, now_year)
|
|
48
|
+
|
|
49
|
+
# 二季报
|
|
50
|
+
elif 7 <= now_month <= 8:
|
|
51
|
+
period = 2
|
|
52
|
+
period_time = str(now_year) + "-06-30 00:00:00"
|
|
53
|
+
sync_profit_report(period_time, sync_time, period, now_year)
|
|
54
|
+
sync_asset_liability_report(period_time, sync_time, period, now_year)
|
|
55
|
+
# 三季报
|
|
56
|
+
elif now_month == 10:
|
|
57
|
+
period = 3
|
|
58
|
+
period_time = str(now_year) + "-09-30 00:00:00"
|
|
59
|
+
sync_profit_report(period_time, sync_time, period, now_year)
|
|
60
|
+
sync_asset_liability_report(period_time, sync_time, period, now_year)
|
|
61
|
+
# 未出报告check
|
|
62
|
+
financial_high_risk_stock_clean_service_api.un_report_check(sync_time, now_year, period, period_time)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# 同步资产表
|
|
66
|
+
def sync_asset_liability_report(period_time, sync_time, period, now_year):
|
|
67
|
+
un_report_asset_df = find_un_report_symbol(period_time, db_name_constant.EM_STOCK_ASSET_LIABILITY)
|
|
68
|
+
for un_report_asset_one in un_report_asset_df.itertuples():
|
|
69
|
+
try:
|
|
70
|
+
symbol = un_report_asset_one.symbol
|
|
71
|
+
new_asset_df = em_financial_asset_liability_sync_service_api.get_em_asset_liability_api(symbol)
|
|
72
|
+
# 负债比
|
|
73
|
+
new_asset_df['liability_ratio'] = round(
|
|
74
|
+
new_asset_df['TOTAL_LIABILITIES'] * 100 / new_asset_df['TOTAL_ASSETS'],
|
|
75
|
+
2)
|
|
76
|
+
new_asset_df['sync_time'] = sync_time
|
|
77
|
+
if data_frame_util.is_empty(new_asset_df):
|
|
78
|
+
continue
|
|
79
|
+
new_asset_df['symbol'] = symbol
|
|
80
|
+
mongodb_util.insert_mongo(new_asset_df, db_name_constant.EM_STOCK_ASSET_LIABILITY)
|
|
81
|
+
|
|
82
|
+
# 年报审核
|
|
83
|
+
financial_high_risk_stock_clean_service_api.financial_report_check(new_asset_df, period_time, period,
|
|
84
|
+
db_name_constant.EM_STOCK_ASSET_LIABILITY)
|
|
85
|
+
|
|
86
|
+
except Exception as e:
|
|
87
|
+
logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
# 同步利润表
|
|
91
|
+
def sync_profit_report(period_time, sync_time, period, now_year):
|
|
92
|
+
un_report_profit_df = find_un_report_symbol(period_time, db_name_constant.EM_STOCK_PROFIT)
|
|
93
|
+
for un_report_profit_one in un_report_profit_df.itertuples():
|
|
94
|
+
try:
|
|
95
|
+
symbol = un_report_profit_one.symbol
|
|
96
|
+
new_profit_df = em_financial_profit_sync_service_api.get_em_profit_api(symbol)
|
|
97
|
+
new_profit_df['sync_time'] = sync_time
|
|
98
|
+
if data_frame_util.is_empty(new_profit_df):
|
|
99
|
+
continue
|
|
100
|
+
new_profit_df['symbol'] = symbol
|
|
101
|
+
mongodb_util.insert_mongo(new_profit_df, db_name_constant.EM_STOCK_PROFIT)
|
|
102
|
+
|
|
103
|
+
# 年报审核
|
|
104
|
+
financial_high_risk_stock_clean_service_api.financial_report_check(new_profit_df, period_time,
|
|
105
|
+
period, db_name_constant.EM_STOCK_PROFIT)
|
|
106
|
+
except Exception as e:
|
|
107
|
+
logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# 查出未报告的股票
|
|
111
|
+
def find_un_report_symbol(period_time, report_name):
|
|
112
|
+
real_time_quotes_df = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
113
|
+
if report_name == db_name_constant.EM_STOCK_ASSET_LIABILITY:
|
|
114
|
+
had_asset_df = finance_common_api.find_asset_liability_report(period_time)
|
|
115
|
+
if data_frame_util.is_not_empty(had_asset_df):
|
|
116
|
+
real_time_quotes_df = real_time_quotes_df.loc[
|
|
117
|
+
~(real_time_quotes_df['symbol'].isin(list(had_asset_df['SECURITY_CODE'])))]
|
|
118
|
+
if report_name == db_name_constant.EM_STOCK_PROFIT:
|
|
119
|
+
had_profit_df = finance_common_api.find_profit_report(period_time)
|
|
120
|
+
if data_frame_util.is_not_empty(had_profit_df):
|
|
121
|
+
real_time_quotes_df = real_time_quotes_df.loc[
|
|
122
|
+
~(real_time_quotes_df['symbol'].isin(list(had_profit_df['SECURITY_CODE'])))]
|
|
123
|
+
return real_time_quotes_df
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
if __name__ == '__main__':
|
|
127
|
+
sync_financial_report()
|
|
@@ -105,7 +105,8 @@ def sync_new_high_risk_stocks():
|
|
|
105
105
|
announce_time,
|
|
106
106
|
high_risk_stocks_one.announcementTitle,
|
|
107
107
|
high_risk_stocks_one.announcementTitle,
|
|
108
|
-
announce_url
|
|
108
|
+
announce_url,
|
|
109
|
+
black_list_service_api.REGISTER_INVESTIGATE)
|
|
109
110
|
except Exception as e:
|
|
110
111
|
logger.error("保存风险警示股票异常:{},{}", symbol, e)
|
|
111
112
|
|
|
@@ -33,7 +33,11 @@ mns_scheduler/db/db_status.py,sha256=K1jtYIGZzDV6knpoJLLnXEhN3tyziJp_zY2gSfguHCA
|
|
|
33
33
|
mns_scheduler/dt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
34
34
|
mns_scheduler/dt/stock_dt_pool_sync.py,sha256=5ivRUOnFtOapZniwTbujf1lVq3y4btm2Cmd5R6JJAVo,3466
|
|
35
35
|
mns_scheduler/finance/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
36
|
-
mns_scheduler/finance/
|
|
36
|
+
mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py,sha256=7Y5Nc2yzF19LD0j0pqSUtWdeOA08QFgjTfFtfQnF0vA,17231
|
|
37
|
+
mns_scheduler/finance/em_financial_profit_sync_service_api.py,sha256=KZm4cGXJbcRRCbvK08ftf2QP9VWr8UqLAfAJOskte50,13875
|
|
38
|
+
mns_scheduler/finance/finance_common_api.py,sha256=yPE0at1WFDyYZ3IAjkgCj6xMH7gPp8sAkJsYj5jhmLk,1075
|
|
39
|
+
mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py,sha256=ilf5eAWJT9SKXQJbMP-GLp3H-nY7m5MMn-asaTAMMq0,8328
|
|
40
|
+
mns_scheduler/finance/sync_financial_report_service_api.py,sha256=e8ZHmnXr9LOjJc3LuQ1_t9g-5NEDsmjTQn85wVMCQMM,6007
|
|
37
41
|
mns_scheduler/k_line/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
|
|
38
42
|
mns_scheduler/k_line/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
39
43
|
mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=3NPu-bkBw5ARW2yoMAmf_-au6vxQdSjzGlT-l4dqV4w,21833
|
|
@@ -53,7 +57,7 @@ mns_scheduler/real_time/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy
|
|
|
53
57
|
mns_scheduler/real_time/realtime_quotes_now_create_db_index.py,sha256=qQCjcsG3WYgn3zemS45Ms0AHtbkCwlSVPPCntxVvK8Q,1066
|
|
54
58
|
mns_scheduler/real_time/realtime_quotes_now_sync.py,sha256=XIz454cysRO-xfdgsEw3glR0LgTxFdZoCNONd4O7EgM,9165
|
|
55
59
|
mns_scheduler/risk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
56
|
-
mns_scheduler/risk/register_and_investigate_stock_sync_api.py,sha256=
|
|
60
|
+
mns_scheduler/risk/register_and_investigate_stock_sync_api.py,sha256=_6Eh5nPQu5KJ0lherAmB8e-pnk8UHsX3WGZ-Xfqk7Fc,4949
|
|
57
61
|
mns_scheduler/trade/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
58
62
|
mns_scheduler/trade/auto_ipo_buy_api.py,sha256=QXNzFJGNGveVUcXBh0RRJb_HV7abbLYXRljezPJf9ZM,377
|
|
59
63
|
mns_scheduler/trade/auto_sell_service_api.py,sha256=HaauZeOsuLNBrowXT8IKaSgWLR2Huott6mg_AoLhpUY,4423
|
|
@@ -69,7 +73,7 @@ mns_scheduler/zt/zt_pool_sync_api.py,sha256=RrVAbU1u-HTqXF9BSwNlzIxMHrUgjNaLpDKF
|
|
|
69
73
|
mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
70
74
|
mns_scheduler/zz_task/data_sync_task.py,sha256=P75noN2J8YOqht_wyTN5IOZ6NPeTIKhRN4SPZhe6x2A,16100
|
|
71
75
|
mns_scheduler/zz_task/sync_realtime_quotes_task.py,sha256=DN3bq2XCDZC-PHlbD2NTog48bR44EruIEc2QVGKg7Tk,932
|
|
72
|
-
mns_scheduler-1.0.4.
|
|
73
|
-
mns_scheduler-1.0.4.
|
|
74
|
-
mns_scheduler-1.0.4.
|
|
75
|
-
mns_scheduler-1.0.4.
|
|
76
|
+
mns_scheduler-1.0.4.8.dist-info/METADATA,sha256=gXAIfuOiGUMYWRx8O7hafzW4UAkN5R8Kg1BM0ciSgl8,64
|
|
77
|
+
mns_scheduler-1.0.4.8.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
78
|
+
mns_scheduler-1.0.4.8.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
|
|
79
|
+
mns_scheduler-1.0.4.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|