create project
This commit is contained in:
139
cmd/stock/main.go
Normal file
139
cmd/stock/main.go
Normal file
@@ -0,0 +1,139 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/jageros/hawox/contextx"
|
||||
"github.com/jageros/hawox/logx"
|
||||
"github.com/jageros/hawox/sdk/tianapi"
|
||||
"github.com/jageros/hawox/timer"
|
||||
"stock/cfg"
|
||||
"stock/fund"
|
||||
"stock/msg"
|
||||
"stock/stock"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 命令行参数以及配置文件初始化
|
||||
err := cfg.Init()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
logx.Init(logx.InfoLevel, logx.SetCaller()) //日志初始化
|
||||
msg.Init() // 企业微信或者钉钉群通知初始化,即根据配置文件中的配置设置钉钉机器人的密钥,URL和企业微信的URL
|
||||
tianapi.SetKey(cfg.TianApiKey) // 天行数据API初始化
|
||||
|
||||
ctx, cancel := contextx.Default()
|
||||
defer cancel()
|
||||
|
||||
timer.Initialize(ctx) // 定时器初始化
|
||||
|
||||
timer.RunEveryDay(9, 25, 0, func() {
|
||||
if !stock.IsSellDay(time.Now()) {
|
||||
logx.Info("今天不是交易日!")
|
||||
return
|
||||
}
|
||||
err := msg.Send("还有5分钟到达赌场!!!")
|
||||
if err != nil {
|
||||
logx.Errorf("dingtalk.SendMsg(还有5分钟到达赌场!!!) err: %v", err)
|
||||
} else {
|
||||
logx.Info("开市提醒!")
|
||||
}
|
||||
})
|
||||
|
||||
timer.RunEveryDay(14, 50, 0, func() {
|
||||
if !stock.IsSellDay(time.Now()) {
|
||||
logx.Info("今天不是交易日!")
|
||||
return
|
||||
}
|
||||
err := msg.Send("还有10分钟收市!!!")
|
||||
if err != nil {
|
||||
logx.Errorf("dingtalk.SendMsg(还有10分钟收市!!!) err: %v", err)
|
||||
} else {
|
||||
logx.Info("收市提醒!")
|
||||
}
|
||||
})
|
||||
|
||||
timer.RunEveryDay(14, 45, 0, func() {
|
||||
if !stock.IsSellDay(time.Now()) {
|
||||
logx.Info("今天不是交易日!")
|
||||
return
|
||||
}
|
||||
text := fund.FundsMsg(cfg.FundCodes...)
|
||||
if text == "" {
|
||||
logx.Errorf("收集基金数据为空!")
|
||||
return
|
||||
}
|
||||
err := msg.Send(text)
|
||||
if err != nil {
|
||||
logx.Errorf("dingtalk.SendMsg(基金信息) err: %v", err)
|
||||
} else {
|
||||
logx.Info("基金估值提醒,以便定投!")
|
||||
}
|
||||
})
|
||||
|
||||
ctx.Go(func(ctx contextx.Context) error {
|
||||
ss, err := stock.NewStocks(cfg.StockCodes...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var count int
|
||||
var opened, closed bool
|
||||
tk := time.NewTicker(cfg.UpdateDuration)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil
|
||||
case <-tk.C:
|
||||
if !stock.IsOnSell() {
|
||||
if !closed {
|
||||
if stock.HasClose(time.Now()) {
|
||||
logx.Info("--- 已闭市 ---")
|
||||
ss.Clear()
|
||||
} else {
|
||||
logx.Info("--- 未开市 ---")
|
||||
}
|
||||
closed = true
|
||||
opened = false
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
if !opened {
|
||||
closed = false
|
||||
opened = true
|
||||
logx.Infof("--- 交易中 ---")
|
||||
}
|
||||
|
||||
err = ss.Update()
|
||||
if err != nil {
|
||||
count++
|
||||
logx.Errorf("Update ErrCount=%d err=%v", count, err)
|
||||
if count > 10 {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
text := ss.Msg()
|
||||
if text == "" {
|
||||
logx.Info("已更新数据,未超过阈值,无警告!")
|
||||
continue
|
||||
}
|
||||
err = msg.Send(text)
|
||||
if err != nil {
|
||||
count++
|
||||
logx.Errorf("SendMsg ErrCount=%d err=%v", count, err)
|
||||
if count > 10 {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
err = ctx.Wait() // 等待停止信号
|
||||
logx.Infof("Application stop with: %v", err)
|
||||
}
|
||||
Reference in New Issue
Block a user