feat stock basic
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
package cron
|
package cron
|
||||||
|
|
||||||
func Boot(){
|
import "git.apinb.com/dataset/stock/internal/logic/a"
|
||||||
|
|
||||||
|
func Boot() {
|
||||||
|
a.NewApiClient()
|
||||||
|
a.CheckStockBasic()
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,120 @@
|
|||||||
package a
|
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 (
|
var (
|
||||||
|
TushareToken = "432de9ba12b6711948450273ed6e478dbac9e3e712323bbf823ada11"
|
||||||
TushareClient *tushare.TuShare
|
TushareClient *tushare.TuShare
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewApiClient() {
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
34
internal/models/stock_basic.go
Normal file
34
internal/models/stock_basic.go
Normal file
@@ -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"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user