package models import ( "fmt" "time" "git.apinb.com/bsm-sdk/core/database" "git.apinb.com/bsm-sdk/core/utils" "git.apinb.com/quant/gostock/internal/impl" "gorm.io/gorm" ) // StartModel 策略模型 type StratModel struct { gorm.Model StratKey string Ymd int Code string UpDateDay int //上市时间,天数 IndustryScore int // 行业分组 StScore int GtAmount int // 每日交易额大于设定值 GtPrice int // 最近20日交易日价格大于设定值 GtRoe int // ROE 是否大于设定值 ScoreRsi int // 值 ValRoe float64 ValRsiOversold int ValRsiPrve float64 ValRsiLast float64 Desc []StratDesc `gorm:"foreignKey:StratModelID"` //AI AiSummary string AiSummary2025 string AiSummaryBase string AiSummaryTech string AiScrore int AiSupportLevel float64 AiResisLevel float64 AiAction string AiRisk string } func init() { database.AppendMigrate(&StratModel{}) } // TableName 设置表名 func (StratModel) TableName() string { return "strat_model" } func NewStratModel(key, code string) *StratModel { obj := StratModel{ StratKey: key, Ymd: GetYmd(), Code: code, } return &obj } func (s *StratModel) AddDesc(d string) { hash := utils.Md5(fmt.Sprintf("%s-%d-%s:%s", s.StratKey, s.Ymd, s.Code, d)) var cnt int64 impl.DBService.Model(&StratDesc{}).Where("hash=?", hash).Count(&cnt) if cnt > 0 { return } s.Desc = append(s.Desc, StratDesc{ Hash: hash, Desc: d, }) } func (s *StratModel) Save() error { var cnt int64 impl.DBService.Model(&StratModel{}).Where("strat_key=? and ymd=? and code=?", s.StratKey, s.Ymd, s.Code).Count(&cnt) if cnt == 0 { // create record. return impl.DBService.Create(s).Error } else { // update record. return impl.DBService.Model(&StratModel{}).Where("strat_key=? and ymd=? and code=?", s.StratKey, s.Ymd, s.Code).Updates(s).Error } return nil } func GetYmd() int { ymd := time.Now().Format("20060102") return utils.String2Int(ymd) }