create project

This commit is contained in:
2021-12-03 17:11:18 +08:00
commit 627c6582e3
15 changed files with 1713 additions and 0 deletions

139
cmd/stock/main.go Normal file
View 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)
}