user_controller.go 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. package user
  2. import (
  3. "eta/eta_mini_ht_api/common/component/cache"
  4. logger "eta/eta_mini_ht_api/common/component/log"
  5. "eta/eta_mini_ht_api/common/exception"
  6. authUtils "eta/eta_mini_ht_api/common/utils/auth"
  7. "eta/eta_mini_ht_api/controllers"
  8. "eta/eta_mini_ht_api/service/auth"
  9. "eta/eta_mini_ht_api/service/user"
  10. "fmt"
  11. )
  12. // UserController Operations about Users
  13. type UserController struct {
  14. controllers.BaseController
  15. redis *cache.RedisCache
  16. }
  17. func (u *UserController) Prepare() {
  18. u.redis = cache.GetInstance()
  19. }
  20. type LoginCode struct {
  21. Code int `json:"code"`
  22. Msg string `json:"msg"`
  23. }
  24. // Get @Title GetAll
  25. // @Description get all Users
  26. // @Success 200 {object} models.User
  27. // @router / [get]
  28. func (u *UserController) Get() {
  29. logger.Warn("查询用户列表:%s")
  30. fmt.Print("查询用户列表")
  31. u.ServeJSON()
  32. }
  33. type FeedbackReq struct {
  34. Mobile string `json:"mobile"`
  35. Message string `json:"message"`
  36. }
  37. type FollowAnalystReq struct {
  38. AnalystId int `json:"analystId"`
  39. AnalystName string `json:"analystName"`
  40. FollowType string `json:"followType"`
  41. Mobile string `json:"mobile"`
  42. ByName bool `json:"byName"`
  43. }
  44. // Feedback 用户意见反馈
  45. // @Summary 用户意见反馈
  46. // @Description 用户意见反馈
  47. // @Success 200 {object} controllers.BaseResponse
  48. // @router /feedback [post]
  49. func (u *UserController) Feedback() {
  50. controllers.Wrap(&u.BaseController, func() (result *controllers.WrapData, err error) {
  51. result = u.InitWrapData("提交反馈失败")
  52. feedback := new(FeedbackReq)
  53. u.GetPostParams(feedback)
  54. if !authUtils.IsValidMobile(feedback.Mobile) {
  55. u.FailedResult("手机号非法", result)
  56. err = exception.New(exception.IllegalPhoneNumber)
  57. return
  58. }
  59. var userInfo user.User
  60. userInfo = u.Data["user"].(user.User)
  61. if userInfo.Mobile != feedback.Mobile {
  62. u.FailedResult("非当前用户的手机号提交", result)
  63. err = exception.New(exception.NotCurrentUserError)
  64. return
  65. }
  66. if feedback.Message == "" {
  67. u.FailedResult("反馈信息不能为空", result)
  68. err = exception.New(exception.FeedBackMsgEmpty)
  69. return
  70. }
  71. err = user.FeedBack(userInfo.Id, feedback.Mobile, feedback.Message)
  72. if err != nil {
  73. err = exception.New(exception.FeedBackError)
  74. u.FailedResult("提交反馈失败", result)
  75. return
  76. }
  77. u.SuccessResult("提交反馈成功", nil, result)
  78. return
  79. })
  80. }
  81. type FollowResp struct {
  82. AnalystId int `json:"analystId"`
  83. FollowedType string `json:"FollowedType"`
  84. }
  85. // FollowAnalyst 关注研究员
  86. // @Summary 关注研究员
  87. // @Description 关注研究员
  88. // @Success 200 {object} controllers.BaseResponse
  89. // @router /followAnalyst [post]
  90. func (u *UserController) FollowAnalyst() {
  91. controllers.Wrap(&u.BaseController, func() (result *controllers.WrapData, err error) {
  92. result = u.InitWrapData("")
  93. followAnalyst := new(FollowAnalystReq)
  94. u.GetPostParams(followAnalyst)
  95. if !authUtils.IsValidMobile(followAnalyst.Mobile) {
  96. u.FailedResult("手机号非法", result)
  97. err = exception.New(exception.IllegalPhoneNumber)
  98. return
  99. }
  100. var userInfo user.User
  101. userInfo = u.Data["user"].(user.User)
  102. if userInfo.Mobile != followAnalyst.Mobile {
  103. u.FailedResult("非当前用户的手机号提交", result)
  104. err = exception.New(exception.NotCurrentUserError)
  105. return
  106. }
  107. if !checkFollowType(followAnalyst.FollowType) {
  108. u.FailedResult("关注状态非法", result)
  109. err = exception.New(exception.IllegalFollowType)
  110. return
  111. }
  112. var msg string
  113. switch followAnalyst.FollowType {
  114. case "following":
  115. msg = "关注研究员"
  116. case "unfollowed":
  117. msg = "取消关注研究员"
  118. }
  119. if followAnalyst.ByName {
  120. logger.Info("通过研究员姓名关注")
  121. if followAnalyst.AnalystName == "" {
  122. u.FailedResult("通过研究员姓名关注失败", result)
  123. err = exception.New(exception.AnalystNameEmptyError)
  124. return
  125. }
  126. err = user.FollowAnalystByName(userInfo.Id, followAnalyst.AnalystName, followAnalyst.FollowType)
  127. } else {
  128. err = user.FollowAnalyst(userInfo.Id, followAnalyst.AnalystId, followAnalyst.FollowType)
  129. }
  130. if err != nil {
  131. u.FailedResult(msg+"失败", result)
  132. return
  133. }
  134. resp := FollowResp{
  135. AnalystId: followAnalyst.AnalystId,
  136. FollowedType: followAnalyst.FollowType,
  137. }
  138. u.SuccessResult(msg+"成功", resp, result)
  139. return
  140. })
  141. }
  142. func checkFollowType(followType string) bool {
  143. return followType == "following" || followType == "unfollowed"
  144. }
  145. // FollowingAnalysts 关注研究员列表
  146. // @Summary 研究员详情
  147. // @Description 研究员详情
  148. // @Success 200 {object} controllers.BaseResponse
  149. // @router /followingAnalysts [get]
  150. func (u *UserController) FollowingAnalysts(analystId int) {
  151. controllers.Wrap(&u.BaseController, func() (result *controllers.WrapData, err error) {
  152. result = u.InitWrapData("获取研究员详情失败")
  153. fmt.Println(analystId)
  154. userInfo := u.Data["user"].(user.User)
  155. detail, err := user.GetAnalystDetail(userInfo.Id, analystId)
  156. if err != nil {
  157. u.FailedResult("获取研究员详情失败", result)
  158. return
  159. }
  160. u.SuccessResult("获取研究员详情成功", detail, result)
  161. return
  162. })
  163. }
  164. type UserProfileReq struct {
  165. UserName string `json:"userName"`
  166. Mobile string `json:"mobile"`
  167. }
  168. // Profile 获取用户信息
  169. // @Summary 获取用户信息
  170. // @Description 获取用户信息
  171. // @Success 200 {object} controllers.BaseResponse
  172. // @router /profile [get]
  173. func (u *UserController) Profile() {
  174. controllers.Wrap(&u.BaseController, func() (result *controllers.WrapData, err error) {
  175. result = u.InitWrapData("获取用户信息详情失败")
  176. userInfo := u.Data["user"].(user.User)
  177. u.SuccessResult("获取研究员详情成功", covertToUserProfile(userInfo), result)
  178. return
  179. })
  180. }
  181. // FollowingAnalystList 获取关注动态列表
  182. // @Summary 获取关注动态列表
  183. // @Description 获取关注动态列表
  184. // @Success 200 {object} controllers.BaseResponse
  185. // @router /followingAnalystList [get]
  186. func (u *UserController) FollowingAnalystList() {
  187. controllers.Wrap(&u.BaseController, func() (result *controllers.WrapData, err error) {
  188. result = u.InitWrapData("获取研究员详情失败")
  189. userInfo := u.Data["user"].(user.User)
  190. detail, err := user.GetFollowingAnalystList(userInfo.Id)
  191. if err != nil {
  192. u.FailedResult("获取研究员详情失败", result)
  193. return
  194. }
  195. u.SuccessResult("获取研究员详情成功", detail, result)
  196. return
  197. })
  198. }
  199. // UnReadMessageList 获取未读消息
  200. // @Summary 获取未读消息
  201. // @Description 获取未读消息
  202. // @Success 200 {object} controllers.BaseResponse
  203. // @router /message [get]
  204. func (u *UserController) UnReadMessageList() {
  205. controllers.Wrap(&u.BaseController, func() (result *controllers.WrapData, err error) {
  206. result = u.InitWrapData("获取我的未读消息失败")
  207. userInfo := u.Data["user"].(user.User)
  208. messages, err := user.GetUnReadMessageList(userInfo.Id)
  209. if err != nil {
  210. u.FailedResult("获取我的未读消息失败", result)
  211. return
  212. }
  213. u.SuccessResult("获取我的未读消息成功", messages, result)
  214. return
  215. })
  216. }
  217. type ReadMessageReq struct {
  218. AnalystId int `json:"analystId"`
  219. MessageId int `json:"MessageId"`
  220. }
  221. // ReadMessage 获取未读消息
  222. // @Summary 获取未读消息
  223. // @Description 获取未读消息
  224. // @Success 200 {object} controllers.BaseResponse
  225. // @router /readMessage [post]
  226. func (u *UserController) ReadMessage() {
  227. controllers.Wrap(&u.BaseController, func() (result *controllers.WrapData, err error) {
  228. result = u.InitWrapData("获取我的未读消息失败")
  229. readMessageReq := new(ReadMessageReq)
  230. u.GetPostParams(readMessageReq)
  231. if readMessageReq.MessageId <= 0 {
  232. logger.Error("消息Id非法")
  233. err = exception.New(exception.IllegalMessageId)
  234. u.FailedResult("已读消息失败", result)
  235. return
  236. }
  237. userInfo := u.Data["user"].(user.User)
  238. if user.ReadMessage(userInfo.Id, readMessageReq.MessageId) {
  239. u.SuccessResult("已读消息成功", nil, result)
  240. return
  241. } else {
  242. err = exception.New(exception.ReadMessageFailed)
  243. u.FailedResult("已读消息失败", result)
  244. return
  245. }
  246. })
  247. }
  248. // ReadMessages 获取未读消息
  249. // @Summary 获取未读消息
  250. // @Description 获取未读消息
  251. // @Success 200 {object} controllers.BaseResponse
  252. // @router /readMessages [post]
  253. func (u *UserController) ReadMessages() {
  254. controllers.Wrap(&u.BaseController, func() (result *controllers.WrapData, err error) {
  255. result = u.InitWrapData("获取我的未读消息失败")
  256. readMessageReq := new(ReadMessageReq)
  257. u.GetPostParams(readMessageReq)
  258. if readMessageReq.AnalystId <= 0 {
  259. logger.Error("研究员Id非法")
  260. err = exception.New(exception.IllegalAnalystId)
  261. u.FailedResult("已读消息失败", result)
  262. return
  263. }
  264. userInfo := u.Data["user"].(user.User)
  265. if user.ReadMessages(userInfo.Id, readMessageReq.AnalystId) {
  266. u.SuccessResult("已读消息成功", nil, result)
  267. return
  268. } else {
  269. err = exception.New(exception.ReadMessageFailed)
  270. u.FailedResult("已读消息失败", result)
  271. return
  272. }
  273. })
  274. }
  275. func covertToUserProfile(user user.User) UserProfileReq {
  276. return UserProfileReq{
  277. UserName: user.Username,
  278. Mobile: user.Mobile,
  279. }
  280. }
  281. // RefreshToken 绑定微信公众号
  282. // @Summary 绑定微信公众号
  283. // @Success 200 {object} controllers.BaseResponse
  284. // @Description 更新token
  285. // @router /bind_gzh [get]
  286. func (a *UserController) BindGzh(code string) {
  287. controllers.Wrap(&a.BaseController, func() (result *controllers.WrapData, err error) {
  288. result = a.InitWrapData("绑定公众号失败")
  289. if code == "" {
  290. logger.Error("code不能为空")
  291. return result, exception.New(exception.WeChatCodeEmpty)
  292. }
  293. logger.Info("bindGzh code:" + code)
  294. //刷新token
  295. isBind, err := auth.BindWxGzh(code)
  296. if err != nil {
  297. logger.Error("绑定公众号失败:%v", err)
  298. a.FailedResult("绑定公众号失败", result)
  299. return
  300. }
  301. a.SuccessResult("绑定成功", IsBindGzhRes{
  302. IsBind: isBind,
  303. }, result)
  304. return
  305. })
  306. }
  307. type IsBindGzhRes struct {
  308. IsBind bool `json:"isBind"`
  309. }