user.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_api/models"
  5. "eta/eta_mini_api/models/request"
  6. "eta/eta_mini_api/models/response"
  7. "eta/eta_mini_api/services"
  8. "eta/eta_mini_api/services/alarm_msg"
  9. "eta/eta_mini_api/services/go_redis"
  10. "eta/eta_mini_api/utils"
  11. "fmt"
  12. "strings"
  13. "time"
  14. )
  15. type UserController struct {
  16. BaseCommonController
  17. }
  18. type UserAuthController struct {
  19. BaseAuthController
  20. }
  21. // @Title 用户登录接口
  22. // @Description 用户登录
  23. // @Param request body models.LoginReq true "type json string"
  24. // @Success 200 {object} models.LoginResp
  25. // @router /login [post]
  26. func (this *UserAuthController) Login() {
  27. br := new(models.BaseResponse).Init()
  28. defer func() {
  29. this.Data["json"] = br
  30. this.ServeJSON()
  31. }()
  32. session := this.Session
  33. var req request.LoginReq
  34. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  35. if err != nil {
  36. br.Msg = "参数解析失败"
  37. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  38. return
  39. }
  40. switch req.LoginType {
  41. case 1:
  42. if req.Phone == "" {
  43. br.Msg = "请输入手机号"
  44. br.ErrMsg = "请输入手机号"
  45. return
  46. }
  47. if req.SmsCode == "" {
  48. br.Msg = "请输入验证码"
  49. br.ErrMsg = "请输入验证码"
  50. return
  51. }
  52. phone := req.AreaCode + req.Phone
  53. item, err := models.GetMsgCode(phone, req.SmsCode)
  54. if err != nil {
  55. if err.Error() == utils.ErrNoRow() {
  56. br.Msg = "验证码错误,请重新输入"
  57. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  58. return
  59. } else {
  60. br.Msg = "验证码错误,请重新输入"
  61. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  62. return
  63. }
  64. }
  65. if item == nil {
  66. br.Msg = "验证码错误,请重新输入"
  67. return
  68. }
  69. case 2:
  70. if req.Email == "" {
  71. br.Msg = "请输入邮箱"
  72. br.ErrMsg = "请输入邮箱"
  73. return
  74. }
  75. if req.SmsCode == "" {
  76. br.Msg = "请输入验证码"
  77. br.ErrMsg = "请输入验证码"
  78. return
  79. }
  80. item, err := models.GetMsgCode(req.Email, req.SmsCode)
  81. if err != nil {
  82. if err.Error() == utils.ErrNoRow() {
  83. br.Msg = "验证码错误,请重新输入"
  84. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  85. return
  86. } else {
  87. br.Msg = "验证码错误,请重新输入"
  88. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  89. return
  90. }
  91. }
  92. if item == nil {
  93. br.Msg = "验证码错误,请重新输入"
  94. return
  95. }
  96. }
  97. _, errMsg, err := services.BindUser(session.UnionId, session.OpenId, req.Phone, req.Email, req.AreaCode)
  98. if err != nil && err.Error() != utils.ErrNoRow() {
  99. br.Msg = "登录失败,系统处理中,请稍后重试"
  100. if errMsg != "" {
  101. br.Msg = errMsg
  102. }
  103. br.ErrMsg = "登录失败:" + err.Error()
  104. return
  105. }
  106. br.Msg = "登录成功"
  107. br.Success = true
  108. br.Ret = 200
  109. }
  110. // @Title 获取短信/邮箱验证码
  111. // @Description 用户登录
  112. // @Param request body models.LoginReq true "type json string"
  113. // @Success 200 {object} models.LoginResp
  114. // @router /getVerifyCode [post]
  115. func (this *UserController) GetVerifyCode() {
  116. br := new(models.BaseResponse).Init()
  117. defer func() {
  118. if br.Ret != 200 {
  119. b, _ := json.Marshal(br)
  120. alarm_msg.SendAlarmMsg(string(b), 1)
  121. }
  122. this.Data["json"] = br
  123. this.ServeJSON()
  124. }()
  125. var req request.VerifyCodeReq
  126. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  127. if err != nil {
  128. br.Msg = "参数解析异常!"
  129. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  130. return
  131. }
  132. if req.VerifyType != 1 && req.VerifyType != 2 {
  133. br.Msg = "验证方式有误"
  134. br.ErrMsg = fmt.Sprintf("验证方式异常<%d>", req.VerifyType)
  135. }
  136. code := utils.GetRandDigit(6)
  137. fmt.Println(code)
  138. switch req.VerifyType {
  139. case 1:
  140. if req.AreaCode == "" {
  141. br.Msg = "请选择区号"
  142. return
  143. }
  144. if req.Phone == "" {
  145. br.Msg = "请输入手机号"
  146. return
  147. }
  148. if req.AreaCode == utils.TelAreaCodeHome && !utils.ValidateMobileFormatat(req.Phone) {
  149. br.Msg = "您的手机号输入有误, 请检查"
  150. return
  151. }
  152. phoneKey := utils.CACHE_ACCESS_PHONE_LOGIN_CODE + req.AreaCode + req.Phone
  153. res, _ := go_redis.RedisInt(phoneKey)
  154. if res > 5 {
  155. br.Msg = "验证码发送太频繁,请稍后重试"
  156. return
  157. }
  158. var ok bool
  159. if req.AreaCode == "86" {
  160. ok = services.SendSmsCode(req.Phone, code)
  161. }
  162. if !ok {
  163. br.Msg = "请检查手机号和区号"
  164. br.ErrMsg = "短信验证码发送失败"
  165. return
  166. } else {
  167. item := new(models.MsgCode)
  168. item.OpenId = ""
  169. item.Code = code
  170. item.Mobile = req.AreaCode + req.Phone
  171. item.ExpiredIn = time.Now().Add(15 * time.Minute).Unix()
  172. item.CreateTime = time.Now()
  173. err = item.Insert()
  174. if err != nil {
  175. br.Msg = "发送失败"
  176. br.ErrMsg = "发送失败,Err:" + err.Error()
  177. return
  178. }
  179. br.Msg = "发送成功"
  180. isExist := go_redis.IsExist(phoneKey)
  181. if isExist {
  182. go_redis.Incr(phoneKey)
  183. } else {
  184. go_redis.SetNX(phoneKey, 1, time.Minute*15)
  185. }
  186. }
  187. case 2:
  188. if req.Email == "" {
  189. br.Msg = "请输入邮箱"
  190. }
  191. if !utils.ValidateEmailFormatat(req.Email) {
  192. br.Msg = "您的邮箱格式输入有误, 请检查"
  193. return
  194. }
  195. emailKey := utils.CACHE_ACCESS_EMAIL_LOGIN_CODE + req.Email
  196. res, _ := go_redis.RedisInt(emailKey)
  197. if res > 5 {
  198. br.Msg = "验证码发送太频繁,请稍后重试"
  199. return
  200. }
  201. date := time.Now()
  202. content := "尊敬的用户:</br>本次请求的验证码为:" + code + "(为了保障您账号的安全性,请在15分钟内完成验证。)</br>东吴期货研究团队 </br>" + fmt.Sprintf("%d年%02d月%02d日", date.Year(), date.Month(), date.Day())
  203. title := "东吴期货登录验证"
  204. result, err := utils.SendEmailByDw(title, content, req.Email)
  205. if err != nil {
  206. br.Msg = "发送失败"
  207. br.ErrMsg = "发送失败,Err:" + err.Error()
  208. return
  209. }
  210. if result {
  211. item := new(models.MsgCode)
  212. item.OpenId = ""
  213. item.Code = code
  214. item.Mobile = req.Email
  215. item.ExpiredIn = time.Now().Add(15 * time.Minute).Unix()
  216. item.CreateTime = time.Now()
  217. err = item.Insert()
  218. if err != nil {
  219. br.Msg = "发送失败"
  220. br.ErrMsg = "发送失败,Err:" + err.Error()
  221. return
  222. }
  223. br.Msg = "发送成功"
  224. isExist := go_redis.IsExist(emailKey)
  225. if isExist {
  226. go_redis.Incr(emailKey)
  227. } else {
  228. go_redis.SetNX(emailKey, 1, time.Minute*15)
  229. }
  230. } else {
  231. br.Msg = "发送失败"
  232. }
  233. }
  234. br.Ret = 200
  235. br.Success = true
  236. br.Msg = "发送成功"
  237. }
  238. // @Title 新增报告浏览记录
  239. // @Description 新增报告浏览记录接口
  240. // @Param request body models.ReportRecordReq true "type json string"
  241. // @Success 200 新增成功
  242. // @router /addReportRecord [post]
  243. func (this *UserAuthController) AddReportRecord() {
  244. br := new(models.BaseResponse).Init()
  245. defer func() {
  246. this.Data["json"] = br
  247. this.ServeJSON()
  248. }()
  249. user := this.User
  250. if user == nil {
  251. br.Msg = "请登录"
  252. br.ErrMsg = "请登录,用户信息为空"
  253. br.Ret = 403
  254. return
  255. }
  256. var req request.ReportRecordReq
  257. if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
  258. br.Msg = "参数解析异常!"
  259. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  260. return
  261. }
  262. if req.ReportId <= 0 {
  263. br.Msg = "参数错误"
  264. br.ErrMsg = "参数错误,报告id小于等于0"
  265. return
  266. }
  267. reportResp, err := services.GetReportDetail(req.ReportId, user.UserId)
  268. if err != nil {
  269. br.Msg = "添加阅读记录失败"
  270. br.ErrMsg = "获取研报错误,Err:" + err.Error()
  271. return
  272. }
  273. if reportResp.Ret != 200 {
  274. br.Msg = reportResp.Msg
  275. br.ErrMsg = reportResp.ErrMsg
  276. return
  277. }
  278. reportDetail := reportResp.Data.Report
  279. reportPermissionResp, err := services.GetReportChartPermissionList(req.ReportId)
  280. if err != nil {
  281. br.Msg = "添加阅读记录失败"
  282. br.ErrMsg = "获取研报品种错误,Err:" + err.Error()
  283. return
  284. }
  285. if reportPermissionResp.Ret != 200 {
  286. br.Msg = reportPermissionResp.Msg
  287. br.ErrMsg = reportPermissionResp.ErrMsg
  288. return
  289. }
  290. reportPermissionList := reportPermissionResp.Data
  291. chartPermissionList, err := services.GetChartPermissionAllList()
  292. if err != nil {
  293. br.Msg = "添加阅读记录失败"
  294. br.ErrMsg = "获取研报品种列表失败,Err:" + err.Error()
  295. return
  296. }
  297. chartMap := make(map[int]*models.ChartPermission)
  298. for _, permission := range chartPermissionList.Data {
  299. chartMap[permission.ChartPermissionId] = permission
  300. }
  301. curTime := time.Now()
  302. var insertId int64
  303. if req.RecordId == 0 {
  304. // 如果不存在就新增一条记录
  305. permission1Ids := make([]int, 0)
  306. permission2Ids := make([]int, 0)
  307. permissionNames := make([]string, 0)
  308. for _, item := range reportPermissionList {
  309. curPermission := chartMap[item.ChartPermissionId]
  310. permission1Ids = append(permission1Ids, curPermission.ParentId)
  311. permission2Ids = append(permission2Ids, curPermission.ChartPermissionId)
  312. permissionNames = append(permissionNames, curPermission.PermissionName)
  313. }
  314. permission1Ids = utils.Unique(permission1Ids)
  315. permission2Ids = utils.Unique(permission2Ids)
  316. permissionNames = utils.Unique(permissionNames)
  317. userReadRecord := &models.UserReadRecord{
  318. UserId: user.UserId,
  319. ReportId: req.ReportId,
  320. ReportTitle: reportDetail.Title,
  321. ChartPermissionName: strings.Join(permissionNames, ","),
  322. ClassifyId1: reportDetail.ClassifyIdFirst,
  323. ClassifyName1: reportDetail.ClassifyNameFirst,
  324. ClassifyId2: reportDetail.ClassifyIdSecond,
  325. ClassifyName2: reportDetail.ClassifyNameSecond,
  326. ClassifyId3: reportDetail.ClassifyIdThird,
  327. ClassifyName3: reportDetail.ClassifyNameThird,
  328. Timestamp: int(curTime.Unix()),
  329. CreateTime: curTime,
  330. CreateDate: curTime.Format(utils.FormatDate),
  331. ReportType: utils.ReportTypeEta,
  332. }
  333. insertId, err = userReadRecord.Insert()
  334. if err != nil {
  335. br.Msg = "添加阅读记录失败"
  336. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  337. return
  338. }
  339. userReadPermission1 := make([]*models.UserReadPermission1, 0)
  340. for _, id := range permission1Ids {
  341. userReadPermission1 = append(userReadPermission1, &models.UserReadPermission1{
  342. UserReadRecordId: int(insertId),
  343. ChartPermissionId: id,
  344. PermissionName: chartMap[id].PermissionName,
  345. })
  346. }
  347. err = models.UserReadPermission1MultiInsert(userReadPermission1)
  348. if err != nil {
  349. br.Msg = "添加阅读记录失败"
  350. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  351. return
  352. }
  353. userReadPermission2 := make([]*models.UserReadPermission2, 0)
  354. for _, id := range permission2Ids {
  355. userReadPermission2 = append(userReadPermission2, &models.UserReadPermission2{
  356. UserReadRecordId: int(insertId),
  357. ChartPermissionId: id,
  358. })
  359. }
  360. err = models.UserReadPermission2MultiInsert(userReadPermission2)
  361. if err != nil {
  362. br.Msg = "添加阅读记录失败"
  363. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  364. return
  365. }
  366. } else {
  367. // 如果存在就计算停留时间
  368. userRecord, err := models.GetUserReadRecordListById(req.RecordId)
  369. if err != nil {
  370. if err.Error() == utils.ErrNoRow() {
  371. br.Msg = "更新阅读记录不存在"
  372. return
  373. }
  374. br.Msg = "更新阅读记录失败"
  375. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  376. return
  377. }
  378. stayTime := curTime.Unix() - int64(userRecord.Timestamp)
  379. stayTimeStr := utils.SecondsToHMS(stayTime)
  380. err = models.UpdateUserReadRecordById(req.RecordId, int(curTime.Unix()), int(stayTime), stayTimeStr)
  381. if err != nil {
  382. br.Msg = "更新阅读记录失败"
  383. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  384. return
  385. }
  386. }
  387. resp := new(response.UserReadRecordResp)
  388. resp.RecordId = insertId
  389. br.Msg = "添加阅读记录成功"
  390. br.Ret = 200
  391. br.Success = true
  392. br.Data = resp
  393. }
  394. // @Title 新增pdf报告浏览记录
  395. // @Description 新增pdf报告浏览记录接口
  396. // @Param request body models.ReportPdfRecordReq true "type json string"
  397. // @Success 200 新增成功
  398. // @router /pdf/addReportRecord [post]
  399. func (this *UserAuthController) AddReportPdfRecord() {
  400. br := new(models.BaseResponse).Init()
  401. defer func() {
  402. this.Data["json"] = br
  403. this.ServeJSON()
  404. }()
  405. user := this.User
  406. if user == nil {
  407. br.Msg = "请登录"
  408. br.ErrMsg = "请登录,用户信息为空"
  409. br.Ret = 403
  410. return
  411. }
  412. var req request.ReportPdfRecordReq
  413. if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
  414. br.Msg = "参数解析异常!"
  415. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  416. return
  417. }
  418. if req.ReportPdfId <= 0 {
  419. br.Msg = "参数错误"
  420. br.ErrMsg = "参数错误,报告id小于等于0"
  421. return
  422. }
  423. reportPdf, err := models.GetReportPdfById(req.ReportPdfId)
  424. if err != nil {
  425. if err.Error() == utils.ErrNoRow() {
  426. br.Msg = "报告不存在或已删除"
  427. return
  428. }
  429. br.Msg = "添加阅读记录失败"
  430. br.ErrMsg = "获取研报错误,Err:" + err.Error()
  431. return
  432. }
  433. reportClassifyId := services.GetReportPdfClassify(reportPdf)
  434. reportPermissionResp, err := services.GetChartPermissionListByClassifyId(reportClassifyId, 0)
  435. if err != nil {
  436. br.Msg = "添加阅读记录失败"
  437. br.ErrMsg = "获取研报品种错误,Err:" + err.Error()
  438. return
  439. }
  440. if reportPermissionResp.Ret != 200 {
  441. br.Msg = reportPermissionResp.Msg
  442. br.ErrMsg = reportPermissionResp.ErrMsg
  443. return
  444. }
  445. reportPermissionList := reportPermissionResp.Data
  446. chartPermissionList, err := services.GetChartPermissionAllList()
  447. if err != nil {
  448. br.Msg = "添加阅读记录失败"
  449. br.ErrMsg = "获取研报品种列表失败,Err:" + err.Error()
  450. return
  451. }
  452. chartMap := make(map[int]*models.ChartPermission)
  453. for _, permission := range chartPermissionList.Data {
  454. chartMap[permission.ChartPermissionId] = permission
  455. }
  456. curTime := time.Now()
  457. var insertId int64
  458. if req.RecordId == 0 {
  459. // 如果不存在就新增一条记录
  460. permission1Ids := make([]int, 0)
  461. permission2Ids := make([]int, 0)
  462. permissionNames := make([]string, 0)
  463. for _, item := range reportPermissionList {
  464. curPermission := chartMap[item.ChartPermissionId]
  465. permission1Ids = append(permission1Ids, curPermission.ParentId)
  466. permission2Ids = append(permission2Ids, curPermission.ChartPermissionId)
  467. permissionNames = append(permissionNames, curPermission.PermissionName)
  468. }
  469. permission1Ids = utils.Unique(permission1Ids)
  470. permission2Ids = utils.Unique(permission2Ids)
  471. permissionNames = utils.Unique(permissionNames)
  472. userReadRecord := &models.UserReadRecord{
  473. UserId: user.UserId,
  474. ReportId: reportPdf.ReportPdfId,
  475. ReportTitle: reportPdf.Title,
  476. ChartPermissionName: strings.Join(permissionNames, ","),
  477. ClassifyId1: reportPdf.ClassifyIdFirst,
  478. ClassifyName1: reportPdf.ClassifyNameFirst,
  479. ClassifyId2: reportPdf.ClassifyIdSecond,
  480. ClassifyName2: reportPdf.ClassifyNameSecond,
  481. Timestamp: int(curTime.Unix()),
  482. CreateTime: curTime,
  483. CreateDate: curTime.Format(utils.FormatDate),
  484. ReportType: utils.ReportTypePdf,
  485. }
  486. insertId, err = userReadRecord.Insert()
  487. if err != nil {
  488. br.Msg = "添加阅读记录失败"
  489. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  490. return
  491. }
  492. userReadPermission1 := make([]*models.UserReadPermission1, 0)
  493. for _, id := range permission1Ids {
  494. userReadPermission1 = append(userReadPermission1, &models.UserReadPermission1{
  495. UserReadRecordId: int(insertId),
  496. ChartPermissionId: id,
  497. PermissionName: chartMap[id].PermissionName,
  498. })
  499. }
  500. err = models.UserReadPermission1MultiInsert(userReadPermission1)
  501. if err != nil {
  502. br.Msg = "添加阅读记录失败"
  503. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  504. return
  505. }
  506. userReadPermission2 := make([]*models.UserReadPermission2, 0)
  507. for _, id := range permission2Ids {
  508. userReadPermission2 = append(userReadPermission2, &models.UserReadPermission2{
  509. UserReadRecordId: int(insertId),
  510. ChartPermissionId: id,
  511. })
  512. }
  513. err = models.UserReadPermission2MultiInsert(userReadPermission2)
  514. if err != nil {
  515. br.Msg = "添加阅读记录失败"
  516. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  517. return
  518. }
  519. count, err := models.GetUserReadRecordCountByReportPdfIdAndUserId(req.ReportPdfId, user.UserId)
  520. if err != nil {
  521. br.Msg = "添加阅读记录失败"
  522. br.ErrMsg = "获取阅读记录失败,Err:" + err.Error()
  523. return
  524. }
  525. if count > 1 {
  526. err = models.UpdateReportPdfPv(req.ReportPdfId)
  527. if err != nil {
  528. br.Msg = "添加研报阅读记录失败"
  529. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  530. return
  531. }
  532. } else {
  533. err = models.UpdateReportPdfUvAndPv(req.ReportPdfId)
  534. if err != nil {
  535. br.Msg = "添加研报阅读记录失败"
  536. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  537. return
  538. }
  539. }
  540. } else {
  541. // 如果存在就计算停留时间
  542. userRecord, err := models.GetUserReadRecordListById(req.RecordId)
  543. if err != nil {
  544. if err.Error() == utils.ErrNoRow() {
  545. br.Msg = "更新阅读记录不存在"
  546. return
  547. }
  548. br.Msg = "更新阅读记录失败"
  549. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  550. return
  551. }
  552. stayTime := curTime.Unix() - int64(userRecord.Timestamp)
  553. stayTimeStr := utils.SecondsToHMS(stayTime)
  554. err = models.UpdateUserReadRecordById(req.RecordId, int(curTime.Unix()), int(stayTime), stayTimeStr)
  555. if err != nil {
  556. br.Msg = "更新阅读记录失败"
  557. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  558. return
  559. }
  560. }
  561. resp := new(response.UserReadRecordResp)
  562. resp.RecordId = insertId
  563. br.Msg = "添加阅读记录成功"
  564. br.Ret = 200
  565. br.Success = true
  566. br.Data = resp
  567. }
  568. // AreaCodeList
  569. // @Title 手机号区号列表
  570. // @Description 手机号区号列表
  571. // @Success 200 Ret=200 获取成功
  572. // @router /area_code/list [get]
  573. func (this *UserController) AreaCodeList() {
  574. br := new(models.BaseResponse).Init()
  575. defer func() {
  576. if br.ErrMsg == "" {
  577. br.IsSendEmail = false
  578. }
  579. this.Data["json"] = br
  580. this.ServeJSON()
  581. }()
  582. resp := make([]response.AreaCodeListResp, 0)
  583. confValue, e := models.GetConfigDetailByCode(models.ConfAreaCodeListKey)
  584. if e != nil {
  585. br.Msg = "获取失败"
  586. br.ErrMsg = "获取手机号区号配置失败, Err: " + e.Error()
  587. return
  588. }
  589. if confValue == "" {
  590. br.Msg = "获取失败"
  591. br.ErrMsg = "手机号区号配置为空"
  592. return
  593. }
  594. if e := json.Unmarshal([]byte(confValue), &resp); e != nil {
  595. br.Msg = "获取失败"
  596. br.ErrMsg = "手机号区号配置有误"
  597. return
  598. }
  599. br.Data = resp
  600. br.Ret = 200
  601. br.Success = true
  602. br.Msg = "获取成功"
  603. }
  604. // 用户品种信息
  605. // @Title 用户信息
  606. // @Description 用户信息
  607. // @Success 200 Ret=200 获取成功
  608. // @router /info [get]
  609. func (this *UserAuthController) Info() {
  610. br := new(models.BaseResponse).Init()
  611. defer func() {
  612. this.Data["json"] = br
  613. this.ServeJSON()
  614. }()
  615. user := this.User
  616. if user == nil {
  617. user = &models.User{}
  618. }
  619. seller, err := models.GetSellerById(user.SellerId)
  620. if err != nil && err.Error() != utils.ErrNoRow() {
  621. br.Msg = "查询失败"
  622. br.ErrMsg = "查询失败,系统异常,Err:" + err.Error()
  623. return
  624. }
  625. private, err := services.GetPrivateChartPermissionList()
  626. if err != nil {
  627. br.Msg = "查询失败"
  628. br.ErrMsg = "查询失败,系统异常,Err:" + err.Error()
  629. return
  630. }
  631. if private.Ret != 200 {
  632. br.Msg = private.Msg
  633. br.ErrMsg = private.ErrMsg
  634. return
  635. }
  636. userPermissionIds, err := models.GetUserChartPermissionIdByUserId(user.UserId)
  637. if err != nil {
  638. br.Msg = "查看权限失败"
  639. br.ErrMsg = "查看权限失败,系统异常,Err:" + err.Error()
  640. return
  641. }
  642. userPermissionMap := make(map[int]struct{})
  643. for _, v := range userPermissionIds {
  644. userPermissionMap[v] = struct{}{}
  645. }
  646. if seller == nil {
  647. // 添加默认的销售电话
  648. seller = &models.SysUser{
  649. Phone: utils.DefaultPhone,
  650. AreaCode: utils.DefaultAreaCode,
  651. }
  652. }
  653. var hasPermission string
  654. for _, v := range private.Data {
  655. for _, vv := range v.Child {
  656. if _, ok := userPermissionMap[vv.ChartPermissionId]; ok {
  657. hasPermission = "私有权限"
  658. break
  659. }
  660. }
  661. }
  662. if hasPermission == "" || user.Status == utils.UserStatusNo {
  663. hasPermission = "公有权限"
  664. }
  665. miniconf, err := models.GetMiniConf()
  666. if err != nil {
  667. br.Msg = "获取配置失败"
  668. br.ErrMsg = "获取配置失败,系统异常,Err:" + err.Error()
  669. return
  670. }
  671. userView := &models.UserView{
  672. Headimgurl: miniconf["Logo"],
  673. RealName: user.RealName,
  674. Phone: user.Phone,
  675. AreaCode: user.AreaCode,
  676. SellerName: seller.SysRealName,
  677. SellerPhone: seller.Phone,
  678. SellerAreaCode: seller.AreaCode,
  679. HasPermission: hasPermission,
  680. Email: user.Email,
  681. Componey: user.Company,
  682. IsRegistered: user.IsRegistered,
  683. Status: user.Status,
  684. ValidEndTime: user.ValidEndTime.Format(utils.FormatDate),
  685. }
  686. if user.ValidEndTime.IsZero() {
  687. userView.ValidEndTime = ""
  688. }
  689. br.Data = userView
  690. br.Msg = "查询成功"
  691. br.Success = true
  692. br.Ret = 200
  693. }
  694. // PermissionList
  695. // @Title 用户个人权限列表
  696. // @Description 用户个人权限列表
  697. // @Param request body models.LoginReq true "type json string"
  698. // @Success 200 {object} []models.ChartPermissionTreeView
  699. // @router /permission/list [get]
  700. func (this *UserAuthController) PermissionList() {
  701. br := new(models.BaseResponse).Init()
  702. defer func() {
  703. this.Data["json"] = br
  704. this.ServeJSON()
  705. }()
  706. user := this.User
  707. permissionIds, err := models.GetUserChartPermissionIdByUserId(user.UserId)
  708. if err != nil {
  709. br.Msg = "查询用户权限失败"
  710. br.ErrMsg = "查询用户权限失败,系统异常,Err:" + err.Error()
  711. return
  712. }
  713. userPermissionMap := make(map[int]struct{})
  714. for _, v := range permissionIds {
  715. userPermissionMap[v] = struct{}{}
  716. }
  717. // 查询公有权限
  718. var publicView []*models.ChartPermissionTreeView
  719. publicResp, err := services.GetPublicChartPermissionList()
  720. if err != nil {
  721. br.Msg = "查询公有权限失败"
  722. br.ErrMsg = "查询私有权限失败,系统异常,Err:" + err.Error()
  723. }
  724. if publicResp.Ret != 200 {
  725. br.Msg = publicResp.Msg
  726. br.ErrMsg = publicResp.ErrMsg
  727. return
  728. }
  729. publicView = publicResp.Data
  730. // 如果是正式用户,则查询私有权限
  731. var privateView []*models.ChartPermissionTreeView
  732. if user.Status == utils.UserStatusFormal {
  733. privateResp, err := services.GetPrivateChartPermissionList()
  734. if err != nil {
  735. br.Msg = "查询私有权限失败"
  736. br.ErrMsg = "查询私有权限失败,系统异常,Err:" + err.Error()
  737. }
  738. if privateResp.Ret != 200 {
  739. br.Msg = privateResp.Msg
  740. br.ErrMsg = privateResp.ErrMsg
  741. return
  742. }
  743. for _, v := range privateResp.Data {
  744. IsAdd := false
  745. curPermissionView := &models.ChartPermissionTreeView{
  746. ChartPermissionId: v.ChartPermissionId,
  747. PermissionName: v.PermissionName,
  748. IsPublic: v.IsPublic,
  749. Sort: v.Sort,
  750. Child: make([]*models.ChartPermissionTreeView, 0),
  751. }
  752. for _, vv := range v.Child {
  753. if _, ok := userPermissionMap[vv.ChartPermissionId]; ok {
  754. curPermissionView.Child = append(curPermissionView.Child, vv)
  755. IsAdd = true
  756. }
  757. }
  758. if IsAdd {
  759. privateView = append(privateView, curPermissionView)
  760. }
  761. }
  762. }
  763. privateAloneView := make([]*models.ChartPermissionTreeView, 0)
  764. for _, vi := range privateView {
  765. isHas := false
  766. for _, vb := range publicView {
  767. if vi.ChartPermissionId == vb.ChartPermissionId {
  768. isHas = true
  769. vb.Child = append(vb.Child, vi.Child...)
  770. break
  771. }
  772. }
  773. if !isHas {
  774. privateAloneView = append(privateAloneView, vi)
  775. }
  776. }
  777. publicView = append(publicView, privateAloneView...)
  778. for _, vi := range publicView {
  779. vi.ChartPermissionType = utils.PermissionTypeEta
  780. for _, vi := range vi.Child {
  781. vi.ChartPermissionType = utils.PermissionTypeEta
  782. }
  783. }
  784. br.Data = publicView
  785. br.Msg = "查询成功"
  786. br.Success = true
  787. br.Ret = 200
  788. }
  789. // PermissionList
  790. // @Title 用户已购权限列表
  791. // @Description 用户已购权限列表
  792. // @Param request body models.LoginReq true "type json string"
  793. // @Success 200 {object} []models.ChartPermissionTreeView
  794. // @router /purchased/list [get]
  795. func (this *UserAuthController) PurchasedPermission() {
  796. br := new(models.BaseResponse).Init()
  797. defer func() {
  798. this.Data["json"] = br
  799. this.ServeJSON()
  800. }()
  801. user := this.User
  802. permissionIds, err := models.GetUserChartPermissionIdByUserId(user.UserId)
  803. if err != nil {
  804. br.Msg = "查询用户权限失败"
  805. br.ErrMsg = "查询用户权限失败,系统异常,Err:" + err.Error()
  806. return
  807. }
  808. permissionMap := make(map[int]struct{})
  809. for _, v := range permissionIds {
  810. permissionMap[v] = struct{}{}
  811. }
  812. // 查询私有权限
  813. privateResp, err := services.GetPrivateChartPermissionList()
  814. if err != nil {
  815. br.Msg = "查询私有权限失败"
  816. br.ErrMsg = "查询私有权限失败,系统异常,Err:" + err.Error()
  817. }
  818. if privateResp.Ret != 200 {
  819. br.Msg = privateResp.Msg
  820. br.ErrMsg = privateResp.ErrMsg
  821. return
  822. }
  823. var privateView []*models.ChartPermissionTreeView
  824. for _, v := range privateResp.Data {
  825. IsAdd := false
  826. curPermissionView := &models.ChartPermissionTreeView{
  827. ChartPermissionId: v.ChartPermissionId,
  828. PermissionName: v.PermissionName,
  829. IsPublic: v.IsPublic,
  830. Sort: v.Sort,
  831. Child: make([]*models.ChartPermissionTreeView, 0),
  832. ChartPermissionType: utils.PermissionTypeEta,
  833. }
  834. for _, vv := range v.Child {
  835. if _, ok := permissionMap[vv.ChartPermissionId]; ok && vv.ParentId != 0 {
  836. vv.ChartPermissionType = utils.PermissionTypeEta
  837. curPermissionView.Child = append(curPermissionView.Child, vv)
  838. IsAdd = true
  839. }
  840. }
  841. if IsAdd {
  842. privateView = append(privateView, curPermissionView)
  843. }
  844. }
  845. for _, vi := range privateView {
  846. vi.Child = append(vi.Child, &models.ChartPermissionTreeView{
  847. ChartPermissionId: -1,
  848. PermissionName: utils.MINI_CUSTOM_PERMISSION_NAME,
  849. IsPublic: 0,
  850. Sort: 0,
  851. ChartPermissionType: utils.ReportTypePdf,
  852. })
  853. }
  854. br.Data = privateView
  855. br.Msg = "查询成功"
  856. br.Success = true
  857. br.Ret = 200
  858. }