From 845aef2fe822a3aee58a17a4af179637297dd329 Mon Sep 17 00:00:00 2001 From: yanweidong Date: Tue, 13 Jan 2026 15:30:55 +0800 Subject: [PATCH] feat stock basic --- internal/cron/boot.go | 7 +- internal/logic/a/new.go | 113 ++++++++++++++++++++++++++++++++- internal/models/stock_basic.go | 34 ++++++++++ 3 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 internal/models/stock_basic.go diff --git a/internal/cron/boot.go b/internal/cron/boot.go index d5f1dbe..79cb0a5 100644 --- a/internal/cron/boot.go +++ b/internal/cron/boot.go @@ -1,5 +1,8 @@ package cron -func Boot(){ +import "git.apinb.com/dataset/stock/internal/logic/a" -} \ No newline at end of file +func Boot() { + a.NewApiClient() + a.CheckStockBasic() +} diff --git a/internal/logic/a/new.go b/internal/logic/a/new.go index 8a4a9ac..fef3706 100644 --- a/internal/logic/a/new.go +++ b/internal/logic/a/new.go @@ -1,11 +1,120 @@ package a -import tushare "github.com/ShawnRong/tushare-go" +import ( + "errors" + "log" + "strings" + + "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" + "gorm.io/gorm" +) var ( + TushareToken = "432de9ba12b6711948450273ed6e478dbac9e3e712323bbf823ada11" TushareClient *tushare.TuShare ) func NewApiClient() { - TushareClient = tushare.New("你的token") + TushareClient = tushare.New(TushareToken) +} + +func CheckStockBasic() { + // 参数 + params := map[string]string{ + "list_status": "L", // 上市状态 L上市 D退市 P暂停上市,默认是L + } + + // 字段 + fields := strings.Split("ts_code,symbol,name,area,industry,fullname,enname,cnspell,market,exchange,list_date,is_hs,act_name,act_ent_type", ",") + + // 根据api 请求对应的接口 + reply, _ := TushareClient.StockBasic(params, fields) + if reply.Code != 0 { + log.Println("ERROR", "CheckStockBasic", reply.Code, reply.Msg) + return + } + + for _, item := range reply.Data.Items { + var record models.StockBasic + data := Anys2Strings(item) + + err := impl.DBService.Where("ts_code=?", data[0]).First(&record).Error + if errors.Is(err, gorm.ErrRecordNotFound) { + // create + record = models.StockBasic{ + TsCode: data[0], + Symbol: data[1], + Name: data[2], + Area: data[3], + Industry: data[4], + FullName: data[5], + EnName: data[6], + CnSpell: data[7], + Market: data[8], + Exchange: data[9], + ListDate: data[10], + IsHS: data[11], + ActName: data[12], + ActEntType: data[13], + } + impl.DBService.Create(&record) + } else if err == nil { + // check updated. + upd := make(map[string]any) + if record.Symbol != data[1] { + upd["symbol"] = data[1] + } + if record.Name != data[2] { + upd["name"] = data[2] + } + if record.Area != data[3] { + upd["area"] = data[3] + } + if record.Industry != data[4] { + upd["industry"] = data[4] + } + if record.FullName != data[5] { + upd["full_name"] = data[5] + } + if record.EnName != data[6] { + upd["en_name"] = data[6] + } + if record.CnSpell != data[7] { + upd["cn_spell"] = data[7] + } + if record.Market != data[8] { + upd["market"] = data[8] + } + if record.Exchange != data[9] { + upd["exchange"] = data[9] + } + if record.ListDate != data[10] { + upd["list_date"] = data[10] + } + if record.IsHS != data[11] { + upd["is_hs"] = data[11] + } + if record.ActName != data[12] { + upd["act_name"] = data[12] + } + if record.ActEntType != data[13] { + upd["act_ent_type"] = data[13] + } + if len(upd) > 0 { + impl.DBService.Model(record).Updates(upd) + } + } + + } +} + +func Anys2Strings(any []any) []string { + var ret []string + for _, item := range any { + ret = append(ret, utils.AnyToString(item)) + } + return ret } diff --git a/internal/models/stock_basic.go b/internal/models/stock_basic.go new file mode 100644 index 0000000..0382efb --- /dev/null +++ b/internal/models/stock_basic.go @@ -0,0 +1,34 @@ +package models + +import ( + "git.apinb.com/bsm-sdk/core/database" + "gorm.io/gorm" +) + +// StockBasic 股票基本信息表 +type StockBasic struct { + gorm.Model + TsCode string `gorm:"type:varchar(50);not null;index;comment:TS代码"` + Symbol string `gorm:"type:varchar(50);not null;comment:股票代码"` + Name string `gorm:"type:varchar(50);not null;comment:股票名称"` + Area string `gorm:"type:varchar(50);not null;default:'';comment:地域"` + Industry string `gorm:"type:varchar(50);not null;default:'';comment:所属行业"` + FullName string `gorm:"type:varchar(500);comment:股票全称"` + EnName string `gorm:"type:varchar(200);comment:英文全称"` + CnSpell string `gorm:"type:varchar(50);not null;default:'';comment:拼音缩写"` + Market string `gorm:"type:varchar(50);not null;comment:市场类型(主板/创业板/科创板/CDR)"` + Exchange string `gorm:"type:varchar(50);comment:交易所代码"` + ListDate string `gorm:"type:varchar(50);not null;comment:上市日期"` + IsHS string `gorm:"type:varchar(2);default:'N';comment:是否沪深港通标的,N否 H沪股通 S深股通"` + ActName string `gorm:"type:varchar(500);not null;default:'';comment:实控人名称"` + ActEntType string `gorm:"type:varchar(50);not null;default:'';comment:实控人企业性质"` +} + +func init() { + database.AppendMigrate(&StockBasic{}) +} + +// TableName 设置表名 +func (StockBasic) TableName() string { + return "stock_basic" +}