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