From d8bc9d0f481dd445fe04ea22f31b81db377d1c84 Mon Sep 17 00:00:00 2001 From: yanweidong Date: Sat, 24 Jan 2026 18:08:23 +0800 Subject: [PATCH] feat fina indicator --- internal/logic/a/fina_indicator.go | 209 ++++++++++++++++++++++++++++- 1 file changed, 205 insertions(+), 4 deletions(-) diff --git a/internal/logic/a/fina_indicator.go b/internal/logic/a/fina_indicator.go index ed51411..bf1c91b 100644 --- a/internal/logic/a/fina_indicator.go +++ b/internal/logic/a/fina_indicator.go @@ -36,20 +36,221 @@ func GetFinaIndicator() { return } + records := make([]*models.StockFinaIndicator, 0) + itemData := make(map[string]any) for _, item := range reply.Data.Items { - t := utils.String2Int(item[1].(string)) + 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 AnnDate=?", item[0].(string), t).Count(&cnt) + impl.DBService.Model(&models.StockFinaIndicator{}).Where("ts_code=? and ann_date=?", itemData["ts_code"].(string), t).Count(&cnt) if cnt == 0 { - impl.DBService.Create(&models.StockFinaIndicator{ - TsCode: item[0].(string), + 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) } }