Browse Source

新增模板消息提醒

rdluck 4 năm trước cách đây
mục cha
commit
07de7b097c

+ 10 - 0
b.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>$Title$</title>
+</head>
+<body>
+$END$
+</body>
+</html>

BIN
hongze_user20200615141931.xlsx


+ 2 - 2
main.go

@@ -1,10 +1,9 @@
 package main
 
 import (
+	"github.com/astaxie/beego"
 	_ "hongze/hongze_task/routers"
 	"hongze/hongze_task/services"
-
-	"github.com/astaxie/beego"
 )
 
 func main() {
@@ -13,5 +12,6 @@ func main() {
 		beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
 	}
 	go services.Task()
+	//services.TaskTest()
 	beego.Run()
 }

+ 10 - 0
models/data_entry.go

@@ -9,6 +9,7 @@ type EdbInfo struct {
 	SecName    string `orm:"column(SEC_NAME);" description:"指标名称"`
 	NoticeTime string
 	Frequency string
+	TradeCode string `orm:"column(TRADE_CODE);" description:"指标编码"`
 }
 
 //获取日度指标
@@ -19,3 +20,12 @@ func GetEdbInfoByFrequency(frequency string) (items []*EdbInfo, err error) {
 	_, err = o.Raw(sql, frequency).QueryRows(&items)
 	return
 }
+
+//获取日度指标
+func GetEdbInfoByFrequencyWeek(frequency,weekDay string) (items []*EdbInfo, err error) {
+	sql := `SELECT * FROM edbinfo WHERE frequency=? AND notice_time<>'' and left(notice_time,2)=? `
+	o := orm.NewOrm()
+	o.Using("edb")
+	_, err = o.Raw(sql, frequency,weekDay).QueryRows(&items)
+	return
+}

+ 1 - 1
models/db.go

@@ -35,6 +35,6 @@ func init() {
 
 	//注册对象
 	orm.RegisterModel(
-
+		new(EdbinfoSendMsgRecord),
 	)
 }

+ 28 - 0
models/edbinfo_send_msg_record.go

@@ -0,0 +1,28 @@
+package models
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+type EdbinfoSendMsgRecord struct {
+	Id         int `orm:"column(id);pk"`
+	UserId     int
+	TradeCode  string
+	CreateTime time.Time
+}
+
+func AddEdbinfoSendMsgRecord(item *EdbinfoSendMsgRecord) (err error) {
+	o := orm.NewOrm()
+	o.Using("rddp")
+	_, err = o.Insert(item)
+	return err
+}
+
+func GetEdbinfoSendMsgCount(userId int, tradeCode string) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("rddp")
+	sql := `SELECT COUNT(1) AS count FROM edbinfo_send_msg_record WHERE user_id=? AND trade_code=? AND create_time=DATE(NOW()) `
+	err = o.Raw(sql, userId, tradeCode).QueryRow(&count)
+	return
+}

+ 25 - 0
models/report.go

@@ -0,0 +1,25 @@
+package models
+
+import "rdluck_tools/orm"
+
+type Report struct {
+	Id         int
+	Content    string
+	ContentSub string
+}
+
+func GetReport() (items []*Report, err error) {
+	sql := `SELECT * FROM report ORDER BY id ASC `
+	o := orm.NewOrm()
+	o.Using("rddp")
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+func ModifyReportContentSub(id int, contentSub string) (err error) {
+	sql := `UPDATE report SET content_sub=? WHERE id=? `
+	o := orm.NewOrm()
+	o.Using("rddp")
+	_, err = o.Raw(sql, contentSub, id).Exec()
+	return
+}

BIN
report_view_times20200614120008.xlsx


BIN
report_viewer_details20200614120000.xlsx


+ 52 - 53
services/data_entry.go

@@ -27,7 +27,7 @@ func FrequencyByDay() (err error) {
 		return
 	}
 	if len(items) <= 0 {
-		err=errors.New("没有需要推送的数据")
+		err = errors.New("没有需要推送的数据")
 		return
 	}
 
@@ -114,11 +114,11 @@ func FrequencyByDay() (err error) {
 			openIdItem.OpenId = openId
 			openIdList = append(openIdList, openIdItem)
 
-			first := v.SecName + " :数据录入提醒"
-			keyword1 := "弘则-数据录入"
-			keyword2 := v.Frequency + ":" + v.NoticeTime
-
-			err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
+			first := "数据录入提醒"
+			keyword1 := v.SecName
+			keyword2 := "每日 " + v.NoticeTime
+			remark := v.SecName + "该更新了"
+			err = SendWxMsgWithFrequency(first, keyword1, keyword2, remark, openIdList)
 			if err != nil {
 				return err
 			}
@@ -136,73 +136,59 @@ func FrequencyByWeek() (err error) {
 		}
 	}()
 	frequency := "周度"
-	items, err := models.GetEdbInfoByFrequency(frequency)
+	nowWeekDay := utils.GetWeekDay()
+	fmt.Println("nowWeekDay:", nowWeekDay)
+	items, err := models.GetEdbInfoByFrequencyWeek(frequency, nowWeekDay)
 	if err != nil {
 		fmt.Println("GetFrequencyByDay err:", err.Error())
 		return
 	}
 	if len(items) <= 0 {
-		err=errors.New("没有需要推送的数据,FrequencyByWeek")
+		err = errors.New("没有需要推送的数据,FrequencyByWeek")
 		return
 	}
 
 	for _, v := range items {
+
+		count, err := models.GetEdbinfoSendMsgCount(v.UserId, v.TradeCode)
+		if err != nil {
+			fmt.Println("GetEdbinfoSendMsgCount Err:" + err.Error())
+			return err
+		}
+		if count > 0 {
+			fmt.Println(v.UserId, v.TradeCode, "当天已发送")
+			continue
+		}
 		noticeTime := v.NoticeTime
 		if noticeTime == "" {
 			err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
-			return
+			return err
 		}
 		weekArr := strings.Split(noticeTime, " ")
 		if len(weekArr) < 2 {
 			err = errors.New("NoticeTime 参数错误: " + noticeTime)
-			return
-		}
-		week := weekArr[0]
-		var weekVal string
-		switch week {
-		case "周一":
-			weekVal = "Monday"
-			break
-		case "周二":
-			weekVal = "Tuesday"
-			break
-		case "周三":
-			weekVal = "Wednesday"
-			break
-		case "周四":
-			weekVal = "Thursday"
-			break
-		case "周五":
-			weekVal = "Friday"
-			break
-		case "周六":
-			weekVal = "Saturday"
-			break
-		case "周日":
-			weekVal = "Sunday"
-			break
-		default:
-			weekVal = ""
-			break
+			return err
 		}
+		weekVal := weekArr[0]
+		weekVal = strings.Trim(weekVal, " ")
 		if weekVal == "" {
 			err = errors.New("weekVal 参数错误: weekVal:" + weekVal)
-			return
+			return err
 		}
-		nowWeek := time.Now().Weekday().String()
-		if weekVal != nowWeek {
-			err = errors.New("不是当前日期,不需要发送消息: weekVal:" + weekVal + "; nowWeek:" + nowWeek)
-			return
+		fmt.Println("weekVal:", weekVal, " nowWeek:", nowWeekDay)
+		if weekVal != nowWeekDay {
+			err = errors.New("不是当前日期,不需要发送消息: weekVal:" + weekVal + "; nowWeek:" + nowWeekDay)
+			return err
 		}
 		noticeStr := weekArr[1]
 		if noticeStr == "" {
 			err = errors.New("noticeStr 参数错误: noticeStr:" + noticeStr)
-			return
+			return err
 		}
 		noticeTimeArr := strings.Split(noticeStr, ":")
 		if len(noticeTimeArr) < 3 {
 			err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
-			return
+			return err
 		}
 		noticeHour, err := strconv.Atoi(noticeTimeArr[0])
 		if err != nil {
@@ -276,14 +262,26 @@ func FrequencyByWeek() (err error) {
 			openIdItem.OpenId = openId
 			openIdList = append(openIdList, openIdItem)
 
-			first := v.SecName + " :数据录入提醒"
-			keyword1 := "弘则-数据录入"
-			keyword2 := v.Frequency + ":" + v.NoticeTime
+			first := "数据录入提醒"
+			keyword1 := v.SecName
+			keyword2 := "每周 " + v.NoticeTime
+			remark := v.SecName + "该更新了"
 
-			err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
+			err = SendWxMsgWithFrequency(first, keyword1, keyword2, remark, openIdList)
 			if err != nil {
 				return err
 			}
+			//发送成功,记录发送日志
+			{
+				sendRecord := new(models.EdbinfoSendMsgRecord)
+				sendRecord.UserId = v.UserId
+				sendRecord.TradeCode = v.TradeCode
+				sendRecord.CreateTime = time.Now()
+				err = models.AddEdbinfoSendMsgRecord(sendRecord)
+				if err != nil {
+					return err
+				}
+			}
 		}
 	}
 	return
@@ -420,11 +418,12 @@ func FrequencyByMonth() (err error) {
 			openIdItem.OpenId = openId
 			openIdList = append(openIdList, openIdItem)
 
-			first := v.SecName + " :数据录入提醒"
-			keyword1 := "弘则-数据录入"
-			keyword2 := v.Frequency + ":" + v.NoticeTime
+			first := "数据录入提醒"
+			keyword1 := v.SecName
+			keyword2 := "每月 " + v.NoticeTime
+			remark := v.SecName + "该更新了"
 
-			err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
+			err = SendWxMsgWithFrequency(first, keyword1, keyword2, remark, openIdList)
 			if err != nil {
 				return err
 			}

+ 49 - 0
services/report.go

@@ -0,0 +1,49 @@
+package services
+
+import (
+	"fmt"
+	"github.com/PuerkitoBio/goquery"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/utils"
+	"html"
+	"strings"
+)
+
+func FixReportContentSub() {
+	items, err := models.GetReport()
+	if err != nil {
+		fmt.Println("err:", err.Error())
+		return
+	}
+	for k, v := range items {
+		fmt.Println(k, v.Id,v.ContentSub)
+		content := html.UnescapeString(v.Content)
+		utils.FileLog.Info("%s", content)
+		doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
+		if err != nil {
+			fmt.Println("create doc err:", err.Error())
+			return
+		}
+		n := 0
+		contentSub := ""
+		doc.Find("p").Each(func(i int, s *goquery.Selection) {
+			if n >= 5 {
+				return
+			}
+			n++
+			phtml, err := s.Html()
+			if err!=nil {
+				fmt.Println("get html err",err.Error())
+				return
+			}
+			if s.Text() != "" || strings.Contains(phtml, "src") {
+				contentSub = contentSub + "<p>" + phtml + "</p>"
+				utils.FileLog.Info("i:%d n:%d %s", i, n, contentSub)
+			}
+		})
+		err = models.ModifyReportContentSub(v.Id, contentSub)
+		if err != nil {
+			fmt.Println("ModifyReportContentSub Err:" + err.Error())
+		}
+	}
+}

+ 3 - 3
services/task.go

@@ -32,10 +32,10 @@ func SendEmail() (err error) {
 
 func OneMinute() (err error) {
 	//日度
-	FrequencyByDay()
+	//FrequencyByDay()
 	//周度
 	FrequencyByWeek()
 	//月度
-	FrequencyByMonth()
+	//FrequencyByMonth()
 	return
-}
+}

+ 2 - 4
services/wx_template_msg.go

@@ -12,7 +12,7 @@ import (
 )
 
 
-func SendWxMsgWithFrequencyByDay(first,keyword1,keyword2 string,openIdList []*models.OpenIdList)(err error) {
+func SendWxMsgWithFrequency(first,keyword1,keyword2,remark string,openIdList []*models.OpenIdList)(err error) {
 	var msg string
 	defer func() {
 		if err!=nil {
@@ -33,8 +33,7 @@ func SendWxMsgWithFrequencyByDay(first,keyword1,keyword2 string,openIdList []*mo
 	}
 
 	sendUrl:= "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+accessToken
-	templateId:="P0klzaZjEI2UYth-z-WnmtOQgyxcF8klPoA_MlsA8Eo"
-
+	templateId:=utils.TemplateId
 	//if true{
 	sendMap:=make(map[string]interface{})
 	sendData:=make(map[string]interface{})
@@ -44,7 +43,6 @@ func SendWxMsgWithFrequencyByDay(first,keyword1,keyword2 string,openIdList []*mo
 	//redirectUrl:="report.hzinsights.com/#/allindex/"+strconv.Itoa(v.ResearchReportId)+"/"+v.ReportType;
 
 	//sendMap["url"]=redirectUrl
-	remark:="备注信息"
 	sendData["first"]=map[string]interface{}{"value":first,"color":"#173177"}
 	sendData["keyword1"]=map[string]interface{}{"value":keyword1,"color":"#173177"}
 	sendData["keyword2"]=map[string]interface{}{"value":keyword2,"color":"#173177"}

+ 31 - 0
utils/common.go

@@ -486,4 +486,35 @@ func Sha1(data string) string {
 	sha1 := sha1.New()
 	sha1.Write([]byte(data))
 	return hex.EncodeToString(sha1.Sum([]byte("")))
+}
+
+func GetWeekDay() (weekStr string){
+	nowWeek := time.Now().Weekday().String()
+	switch nowWeek {
+	case "Monday":
+		weekStr="周一"
+		break
+	case "Tuesday":
+		weekStr="周二"
+		break
+	case "Wednesday":
+		weekStr="周三"
+		break
+	case "Thursday":
+		weekStr="周四"
+		break
+	case "Friday":
+		weekStr="周五"
+		break
+	case "Saturday":
+		weekStr="周六"
+		break
+	case "Sunday":
+		weekStr="周日"
+		break
+	default:
+		weekStr=""
+		break
+	}
+	return
 }

+ 5 - 2
utils/config.go

@@ -18,6 +18,7 @@ var (
 var (
 	WxAppId     string
 	WxAppSecret string
+	TemplateId  string
 )
 
 func init() {
@@ -35,10 +36,12 @@ func init() {
 		CompanyId = 16
 		WxAppId = "wx4a844c734d8c8e56"
 		WxAppSecret = "26c586e7ccb3c575433f0f37797b3eeb"
+		TemplateId = "P0klzaZjEI2UYth-z-WnmtOQgyxcF8klPoA_MlsA8Eo"
 	} else {
 		CompanyId = 16
-		WxAppId = "wxde2f3a951cc795b9"
-		WxAppSecret = "5df6c7e74beac92115b0b8801d12a8d5"
+		WxAppId = "wx9b5d7291e581233a"
+		WxAppSecret = "f4d52e34021eee262dce9682b31f8861"
+		TemplateId = "P0klzaZjEI2UYth-z-WnmtOQgyxcF8klPoA_MlsA8Eo"
 	}
 }