|
@@ -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
|
|
|
+}
|