作者 yangfu

1.推送修改,推送设备信息存储

@@ -11,4 +11,11 @@ cname ="https://media.goexample.live/" @@ -11,4 +11,11 @@ cname ="https://media.goexample.live/"
11 11
12 12
13 #友盟推送 13 #友盟推送
14 -UMENG_API_HOST = "http://msg.umeng.com"  
  14 +UMENG_API_HOST = "http://msg.umeng.com"
  15 +
  16 +#数据库相关
  17 +MYSQL_USER = "${MYSQL_USER||root}"
  18 +MYSQL_PASSWORD = "${MYSQL_PASSWORD||sutianxia2018}"
  19 +MYSQL_HOST = "${MYSQL_HOST||101.37.68.23}"
  20 +MYSQL_PORT = "${MYSQL_PORT||3306}"
  21 +MYSQL_DB_NAME = "${MYSQL_DB_NAME||mmm_open_dev}"
@@ -9,3 +9,10 @@ aliyun_logs_access ="${aliyun_logs_access||F:/log/app.log}" @@ -9,3 +9,10 @@ aliyun_logs_access ="${aliyun_logs_access||F:/log/app.log}"
9 9
10 #阿里云 10 #阿里云
11 cname ="https://media.fjmaimaimai.com/" 11 cname ="https://media.fjmaimaimai.com/"
  12 +
  13 +#数据库相关
  14 +MYSQL_USER = "${MYSQL_USER||root}"
  15 +MYSQL_PASSWORD = "${MYSQL_PASSWORD||sutianxia2018}"
  16 +MYSQL_HOST = "${MYSQL_HOST||101.37.68.23}"
  17 +MYSQL_PORT = "${MYSQL_PORT||3306}"
  18 +MYSQL_DB_NAME = "${MYSQL_DB_NAME||mmm_open_dev}"
@@ -8,4 +8,11 @@ AccessKeyID ="LTAI4Fz1LUBW2fXp6QWaJHRS" @@ -8,4 +8,11 @@ AccessKeyID ="LTAI4Fz1LUBW2fXp6QWaJHRS"
8 AccessKeySecret ="aLZXwK8pgrs10Ws03qcN7NsrSXFVsg" 8 AccessKeySecret ="aLZXwK8pgrs10Ws03qcN7NsrSXFVsg"
9 9
10 #阿里云 10 #阿里云
11 -cname ="https://media.fjmaimaimai.com/"  
  11 +cname ="https://media.fjmaimaimai.com/"
  12 +
  13 +#数据库相关
  14 +MYSQL_USER = "${MYSQL_USER||root}"
  15 +MYSQL_PASSWORD = "${MYSQL_PASSWORD||sutianxia2018}"
  16 +MYSQL_HOST = "${MYSQL_HOST||101.37.68.23}"
  17 +MYSQL_PORT = "${MYSQL_PORT||3306}"
  18 +MYSQL_DB_NAME = "${MYSQL_DB_NAME||mmm_open}"
@@ -8,4 +8,11 @@ AccessKeyID ="LTAI4Fz1LUBW2fXp6QWaJHRS" @@ -8,4 +8,11 @@ AccessKeyID ="LTAI4Fz1LUBW2fXp6QWaJHRS"
8 AccessKeySecret ="aLZXwK8pgrs10Ws03qcN7NsrSXFVsg" 8 AccessKeySecret ="aLZXwK8pgrs10Ws03qcN7NsrSXFVsg"
9 9
10 #阿里云 10 #阿里云
11 -cname ="https://media.fjmaimaimai.com/"  
  11 +cname ="https://media.fjmaimaimai.com/"
  12 +
  13 +#数据库相关
  14 +MYSQL_USER = "${MYSQL_USER||root}"
  15 +MYSQL_PASSWORD = "${MYSQL_PASSWORD||sutianxia2018}"
  16 +MYSQL_HOST = "${MYSQL_HOST||101.37.68.23}"
  17 +MYSQL_PORT = "${MYSQL_PORT||3306}"
  18 +MYSQL_DB_NAME = "${MYSQL_DB_NAME||mmm_open_test}"
@@ -9,6 +9,7 @@ require ( @@ -9,6 +9,7 @@ require (
9 github.com/astaxie/beego v1.10.0 9 github.com/astaxie/beego v1.10.0
10 github.com/fatih/structs v1.1.0 // indirect 10 github.com/fatih/structs v1.1.0 // indirect
11 github.com/gavv/httpexpect v2.0.0+incompatible 11 github.com/gavv/httpexpect v2.0.0+incompatible
  12 + github.com/go-sql-driver/mysql v1.4.1
12 github.com/google/go-querystring v1.0.0 // indirect 13 github.com/google/go-querystring v1.0.0 // indirect
13 github.com/imkira/go-interpol v1.1.0 // indirect 14 github.com/imkira/go-interpol v1.1.0 // indirect
14 github.com/klauspost/cpuid v1.2.3 // indirect 15 github.com/klauspost/cpuid v1.2.3 // indirect
@@ -3,8 +3,7 @@ package main @@ -3,8 +3,7 @@ package main
3 import ( 3 import (
4 "github.com/astaxie/beego" 4 "github.com/astaxie/beego"
5 "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" 5 "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
6 - "openapi/pkg/constant"  
7 - 6 + _ "openapi/pkg/infrastructure/bgorm"
8 _ "openapi/pkg/log" 7 _ "openapi/pkg/log"
9 _ "openapi/pkg/port/beego" 8 _ "openapi/pkg/port/beego"
10 ) 9 )
@@ -14,6 +13,6 @@ func main() { @@ -14,6 +13,6 @@ func main() {
14 log.Info("server on stop!") 13 log.Info("server on stop!")
15 }() 14 }()
16 log.Info("server on start!") 15 log.Info("server on start!")
17 - constant.DebugConfig() 16 + //constant.DebugConfig()
18 beego.Run() 17 beego.Run()
19 } 18 }
1 package push 1 package push
2 2
3 import ( 3 import (
4 - "encoding/json" 4 + "fmt"
5 "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" 5 "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
6 protocol "openapi/pkg/domain" 6 protocol "openapi/pkg/domain"
7 "openapi/pkg/infrastructure/push" 7 "openapi/pkg/infrastructure/push"
8 "openapi/pkg/infrastructure/push/getui" 8 "openapi/pkg/infrastructure/push/getui"
  9 + "openapi/pkg/infrastructure/repository"
9 "openapi/pkg/infrastructure/utils" 10 "openapi/pkg/infrastructure/utils"
10 ) 11 )
11 12
12 //推送信息 13 //推送信息
13 func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequest) (rsp *protocol.PushInfoResponse, err error) { 14 func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequest) (rsp *protocol.PushInfoResponse, err error) {
14 var ( 15 var (
  16 + repApp, _ = repository.NewAppInfoRepository(nil)
  17 + repDevice, _ = repository.NewPushDeviceRepository(nil)
  18 + appInfo *protocol.AppInfo
  19 + receivers []string
  20 + deviceList []*protocol.Device
  21 + requestOriginal *protocol.PushInfoOriginalRequest = &protocol.PushInfoOriginalRequest{
  22 + Type: request.Type,
  23 + Title: request.Title,
  24 + Content: request.Content,
  25 + Ext: request.Ext,
  26 + }
  27 + )
  28 + if appInfo, err = repApp.FindOne(map[string]interface{}{"project_key": request.ProjectKey}); err != nil {
  29 + log.Error(err)
  30 + err = protocol.NewCustomMessage(1, fmt.Sprintf("project_key:%v not found", request.ProjectKey))
  31 + return
  32 + }
  33 + if deviceList, err = repDevice.Find(map[string]interface{}{"receivers": request.Receivers}); err != nil {
  34 + log.Error(err)
  35 + err = nil
  36 + return
  37 + }
  38 + if len(deviceList) == 0 {
  39 + err = protocol.NewSuccessWithMessage(fmt.Sprintf("接受者:%v 未查询到注册的设备信息!", request.Receivers))
  40 + return
  41 + }
  42 + for i := range deviceList {
  43 + receivers = append(receivers, deviceList[i].ClientId)
  44 + }
  45 + requestOriginal.AppKey = appInfo.AppKey
  46 + requestOriginal.AppId = appInfo.AppId
  47 + requestOriginal.Secret = appInfo.AppMasterSecret
  48 + requestOriginal.ClientIdList = receivers
  49 + return NotificationOriginal(header, requestOriginal)
  50 +}
  51 +
  52 +func NotificationOriginal(header *protocol.RequestHeader, request *protocol.PushInfoOriginalRequest) (rsp *protocol.PushInfoResponse, err error) {
  53 + var (
15 sendData = make(map[string]interface{}) 54 sendData = make(map[string]interface{})
16 clientIds []string 55 clientIds []string
17 - fc = func(m json.RawMessage) {  
18 - if len(m) == 0 {  
19 - return  
20 - }  
21 - var (  
22 - id string  
23 - ids []string  
24 - )  
25 - if e := json.Unmarshal(m, &ids); e == nil {  
26 - clientIds = append(clientIds, ids...)  
27 - return  
28 - }  
29 - if e := json.Unmarshal(m, &id); e == nil {  
30 - if len(id) == 0 {  
31 - return  
32 - }  
33 - clientIds = append(clientIds, id)  
34 - return  
35 - }  
36 - return  
37 - }  
38 - options []push.Option = []push.Option{ 56 + options []push.Option = []push.Option{
39 push.DebugModule(true), 57 push.DebugModule(true),
40 push.AppId(request.AppId), 58 push.AppId(request.AppId),
41 push.AppKey(request.AppKey), 59 push.AppKey(request.AppKey),
@@ -51,8 +69,7 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ @@ -51,8 +69,7 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ
51 if v, ok := request.Ext["transData"]; ok { 69 if v, ok := request.Ext["transData"]; ok {
52 options = append(options, push.TransmissionContent(utils.JsonAssertString(v))) 70 options = append(options, push.TransmissionContent(utils.JsonAssertString(v)))
53 } 71 }
54 - fc(request.ClientId)  
55 - fc(request.DeviceToken) 72 + clientIds = request.ClientIdList
56 switch len(clientIds) { 73 switch len(clientIds) {
57 case 0: 74 case 0:
58 err = protocol.NewCustomMessage(2, "clientId/deviceToken 不能同时为空.") 75 err = protocol.NewCustomMessage(2, "clientId/deviceToken 不能同时为空.")
@@ -84,3 +101,22 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ @@ -84,3 +101,22 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ
84 rsp = &protocol.PushInfoResponse{} 101 rsp = &protocol.PushInfoResponse{}
85 return 102 return
86 } 103 }
  104 +
  105 +//更新设备信息
  106 +func UpdateDevice(header *protocol.RequestHeader, request *protocol.UpdateDeviceRequest) (rsp *protocol.UpdateDeviceResponse, err error) {
  107 + var ()
  108 + rep, _ := repository.NewPushDeviceRepository(nil)
  109 + if _, err = rep.FindOne(map[string]interface{}{"uid": request.Muid}); err != nil {
  110 + if err == protocol.ERR_DB_NOT_FOUND {
  111 + rep.Save(request)
  112 + return
  113 + }
  114 + log.Error(err)
  115 + return
  116 + }
  117 + if err = rep.UpdateDevice(request.Muid, request.ClientId, request.DeviceToken); err != nil {
  118 + log.Error(err)
  119 + }
  120 + err = protocol.NewSuccessWithMessage("更新成功")
  121 + return
  122 +}
  1 +package constant
  2 +
  3 +import "fmt"
  4 +
  5 +var MYSQL_DB_NAME = "mmm_open_dev"
  6 +var MYSQL_USER = "root"
  7 +var MYSQL_PASSWORD = "sutianxia2018"
  8 +var MYSQL_HOST = "101.37.68.23"
  9 +var MYSQL_PORT = "3306"
  10 +var MYSQL_DATA_SOURCE = ""
  11 +var MYSQL_MAX_IDLE = 100
  12 +var MYSQL_MAX_OPEN = 100
  13 +
  14 +func init() {
  15 + MYSQL_USER = config.StringDefault("MYSQL_USER", MYSQL_USER)
  16 + MYSQL_PASSWORD = config.StringDefault("MYSQL_PASSWORD", MYSQL_PASSWORD)
  17 + MYSQL_HOST = config.StringDefault("MYSQL_HOST", MYSQL_HOST)
  18 + MYSQL_PORT = config.StringDefault("MYSQL_PORT", MYSQL_PORT)
  19 +
  20 + MYSQL_DB_NAME = config.StringDefault("MYSQL_DB_NAME", MYSQL_DB_NAME)
  21 +
  22 + MYSQL_DATA_SOURCE = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?loc=Asia%%2FShanghai&charset=utf8mb4",
  23 + MYSQL_USER,
  24 + MYSQL_PASSWORD,
  25 + MYSQL_HOST,
  26 + MYSQL_PORT,
  27 + MYSQL_DB_NAME,
  28 + )
  29 +}
@@ -2,6 +2,11 @@ package domain @@ -2,6 +2,11 @@ package domain
2 2
3 import ( 3 import (
4 "encoding/json" 4 "encoding/json"
  5 + "fmt"
  6 +)
  7 +
  8 +var (
  9 + ERR_DB_NOT_FOUND = fmt.Errorf("db:not found")
5 ) 10 )
6 11
7 //CustomErrParse 解析自定义错误结构体 12 //CustomErrParse 解析自定义错误结构体
1 package domain 1 package domain
2 2
3 -import "encoding/json" 3 +/*PushInfo 推送信息*/
  4 +type PushInfoOriginalRequest struct {
  5 + Type int `json:"msgType"`
  6 + ClientIdList []string `json:"clientId"`
  7 + AppKey string `json:"appKey" valid:"Required"`
  8 + Secret string `json:"secret" valid:"Required"`
  9 + AppId string `json:"appId" valid:"Required"`
  10 +
  11 + Title string `json:"title" valid:"Required"`
  12 + Content string `json:"content" valid:"Required"`
  13 + Ext map[string]interface{} `json:"ext"` //key->transData:透传数据
  14 +}
  15 +type PushInfoResponse struct {
  16 +}
4 17
5 /*PushInfo 推送信息*/ 18 /*PushInfo 推送信息*/
6 type PushInfoRequest struct { 19 type PushInfoRequest struct {
7 - Type int `json:"msgType"`  
8 - DeviceToken json.RawMessage `json:"deviceToken" `  
9 - ClientId json.RawMessage `json:"clientId"`  
10 - AppKey string `json:"appKey" valid:"Required"`  
11 - Secret string `json:"secret" valid:"Required"`  
12 - AppId string `json:"appId" valid:"Required"` 20 + Type int `json:"msgType"`
  21 + Receivers []int64 `json:"receivers"` //接受用户id列表
  22 + ProjectKey string `json:"project"` //ability
13 23
14 Title string `json:"title" valid:"Required"` 24 Title string `json:"title" valid:"Required"`
15 Content string `json:"content" valid:"Required"` 25 Content string `json:"content" valid:"Required"`
16 Ext map[string]interface{} `json:"ext"` //key->transData:透传数据 26 Ext map[string]interface{} `json:"ext"` //key->transData:透传数据
17 } 27 }
18 -type PushInfoResponse struct { 28 +
  29 +/*UpdateDevice 更新设备*/
  30 +type UpdateDeviceRequest struct {
  31 + Muid int64 `json:"muid" valid:"Required;"` //企业平台中的用户 UID
  32 + ClientId string `json:"clientId" valid:"Required"`
  33 + DeviceToken string `json:"deviceToken"`
  34 +}
  35 +type UpdateDeviceResponse struct {
  36 +}
  37 +
  38 +type Device struct {
  39 + Uid int64
  40 + ClientId string
  41 + DeviceToken string
  42 +}
  43 +
  44 +type AppInfo struct {
  45 + Id int
  46 + AppKey string
  47 + AppMasterSecret string
  48 + AppId string
  49 + ProjectName string
  50 + ProjectKey string
19 } 51 }
  1 +package bgorm
  2 +
  3 +import (
  4 + "github.com/astaxie/beego/orm"
  5 + _ "github.com/go-sql-driver/mysql"
  6 + "openapi/pkg/constant"
  7 + _ "openapi/pkg/infrastructure/bgorm/model"
  8 +)
  9 +
  10 +func init() {
  11 + aliasName := "default"
  12 + _ = orm.RegisterDataBase(aliasName, "mysql", constant.MYSQL_DATA_SOURCE)
  13 + orm.SetMaxIdleConns(aliasName, constant.MYSQL_MAX_IDLE)
  14 + orm.SetMaxOpenConns(aliasName, constant.MYSQL_MAX_OPEN)
  15 +}
  1 +package models
  2 +
  3 +import (
  4 + "errors"
  5 + "fmt"
  6 + "reflect"
  7 + "strings"
  8 +
  9 + "github.com/astaxie/beego/orm"
  10 +)
  11 +
  12 +type PushAppInfo struct {
  13 + Id int `orm:"column(id);auto" description:"编号"`
  14 + AppKey string `orm:"column(app_key);size(255);null" description:"推送key "`
  15 + AppMasterSecret string `orm:"column(app_master_secret);size(255);null" description:"推送服务端密钥"`
  16 + AppId string `orm:"column(app_id);size(255);null" description:"推送应用编号"`
  17 + ProjectName string `orm:"column(project_name);size(255);null" description:"项目名称 能力展示"`
  18 + ProjectKey string `orm:"column(project_key);size(255);null" description:"项目唯一标识 ability"`
  19 +}
  20 +
  21 +func (t *PushAppInfo) TableName() string {
  22 + return "push_app_info"
  23 +}
  24 +
  25 +func init() {
  26 + orm.RegisterModel(new(PushAppInfo))
  27 +}
  28 +
  29 +// AddPushAppInfo insert a new PushAppInfo into database and returns
  30 +// last inserted Id on success.
  31 +func AddPushAppInfo(m *PushAppInfo) (id int64, err error) {
  32 + o := orm.NewOrm()
  33 + id, err = o.Insert(m)
  34 + return
  35 +}
  36 +
  37 +// GetPushAppInfoById retrieves PushAppInfo by Id. Returns error if
  38 +// Id doesn't exist
  39 +func GetPushAppInfoById(id int) (v *PushAppInfo, err error) {
  40 + o := orm.NewOrm()
  41 + v = &PushAppInfo{Id: id}
  42 + if err = o.Read(v); err == nil {
  43 + return v, nil
  44 + }
  45 + return nil, err
  46 +}
  47 +
  48 +// GetAllPushAppInfo retrieves all PushAppInfo matches certain condition. Returns empty list if
  49 +// no records exist
  50 +func GetAllPushAppInfo(query map[string]string, fields []string, sortby []string, order []string,
  51 + offset int64, limit int64) (ml []interface{}, err error) {
  52 + o := orm.NewOrm()
  53 + qs := o.QueryTable(new(PushAppInfo))
  54 + // query k=v
  55 + for k, v := range query {
  56 + // rewrite dot-notation to Object__Attribute
  57 + k = strings.Replace(k, ".", "__", -1)
  58 + if strings.Contains(k, "isnull") {
  59 + qs = qs.Filter(k, (v == "true" || v == "1"))
  60 + } else {
  61 + qs = qs.Filter(k, v)
  62 + }
  63 + }
  64 + // order by:
  65 + var sortFields []string
  66 + if len(sortby) != 0 {
  67 + if len(sortby) == len(order) {
  68 + // 1) for each sort field, there is an associated order
  69 + for i, v := range sortby {
  70 + orderby := ""
  71 + if order[i] == "desc" {
  72 + orderby = "-" + v
  73 + } else if order[i] == "asc" {
  74 + orderby = v
  75 + } else {
  76 + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
  77 + }
  78 + sortFields = append(sortFields, orderby)
  79 + }
  80 + qs = qs.OrderBy(sortFields...)
  81 + } else if len(sortby) != len(order) && len(order) == 1 {
  82 + // 2) there is exactly one order, all the sorted fields will be sorted by this order
  83 + for _, v := range sortby {
  84 + orderby := ""
  85 + if order[0] == "desc" {
  86 + orderby = "-" + v
  87 + } else if order[0] == "asc" {
  88 + orderby = v
  89 + } else {
  90 + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
  91 + }
  92 + sortFields = append(sortFields, orderby)
  93 + }
  94 + } else if len(sortby) != len(order) && len(order) != 1 {
  95 + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1")
  96 + }
  97 + } else {
  98 + if len(order) != 0 {
  99 + return nil, errors.New("Error: unused 'order' fields")
  100 + }
  101 + }
  102 +
  103 + var l []PushAppInfo
  104 + qs = qs.OrderBy(sortFields...)
  105 + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil {
  106 + if len(fields) == 0 {
  107 + for _, v := range l {
  108 + ml = append(ml, v)
  109 + }
  110 + } else {
  111 + // trim unused fields
  112 + for _, v := range l {
  113 + m := make(map[string]interface{})
  114 + val := reflect.ValueOf(v)
  115 + for _, fname := range fields {
  116 + m[fname] = val.FieldByName(fname).Interface()
  117 + }
  118 + ml = append(ml, m)
  119 + }
  120 + }
  121 + return ml, nil
  122 + }
  123 + return nil, err
  124 +}
  125 +
  126 +// UpdatePushAppInfo updates PushAppInfo by Id and returns error if
  127 +// the record to be updated doesn't exist
  128 +func UpdatePushAppInfoById(m *PushAppInfo) (err error) {
  129 + o := orm.NewOrm()
  130 + v := PushAppInfo{Id: m.Id}
  131 + // ascertain id exists in the database
  132 + if err = o.Read(&v); err == nil {
  133 + var num int64
  134 + if num, err = o.Update(m); err == nil {
  135 + fmt.Println("Number of records updated in database:", num)
  136 + }
  137 + }
  138 + return
  139 +}
  140 +
  141 +// DeletePushAppInfo deletes PushAppInfo by Id and returns error if
  142 +// the record to be deleted doesn't exist
  143 +func DeletePushAppInfo(id int) (err error) {
  144 + o := orm.NewOrm()
  145 + v := PushAppInfo{Id: id}
  146 + // ascertain id exists in the database
  147 + if err = o.Read(&v); err == nil {
  148 + var num int64
  149 + if num, err = o.Delete(&PushAppInfo{Id: id}); err == nil {
  150 + fmt.Println("Number of records deleted in database:", num)
  151 + }
  152 + }
  153 + return
  154 +}
  1 +package models
  2 +
  3 +import (
  4 + "time"
  5 +
  6 + "github.com/astaxie/beego/orm"
  7 +)
  8 +
  9 +type PushDeviceInfo struct {
  10 + Id int `orm:"column(id);auto"`
  11 + Uid int64 `orm:"column(uid);null" description:"企业平台用户id (muid)"`
  12 + ClientId string `orm:"column(client_id);size(100);null" description:"设备识别码 推送标识"`
  13 + DeviceToken string `orm:"column(device_token);size(100);null" description:"设备识别码 推送标识"`
  14 + CreateAt time.Time `orm:"column(create_at);type(timestamp);null" description:"创建时间"`
  15 + UpdateAt time.Time `orm:"column(update_at);type(timestamp);null" description:"更新时间"`
  16 +}
  17 +
  18 +func (t *PushDeviceInfo) TableName() string {
  19 + return "push_device_info"
  20 +}
  21 +
  22 +func init() {
  23 + orm.RegisterModel(new(PushDeviceInfo))
  24 +}
  1 +package repository
  2 +
  3 +import (
  4 + "github.com/astaxie/beego/orm"
  5 + "openapi/pkg/domain"
  6 + "openapi/pkg/infrastructure/bgorm/model"
  7 +)
  8 +
  9 +type AppInfoRepository struct {
  10 +}
  11 +
  12 +func (repository *AppInfoRepository) FindOne(queryOptions map[string]interface{}) (*domain.AppInfo, error) {
  13 + o := orm.NewOrm()
  14 + model := new(models.PushAppInfo)
  15 + qs := o.QueryTable(model).Filter("project_key", queryOptions["project_key"])
  16 + err := qs.One(model)
  17 + if err != nil {
  18 + return nil, err
  19 + }
  20 + return repository.transformBgormModelToDomainModel(model)
  21 +}
  22 +
  23 +func (repository *AppInfoRepository) Find(queryOptions map[string]interface{}) (rsp []*domain.AppInfo, err error) {
  24 + return
  25 +}
  26 +
  27 +func (repository *AppInfoRepository) transformBgormModelToDomainModel(model *models.PushAppInfo) (*domain.AppInfo, error) {
  28 + return &domain.AppInfo{
  29 + Id: model.Id,
  30 + AppKey: model.AppKey,
  31 + AppMasterSecret: model.AppMasterSecret,
  32 + AppId: model.AppId,
  33 + ProjectName: model.ProjectName,
  34 + ProjectKey: model.ProjectKey,
  35 + }, nil
  36 +}
  37 +
  38 +func NewAppInfoRepository(transactionContext interface{}) (*AppInfoRepository, error) {
  39 + if transactionContext == nil {
  40 + return &AppInfoRepository{}, nil
  41 + } else {
  42 + return &AppInfoRepository{}, nil
  43 + }
  44 +}
  1 +package repository
  2 +
  3 +import (
  4 + "github.com/astaxie/beego/orm"
  5 + "openapi/pkg/domain"
  6 + "openapi/pkg/infrastructure/bgorm/model"
  7 + "strings"
  8 + "time"
  9 +)
  10 +
  11 +type PushDeviceRepository struct {
  12 +}
  13 +
  14 +func (repository *PushDeviceRepository) Save(device *domain.UpdateDeviceRequest) error {
  15 + o := orm.NewOrm()
  16 +
  17 + m := &models.PushDeviceInfo{
  18 + Uid: device.Muid,
  19 + ClientId: strings.TrimSpace(device.ClientId),
  20 + DeviceToken: strings.TrimSpace(device.DeviceToken),
  21 + CreateAt: time.Now(),
  22 + UpdateAt: time.Now(),
  23 + }
  24 + _, err := o.Insert(m)
  25 + return err
  26 +}
  27 +
  28 +func (repository *PushDeviceRepository) FindOne(queryOptions map[string]interface{}) (*domain.Device, error) {
  29 + o := orm.NewOrm()
  30 + model := new(models.PushDeviceInfo)
  31 + qs := o.QueryTable(model.TableName()).Filter("uid", queryOptions["uid"])
  32 + err := qs.One(model)
  33 + if err != nil {
  34 + return nil, err
  35 + }
  36 + return repository.transformBgormModelToDomainModel(model)
  37 +}
  38 +
  39 +func (repository *PushDeviceRepository) Find(queryOptions map[string]interface{}) (rsp []*domain.Device, err error) {
  40 + o := orm.NewOrm()
  41 + model := new(models.PushDeviceInfo)
  42 + var ms []*models.PushDeviceInfo
  43 + qs := o.QueryTable(model.TableName()).Filter("uid__in", queryOptions["receivers"])
  44 + qs.All(&ms)
  45 + if len(ms) == 0 {
  46 + return
  47 + }
  48 + for i := range ms {
  49 + v, _ := repository.transformBgormModelToDomainModel(ms[i])
  50 + rsp = append(rsp, v)
  51 + }
  52 + return
  53 +}
  54 +
  55 +func (repository *PushDeviceRepository) UpdateDevice(uid int64, clientId, deviceToken string) error {
  56 + o := orm.NewOrm()
  57 + _, err := o.Raw("UPDATE push_device_info SET client_id=?,device_token = ? where uid=?", clientId, deviceToken, uid).Exec()
  58 + if err != nil {
  59 + return err
  60 + }
  61 + return nil
  62 +}
  63 +
  64 +func (repository *PushDeviceRepository) transformBgormModelToDomainModel(model *models.PushDeviceInfo) (*domain.Device, error) {
  65 + return &domain.Device{
  66 + Uid: model.Uid,
  67 + ClientId: model.ClientId,
  68 + DeviceToken: model.DeviceToken,
  69 + }, nil
  70 +}
  71 +
  72 +func NewPushDeviceRepository(transactionContext interface{}) (*PushDeviceRepository, error) {
  73 + if transactionContext == nil {
  74 + return &PushDeviceRepository{}, nil
  75 + } else {
  76 + return &PushDeviceRepository{}, nil
  77 + }
  78 +}
@@ -32,3 +32,45 @@ func (this *PushController) PushInfo() { @@ -32,3 +32,45 @@ func (this *PushController) PushInfo() {
32 header := controllers.GetRequestHeader(this.Ctx) 32 header := controllers.GetRequestHeader(this.Ctx)
33 msg = protocol.NewReturnResponse(push.Notification(header, request)) 33 msg = protocol.NewReturnResponse(push.Notification(header, request))
34 } 34 }
  35 +
  36 +//原生推送信息 PushInfoOriginal
  37 +// @router /pushInfoOriginal [post]
  38 +func (this *PushController) PushInfoOriginal() {
  39 + var msg *protocol.ResponseMessage
  40 + defer func() {
  41 + this.Resp(msg)
  42 + }()
  43 + var request *protocol.PushInfoOriginalRequest
  44 + if err := json.Unmarshal(this.ByteBody, &request); err != nil {
  45 + log.Error(err)
  46 + msg = protocol.BadRequestParam(1)
  47 + return
  48 + }
  49 + if b, m := this.Valid(request); !b {
  50 + msg = m
  51 + return
  52 + }
  53 + header := controllers.GetRequestHeader(this.Ctx)
  54 + msg = protocol.NewReturnResponse(push.NotificationOriginal(header, request))
  55 +}
  56 +
  57 +//UpdateDevice
  58 +//@router /updateDevice [post]
  59 +func (this *PushController) UpdateDevice() {
  60 + var msg *protocol.ResponseMessage
  61 + defer func() {
  62 + this.Resp(msg)
  63 + }()
  64 + var request *protocol.UpdateDeviceRequest
  65 + if err := json.Unmarshal(this.ByteBody, &request); err != nil {
  66 + log.Error(err)
  67 + msg = protocol.BadRequestParam(1)
  68 + return
  69 + }
  70 + if b, m := this.Valid(request); !b {
  71 + msg = m
  72 + return
  73 + }
  74 + header := controllers.GetRequestHeader(this.Ctx)
  75 + msg = protocol.NewReturnResponse(push.UpdateDevice(header, request))
  76 +}
@@ -15,6 +15,22 @@ func init() { @@ -15,6 +15,22 @@ func init() {
15 MethodParams: param.Make(), 15 MethodParams: param.Make(),
16 Params: nil}) 16 Params: nil})
17 17
  18 + beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:PushController"] = append(beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:PushController"],
  19 + beego.ControllerComments{
  20 + Method: "PushInfoOriginal",
  21 + Router: `/pushInfoOriginal`,
  22 + AllowHTTPMethods: []string{"post"},
  23 + MethodParams: param.Make(),
  24 + Params: nil})
  25 +
  26 + beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:PushController"] = append(beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:PushController"],
  27 + beego.ControllerComments{
  28 + Method: "UpdateDevice",
  29 + Router: `/updateDevice`,
  30 + AllowHTTPMethods: []string{"post"},
  31 + MethodParams: param.Make(),
  32 + Params: nil})
  33 +
18 beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:VodController"] = append(beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:VodController"], 34 beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:VodController"] = append(beego.GlobalControllerRouter["openapi/pkg/port/beego/controllers/v1:VodController"],
19 beego.ControllerComments{ 35 beego.ControllerComments{
20 Method: "CreateUploadImage", 36 Method: "CreateUploadImage",