admin_wx.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "hongze/hongze_mobile_admin/models/tables/admin"
  5. "hongze/hongze_mobile_admin/models/tables/company_remind_record"
  6. "hongze/hongze_mobile_admin/services"
  7. "hongze/hongze_mobile_admin/utils"
  8. "time"
  9. )
  10. type AdminWxController struct {
  11. BaseCommon
  12. }
  13. // SendSmsCode
  14. // @Title 发送短信验证码
  15. // @Description 发送短信验证码
  16. // @Param Mobile query string true "手机号"
  17. // @Param Token query string true "授权token"
  18. // @Success 200 {object} wechat.WxLoginResp
  19. // @router /send_sms_code [post]
  20. func (c *AdminWxController) SendSmsCode() {
  21. var req admin.SmsCodeReq
  22. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  23. if err != nil {
  24. c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  25. return
  26. }
  27. if req.Mobile == "" {
  28. c.FailWithMessage("请输入手机号", "请输入手机号")
  29. return
  30. }
  31. if req.Token == "" {
  32. c.FailWithMessage("请输入授权标识", "请输入授权标识")
  33. return
  34. }
  35. areaNum := req.AreaNum
  36. //获取token,如果没有token不允许发送验证码
  37. infoJson, err := utils.Rc.RedisString(utils.HZ_MOBILE_ADMIN_WXLOGIN_TOKEN + req.Token)
  38. if err != nil {
  39. c.FailWithMessage("授权信息不存在", "授权信息不存在"+err.Error())
  40. return
  41. }
  42. info := map[string]string{"open_id": "", "union_id": ""}
  43. err = json.Unmarshal([]byte(infoJson), &info)
  44. if err != nil {
  45. c.FailWithMessage("授权信息解析失败", "授权信息解析失败"+err.Error())
  46. return
  47. }
  48. openId := info["open_id"]
  49. if openId == "" {
  50. c.FailWithMessage("授权信息不存在", "授权信息不存在")
  51. return
  52. }
  53. //如果该token中的openID已经被其他手机号绑定,则不允许发送验证码
  54. adminInfo, err := admin.GetAdminWxByAdminOpenId(openId)
  55. if err != nil {
  56. if err.Error() == utils.ErrNoRow() {
  57. err = nil
  58. } else {
  59. c.FailWithMessage("查询管理员信息失败", "查询管理员信息失败"+err.Error())
  60. return
  61. }
  62. } else {
  63. if adminInfo.Mobile != req.Mobile {
  64. c.FailWithMessage("该微信已被其他账号绑定", "该微信已被其他账号绑定")
  65. return
  66. } else {
  67. resp := &admin.WxSmsResp{
  68. BindFlag: true,
  69. }
  70. c.OkDetailed(resp, "已绑定")
  71. return
  72. }
  73. }
  74. //判断手机号是否已绑定,如果已绑定openId,并且和token相等,则不允许发送验证码
  75. adminMobileInfo, err := admin.GetAdminByMobile(req.Mobile)
  76. if err != nil {
  77. if err.Error() == utils.ErrNoRow() {
  78. c.FailWithMessage("账号不存在,联系管理员", "账号不存在,联系管理员")
  79. return
  80. }
  81. c.FailWithMessage("管理员账号查询失败", "管理员账号查询失败"+err.Error())
  82. return
  83. }
  84. if adminMobileInfo.OpenId == openId {
  85. resp := &admin.WxSmsResp{
  86. BindFlag: true,
  87. }
  88. c.OkDetailed(resp, "已绑定")
  89. return
  90. }
  91. //发送短信
  92. var sendRet bool
  93. code := utils.GetRandDigit(4)
  94. if areaNum == "86" || areaNum == "" || areaNum == "0" {
  95. //国内的短信
  96. sendRet = services.SendSmsCode(req.Mobile, code)
  97. } else {
  98. //国际短信
  99. sendRet = services.SendSmsCodeGj(req.Mobile, code, areaNum)
  100. }
  101. if !sendRet {
  102. c.FailWithMessage("发送验证码失败", "发送验证码失败")
  103. return
  104. }
  105. // 存储验证码,15分钟过期
  106. err = utils.Rc.Put(utils.HZ_MOBILE_ADMIN_WXLOGIN_MOBILE_CODE+req.Mobile, code, 15*time.Minute)
  107. if err != nil {
  108. c.FailWithMessage("发送验证码失败", "保存验证码到redis中失败"+err.Error())
  109. return
  110. }
  111. resp := &admin.WxSmsResp{
  112. SmsFlag: true,
  113. }
  114. c.OkDetailed(resp, "发送成功")
  115. return
  116. }
  117. // BindMobile
  118. // @Title 绑定手机号
  119. // @Description 绑定手机号
  120. // @Param Mobile query string true "手机号"
  121. // @Param Token query string true "授权token"
  122. // @Param Code query string true "短信验证码"
  123. // @Success 200 {object} wechat.WxLoginResp
  124. // @router /bind_mobile [post]
  125. func (c *AdminWxController) BindMobile() {
  126. var req admin.BindMobileReq
  127. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  128. if err != nil {
  129. c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  130. return
  131. }
  132. if req.Mobile == "" {
  133. c.FailWithMessage("请输入手机号", "请输入手机号")
  134. return
  135. }
  136. if req.Token == "" {
  137. c.FailWithMessage("请输入授权标识", "请输入授权标识")
  138. return
  139. }
  140. if req.Code == "" {
  141. c.FailWithMessage("请输入验证码", "请输入验证码")
  142. return
  143. }
  144. //校验验证码
  145. code, err := utils.Rc.RedisString(utils.HZ_MOBILE_ADMIN_WXLOGIN_MOBILE_CODE + req.Mobile)
  146. if err != nil {
  147. c.FailWithMessage("验证码错误或者已过期", "验证码错误或者已过期"+err.Error())
  148. return
  149. }
  150. if req.Code != code {
  151. c.FailWithMessage("验证码错误", "验证码错误")
  152. return
  153. }
  154. //获取token,如果没有token不允许发送验证码
  155. infoJson, err := utils.Rc.RedisString(utils.HZ_MOBILE_ADMIN_WXLOGIN_TOKEN + req.Token)
  156. if err != nil {
  157. c.FailWithMessage("授权信息不存在", "授权信息不存在"+err.Error())
  158. return
  159. }
  160. info := map[string]string{"open_id": "", "union_id": ""}
  161. err = json.Unmarshal([]byte(infoJson), &info)
  162. if err != nil {
  163. c.FailWithMessage("授权信息解析失败", "授权信息解析失败"+err.Error())
  164. return
  165. }
  166. openId := info["open_id"]
  167. unionId := info["union_id"]
  168. if openId == "" {
  169. c.FailWithMessage("授权信息不存在", "授权信息不存在")
  170. return
  171. }
  172. //如果该token中的openID已经被其他手机号绑定,则绑定openId
  173. adminInfo, err := admin.GetAdminWxByAdminOpenId(openId)
  174. if err != nil {
  175. if err.Error() == utils.ErrNoRow() {
  176. err = nil
  177. } else {
  178. c.FailWithMessage("查询管理员信息失败", "查询管理员信息失败"+err.Error())
  179. return
  180. }
  181. } else {
  182. if adminInfo.Mobile != req.Mobile {
  183. c.FailWithMessage("该微信已被其他账号绑定", "该微信已被其他账号绑定")
  184. return
  185. } else {
  186. c.Ok()
  187. return
  188. }
  189. }
  190. //判断手机号是否已绑定,如果已绑定openId,并且和token不相等,则更新
  191. adminMobileInfo, err := admin.GetAdminByMobile(req.Mobile)
  192. if err != nil {
  193. if err.Error() == utils.ErrNoRow() {
  194. c.FailWithMessage("账号不存在,联系管理员", "账号不存在,联系管理员")
  195. return
  196. }
  197. c.FailWithMessage("管理员账号查询失败", "管理员账号查询失败"+err.Error())
  198. return
  199. }
  200. if adminMobileInfo.OpenId == openId {
  201. c.Ok()
  202. return
  203. }
  204. //更新openid
  205. err = admin.UpdateAdminOpenIdUnionId(adminMobileInfo.AdminId, openId, unionId)
  206. if err != nil {
  207. c.FailWithMessage("绑定手机号失败", "绑定手机号失败"+err.Error())
  208. return
  209. }
  210. c.Ok()
  211. return
  212. }
  213. // CompanyRemindList
  214. // @Title 客户过期提醒记录
  215. // @Description 客户过期提醒记录
  216. // @Param UniqueCode query string true "唯一编码"
  217. // @Success 200 {object} company_remind_record.CompanyRemindRecordResp
  218. // @router /company_remind/list [get]
  219. func (c *AdminWxController) CompanyRemindList() {
  220. uniqueCode := c.GetString("UniqueCode")
  221. if uniqueCode == "" {
  222. c.FailWithMessage("来源异常", "UniqueCode异常")
  223. return
  224. }
  225. list, err := company_remind_record.GetAllCompanyRemindRecordList(uniqueCode)
  226. if err != nil {
  227. c.FailWithMessage("获取失败", "获取客户即将过期提醒失败:"+err.Error())
  228. return
  229. }
  230. lenList := len(list)
  231. response := company_remind_record.CompanyRemindRecordResp{
  232. Total: lenList,
  233. List: list,
  234. }
  235. if len(list) > 0 {
  236. response.RemindType = list[0].Type
  237. response.EndDate = list[0].EndDate
  238. }
  239. c.OkDetailed(response, "获取成功")
  240. return
  241. }