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) { }