package push import ( "applet/app/cfg" "applet/app/comm/db" "applet/app/comm/db/model" "applet/app/comm/md" "applet/app/comm/utils" "applet/app/comm/utils/logx" "encoding/json" "errors" "fmt" "strings" "time" "xorm.io/xorm" "github.com/tidwall/gjson" ) func getChangeContent(args md.PushParams, Content string) string { Content = strings.Replace(Content, "[APP名称]", args.AppName, -1) Content = strings.Replace(Content, "[会员昵称]", args.Nickname, -1) Content = strings.Replace(Content, "[付款金额]", args.Payment, -1) Content = strings.Replace(Content, "[下单人昵称]", args.OrderNickname, -1) Content = strings.Replace(Content, "[订单号]", args.OrderNo, -1) Content = strings.Replace(Content, "[下单时间]", args.OrderTime, -1) Content = strings.Replace(Content, "[预估佣金]", args.Fcommission, -1) Content = strings.Replace(Content, "[注册人昵称]", args.RegNickname, -1) Content = strings.Replace(Content, "[注册人手机号]", args.RegPhone, -1) Content = strings.Replace(Content, "[升级等级名称]", args.LvName, -1) Content = strings.Replace(Content, "[提现金额]", args.WithdrawMoney, -1) Content = strings.Replace(Content, "[原因]", args.Reason, -1) Content = strings.Replace(Content, "[金额]", args.Money, -1) Content = strings.Replace(Content, "[补贴金额]", args.Money, -1) Content = strings.Replace(Content, "[时间]", args.Times, -1) return Content } // 公共处理推送数据 func CommAddPush(eg *xorm.Engine, args md.PushParams) { // 后台mob推送 pushArgs := make(map[string]string) if args.DomainWapBase == "" { args.DomainWapBase = "http://h5." + args.MasterId + ".izhyin.com" if cfg.Prd { args.DomainWapBase = "http://" + args.MasterId + ".izhim.net" } } if args.PushType != "" { temp, err := db.SysPushTemplateByType(eg, args.PushType) if err != nil { //e.OutErr(c, e.ERR_DB_ORM, err) return } if temp != nil { //处理有模板的数据 if temp.IsAppPush != 1 { return } args.Title = temp.Title args.Content = temp.Content args.Skip = temp.Skip //替换链接的一些参数 if strings.Contains(args.Skip, "[replace_APP_URL]") { args.Skip = strings.Replace(args.Skip, "[replace_APP_URL]", args.DomainWapBase, -1) } if strings.Contains(args.Skip, "[replace_masterId]") { args.Skip = strings.Replace(args.Skip, "[replace_masterId]", args.MasterId, -1) } if strings.Contains(args.Skip, "[replace_uid]") { args.Skip = strings.Replace(args.Skip, "[replace_uid]", utils.IntToStr(args.Uid), -1) } if strings.Contains(args.Skip, "skipIdentifier") { args.Skip = strings.Replace(args.Skip, "skipIdentifier", "skip_identifier", -1) } if strings.Contains(args.Skip, "requiredLogin") { args.Skip = strings.Replace(args.Skip, "requiredLogin", "required_login", -1) } if strings.Contains(args.Skip, "requiredTaobaoAuth") { args.Skip = strings.Replace(args.Skip, "requiredTaobaoAuth", "required_taobao_auth", -1) } if strings.Contains(args.Skip, "activityId") { args.Skip = strings.Replace(args.Skip, "activityId", "activity_id", -1) } if strings.Contains(args.Skip, "sourceType") { args.Skip = strings.Replace(args.Skip, "sourceType", "source_type", -1) } if strings.Contains(args.Skip, "brandId") { args.Skip = strings.Replace(args.Skip, "brandId", "brand_id", -1) } args.Content = getChangeContent(args, args.Content) args.Title = getChangeContent(args, args.Title) } } thirdAppPushSet := db.SysCfgFindWithDb(eg, args.MasterId, "third_app_push_set") pushPlatform := gjson.Get(thirdAppPushSet["third_app_push_set"], "pushPlatform").String() if pushPlatform == "jg" { //极光 JgPush(eg, args) return } pushArgs["push_title"] = args.Title pushArgs["push_content"] = args.Content pushArgs["push_user"] = fmt.Sprintf("%s_%d", args.MasterId, args.Uid) pushArgs["push_receive_user_id"] = utils.IntToStr(args.Uid) pushArgs["push_type"] = args.PushType pushArgs["masterId"] = args.MasterId pushArgs["push_skip"] = args.Skip if len(args.AllUser) > 0 { pushArgs["all_user"] = utils.SerializeStr(args.AllUser) pushArgs["all_user_second"] = utils.SerializeStr(args.AllUserSecond) } pushArgs["task_time"] = "" if args.TaskTime != "" { pushArgs["task_time"] = utils.SerializeStr(args.TaskTime) } if err := AdminMobPush(eg, pushArgs); err != nil { //e.OutErr(c, e.ERR_ADMIN_PUSH, err) return } return } // AdminMobPush mob is 推送 t 有下面几种类型模板类型 | 推送类型;public;:普通推送;activity:活动通知;order_self:新订单提醒(导购自购新订单),order_team:新订单提醒(团队新订单),order_share:新订单提醒(导购分享新订单),member_register:团队成员注册成功,level_upgrade:团队成员等级升级成功,withdraw_fail:提现失败提醒,withdraw_success:提现成功提醒,comission_settle_success:佣金结算提醒(平台结算) func AdminMobPush(eg *xorm.Engine, pushArgs map[string]string) error { var ( host string port string ) // 开始准备推送 mdb, err := db.GetDatabaseByMasterID(db.Db, pushArgs["masterId"]) fmt.Println("============================") fmt.Println(pushArgs) fmt.Println(mdb) if err != nil { return err } if mdb.DbHost == "" { mdb.DbHost = cfg.DB.Host } //fmt.Println(mdb.DbHost) dbc := strings.Split(mdb.DbHost, ":") if len(dbc) != 2 && mdb.DbHost != "" { return errors.New("model mapping db_host is formt error") } host = dbc[0] port = dbc[1] args := struct { Content string `json:"content"` Db struct { DbHost string `json:"db_host"` DbName string `json:"db_name"` DbPassword string `json:"db_password"` DbPort string `json:"db_port"` DbUsername string `json:"db_username"` } `json:"db"` Plats int64 `json:"plats"` Skip string `json:"skip"` Title string `json:"title"` User string `json:"user"` AllUser string `json:"all_user"` TaskTime string `json:"task_time"` }{ Content: pushArgs["push_content"], Db: struct { DbHost string "json:\"db_host\"" DbName string "json:\"db_name\"" DbPassword string "json:\"db_password\"" DbPort string "json:\"db_port\"" DbUsername string "json:\"db_username\"" }{ DbHost: host, DbPort: port, DbName: mdb.DbName, DbUsername: mdb.DbUsername, DbPassword: mdb.DbPassword, }, Plats: 1, Skip: pushArgs["push_skip"], Title: pushArgs["push_title"], User: pushArgs["push_user"], AllUser: pushArgs["all_user"], TaskTime: pushArgs["task_time"], } // 插入推送记录 userSecond := "[\"" + pushArgs["push_receive_user_id"] + "\"]" if pushArgs["all_user_second"] != "" { userSecond = pushArgs["all_user_second"] } log := &model.SysPushApp{ Title: pushArgs["push_title"], Content: pushArgs["push_content"], Provider: "mob", Type: pushArgs["push_type"], State: 1, SendAt: utils.StrToInt(pushArgs["task_time"]), DeviceProvider: 1, Target: 2, TargetCondition: fmt.Sprintf(`{"type":"user","val":%s}`, userSecond), Skip: pushArgs["push_skip"], CreateAt: time.Now(), UpdateAt: time.Now(), } if _, err := db.InertSysPushAppOne(eg, log); err != nil { // e.OutErr(c, e.ERR_DB_ORM, err) // return logx.Warn(err) } var url string var domain = "http://cs.fnuo123.com.cn" if cfg.Prd { domain = "http://zhios-admin" } url = domain + "/appapi/Push/mobPush" aesData := utils.SerializeStr(args) fmt.Println(url) fmt.Println(aesData) // 推送 resp, err, _ := utils.AesAdminCurlPOST(string(aesData), url, 999999999999) fmt.Println("==========推送============") fmt.Println(string(resp)) fmt.Println(gjson.Get(string(resp), "message").String()) fmt.Println(err) if err != nil { // e.OutErr(c, e.ERR_ADMIN_API, err) return err } if resp == nil { return err } //fmt.Println(string(resp)) // 推送成功更新推送状态 if gjson.GetBytes(resp, "code").Int() == 0 { // 发送成功处理 log.State = 2 if _, err := db.UpdateSysPushApp(eg, log); err != nil { logx.Warn(err) } } tmp := make([]string, 0) if pushArgs["all_user_second"] != "" { json.Unmarshal([]byte(pushArgs["all_user_second"]), &tmp) } else { tmp = append(tmp, pushArgs["push_receive_user_id"]) } for _, v := range tmp { sendData := struct { Alias string `json:"alias"` Content string `json:"content"` Error string `json:"error"` Title string `json:"title"` }{ Alias: pushArgs["masterId"] + "_" + v, Content: pushArgs["push_content"], Error: gjson.Get(string(resp), "message").String(), Title: pushArgs["push_content"], } fmt.Println(sendData.Error) bendData, _ := json.Marshal(sendData) fmt.Println("插入到通知记录") // 插入到通知记录 _, err = db.SysPushUserInsertOne(eg, &model.SysPushUser{ PushId: int(log.Id), Uid: utils.StrToInt(v), State: func() int { if gjson.GetBytes(resp, "code").Int() == 0 { return 1 } return 0 }(), Time: time.Now(), SendData: string(bendData), Provider: "mob", Type: pushArgs["push_type"], }) if err != nil { logx.Warn(err) } } return nil }