正在显示
5 个修改的文件
包含
40 行增加
和
26 行删除
| @@ -17,6 +17,7 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ | @@ -17,6 +17,7 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ | ||
| 17 | repDevice, _ = repository.NewPushDeviceRepository(nil) | 17 | repDevice, _ = repository.NewPushDeviceRepository(nil) |
| 18 | appInfo *protocol.AppInfo | 18 | appInfo *protocol.AppInfo |
| 19 | receivers []string | 19 | receivers []string |
| 20 | + receiverIds []int64 | ||
| 20 | deviceList []*protocol.Device | 21 | deviceList []*protocol.Device |
| 21 | requestOriginal *protocol.PushInfoOriginalRequest = &protocol.PushInfoOriginalRequest{ | 22 | requestOriginal *protocol.PushInfoOriginalRequest = &protocol.PushInfoOriginalRequest{ |
| 22 | Type: request.Type, | 23 | Type: request.Type, |
| @@ -42,13 +43,15 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ | @@ -42,13 +43,15 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ | ||
| 42 | } | 43 | } |
| 43 | for i := range deviceList { | 44 | for i := range deviceList { |
| 44 | receivers = append(receivers, deviceList[i].ClientId) | 45 | receivers = append(receivers, deviceList[i].ClientId) |
| 46 | + receiverIds = append(receiverIds, deviceList[i].Uid) | ||
| 45 | } | 47 | } |
| 48 | + request.ActualReceivers = receiverIds | ||
| 46 | requestOriginal.AppKey = appInfo.AppKey | 49 | requestOriginal.AppKey = appInfo.AppKey |
| 47 | requestOriginal.AppId = appInfo.AppId | 50 | requestOriginal.AppId = appInfo.AppId |
| 48 | requestOriginal.Secret = appInfo.AppMasterSecret | 51 | requestOriginal.Secret = appInfo.AppMasterSecret |
| 49 | requestOriginal.ClientIdList = receivers | 52 | requestOriginal.ClientIdList = receivers |
| 50 | - _, err = NotificationOriginal(header, requestOriginal) | ||
| 51 | - repDevice.SaveLog(request, err) | 53 | + rsp, err = NotificationOriginal(header, requestOriginal) |
| 54 | + repDevice.SaveLog(request, rsp.ExtData, err) | ||
| 52 | if err != nil { | 55 | if err != nil { |
| 53 | err = protocol.NewCustomMessage(1, err.Error()) | 56 | err = protocol.NewCustomMessage(1, err.Error()) |
| 54 | } | 57 | } |
| @@ -71,7 +74,7 @@ func NotificationOriginal(header *protocol.RequestHeader, request *protocol.Push | @@ -71,7 +74,7 @@ func NotificationOriginal(header *protocol.RequestHeader, request *protocol.Push | ||
| 71 | //push.TransmissionContent(utils.JsonAssertString(request.Ext)), | 74 | //push.TransmissionContent(utils.JsonAssertString(request.Ext)), |
| 72 | } | 75 | } |
| 73 | ) | 76 | ) |
| 74 | - | 77 | + rsp = &protocol.PushInfoResponse{} |
| 75 | if v, ok := request.Ext["transData"]; ok { | 78 | if v, ok := request.Ext["transData"]; ok { |
| 76 | options = append(options, push.TransmissionContent(utils.JsonAssertString(v))) | 79 | options = append(options, push.TransmissionContent(utils.JsonAssertString(v))) |
| 77 | } | 80 | } |
| @@ -100,11 +103,10 @@ func NotificationOriginal(header *protocol.RequestHeader, request *protocol.Push | @@ -100,11 +103,10 @@ func NotificationOriginal(header *protocol.RequestHeader, request *protocol.Push | ||
| 100 | log.Error(err) | 103 | log.Error(err) |
| 101 | return | 104 | return |
| 102 | } | 105 | } |
| 103 | - if err = pushService.Send(sendData); err != nil { | 106 | + if rsp.ExtData, err = pushService.Send(sendData); err != nil { |
| 104 | log.Error(err) | 107 | log.Error(err) |
| 105 | return | 108 | return |
| 106 | } | 109 | } |
| 107 | - rsp = &protocol.PushInfoResponse{} | ||
| 108 | return | 110 | return |
| 109 | } | 111 | } |
| 110 | 112 |
| @@ -13,6 +13,7 @@ type PushInfoOriginalRequest struct { | @@ -13,6 +13,7 @@ type PushInfoOriginalRequest struct { | ||
| 13 | Ext map[string]interface{} `json:"ext"` //key->transData:透传数据 | 13 | Ext map[string]interface{} `json:"ext"` //key->transData:透传数据 |
| 14 | } | 14 | } |
| 15 | type PushInfoResponse struct { | 15 | type PushInfoResponse struct { |
| 16 | + ExtData map[string]interface{} `json:"-"` | ||
| 16 | } | 17 | } |
| 17 | 18 | ||
| 18 | /*PushInfo 推送信息*/ | 19 | /*PushInfo 推送信息*/ |
| @@ -24,6 +25,8 @@ type PushInfoRequest struct { | @@ -24,6 +25,8 @@ type PushInfoRequest struct { | ||
| 24 | Title string `json:"title" valid:"Required"` | 25 | Title string `json:"title" valid:"Required"` |
| 25 | Content string `json:"content" valid:"Required"` | 26 | Content string `json:"content" valid:"Required"` |
| 26 | Ext map[string]interface{} `json:"ext"` //key->transData:透传数据 | 27 | Ext map[string]interface{} `json:"ext"` //key->transData:透传数据 |
| 28 | + | ||
| 29 | + ActualReceivers []int64 `json:"-"` //实际发送的人员id列表 | ||
| 27 | } | 30 | } |
| 28 | 31 | ||
| 29 | /*UpdateDevice 更新设备*/ | 32 | /*UpdateDevice 更新设备*/ |
| @@ -46,23 +46,23 @@ func (notify *GetuiNotification) Init(options ...push.Option) error { | @@ -46,23 +46,23 @@ func (notify *GetuiNotification) Init(options ...push.Option) error { | ||
| 46 | notify.retry = 3 | 46 | notify.retry = 3 |
| 47 | return nil | 47 | return nil |
| 48 | } | 48 | } |
| 49 | -func (notify *GetuiNotification) Send(option map[string]interface{}) (err error) { | 49 | +func (notify *GetuiNotification) Send(option map[string]interface{}) (rsp map[string]interface{}, err error) { |
| 50 | retry := 1 | 50 | retry := 1 |
| 51 | for { | 51 | for { |
| 52 | switch notify.Options.PushType { | 52 | switch notify.Options.PushType { |
| 53 | case push.PushToSingle: | 53 | case push.PushToSingle: |
| 54 | - err = notify.pushToSingle(option) | 54 | + rsp, err = notify.pushToSingle(option) |
| 55 | case push.PushToList: | 55 | case push.PushToList: |
| 56 | - err = notify.pushToList(option) | 56 | + rsp, err = notify.pushToList(option) |
| 57 | default: | 57 | default: |
| 58 | - err = notify.pushToSingle(option) | 58 | + rsp, err = notify.pushToSingle(option) |
| 59 | } | 59 | } |
| 60 | if err == nil { | 60 | if err == nil { |
| 61 | break | 61 | break |
| 62 | } | 62 | } |
| 63 | //重试 | 63 | //重试 |
| 64 | if err != nil && retry > notify.retry { | 64 | if err != nil && retry > notify.retry { |
| 65 | - return err | 65 | + return |
| 66 | } | 66 | } |
| 67 | log.Error(fmt.Sprintf("【个推】 重试:%v 失败:%v", retry, err)) | 67 | log.Error(fmt.Sprintf("【个推】 重试:%v 失败:%v", retry, err)) |
| 68 | retry++ | 68 | retry++ |
| @@ -70,14 +70,15 @@ func (notify *GetuiNotification) Send(option map[string]interface{}) (err error) | @@ -70,14 +70,15 @@ func (notify *GetuiNotification) Send(option map[string]interface{}) (err error) | ||
| 70 | break | 70 | break |
| 71 | } | 71 | } |
| 72 | } | 72 | } |
| 73 | - return err | 73 | + return |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | //pushToSingle 单推 | 76 | //pushToSingle 单推 |
| 77 | -func (notify *GetuiNotification) pushToSingle(option map[string]interface{}) (err error) { | 77 | +func (notify *GetuiNotification) pushToSingle(option map[string]interface{}) (rsp map[string]interface{}, err error) { |
| 78 | var token string | 78 | var token string |
| 79 | + rsp = make(map[string]interface{}) | ||
| 79 | if token, err = notify.GetAuthToken(); err != nil { | 80 | if token, err = notify.GetAuthToken(); err != nil { |
| 80 | - return err | 81 | + return |
| 81 | } | 82 | } |
| 82 | 83 | ||
| 83 | var ( | 84 | var ( |
| @@ -89,29 +90,31 @@ func (notify *GetuiNotification) pushToSingle(option map[string]interface{}) (er | @@ -89,29 +90,31 @@ func (notify *GetuiNotification) pushToSingle(option map[string]interface{}) (er | ||
| 89 | notify.Request.Header("authtoken", token) | 90 | notify.Request.Header("authtoken", token) |
| 90 | notify.Request.JSONBody(m) | 91 | notify.Request.JSONBody(m) |
| 91 | if err = notify.Request.ToJSON(&result); err != nil { | 92 | if err = notify.Request.ToJSON(&result); err != nil { |
| 92 | - return err | 93 | + return |
| 93 | } | 94 | } |
| 95 | + rsp[push.TaskID] = result.TaskId | ||
| 94 | notify.print(url, m, result, result) | 96 | notify.print(url, m, result, result) |
| 95 | if err = handleResult(url, result); err != nil { | 97 | if err = handleResult(url, result); err != nil { |
| 96 | - return err | 98 | + return |
| 97 | } | 99 | } |
| 98 | - return nil | 100 | + return |
| 99 | } | 101 | } |
| 100 | 102 | ||
| 101 | //pushToList 群推 | 103 | //pushToList 群推 |
| 102 | //步骤1.获取token | 104 | //步骤1.获取token |
| 103 | //步骤2.save_list_body保存消息共同体 | 105 | //步骤2.save_list_body保存消息共同体 |
| 104 | //步骤3.push_list | 106 | //步骤3.push_list |
| 105 | -func (notify *GetuiNotification) pushToList(option map[string]interface{}) (err error) { | 107 | +func (notify *GetuiNotification) pushToList(option map[string]interface{}) (rsp map[string]interface{}, err error) { |
| 106 | var ( | 108 | var ( |
| 107 | token string | 109 | token string |
| 108 | taskId string | 110 | taskId string |
| 109 | ) | 111 | ) |
| 112 | + rsp = make(map[string]interface{}) | ||
| 110 | if token, err = notify.GetAuthToken(); err != nil { | 113 | if token, err = notify.GetAuthToken(); err != nil { |
| 111 | - return err | 114 | + return |
| 112 | } | 115 | } |
| 113 | if taskId, err = notify.saveListBody(token, option); err != nil { | 116 | if taskId, err = notify.saveListBody(token, option); err != nil { |
| 114 | - return err | 117 | + return |
| 115 | } | 118 | } |
| 116 | var ( | 119 | var ( |
| 117 | result *Result | 120 | result *Result |
| @@ -130,13 +133,14 @@ func (notify *GetuiNotification) pushToList(option map[string]interface{}) (err | @@ -130,13 +133,14 @@ func (notify *GetuiNotification) pushToList(option map[string]interface{}) (err | ||
| 130 | notify.Request.Header("authtoken", token) | 133 | notify.Request.Header("authtoken", token) |
| 131 | notify.Request.JSONBody(m) | 134 | notify.Request.JSONBody(m) |
| 132 | if err = notify.Request.ToJSON(&result); err != nil { | 135 | if err = notify.Request.ToJSON(&result); err != nil { |
| 133 | - return err | 136 | + return |
| 134 | } | 137 | } |
| 138 | + rsp[push.TaskID] = result.TaskId | ||
| 135 | notify.print(url, m, result, result) | 139 | notify.print(url, m, result, result) |
| 136 | if err = handleResult(url, result); err != nil { | 140 | if err = handleResult(url, result); err != nil { |
| 137 | - return err | 141 | + return |
| 138 | } | 142 | } |
| 139 | - return nil | 143 | + return |
| 140 | } | 144 | } |
| 141 | 145 | ||
| 142 | //saveListBody 保存消息共同体 | 146 | //saveListBody 保存消息共同体 |
| 1 | package push | 1 | package push |
| 2 | 2 | ||
| 3 | +const ( | ||
| 4 | + TaskID = "task_id" | ||
| 5 | +) | ||
| 6 | + | ||
| 3 | type INotification interface { | 7 | type INotification interface { |
| 4 | Init(option ...Option) error | 8 | Init(option ...Option) error |
| 5 | - Send(option map[string]interface{}) error | 9 | + Send(option map[string]interface{}) (map[string]interface{}, error) |
| 6 | } | 10 | } |
| @@ -75,7 +75,7 @@ func (repository *PushDeviceRepository) UpdateDevice(uid int64, clientId, device | @@ -75,7 +75,7 @@ func (repository *PushDeviceRepository) UpdateDevice(uid int64, clientId, device | ||
| 75 | return nil | 75 | return nil |
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | -func (repository *PushDeviceRepository) SaveLog(request *domain.PushInfoRequest, err error) error { | 78 | +func (repository *PushDeviceRepository) SaveLog(request *domain.PushInfoRequest, extData map[string]interface{}, err error) error { |
| 79 | var ( | 79 | var ( |
| 80 | result int | 80 | result int |
| 81 | errmsg string | 81 | errmsg string |
| @@ -88,15 +88,16 @@ func (repository *PushDeviceRepository) SaveLog(request *domain.PushInfoRequest, | @@ -88,15 +88,16 @@ func (repository *PushDeviceRepository) SaveLog(request *domain.PushInfoRequest, | ||
| 88 | } | 88 | } |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | - sql := `INSERT INTO push_log(msg_type,project,receivers,message,result,err_msg,create_at)VALUES(?,?,?,?,?,?,now())` | 91 | + sql := `INSERT INTO push_log(msg_type,project,receivers,message,result,err_msg,create_at,ext_data)VALUES(?,?,?,?,?,?,now(),?)` |
| 92 | o := orm.NewOrm() | 92 | o := orm.NewOrm() |
| 93 | _, err = o.Raw(sql, | 93 | _, err = o.Raw(sql, |
| 94 | request.Type, | 94 | request.Type, |
| 95 | request.ProjectKey, | 95 | request.ProjectKey, |
| 96 | - utils.JsonAssertString(request.Receivers), | 96 | + utils.JsonAssertString(request.ActualReceivers), |
| 97 | utils.JsonAssertString(request), | 97 | utils.JsonAssertString(request), |
| 98 | result, | 98 | result, |
| 99 | errmsg, | 99 | errmsg, |
| 100 | + utils.JsonAssertString(extData), | ||
| 100 | ).Exec() | 101 | ).Exec() |
| 101 | if err != nil { | 102 | if err != nil { |
| 102 | return err | 103 | return err |
-
请 注册 或 登录 后发表评论