generate.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. // Copyright 2021 getensh.com. All rights reserved.
  2. // Use of this source code is governed by getensh.com.
  3. package reminder
  4. import (
  5. "context"
  6. "encoding/json"
  7. "fmt"
  8. "git.getensh.com/common/gopkgs/cache"
  9. "git.getensh.com/common/gopkgs/logger"
  10. "go.uber.org/zap"
  11. "property-task/impl/v1/common"
  12. "property-task/pb"
  13. pb_v1 "property-task/pb/v1"
  14. "time"
  15. )
  16. // 费用对象类型
  17. const (
  18. ObjTypeHouse = 1
  19. ObjTypeSpace = 2
  20. ObjTypeVehicle = 3
  21. )
  22. // 业主类型(业主,家人,租客)
  23. const (
  24. UserTypeHousehold = 1
  25. UserTypeFamily = 2
  26. UserTypeRenter = 3
  27. )
  28. var userTypeM = map[int32][]int32{
  29. 1: []int32{UserTypeHousehold},
  30. 2: []int32{UserTypeHousehold, UserTypeFamily},
  31. 3: []int32{UserTypeHousehold, UserTypeFamily, UserTypeRenter},
  32. }
  33. var UrgeTitleM = map[int32]string{
  34. ObjTypeHouse: "您的房屋有欠费账单",
  35. ObjTypeSpace: "您的车位有欠费账单",
  36. ObjTypeVehicle: "您的车辆有欠费账单",
  37. }
  38. // 获取催缴配置
  39. func getUrgeConf(gardenId int64) *pb_v1.ChargeUrgeInfoReply {
  40. mreq := pb_v1.ChargeUrgeInfoRequest{}
  41. mreq.GardenId = gardenId
  42. reply, err := pb.Garden.ChargeUrgeInfo(context.Background(), &mreq)
  43. if err != nil {
  44. logger.Error("func",
  45. zap.String("call", "pb.Garden.ChargeUrgeInfo "),
  46. zap.String("error", err.Error()))
  47. return nil
  48. }
  49. return reply
  50. }
  51. // 获取催缴用户的联系方式
  52. func getUrgeObjUserContact(gardenId int64, userType []int32, isNew bool) ([]interface{}, []interface{}) {
  53. mreq := pb_v1.GenerateReminderRequest{}
  54. mreq.GardenId = gardenId
  55. mreq.UserType = userType
  56. mreq.IsNew = isNew
  57. reply, err := pb.Garden.GenerateReminder(context.Background(), &mreq)
  58. if err != nil {
  59. logger.Error("func",
  60. zap.String("call", "pb.Garden.GenerateReminder "),
  61. zap.String("error", err.Error()))
  62. return nil, nil
  63. }
  64. phones := []interface{}{}
  65. openIds := []interface{}{}
  66. for _, objs := range reply.List {
  67. for _, user := range objs.Users {
  68. if user.Phone != "" {
  69. phones = append(phones, user.Phone)
  70. }
  71. if user.PublicOpenId != "" {
  72. openIds = append(openIds, user.PublicOpenId)
  73. }
  74. }
  75. }
  76. return phones, openIds
  77. }
  78. func isPhoneMsg(msgType int32) bool {
  79. return msgType == 1 || msgType == 3
  80. }
  81. func isWxMsg(msgType int32) bool {
  82. return msgType == 2 || msgType == 3
  83. }
  84. func CanUrg(urgeConf *pb_v1.ChargeUrgeInfoReply, nowDay time.Time) bool {
  85. if urgeConf == nil {
  86. return false
  87. }
  88. // 不催缴
  89. if urgeConf.UrgeDay == 0 {
  90. return false
  91. }
  92. // 判断是否今天生成催缴
  93. if nowDay.Day() != int(urgeConf.UrgeDay) {
  94. return false
  95. }
  96. return true
  97. }
  98. // 定时生成催缴单
  99. func GenerateReminder() {
  100. fmt.Printf("开始生成催缴信息:%v\n", time.Now().Format("2006-01-02 15:04:05"))
  101. now := time.Now()
  102. nowDay := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  103. cache.RedisLock(common.TaskKey)
  104. defer cache.RedisUnlock(common.TaskKey)
  105. // 获取小区列表
  106. gardens := common.GetGardenList()
  107. // 缓存小区信息,发送催缴信息时会用到
  108. if len(gardens) > 0 {
  109. bytes, _ := json.Marshal(gardens)
  110. cacheGardenInfo(nowDay.Unix(), string(bytes))
  111. }
  112. for _, garden := range gardens {
  113. //
  114. delOldObjUsers(nowDay.Unix(), garden.GardenId)
  115. // 获取定时催缴配置
  116. urgeConf := getUrgeConf(garden.GardenId)
  117. // 是否能催缴
  118. if !CanUrg(urgeConf, nowDay) {
  119. // 查询小区内所有需要催缴的用户的联系方式
  120. phones, openIds := getUrgeObjUserContact(garden.GardenId, userTypeM[urgeConf.UrgeTarget], true)
  121. // 缓存手机号或用户openid等到8点30发送(cronb)
  122. if isPhoneMsg(urgeConf.UrgeMsgType) && len(phones) > 0 {
  123. cacheAllObjUsersPhone(nowDay.Unix(), garden.GardenId, phones)
  124. }
  125. if isWxMsg(urgeConf.UrgeMsgType) && len(openIds) > 0 {
  126. cacheAllObjUsersOpenid(nowDay.Unix(), garden.GardenId, openIds)
  127. }
  128. continue
  129. }
  130. // 查询小区内所有需要催缴的用户的联系方式
  131. phones, openIds := getUrgeObjUserContact(garden.GardenId, userTypeM[urgeConf.UrgeTarget], false)
  132. // 缓存手机号或用户openid等到9点30发送(cronb)
  133. if isPhoneMsg(urgeConf.UrgeMsgType) && len(phones) > 0 {
  134. cacheAllObjUsersPhone(nowDay.Unix(), garden.GardenId, phones)
  135. }
  136. if isWxMsg(urgeConf.UrgeMsgType) && len(openIds) > 0 {
  137. cacheAllObjUsersOpenid(nowDay.Unix(), garden.GardenId, openIds)
  138. }
  139. }
  140. }