user_serivce.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package user
  2. import (
  3. "errors"
  4. logger "eta/eta_mini_ht_api/common/component/log"
  5. userDao "eta/eta_mini_ht_api/models/user"
  6. "gorm.io/gorm"
  7. "time"
  8. )
  9. type userStatus string
  10. const (
  11. UnBind userStatus = "unBind"
  12. Login userStatus = "login"
  13. Logout userStatus = "logout"
  14. )
  15. type UserDTO struct {
  16. Id int
  17. Username string
  18. AreaCode string
  19. Mobile string
  20. OpenId string
  21. UnionId string
  22. RiskLevel string
  23. RiskValidEndDate string
  24. LoginStatus userDao.LogType
  25. FollowingGzh int
  26. GzhOpenId string
  27. }
  28. type OfficialUserDTO struct {
  29. ID int
  30. IdNo string
  31. RealName string
  32. TemplateUserID int
  33. IdKind int
  34. IDValid bool
  35. AccountStatus string
  36. UserType int
  37. }
  38. type FeedbackDTO struct {
  39. Mobile string `json:"mobile"`
  40. UserId int `json:"userId"`
  41. Message string `json:"message"`
  42. }
  43. func convertUserDTO(user userDao.TemplateUser) UserDTO {
  44. return UserDTO{
  45. Id: user.Id,
  46. Username: user.Username,
  47. AreaCode: user.AreaCode,
  48. Mobile: user.Mobile,
  49. OpenId: user.OpenId,
  50. LoginStatus: user.LoginStatus,
  51. RiskLevel: user.RiskLevel,
  52. RiskValidEndDate: user.RiskValidEndDate,
  53. FollowingGzh: user.FollowingGzh,
  54. }
  55. }
  56. func convertOfficialUserDTO(user userDao.User) OfficialUserDTO {
  57. year, month, day := time.Now().Date()
  58. today := time.Date(year, month, day, 0, 0, 0, 0, time.Local)
  59. return OfficialUserDTO{
  60. ID: user.ID,
  61. RealName: user.RealName,
  62. IdNo: user.IDNo,
  63. TemplateUserID: user.TemplateUserID,
  64. IDValid: !user.IDEndDate.Before(today),
  65. IdKind: user.IDKind,
  66. AccountStatus: user.AccountStatus,
  67. }
  68. }
  69. func GetUserByMobile(mobile string) (dto UserDTO, err error) {
  70. templateUser, err := userDao.GetUserByMobile(mobile)
  71. if err != nil {
  72. if !errors.Is(err, gorm.ErrRecordNotFound) {
  73. logger.Error("查询用户失败:%v", err)
  74. }
  75. return
  76. }
  77. dto = convertUserDTO(templateUser)
  78. return
  79. }
  80. func GetUserAndCountReadTimes(userId int) (err error) {
  81. err = userDao.GetUserByIdAndCountReadTimes(userId)
  82. if err != nil {
  83. logger.Error("更新用户阅读次数失败:%v", err)
  84. }
  85. return
  86. }
  87. func UserLogout(userId int) (err error) {
  88. err = userDao.UserLogout(userId)
  89. if err != nil {
  90. logger.Error("用户退出登录失败:%v", err)
  91. }
  92. return
  93. }
  94. func UserLogin(userId int) (err error) {
  95. err = userDao.UserLogin(userId)
  96. if err != nil {
  97. logger.Error("用户登录失败:%v", err)
  98. }
  99. return
  100. }
  101. func RegisterTemplateUser(dto *UserDTO) (err error) {
  102. templateUser := convertToTemplateUser(dto)
  103. err = userDao.RegisterTemplateUser(&templateUser)
  104. if err != nil {
  105. logger.Error("创建临时用户失败:%v", err)
  106. return
  107. }
  108. convertToUserDTO(templateUser, dto)
  109. return
  110. }
  111. func GetTemplateUserByOpenId(openId string) (user UserDTO, err error) {
  112. templateUser, err := userDao.GetUserByOpenId(openId)
  113. if err != nil {
  114. logger.Error("获取用户信息失败:%v", err)
  115. return
  116. }
  117. user = convertUserDTO(templateUser)
  118. return
  119. }
  120. func FeedBack(dto FeedbackDTO) (err error) {
  121. feedBackEntity := userDao.FeedBack{
  122. Message: dto.Message,
  123. Mobile: dto.Mobile,
  124. UserID: dto.UserId,
  125. }
  126. return userDao.InsertFeedBack(feedBackEntity)
  127. }
  128. func convertToTemplateUser(dto *UserDTO) userDao.TemplateUser {
  129. return userDao.TemplateUser{
  130. Username: dto.Username,
  131. Mobile: dto.Mobile,
  132. OpenId: dto.OpenId,
  133. UnionId: dto.UnionId,
  134. GzhOpenId: dto.GzhOpenId,
  135. FollowingGzh: dto.FollowingGzh,
  136. }
  137. }
  138. func convertToUserDTO(templateUser userDao.TemplateUser, dto *UserDTO) {
  139. dto.Id = templateUser.Id
  140. dto.Username = templateUser.Username
  141. dto.Mobile = templateUser.Mobile
  142. dto.OpenId = templateUser.OpenId
  143. dto.UnionId = templateUser.UnionId
  144. dto.FollowingGzh = templateUser.FollowingGzh
  145. }
  146. func BindUserMobile(userId int, mobile string, areaCode string) (err error) {
  147. err = userDao.BindMobile(userId, mobile, areaCode)
  148. if err != nil {
  149. logger.Error("绑定手机号失败:%v", err)
  150. }
  151. return
  152. }
  153. func GetUserById(userId int) (userDto UserDTO, err error) {
  154. templateUser, err := userDao.GetUserById(userId)
  155. if err != nil {
  156. logger.Error("查询用户失败:%v", err)
  157. return
  158. }
  159. if templateUser.IsDeleted == 1 {
  160. logger.Error("用户已删除:%v", err)
  161. err = errors.New("用户已删除")
  162. return
  163. }
  164. userDto = convertUserDTO(templateUser)
  165. return
  166. }
  167. func GetUserByOpenId(openId string) (userDto UserDTO, err error) {
  168. templateUser, err := userDao.GetUserByOpenId(openId)
  169. if err != nil {
  170. logger.Error("查询用户失败:%v", err)
  171. return
  172. }
  173. if templateUser.IsDeleted == 1 {
  174. logger.Error("用户已删除:%v", err)
  175. err = errors.New("用户已删除")
  176. return
  177. }
  178. userDto = convertUserDTO(templateUser)
  179. return
  180. }
  181. func GetTemplateUserByUnionId(unionId string) (user UserDTO, err error) {
  182. templateUser, err := userDao.GetUserByUnionId(unionId)
  183. if err != nil {
  184. logger.Error("获取用户信息失败:%v", err)
  185. return
  186. }
  187. user = convertUserDTO(templateUser)
  188. return
  189. }
  190. // 绑定小程序OpenId
  191. func BindUserXcxOpenId(userId int, openId string) (err error) {
  192. err = userDao.BindXcxOpenId(userId, openId)
  193. if err != nil {
  194. if !errors.Is(err, gorm.ErrRecordNotFound) {
  195. logger.Error("绑定小程序openId失败:%v", err)
  196. }
  197. return
  198. }
  199. return
  200. }
  201. // 绑定公众号OpenId
  202. func BindUserGzhOpenId(userId int, openId string, followingGzh int) (err error) {
  203. err = userDao.BindGzhOpenId(userId, openId, followingGzh)
  204. if err != nil {
  205. if !errors.Is(err, gorm.ErrRecordNotFound) {
  206. logger.Error("绑定公众号openId失败:%v", err)
  207. }
  208. return
  209. }
  210. return
  211. }
  212. func GetTemplateUserByGzhOpenId(openId string) (user UserDTO, err error) {
  213. templateUser, err := userDao.GetUserByGzhOpenId(openId)
  214. user = convertUserDTO(templateUser)
  215. return
  216. }
  217. func GetUserByTemplateUserId(templateUserId int) (officialUser OfficialUserDTO, err error) {
  218. user, err := userDao.GetUserByTemplateUserId(templateUserId)
  219. officialUser = convertOfficialUserDTO(user)
  220. return
  221. }