rdluck 4 năm trước cách đây
mục cha
commit
fe64d71618
6 tập tin đã thay đổi với 508 bổ sung14 xóa
  1. 16 0
      models/admin.go
  2. 21 0
      models/data_entry.go
  3. 20 0
      models/users.go
  4. 434 0
      services/data_entry.go
  5. 16 2
      services/task.go
  6. 1 12
      services/wx_template_msg.go

+ 16 - 0
models/admin.go

@@ -0,0 +1,16 @@
+package models
+
+import "rdluck_tools/orm"
+
+type Admin struct {
+	AdminId   int
+	AdminName string
+	RealName  string
+	Mobile    string
+}
+
+func GetAdminByAdminId(adminId int) (item *Admin, err error) {
+	sql := `SELECT * FROM admin WHERE admin_id=? `
+	err = orm.NewOrm().Raw(sql, adminId).QueryRow(&item)
+	return
+}

+ 21 - 0
models/data_entry.go

@@ -0,0 +1,21 @@
+package models
+
+import "rdluck_tools/orm"
+
+//数据录入
+
+type EdbInfo struct {
+	UserId     int
+	SecName    string `orm:"column(SEC_NAME);" description:"指标名称"`
+	NoticeTime string
+	Frequency string
+}
+
+//获取日度指标
+func GetEdbInfoByFrequency(frequency string) (items []*EdbInfo, err error) {
+	sql := `SELECT * FROM edbinfo WHERE frequency=? AND notice_time<>'' `
+	o := orm.NewOrm()
+	o.Using("edb")
+	_, err = o.Raw(sql, frequency).QueryRows(&items)
+	return
+}

+ 20 - 0
models/users.go

@@ -19,5 +19,25 @@ func GetHongzeUsers() (items []*HongzeUsers, err error) {
 	order by company_name desc `
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
 	return
+}
+
+type WxUser struct {
+	UserId    int64
+	Mobile    string
+	Email     string
+	CompanyId int
+	ExpiredIn int64
+	OpenId    string
+}
 
+func GetWxUserByUserId(userId int) (item *WxUser, err error) {
+	sql := `SELECT * FROM wx_user WHERE user_id=? `
+	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
+	return
+}
+
+func GetWxUserByMobile(mobile string) (item *WxUser, err error) {
+	sql := `SELECT * FROM wx_user WHERE mobile=? `
+	err = orm.NewOrm().Raw(sql, mobile).QueryRow(&item)
+	return
 }

+ 434 - 0
services/data_entry.go

@@ -0,0 +1,434 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+//数据录入
+
+//日度消息推送
+func FrequencyByDay() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("FrequencyByDay Err:", err.Error())
+			utils.FileLog.Info("FrequencyByDay err: %s", err.Error())
+		}
+	}()
+	frequency := "日度"
+	items, err := models.GetEdbInfoByFrequency(frequency)
+	if err != nil {
+		fmt.Println("GetFrequencyByDay err:", err.Error())
+		return
+	}
+	if len(items) <= 0 {
+		err=errors.New("没有需要推送的数据")
+		return
+	}
+
+	for _, v := range items {
+		noticeTime := v.NoticeTime
+		if noticeTime == "" {
+			err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
+			return
+		}
+		noticeTimeArr := strings.Split(noticeTime, ":")
+		if len(noticeTimeArr) < 3 {
+			err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
+			return
+		}
+		noticeHour, err := strconv.Atoi(noticeTimeArr[0])
+		if err != nil {
+			return err
+		}
+		noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
+		if err != nil {
+			return err
+		}
+		noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
+		if err != nil {
+			return err
+		}
+
+		noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
+
+		mbefor, _ := time.ParseDuration("-1m")
+		mafter, _ := time.ParseDuration("1m")
+		nowBefor := time.Now().Add(mbefor)
+		nowAfter := time.Now().Add(mafter)
+		nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
+		nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
+
+		if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
+			//获取用户信息
+			var openId string
+			isAdmin := true
+			admin, err := models.GetAdminByAdminId(v.UserId)
+			if err != nil {
+				if err.Error() == utils.ErrNoRow() {
+					isAdmin = false
+				} else {
+					return err
+				}
+			}
+			if admin == nil {
+				isAdmin = false
+			}
+			if isAdmin {
+				if admin.Mobile == "" {
+
+				} else {
+					wxUser, err := models.GetWxUserByMobile(admin.Mobile)
+					if err != nil {
+						return err
+					}
+					if wxUser == nil {
+						err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
+						return err
+					}
+					openId = wxUser.OpenId
+				}
+			} else {
+				wxUser, err := models.GetWxUserByUserId(v.UserId)
+				if err != nil {
+					return err
+				}
+				if wxUser == nil {
+					err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
+					return err
+				}
+				openId = wxUser.OpenId
+			}
+			//发送消息
+			if openId == "" {
+				err = errors.New("openId is empty")
+				return err
+			}
+			openIdList := make([]*models.OpenIdList, 0)
+			openIdItem := new(models.OpenIdList)
+			openIdItem.OpenId = openId
+			openIdList = append(openIdList, openIdItem)
+
+			first := v.SecName + " :数据录入提醒"
+			keyword1 := "弘则-数据录入"
+			keyword2 := v.Frequency + ":" + v.NoticeTime
+
+			err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return
+}
+
+//周度消息推送
+func FrequencyByWeek() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("FrequencyByWeek Err:", err.Error())
+			utils.FileLog.Info("FrequencyByWeek err: %s", err.Error())
+		}
+	}()
+	frequency := "周度"
+	items, err := models.GetEdbInfoByFrequency(frequency)
+	if err != nil {
+		fmt.Println("GetFrequencyByDay err:", err.Error())
+		return
+	}
+	if len(items) <= 0 {
+		err=errors.New("没有需要推送的数据,FrequencyByWeek")
+		return
+	}
+
+	for _, v := range items {
+		noticeTime := v.NoticeTime
+		if noticeTime == "" {
+			err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
+			return
+		}
+		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
+		}
+		if weekVal == "" {
+			err = errors.New("weekVal 参数错误: weekVal:" + weekVal)
+			return
+		}
+		nowWeek := time.Now().Weekday().String()
+		if weekVal != nowWeek {
+			err = errors.New("不是当前日期,不需要发送消息: weekVal:" + weekVal + "; nowWeek:" + nowWeek)
+			return
+		}
+		noticeStr := weekArr[1]
+		if noticeStr == "" {
+			err = errors.New("noticeStr 参数错误: noticeStr:" + noticeStr)
+			return
+		}
+		noticeTimeArr := strings.Split(noticeStr, ":")
+		if len(noticeTimeArr) < 3 {
+			err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
+			return
+		}
+		noticeHour, err := strconv.Atoi(noticeTimeArr[0])
+		if err != nil {
+			return err
+		}
+		noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
+		if err != nil {
+			return err
+		}
+		noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
+		if err != nil {
+			return err
+		}
+
+		noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
+
+		mbefor, _ := time.ParseDuration("-1m")
+		mafter, _ := time.ParseDuration("1m")
+		nowBefor := time.Now().Add(mbefor)
+		nowAfter := time.Now().Add(mafter)
+		nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
+		nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
+
+		if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
+			//获取用户信息
+			var openId string
+			isAdmin := true
+			admin, err := models.GetAdminByAdminId(v.UserId)
+			if err != nil {
+				if err.Error() == utils.ErrNoRow() {
+					isAdmin = false
+				} else {
+					return err
+				}
+			}
+			if admin == nil {
+				isAdmin = false
+			}
+			if isAdmin {
+				if admin.Mobile == "" {
+
+				} else {
+					wxUser, err := models.GetWxUserByMobile(admin.Mobile)
+					if err != nil {
+						return err
+					}
+					if wxUser == nil {
+						err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
+						return err
+					}
+					openId = wxUser.OpenId
+				}
+			} else {
+				wxUser, err := models.GetWxUserByUserId(v.UserId)
+				if err != nil {
+					return err
+				}
+				if wxUser == nil {
+					err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
+					return err
+				}
+				openId = wxUser.OpenId
+			}
+			//发送消息
+			if openId == "" {
+				err = errors.New("openId is empty")
+				return err
+			}
+			openIdList := make([]*models.OpenIdList, 0)
+			openIdItem := new(models.OpenIdList)
+			openIdItem.OpenId = openId
+			openIdList = append(openIdList, openIdItem)
+
+			first := v.SecName + " :数据录入提醒"
+			keyword1 := "弘则-数据录入"
+			keyword2 := v.Frequency + ":" + v.NoticeTime
+
+			err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return
+}
+
+//周度消息推送
+func FrequencyByMonth() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("FrequencyByMonth Err:", err.Error())
+			utils.FileLog.Info("FrequencyByMonth err: %s", err.Error())
+		}
+	}()
+	frequency := "月度"
+	items, err := models.GetEdbInfoByFrequency(frequency)
+	if err != nil {
+		fmt.Println("GetFrequencyByDay err:", err.Error())
+		return
+	}
+	if len(items) <= 0 {
+		err = errors.New("没有需要推送的数据")
+		return
+	}
+	for _, v := range items {
+		noticeTime := v.NoticeTime
+		if noticeTime == "" {
+			err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
+			return
+		}
+		monthArr := strings.Split(noticeTime, " ")
+		if len(monthArr) < 2 {
+			err = errors.New("NoticeTime 参数错误: " + noticeTime)
+			return
+		}
+		monthStr := monthArr[0]
+		if monthStr == "" {
+			err = errors.New("NoticeTime 参数错误: NoticeTime:" + noticeTime + ";monthStr:" + monthStr)
+			return
+		}
+		monthVal := strings.Replace(monthStr, "日", "", -1)
+		monthVal = strings.Trim(monthVal, " ")
+		if monthVal == "" {
+			err = errors.New("weekVal 参数错误: monthVal:" + monthVal)
+			return
+		}
+		monthValInt, err := strconv.Atoi(monthVal)
+		if err != nil {
+			return err
+		}
+		nowDay := time.Now().Day()
+		if monthValInt != nowDay {
+			err = errors.New("不是当前日期,不需要发送消息: monthVal:" + monthVal + "; nowWeek:" + strconv.Itoa(nowDay))
+			return err
+		}
+		noticeStr := monthArr[1]
+		if noticeStr == "" {
+			err = errors.New("noticeStr 参数错误: noticeStr:" + noticeStr)
+			return err
+		}
+		noticeTimeArr := strings.Split(noticeStr, ":")
+		if len(noticeTimeArr) < 3 {
+			err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
+			return err
+		}
+		noticeHour, err := strconv.Atoi(noticeTimeArr[0])
+		if err != nil {
+			return err
+		}
+		noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
+		if err != nil {
+			return err
+		}
+		noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
+		if err != nil {
+			return err
+		}
+
+		noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
+
+		mbefor, _ := time.ParseDuration("-1m")
+		mafter, _ := time.ParseDuration("1m")
+		nowBefor := time.Now().Add(mbefor)
+		nowAfter := time.Now().Add(mafter)
+		nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
+		nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
+
+		if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
+			//获取用户信息
+			var openId string
+			isAdmin := true
+			admin, err := models.GetAdminByAdminId(v.UserId)
+			if err != nil {
+				if err.Error() == utils.ErrNoRow() {
+					isAdmin = false
+				} else {
+					return err
+				}
+			}
+			if admin == nil {
+				isAdmin = false
+			}
+			if isAdmin {
+				if admin.Mobile == "" {
+
+				} else {
+					wxUser, err := models.GetWxUserByMobile(admin.Mobile)
+					if err != nil {
+						return err
+					}
+					if wxUser == nil {
+						err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
+						return err
+					}
+					openId = wxUser.OpenId
+				}
+			} else {
+				wxUser, err := models.GetWxUserByUserId(v.UserId)
+				if err != nil {
+					return err
+				}
+				if wxUser == nil {
+					err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
+					return err
+				}
+				openId = wxUser.OpenId
+			}
+			//发送消息
+			if openId == "" {
+				err = errors.New("openId is empty")
+				return err
+			}
+			openIdList := make([]*models.OpenIdList, 0)
+			openIdItem := new(models.OpenIdList)
+			openIdItem.OpenId = openId
+			openIdList = append(openIdList, openIdItem)
+
+			first := v.SecName + " :数据录入提醒"
+			keyword1 := "弘则-数据录入"
+			keyword2 := v.Frequency + ":" + v.NoticeTime
+
+			err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return
+}

+ 16 - 2
services/task.go

@@ -6,12 +6,16 @@ import (
 )
 
 func Task() {
-	fmt.Println("start")
+	fmt.Println("task start")
 	//发送邮件
 	sendEmail := toolbox.NewTask("sendEmail", "0 0 12 * * 0 ", SendEmail)
 	toolbox.AddTask("sendEmail", sendEmail)
+
+	oneMinute := toolbox.NewTask("oneMinute", "0 */1 * * * * ", OneMinute)
+	toolbox.AddTask("oneMinute", oneMinute)
+
 	toolbox.StartTask()
-	fmt.Println("end")
+	fmt.Println("task end")
 }
 
 func SendEmail() (err error) {
@@ -25,3 +29,13 @@ func SendEmail() (err error) {
 	go HongzeUsers()
 	return
 }
+
+func OneMinute() (err error) {
+	//日度
+	FrequencyByDay()
+	//周度
+	FrequencyByWeek()
+	//月度
+	FrequencyByMonth()
+	return
+}

+ 1 - 12
services/wx_template_msg.go

@@ -12,7 +12,7 @@ import (
 )
 
 
-func SendWxMsg()(err error) {
+func SendWxMsgWithFrequencyByDay(first,keyword1,keyword2 string,openIdList []*models.OpenIdList)(err error) {
 	var msg string
 	defer func() {
 		if err!=nil {
@@ -31,12 +31,6 @@ func SendWxMsg()(err error) {
 		msg="accessToken is empty"
 		return
 	}
-	openIdList,err:=models.GetWxOpenIdList()
-	if err!=nil {
-		msg="get openIdList err:"+err.Error()
-		return
-	}
-	fmt.Println("openIdListCount:",len(openIdList))
 
 	sendUrl:= "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+accessToken
 	templateId:="P0klzaZjEI2UYth-z-WnmtOQgyxcF8klPoA_MlsA8Eo"
@@ -50,11 +44,6 @@ func SendWxMsg()(err error) {
 	//redirectUrl:="report.hzinsights.com/#/allindex/"+strconv.Itoa(v.ResearchReportId)+"/"+v.ReportType;
 
 	//sendMap["url"]=redirectUrl
-
-	keyword1:="弘则数据录入"
-	first := "预约数据录入提醒";
-
-	keyword2:=time.Now().Format(utils.FormatDateTime)
 	remark:="备注信息"
 	sendData["first"]=map[string]interface{}{"value":first,"color":"#173177"}
 	sendData["keyword1"]=map[string]interface{}{"value":keyword1,"color":"#173177"}