From fc42f4831955bd873629de88d09186deada3b220 Mon Sep 17 00:00:00 2001 From: jiangyong27 Date: Wed, 8 May 2024 18:58:51 +0800 Subject: [PATCH] ddf --- cmd/film.go | 8 ++-- dao/ddf.go | 91 +++++++++++++++++++++++++++++++++++++++ go.mod | 2 +- model/ddf.go | 11 +++++ worker/nowcar/ddf.go | 94 +++++++++++++++++++++++++++++++++++++++++ worker/nowcar/nowcar.go | 16 ++++--- worker/worker.go | 7 ++- 7 files changed, 218 insertions(+), 11 deletions(-) create mode 100644 dao/ddf.go create mode 100644 model/ddf.go create mode 100644 worker/nowcar/ddf.go diff --git a/cmd/film.go b/cmd/film.go index 09f5f29..b60086f 100644 --- a/cmd/film.go +++ b/cmd/film.go @@ -44,7 +44,7 @@ func initLog() { log.SetLevel(log.Level(cfg.Server.LogLevel)) } -func main() { +func main2() { config.LoadServerConfig() config.LoadDadiConfig() config.LoadHahaConfig() @@ -56,12 +56,14 @@ func main() { work.Run() } -func main2() { +func main() { config.LoadServerConfig() config.LoadDadiConfig() config.LoadHahaConfig() initLog() global.InitDB() - nowcar.Sync() + + var ddf nowcar.Ddf + ddf.Sync() } diff --git a/dao/ddf.go b/dao/ddf.go new file mode 100644 index 0000000..86249ad --- /dev/null +++ b/dao/ddf.go @@ -0,0 +1,91 @@ +package dao + +import ( + "film/global" + "film/model" + "gorm.io/gorm" +) + +type DdfDao struct { +} + +func NewDdfDao() *DdfDao { + return &DdfDao{} +} + +func (d *DdfDao) TableName() string { + return "ddf" +} + +func (d *DdfDao) Create(o *model.Ddf) (int64, error) { + res := global.GetDB().Table(d.TableName()).Create(o) + return o.Id, res.Error +} +func (d *DdfDao) Update(o *model.Ddf) error { + tx := global.GetDB().Table(d.TableName()) + res := tx.Save(o) + return res.Error +} + +func (d *DdfDao) GetStart(shopName, workstation string, startTime int64) (*model.Ddf, error) { + var u model.Ddf + tx := global.GetDB().Table(d.TableName()) + + tx = tx.Where("shop_name = ?", shopName) + tx = tx.Where("workstation = ?", workstation) + tx = tx.Where("start_time = ?", startTime) + + tx = tx.Order("start_time DESC") + res := tx.First(&u) + if res.Error == gorm.ErrRecordNotFound { + return nil, nil + } + + if res.Error != nil { + return nil, res.Error + } + return &u, nil +} + +func (d *DdfDao) GetBusy(shopName, workstation string) (*model.Ddf, error) { + var u model.Ddf + tx := global.GetDB().Table(d.TableName()) + + tx = tx.Where("shop_name = ?", shopName) + tx = tx.Where("workstation = ?", workstation) + tx = tx.Where("start_time != 0") + tx = tx.Where("end_time = 0") + + tx = tx.Order("start_time DESC") + res := tx.First(&u) + if res.Error == gorm.ErrRecordNotFound { + return nil, nil + } + + if res.Error != nil { + return nil, res.Error + } + return &u, nil +} + +func (d *DdfDao) QueryToday(shopName, workstation, day string) ([]*model.Ddf, error) { + var u []*model.Ddf + tx := global.GetDB().Table(d.TableName()) + + tx = tx.Where("shop_name = ?", shopName) + tx = tx.Where("workstation = ?", workstation) + tx = tx.Where("day = ?", day) + tx = tx.Where("start_time != 0") + tx = tx.Where("end_time != 0") + + tx = tx.Order("start_time DESC") + res := tx.Find(&u) + if res.Error == gorm.ErrRecordNotFound { + return nil, nil + } + + if res.Error != nil { + return nil, res.Error + } + return u, nil +} diff --git a/go.mod b/go.mod index c12b1ed..d516b21 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible github.com/mitchellh/mapstructure v1.5.0 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 + github.com/silenceper/wechat v1.2.6 github.com/sirupsen/logrus v1.9.3 github.com/smbrave/goutil v0.0.0-20240307100306-1a2edd79979d github.com/spf13/cast v1.5.0 @@ -34,7 +35,6 @@ require ( github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect - github.com/silenceper/wechat v1.2.6 // indirect github.com/spf13/afero v1.9.3 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect diff --git a/model/ddf.go b/model/ddf.go new file mode 100644 index 0000000..2d338c0 --- /dev/null +++ b/model/ddf.go @@ -0,0 +1,11 @@ +package model + +type Ddf struct { + Id int64 + Day string + ShopName string + Workstation string + StartTime int64 + EndTime int64 + Amount int64 +} diff --git a/worker/nowcar/ddf.go b/worker/nowcar/ddf.go new file mode 100644 index 0000000..fa23fbc --- /dev/null +++ b/worker/nowcar/ddf.go @@ -0,0 +1,94 @@ +package nowcar + +import ( + "encoding/json" + "film/dao" + "film/model" + "fmt" + "github.com/silenceper/wechat/util" + log "github.com/sirupsen/logrus" + "github.com/smbrave/goutil" + "github.com/spf13/cast" + "strings" + "time" +) + +type Ddf struct { +} + +func (d *Ddf) Sync() { + shopIds := []int{826, 1693, 38, 1900, 372, 1613, 1372, 56, 1701, 45} + + for _, shopId := range shopIds { + reqUrl := fmt.Sprintf("https://v9.ddfkj.com/mpserver/getwangdiandata.php?wdid=%d", shopId) + body, err := util.HTTPGet(reqUrl) + if err != nil { + log.Errorf("get http[%s] error :%s", reqUrl, err.Error()) + continue + } + mp := make(map[string]interface{}) + if err := json.Unmarshal(body, &mp); err != nil { + log.Errorf("json[%s] error:%s", string(body), err.Error()) + continue + } + d.getDetail(shopId) + } +} + +func (d *Ddf) getDetail(shopId int) { + reqUrl := fmt.Sprintf("https://v9.ddfkj.com/mpserver/getmcstate.php?wdid=%d", shopId) + body, err := util.HTTPGet(reqUrl) + if err != nil { + log.Errorf("get http[%s] error :%s", reqUrl, err.Error()) + return + } + res := make([]interface{}, 0) + if err := json.Unmarshal(body, &res); err != nil { + log.Errorf("json[%s] error:%s", string(body), err.Error()) + return + } + + for _, r := range res { + obj := cast.ToStringMap(r) + status := cast.ToString(obj["zhuangtai"]) + shopName := cast.ToString(obj["wangdian"]) + workstation := cast.ToString(obj["address"]) + if status == "维护中" { + continue + } else if status == "空闲" { + m1, _ := dao.NewDdfDao().GetBusy(shopName, workstation) + if m1 == nil { + continue + } + m1.EndTime = time.Now().Unix() + dao.NewDdfDao().Update(m1) + + //完成提示 + todays, _ := dao.NewDdfDao().QueryToday(shopName, workstation, time.Now().Format("2006-01-02")) + totalAmount := int64(0) + for _, day := range todays { + totalAmount += day.Amount + } + //订单完成提示 + log.Errorf("[DDF] shopName=%s,workstation=%s,time=[%s],cost_minute=%d,money=%s,total=[%s/%d]", + m1.ShopName, m1.Workstation, goutil.TimeToDateTime(m1.StartTime), + (m1.EndTime-m1.StartTime)/60, goutil.FormatMoney(m1.Amount), + goutil.FormatMoney(totalAmount), len(todays)) + + } else if status == "忙碌中" { + yiyongtime := cast.ToString(obj["yiyongtime"]) + useMinute := cast.ToFloat64(strings.TrimSuffix(yiyongtime, "分钟")) + m1, _ := dao.NewDdfDao().GetBusy(shopName, workstation) + if m1 != nil { + continue + } + m1 = new(model.Ddf) + m1.Day = time.Now().Format("2006-01-02") + m1.ShopName = shopName + m1.Workstation = workstation + m1.Amount = 600 + m1.StartTime = time.Now().Unix() - int64(float64(60)*useMinute) + dao.NewDdfDao().Create(m1) + } + } +} diff --git a/worker/nowcar/nowcar.go b/worker/nowcar/nowcar.go index 6a20b6c..d9988f1 100644 --- a/worker/nowcar/nowcar.go +++ b/worker/nowcar/nowcar.go @@ -14,9 +14,12 @@ import ( "time" ) -func Sync() { +type Nowcar struct { +} - devIds, err := getDevId() +func (n *Nowcar) Sync() { + + devIds, err := n.getDevId() if err != nil { return } @@ -24,11 +27,11 @@ func Sync() { if devId == "" { continue } - getInfo(devId) + n.getInfo(devId) } } -func getInfo(devId string) ([]string, error) { +func (n *Nowcar) getInfo(devId string) ([]string, error) { reqUrl := "https://wx.wdfcar.com/NowZiZhuXiCheApp/userSiteOrder/getInfo" params := make(url.Values) @@ -102,7 +105,7 @@ func getInfo(devId string) ([]string, error) { totalAmount += day.Amount } //订单完成提示 - log.Errorf("shopName=%s,workstation=%s,time=[%s],cost_minute=%d,money=%s,total=[%s/%d]", + log.Errorf("[NowCar] shopName=%s,workstation=%s,time=[%s],cost_minute=%d,money=%s,total=[%s/%d]", m2.ShopName, m2.Workstation, goutil.TimeToDateTime(m2.StartTime), (m2.EndTime-m2.StartTime)/60, goutil.FormatMoney(m2.Amount), goutil.FormatMoney(totalAmount), len(todays)) @@ -112,7 +115,8 @@ func getInfo(devId string) ([]string, error) { return nil, nil } -func getDevId() ([]string, error) { + +func (n *Nowcar) getDevId() ([]string, error) { reqUrl := "https://wx.wdfcar.com/NowZiZhuXiCheApp/userSiteOrder/nearSite" params := make(url.Values) diff --git a/worker/worker.go b/worker/worker.go index 879de3d..8845378 100644 --- a/worker/worker.go +++ b/worker/worker.go @@ -49,8 +49,13 @@ func (w *Worker) Run() { hahaSyncer.Sync() }) + var nc nowcar.Nowcar + var ddf nowcar.Ddf cron.Every(10).Seconds().Do(func() { - nowcar.Sync() + nc.Sync() + }) + cron.Every(10).Seconds().Do(func() { + ddf.Sync() }) cron.StartAsync()