package a import ( "log" "strings" "time" "git.apinb.com/bsm-sdk/core/utils" "git.apinb.com/dataset/stock/internal/impl" "git.apinb.com/dataset/stock/internal/models" ) func GetFinaIndicator() { end := time.Now().Format("20060102") for _, code := range GetStockCodes() { var start string = "20230101" var last models.StockFinaIndicator err := impl.DBService.Where("ts_code=?", code).Order("ann_date DESC").First(&last).Error if err == nil { start = utils.Int2String(last.AnnDate) } params := map[string]string{ "ts_code": code, "start_date": start, "end_date": end, } if start == end { continue } fields := strings.Split("ts_code,ann_date,end_date,eps,dt_eps,total_revenue_ps,revenue_ps,capital_rese_ps,surplus_rese_ps,undist_profit_ps,extra_item,profit_dedt,gross_margin,current_ratio,quick_ratio,cash_ratio,invturn_days,arturn_days,inv_turn,ar_turn,ca_turn,fa_turn,assets_turn,op_income,valuechange_income,interst_income,daa,ebit,ebitda,fcff,fcfe,current_exint,noncurrent_exint,interestdebt,netdebt,tangible_asset,working_capital,networking_capital,invest_capital,retained_earnings,diluted2_eps,bps,ocfps,retainedps,cfps,ebit_ps,fcff_ps,fcfe_ps,netprofit_margin,grossprofit_margin,cogs_of_sales,expense_of_sales,profit_to_gr,saleexp_to_gr,adminexp_of_gr,finaexp_of_gr,impai_ttm,gc_of_gr,op_of_gr,ebit_of_gr,roe,roe_waa,roe_dt,roa,npta,roic,roe_yearly,roa2_yearly,roe_avg,opincome_of_ebt,investincome_of_ebt,n_op_profit_of_ebt,tax_to_ebt,dtprofit_to_profit,salescash_to_or,ocf_to_or,ocf_to_opincome,capitalized_to_da,debt_to_assets,assets_to_eqt,dp_assets_to_eqt,ca_to_assets,nca_to_assets,tbassets_to_totalassets,int_to_talcap,eqt_to_talcapital,currentdebt_to_debt,longdeb_to_debt,ocf_to_shortdebt,debt_to_eqt,eqt_to_debt,eqt_to_interestdebt,tangibleasset_to_debt,tangasset_to_intdebt,tangibleasset_to_netdebt,ocf_to_debt,ocf_to_interestdebt,ocf_to_netdebt,ebit_to_interest,longdebt_to_workingcapital,ebitda_to_debt,turn_days,roa_yearly,roa_dp,fixed_assets,profit_prefin_exp,non_op_profit,op_to_ebt,nop_to_ebt,ocf_to_profit,cash_to_liqdebt,cash_to_liqdebt_withinterest,op_to_liqdebt,op_to_debt,roic_yearly,total_fa_trun,profit_to_op,q_opincome,q_investincome,q_dtprofit,q_eps,q_netprofit_margin,q_gsprofit_margin,q_exp_to_sales,q_profit_to_gr,q_saleexp_to_gr,q_adminexp_to_gr,q_finaexp_to_gr,q_impair_to_gr_ttm,q_gc_to_gr,q_op_to_gr,q_roe,q_dt_roe,q_npta,q_opincome_to_ebt,q_investincome_to_ebt,q_dtprofit_to_profit,q_salescash_to_or,q_ocf_to_sales,q_ocf_to_or,basic_eps_yoy,dt_eps_yoy,cfps_yoy,op_yoy,ebt_yoy,netprofit_yoy,dt_netprofit_yoy,ocf_yoy,roe_yoy,bps_yoy,assets_yoy,eqt_yoy,tr_yoy,or_yoy,q_gr_yoy,q_gr_qoq,q_sales_yoy,q_sales_qoq,q_op_yoy,q_op_qoq,q_profit_yoy,q_profit_qoq,q_netprofit_yoy,q_netprofit_qoq,equity_yoy,rd_exp,update_flag", ",") reply, err := TushareClient.FinaIndicator(params, fields) if err != nil { log.Println("ERROR", "GetFinaIndicator", err) return } records := make([]*models.StockFinaIndicator, 0) itemData := make(map[string]any) for _, item := range reply.Data.Items { for i := 0; i < len(item); i++ { itemData[reply.Data.Fields[i]] = item[i] } t := utils.String2Int(itemData["ann_date"].(string)) if t == 0 { continue } var cnt int64 impl.DBService.Model(&models.StockFinaIndicator{}).Where("ts_code=? and ann_date=?", itemData["ts_code"].(string), t).Count(&cnt) if cnt == 0 { records = append(records, &models.StockFinaIndicator{ TsCode: itemData["ts_code"].(string), AnnDate: t, EndDate: itemData["end_date"].(string), // 每股指标 Eps: Any2Float(itemData["eps"]), DtEps: Any2Float(itemData["dt_eps"]), TotalRevenuePs: Any2Float(itemData["total_revenue_ps"]), RevenuePs: Any2Float(itemData["revenue_ps"]), CapitalResePs: Any2Float(itemData["capital_rese_ps"]), SurplusResePs: Any2Float(itemData["surplus_rese_ps"]), UndistProfitPs: Any2Float(itemData["undist_profit_ps"]), Diluted2Eps: Any2Float(itemData["diluted2_eps"]), Bps: Any2Float(itemData["bps"]), Ocfps: Any2Float(itemData["ocfps"]), Retainedps: Any2Float(itemData["retainedps"]), Cfps: Any2Float(itemData["cfps"]), EbitPs: Any2Float(itemData["ebit_ps"]), FcffPs: Any2Float(itemData["fcff_ps"]), FcfePs: Any2Float(itemData["fcfe_ps"]), // 利润表相关 ExtraItem: Any2Float(itemData["extra_item"]), ProfitDedt: Any2Float(itemData["profit_dedt"]), GrossMargin: Any2Float(itemData["gross_margin"]), OpIncome: Any2Float(itemData["op_income"]), ValuechangeIncome: Any2Float(itemData["valuechange_income"]), InterstIncome: Any2Float(itemData["interst_income"]), Daa: Any2Float(itemData["daa"]), Ebit: Any2Float(itemData["ebit"]), Ebitda: Any2Float(itemData["ebitda"]), Fcff: Any2Float(itemData["fcff"]), Fcfe: Any2Float(itemData["fcfe"]), RdExp: Any2Float(itemData["rd_exp"]), FixedAssets: Any2Float(itemData["fixed_assets"]), ProfitPrefinExp: Any2Float(itemData["profit_prefin_exp"]), NonOpProfit: Any2Float(itemData["non_op_profit"]), // 资产负债表相关 CurrentExint: Any2Float(itemData["current_exint"]), NoncurrentExint: Any2Float(itemData["noncurrent_exint"]), Interestdebt: Any2Float(itemData["interestdebt"]), Netdebt: Any2Float(itemData["netdebt"]), TangibleAsset: Any2Float(itemData["tangible_asset"]), WorkingCapital: Any2Float(itemData["working_capital"]), NetworkingCapital: Any2Float(itemData["networking_capital"]), InvestCapital: Any2Float(itemData["invest_capital"]), RetainedEarnings: Any2Float(itemData["retained_earnings"]), // 偿债能力指标 CurrentRatio: Any2Float(itemData["current_ratio"]), QuickRatio: Any2Float(itemData["quick_ratio"]), CashRatio: Any2Float(itemData["cash_ratio"]), DebtToAssets: Any2Float(itemData["debt_to_assets"]), AssetsToEqt: Any2Float(itemData["assets_to_eqt"]), DpAssetsToEqt: Any2Float(itemData["dp_assets_to_eqt"]), DebtToEqt: Any2Float(itemData["debt_to_eqt"]), EqtToDebt: Any2Float(itemData["eqt_to_debt"]), OcfToShortdebt: Any2Float(itemData["ocf_to_shortdebt"]), EbitToInterest: Any2Float(itemData["ebit_to_interest"]), // 运营能力指标 InvturnDays: Any2Float(itemData["invturn_days"]), ArturnDays: Any2Float(itemData["arturn_days"]), InvTurn: Any2Float(itemData["inv_turn"]), ArTurn: Any2Float(itemData["ar_turn"]), CaTurn: Any2Float(itemData["ca_turn"]), FaTurn: Any2Float(itemData["fa_turn"]), AssetsTurn: Any2Float(itemData["assets_turn"]), TurnDays: Any2Float(itemData["turn_days"]), TotalFaTrun: Any2Float(itemData["total_fa_trun"]), // 盈利能力指标 NetprofitMargin: Any2Float(itemData["netprofit_margin"]), GrossprofitMargin: Any2Float(itemData["grossprofit_margin"]), CogsOfSales: Any2Float(itemData["cogs_of_sales"]), ExpenseOfSales: Any2Float(itemData["expense_of_sales"]), Roe: Any2Float(itemData["roe"]), RoeWaa: Any2Float(itemData["roe_waa"]), RoeDt: Any2Float(itemData["roe_dt"]), Roa: Any2Float(itemData["roa"]), Npta: Any2Float(itemData["npta"]), Roic: Any2Float(itemData["roic"]), RoaDp: Any2Float(itemData["roa_dp"]), // 结构指标 CaToAssets: Any2Float(itemData["ca_to_assets"]), NcaToAssets: Any2Float(itemData["nca_to_assets"]), TbassetsToTotalassets: Any2Float(itemData["tbassets_to_totalassets"]), IntToTalcap: Any2Float(itemData["int_to_talcap"]), EqtToTalcapital: Any2Float(itemData["eqt_to_talcapital"]), CurrentdebtToDebt: Any2Float(itemData["currentdebt_to_debt"]), LongdebToDebt: Any2Float(itemData["longdeb_to_debt"]), TangibleassetToDebt: Any2Float(itemData["tangibleasset_to_debt"]), // 单季度指标 QOpincome: Any2Float(itemData["q_opincome"]), QInvestincome: Any2Float(itemData["q_investincome"]), QDtprofit: Any2Float(itemData["q_dtprofit"]), QEps: Any2Float(itemData["q_eps"]), QNetprofitMargin: Any2Float(itemData["q_netprofit_margin"]), QGscaleprofitMargin: Any2Float(itemData["q_gsprofit_margin"]), QExpToSales: Any2Float(itemData["q_exp_to_sales"]), QRoe: Any2Float(itemData["q_roe"]), QDtRoe: Any2Float(itemData["q_dt_roe"]), QNpta: Any2Float(itemData["q_npta"]), // 同比增长率 BasicEpsYoy: Any2Float(itemData["basic_eps_yoy"]), DtEpsYoy: Any2Float(itemData["dt_eps_yoy"]), CfpsYoy: Any2Float(itemData["cfps_yoy"]), OpYoy: Any2Float(itemData["op_yoy"]), EbtYoy: Any2Float(itemData["ebt_yoy"]), NetprofitYoy: Any2Float(itemData["netprofit_yoy"]), DtNetprofitYoy: Any2Float(itemData["dt_netprofit_yoy"]), OcfYoy: Any2Float(itemData["ocf_yoy"]), RoeYoy: Any2Float(itemData["roe_yoy"]), BpsYoy: Any2Float(itemData["bps_yoy"]), AssetsYoy: Any2Float(itemData["assets_yoy"]), EqtYoy: Any2Float(itemData["eqt_yoy"]), TrYoy: Any2Float(itemData["tr_yoy"]), OrYoy: Any2Float(itemData["or_yoy"]), EquityYoy: Any2Float(itemData["equity_yoy"]), // 其他比率指标 ProfitToGr: Any2Float(itemData["profit_to_gr"]), SaleexpToGr: Any2Float(itemData["saleexp_to_gr"]), AdminexpOfGr: Any2Float(itemData["adminexp_of_gr"]), FinaexpOfGr: Any2Float(itemData["finaexp_of_gr"]), ImpaiTtm: Any2Float(itemData["impai_ttm"]), GcOfGr: Any2Float(itemData["gc_of_gr"]), OpOfGr: Any2Float(itemData["op_of_gr"]), EbitOfGr: Any2Float(itemData["ebit_of_gr"]), OpincomeOfEbt: Any2Float(itemData["opincome_of_ebt"]), InvestincomeOfEbt: Any2Float(itemData["investincome_of_ebt"]), NOpProfitOfEbt: Any2Float(itemData["n_op_profit_of_ebt"]), TaxToEbt: Any2Float(itemData["tax_to_ebt"]), DtprofitToProfit: Any2Float(itemData["dtprofit_to_profit"]), SalescashToOr: Any2Float(itemData["salescash_to_or"]), OcfToOr: Any2Float(itemData["ocf_to_or"]), OcfToOpincome: Any2Float(itemData["ocf_to_opincome"]), CapitalizedToDa: Any2Float(itemData["capitalized_to_da"]), OcfToDebt: Any2Float(itemData["ocf_to_debt"]), OcfToInterestdebt: Any2Float(itemData["ocf_to_interestdebt"]), OcfToNetdebt: Any2Float(itemData["ocf_to_netdebt"]), LongdebtToWorkingcapital: Any2Float(itemData["longdebt_to_workingcapital"]), EbitdaToDebt: Any2Float(itemData["ebitda_to_debt"]), OpToEbt: Any2Float(itemData["op_to_ebt"]), NopToEbt: Any2Float(itemData["nop_to_ebt"]), OcfToProfit: Any2Float(itemData["ocf_to_profit"]), CashToLiqdebt: Any2Float(itemData["cash_to_liqdebt"]), CashToLiqdebtWithinterest: Any2Float(itemData["cash_to_liqdebt_withinterest"]), OpToLiqdebt: Any2Float(itemData["op_to_liqdebt"]), OpToDebt: Any2Float(itemData["op_to_debt"]), ProfitToOp: Any2Float(itemData["profit_to_op"]), // 年度化指标 RoeYearly: Any2Float(itemData["roe_yearly"]), Roa2Yearly: Any2Float(itemData["roa2_yearly"]), RoaYearly: Any2Float(itemData["roa_yearly"]), RoicYearly: Any2Float(itemData["roic_yearly"]), RoeAvg: Any2Float(itemData["roe_avg"]), // 单季度增长比率 QGrYoy: Any2Float(itemData["q_gr_yoy"]), QGrQoq: Any2Float(itemData["q_gr_qoq"]), QSalesYoy: Any2Float(itemData["q_sales_yoy"]), QSalesQoq: Any2Float(itemData["q_sales_qoq"]), QOpYoy: Any2Float(itemData["q_op_yoy"]), QOpQoq: Any2Float(itemData["q_op_qoq"]), QProfitYoy: Any2Float(itemData["q_profit_yoy"]), QProfitQoq: Any2Float(itemData["q_profit_qoq"]), QNetprofitYoy: Any2Float(itemData["q_netprofit_yoy"]), QNetprofitQoq: Any2Float(itemData["q_netprofit_qoq"]), // 单季度比率指标 QProfitToGr: Any2Float(itemData["q_profit_to_gr"]), QSaleexpToGr: Any2Float(itemData["q_saleexp_to_gr"]), QAdminexpToGr: Any2Float(itemData["q_adminexp_to_gr"]), QFinaexpToGr: Any2Float(itemData["q_finaexp_to_gr"]), QImpairToGrTtm: Any2Float(itemData["q_impair_to_gr_ttm"]), QGcToGr: Any2Float(itemData["q_gc_to_gr"]), QOpToGr: Any2Float(itemData["q_op_to_gr"]), QOpincomeToEbt: Any2Float(itemData["q_opincome_to_ebt"]), QInvestincomeToEbt: Any2Float(itemData["q_investincome_to_ebt"]), QDtprofitToProfit: Any2Float(itemData["q_dtprofit_to_profit"]), QSalescashToOr: Any2Float(itemData["q_salescash_to_or"]), QOcfToSales: Any2Float(itemData["q_ocf_to_sales"]), QOcfToOr: Any2Float(itemData["q_ocf_to_or"]), // 其他 UpdateFlag: itemData["update_flag"].(string), }) } } if len(records) > 0 { impl.DBService.CreateInBatches(records, 100) } time.Sleep(200 * time.Microsecond) } }