Sfoglia il codice sorgente

带问发送邮件附件

xingzai 3 anni fa
parent
commit
bbf2d89306
4 ha cambiato i file con 326 aggiunte e 0 eliminazioni
  1. 2 0
      controllers/article.go
  2. 79 0
      models/activity.go
  3. 239 0
      services/activity.go
  4. 6 0
      services/task.go

+ 2 - 0
controllers/article.go

@@ -224,9 +224,11 @@ func (this *ArticleController) Detail() {
 			br.ErrMsg = "获取销售数据失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
 			return
 		}
+		fmt.Println(detail.SellerAndMobile)
 		if detail.ArticleId >= utils.SummaryArticleId && strings.Contains(detail.SellerAndMobile, "-") {
 			strnum := strings.Index(detail.SellerAndMobile, "-")
 			detail.SellerAndMobile = detail.SellerAndMobile[0:strnum]
+			fmt.Println(detail.SellerAndMobile)
 			if strnum > 0 {
 				nickName := detail.SellerAndMobile[0:strnum]
 				sellerAndMobile := &models.SellerRep{

+ 79 - 0
models/activity.go

@@ -403,6 +403,13 @@ type SignupExportRep struct {
 	SellerName     string `description:"销售姓名"`
 }
 
+type ActivityMsgExportRep struct {
+	RealName    string `description:"姓名"`
+	CompanyName string `description:"公司名称"`
+	Content     string `description:"内容"`
+	CreateTime  string `description:"提交时间"`
+}
+
 func GetSignupExport(activityId int) (item []*SignupExportRep, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT s.*  ,a.is_limit_people,u.real_name,
@@ -448,3 +455,75 @@ func GetActivityLabelListAll(condition, sortTime string, pars []interface{}, sta
 type GetCygxActivityLabelListRep struct {
 	List []*CygxActivityLabelList
 }
+
+//获取研选系列专家电话会,会前1小时,满足推送的活动ID数量
+func GetCountActivityResearchToSendFile(condition, endDate string) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	COUNT(1) count
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_help_ask AS k ON k.activity_id = a.activity_id 
+WHERE
+	1 = 1 ` + condition + `
+	AND a.is_send_ask_msg = 0 
+	AND a.activity_time <= ? 
+	AND a.activity_time >= NOW()`
+	err = o.Raw(sql, endDate).QueryRow(&count)
+	return
+}
+
+//获取研选系列专家电话会,会前1小时,满足推送的活动ID
+func GetActivityResearchToSendFile(condition, endDate string) (items []*ActivityIdRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	* 
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_help_ask AS k ON k.activity_id = a.activity_id 
+WHERE
+	1 = 1 ` + condition + `
+	AND a.is_send_ask_msg = 0 
+	AND a.activity_time <= ? 
+	AND a.activity_time >= NOW() 
+GROUP BY
+	a.activity_id `
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+func GetActivityMsgExport(activityId int) (item []*ActivityMsgExportRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			k.*,
+			u.real_name 
+			FROM
+			cygx_activity_help_ask AS k
+			LEFT JOIN wx_user AS u ON u.user_id = k.user_id 
+			WHERE
+			k.activity_id = ? 
+			GROUP BY
+			k.ask_id`
+	_, err = o.Raw(sql, activityId).QueryRows(&item)
+	return
+}
+
+//修改文件带问消息是否推送状态
+func UPdateActivityMsgToSendFile(activityId int) (err error) {
+	sql := ` UPDATE cygx_activity SET  is_send_ask_msg= 1  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}
+
+type AskEmailRep struct {
+	Name  string `description:"姓名"`
+	Email string `description:"邮箱"`
+}
+
+func GetAskEmail() (item []*AskEmailRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_ask_email`
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}

+ 239 - 0
services/activity.go

@@ -393,3 +393,242 @@ func GetHavePower(activityInfo *models.ActivityDetail, permissionStr, companyDet
 	}
 	return
 }
+
+//研选系列专家电话会,会前1小时将问题列表发送给邮箱
+func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
+	var msg string
+	var touser string
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
+		}
+		if msg != "" {
+			fmt.Println(msg)
+			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
+		}
+	}()
+	endDate := time.Now().Add(+time.Minute * 60).Format("2006-01-02 15:04:05")
+	condition := `AND  a.activity_type_id = 1 AND a.chart_permission_name = '研选' `
+	total, err := models.GetCountActivityResearchToSendFile(condition, endDate)
+	if total == 0 {
+		fmt.Println("发送附件完成0")
+		return nil
+	}
+	if err != nil {
+		msg = "发送附件模版消息失败 Err:" + err.Error()
+		return
+	}
+	listActivity, err := models.GetActivityResearchToSendFile(condition, endDate)
+	if err != nil {
+		msg = "发送附件模版消息失败 Err:" + err.Error()
+		return
+	}
+	for _, v := range listActivity {
+		fmt.Println(v.ActivityId)
+		activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
+		if activityInfo == nil {
+			msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
+			return
+		}
+		list, errFile := models.GetActivityMsgExport(v.ActivityId)
+		if errFile != nil {
+			msg = "获取失败,Err:" + errFile.Error()
+			return
+		}
+		//创建excel
+		dir, errFile := os.Executable()
+		exPath := filepath.Dir(dir)
+		downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + utils.GetRandDigit(5) + ".xlsx"
+		xlsxFile := xlsx.NewFile()
+		if errFile != nil {
+			msg = "生成文件失败Err:" + errFile.Error()
+			return
+		}
+		style := xlsx.NewStyle()
+		alignment := xlsx.Alignment{
+			Horizontal: "center",
+			Vertical:   "center",
+			WrapText:   true,
+		}
+		style.Alignment = alignment
+		style.ApplyAlignment = true
+		sheet, errFile := xlsxFile.AddSheet("外呼名单")
+		if errFile != nil {
+			msg = "新增Sheet失败,Err:" + errFile.Error()
+			return
+		}
+		//标头
+		rowTitle := sheet.AddRow()
+		cellA := rowTitle.AddCell()
+		cellA.Value = "姓名"
+		cellB := rowTitle.AddCell()
+		cellB.Value = "公司名称"
+		cellC := rowTitle.AddCell()
+		cellC.Value = "问题"
+		cellD := rowTitle.AddCell()
+		cellD.Value = "提交时间"
+
+		for _, item := range list {
+			row := sheet.AddRow()
+			cellA := row.AddCell()
+			cellA.Value = item.RealName
+			cellB := row.AddCell()
+			cellB.Value = item.CompanyName
+			cellC := row.AddCell()
+			cellC.Value = item.Content
+			cellD := row.AddCell()
+			cellD.Value = item.CreateTime
+		}
+		errFile = xlsxFile.Save(downLoadnFilePath)
+		if errFile != nil {
+			msg = "保存文件失败Err:" + errFile.Error()
+			return
+		}
+		title := activityInfo.ActivityName + "-活动带问"
+		content := "活动带问详情"
+		fileName := downLoadnFilePath
+		touser = "cxzhang@hzinsights.com;jhwang@hzinsights.com;tshen@hzinsights.com"
+		sendResult := utils.SendEmailByHongze(title, content, touser, fileName, title+".xlsx")
+		if sendResult {
+			errFile = models.UPdateActivityMsgToSendFile(v.ActivityId)
+			if errFile != nil {
+				msg = "获取失败,Err:" + errFile.Error()
+				return
+			}
+			os.Remove(downLoadnFilePath)
+		} else {
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+activityInfo.ActivityName, utils.EmailSendToUsers)
+			utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
+		}
+	}
+	return
+}
+
+//非研选系列专家电话会,根据主持人姓名,会前15分钟将问题列表发送给至该主持人对应邮箱
+func SendEmailFileForAskMsg(cont context.Context) (err error) {
+	var msg string
+	var touser string
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
+		}
+		if msg != "" {
+			fmt.Println(msg)
+			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
+		}
+	}()
+	endDate := time.Now().Add(+time.Minute * 15).Format("2006-01-02 15:04:05")
+	condition := `AND  a.activity_type_id = 1 AND  a.chart_permission_name != '研选' `
+	total, err := models.GetCountActivityResearchToSendFile(condition, endDate)
+	if total == 0 {
+		fmt.Println("发送附件完成0")
+		return nil
+	}
+	if err != nil {
+		msg = "发送附件模版消息失败 Err:" + err.Error()
+		return
+	}
+	listActivity, err := models.GetActivityResearchToSendFile(condition, endDate)
+	if err != nil {
+		msg = "发送附件模版消息失败 Err:" + err.Error()
+		return
+	}
+	listEmail, errEmail := models.GetAskEmail()
+	if errEmail != nil {
+		msg = "获取失败,Err:" + errEmail.Error()
+		return
+	}
+	for _, v := range listActivity {
+		fmt.Println(v.ActivityId)
+		activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
+		if activityInfo == nil {
+			msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
+			return
+		}
+		list, errFile := models.GetActivityMsgExport(v.ActivityId)
+		if errFile != nil {
+			msg = "获取失败,Err:" + errFile.Error()
+			return
+		}
+		for _, v := range listEmail {
+			if strings.Index(activityInfo.Host, v.Name) > 0 {
+				touser += v.Email + ";"
+			}
+		}
+		if touser != "" {
+			touser = strings.TrimRight(touser, ";")
+		} else {
+			fmt.Println("没有对应的邮箱")
+			return
+		}
+		//创建excel
+		dir, errFile := os.Executable()
+		exPath := filepath.Dir(dir)
+		downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + utils.GetRandDigit(5) + ".xlsx"
+		xlsxFile := xlsx.NewFile()
+		if errFile != nil {
+			msg = "生成文件失败Err:" + errFile.Error()
+			return
+		}
+		style := xlsx.NewStyle()
+		alignment := xlsx.Alignment{
+			Horizontal: "center",
+			Vertical:   "center",
+			WrapText:   true,
+		}
+		style.Alignment = alignment
+		style.ApplyAlignment = true
+		sheet, errFile := xlsxFile.AddSheet("外呼名单")
+		if errFile != nil {
+			msg = "新增Sheet失败,Err:" + errFile.Error()
+			return
+		}
+		//标头
+		rowTitle := sheet.AddRow()
+		cellA := rowTitle.AddCell()
+		cellA.Value = "姓名"
+		cellB := rowTitle.AddCell()
+		cellB.Value = "公司名称"
+		cellC := rowTitle.AddCell()
+		cellC.Value = "问题"
+		cellD := rowTitle.AddCell()
+		cellD.Value = "提交时间"
+		for _, item := range list {
+			row := sheet.AddRow()
+			cellA := row.AddCell()
+			cellA.Value = item.RealName
+			cellB := row.AddCell()
+			cellB.Value = item.CompanyName
+			cellC := row.AddCell()
+			cellC.Value = item.Content
+			cellD := row.AddCell()
+			cellD.Value = item.CreateTime
+		}
+		errFile = xlsxFile.Save(downLoadnFilePath)
+		if errFile != nil {
+			msg = "保存文件失败Err:" + errFile.Error()
+			return
+		}
+		title := activityInfo.ActivityName + "-活动带问"
+		content := "活动带问详情"
+		fileName := downLoadnFilePath
+		//haveSuccess := utils.SendEmailHaveFile(title, content, fileName, touser)
+		sendResult := utils.SendEmailByHongze(title, content, touser, fileName, title+".xlsx")
+		if sendResult {
+			errFile = models.UPdateActivityMsgToSendFile(v.ActivityId)
+			if errFile != nil {
+				msg = "获取失败,Err:" + errFile.Error()
+				return
+			}
+			os.Remove(downLoadnFilePath)
+		} else {
+			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+activityInfo.ActivityName, utils.EmailSendToUsers)
+			utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
+		}
+	}
+	return
+}

+ 6 - 0
services/task.go

@@ -39,6 +39,12 @@ func Task() {
 	sendEmailFileToExpert := task.NewTask("sendEmailFileToExpert", "0 */5 8-22 * * *", SendEmailFileToExpert) //预约外呼名单,会前1小时自动发送邮件给专家组
 	task.AddTask("sendEmailFileToExpert", sendEmailFileToExpert)
 
+	sendEmailFileForAskMsgResearch := task.NewTask("sendEmailFileForAskMsgResearch", "0 */5 8-22 * * *", SendEmailFileForAskMsgResearch) //研选系列专家电话会,会前1小时将问题列表发送给邮箱
+	task.AddTask("sendEmailFileForAskMsgResearch", sendEmailFileForAskMsgResearch)
+
+	sendEmailFileForAskMsg := task.NewTask("sendEmailFileForAskMsg", "0 */5 8-22 * * *", SendEmailFileForAskMsg) //非研选系列专家电话会,根据主持人姓名,会前15分钟将问题列表发送给至该主持人对应邮箱
+	task.AddTask("sendEmailFileForAskMsg", sendEmailFileForAskMsg)
+
 	////白名单发送
 	//sendEmailUserWhiteList := task.NewTask("sendEmailUserWhiteList", "0 27 17 * * *", SendEmailUserWhiteList) //白名单发送
 	//task.AddTask("sendEmailUserWhiteList", sendEmailUserWhiteList)