data_entry.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  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. }
  278. }
  279. return
  280. }
  281. //周度消息推送
  282. func FrequencyByMonth() (err error) {
  283. defer func() {
  284. if err != nil {
  285. fmt.Println("FrequencyByMonth Err:", err.Error())
  286. utils.FileLog.Info("FrequencyByMonth err: %s", err.Error())
  287. }
  288. }()
  289. frequency := "月度"
  290. items, err := models.GetEdbInfoByFrequency(frequency)
  291. if err != nil {
  292. fmt.Println("GetFrequencyByDay err:", err.Error())
  293. return
  294. }
  295. if len(items) <= 0 {
  296. err = errors.New("没有需要推送的数据")
  297. return
  298. }
  299. for _, v := range items {
  300. noticeTime := v.NoticeTime
  301. if noticeTime == "" {
  302. err = errors.New("NoticeTime 参数错误:NoticeTime is empty ")
  303. return
  304. }
  305. monthArr := strings.Split(noticeTime, " ")
  306. if len(monthArr) < 2 {
  307. err = errors.New("NoticeTime 参数错误: " + noticeTime)
  308. return
  309. }
  310. monthStr := monthArr[0]
  311. if monthStr == "" {
  312. err = errors.New("NoticeTime 参数错误: NoticeTime:" + noticeTime + ";monthStr:" + monthStr)
  313. return
  314. }
  315. monthVal := strings.Replace(monthStr, "日", "", -1)
  316. monthVal = strings.Trim(monthVal, " ")
  317. if monthVal == "" {
  318. err = errors.New("weekVal 参数错误: monthVal:" + monthVal)
  319. return
  320. }
  321. monthValInt, err := strconv.Atoi(monthVal)
  322. if err != nil {
  323. return err
  324. }
  325. nowDay := time.Now().Day()
  326. if monthValInt != nowDay {
  327. err = errors.New("不是当前日期,不需要发送消息: monthVal:" + monthVal + "; nowWeek:" + strconv.Itoa(nowDay))
  328. return err
  329. }
  330. noticeStr := monthArr[1]
  331. if noticeStr == "" {
  332. err = errors.New("noticeStr 参数错误: noticeStr:" + noticeStr)
  333. return err
  334. }
  335. noticeTimeArr := strings.Split(noticeStr, ":")
  336. if len(noticeTimeArr) < 3 {
  337. err = errors.New("NoticeTime 参数错误,noticeTime:" + noticeTime)
  338. return err
  339. }
  340. noticeHour, err := strconv.Atoi(noticeTimeArr[0])
  341. if err != nil {
  342. return err
  343. }
  344. noticeMinute, err := strconv.Atoi(noticeTimeArr[1])
  345. if err != nil {
  346. return err
  347. }
  348. noticeSecond, err := strconv.Atoi(noticeTimeArr[2])
  349. if err != nil {
  350. return err
  351. }
  352. noticeSecondTotal := noticeHour*3600 + noticeMinute*60 + noticeSecond
  353. mbefor, _ := time.ParseDuration("-1m")
  354. mafter, _ := time.ParseDuration("1m")
  355. nowBefor := time.Now().Add(mbefor)
  356. nowAfter := time.Now().Add(mafter)
  357. nowBeforSecond := nowBefor.Hour()*3600 + nowBefor.Minute()*60 + nowBefor.Second()
  358. nowAfterSecond := nowAfter.Hour()*3600 + nowAfter.Minute()*60 + nowAfter.Second()
  359. if noticeSecondTotal >= nowBeforSecond && noticeSecondTotal <= nowAfterSecond {
  360. //获取用户信息
  361. var openId string
  362. isAdmin := true
  363. admin, err := models.GetAdminByAdminId(v.UserId)
  364. if err != nil {
  365. if err.Error() == utils.ErrNoRow() {
  366. isAdmin = false
  367. } else {
  368. return err
  369. }
  370. }
  371. if admin == nil {
  372. isAdmin = false
  373. }
  374. if isAdmin {
  375. if admin.Mobile == "" {
  376. } else {
  377. wxUser, err := models.GetWxUserByMobile(admin.Mobile)
  378. if err != nil {
  379. return err
  380. }
  381. if wxUser == nil {
  382. err = errors.New("用户信息不存在:mobile:" + admin.Mobile)
  383. return err
  384. }
  385. openId = wxUser.OpenId
  386. }
  387. } else {
  388. wxUser, err := models.GetWxUserByUserId(v.UserId)
  389. if err != nil {
  390. return err
  391. }
  392. if wxUser == nil {
  393. err = errors.New("用户信息不存在:userId:" + strconv.Itoa(v.UserId))
  394. return err
  395. }
  396. openId = wxUser.OpenId
  397. }
  398. //发送消息
  399. if openId == "" {
  400. err = errors.New("openId is empty")
  401. return err
  402. }
  403. openIdList := make([]*models.OpenIdList, 0)
  404. openIdItem := new(models.OpenIdList)
  405. openIdItem.OpenId = openId
  406. openIdList = append(openIdList, openIdItem)
  407. first := "数据录入提醒"
  408. keyword1 := v.SecName
  409. keyword2 := "每月 " + v.NoticeTime
  410. remark := v.SecName + "该更新了"
  411. err = SendWxMsgWithFrequency(first, keyword1, keyword2, remark, openIdList)
  412. if err != nil {
  413. return err
  414. }
  415. }
  416. }
  417. return
  418. }