data_entry.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_task/models"
  6. "hongze/hongze_task/utils"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. //数据录入
  12. //日度消息推送
  13. func FrequencyByDay() (err error) {
  14. defer func() {
  15. if err != nil {
  16. fmt.Println("FrequencyByDay Err:", err.Error())
  17. utils.FileLog.Info("FrequencyByDay err: %s", err.Error())
  18. }
  19. }()
  20. frequency := "日度"
  21. items, err := models.GetEdbInfoByFrequency(frequency)
  22. if err != nil {
  23. fmt.Println("GetFrequencyByDay err:", err.Error())
  24. return
  25. }
  26. if len(items) <= 0 {
  27. err=errors.New("没有需要推送的数据")
  28. return
  29. }
  30. for _, v := range items {
  31. noticeTime := v.NoticeTime
  32. if noticeTime == "" {
  33. err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
  34. return
  35. }
  36. noticeTimeArr := strings.Split(noticeTime, ":")
  37. if len(noticeTimeArr) < 3 {
  38. err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
  39. return
  40. }
  41. noticeHour, err := strconv.Atoi(noticeTimeArr[0])
  42. if err != nil {
  43. return err
  44. }
  45. noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
  46. if err != nil {
  47. return err
  48. }
  49. noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
  50. if err != nil {
  51. return err
  52. }
  53. noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
  54. mbefor, _ := time.ParseDuration("-1m")
  55. mafter, _ := time.ParseDuration("1m")
  56. nowBefor := time.Now().Add(mbefor)
  57. nowAfter := time.Now().Add(mafter)
  58. nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
  59. nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
  60. if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
  61. //获取用户信息
  62. var openId string
  63. isAdmin := true
  64. admin, err := models.GetAdminByAdminId(v.UserId)
  65. if err != nil {
  66. if err.Error() == utils.ErrNoRow() {
  67. isAdmin = false
  68. } else {
  69. return err
  70. }
  71. }
  72. if admin == nil {
  73. isAdmin = false
  74. }
  75. if isAdmin {
  76. if admin.Mobile == "" {
  77. } else {
  78. wxUser, err := models.GetWxUserByMobile(admin.Mobile)
  79. if err != nil {
  80. return err
  81. }
  82. if wxUser == nil {
  83. err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
  84. return err
  85. }
  86. openId = wxUser.OpenId
  87. }
  88. } else {
  89. wxUser, err := models.GetWxUserByUserId(v.UserId)
  90. if err != nil {
  91. return err
  92. }
  93. if wxUser == nil {
  94. err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
  95. return err
  96. }
  97. openId = wxUser.OpenId
  98. }
  99. //发送消息
  100. if openId == "" {
  101. err = errors.New("openId is empty")
  102. return err
  103. }
  104. openIdList := make([]*models.OpenIdList, 0)
  105. openIdItem := new(models.OpenIdList)
  106. openIdItem.OpenId = openId
  107. openIdList = append(openIdList, openIdItem)
  108. first := v.SecName + " :数据录入提醒"
  109. keyword1 := "弘则-数据录入"
  110. keyword2 := v.Frequency + ":" + v.NoticeTime
  111. err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
  112. if err != nil {
  113. return err
  114. }
  115. }
  116. }
  117. return
  118. }
  119. //周度消息推送
  120. func FrequencyByWeek() (err error) {
  121. defer func() {
  122. if err != nil {
  123. fmt.Println("FrequencyByWeek Err:", err.Error())
  124. utils.FileLog.Info("FrequencyByWeek err: %s", err.Error())
  125. }
  126. }()
  127. frequency := "周度"
  128. items, err := models.GetEdbInfoByFrequency(frequency)
  129. if err != nil {
  130. fmt.Println("GetFrequencyByDay err:", err.Error())
  131. return
  132. }
  133. if len(items) <= 0 {
  134. err=errors.New("没有需要推送的数据,FrequencyByWeek")
  135. return
  136. }
  137. for _, v := range items {
  138. noticeTime := v.NoticeTime
  139. if noticeTime == "" {
  140. err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
  141. return
  142. }
  143. weekArr := strings.Split(noticeTime, " ")
  144. if len(weekArr) < 2 {
  145. err = errors.New("NoticeTime 参数错误: " + noticeTime)
  146. return
  147. }
  148. week := weekArr[0]
  149. var weekVal string
  150. switch week {
  151. case "周一":
  152. weekVal = "Monday"
  153. break
  154. case "周二":
  155. weekVal = "Tuesday"
  156. break
  157. case "周三":
  158. weekVal = "Wednesday"
  159. break
  160. case "周四":
  161. weekVal = "Thursday"
  162. break
  163. case "周五":
  164. weekVal = "Friday"
  165. break
  166. case "周六":
  167. weekVal = "Saturday"
  168. break
  169. case "周日":
  170. weekVal = "Sunday"
  171. break
  172. default:
  173. weekVal = ""
  174. break
  175. }
  176. if weekVal == "" {
  177. err = errors.New("weekVal 参数错误: weekVal:" + weekVal)
  178. return
  179. }
  180. nowWeek := time.Now().Weekday().String()
  181. if weekVal != nowWeek {
  182. err = errors.New("不是当前日期,不需要发送消息: weekVal:" + weekVal + "; nowWeek:" + nowWeek)
  183. return
  184. }
  185. noticeStr := weekArr[1]
  186. if noticeStr == "" {
  187. err = errors.New("noticeStr 参数错误: noticeStr:" + noticeStr)
  188. return
  189. }
  190. noticeTimeArr := strings.Split(noticeStr, ":")
  191. if len(noticeTimeArr) < 3 {
  192. err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
  193. return
  194. }
  195. noticeHour, err := strconv.Atoi(noticeTimeArr[0])
  196. if err != nil {
  197. return err
  198. }
  199. noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
  200. if err != nil {
  201. return err
  202. }
  203. noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
  204. if err != nil {
  205. return err
  206. }
  207. noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
  208. mbefor, _ := time.ParseDuration("-1m")
  209. mafter, _ := time.ParseDuration("1m")
  210. nowBefor := time.Now().Add(mbefor)
  211. nowAfter := time.Now().Add(mafter)
  212. nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
  213. nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
  214. if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
  215. //获取用户信息
  216. var openId string
  217. isAdmin := true
  218. admin, err := models.GetAdminByAdminId(v.UserId)
  219. if err != nil {
  220. if err.Error() == utils.ErrNoRow() {
  221. isAdmin = false
  222. } else {
  223. return err
  224. }
  225. }
  226. if admin == nil {
  227. isAdmin = false
  228. }
  229. if isAdmin {
  230. if admin.Mobile == "" {
  231. } else {
  232. wxUser, err := models.GetWxUserByMobile(admin.Mobile)
  233. if err != nil {
  234. return err
  235. }
  236. if wxUser == nil {
  237. err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
  238. return err
  239. }
  240. openId = wxUser.OpenId
  241. }
  242. } else {
  243. wxUser, err := models.GetWxUserByUserId(v.UserId)
  244. if err != nil {
  245. return err
  246. }
  247. if wxUser == nil {
  248. err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
  249. return err
  250. }
  251. openId = wxUser.OpenId
  252. }
  253. //发送消息
  254. if openId == "" {
  255. err = errors.New("openId is empty")
  256. return err
  257. }
  258. openIdList := make([]*models.OpenIdList, 0)
  259. openIdItem := new(models.OpenIdList)
  260. openIdItem.OpenId = openId
  261. openIdList = append(openIdList, openIdItem)
  262. first := v.SecName + " :数据录入提醒"
  263. keyword1 := "弘则-数据录入"
  264. keyword2 := v.Frequency + ":" + v.NoticeTime
  265. err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
  266. if err != nil {
  267. return err
  268. }
  269. }
  270. }
  271. return
  272. }
  273. //周度消息推送
  274. func FrequencyByMonth() (err error) {
  275. defer func() {
  276. if err != nil {
  277. fmt.Println("FrequencyByMonth Err:", err.Error())
  278. utils.FileLog.Info("FrequencyByMonth err: %s", err.Error())
  279. }
  280. }()
  281. frequency := "月度"
  282. items, err := models.GetEdbInfoByFrequency(frequency)
  283. if err != nil {
  284. fmt.Println("GetFrequencyByDay err:", err.Error())
  285. return
  286. }
  287. if len(items) <= 0 {
  288. err = errors.New("没有需要推送的数据")
  289. return
  290. }
  291. for _, v := range items {
  292. noticeTime := v.NoticeTime
  293. if noticeTime == "" {
  294. err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
  295. return
  296. }
  297. monthArr := strings.Split(noticeTime, " ")
  298. if len(monthArr) < 2 {
  299. err = errors.New("NoticeTime 参数错误: " + noticeTime)
  300. return
  301. }
  302. monthStr := monthArr[0]
  303. if monthStr == "" {
  304. err = errors.New("NoticeTime 参数错误: NoticeTime:" + noticeTime + ";monthStr:" + monthStr)
  305. return
  306. }
  307. monthVal := strings.Replace(monthStr, "日", "", -1)
  308. monthVal = strings.Trim(monthVal, " ")
  309. if monthVal == "" {
  310. err = errors.New("weekVal 参数错误: monthVal:" + monthVal)
  311. return
  312. }
  313. monthValInt, err := strconv.Atoi(monthVal)
  314. if err != nil {
  315. return err
  316. }
  317. nowDay := time.Now().Day()
  318. if monthValInt != nowDay {
  319. err = errors.New("不是当前日期,不需要发送消息: monthVal:" + monthVal + "; nowWeek:" + strconv.Itoa(nowDay))
  320. return err
  321. }
  322. noticeStr := monthArr[1]
  323. if noticeStr == "" {
  324. err = errors.New("noticeStr 参数错误: noticeStr:" + noticeStr)
  325. return err
  326. }
  327. noticeTimeArr := strings.Split(noticeStr, ":")
  328. if len(noticeTimeArr) < 3 {
  329. err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
  330. return err
  331. }
  332. noticeHour, err := strconv.Atoi(noticeTimeArr[0])
  333. if err != nil {
  334. return err
  335. }
  336. noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
  337. if err != nil {
  338. return err
  339. }
  340. noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
  341. if err != nil {
  342. return err
  343. }
  344. noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
  345. mbefor, _ := time.ParseDuration("-1m")
  346. mafter, _ := time.ParseDuration("1m")
  347. nowBefor := time.Now().Add(mbefor)
  348. nowAfter := time.Now().Add(mafter)
  349. nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
  350. nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
  351. if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
  352. //获取用户信息
  353. var openId string
  354. isAdmin := true
  355. admin, err := models.GetAdminByAdminId(v.UserId)
  356. if err != nil {
  357. if err.Error() == utils.ErrNoRow() {
  358. isAdmin = false
  359. } else {
  360. return err
  361. }
  362. }
  363. if admin == nil {
  364. isAdmin = false
  365. }
  366. if isAdmin {
  367. if admin.Mobile == "" {
  368. } else {
  369. wxUser, err := models.GetWxUserByMobile(admin.Mobile)
  370. if err != nil {
  371. return err
  372. }
  373. if wxUser == nil {
  374. err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
  375. return err
  376. }
  377. openId = wxUser.OpenId
  378. }
  379. } else {
  380. wxUser, err := models.GetWxUserByUserId(v.UserId)
  381. if err != nil {
  382. return err
  383. }
  384. if wxUser == nil {
  385. err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
  386. return err
  387. }
  388. openId = wxUser.OpenId
  389. }
  390. //发送消息
  391. if openId == "" {
  392. err = errors.New("openId is empty")
  393. return err
  394. }
  395. openIdList := make([]*models.OpenIdList, 0)
  396. openIdItem := new(models.OpenIdList)
  397. openIdItem.OpenId = openId
  398. openIdList = append(openIdList, openIdItem)
  399. first := v.SecName + " :数据录入提醒"
  400. keyword1 := "弘则-数据录入"
  401. keyword2 := v.Frequency + ":" + v.NoticeTime
  402. err = SendWxMsgWithFrequencyByDay(first, keyword1, keyword2, openIdList)
  403. if err != nil {
  404. return err
  405. }
  406. }
  407. }
  408. return
  409. }