data_entry.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  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 := "数据录入提醒"
  109. keyword1 := v.SecName
  110. keyword2 := "每日 " + v.NoticeTime
  111. remark := v.SecName + "该更新了"
  112. err = SendWxMsgWithFrequency(first, keyword1, keyword2, remark, openIdList)
  113. if err != nil {
  114. return err
  115. }
  116. }
  117. }
  118. return
  119. }
  120. //周度消息推送
  121. func FrequencyByWeek() (err error) {
  122. defer func() {
  123. if err != nil {
  124. fmt.Println("FrequencyByWeek Err:", err.Error())
  125. utils.FileLog.Info("FrequencyByWeek err: %s", err.Error())
  126. }
  127. }()
  128. frequency := "周度"
  129. nowWeekDay := utils.GetWeekDay()
  130. fmt.Println("nowWeekDay:", nowWeekDay)
  131. items, err := models.GetEdbInfoByFrequencyWeek(frequency, nowWeekDay)
  132. if err != nil {
  133. fmt.Println("GetFrequencyByDay err:", err.Error())
  134. return
  135. }
  136. if len(items) <= 0 {
  137. err = errors.New("没有需要推送的数据,FrequencyByWeek")
  138. return
  139. }
  140. nowDate := time.Now().Format(utils.FormatDate)
  141. for _, v := range items {
  142. //判断指标当天数据是否已录入
  143. dataCount, err := models.GetEdbdataCount(v.TradeCode, nowDate)
  144. if err != nil {
  145. return err
  146. }
  147. if dataCount > 0 {
  148. utils.FileLog.Info("%s", v.TradeCode+" :当天数据已录入,无需提醒")
  149. continue
  150. }
  151. count, err := models.GetEdbinfoSendMsgCount(v.UserId, v.TradeCode)
  152. if err != nil {
  153. fmt.Println("GetEdbinfoSendMsgCount Err:" + err.Error())
  154. return err
  155. }
  156. if count > 0 {
  157. fmt.Println(v.UserId, v.TradeCode, "当天已发送")
  158. continue
  159. }
  160. noticeTime := v.NoticeTime
  161. if noticeTime == "" {
  162. err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
  163. return err
  164. }
  165. weekArr := strings.Split(noticeTime, " ")
  166. if len(weekArr) < 2 {
  167. err = errors.New("NoticeTime 参数错误: " + noticeTime)
  168. return err
  169. }
  170. weekVal := weekArr[0]
  171. weekVal = strings.Trim(weekVal, " ")
  172. if weekVal == "" {
  173. err = errors.New("weekVal 参数错误: weekVal:" + weekVal)
  174. return err
  175. }
  176. fmt.Println("weekVal:", weekVal, " nowWeek:", nowWeekDay)
  177. if weekVal != nowWeekDay {
  178. err = errors.New("不是当前日期,不需要发送消息: weekVal:" + weekVal + "; nowWeek:" + nowWeekDay)
  179. return err
  180. }
  181. noticeStr := weekArr[1]
  182. if noticeStr == "" {
  183. err = errors.New("noticeStr 参数错误: noticeStr:" + noticeStr)
  184. return err
  185. }
  186. noticeTimeArr := strings.Split(noticeStr, ":")
  187. if len(noticeTimeArr) < 3 {
  188. err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
  189. return err
  190. }
  191. noticeHour, err := strconv.Atoi(noticeTimeArr[0])
  192. if err != nil {
  193. return err
  194. }
  195. noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
  196. if err != nil {
  197. return err
  198. }
  199. noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
  200. if err != nil {
  201. return err
  202. }
  203. noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
  204. mbefor, _ := time.ParseDuration("-1m")
  205. mafter, _ := time.ParseDuration("1m")
  206. nowBefor := time.Now().Add(mbefor)
  207. nowAfter := time.Now().Add(mafter)
  208. nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
  209. nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
  210. if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
  211. //获取用户信息
  212. var openId string
  213. isAdmin := true
  214. admin, err := models.GetAdminByAdminId(v.UserId)
  215. if err != nil {
  216. if err.Error() == utils.ErrNoRow() {
  217. isAdmin = false
  218. } else {
  219. return err
  220. }
  221. }
  222. if admin == nil {
  223. isAdmin = false
  224. }
  225. if isAdmin {
  226. if admin.Mobile == "" {
  227. } else {
  228. wxUser, err := models.GetWxUserByMobile(admin.Mobile)
  229. if err != nil {
  230. return err
  231. }
  232. if wxUser == nil {
  233. err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
  234. return err
  235. }
  236. openId = wxUser.OpenId
  237. }
  238. } else {
  239. wxUser, err := models.GetWxUserByUserId(v.UserId)
  240. if err != nil {
  241. return err
  242. }
  243. if wxUser == nil {
  244. err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
  245. return err
  246. }
  247. openId = wxUser.OpenId
  248. }
  249. //发送消息
  250. if openId == "" {
  251. err = errors.New("openId is empty")
  252. return err
  253. }
  254. openIdList := make([]*models.OpenIdList, 0)
  255. openIdItem := new(models.OpenIdList)
  256. openIdItem.OpenId = openId
  257. openIdList = append(openIdList, openIdItem)
  258. first := "数据录入提醒"
  259. keyword1 := v.SecName
  260. keyword2 := "每周 " + v.NoticeTime
  261. remark := v.SecName + "该更新了"
  262. err = SendWxMsgWithFrequency(first, keyword1, keyword2, remark, openIdList)
  263. if err != nil {
  264. return err
  265. }
  266. //发送成功,记录发送日志
  267. {
  268. sendRecord := new(models.EdbinfoSendMsgRecord)
  269. sendRecord.UserId = v.UserId
  270. sendRecord.TradeCode = v.TradeCode
  271. sendRecord.CreateTime = time.Now()
  272. err = models.AddEdbinfoSendMsgRecord(sendRecord)
  273. if err != nil {
  274. return err
  275. }
  276. }
  277. } else {
  278. utils.FileLog.Info("%s", v.TradeCode+":不在推送消息时间范围内")
  279. }
  280. }
  281. return
  282. }
  283. //周度消息推送
  284. func FrequencyByMonth() (err error) {
  285. defer func() {
  286. if err != nil {
  287. fmt.Println("FrequencyByMonth Err:", err.Error())
  288. utils.FileLog.Info("FrequencyByMonth err: %s", err.Error())
  289. }
  290. }()
  291. frequency := "月度"
  292. items, err := models.GetEdbInfoByFrequency(frequency)
  293. if err != nil {
  294. fmt.Println("GetFrequencyByDay err:", err.Error())
  295. return
  296. }
  297. if len(items) <= 0 {
  298. err = errors.New("没有需要推送的数据")
  299. return
  300. }
  301. for _, v := range items {
  302. noticeTime := v.NoticeTime
  303. if noticeTime == "" {
  304. err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
  305. return
  306. }
  307. monthArr := strings.Split(noticeTime, " ")
  308. if len(monthArr) < 2 {
  309. err = errors.New("NoticeTime 参数错误: " + noticeTime)
  310. return
  311. }
  312. monthStr := monthArr[0]
  313. if monthStr == "" {
  314. err = errors.New("NoticeTime 参数错误: NoticeTime:" + noticeTime + ";monthStr:" + monthStr)
  315. return
  316. }
  317. monthVal := strings.Replace(monthStr, "日", "", -1)
  318. monthVal = strings.Trim(monthVal, " ")
  319. if monthVal == "" {
  320. err = errors.New("weekVal 参数错误: monthVal:" + monthVal)
  321. return
  322. }
  323. monthValInt, err := strconv.Atoi(monthVal)
  324. if err != nil {
  325. return err
  326. }
  327. nowDay := time.Now().Day()
  328. if monthValInt != nowDay {
  329. err = errors.New("不是当前日期,不需要发送消息: monthVal:" + monthVal + "; nowWeek:" + strconv.Itoa(nowDay))
  330. return err
  331. }
  332. noticeStr := monthArr[1]
  333. if noticeStr == "" {
  334. err = errors.New("noticeStr 参数错误: noticeStr:" + noticeStr)
  335. return err
  336. }
  337. noticeTimeArr := strings.Split(noticeStr, ":")
  338. if len(noticeTimeArr) < 3 {
  339. err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
  340. return err
  341. }
  342. noticeHour, err := strconv.Atoi(noticeTimeArr[0])
  343. if err != nil {
  344. return err
  345. }
  346. noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
  347. if err != nil {
  348. return err
  349. }
  350. noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
  351. if err != nil {
  352. return err
  353. }
  354. noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
  355. mbefor, _ := time.ParseDuration("-1m")
  356. mafter, _ := time.ParseDuration("1m")
  357. nowBefor := time.Now().Add(mbefor)
  358. nowAfter := time.Now().Add(mafter)
  359. nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
  360. nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
  361. if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
  362. //获取用户信息
  363. var openId string
  364. isAdmin := true
  365. admin, err := models.GetAdminByAdminId(v.UserId)
  366. if err != nil {
  367. if err.Error() == utils.ErrNoRow() {
  368. isAdmin = false
  369. } else {
  370. return err
  371. }
  372. }
  373. if admin == nil {
  374. isAdmin = false
  375. }
  376. if isAdmin {
  377. if admin.Mobile == "" {
  378. } else {
  379. wxUser, err := models.GetWxUserByMobile(admin.Mobile)
  380. if err != nil {
  381. return err
  382. }
  383. if wxUser == nil {
  384. err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
  385. return err
  386. }
  387. openId = wxUser.OpenId
  388. }
  389. } else {
  390. wxUser, err := models.GetWxUserByUserId(v.UserId)
  391. if err != nil {
  392. return err
  393. }
  394. if wxUser == nil {
  395. err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
  396. return err
  397. }
  398. openId = wxUser.OpenId
  399. }
  400. //发送消息
  401. if openId == "" {
  402. err = errors.New("openId is empty")
  403. return err
  404. }
  405. openIdList := make([]*models.OpenIdList, 0)
  406. openIdItem := new(models.OpenIdList)
  407. openIdItem.OpenId = openId
  408. openIdList = append(openIdList, openIdItem)
  409. first := "数据录入提醒"
  410. keyword1 := v.SecName
  411. keyword2 := "每月 " + v.NoticeTime
  412. remark := v.SecName + "该更新了"
  413. err = SendWxMsgWithFrequency(first, keyword1, keyword2, remark, openIdList)
  414. if err != nil {
  415. return err
  416. }
  417. }
  418. }
  419. return
  420. }