diff --git a/internal/logic/a/fina_indicator.go b/internal/logic/a/fina_indicator.go new file mode 100644 index 0000000..b03f315 --- /dev/null +++ b/internal/logic/a/fina_indicator.go @@ -0,0 +1,49 @@ +package a + +import ( + "log" + "strings" + "time" + + "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 && last.AnnDate != "" { + start = 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 + } + + for _, item := range reply.Data.Items { + var cnt int64 + impl.DBService.Model(&models.StockFinaIndicator{}).Where("ts_code=? and AnnDate=?", item[0].(string), item[1].(string)).Count(&cnt) + if cnt == 0 { + impl.DBService.Create(&models.StockFinaIndicator{ + TsCode: item[0].(string), + AnnDate: item[1].(string), + }) + } + } + } +} diff --git a/internal/models/stock_fina_indicator.go b/internal/models/stock_fina_indicator.go new file mode 100644 index 0000000..0af269f --- /dev/null +++ b/internal/models/stock_fina_indicator.go @@ -0,0 +1,212 @@ +package models + +import ( + "time" + + "gorm.io/gorm" +) + +// StockFinaIndicator 财务指标模型 +type StockFinaIndicator struct { + ID uint `gorm:"primarykey;autoIncrement"` + TsCode string `gorm:"type:varchar(20);not null;index:idx_ts_code;comment:TS代码"` + AnnDate string `gorm:"type:date;not null;index:idx_ann_date;comment:公告日期"` + EndDate string `gorm:"type:date;not null;index:idx_end_date;comment:报告期"` + + // 每股指标 + Eps float64 `gorm:"type:decimal(20,4);comment:基本每股收益"` + DtEps float64 `gorm:"type:decimal(20,4);comment:稀释每股收益"` + TotalRevenuePs float64 `gorm:"type:decimal(20,4);comment:每股营业总收入"` + RevenuePs float64 `gorm:"type:decimal(20,4);comment:每股营业收入"` + CapitalResePs float64 `gorm:"type:decimal(20,4);comment:每股资本公积"` + SurplusResePs float64 `gorm:"type:decimal(20,4);comment:每股盈余公积"` + UndistProfitPs float64 `gorm:"type:decimal(20,4);comment:每股未分配利润"` + Diluted2Eps float64 `gorm:"type:decimal(20,4);comment:期末摊薄每股收益"` + Bps float64 `gorm:"type:decimal(20,4);comment:每股净资产"` + Ocfps float64 `gorm:"type:decimal(20,4);comment:每股经营活动产生的现金流量净额"` + Retainedps float64 `gorm:"type:decimal(20,4);comment:每股留存收益"` + Cfps float64 `gorm:"type:decimal(20,4);comment:每股现金流量净额"` + EbitPs float64 `gorm:"type:decimal(20,4);comment:每股息税前利润"` + FcffPs float64 `gorm:"type:decimal(20,4);comment:每股企业自由现金流量"` + FcfePs float64 `gorm:"type:decimal(20,4);comment:每股股东自由现金流量"` + + // 利润表相关 + ExtraItem float64 `gorm:"type:decimal(20,4);comment:非经常性损益"` + ProfitDedt float64 `gorm:"type:decimal(20,4);comment:扣除非经常性损益后的净利润"` + GrossMargin float64 `gorm:"type:decimal(20,4);comment:毛利"` + OpIncome float64 `gorm:"type:decimal(20,4);comment:经营活动净收益"` + ValuechangeIncome float64 `gorm:"type:decimal(20,4);comment:价值变动净收益"` + InterstIncome float64 `gorm:"type:decimal(20,4);comment:利息费用"` + Daa float64 `gorm:"type:decimal(20,4);comment:折旧与摊销"` + Ebit float64 `gorm:"type:decimal(20,4);comment:息税前利润"` + Ebitda float64 `gorm:"type:decimal(20,4);comment:息税折旧摊销前利润"` + Fcff float64 `gorm:"type:decimal(20,4);comment:企业自由现金流量"` + Fcfe float64 `gorm:"type:decimal(20,4);comment:股权自由现金流量"` + RdExp float64 `gorm:"type:decimal(20,4);comment:研发费用"` + FixedAssets float64 `gorm:"type:decimal(20,4);comment:固定资产合计"` + ProfitPrefinExp float64 `gorm:"type:decimal(20,4);comment:扣除财务费用前营业利润"` + NonOpProfit float64 `gorm:"type:decimal(20,4);comment:非营业利润"` + + // 资产负债表相关 + CurrentExint float64 `gorm:"type:decimal(20,4);comment:无息流动负债"` + NoncurrentExint float64 `gorm:"type:decimal(20,4);comment:无息非流动负债"` + Interestdebt float64 `gorm:"type:decimal(20,4);comment:带息债务"` + Netdebt float64 `gorm:"type:decimal(20,4);comment:净债务"` + TangibleAsset float64 `gorm:"type:decimal(20,4);comment:有形资产"` + WorkingCapital float64 `gorm:"type:decimal(20,4);comment:营运资金"` + NetworkingCapital float64 `gorm:"type:decimal(20,4);comment:营运流动资本"` + InvestCapital float64 `gorm:"type:decimal(20,4);comment:全部投入资本"` + RetainedEarnings float64 `gorm:"type:decimal(20,4);comment:留存收益"` + + // 偿债能力指标 + CurrentRatio float64 `gorm:"type:decimal(20,4);comment:流动比率"` + QuickRatio float64 `gorm:"type:decimal(20,4);comment:速动比率"` + CashRatio float64 `gorm:"type:decimal(20,4);comment:保守速动比率"` + DebtToAssets float64 `gorm:"type:decimal(20,4);comment:资产负债率"` + AssetsToEqt float64 `gorm:"type:decimal(20,4);comment:权益乘数"` + DpAssetsToEqt float64 `gorm:"type:decimal(20,4);comment:权益乘数(杜邦分析)"` + DebtToEqt float64 `gorm:"type:decimal(20,4);comment:产权比率"` + EqtToDebt float64 `gorm:"type:decimal(20,4);comment:归属于母公司的股东权益/负债合计"` + OcfToShortdebt float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/流动负债"` + EbitToInterest float64 `gorm:"type:decimal(20,4);comment:已获利息倍数"` + + // 运营能力指标 + InvturnDays float64 `gorm:"type:decimal(20,4);comment:存货周转天数"` + ArturnDays float64 `gorm:"type:decimal(20,4);comment:应收账款周转天数"` + InvTurn float64 `gorm:"type:decimal(20,4);comment:存货周转率"` + ArTurn float64 `gorm:"type:decimal(20,4);comment:应收账款周转率"` + CaTurn float64 `gorm:"type:decimal(20,4);comment:流动资产周转率"` + FaTurn float64 `gorm:"type:decimal(20,4);comment:固定资产周转率"` + AssetsTurn float64 `gorm:"type:decimal(20,4);comment:总资产周转率"` + TurnDays float64 `gorm:"type:decimal(20,4);comment:营业周期"` + TotalFaTrun float64 `gorm:"type:decimal(20,4);comment:固定资产合计周转率"` + + // 盈利能力指标 + NetprofitMargin float64 `gorm:"type:decimal(20,4);comment:销售净利率"` + GrossprofitMargin float64 `gorm:"type:decimal(20,4);comment:销售毛利率"` + CogsOfSales float64 `gorm:"type:decimal(20,4);comment:销售成本率"` + ExpenseOfSales float64 `gorm:"type:decimal(20,4);comment:销售期间费用率"` + Roe float64 `gorm:"type:decimal(20,4);comment:净资产收益率"` + RoeWaa float64 `gorm:"type:decimal(20,4);comment:加权平均净资产收益率"` + RoeDt float64 `gorm:"type:decimal(20,4);comment:净资产收益率(扣除非经常损益)"` + Roa float64 `gorm:"type:decimal(20,4);comment:总资产报酬率"` + Npta float64 `gorm:"type:decimal(20,4);comment:总资产净利润"` + Roic float64 `gorm:"type:decimal(20,4);comment:投入资本回报率"` + RoaDp float64 `gorm:"type:decimal(20,4);comment:总资产净利率(杜邦分析)"` + + // 结构指标 + CaToAssets float64 `gorm:"type:decimal(20,4);comment:流动资产/总资产"` + NcaToAssets float64 `gorm:"type:decimal(20,4);comment:非流动资产/总资产"` + TbassetsToTotalassets float64 `gorm:"type:decimal(20,4);comment:有形资产/总资产"` + IntToTalcap float64 `gorm:"type:decimal(20,4);comment:带息债务/全部投入资本"` + EqtToTalcapital float64 `gorm:"type:decimal(20,4);comment:归属于母公司的股东权益/全部投入资本"` + CurrentdebtToDebt float64 `gorm:"type:decimal(20,4);comment:流动负债/负债合计"` + LongdebToDebt float64 `gorm:"type:decimal(20,4);comment:非流动负债/负债合计"` + TangibleassetToDebt float64 `gorm:"type:decimal(20,4);comment:有形资产/负债合计"` + + // 单季度指标 + QOpincome float64 `gorm:"type:decimal(20,4);comment:经营活动单季度净收益"` + QInvestincome float64 `gorm:"type:decimal(20,4);comment:价值变动单季度净收益"` + QDtprofit float64 `gorm:"type:decimal(20,4);comment:扣除非经常损益后的单季度净利润"` + QEps float64 `gorm:"type:decimal(20,4);comment:每股收益(单季度)"` + QNetprofitMargin float64 `gorm:"type:decimal(20,4);comment:销售净利率(单季度)"` + QGscaleprofitMargin float64 `gorm:"type:decimal(20,4);comment:销售毛利率(单季度)"` + QExpToSales float64 `gorm:"type:decimal(20,4);comment:销售期间费用率(单季度)"` + QRoe float64 `gorm:"type:decimal(20,4);comment:净资产收益率(单季度)"` + QDtRoe float64 `gorm:"type:decimal(20,4);comment:净资产单季度收益率(扣除非经常损益)"` + QNpta float64 `gorm:"type:decimal(20,4);comment:总资产净利润(单季度)"` + + // 同比增长率 + BasicEpsYoy float64 `gorm:"type:decimal(20,4);comment:基本每股收益同比增长率(%)"` + DtEpsYoy float64 `gorm:"type:decimal(20,4);comment:稀释每股收益同比增长率(%)"` + CfpsYoy float64 `gorm:"type:decimal(20,4);comment:每股经营活动产生的现金流量净额同比增长率(%)"` + OpYoy float64 `gorm:"type:decimal(20,4);comment:营业利润同比增长率(%)"` + EbtYoy float64 `gorm:"type:decimal(20,4);comment:利润总额同比增长率(%)"` + NetprofitYoy float64 `gorm:"type:decimal(20,4);comment:归属母公司股东的净利润同比增长率(%)"` + DtNetprofitYoy float64 `gorm:"type:decimal(20,4);comment:归属母公司股东的净利润-扣除非经常损益同比增长率(%)"` + OcfYoy float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额同比增长率(%)"` + RoeYoy float64 `gorm:"type:decimal(20,4);comment:净资产收益率(摊薄)同比增长率(%)"` + BpsYoy float64 `gorm:"type:decimal(20,4);comment:每股净资产相对年初增长率(%)"` + AssetsYoy float64 `gorm:"type:decimal(20,4);comment:资产总计相对年初增长率(%)"` + EqtYoy float64 `gorm:"type:decimal(20,4);comment:归属母公司的股东权益相对年初增长率(%)"` + TrYoy float64 `gorm:"type:decimal(20,4);comment:营业总收入同比增长率(%)"` + OrYoy float64 `gorm:"type:decimal(20,4);comment:营业收入同比增长率(%)"` + EquityYoy float64 `gorm:"type:decimal(20,4);comment:净资产同比增长率"` + + // 其他比率指标 + ProfitToGr float64 `gorm:"type:decimal(20,4);comment:净利润/营业总收入"` + SaleexpToGr float64 `gorm:"type:decimal(20,4);comment:销售费用/营业总收入"` + AdminexpOfGr float64 `gorm:"type:decimal(20,4);comment:管理费用/营业总收入"` + FinaexpOfGr float64 `gorm:"type:decimal(20,4);comment:财务费用/营业总收入"` + ImpaiTtm float64 `gorm:"type:decimal(20,4);comment:资产减值损失/营业总收入"` + GcOfGr float64 `gorm:"type:decimal(20,4);comment:营业总成本/营业总收入"` + OpOfGr float64 `gorm:"type:decimal(20,4);comment:营业利润/营业总收入"` + EbitOfGr float64 `gorm:"type:decimal(20,4);comment:息税前利润/营业总收入"` + OpincomeOfEbt float64 `gorm:"type:decimal(20,4);comment:经营活动净收益/利润总额"` + InvestincomeOfEbt float64 `gorm:"type:decimal(20,4);comment:价值变动净收益/利润总额"` + NOpProfitOfEbt float64 `gorm:"type:decimal(20,4);comment:营业外收支净额/利润总额"` + TaxToEbt float64 `gorm:"type:decimal(20,4);comment:所得税/利润总额"` + DtprofitToProfit float64 `gorm:"type:decimal(20,4);comment:扣除非经常损益后的净利润/净利润"` + SalescashToOr float64 `gorm:"type:decimal(20,4);comment:销售商品提供劳务收到的现金/营业收入"` + OcfToOr float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/营业收入"` + OcfToOpincome float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/经营活动净收益"` + CapitalizedToDa float64 `gorm:"type:decimal(20,4);comment:资本支出/折旧和摊销"` + OcfToDebt float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/负债合计"` + OcfToInterestdebt float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/带息债务"` + OcfToNetdebt float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/净债务"` + LongdebtToWorkingcapital float64 `gorm:"type:decimal(20,4);comment:长期债务与营运资金比率"` + EbitdaToDebt float64 `gorm:"type:decimal(20,4);comment:息税折旧摊销前利润/负债合计"` + OpToEbt float64 `gorm:"type:decimal(20,4);comment:营业利润/利润总额"` + NopToEbt float64 `gorm:"type:decimal(20,4);comment:非营业利润/利润总额"` + OcfToProfit float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/营业利润"` + CashToLiqdebt float64 `gorm:"type:decimal(20,4);comment:货币资金/流动负债"` + CashToLiqdebtWithinterest float64 `gorm:"type:decimal(20,4);comment:货币资金/带息流动负债"` + OpToLiqdebt float64 `gorm:"type:decimal(20,4);comment:营业利润/流动负债"` + OpToDebt float64 `gorm:"type:decimal(20,4);comment:营业利润/负债合计"` + ProfitToOp float64 `gorm:"type:decimal(20,4);comment:利润总额/营业收入"` + + // 年度化指标 + RoeYearly float64 `gorm:"type:decimal(20,4);comment:年化净资产收益率"` + Roa2Yearly float64 `gorm:"type:decimal(20,4);comment:年化总资产报酬率"` + RoaYearly float64 `gorm:"type:decimal(20,4);comment:年化总资产净利率"` + RoicYearly float64 `gorm:"type:decimal(20,4);comment:年化投入资本回报率"` + RoeAvg float64 `gorm:"type:decimal(20,4);comment:平均净资产收益率(增发条件)"` + + // 单季度增长比率 + QGrYoy float64 `gorm:"type:decimal(20,4);comment:营业总收入同比增长率(%)(单季度)"` + QGrQoq float64 `gorm:"type:decimal(20,4);comment:营业总收入环比增长率(%)(单季度)"` + QSalesYoy float64 `gorm:"type:decimal(20,4);comment:营业收入同比增长率(%)(单季度)"` + QSalesQoq float64 `gorm:"type:decimal(20,4);comment:营业收入环比增长率(%)(单季度)"` + QOpYoy float64 `gorm:"type:decimal(20,4);comment:营业利润同比增长率(%)(单季度)"` + QOpQoq float64 `gorm:"type:decimal(20,4);comment:营业利润环比增长率(%)(单季度)"` + QProfitYoy float64 `gorm:"type:decimal(20,4);comment:净利润同比增长率(%)(单季度)"` + QProfitQoq float64 `gorm:"type:decimal(20,4);comment:净利润环比增长率(%)(单季度)"` + QNetprofitYoy float64 `gorm:"type:decimal(20,4);comment:归属母公司股东的净利润同比增长率(%)(单季度)"` + QNetprofitQoq float64 `gorm:"type:decimal(20,4);comment:归属母公司股东的净利润环比增长率(%)(单季度)"` + + // 单季度比率指标 + QProfitToGr float64 `gorm:"type:decimal(20,4);comment:净利润/营业总收入(单季度)"` + QSaleexpToGr float64 `gorm:"type:decimal(20,4);comment:销售费用/营业总收入 (单季度)"` + QAdminexpToGr float64 `gorm:"type:decimal(20,4);comment:管理费用/营业总收入 (单季度)"` + QFinaexpToGr float64 `gorm:"type:decimal(20,4);comment:财务费用/营业总收入 (单季度)"` + QImpairToGrTtm float64 `gorm:"type:decimal(20,4);comment:资产减值损失/营业总收入(单季度)"` + QGcToGr float64 `gorm:"type:decimal(20,4);comment:营业总成本/营业总收入 (单季度)"` + QOpToGr float64 `gorm:"type:decimal(20,4);comment:营业利润/营业总收入(单季度)"` + QOpincomeToEbt float64 `gorm:"type:decimal(20,4);comment:经营活动净收益/利润总额(单季度)"` + QInvestincomeToEbt float64 `gorm:"type:decimal(20,4);comment:价值变动净收益/利润总额(单季度)"` + QDtprofitToProfit float64 `gorm:"type:decimal(20,4);comment:扣除非经常损益后的净利润/净利润(单季度)"` + QSalescashToOr float64 `gorm:"type:decimal(20,4);comment:销售商品提供劳务收到的现金/营业收入(单季度)"` + QOcfToSales float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/营业收入(单季度)"` + QOcfToOr float64 `gorm:"type:decimal(20,4);comment:经营活动产生的现金流量净额/经营活动净收益(单季度)"` + + // 其他 + UpdateFlag string `gorm:"type:varchar(1);comment:更新标识"` + CreatedAt time.Time + UpdatedAt time.Time + DeletedAt gorm.DeletedAt `gorm:"index"` +} + +// TableName 设置表名 +func (StockFinaIndicator) TableName() string { + return "fina_indicator" +}