mirror of
https://github.com/ArvinLovegood/go-stock.git
synced 2025-07-19 00:00:09 +08:00
feat(fund):添加基金监控和查询功能
- 新增基金数据 API,实现基金信息爬取和数据库操作 - 添加基金监控逻辑,定期更新基金净值信息 - 实现基金列表查询、关注和取消关注功能 - 新增基金相关前端组件,展示基金信息和操作
This commit is contained in:
parent
9a6e210bae
commit
db43da6577
@ -83,6 +83,12 @@ func (FundBasic) TableName() string {
|
||||
|
||||
// CrawlFundBasic 爬取基金基本信息
|
||||
func (f *FundApi) CrawlFundBasic(fundCode string) (*FundBasic, error) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logger.SugaredLogger.Errorf("CrawlFundBasic panic: %v", r)
|
||||
}
|
||||
}()
|
||||
|
||||
crawler := CrawlerApi{
|
||||
crawlerBaseInfo: CrawlerBaseInfo{
|
||||
Name: "天天基金",
|
||||
@ -254,6 +260,12 @@ func (f *FundApi) UnFollowFund(fundCode string) string {
|
||||
}
|
||||
|
||||
func (f *FundApi) AllFund() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logger.SugaredLogger.Errorf("AllFund panic: %v", r)
|
||||
}
|
||||
}()
|
||||
|
||||
response, err := f.client.SetTimeout(time.Duration(f.config.CrawlTimeOut)*time.Second).R().
|
||||
SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36").
|
||||
Get("https://fund.eastmoney.com/allfund.html")
|
||||
@ -272,8 +284,7 @@ func (f *FundApi) AllFund() {
|
||||
name := text[0]
|
||||
str := strutil.SplitAndTrim(name, ")", "(", ")")
|
||||
logger.SugaredLogger.Infof("%d,基金信息 code:%s,name:%s", cnt, str[0], str[1])
|
||||
//f.CrawlFundBasic(str[0])
|
||||
|
||||
//go f.CrawlFundBasic(str[0])
|
||||
fund := &FundBasic{
|
||||
Code: str[0],
|
||||
Name: str[1],
|
||||
@ -282,8 +293,6 @@ func (f *FundApi) AllFund() {
|
||||
db.Dao.Model(fund).Where("code=?", fund.Code).Count(&count)
|
||||
if count == 0 {
|
||||
db.Dao.Create(fund)
|
||||
} else {
|
||||
db.Dao.Model(fund).Where("code=?", fund.Code).Updates(fund)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ function getFundList(value){
|
||||
options.value=[]
|
||||
result.forEach(item=>{
|
||||
options.value.push({
|
||||
label: item.name,
|
||||
label: item.name+" ["+item.code+"]",
|
||||
value: item.code,
|
||||
})
|
||||
})
|
||||
|
37
main.go
37
main.go
@ -75,7 +75,6 @@ func main() {
|
||||
if stocksBinUS != nil && len(stocksBinUS) > 0 {
|
||||
go initStockDataUS()
|
||||
}
|
||||
|
||||
updateBasicInfo()
|
||||
|
||||
// Create an instance of the app structure
|
||||
@ -191,34 +190,34 @@ func main() {
|
||||
}
|
||||
|
||||
func initStockDataUS() {
|
||||
var count int64
|
||||
db.Dao.Model(&models.StockInfoUS{}).Count(&count)
|
||||
if count > 0 {
|
||||
return
|
||||
}
|
||||
var v []models.StockInfoUS
|
||||
log.Printf("init stock data us %d", len(v))
|
||||
err := json.Unmarshal(stocksBinUS, &v)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, item := range v {
|
||||
var count int64
|
||||
db.Dao.Model(&models.StockInfoUS{}).Count(&count)
|
||||
if count > 0 {
|
||||
return
|
||||
}
|
||||
db.Dao.Model(&models.StockInfoUS{}).Create(&item)
|
||||
}
|
||||
log.Printf("init stock data us %d", len(v))
|
||||
}
|
||||
|
||||
func initStockDataHK() {
|
||||
var count int64
|
||||
db.Dao.Model(&models.StockInfoHK{}).Count(&count)
|
||||
if count > 0 {
|
||||
return
|
||||
}
|
||||
var v []models.StockInfoHK
|
||||
err := json.Unmarshal(stocksBinHK, &v)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, item := range v {
|
||||
var count int64
|
||||
db.Dao.Model(&models.StockInfoHK{}).Count(&count)
|
||||
if count > 0 {
|
||||
continue
|
||||
}
|
||||
db.Dao.Model(&models.StockInfoHK{}).Create(&item)
|
||||
}
|
||||
log.Printf("init stock data hk %d", len(v))
|
||||
@ -234,11 +233,6 @@ func updateBasicInfo() {
|
||||
}
|
||||
|
||||
func initStockData() {
|
||||
var count int64
|
||||
db.Dao.Model(&data.StockBasic{}).Count(&count)
|
||||
if count > 0 {
|
||||
return
|
||||
}
|
||||
logger.NewDefaultLogger().Info("init stock data")
|
||||
res := &data.TushareStockBasicResponse{}
|
||||
err := json.Unmarshal(stocksBin, res)
|
||||
@ -265,7 +259,14 @@ func initStockData() {
|
||||
stock.Cnspell = convertor.ToString(item[14])
|
||||
stock.Fullname = convertor.ToString(item[20])
|
||||
stock.Ename = convertor.ToString(item[21])
|
||||
db.Dao.Model(&data.StockBasic{}).FirstOrCreate(stock, &data.StockBasic{TsCode: stock.TsCode}).Updates(stock)
|
||||
|
||||
var count int64
|
||||
db.Dao.Model(&data.StockBasic{}).Where("ts_code = ?", stock.TsCode).Count(&count)
|
||||
if count > 0 {
|
||||
continue
|
||||
} else {
|
||||
db.Dao.Create(stock)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user