소스 검색

预约外呼名单,会前1小时自动发送邮件给专家组

xingzai 3 년 전
부모
커밋
4cbb7526a5
5개의 변경된 파일212개의 추가작업 그리고 2개의 파일을 삭제
  1. 63 0
      models/activity.go
  2. 119 0
      services/activity.go
  3. 2 0
      services/task.go
  4. 3 2
      utils/constants.go
  5. 25 0
      utils/email.go

+ 63 - 0
models/activity.go

@@ -349,3 +349,66 @@ func UPdateSendedMsgMeetingStatus(signupIds string) (err error) {
 	_, err = o.Raw(sql).Exec()
 	return
 }
+
+//获取满足推送的活动ID数量
+func GetCountActivityIdToSendFile(endDate string) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	COUNT(1) count
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id 
+WHERE
+	1 = 1 
+	AND s.signup_type = 1 
+	AND s.fail_type = 0 
+	AND a.is_send_file_toemail = 0 
+	AND a.activity_time >= ? AND a.activity_time <= NOW() 	GROUP BY a.activity_id `
+	err = o.Raw(sql, endDate).QueryRow(&count)
+	return
+}
+
+//获取满足推送的活动ID
+func GetActivityIdToSendFile(endDate string) (items []*ActivityIdRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	* 
+FROM
+	cygx_activity AS a
+	INNER JOIN cygx_activity_signup AS s ON s.activity_id = a.activity_id 
+WHERE
+	1 = 1 
+	AND s.signup_type = 1 
+	AND s.fail_type = 0 
+	AND a.is_send_file_toemail = 0 
+	AND a.activity_time >= ? AND a.activity_time <= NOW() 	GROUP BY a.activity_id `
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+type SignupExportRep struct {
+	Mobile      string `description:"手机号"`
+	CompanyName string `description:"公司名称"`
+	RealName    string `description:"姓名"`
+	CountryCode string `description:"区号"`
+}
+
+func GetSignupExport(activityId int) (item []*SignupExportRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT s.*  ,a.is_limit_people,u.real_name ,u.country_code
+			FROM
+			cygx_activity_signup AS s
+			LEFT JOIN wx_user AS u ON u.user_id = s.user_id
+			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
+			WHERE a.activity_id = ?  AND s.fail_type = 0`
+	_, err = o.Raw(sql, activityId).QueryRows(&item)
+	return
+}
+
+//修改文件是否推送状态
+func UPdateActivityIdToSendFile(activityId int) (err error) {
+	sql := ` UPDATE cygx_activity SET  is_send_file_toemail= 1  WHERE activity_id = ?`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}

+ 119 - 0
services/activity.go

@@ -2,8 +2,11 @@ package services
 
 import (
 	"fmt"
+	"github.com/tealeg/xlsx"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
+	"os"
+	"path/filepath"
 	"strconv"
 	"strings"
 	"time"
@@ -119,3 +122,119 @@ func SendActivityBeginMsgMeeting() (err error) {
 	}
 	return
 }
+
+//预约外呼名单,会前1小时自动发送邮件给专家组
+func SendEmailFileToExpert() (err error) {
+	var msg 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)
+		}
+	}()
+	fmt.Println("发送附件")
+	endDate := time.Now().Add(-time.Minute * 6000000).Format("2006-01-02 15:04:05")
+	total, err := models.GetCountActivityIdToSendFile(endDate)
+	if err != nil {
+		msg = "发送附件模版消息失败 Err:" + err.Error()
+		return
+	}
+	if total == 0 {
+		fmt.Println("发送附件完成0")
+		return
+	}
+	listActivity, err := models.GetActivityIdToSendFile(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.GetSignupExport(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) + ".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.Mobile
+			cellC := row.AddCell()
+			if item.CountryCode == "" {
+				cellC.Value = "86"
+			} else {
+				cellC.Value = item.CountryCode
+			}
+			cellD := row.AddCell()
+			cellD.Value = item.CompanyName
+		}
+		errFile = xlsxFile.Save(downLoadnFilePath)
+		if errFile != nil {
+			msg = "保存文件失败Err:" + errFile.Error()
+			return
+		}
+		fmt.Println(activityInfo.ActivityName)
+		title := activityInfo.ActivityName + "外呼名单"
+		content := "外呼名单详情"
+		fileName := downLoadnFilePath
+		touser := utils.EmailSendToExpert
+		go utils.SendEmailHaveFile(title, content, fileName, touser)
+		defer func() {
+			os.Remove(downLoadnFilePath)
+		}()
+		time.Sleep(time.Duration(2) * time.Second)
+		errFile = models.UPdateActivityIdToSendFile(v.ActivityId)
+		if errFile != nil {
+			msg = "获取失败,Err:" + errFile.Error()
+			return
+		}
+	}
+	fmt.Println("发送附件完成")
+	return
+}

+ 2 - 0
services/task.go

@@ -47,6 +47,8 @@ func Task() {
 	sendActivityBeginMsgMeeting := toolbox.NewTask("sendActivityBeginMsgMeeting", "0 */5 8-22 * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
 	toolbox.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
 
+	sendEmailFileToExpert := toolbox.NewTask("sendEmailFileToExpert", "0 */5 8-22 * * *", SendEmailFileToExpert) //预约外呼名单,会前1小时自动发送邮件给专家组
+	toolbox.AddTask("sendEmailFileToExpert", sendEmailFileToExpert)
 	//UpdateActivitySattus()
 	toolbox.StartTask()
 	fmt.Println("end")

+ 3 - 2
utils/constants.go

@@ -19,8 +19,9 @@ const (
 )
 
 const (
-	APPNAME          = "弘则-查研观向"
-	EmailSendToUsers = "glji@hzinsights.com;pyan@hzinsights.com;cxzhang@hzinsights.com"
+	APPNAME           = "弘则-查研观向"
+	EmailSendToUsers  = "glji@hzinsights.com;pyan@hzinsights.com;cxzhang@hzinsights.com"
+	EmailSendToExpert = "jhwang@hzinsights.com;cxzhang@hzinsights.com"
 )
 
 //手机号,电子邮箱正则

+ 25 - 0
utils/email.go

@@ -61,3 +61,28 @@ func SendEmailByHz(title, content string, touser string) (result bool, err error
 	result = true
 	return
 }
+
+//发送带有文件的邮件
+func SendEmailHaveFile(title, content string, fileName, touser string) bool {
+	var arr []string
+	sub := strings.Index(touser, ";")
+	if sub >= 0 {
+		spArr := strings.Split(touser, ";")
+		for _, v := range spArr {
+			arr = append(arr, v)
+		}
+	} else {
+		arr = append(arr, touser)
+	}
+	m := gomail.NewMessage()
+	m.SetHeader("From", "317699326@qq.com ")
+	m.SetHeader("To", arr...)
+	m.SetHeader("Subject", title+" "+GetRandString(16))
+	m.Attach(fileName)
+	m.SetBody("text/html", content)
+	d := gomail.NewDialer("smtp.qq.com", 587, "317699326@qq.com", "oqdypwfcvruwcbea")
+	if err := d.DialAndSend(m); err != nil {
+		return false
+	}
+	return true
+}