|
@@ -78,17 +78,18 @@ type IEnglishEmailSend interface {
|
|
|
|
|
|
// EnglishReportSendEmailRequest 英文研报-推送邮件请求体
|
|
// EnglishReportSendEmailRequest 英文研报-推送邮件请求体
|
|
type EnglishReportSendEmailRequest struct {
|
|
type EnglishReportSendEmailRequest struct {
|
|
- ReportId int `description:"英文报告ID"`
|
|
|
|
- EmailId int `description:"邮箱ID"`
|
|
|
|
- Email string `description:"邮箱地址"`
|
|
|
|
- Subject string `description:"邮件主题"`
|
|
|
|
- FromAlias string `description:"发信人昵称"`
|
|
|
|
- ReportTitle string `description:"报告标题"`
|
|
|
|
- ReportAbstract string `description:"报告摘要"`
|
|
|
|
- ReportContent string `description:"报告内容"`
|
|
|
|
- ReportShareLink string `description:"报告分享链接"`
|
|
|
|
- ReportTime string `description:"报告时间"`
|
|
|
|
- HtmlBody string `description:"模板内容主体"`
|
|
|
|
|
|
+ ReportId int `description:"英文报告ID"`
|
|
|
|
+ EmailId int `description:"邮箱ID"`
|
|
|
|
+ Email string `description:"邮箱地址"`
|
|
|
|
+ Subject string `description:"邮件主题"`
|
|
|
|
+ FromAlias string `description:"发信人昵称"`
|
|
|
|
+ ReportTitle string `description:"报告标题"`
|
|
|
|
+ ReportAbstract string `description:"报告摘要"`
|
|
|
|
+ ReportContent string `description:"报告内容"`
|
|
|
|
+ ReportShareLink string `description:"报告分享链接"`
|
|
|
|
+ ReportTime string `description:"报告时间"`
|
|
|
|
+ HtmlBody string `description:"模板内容主体"`
|
|
|
|
+ EmailLog *models.EnglishReportEmailLog `description:"日志记录"`
|
|
}
|
|
}
|
|
|
|
|
|
// EnglishReportSendEmailResult 英文研报-推送邮件响应体
|
|
// EnglishReportSendEmailResult 英文研报-推送邮件响应体
|
|
@@ -106,15 +107,18 @@ type EnglishReportSendEmailResult struct {
|
|
func BatchSendAliEnglishReportEmail(list []*EnglishReportSendEmailRequest) (err error) {
|
|
func BatchSendAliEnglishReportEmail(list []*EnglishReportSendEmailRequest) (err error) {
|
|
defer func() {
|
|
defer func() {
|
|
if err != nil {
|
|
if err != nil {
|
|
- go alarm_msg.SendAlarmMsg("阿里云群发英文研报邮件失败, Err: "+err.Error(), 3)
|
|
|
|
|
|
+ tips := fmt.Sprintf("阿里云群发英文研报邮件失败 err: %s\n", err.Error())
|
|
|
|
+ utils.FileLog.Info(tips)
|
|
|
|
+ fmt.Println(tips)
|
|
|
|
+ go alarm_msg.SendAlarmMsg(tips, 3)
|
|
}
|
|
}
|
|
}()
|
|
}()
|
|
if len(list) == 0 {
|
|
if len(list) == 0 {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
requestMap := make(map[int]*EnglishReportSendEmailRequest, 0)
|
|
requestMap := make(map[int]*EnglishReportSendEmailRequest, 0)
|
|
- for i := range list {
|
|
|
|
- requestMap[list[i].EmailId] = list[i]
|
|
|
|
|
|
+ for _, v := range list {
|
|
|
|
+ requestMap[v.EmailId] = v
|
|
}
|
|
}
|
|
|
|
|
|
// 请求阿里云接口批量推送
|
|
// 请求阿里云接口批量推送
|
|
@@ -128,29 +132,30 @@ func BatchSendAliEnglishReportEmail(list []*EnglishReportSendEmailRequest) (err
|
|
// 返回的结果更新日志
|
|
// 返回的结果更新日志
|
|
resendList := make([]*EnglishReportSendEmailRequest, 0)
|
|
resendList := make([]*EnglishReportSendEmailRequest, 0)
|
|
failLogIds := make([]int, 0)
|
|
failLogIds := make([]int, 0)
|
|
- updateCols := []string{"SendData", "Result", "SendStatus", "ErrMsg"}
|
|
|
|
- for i := range resultList {
|
|
|
|
- var cond string
|
|
|
|
- var pars []interface{}
|
|
|
|
- cond = ` AND is_deleted = 0 AND report_id = ? AND email_id = ? AND source = ? AND send_status = ?`
|
|
|
|
- pars = append(pars, resultList[i].ReportId, resultList[i].EmailId, models.EnglishReportEmailLogSourceAli, models.EnglishReportEmailLogStatusIng)
|
|
|
|
- l, e := models.GetEnglishReportEmailLog(cond, pars)
|
|
|
|
- if e != nil {
|
|
|
|
|
|
+ updateLogs := make([]*models.EnglishReportEmailLog, 0)
|
|
|
|
+ for _, v := range resultList {
|
|
|
|
+ req := requestMap[v.EmailId]
|
|
|
|
+ if req == nil {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ l := req.EmailLog
|
|
|
|
+ if l == nil {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
- l.SendData = resultList[i].SendData
|
|
|
|
- l.Result = resultList[i].ResultData
|
|
|
|
- if resultList[i].Ok {
|
|
|
|
|
|
+
|
|
|
|
+ //l.SendData = v.SendData
|
|
|
|
+ l.Result = v.ResultData
|
|
|
|
+ if v.Ok {
|
|
l.SendStatus = models.EnglishReportEmailLogStatusSuccess
|
|
l.SendStatus = models.EnglishReportEmailLogStatusSuccess
|
|
} else {
|
|
} else {
|
|
l.SendStatus = models.EnglishReportEmailLogStatusFail
|
|
l.SendStatus = models.EnglishReportEmailLogStatusFail
|
|
failLogIds = append(failLogIds, l.Id)
|
|
failLogIds = append(failLogIds, l.Id)
|
|
- if requestMap[resultList[i].EmailId] != nil {
|
|
|
|
- resendList = append(resendList, requestMap[resultList[i].EmailId])
|
|
|
|
|
|
+ if requestMap[v.EmailId] != nil {
|
|
|
|
+ resendList = append(resendList, requestMap[v.EmailId])
|
|
}
|
|
}
|
|
// 取出错误信息
|
|
// 取出错误信息
|
|
r := new(AliyunEmailResult)
|
|
r := new(AliyunEmailResult)
|
|
- if e = json.Unmarshal([]byte(resultList[i].ResultData), &r); e != nil {
|
|
|
|
|
|
+ if e = json.Unmarshal([]byte(v.ResultData), &r); e != nil {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
rd := new(AliyunEmailResultData)
|
|
rd := new(AliyunEmailResultData)
|
|
@@ -160,23 +165,40 @@ func BatchSendAliEnglishReportEmail(list []*EnglishReportSendEmailRequest) (err
|
|
}
|
|
}
|
|
l.ErrMsg = rd.Message
|
|
l.ErrMsg = rd.Message
|
|
}
|
|
}
|
|
- if e = l.Update(updateCols); e != nil {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
|
|
+ updateLogs = append(updateLogs, l)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 更新日志
|
|
|
|
+ logOb := new(models.EnglishReportEmailLog)
|
|
|
|
+ if e = logOb.MultiUpdateResult(updateLogs); e != nil {
|
|
|
|
+ err = fmt.Errorf("批量更新日志信息失败, Err: " + e.Error())
|
|
|
|
+ return
|
|
}
|
|
}
|
|
|
|
|
|
// 推送失败的重新腾讯云, 若腾讯云也失败将不再自动重推, 用户手动去重推
|
|
// 推送失败的重新腾讯云, 若腾讯云也失败将不再自动重推, 用户手动去重推
|
|
if len(resendList) > 0 && len(failLogIds) > 0 {
|
|
if len(resendList) > 0 && len(failLogIds) > 0 {
|
|
- _ = ResendTencentEnglishReportEmail(resendList, failLogIds)
|
|
|
|
|
|
+ hasFail, _ := ResendTencentEnglishReportEmail(resendList, failLogIds)
|
|
|
|
+ //fmt.Printf("hasFail: %v", hasFail)
|
|
|
|
+ // 存在发送失败则更新报告标识
|
|
|
|
+ if hasFail {
|
|
|
|
+ if e = models.UpdateEnglishReportEmailHasFail(list[0].ReportId); e != nil {
|
|
|
|
+ err = fmt.Errorf("UpdateEnglishReportEmailHasFail err: %s", e.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
// ResendTencentEnglishReportEmail 腾讯云邮件重新推送
|
|
// ResendTencentEnglishReportEmail 腾讯云邮件重新推送
|
|
-func ResendTencentEnglishReportEmail(resendList []*EnglishReportSendEmailRequest, failLogIds []int) (err error) {
|
|
|
|
|
|
+func ResendTencentEnglishReportEmail(resendList []*EnglishReportSendEmailRequest, failLogIds []int) (hasFail bool, err error) {
|
|
defer func() {
|
|
defer func() {
|
|
if err != nil {
|
|
if err != nil {
|
|
- go alarm_msg.SendAlarmMsg("腾讯云重发英文研报邮件失败, Err: "+err.Error(), 3)
|
|
|
|
|
|
+ hasFail = true
|
|
|
|
+ tips := fmt.Sprintf("腾讯云重发英文研报邮件失败 err: %s\n", err.Error())
|
|
|
|
+ utils.FileLog.Info(tips)
|
|
|
|
+ fmt.Println(tips)
|
|
|
|
+ go alarm_msg.SendAlarmMsg(tips, 3)
|
|
}
|
|
}
|
|
}()
|
|
}()
|
|
if len(resendList) == 0 || len(failLogIds) == 0 {
|
|
if len(resendList) == 0 || len(failLogIds) == 0 {
|
|
@@ -194,61 +216,59 @@ func ResendTencentEnglishReportEmail(resendList []*EnglishReportSendEmailRequest
|
|
// 写入新的日志
|
|
// 写入新的日志
|
|
nowTime := time.Now().Local()
|
|
nowTime := time.Now().Local()
|
|
logData := make([]*models.EnglishReportEmailLog, 0)
|
|
logData := make([]*models.EnglishReportEmailLog, 0)
|
|
- for i := range resendList {
|
|
|
|
- sendByte, e := json.Marshal(resendList[i])
|
|
|
|
- if e != nil {
|
|
|
|
- err = errors.New("sendByte json.Marshal Err, Err: " + e.Error())
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- logData = append(logData, &models.EnglishReportEmailLog{
|
|
|
|
- ReportId: resendList[i].ReportId,
|
|
|
|
- EmailId: resendList[i].EmailId,
|
|
|
|
- Email: resendList[i].Email,
|
|
|
|
- SendData: string(sendByte),
|
|
|
|
|
|
+ logMap := make(map[int]*models.EnglishReportEmailLog, 0)
|
|
|
|
+ for _, v := range resendList {
|
|
|
|
+ logItem := &models.EnglishReportEmailLog{
|
|
|
|
+ ReportId: v.ReportId,
|
|
|
|
+ EmailId: v.EmailId,
|
|
|
|
+ Email: v.Email,
|
|
Source: models.EnglishReportEmailLogSourceTencent,
|
|
Source: models.EnglishReportEmailLogSourceTencent,
|
|
SendStatus: models.EnglishReportEmailLogStatusIng,
|
|
SendStatus: models.EnglishReportEmailLogStatusIng,
|
|
CreateTime: nowTime,
|
|
CreateTime: nowTime,
|
|
- })
|
|
|
|
|
|
+ }
|
|
|
|
+ logData = append(logData, logItem)
|
|
|
|
+ logMap[v.EmailId] = logItem
|
|
}
|
|
}
|
|
- emailLog := new(models.EnglishReportEmailLog)
|
|
|
|
- if e := emailLog.InsertMulti(logData); e != nil {
|
|
|
|
- err = errors.New("批量写入群发邮件日志失败, Err: " + e.Error())
|
|
|
|
- return
|
|
|
|
|
|
+ for _, v := range logData {
|
|
|
|
+ if e := v.Create(); e != nil {
|
|
|
|
+ err = fmt.Errorf("写入群发邮件日志失败, err: %s", e.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
// 请求腾讯云
|
|
// 请求腾讯云
|
|
- tecentEmail := new(TencentEmail)
|
|
|
|
- resultList, e := tecentEmail.BatchSendEmail(resendList)
|
|
|
|
|
|
+ tencentEmail := new(TencentEmail)
|
|
|
|
+ resultList, e := tencentEmail.BatchSendEmail(resendList)
|
|
if e != nil {
|
|
if e != nil {
|
|
err = e
|
|
err = e
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- updateCols := []string{"SendData", "Result", "SendStatus", "ErrMsg"}
|
|
|
|
- for i := range resultList {
|
|
|
|
- var cond string
|
|
|
|
- var pars []interface{}
|
|
|
|
- cond = ` AND is_deleted = 0 AND report_id = ? AND email_id = ? AND source = ? AND send_status = ?`
|
|
|
|
- pars = append(pars, resultList[i].ReportId, resultList[i].EmailId, models.EnglishReportEmailLogSourceTencent, models.EnglishReportEmailLogStatusIng)
|
|
|
|
- l, e := models.GetEnglishReportEmailLog(cond, pars)
|
|
|
|
- if e != nil {
|
|
|
|
|
|
+ updateLogs := make([]*models.EnglishReportEmailLog, 0)
|
|
|
|
+ for _, v := range resultList {
|
|
|
|
+ l := logMap[v.EmailId]
|
|
|
|
+ if l == nil {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
- l.SendData = resultList[i].SendData
|
|
|
|
- l.Result = resultList[i].ResultData
|
|
|
|
- if resultList[i].Ok {
|
|
|
|
|
|
+ l.Result = v.ResultData
|
|
|
|
+ if v.Ok {
|
|
l.SendStatus = models.EnglishReportEmailLogStatusSuccess
|
|
l.SendStatus = models.EnglishReportEmailLogStatusSuccess
|
|
} else {
|
|
} else {
|
|
l.SendStatus = models.EnglishReportEmailLogStatusFail
|
|
l.SendStatus = models.EnglishReportEmailLogStatusFail
|
|
r := new(TencentEmailResult)
|
|
r := new(TencentEmailResult)
|
|
- if e = json.Unmarshal([]byte(resultList[i].ResultData), &r); e != nil {
|
|
|
|
|
|
+ if e = json.Unmarshal([]byte(v.ResultData), &r); e != nil {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
l.ErrMsg = r.Message
|
|
l.ErrMsg = r.Message
|
|
|
|
+ hasFail = true
|
|
}
|
|
}
|
|
- if e = l.Update(updateCols); e != nil {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
|
|
+ updateLogs = append(updateLogs, l)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 更新日志
|
|
|
|
+ logOb := new(models.EnglishReportEmailLog)
|
|
|
|
+ if e = logOb.MultiUpdateResult(updateLogs); e != nil {
|
|
|
|
+ err = fmt.Errorf("批量更新日志信息失败, Err: " + e.Error())
|
|
|
|
+ return
|
|
}
|
|
}
|
|
return
|
|
return
|
|
}
|
|
}
|