mirror of http://gitlab.batiao8.com/yic/film.git
dadi
This commit is contained in:
parent
150b922027
commit
374f0d4200
|
@ -0,0 +1,49 @@
|
|||
package httputil
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Get 请求 link:请求url
|
||||
func HttpGet(link string, params map[string]string, header map[string]string) ([]byte, error) {
|
||||
client := &http.Client{Timeout: 20 * time.Second}
|
||||
//忽略https的证书
|
||||
client.Transport = &http.Transport{
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
}
|
||||
p := url.Values{}
|
||||
u, _ := url.Parse(link)
|
||||
if params != nil {
|
||||
for k, v := range params {
|
||||
p.Set(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(p.Encode())
|
||||
u.RawQuery = p.Encode()
|
||||
req, err := http.NewRequest("GET", u.String(), nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if header != nil {
|
||||
for k, v := range header {
|
||||
req.Header.Add(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("%d:%s", resp.StatusCode, resp.Status)
|
||||
}
|
||||
return io.ReadAll(resp.Body)
|
||||
}
|
16
cmd/film.go
16
cmd/film.go
|
@ -55,9 +55,19 @@ func main() {
|
|||
panic(err)
|
||||
}
|
||||
|
||||
w := &worker.Worker{
|
||||
Token: config.GetConfig().Film.Token,
|
||||
dadiProcessor := &worker.Dadi{}
|
||||
if err := dadiProcessor.Init(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
w.Init()
|
||||
|
||||
orderWorker := &worker.Orders{
|
||||
Token: config.GetConfig().Film.Token,
|
||||
Dadi: dadiProcessor,
|
||||
}
|
||||
|
||||
if err := orderWorker.Init(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
select {}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,10 @@ user = "film"
|
|||
pass = "7VCfJx7H8MymUm"
|
||||
db = "film"
|
||||
|
||||
[weixin]
|
||||
qiye_appid = "ww288920bd3e8c92b2"
|
||||
qiye_secret = "U2kq2Fxe_mwV7t-xYYvZJzmeGqkq2_1PPH-QpVGjWDg"
|
||||
qiye_agent = "1000012"
|
||||
|
||||
[film]
|
||||
token = "cc5f1d4c36f7e9544d641a174b298f94"
|
|
@ -11,5 +11,11 @@ user = "film"
|
|||
pass = "7VCfJx7H8MymUm"
|
||||
db = "film"
|
||||
|
||||
|
||||
[weixin]
|
||||
qiye_appid = "ww1f9a1f9e96186e4c"
|
||||
qiye_secret = "G3ITLIrqVDG42jObBgh9XH4G3dcVRguonASJJ0x2YwY"
|
||||
qiye_agent = "1000005"
|
||||
|
||||
[film]
|
||||
token = "cc5f1d4c36f7e9544d641a174b298f94"
|
|
@ -35,6 +35,13 @@ type Redis struct {
|
|||
Db int `toml:"db"`
|
||||
Password string `toml:"password"`
|
||||
}
|
||||
|
||||
type Weixin struct {
|
||||
QiyeAppid string `toml:"qiye_appid"`
|
||||
Qiyesecret string `toml:"qiye_secret"`
|
||||
QiyeAgent string `toml:"qiye_agent"`
|
||||
}
|
||||
|
||||
type Film struct {
|
||||
Token string `toml:"token"`
|
||||
}
|
||||
|
@ -43,6 +50,7 @@ type Config struct {
|
|||
Server *Server `toml:"server"`
|
||||
Mysql *Mysql `toml:"mysql"`
|
||||
Redis *Redis `toml:"redis"`
|
||||
Weixin *Weixin `toml:"weixin"`
|
||||
Film *Film `toml:"film"`
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
7
go.mod
7
go.mod
|
@ -11,13 +11,18 @@ require (
|
|||
github.com/smbrave/goutil v0.0.0-20230208141215-e3360c3bfd1b
|
||||
github.com/spf13/cast v1.5.0
|
||||
github.com/spf13/viper v1.15.0
|
||||
gitlab.com/jiangyong27/gobase v1.0.23
|
||||
gorm.io/driver/mysql v1.4.7
|
||||
gorm.io/gorm v1.24.6
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/astaxie/beego v1.7.1 // indirect
|
||||
github.com/bradfitz/gomemcache v0.0.0-20160117192205-fb1f79c6b65a // indirect
|
||||
github.com/fatih/structs v1.1.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||
github.com/go-sql-driver/mysql v1.7.0 // indirect
|
||||
github.com/gomodule/redigo v1.8.1 // indirect
|
||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
|
@ -27,10 +32,12 @@ 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
|
||||
github.com/subosito/gotenv v1.4.2 // indirect
|
||||
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
|
||||
golang.org/x/sync v0.1.0 // indirect
|
||||
golang.org/x/sys v0.3.0 // indirect
|
||||
golang.org/x/text v0.5.0 // indirect
|
||||
|
|
|
@ -27,6 +27,9 @@ type Order struct {
|
|||
CinemaName string
|
||||
MovieName string
|
||||
Address string
|
||||
Count int
|
||||
IsSeat int
|
||||
LoverSeat int
|
||||
CreateDate string
|
||||
CreateTime int64
|
||||
UpdateTime int64
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
package worker
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"film/base/httputil"
|
||||
"film/config"
|
||||
"film/model"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/smbrave/goutil"
|
||||
"github.com/spf13/cast"
|
||||
"gitlab.com/jiangyong27/gobase/wxapi"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Dadi struct {
|
||||
citys map[string]*DadiCity
|
||||
qyClient *wxapi.WxQiye
|
||||
}
|
||||
|
||||
func (d *Dadi) Init() error {
|
||||
cityUrl := "https://appapi.dadicinema.com/app-web/v1/web/cinema/cbticket/cbase/cityAndCinemaList"
|
||||
|
||||
params := map[string]string{
|
||||
"channelCode": "SYH-DDZY-DD",
|
||||
"channelName": "大地自营-大地",
|
||||
"channelNo": "SYH-DDZY-DD",
|
||||
"channelUid": "SYH-DDZY-DD",
|
||||
"cinema": "11050621",
|
||||
"cinemaCode": "11050621",
|
||||
"cinemaUid": "118",
|
||||
"d": "iPhone14,3",
|
||||
"i": "00000000-0000-0000-0000-000000000000",
|
||||
"k": "321566:b891effb-5493-4f26-ac54-bfa5581ca8c3",
|
||||
"r": "1",
|
||||
"s": "iOS15.2.1",
|
||||
"t": "1",
|
||||
"tenantId": "321566",
|
||||
"unifiedCinemaId": "118",
|
||||
"unifiedCinemaName": "大地影院(北京十里河铭泽店)",
|
||||
"unifiedCode": "11050621",
|
||||
"v": "8.7.3",
|
||||
}
|
||||
body, err := httputil.HttpGet(cityUrl, params, map[string]string{
|
||||
"User-Agent": "apifox/1.0.0 (https://www.apifox.cn)",
|
||||
})
|
||||
|
||||
result := make(map[string]interface{})
|
||||
if err := json.Unmarshal(body, &result); err != nil {
|
||||
log.Errorf("json.unmarshal [%s] error : %s", string(body), err.Error())
|
||||
return err
|
||||
}
|
||||
if cast.ToInt(result["code"]) != 200 || cast.ToBool(result["success"]) != true {
|
||||
log.Errorf("code[%d] message[%s]", cast.ToInt(result["code"]), cast.ToString(result["msg"]))
|
||||
return err
|
||||
}
|
||||
|
||||
citys := make(map[string]*DadiCity)
|
||||
datas := cast.ToSlice(result["data"])
|
||||
|
||||
for _, d := range datas {
|
||||
data := cast.ToStringMap(d)
|
||||
|
||||
cinemas := make([]*DadiCinema, 0)
|
||||
for _, c := range cast.ToSlice(data["cinemas"]) {
|
||||
cin := cast.ToStringMap(c)
|
||||
cinema := new(DadiCinema)
|
||||
cinema.Name = cast.ToString(cin["name"])
|
||||
cinema.Address = cast.ToString(cin["address"])
|
||||
cinema.Latitude = cast.ToString(cin["latitude"])
|
||||
cinema.Longitude = cast.ToString(cin["longitude"])
|
||||
cinema.CityId = cast.ToInt64(cin["cityId"])
|
||||
cinema.UnifiedCode = cast.ToInt64(cin["unifiedCode"])
|
||||
cinemas = append(cinemas, cinema)
|
||||
}
|
||||
cityInfo := cast.ToStringMap(data["cityInfo"])
|
||||
city := new(DadiCity)
|
||||
city.Name = cast.ToString(cityInfo["chName"])
|
||||
city.ShortName = cast.ToString(cityInfo["shortName"])
|
||||
city.CityId = cast.ToInt64(data["cityId"])
|
||||
city.CityCode = cast.ToInt64(data["cityCode"])
|
||||
|
||||
citys[city.ShortName] = city
|
||||
}
|
||||
|
||||
d.citys = citys
|
||||
|
||||
cfg := config.GetConfig()
|
||||
d.qyClient = wxapi.NewQiye(&wxapi.QiyeConfig{
|
||||
Corpid: cfg.Weixin.QiyeAppid,
|
||||
Secret: cfg.Weixin.Qiyesecret,
|
||||
Sender: cfg.Weixin.QiyeAgent,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Dadi) NewOrder(order *model.Order) {
|
||||
if _, ok := d.citys[order.CityName]; !ok {
|
||||
log.Errorf("city[%s] not exist dadi cinema", order.CityName)
|
||||
return
|
||||
}
|
||||
city := d.citys[order.CityName]
|
||||
for _, cinema := range city.Cinemas {
|
||||
if cinema.Name != order.CinemaName {
|
||||
continue
|
||||
}
|
||||
log.Infof("cinema : %s match order : %s", goutil.EncodeJSON(cinema), goutil.EncodeJSON(order))
|
||||
message := make([]string, 0)
|
||||
message = append(message, "【匹配成功】")
|
||||
message = append(message, "订单信息:%s", goutil.EncodeJSON(order))
|
||||
message = append(message, "影院信息:%s", goutil.EncodeJSON(cinema))
|
||||
if err := d.qyClient.SendText([]string{"jiangyong"}, strings.Join(message, "\n")); err != nil {
|
||||
log.Errorf("send message error : %s", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Dadi) UpdateOrder(order *model.Order) {
|
||||
|
||||
}
|
|
@ -14,11 +14,12 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
type Worker struct {
|
||||
type Orders struct {
|
||||
Token string
|
||||
Dadi *Dadi
|
||||
}
|
||||
|
||||
func (w *Worker) Init() error {
|
||||
func (w *Orders) Init() error {
|
||||
timezone, _ := time.LoadLocation("Asia/Shanghai")
|
||||
cron := gocron.NewScheduler(timezone)
|
||||
|
||||
|
@ -30,7 +31,7 @@ func (w *Worker) Init() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (w *Worker) httpPost(requestUrl string) ([]byte, error) {
|
||||
func (w *Orders) httpPost(requestUrl string) ([]byte, error) {
|
||||
client := &http.Client{Timeout: 20 * time.Second}
|
||||
//忽略https的证书
|
||||
client.Transport = &http.Transport{
|
||||
|
@ -57,7 +58,7 @@ func (w *Worker) httpPost(requestUrl string) ([]byte, error) {
|
|||
return io.ReadAll(resp.Body)
|
||||
}
|
||||
|
||||
func (w *Worker) syncOrder() {
|
||||
func (w *Orders) syncOrder() {
|
||||
orderUrl := "https://hahapiao.cn/api/Synchro/toList"
|
||||
body, err := w.httpPost(orderUrl)
|
||||
if err != nil {
|
||||
|
@ -106,9 +107,13 @@ func (w *Worker) syncOrder() {
|
|||
order.Address = cast.ToString(data["address"])
|
||||
order.Ting = cast.ToString(data["ting"])
|
||||
order.CinemaName = cast.ToString(data["cinemaName"])
|
||||
order.Count = cast.ToInt(data["count"])
|
||||
order.IsSeat = cast.ToInt(data["is_seat"])
|
||||
order.LoverSeat = cast.ToInt(data["loverSeat"])
|
||||
|
||||
if isAdd {
|
||||
model.AddOrder(order)
|
||||
|
||||
} else {
|
||||
model.UpdateOrder(order)
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package worker
|
||||
|
||||
type DadiCinema struct {
|
||||
Name string
|
||||
Address string
|
||||
Latitude string
|
||||
Longitude string
|
||||
CityId int64
|
||||
UnifiedCode int64
|
||||
}
|
||||
|
||||
type DadiCity struct {
|
||||
Name string
|
||||
ShortName string
|
||||
CityCode int64
|
||||
CityId int64
|
||||
|
||||
Cinemas []*DadiCinema
|
||||
}
|
Loading…
Reference in New Issue