劲创营---任务项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

285 lines
9.1 KiB

  1. package push
  2. import (
  3. "applet/app/cfg"
  4. "applet/app/comm/db"
  5. "applet/app/comm/db/model"
  6. "applet/app/comm/md"
  7. "applet/app/comm/utils"
  8. "applet/app/comm/utils/logx"
  9. "encoding/json"
  10. "errors"
  11. "fmt"
  12. "strings"
  13. "time"
  14. "xorm.io/xorm"
  15. "github.com/tidwall/gjson"
  16. )
  17. func getChangeContent(args md.PushParams, Content string) string {
  18. Content = strings.Replace(Content, "[APP名称]", args.AppName, -1)
  19. Content = strings.Replace(Content, "[会员昵称]", args.Nickname, -1)
  20. Content = strings.Replace(Content, "[付款金额]", args.Payment, -1)
  21. Content = strings.Replace(Content, "[下单人昵称]", args.OrderNickname, -1)
  22. Content = strings.Replace(Content, "[订单号]", args.OrderNo, -1)
  23. Content = strings.Replace(Content, "[下单时间]", args.OrderTime, -1)
  24. Content = strings.Replace(Content, "[预估佣金]", args.Fcommission, -1)
  25. Content = strings.Replace(Content, "[注册人昵称]", args.RegNickname, -1)
  26. Content = strings.Replace(Content, "[注册人手机号]", args.RegPhone, -1)
  27. Content = strings.Replace(Content, "[升级等级名称]", args.LvName, -1)
  28. Content = strings.Replace(Content, "[提现金额]", args.WithdrawMoney, -1)
  29. Content = strings.Replace(Content, "[原因]", args.Reason, -1)
  30. Content = strings.Replace(Content, "[金额]", args.Money, -1)
  31. Content = strings.Replace(Content, "[补贴金额]", args.Money, -1)
  32. Content = strings.Replace(Content, "[时间]", args.Times, -1)
  33. return Content
  34. }
  35. // 公共处理推送数据
  36. func CommAddPush(eg *xorm.Engine, args md.PushParams) {
  37. // 后台mob推送
  38. pushArgs := make(map[string]string)
  39. if args.DomainWapBase == "" {
  40. args.DomainWapBase = "http://h5." + args.MasterId + ".izhyin.com"
  41. if cfg.Prd {
  42. args.DomainWapBase = "http://" + args.MasterId + ".izhim.net"
  43. }
  44. }
  45. if args.PushType != "" {
  46. temp, err := db.SysPushTemplateByType(eg, args.PushType)
  47. if err != nil {
  48. //e.OutErr(c, e.ERR_DB_ORM, err)
  49. return
  50. }
  51. if temp != nil { //处理有模板的数据
  52. if temp.IsAppPush != 1 {
  53. return
  54. }
  55. args.Title = temp.Title
  56. args.Content = temp.Content
  57. args.Skip = temp.Skip
  58. //替换链接的一些参数
  59. if strings.Contains(args.Skip, "[replace_APP_URL]") {
  60. args.Skip = strings.Replace(args.Skip, "[replace_APP_URL]", args.DomainWapBase, -1)
  61. }
  62. if strings.Contains(args.Skip, "[replace_masterId]") {
  63. args.Skip = strings.Replace(args.Skip, "[replace_masterId]", args.MasterId, -1)
  64. }
  65. if strings.Contains(args.Skip, "[replace_uid]") {
  66. args.Skip = strings.Replace(args.Skip, "[replace_uid]", utils.IntToStr(args.Uid), -1)
  67. }
  68. if strings.Contains(args.Skip, "skipIdentifier") {
  69. args.Skip = strings.Replace(args.Skip, "skipIdentifier", "skip_identifier", -1)
  70. }
  71. if strings.Contains(args.Skip, "requiredLogin") {
  72. args.Skip = strings.Replace(args.Skip, "requiredLogin", "required_login", -1)
  73. }
  74. if strings.Contains(args.Skip, "requiredTaobaoAuth") {
  75. args.Skip = strings.Replace(args.Skip, "requiredTaobaoAuth", "required_taobao_auth", -1)
  76. }
  77. if strings.Contains(args.Skip, "activityId") {
  78. args.Skip = strings.Replace(args.Skip, "activityId", "activity_id", -1)
  79. }
  80. if strings.Contains(args.Skip, "sourceType") {
  81. args.Skip = strings.Replace(args.Skip, "sourceType", "source_type", -1)
  82. }
  83. if strings.Contains(args.Skip, "brandId") {
  84. args.Skip = strings.Replace(args.Skip, "brandId", "brand_id", -1)
  85. }
  86. args.Content = getChangeContent(args, args.Content)
  87. args.Title = getChangeContent(args, args.Title)
  88. }
  89. }
  90. thirdAppPushSet := db.SysCfgFindWithDb(eg, args.MasterId, "third_app_push_set")
  91. pushPlatform := gjson.Get(thirdAppPushSet["third_app_push_set"], "pushPlatform").String()
  92. if pushPlatform == "jg" { //极光
  93. JgPush(eg, args)
  94. return
  95. }
  96. pushArgs["push_title"] = args.Title
  97. pushArgs["push_content"] = args.Content
  98. pushArgs["push_user"] = fmt.Sprintf("%s_%d", args.MasterId, args.Uid)
  99. pushArgs["push_receive_user_id"] = utils.IntToStr(args.Uid)
  100. pushArgs["push_type"] = args.PushType
  101. pushArgs["masterId"] = args.MasterId
  102. pushArgs["push_skip"] = args.Skip
  103. if len(args.AllUser) > 0 {
  104. pushArgs["all_user"] = utils.SerializeStr(args.AllUser)
  105. pushArgs["all_user_second"] = utils.SerializeStr(args.AllUserSecond)
  106. }
  107. pushArgs["task_time"] = ""
  108. if args.TaskTime != "" {
  109. pushArgs["task_time"] = utils.SerializeStr(args.TaskTime)
  110. }
  111. if err := AdminMobPush(eg, pushArgs); err != nil {
  112. //e.OutErr(c, e.ERR_ADMIN_PUSH, err)
  113. return
  114. }
  115. return
  116. }
  117. // AdminMobPush mob is 推送 t 有下面几种类型模板类型 | 推送类型;public;:普通推送;activity:活动通知;order_self:新订单提醒(导购自购新订单),order_team:新订单提醒(团队新订单),order_share:新订单提醒(导购分享新订单),member_register:团队成员注册成功,level_upgrade:团队成员等级升级成功,withdraw_fail:提现失败提醒,withdraw_success:提现成功提醒,comission_settle_success:佣金结算提醒(平台结算)
  118. func AdminMobPush(eg *xorm.Engine, pushArgs map[string]string) error {
  119. var (
  120. host string
  121. port string
  122. )
  123. // 开始准备推送
  124. mdb, err := db.GetDatabaseByMasterID(db.Db, pushArgs["masterId"])
  125. fmt.Println("============================")
  126. fmt.Println(pushArgs)
  127. fmt.Println(mdb)
  128. if err != nil {
  129. return err
  130. }
  131. if mdb.DbHost == "" {
  132. mdb.DbHost = cfg.DB.Host
  133. }
  134. //fmt.Println(mdb.DbHost)
  135. dbc := strings.Split(mdb.DbHost, ":")
  136. if len(dbc) != 2 && mdb.DbHost != "" {
  137. return errors.New("model mapping db_host is formt error")
  138. }
  139. host = dbc[0]
  140. port = dbc[1]
  141. args := struct {
  142. Content string `json:"content"`
  143. Db struct {
  144. DbHost string `json:"db_host"`
  145. DbName string `json:"db_name"`
  146. DbPassword string `json:"db_password"`
  147. DbPort string `json:"db_port"`
  148. DbUsername string `json:"db_username"`
  149. } `json:"db"`
  150. Plats int64 `json:"plats"`
  151. Skip string `json:"skip"`
  152. Title string `json:"title"`
  153. User string `json:"user"`
  154. AllUser string `json:"all_user"`
  155. TaskTime string `json:"task_time"`
  156. }{
  157. Content: pushArgs["push_content"],
  158. Db: struct {
  159. DbHost string "json:\"db_host\""
  160. DbName string "json:\"db_name\""
  161. DbPassword string "json:\"db_password\""
  162. DbPort string "json:\"db_port\""
  163. DbUsername string "json:\"db_username\""
  164. }{
  165. DbHost: host,
  166. DbPort: port,
  167. DbName: mdb.DbName,
  168. DbUsername: mdb.DbUsername,
  169. DbPassword: mdb.DbPassword,
  170. },
  171. Plats: 1,
  172. Skip: pushArgs["push_skip"],
  173. Title: pushArgs["push_title"],
  174. User: pushArgs["push_user"],
  175. AllUser: pushArgs["all_user"],
  176. TaskTime: pushArgs["task_time"],
  177. }
  178. // 插入推送记录
  179. userSecond := "[\"" + pushArgs["push_receive_user_id"] + "\"]"
  180. if pushArgs["all_user_second"] != "" {
  181. userSecond = pushArgs["all_user_second"]
  182. }
  183. log := &model.SysPushApp{
  184. Title: pushArgs["push_title"],
  185. Content: pushArgs["push_content"],
  186. Provider: "mob",
  187. Type: pushArgs["push_type"],
  188. State: 1,
  189. SendAt: utils.StrToInt(pushArgs["task_time"]),
  190. DeviceProvider: 1,
  191. Target: 2,
  192. TargetCondition: fmt.Sprintf(`{"type":"user","val":%s}`, userSecond),
  193. Skip: pushArgs["push_skip"],
  194. CreateAt: time.Now(),
  195. UpdateAt: time.Now(),
  196. }
  197. if _, err := db.InertSysPushAppOne(eg, log); err != nil {
  198. // e.OutErr(c, e.ERR_DB_ORM, err)
  199. // return
  200. logx.Warn(err)
  201. }
  202. var url string
  203. var domain = "http://cs.fnuo123.com.cn"
  204. if cfg.Prd {
  205. domain = "http://zhios-admin"
  206. }
  207. url = domain + "/appapi/Push/mobPush"
  208. aesData := utils.SerializeStr(args)
  209. fmt.Println(url)
  210. fmt.Println(aesData)
  211. // 推送
  212. resp, err, _ := utils.AesAdminCurlPOST(string(aesData), url, 999999999999)
  213. fmt.Println("==========推送============")
  214. fmt.Println(string(resp))
  215. fmt.Println(gjson.Get(string(resp), "message").String())
  216. fmt.Println(err)
  217. if err != nil {
  218. // e.OutErr(c, e.ERR_ADMIN_API, err)
  219. return err
  220. }
  221. if resp == nil {
  222. return err
  223. }
  224. //fmt.Println(string(resp))
  225. // 推送成功更新推送状态
  226. if gjson.GetBytes(resp, "code").Int() == 0 {
  227. // 发送成功处理
  228. log.State = 2
  229. if _, err := db.UpdateSysPushApp(eg, log); err != nil {
  230. logx.Warn(err)
  231. }
  232. }
  233. tmp := make([]string, 0)
  234. if pushArgs["all_user_second"] != "" {
  235. json.Unmarshal([]byte(pushArgs["all_user_second"]), &tmp)
  236. } else {
  237. tmp = append(tmp, pushArgs["push_receive_user_id"])
  238. }
  239. for _, v := range tmp {
  240. sendData := struct {
  241. Alias string `json:"alias"`
  242. Content string `json:"content"`
  243. Error string `json:"error"`
  244. Title string `json:"title"`
  245. }{
  246. Alias: pushArgs["masterId"] + "_" + v,
  247. Content: pushArgs["push_content"],
  248. Error: gjson.Get(string(resp), "message").String(),
  249. Title: pushArgs["push_content"],
  250. }
  251. fmt.Println(sendData.Error)
  252. bendData, _ := json.Marshal(sendData)
  253. fmt.Println("插入到通知记录")
  254. // 插入到通知记录
  255. _, err = db.SysPushUserInsertOne(eg, &model.SysPushUser{
  256. PushId: int(log.Id),
  257. Uid: utils.StrToInt(v),
  258. State: func() int {
  259. if gjson.GetBytes(resp, "code").Int() == 0 {
  260. return 1
  261. }
  262. return 0
  263. }(),
  264. Time: time.Now(),
  265. SendData: string(bendData),
  266. Provider: "mob",
  267. Type: pushArgs["push_type"],
  268. })
  269. if err != nil {
  270. logx.Warn(err)
  271. }
  272. }
  273. return nil
  274. }