Bläddra i källkod

Merge branch 'feature/gn3.2_send_msg' of eta_gn_server/eta_api into master

xyxie 2 dagar sedan
förälder
incheckning
617445c6b7
3 ändrade filer med 65 tillägg och 14 borttagningar
  1. 46 9
      controllers/report_ice_message.go
  2. 4 5
      controllers/report_v2.go
  3. 15 0
      models/report_message_config.go

+ 46 - 9
controllers/report_ice_message.go

@@ -285,6 +285,7 @@ func (c *ReportIceMessageController) IceMsgPush() {
 	var pptInfo *models.PptV2
 	var classifyName string
 	var url string
+	successAdminMap := make(map[int]struct{})
 	// 根据类型判断
 	if classifyType == 1 {// 推送研报
 		if req.ReportId <= 0 {
@@ -318,6 +319,17 @@ func (c *ReportIceMessageController) IceMsgPush() {
 		title = reportInfo.Title
 		content = reportInfo.Title
 		url = reportInfo.DetailPdfUrl
+
+		// 查询当前这篇报告成功的推送记录
+		recordObj := new(models.ReportMessageRecord)
+		adminIds, err := recordObj.GetSuccessRecordAdminIdsByReportId(req.ReportId, title, content, url)
+		if err != nil {
+			br.Msg = "查询失败"
+			br.ErrMsg = "查询失败,Err:" + err.Error()
+		}
+		for _, adminId := range adminIds {
+			successAdminMap[adminId] = struct{}{}
+		}
 	} else if classifyType == 2 {// 推送PPT
 		if req.PptId <= 0 {
 			br.Msg = "PPTID不能为空"
@@ -337,6 +349,17 @@ func (c *ReportIceMessageController) IceMsgPush() {
 		title = pptInfo.Title
 		content = pptInfo.Title
 		url = pptInfo.PptxUrl
+
+		// 查询当前这篇报告成功的推送记录
+		recordObj := new(models.ReportMessageRecord)
+		adminIds, err := recordObj.GetSuccessRecordAdminIdsByPptId(req.PptId, title, content, url)
+		if err != nil {
+			br.Msg = "查询失败"
+			br.ErrMsg = "查询失败,Err:" + err.Error()
+		}
+		for _, adminId := range adminIds {
+			successAdminMap[adminId] = struct{}{}
+		}
 	}
 	// 获取分类名称
 	classify, err := models.GetClassifyById(sendClassifyId)
@@ -389,8 +412,13 @@ func (c *ReportIceMessageController) IceMsgPush() {
 	// 生成推送记录
 	recordList := make([]*models.ReportMessageRecord, 0)
 	successCount := 0
+	needPush := false
     for _, item := range adminList {
 		if item.EmployeeId != "" {
+			if _, ok := successAdminMap[int(item.AdminId)]; ok {
+				continue
+			}
+			needPush = true
 			// 推送模版消息
 			sendStatus := 1
 			// 生成taskId
@@ -416,17 +444,21 @@ func (c *ReportIceMessageController) IceMsgPush() {
 				CreateTime: time.Now(),
 				ModifyTime: time.Now(),
 				TaskId: taskId,
+				Content: content,
+				Url: url,
 			}
 			recordList = append(recordList, pushRecord)
 		}
 	}
 	
-	recordObj := new(models.ReportMessageRecord)
-	err = recordObj.BatchAdd(recordList)
-	if err != nil {
-		br.Msg = "推送失败"
-		br.ErrMsg = "推送失败,Err:" + err.Error()
-		return
+	if len(recordList) > 0 {
+		recordObj := new(models.ReportMessageRecord)
+		err = recordObj.BatchAdd(recordList)
+		if err != nil {
+			br.Msg = "推送失败"
+			br.ErrMsg = "推送失败,Err:" + err.Error()
+			return
+		}
 	}
 
 	if successCount > 0 {
@@ -458,9 +490,14 @@ func (c *ReportIceMessageController) IceMsgPush() {
 			MsgSendTime: sendTime,
 		}
 	}else{
-		br.Msg = "推送失败"
-		br.ErrMsg = "推送失败,Err:" + err.Error()
-		br.Ret = 408
+		if !needPush {
+			br.Msg = "已推送成功,请勿重复推送!"
+			return
+		}else{
+			br.Msg = "推送失败"
+			br.ErrMsg = "推送失败,Err:" + err.Error()
+			br.Ret = 408
+		}
 	}
 }
 

+ 4 - 5
controllers/report_v2.go

@@ -307,6 +307,10 @@ func (this *ReportController) ListReport() {
 	}
 
 	for _, item := range list {
+		// 判断分类名称
+		if item.ClassifyIdThird != 0 && utils.InArrayByStr(utils.REPORT_ICE_MSG_CLASSIFY_NAMES, item.ClassifyNameThird) && (item.State == 2 || item.State == 6) && item.DetailPdfUrl != "" {
+			item.CanSendMsg = true
+		}
 		/*key := fmt.Sprint(`crm:report:edit:`, item.Id)
 		opUserId, _ := utils.Rc.RedisInt(key)
 		//如果当前没有人操作,获取当前操作人是本人,那么编辑按钮可用
@@ -336,11 +340,6 @@ func (this *ReportController) ListReport() {
 		} else {
 			item.Editor = markStatus.Editor
 		}
-
-		// 判断分类名称
-		if item.ClassifyIdThird != 0 && utils.InArrayByStr(utils.REPORT_ICE_MSG_CLASSIFY_NAMES, item.ClassifyNameThird) && (item.State == 2 || item.State == 6) && item.DetailPdfUrl != "" {
-			item.CanSendMsg = true
-		}
 	}
 
 	page := paging.GetPaging(currentIndex, pageSize, total)

+ 15 - 0
models/report_message_config.go

@@ -130,6 +130,8 @@ type ReportMessageRecord struct {
 	TaskId         string    `gorm:"column:task_id" description:"任务ID"`
 	CreateTime     time.Time `gorm:"column:create_time" description:"创建时间"`
 	ModifyTime     time.Time `gorm:"column:modify_time" description:"修改时间"`
+	Content        string    `gorm:"column:content" description:"消息内容"`
+	Url            string    `gorm:"column:url" description:"消息URL"`
 }
 
 type ReportIceMsgRecordListItem struct {
@@ -232,3 +234,16 @@ func (m *ReportMessageConfig) GetListByClassifyIdList(classifyIdList []int) (lis
 	return
 }
 
+// 查询消息推送记录
+func (m *ReportMessageRecord) GetSuccessRecordAdminIdsByReportId(reportId int, title, content, url string) (adminIds []int, err error) {
+	sql := fmt.Sprintf(`SELECT DISTINCT receive_admin_id FROM %s WHERE report_id = ? AND report_title = ? AND content = ? AND url = ? AND status = 1`, m.TableName())
+	err = global.DmSQL["rddp"].Raw(sql, reportId, title, content, url).Scan(&adminIds).Error
+	return
+}
+
+// 查询消息推送记录
+func (m *ReportMessageRecord) GetSuccessRecordAdminIdsByPptId(pptId int, title, content, url string) (adminIds []int, err error) {
+	sql := fmt.Sprintf(`SELECT DISTINCT receive_admin_id FROM %s WHERE ppt_id = ? AND report_title = ? AND content = ? AND url = ? AND status = 1`, m.TableName())
+	err = global.DmSQL["rddp"].Raw(sql, pptId, title, content, url).Scan(&adminIds).Error
+	return
+}