Browse Source

原客户提醒新增60天, ETA商家提醒新增其他频次

hsun 1 year ago
parent
commit
2bfb35fa4d
4 changed files with 113 additions and 20 deletions
  1. 76 0
      services/company_product.go
  2. 31 13
      services/eta_business.go
  3. 4 4
      services/task.go
  4. 2 3
      services/wx_template_msg.go

+ 76 - 0
services/company_product.go

@@ -267,6 +267,8 @@ func CompanyRemind(cont context.Context) (err error) {
 	sellers, err := models.GetSellersOpenId()
 	for k, v := range sellers {
 		fmt.Println(k, v.AdminId, v.Mobile)
+		CompanyRemind60Day(v)
+		time.Sleep(5 * time.Second)
 		CompanyRemind30Day(v)
 		time.Sleep(5 * time.Second)
 		CompanyRemind15Day(v)
@@ -279,6 +281,80 @@ func CompanyRemind(cont context.Context) (err error) {
 	return
 }
 
+// CompanyRemind60Day 60天后到期客户
+func CompanyRemind60Day(seller *models.Sellers) {
+	var err error
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "到期提醒失败:CompanyRemind;Err"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+
+	companyRemindRecordList := make([]*models.CompanyRemindRecord, 0)
+	remindType := 5
+	uniqueCode := fmt.Sprint(seller.AdminId, time.Now().Format(utils.FormatDateUnSpace), remindType, utils.GetRandString(5))
+
+	//remindEndDate := "2020-12-31" //time.Now().AddDate(0, 0, 30).Format(utils.FormatDate)
+	remindEndDate := time.Now().AddDate(0, 0, 60).Format(utils.FormatDate)
+	companyItems, err := models.GetRemindCompany(seller.AdminId, remindEndDate)
+	if err != nil {
+		return
+	}
+	emailContents := "<div><p>您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于60天后到期,请注意查看</p>"
+	emailContents += "<table border='1'><tr><td width='200'>60天后到期客户名称</td><td width='200'>到期日期</td><td width='200'>销售人员</td><td>客户类型</td></tr>"
+	var isSend bool
+	msgContent := ``
+	for _, v := range companyItems {
+		endTime := v.EndDate
+		if v.Status == "正式" {
+			endTime = v.ContractEndDate
+		}
+		emailContents += `<tr><td>` + v.CompanyName + `</td><td>` + endTime + `</td><td>` + seller.RealName + `</td><td>` + v.Status + `</td></tr>`
+		msgContent += `客户:` + v.CompanyName + ";状态:" + v.Status + "\n"
+		isSend = true
+
+		// 数据入库
+		companyRemindRecordList = append(companyRemindRecordList, &models.CompanyRemindRecord{
+			//CompanyRemindRecordId: 0,
+			Type:        remindType,
+			SellerId:    seller.AdminId,
+			SellerName:  seller.RealName,
+			CompanyId:   v.CompanyId,
+			CompanyName: v.CompanyName,
+			Status:      v.Status,
+			EndDate:     endTime,
+			UniqueCode:  uniqueCode,
+			CreateTime:  time.Now(),
+		})
+	}
+	emailContents += "</table></br>"
+
+	if isSend {
+		if seller.Email != "" {
+			utils.SendEmailByHongze("到期前60天提醒", emailContents, seller.Email, "", "")
+		}
+
+		if seller.OpenId != "" {
+			first := "您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于60天后到期,请注意查看"
+			//keyword1 := "到期前30天提醒"
+			keyword1 := fmt.Sprintf(`【%d】客户到期前60天提醒,点击查看`, len(companyItems))
+			keyword2 := remindEndDate
+			remark := msgContent
+
+			openIdList := make([]*models.OpenIdList, 0)
+			openIdItem := new(models.OpenIdList)
+			openIdItem.OpenId = seller.OpenId
+			openIdList = append(openIdList, openIdItem)
+			SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark, uniqueCode, openIdList)
+		}
+	}
+
+	// 数据入库
+	if len(companyRemindRecordList) > 0 {
+		models.AddMultiCompanyRemindRecord(companyRemindRecordList)
+	}
+}
+
 // CompanyRemind30Day 30天后到期客户
 func CompanyRemind30Day(seller *models.Sellers) {
 	var err error

+ 31 - 13
services/eta_business.go

@@ -12,16 +12,35 @@ import (
 
 // EtaBusinessExpiredRemind ETA商家到期提醒
 func EtaBusinessExpiredRemind(cont context.Context) (err error) {
+	// 频次: 1-1天; 2-7天; 3-15天; 4-30天; 5-60天
+	frequencyArr := []int{1, 2, 3, 4, 5}
+	for _, f := range frequencyArr {
+		_ = HandleEtaBusinessExpiredRemind(f)
+		time.Sleep(15 * time.Second)
+	}
+	return
+}
+
+// HandleEtaBusinessExpiredRemind ETA商家到期提醒
+func HandleEtaBusinessExpiredRemind(frequency int) (err error) {
 	defer func() {
 		if err != nil {
-			tips := "ETA商家到期提醒: EtaBusinessExpiredRemind, Err: " + err.Error()
+			tips := fmt.Sprintf("ETA商家到期提醒失败, frequency: %d, Err: %s", frequency, err.Error())
 			utils.FileLog.Info("%s", tips)
 			go alarm_msg.SendAlarmMsg(tips, 3)
 		}
 	}()
 
-	// 获取当前合约两个月后过期的ETA商家
-	monthLater := time.Now().Local().AddDate(0, 2, 0)
+	// 频次对应天数
+	dayMap := map[int]int{1: 1, 2: 7, 3: 15, 4: 30, 5: 60}
+	days := dayMap[frequency]
+	if days <= 0 {
+		err = fmt.Errorf("提醒频次有误")
+		return
+	}
+
+	// 获取当前合约N后过期的ETA商家
+	monthLater := time.Now().Local().AddDate(0, 0, days)
 	expiredTime := monthLater.Format(utils.FormatDate)
 	businesses := make([]*eta_business.EtaBusiness, 0)
 	{
@@ -60,10 +79,8 @@ func EtaBusinessExpiredRemind(cont context.Context) (err error) {
 		sellerMap[s.AdminId] = s
 	}
 
-	remindType := 5 // 60天
-	remindRecords := make([]*eta_business.EtaBusinessRemindRecord, 0)
-
 	// 推送邮件和公众号
+	remindRecords := make([]*eta_business.EtaBusinessRemindRecord, 0)
 	for k, v := range sellerBusinessMap {
 		seller := sellerMap[k]
 		if seller == nil {
@@ -75,11 +92,11 @@ func EtaBusinessExpiredRemind(cont context.Context) (err error) {
 		if len(v) == 0 {
 			continue
 		}
-		uniqueCode := fmt.Sprint(seller.AdminId, time.Now().Format(utils.FormatDateUnSpace), remindType, utils.GetRandString(5))
+		uniqueCode := fmt.Sprint(seller.AdminId, time.Now().Format(utils.FormatDateUnSpace), frequency, utils.GetRandDigit(5))
 
 		contentRemark := ""
-		contentsEmail := fmt.Sprintf(`<div><p>您有【%d】ETA客户将于60天后到期,请注意查看</p>`, len(v))
-		contentsEmail += `<table border='1'><tr><td width='200'>60天后到期客户名称</td><td width='200'>到期日期</td><td width='200'>销售人员</td><td>客户类型</td></tr>`
+		contentsEmail := fmt.Sprintf(`<div><p>您有【%d】ETA客户将于%d天后到期,请注意查看</p>`, len(v), days)
+		contentsEmail += fmt.Sprintf(`<table border='1'><tr><td width='200'>%d天后到期客户名称</td><td width='200'>到期日期</td><td width='200'>销售人员</td><td>客户类型</td></tr>`, days)
 		for _, bz := range v {
 			row := fmt.Sprintf(`<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>`, bz.BusinessName, bz.ExpiredTime.Format(utils.FormatDate), bz.SellerName, "ETA")
 			contentsEmail += row
@@ -87,7 +104,7 @@ func EtaBusinessExpiredRemind(cont context.Context) (err error) {
 
 			// 数据入库
 			remindRecords = append(remindRecords, &eta_business.EtaBusinessRemindRecord{
-				Type:          remindType,
+				Type:          frequency,
 				SellerId:      seller.AdminId,
 				SellerName:    seller.RealName,
 				EtaBusinessId: bz.EtaBusinessId,
@@ -101,13 +118,14 @@ func EtaBusinessExpiredRemind(cont context.Context) (err error) {
 
 		// 邮件
 		if seller.Email != "" {
-			utils.SendEmailByHongze("到期前60天提醒", contentsEmail, seller.Email, "", "")
+			msg := fmt.Sprintf("到期前%d天提醒", days)
+			utils.SendEmailByHongze(msg, contentsEmail, seller.Email, "", "")
 		}
 
 		// 公众号, first和remark已经无效了
 		if seller.OpenId != "" {
-			first := fmt.Sprintf(`您有【%d】 客户将于60天后到期,请注意查看`, len(v))
-			keyword1 := fmt.Sprintf(`【%d】ETA到期前60天提醒,点击查看`, len(v))
+			first := fmt.Sprintf(`您有【%d】 客户将于%d天后到期,请注意查看`, len(v), days)
+			keyword1 := fmt.Sprintf(`【%d】ETA到期前%d天提醒,点击查看`, len(v), days)
 			keyword2 := expiredTime
 			remark := contentRemark
 

+ 4 - 4
services/task.go

@@ -161,6 +161,10 @@ func Task() {
 	englishReportEmailTermination := task.NewTask("englishReportEmailTermination", "0 30 2 * * *", EnglishReportEmailTermination)
 	task.AddTask("英文研报客户 临时->终止", englishReportEmailTermination)
 
+	// ETA商家签约状态更新
+	etaBusinessUpdateStatus := task.NewTask("etaBusinessUpdateStatus", "0 5 5 * * *", EtaBusinessUpdateStatus)
+	task.AddTask("etaBusinessUpdateStatus", etaBusinessUpdateStatus)
+
 	task.StartTask()
 
 	fmt.Println("task end")
@@ -254,10 +258,6 @@ func releaseTask() {
 	// ETA商家到期提醒
 	etaBusinessRemind := task.NewTask("etaBusinessRemind", "0 20 8 * * *", EtaBusinessExpiredRemind)
 	task.AddTask("etaBusinessRemind", etaBusinessRemind)
-
-	// ETA商家签约状态更新
-	etaBusinessUpdateStatus := task.NewTask("etaBusinessUpdateStatus", "0 5 5 * * *", EtaBusinessUpdateStatus)
-	task.AddTask("etaBusinessUpdateStatus", etaBusinessUpdateStatus)
 }
 
 //func TaskTest() {

+ 2 - 3
services/wx_template_msg.go

@@ -306,11 +306,10 @@ func SendWxMsgWithEtaBusinessRemind(first, keyword1, keyword2, remark, code stri
 	utils.FileLog.Info("%s", "services SendMsg")
 
 	var wxAppPath string
-	// TODO:ETA商家提醒页面url
 	if utils.RunMode == `debug` {
-		wxAppPath = `http://msgsendtest.hzinsights.com/productExpirationHint.html?code=` + code
+		wxAppPath = `http://msgsendtest.hzinsights.com/ETAExpirationHint.html?code=` + code
 	} else {
-		wxAppPath = `https://msgsend.hzinsights.com//productExpirationHint.html?code=` + code
+		wxAppPath = `https://msgsend.hzinsights.com/ETAExpirationHint.html?code=` + code
 	}
 	openIdArr := make([]string, len(openIdList))
 	for i, v := range openIdList {