This commit is contained in:
yanweidong
2026-01-24 23:44:25 +08:00
parent d636bf502b
commit 677ad2c2ef
4 changed files with 823 additions and 241 deletions

View File

@@ -42,8 +42,8 @@ func main() {
// csv文件写入
func WriterCSV(fileName string, datas [][]string) {
//OpenFile读取文件不存在时则创建,使用追加模式
File, err := os.OpenFile(fileName, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
//OpenFile读取文件不存在时则创建
File, err := os.OpenFile(fileName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
log.Println("文件打开失败!")
}

View File

@@ -1,14 +1,16 @@
package main
import (
"encoding/json"
"fmt"
"time"
"git.apinb.com/dataset/stock/internal/logic/a"
)
func main() {
t, err := time.Parse("20060102", "20230101")
if err != nil {
fmt.Println("error", err)
}
fmt.Println(t)
a.NewApiClient()
reply, err := a.SetFinaIndicator("000012.SZ", "20230101", "20260124")
fmt.Println("Err", err)
jsonBytes, _ := json.Marshal(reply.Data.Items)
fmt.Println("Reply", string(jsonBytes))
}

View File

@@ -8,51 +8,102 @@ import (
"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"
)
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)
}
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,
"start_date": start,
"end_date": end,
}
if start == end {
continue
"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", ",")
reply, err := TushareClient.FinaIndicator(params, fields)
if err != nil {
log.Println("ERROR", "GetFinaIndicator", err)
return
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
}
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]
for i := 0; i < len(in.Data.Items[0]); i++ {
itemData[in.Data.Fields[i]] = in.Data.Items[0][i]
}
t := utils.String2Int(itemData["ann_date"].(string))
if t == 0 {
if itemData == nil {
return false, nil
}
return true, itemData
}
func GetFinaIndicator() {
for _, code := range GetStockCodes() {
for _, period := range PeriodArgs {
// 请求API
reply, err := SetFinaIndicator(code, period)
if err != nil {
log.Println("ERROR", "GetFinaIndicator", err)
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,
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: itemData["ann_date"].(string),
EndDate: itemData["end_date"].(string),
// 每股指标
@@ -243,14 +294,542 @@ func GetFinaIndicator() {
// 其他
UpdateFlag: itemData["update_flag"].(string),
})
}
}
if len(records) > 0 {
impl.DBService.CreateInBatches(records, 100)
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
}
time.Sleep(200 * time.Microsecond)
upd := make(map[string]any)
// Compare each field and only add to update if different
// Date fields
if old.AnnDate != item["ann_date"].(string) {
upd["ann_date"] = item["ann_date"].(string)
}
if old.EndDate != item["end_date"].(string) {
upd["end_date"] = item["end_date"].(string)
}
// 每股指标
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)
}
}

View File

@@ -9,7 +9,8 @@ import (
type StockFinaIndicator struct {
gorm.Model
TsCode string `gorm:"type:varchar(20);not null;index:fi_ts_code;uniqueIndex:un_fi_code_date;comment:TS代码"`
AnnDate int `gorm:"index:idx_ann_date;uniqueIndex:un_fi_code_date;comment:公告日期"`
Period int `gorm:"index:idx_period;uniqueIndex:un_fi_code_date;comment:报告期数"`
AnnDate string `gorm:"index:idx_ann_date;comment:公告日期"`
EndDate string `gorm:"index:idx_end_date;comment:报告期"`
// 每股指标