user_controller.go 10 KB

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