user.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "hongze/hongze_cygx/models"
  5. "hongze/hongze_cygx/services"
  6. "hongze/hongze_cygx/utils"
  7. "rdluck_tools/paging"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. //用户
  13. type UserController struct {
  14. BaseAuthController
  15. }
  16. // @Title 登录
  17. // @Description 登录接口
  18. // @Param request body models.LoginReq true "type json string"
  19. // @Success 200 {object} models.LoginResp
  20. // @router /login [post]
  21. func (this *UserController) Login() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. this.Data["json"] = br
  25. this.ServeJSON()
  26. }()
  27. var req models.LoginReq
  28. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  29. if err != nil {
  30. br.Msg = "参数解析异常!"
  31. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  32. return
  33. }
  34. user := this.User
  35. if user == nil {
  36. br.Msg = "请登录"
  37. br.ErrMsg = "请登录"
  38. br.Ret = 408
  39. return
  40. }
  41. unionId := this.User.UnionId
  42. userId := this.User.UserId
  43. if unionId == "" {
  44. br.Msg = "参数错误"
  45. br.ErrMsg = "参数错误,unionId 为空"
  46. return
  47. }
  48. newUserId := 0
  49. if req.LoginType == 1 || req.LoginType == 3 {
  50. if req.Mobile == "" {
  51. br.Msg = "参数错误"
  52. br.ErrMsg = "参数错误,手机号为空 为空"
  53. return
  54. }
  55. if req.LoginType == 3 {
  56. item, err := models.GetMsgCode(req.Mobile, req.VCode)
  57. if err != nil {
  58. if err.Error() == utils.ErrNoRow() {
  59. br.Msg = "验证码错误,请重新输入"
  60. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  61. return
  62. } else {
  63. br.Msg = "验证码错误,请重新输入"
  64. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  65. return
  66. }
  67. }
  68. if item == nil {
  69. br.Msg = "验证码错误,请重新输入"
  70. return
  71. }
  72. }
  73. //更新用户记录信息
  74. updateParams := make(map[string]interface{})
  75. updateParams["Mobile"] = req.Mobile
  76. updateParams["BindAccount"] = req.Mobile
  77. whereParam := map[string]interface{}{"user_id": user.UserId, "create_platform": 4}
  78. go models.UpdateByExpr(models.UserRecord{}, whereParam, updateParams)
  79. //BindMobile(openId, mobile string, userId, loginType int) (err error) {
  80. req.Mobile = strings.Trim(req.Mobile, " ")
  81. req.LoginType = 1
  82. newUserId, err = models.PcBindMobile(unionId, req.Mobile, userId, req.LoginType)
  83. } else if req.LoginType == 2 {
  84. if req.Email == "" {
  85. br.ErrMsg = "邮箱不能为空,请输入邮箱"
  86. br.Msg = "邮箱不能为空,请输入邮箱"
  87. return
  88. }
  89. if !utils.ValidateEmailFormatat(req.Email) {
  90. br.ErrMsg = "邮箱格式错误,请重新输入"
  91. br.Msg = "邮箱格式错误,请重新输入"
  92. return
  93. }
  94. item, err := models.GetMsgCode(req.Email, req.VCode)
  95. if err != nil {
  96. if err.Error() == utils.ErrNoRow() {
  97. br.Msg = "验证码错误,请重新输入"
  98. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  99. return
  100. } else {
  101. br.Msg = "验证码错误,请重新输入"
  102. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  103. return
  104. }
  105. }
  106. if item == nil {
  107. br.Msg = "验证码错误,请重新输入"
  108. return
  109. }
  110. updateParams := make(map[string]interface{})
  111. updateParams["Email"] = req.Email
  112. updateParams["BindAccount"] = req.Email
  113. whereParam := map[string]interface{}{"user_id": user.UserId, "create_platform": 4}
  114. go models.UpdateByExpr(models.UserRecord{}, whereParam, updateParams)
  115. newUserId, err = models.PcBindMobile(unionId, req.Email, userId, req.LoginType)
  116. } else {
  117. br.Msg = "无效的登录方式"
  118. br.ErrMsg = "无效的登录方式,Err:" + err.Error()
  119. return
  120. }
  121. var token string
  122. tokenItem, err := models.GetTokenByUid(newUserId)
  123. if err != nil && err.Error() != utils.ErrNoRow() {
  124. br.Msg = "登录失败"
  125. br.ErrMsg = "登录失败,获取token失败:" + err.Error()
  126. return
  127. }
  128. if tokenItem == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  129. timeUnix := time.Now().Unix()
  130. timeUnixStr := strconv.FormatInt(timeUnix, 10)
  131. token = utils.MD5(strconv.Itoa(userId)) + utils.MD5(timeUnixStr)
  132. //新增session
  133. {
  134. session := new(models.CygxSession)
  135. session.OpenId = unionId
  136. session.UnionId = unionId
  137. session.UserId = userId
  138. session.CreatedTime = time.Now()
  139. session.LastUpdatedTime = time.Now()
  140. session.ExpireTime = time.Now().AddDate(0, 1, 0)
  141. session.AccessToken = token
  142. err = models.AddSession(session)
  143. if err != nil {
  144. br.Msg = "登录失败"
  145. br.ErrMsg = "登录失败,新增用户session信息失败:" + err.Error()
  146. return
  147. }
  148. }
  149. } else {
  150. token = tokenItem.AccessToken
  151. }
  152. //新增登录日志
  153. {
  154. loginLog := new(models.WxUserLog)
  155. loginLog.UserId = userId
  156. loginLog.OpenId = unionId
  157. loginLog.Mobile = req.Mobile
  158. loginLog.Email = req.Email
  159. loginLog.CreateTime = time.Now()
  160. loginLog.Handle = "wechat_user_login"
  161. loginLog.Remark = token
  162. go models.AddWxUserLog(loginLog)
  163. }
  164. resp := new(models.LoginResp)
  165. resp.UserId = newUserId
  166. resp.Authorization = token
  167. br.Ret = 200
  168. br.Success = true
  169. br.Data = resp
  170. br.Msg = "登录成功"
  171. }
  172. // @Title 获取用户详情
  173. // @Description 获取用户详情接口
  174. // @Success 200 {object} models.UserDetail
  175. // @router /detail [get]
  176. func (this *UserController) Detail() {
  177. br := new(models.BaseResponse).Init()
  178. defer func() {
  179. this.Data["json"] = br
  180. this.ServeJSON()
  181. }()
  182. user := this.User
  183. if user == nil {
  184. br.Msg = "请登录"
  185. br.ErrMsg = "请登录,用户信息为空"
  186. br.Ret = 408
  187. return
  188. }
  189. uid := user.UserId
  190. item, err := models.GetUserDetailByUserId(uid)
  191. if err != nil {
  192. br.Msg = "获取信息失败"
  193. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  194. return
  195. }
  196. var hasPermission int
  197. if user.CompanyId > 1 {
  198. companyItem, err := models.GetCompanyDetailById(user.CompanyId)
  199. if err != nil && err.Error() != utils.ErrNoRow() {
  200. br.Msg = "获取信息失败"
  201. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  202. return
  203. }
  204. if companyItem != nil && companyItem.CompanyId > 0 {
  205. item.CompanyName = companyItem.CompanyName
  206. if companyItem.Status == "试用" || companyItem.Status == "永续" || companyItem.Status == "正式" {
  207. permissionStr, err := models.GetCompanyPermission(companyItem.CompanyId)
  208. if err != nil {
  209. br.Msg = "获取信息失败"
  210. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  211. return
  212. }
  213. item.PermissionName = permissionStr
  214. } else {
  215. hasPermission = 1
  216. }
  217. item.SellerName = companyItem.SellerName
  218. item.SellerMobile = companyItem.Mobile
  219. } else {
  220. hasPermission = 1
  221. }
  222. } else {
  223. //判断是否已经申请过
  224. applyCount, err := models.GetApplyRecordCount(uid)
  225. if err != nil && err.Error() != utils.ErrNoRow() {
  226. br.Msg = "获取信息失败"
  227. br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
  228. return
  229. }
  230. if applyCount > 0 {
  231. hasPermission = 3
  232. } else {
  233. hasPermission = 2
  234. }
  235. }
  236. item.HasPermission = hasPermission
  237. br.Ret = 200
  238. br.Success = true
  239. br.Msg = "获取成功"
  240. br.Data = item
  241. }
  242. // @Title 校验用户状态信息
  243. // @Description 校验用户状态信息
  244. // @Success 200 {object} models.CheckStatusResp
  245. // @router /check/status [get]
  246. func (this *UserController) CheckLogin() {
  247. br := new(models.BaseResponse).Init()
  248. defer func() {
  249. this.Data["json"] = br
  250. this.ServeJSON()
  251. }()
  252. if this.User == nil {
  253. br.Msg = "请登录"
  254. br.ErrMsg = "请登录"
  255. br.Ret = 408
  256. return
  257. }
  258. uid := this.User.UserId
  259. //判断token是否过期
  260. userItem, err := models.GetWxUserItemByUserId(uid)
  261. if err != nil {
  262. br.Msg = "获取用户信息失败"
  263. br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
  264. return
  265. }
  266. resp := new(models.CheckStatusResp)
  267. permissionStr, err := models.GetCompanyPermission(userItem.CompanyId)
  268. if err != nil {
  269. br.Msg = "获取信息失败"
  270. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  271. return
  272. }
  273. resp.PermissionName = permissionStr
  274. if userItem.Mobile == "" && userItem.Email == "" {
  275. resp.IsBind = true
  276. }
  277. if userItem.UnionId == "" {
  278. resp.IsAuth = true
  279. }
  280. br.Success = true
  281. br.Msg = "获取成功"
  282. br.Data = resp
  283. br.Ret = 200
  284. }
  285. //
  286. //// @Title 绑定手机号或邮箱
  287. //// @Description 绑定手机号或邮箱
  288. //// @Param request body models.WxGetPhoneNumberReq true "type json string"
  289. //// @Success 200 {object} models.WxGetPhoneNumberResp
  290. //// @router /bind [post]
  291. //func (this *WechatController) Bind() {
  292. // br := new(models.BaseResponse).Init()
  293. // defer func() {
  294. // this.Data["json"] = br
  295. // this.ServeJSON()
  296. // }()
  297. // var req models.WxGetPhoneNumberReq
  298. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  299. // if err != nil {
  300. // br.Msg = "参数解析异常!"
  301. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  302. // return
  303. // }
  304. // if req.EncryptedData == "" || req.Iv == "" {
  305. // br.Msg = "参数错误"
  306. // return
  307. // }
  308. // user := this.User
  309. // if user == nil {
  310. // br.Msg = "请登陆"
  311. // br.Ret = 408
  312. // return
  313. // }
  314. // sessionKey := user.SessionKey
  315. // wxMobile, err := weapp.DecryptMobile(sessionKey, req.EncryptedData, req.Iv)
  316. // if err != nil {
  317. // br.Msg = "解析用户手机号信息失败"
  318. // br.ErrMsg = "解析用户手机号信息失败,Err:" + err.Error()
  319. // return
  320. // }
  321. // err = models.ModifyUsersMobile(user.UserId, wxMobile.PurePhoneNumber)
  322. // if err != nil {
  323. // br.Msg = "获取失败"
  324. // br.ErrMsg = "获取失败,Err:" + err.Error()
  325. // return
  326. // }
  327. // resp := new(models.WxGetPhoneNumberResp)
  328. // resp.Authorization = this.Token
  329. // resp.PhoneNumber = wxMobile.PhoneNumber
  330. // resp.PurePhoneNumber = wxMobile.PurePhoneNumber
  331. // resp.CountryCode = wxMobile.CountryCode
  332. // br.Msg = "获取成功!"
  333. // br.Ret = 200
  334. // br.Success = true
  335. // br.Data = resp
  336. //}
  337. // @Title 获取我的收藏
  338. // @Description 获取我的收藏列表
  339. // @Param PageSize query int true "PageSize"
  340. // @Param CurrentIndex query int true "CurrentIndex"
  341. // @Success 200 {object} models.ArticleCollectListResp
  342. // @router /collect/list [get]
  343. func (this *UserController) CollectList() {
  344. br := new(models.BaseResponse).Init()
  345. defer func() {
  346. this.Data["json"] = br
  347. this.ServeJSON()
  348. }()
  349. userId := this.User.UserId
  350. var pageSize, currentIndex, startSize int
  351. pageSize, _ = this.GetInt("PageSize")
  352. currentIndex, _ = this.GetInt("CurrentIndex")
  353. if pageSize <= 0 {
  354. pageSize = utils.PageSize20
  355. }
  356. if currentIndex <= 0 {
  357. currentIndex = 1
  358. }
  359. startSize = utils.StartIndex(currentIndex, pageSize)
  360. total, err := models.GetArticleUserCollectCount(userId)
  361. if err != nil {
  362. br.Msg = "获取数据失败"
  363. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  364. return
  365. }
  366. list, err := models.GetArticleUserCollectList(startSize, pageSize, userId)
  367. if err != nil {
  368. br.Msg = "获取数据失败"
  369. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  370. return
  371. }
  372. var articleIds []string
  373. for _, v := range list {
  374. articleIds = append(articleIds, strconv.Itoa(v.ArticleId))
  375. }
  376. articleIdStr := strings.Join(articleIds, ",")
  377. articleMap := make(map[int]*models.ArticleDetail)
  378. if articleIdStr != "" {
  379. articleList, err := models.GetArticleDetailByIdStr(articleIdStr)
  380. if err != nil {
  381. br.Msg = "获取数据失败"
  382. br.ErrMsg = "获取报告详情信息失败,Err:" + err.Error()
  383. return
  384. }
  385. for _, v := range articleList {
  386. if _, ok := articleMap[v.ArticleId]; !ok {
  387. articleMap[v.ArticleId] = v
  388. }
  389. }
  390. }
  391. lenList := len(list)
  392. for i := 0; i < lenList; i++ {
  393. item := list[i]
  394. article := articleMap[item.ArticleId]
  395. list[i].Title = article.Title
  396. list[i].TitleEn = article.TitleEn
  397. list[i].UpdateFrequency = article.UpdateFrequency
  398. list[i].CreateDate = article.CreateDate
  399. list[i].PublishDate = article.PublishDate
  400. list[i].Body, _ = services.GetReportContentTextSub(article.Body)
  401. list[i].Abstract = article.Abstract
  402. list[i].CategoryName = article.CategoryName
  403. list[i].SubCategoryName = article.SubCategoryName
  404. }
  405. page := paging.GetPaging(currentIndex, pageSize, total)
  406. resp := new(models.ArticleCollectListResp)
  407. resp.List = list
  408. resp.Paging = page
  409. br.Msg = "获取成功!"
  410. br.Ret = 200
  411. br.Success = true
  412. br.Data = resp
  413. }
  414. // @Title 获取申请访谈列表
  415. // @Description 获取申请访谈列表
  416. // @Param PageSize query int true "PageSize"
  417. // @Param CurrentIndex query int true "CurrentIndex"
  418. // @Success 200 {object} models.ArticleInterviewApplyListResp
  419. // @router /interview/apply/list [get]
  420. func (this *UserController) InterviewApplyList() {
  421. br := new(models.BaseResponse).Init()
  422. defer func() {
  423. this.Data["json"] = br
  424. this.ServeJSON()
  425. }()
  426. userId := this.User.UserId
  427. var pageSize, currentIndex, startSize int
  428. pageSize, _ = this.GetInt("PageSize")
  429. currentIndex, _ = this.GetInt("CurrentIndex")
  430. if pageSize <= 0 {
  431. pageSize = utils.PageSize20
  432. }
  433. if currentIndex <= 0 {
  434. currentIndex = 1
  435. }
  436. startSize = utils.StartIndex(currentIndex, pageSize)
  437. total, err := models.GetArticleUserInterviewApplyCount(userId)
  438. if err != nil {
  439. br.Msg = "获取数据失败"
  440. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  441. return
  442. }
  443. list, err := models.GetArticleUserInterviewApplyList(startSize, pageSize, userId)
  444. if err != nil {
  445. br.Msg = "获取数据失败"
  446. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  447. return
  448. }
  449. var articleIds []string
  450. for _, v := range list {
  451. articleIds = append(articleIds, strconv.Itoa(v.ArticleId))
  452. }
  453. articleIdStr := strings.Join(articleIds, ",")
  454. articleMap := make(map[int]*models.ArticleDetail)
  455. if articleIdStr != "" {
  456. articleList, err := models.GetArticleDetailByIdStr(articleIdStr)
  457. if err != nil {
  458. br.Msg = "获取数据失败"
  459. br.ErrMsg = "获取报告详情信息失败,Err:" + err.Error()
  460. return
  461. }
  462. for _, v := range articleList {
  463. if _, ok := articleMap[v.ArticleId]; !ok {
  464. articleMap[v.ArticleId] = v
  465. }
  466. }
  467. }
  468. lenList := len(list)
  469. for i := 0; i < lenList; i++ {
  470. item := list[i]
  471. article := articleMap[item.ArticleId]
  472. bodySub, _ := services.GetReportContentTextSub(article.Body)
  473. list[i].Title = article.Title
  474. list[i].TitleEn = article.TitleEn
  475. list[i].UpdateFrequency = article.UpdateFrequency
  476. list[i].CreateDate = article.CreateDate
  477. list[i].PublishDate = article.PublishDate
  478. list[i].Body = bodySub
  479. list[i].Abstract = article.Abstract
  480. list[i].CategoryName = article.CategoryName
  481. list[i].SubCategoryName = article.SubCategoryName
  482. list[i].ExpertBackground = article.ExpertBackground
  483. list[i].ExpertNumber = article.ExpertNumber
  484. list[i].InterviewTime = article.InterviewDate
  485. }
  486. page := paging.GetPaging(currentIndex, pageSize, total)
  487. resp := new(models.ArticleInterviewApplyListResp)
  488. resp.List = list
  489. resp.Paging = page
  490. br.Msg = "获取成功!"
  491. br.Ret = 200
  492. br.Success = true
  493. br.Data = resp
  494. }
  495. // @Title 获取浏览历史列表
  496. // @Description 获取浏览历史列表
  497. // @Param PageSize query int true "PageSize"
  498. // @Param CurrentIndex query int true "CurrentIndex"
  499. // @Success 200 {object} models.ArticleBrowseHistoryListResp
  500. // @router /browse/history/list [get]
  501. func (this *UserController) BrowseHistoryList() {
  502. br := new(models.BaseResponse).Init()
  503. defer func() {
  504. this.Data["json"] = br
  505. this.ServeJSON()
  506. }()
  507. userId := this.User.UserId
  508. var pageSize, currentIndex, startSize int
  509. pageSize, _ = this.GetInt("PageSize")
  510. currentIndex, _ = this.GetInt("CurrentIndex")
  511. if pageSize <= 0 {
  512. pageSize = utils.PageSize20
  513. }
  514. if currentIndex <= 0 {
  515. currentIndex = 1
  516. }
  517. startSize = utils.StartIndex(currentIndex, pageSize)
  518. endDate := time.Now().AddDate(0, -1, 0).Format(utils.FormatDate)
  519. total, err := models.GetArticleUserBrowseHistoryCount(userId, endDate)
  520. if err != nil {
  521. br.Msg = "获取数据失败"
  522. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  523. return
  524. }
  525. list, err := models.GetArticleUserBrowseHistoryList(startSize, pageSize, userId, endDate)
  526. if err != nil {
  527. br.Msg = "获取数据失败"
  528. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  529. return
  530. }
  531. var articleIds []string
  532. for _, v := range list {
  533. articleIds = append(articleIds, strconv.Itoa(v.ArticleId))
  534. }
  535. articleIdStr := strings.Join(articleIds, ",")
  536. articleMap := make(map[int]*models.ArticleDetail)
  537. if articleIdStr != "" {
  538. articleList, err := models.GetArticleDetailByIdStr(articleIdStr)
  539. if err != nil {
  540. br.Msg = "获取数据失败"
  541. br.ErrMsg = "获取报告详情信息失败,Err:" + err.Error()
  542. return
  543. }
  544. for _, v := range articleList {
  545. if _, ok := articleMap[v.ArticleId]; !ok {
  546. articleMap[v.ArticleId] = v
  547. }
  548. }
  549. }
  550. lenList := len(list)
  551. for i := 0; i < lenList; i++ {
  552. item := list[i]
  553. article := articleMap[item.ArticleId]
  554. if article != nil {
  555. list[i].Title = article.Title
  556. list[i].TitleEn = article.TitleEn
  557. list[i].UpdateFrequency = article.UpdateFrequency
  558. list[i].CreateDate = article.CreateDate
  559. list[i].PublishDate = article.PublishDate
  560. list[i].Body, _ = services.GetReportContentTextSub(article.Body)
  561. list[i].Abstract = article.Abstract
  562. list[i].CategoryName = article.CategoryName
  563. list[i].SubCategoryName = article.SubCategoryName
  564. }
  565. }
  566. page := paging.GetPaging(currentIndex, pageSize, total)
  567. resp := new(models.ArticleBrowseHistoryListResp)
  568. resp.List = list
  569. resp.Paging = page
  570. br.Msg = "获取成功!"
  571. br.Ret = 200
  572. br.Success = true
  573. br.Data = resp
  574. }
  575. // @Title 未付费申请试用
  576. // @Description 未付费申请试用
  577. // @Param request body models.ApplyTryReq true "type json string"
  578. // @Success 200
  579. // @router /apply/try [post]
  580. func (this *UserController) ApplyTryOut() {
  581. br := new(models.BaseResponse).Init()
  582. defer func() {
  583. this.Data["json"] = br
  584. this.ServeJSON()
  585. }()
  586. user := this.User
  587. if user == nil {
  588. br.Msg = "请登录"
  589. br.ErrMsg = "请登录,SysUser Is Empty"
  590. br.Ret = 408
  591. return
  592. }
  593. mobile := user.Mobile
  594. var req models.ApplyTryReq
  595. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  596. if err != nil {
  597. br.Msg = "参数解析异常!"
  598. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  599. return
  600. }
  601. //判断是否存在申请
  602. var sellerMobile string
  603. if req.ApplyMethod == 2 {
  604. if req.BusinessCardUrl == "" {
  605. br.Msg = "请上传名片"
  606. return
  607. }
  608. if req.RealName == "" {
  609. br.Msg = "请输入姓名"
  610. return
  611. }
  612. if req.CompanyName == "" {
  613. br.Msg = "请输入公司名称"
  614. return
  615. }
  616. if req.BusinessCardUrl != "" && utils.RunMode == "release" {
  617. card, err := services.GetBusinessCard(req.BusinessCardUrl)
  618. if err != nil {
  619. br.Msg = "名片识别失败"
  620. br.ErrMsg = "名片识别失败,Err:" + err.Error()
  621. return
  622. }
  623. mobileStr := strings.Join(card.WordsResult.MOBILE, ",")
  624. isFlag := true
  625. if mobile != "" {
  626. if strings.Contains(mobileStr, mobile) || mobileStr == "" {
  627. isFlag = true
  628. } else {
  629. isFlag = false
  630. }
  631. }
  632. if !isFlag {
  633. //阿里云识别
  634. if utils.RunMode == "release" {
  635. aliyunResult, err := services.AliyunBusinessCard(req.BusinessCardUrl)
  636. if err != nil {
  637. br.Msg = "识别失败"
  638. br.ErrMsg = "识别失败,Err:" + err.Error()
  639. return
  640. }
  641. if !aliyunResult.Success {
  642. br.Msg = "识别失败"
  643. br.ErrMsg = "识别失败"
  644. return
  645. }
  646. mobileStr := strings.Join(aliyunResult.TelCell, ",")
  647. if mobile != "" {
  648. if strings.Contains(mobileStr, mobile) {
  649. isFlag = true
  650. } else {
  651. isFlag = false
  652. }
  653. }
  654. }
  655. }
  656. if !isFlag {
  657. br.Msg = "名片手机号与所填手机号不匹配,请重新填写"
  658. br.ErrMsg = "mobile:" + mobile
  659. return
  660. }
  661. }
  662. }
  663. //获取销售信息
  664. sellerItem, err := models.GetSellerByCompanyId(user.CompanyId)
  665. if err != nil && err.Error() != utils.ErrNoRow() {
  666. br.Msg = "申请失败"
  667. br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
  668. return
  669. }
  670. if sellerItem != nil {
  671. sellerMobile = sellerItem.Mobile
  672. //推送模板消息
  673. mobile := user.Mobile
  674. if mobile == "" {
  675. mobile = user.Email
  676. }
  677. applyMethod := ""
  678. if req.ApplyMethod == 1 {
  679. applyMethod = "已有客户申请"
  680. } else {
  681. applyMethod = "潜在客户申请"
  682. }
  683. cnf, _ := models.GetConfigByCode("tpl_msg")
  684. if cnf != nil {
  685. openIpItem, _ := models.GetWxUserItemByMobile(cnf.ConfigValue)
  686. if openIpItem != nil && openIpItem.OpenId != "" {
  687. go services.SendPermissionApplyTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, openIpItem.OpenId, applyMethod)
  688. }
  689. }
  690. }
  691. err = models.AddApplyRecord(&req, user.Mobile, user.CompanyName, user.UserId, user.CompanyId)
  692. if err != nil {
  693. br.Msg = "申请失败"
  694. br.ErrMsg = "申请失败,Err:" + err.Error()
  695. return
  696. }
  697. br.Msg = "申请成功!"
  698. br.Ret = 200
  699. br.Success = true
  700. br.Data = sellerMobile
  701. }
  702. //func init() {
  703. // fmt.Println("start")
  704. // realName:="沈涛"
  705. // companyName:="弘则研究"
  706. // mobile:="18767183922"
  707. // openId:="oN0jD1eTfIAf68Y2n24RrvIGXFw4"
  708. // applyMethod:="xxx"
  709. // services.SendPermissionApplyTemplateMsg(realName, companyName, mobile, openId, applyMethod)
  710. // return
  711. // fmt.Println("end")
  712. //}