user.go 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120
  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. "image/color"
  13. "strconv"
  14. "strings"
  15. "time"
  16. "github.com/mojocn/base64Captcha"
  17. )
  18. type UserController struct {
  19. BaseCommonController
  20. }
  21. type UserAuthController struct {
  22. BaseAuthController
  23. }
  24. // @Title 用户登录接口
  25. // @Description 用户登录
  26. // @Param request body models.LoginReq true "type json string"
  27. // @Success 200 {object} models.LoginResp
  28. // @router /login [post]
  29. func (this *UserAuthController) Login() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. this.Data["json"] = br
  33. this.ServeJSON()
  34. }()
  35. session := this.Session
  36. var req request.LoginReq
  37. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  38. if err != nil {
  39. br.Msg = "参数解析失败"
  40. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  41. return
  42. }
  43. if req.RealName == "" {
  44. br.Msg = "请输入姓名"
  45. return
  46. }
  47. if req.SysDepartmentId <= 0 {
  48. br.Msg = "请选择营业部门"
  49. return
  50. }
  51. switch req.LoginType {
  52. case 1:
  53. if req.Phone == "" {
  54. br.Msg = "请输入手机号"
  55. br.ErrMsg = "请输入手机号"
  56. return
  57. }
  58. if req.SmsCode == "" {
  59. br.Msg = "请输入验证码"
  60. br.ErrMsg = "请输入验证码"
  61. return
  62. }
  63. phone := req.AreaCode + req.Phone
  64. item, err := models.GetMsgCode(phone, req.SmsCode)
  65. if err != nil {
  66. if err.Error() == utils.ErrNoRow() {
  67. br.Msg = "验证码错误,请重新输入"
  68. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  69. return
  70. } else {
  71. br.Msg = "验证码错误,请重新输入"
  72. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  73. return
  74. }
  75. }
  76. if item == nil {
  77. br.Msg = "验证码错误,请重新输入"
  78. return
  79. }
  80. case 2:
  81. if req.Email == "" {
  82. br.Msg = "请输入邮箱"
  83. br.ErrMsg = "请输入邮箱"
  84. return
  85. }
  86. if req.SmsCode == "" {
  87. br.Msg = "请输入验证码"
  88. br.ErrMsg = "请输入验证码"
  89. return
  90. }
  91. item, err := models.GetMsgCode(req.Email, req.SmsCode)
  92. if err != nil {
  93. if err.Error() == utils.ErrNoRow() {
  94. br.Msg = "验证码错误,请重新输入"
  95. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  96. return
  97. } else {
  98. br.Msg = "验证码错误,请重新输入"
  99. br.ErrMsg = "校验验证码失败,Err:" + err.Error()
  100. return
  101. }
  102. }
  103. if item == nil {
  104. br.Msg = "验证码错误,请重新输入"
  105. return
  106. }
  107. }
  108. _, errMsg, err := services.BindUser(session.UnionId, session.OpenId, req.Phone, req.Email, req.AreaCode, req.SysDepartmentId, req.RealName)
  109. if err != nil && err.Error() != utils.ErrNoRow() {
  110. br.Msg = "登录失败,系统处理中,请稍后重试"
  111. if errMsg != "" {
  112. br.Msg = errMsg
  113. }
  114. br.ErrMsg = "登录失败:" + err.Error()
  115. return
  116. }
  117. br.Msg = "登录成功"
  118. br.Success = true
  119. br.Ret = 200
  120. }
  121. // GenerateCaptcha
  122. // @Title 生成图形验证码
  123. // @Description 生成图形验证码
  124. // @Success 200 Ret=200 获取成功
  125. // @router /getCaptcha [get]
  126. func (this *UserController) GenerateCaptcha() {
  127. br := new(models.BaseResponse).Init()
  128. defer func() {
  129. if br.ErrMsg == "" {
  130. br.IsSendEmail = false
  131. }
  132. this.Data["json"] = br
  133. this.ServeJSON()
  134. }()
  135. // 自定义验证码样式
  136. var driver base64Captcha.Driver
  137. driverString := base64Captcha.DriverString{
  138. Height: 60, //高度
  139. Width: 120, //宽度
  140. NoiseCount: 0, //干扰数
  141. ShowLineOptions: 2 | 4, //展示个数
  142. Length: 4, //长度
  143. //Source: "1234567890qwertyuioplkjhgfdsazxcvbnm", //验证码随机字符串来源
  144. Source: "1234567890", //验证码随机字符串来源
  145. BgColor: &color.RGBA{ // 背景颜色
  146. R: 0,
  147. G: 0,
  148. B: 0,
  149. A: 0,
  150. },
  151. Fonts: []string{"wqy-microhei.ttc"}, // 字体
  152. }
  153. driver = driverString.ConvertFonts()
  154. // 生成验证码
  155. store := services.CaptchaRedis{}
  156. captcha := base64Captcha.NewCaptcha(driver, store)
  157. id, b64s, _, err := captcha.Generate()
  158. if err != nil {
  159. br.Msg = "生成失败"
  160. br.ErrMsg = "生成验证码失败, Err: " + err.Error()
  161. return
  162. }
  163. type CaptchaResult struct {
  164. Id string
  165. Base64Blob string
  166. }
  167. res := new(CaptchaResult)
  168. res.Id = id
  169. res.Base64Blob = b64s
  170. br.Ret = 200
  171. br.Success = true
  172. br.Msg = "获取成功"
  173. br.Data = res
  174. }
  175. // @Title 获取短信/邮箱验证码
  176. // @Description 用户登录
  177. // @Param request body models.LoginReq true "type json string"
  178. // @Success 200 {object} models.LoginResp
  179. // @router /getVerifyCode [post]
  180. func (this *UserController) GetVerifyCode() {
  181. br := new(models.BaseResponse).Init()
  182. defer func() {
  183. if br.Ret != 200 {
  184. b, _ := json.Marshal(br)
  185. alarm_msg.SendAlarmMsg(string(b), 1)
  186. }
  187. this.Data["json"] = br
  188. this.ServeJSON()
  189. }()
  190. var req request.VerifyCodeReq
  191. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  192. if err != nil {
  193. br.Msg = "参数解析异常!"
  194. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  195. return
  196. }
  197. if req.VerifyType != 1 && req.VerifyType != 2 {
  198. br.Msg = "验证方式有误"
  199. br.ErrMsg = fmt.Sprintf("验证方式异常<%d>", req.VerifyType)
  200. }
  201. if req.CaptchaId == "" || req.CaptchaCode == "" {
  202. br.Msg = "请输入图形验证码"
  203. return
  204. }
  205. code := utils.GetRandDigit(6)
  206. fmt.Println(code)
  207. switch req.VerifyType {
  208. case 1:
  209. if req.AreaCode == "" {
  210. br.Msg = "请选择区号"
  211. return
  212. }
  213. if req.Phone == "" {
  214. br.Msg = "请输入手机号"
  215. return
  216. }
  217. if req.AreaCode == utils.TelAreaCodeHome && !utils.ValidateMobileFormatat(req.Phone) {
  218. br.Msg = "您的手机号输入有误, 请检查"
  219. return
  220. }
  221. phoneKey := utils.CACHE_ACCESS_PHONE_LOGIN_CODE + req.AreaCode + req.Phone
  222. res, _ := go_redis.RedisInt(phoneKey)
  223. if res >= 5 {
  224. br.Msg = "验证码发送太频繁,请稍后重试"
  225. return
  226. }
  227. phoneCountKey := utils.CACHE_ACCESS_PHONE_COUNT_LOGIN_CODE + req.AreaCode + req.Phone
  228. resCount, _ := go_redis.RedisInt(phoneCountKey)
  229. if resCount >= utils.VerifyCodeSendLimit {
  230. br.Msg = fmt.Sprintf("一天最多获取%s次,已超限", strconv.Itoa(utils.VerifyCodeSendLimit))
  231. return
  232. }
  233. store := services.CaptchaRedis{}
  234. var ok bool
  235. ok = store.Verify(req.CaptchaId, req.CaptchaCode, true)
  236. if !ok {
  237. br.Msg = "图形验证码错误"
  238. return
  239. }
  240. if req.AreaCode == "86" {
  241. ok = services.SendSmsCode(req.Phone, code)
  242. }
  243. if !ok {
  244. br.Msg = "请检查手机号和区号"
  245. br.ErrMsg = "短信验证码发送失败"
  246. return
  247. } else {
  248. item := new(models.MsgCode)
  249. item.OpenId = ""
  250. item.Code = code
  251. item.Mobile = req.AreaCode + req.Phone
  252. item.ExpiredIn = time.Now().Add(15 * time.Minute).Unix()
  253. item.CreateTime = time.Now()
  254. err = item.Insert()
  255. if err != nil {
  256. br.Msg = "发送失败"
  257. br.ErrMsg = "发送失败,Err:" + err.Error()
  258. return
  259. }
  260. br.Msg = "发送成功"
  261. phoneVerifyCahcheSvc := &services.VerifyCacheIncrService{}
  262. err = phoneVerifyCahcheSvc.VerifyCacheIncr(phoneKey, 15*int(time.Minute.Seconds()))
  263. if err != nil {
  264. utils.FileLog.Info("验证码手机号临时缓存失败", err.Error())
  265. }
  266. err = phoneVerifyCahcheSvc.VerifyCacheIncr(phoneCountKey, int(utils.SetKeyExpireToday().Seconds()))
  267. if err != nil {
  268. utils.FileLog.Info("验证码手机号当日缓存失败", err.Error())
  269. }
  270. }
  271. case 2:
  272. if req.Email == "" {
  273. br.Msg = "请输入邮箱"
  274. }
  275. if !utils.ValidateEmailFormatat(req.Email) {
  276. br.Msg = "您的邮箱格式输入有误, 请检查"
  277. return
  278. }
  279. emailKey := utils.CACHE_ACCESS_EMAIL_LOGIN_CODE + req.Email
  280. res, _ := go_redis.RedisInt(emailKey)
  281. if res >= 5 {
  282. br.Msg = "验证码发送太频繁,请稍后重试"
  283. return
  284. }
  285. emailCountKey := utils.CACHE_ACCESS_EMAIL_COUNT_LOGIN_CODE + req.Email
  286. resCount, _ := go_redis.RedisInt(emailCountKey)
  287. if resCount >= utils.VerifyCodeSendLimit {
  288. br.Msg = fmt.Sprintf("一天最多获取%s次,已超限", strconv.Itoa(utils.VerifyCodeSendLimit))
  289. return
  290. }
  291. store := services.CaptchaRedis{}
  292. var ok bool
  293. ok = store.Verify(req.CaptchaId, req.CaptchaCode, true)
  294. if !ok {
  295. br.Msg = "图形验证码错误"
  296. return
  297. }
  298. date := time.Now()
  299. content := "尊敬的用户:</br>本次请求的验证码为:" + code + "(为了保障您账号的安全性,请在15分钟内完成验证。)</br>东吴期货研究团队 </br>" + fmt.Sprintf("%d年%02d月%02d日", date.Year(), date.Month(), date.Day())
  300. title := "东吴期货登录验证"
  301. result, err := utils.SendEmailByDw(title, content, req.Email)
  302. if err != nil {
  303. br.Msg = "发送失败"
  304. br.ErrMsg = "发送失败,Err:" + err.Error()
  305. return
  306. }
  307. if result {
  308. item := new(models.MsgCode)
  309. item.OpenId = ""
  310. item.Code = code
  311. item.Mobile = req.Email
  312. item.ExpiredIn = time.Now().Add(15 * time.Minute).Unix()
  313. item.CreateTime = time.Now()
  314. err = item.Insert()
  315. if err != nil {
  316. br.Msg = "发送失败"
  317. br.ErrMsg = "发送失败,Err:" + err.Error()
  318. return
  319. }
  320. br.Msg = "发送成功"
  321. emailVerifyCahcheSvc := &services.VerifyCacheIncrService{}
  322. err = emailVerifyCahcheSvc.VerifyCacheIncr(emailKey, 15*int(time.Minute.Seconds()))
  323. if err != nil {
  324. utils.FileLog.Info("验证码邮箱临时缓存失败, err:", err.Error())
  325. }
  326. err = emailVerifyCahcheSvc.VerifyCacheIncr(emailCountKey, int(utils.SetKeyExpireToday().Seconds()))
  327. if err != nil {
  328. utils.FileLog.Info("验证码邮箱当日缓存失败, err:", err.Error())
  329. }
  330. } else {
  331. br.Msg = "发送失败"
  332. }
  333. }
  334. br.Ret = 200
  335. br.Success = true
  336. br.Msg = "发送成功"
  337. }
  338. // @Title 新增报告浏览记录
  339. // @Description 新增报告浏览记录接口
  340. // @Param request body models.ReportRecordReq true "type json string"
  341. // @Success 200 新增成功
  342. // @router /addReportRecord [post]
  343. func (this *UserAuthController) AddReportRecord() {
  344. br := new(models.BaseResponse).Init()
  345. defer func() {
  346. this.Data["json"] = br
  347. this.ServeJSON()
  348. }()
  349. user := this.User
  350. if user == nil {
  351. br.Msg = "请登录"
  352. br.ErrMsg = "请登录,用户信息为空"
  353. br.Ret = 403
  354. return
  355. }
  356. var req request.ReportRecordReq
  357. if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
  358. br.Msg = "参数解析异常!"
  359. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  360. return
  361. }
  362. if req.ReportId <= 0 {
  363. br.Msg = "参数错误"
  364. br.ErrMsg = "参数错误,报告id小于等于0"
  365. return
  366. }
  367. reportResp, err := services.GetReportDetail(req.ReportId, user.UserId)
  368. if err != nil {
  369. br.Msg = "添加阅读记录失败"
  370. br.ErrMsg = "获取研报错误,Err:" + err.Error()
  371. return
  372. }
  373. if reportResp.Ret != 200 {
  374. br.Msg = reportResp.Msg
  375. br.ErrMsg = reportResp.ErrMsg
  376. return
  377. }
  378. reportDetail := reportResp.Data.Report
  379. reportPermissionResp, err := services.GetReportChartPermissionList(req.ReportId)
  380. if err != nil {
  381. br.Msg = "添加阅读记录失败"
  382. br.ErrMsg = "获取研报品种错误,Err:" + err.Error()
  383. return
  384. }
  385. if reportPermissionResp.Ret != 200 {
  386. br.Msg = reportPermissionResp.Msg
  387. br.ErrMsg = reportPermissionResp.ErrMsg
  388. return
  389. }
  390. reportPermissionList := reportPermissionResp.Data
  391. chartPermissionList, err := services.GetChartPermissionAllList()
  392. if err != nil {
  393. br.Msg = "添加阅读记录失败"
  394. br.ErrMsg = "获取研报品种列表失败,Err:" + err.Error()
  395. return
  396. }
  397. chartMap := make(map[int]*models.ChartPermission)
  398. for _, permission := range chartPermissionList.Data {
  399. chartMap[permission.ChartPermissionId] = permission
  400. }
  401. curTime := time.Now()
  402. var insertId int64
  403. if req.RecordId == 0 {
  404. // 如果不存在就新增一条记录
  405. permission1Ids := make([]int, 0)
  406. permission2Ids := make([]int, 0)
  407. permissionNames := make([]string, 0)
  408. for _, item := range reportPermissionList {
  409. curPermission := chartMap[item.ChartPermissionId]
  410. permission1Ids = append(permission1Ids, curPermission.ParentId)
  411. permission2Ids = append(permission2Ids, curPermission.ChartPermissionId)
  412. permissionNames = append(permissionNames, curPermission.PermissionName)
  413. }
  414. permission1Ids = utils.Unique(permission1Ids)
  415. permission2Ids = utils.Unique(permission2Ids)
  416. permissionNames = utils.Unique(permissionNames)
  417. userReadRecord := &models.UserReadRecord{
  418. UserId: user.UserId,
  419. ReportId: req.ReportId,
  420. ReportTitle: reportDetail.Title,
  421. ChartPermissionName: strings.Join(permissionNames, ","),
  422. ClassifyId1: reportDetail.ClassifyIdFirst,
  423. ClassifyName1: reportDetail.ClassifyNameFirst,
  424. ClassifyId2: reportDetail.ClassifyIdSecond,
  425. ClassifyName2: reportDetail.ClassifyNameSecond,
  426. ClassifyId3: reportDetail.ClassifyIdThird,
  427. ClassifyName3: reportDetail.ClassifyNameThird,
  428. Timestamp: int(curTime.Unix()),
  429. CreateTime: curTime,
  430. CreateDate: curTime.Format(utils.FormatDate),
  431. ReportType: utils.ReportTypeEta,
  432. }
  433. insertId, err = userReadRecord.Insert()
  434. if err != nil {
  435. br.Msg = "添加阅读记录失败"
  436. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  437. return
  438. }
  439. userReadPermission1 := make([]*models.UserReadPermission1, 0)
  440. for _, id := range permission1Ids {
  441. userReadPermission1 = append(userReadPermission1, &models.UserReadPermission1{
  442. UserReadRecordId: int(insertId),
  443. ChartPermissionId: id,
  444. PermissionName: chartMap[id].PermissionName,
  445. })
  446. }
  447. err = models.UserReadPermission1MultiInsert(userReadPermission1)
  448. if err != nil {
  449. br.Msg = "添加阅读记录失败"
  450. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  451. return
  452. }
  453. userReadPermission2 := make([]*models.UserReadPermission2, 0)
  454. for _, id := range permission2Ids {
  455. userReadPermission2 = append(userReadPermission2, &models.UserReadPermission2{
  456. UserReadRecordId: int(insertId),
  457. ChartPermissionId: id,
  458. })
  459. }
  460. err = models.UserReadPermission2MultiInsert(userReadPermission2)
  461. if err != nil {
  462. br.Msg = "添加阅读记录失败"
  463. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  464. return
  465. }
  466. } else {
  467. // 如果存在就计算停留时间
  468. userRecord, err := models.GetUserReadRecordListById(req.RecordId)
  469. if err != nil {
  470. if err.Error() == utils.ErrNoRow() {
  471. br.Msg = "更新阅读记录不存在"
  472. return
  473. }
  474. br.Msg = "更新阅读记录失败"
  475. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  476. return
  477. }
  478. stayTime := curTime.Unix() - int64(userRecord.Timestamp)
  479. stayTimeStr := utils.SecondsToHMS(stayTime)
  480. err = models.UpdateUserReadRecordById(req.RecordId, int(curTime.Unix()), int(stayTime), stayTimeStr)
  481. if err != nil {
  482. br.Msg = "更新阅读记录失败"
  483. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  484. return
  485. }
  486. }
  487. resp := new(response.UserReadRecordResp)
  488. resp.RecordId = insertId
  489. br.Msg = "添加阅读记录成功"
  490. br.Ret = 200
  491. br.Success = true
  492. br.Data = resp
  493. }
  494. // @Title 新增pdf报告浏览记录
  495. // @Description 新增pdf报告浏览记录接口
  496. // @Param request body models.ReportPdfRecordReq true "type json string"
  497. // @Success 200 新增成功
  498. // @router /pdf/addReportRecord [post]
  499. func (this *UserAuthController) AddReportPdfRecord() {
  500. br := new(models.BaseResponse).Init()
  501. defer func() {
  502. this.Data["json"] = br
  503. this.ServeJSON()
  504. }()
  505. user := this.User
  506. if user == nil {
  507. br.Msg = "请登录"
  508. br.ErrMsg = "请登录,用户信息为空"
  509. br.Ret = 403
  510. return
  511. }
  512. var req request.ReportPdfRecordReq
  513. if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
  514. br.Msg = "参数解析异常!"
  515. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  516. return
  517. }
  518. if req.ReportPdfId <= 0 {
  519. br.Msg = "参数错误"
  520. br.ErrMsg = "参数错误,报告id小于等于0"
  521. return
  522. }
  523. reportPdf, err := models.GetReportPdfById(req.ReportPdfId)
  524. if err != nil {
  525. if err.Error() == utils.ErrNoRow() {
  526. br.Msg = "报告不存在或已删除"
  527. return
  528. }
  529. br.Msg = "添加阅读记录失败"
  530. br.ErrMsg = "获取研报错误,Err:" + err.Error()
  531. return
  532. }
  533. reportClassifyId := services.GetReportPdfClassify(reportPdf)
  534. reportPermissionResp, err := services.GetChartPermissionListByClassifyId(reportClassifyId, 0)
  535. if err != nil {
  536. br.Msg = "添加阅读记录失败"
  537. br.ErrMsg = "获取研报品种错误,Err:" + err.Error()
  538. return
  539. }
  540. if reportPermissionResp.Ret != 200 {
  541. br.Msg = reportPermissionResp.Msg
  542. br.ErrMsg = reportPermissionResp.ErrMsg
  543. return
  544. }
  545. reportPermissionList := reportPermissionResp.Data
  546. chartPermissionList, err := services.GetChartPermissionAllList()
  547. if err != nil {
  548. br.Msg = "添加阅读记录失败"
  549. br.ErrMsg = "获取研报品种列表失败,Err:" + err.Error()
  550. return
  551. }
  552. chartMap := make(map[int]*models.ChartPermission)
  553. for _, permission := range chartPermissionList.Data {
  554. chartMap[permission.ChartPermissionId] = permission
  555. }
  556. curTime := time.Now()
  557. var insertId int64
  558. if req.RecordId == 0 {
  559. // 如果不存在就新增一条记录
  560. permission1Ids := make([]int, 0)
  561. permission2Ids := make([]int, 0)
  562. permissionNames := make([]string, 0)
  563. for _, item := range reportPermissionList {
  564. curPermission := chartMap[item.ChartPermissionId]
  565. permission1Ids = append(permission1Ids, curPermission.ParentId)
  566. permission2Ids = append(permission2Ids, curPermission.ChartPermissionId)
  567. permissionNames = append(permissionNames, curPermission.PermissionName)
  568. }
  569. permission1Ids = utils.Unique(permission1Ids)
  570. permission2Ids = utils.Unique(permission2Ids)
  571. permissionNames = utils.Unique(permissionNames)
  572. userReadRecord := &models.UserReadRecord{
  573. UserId: user.UserId,
  574. ReportId: reportPdf.ReportPdfId,
  575. ReportTitle: reportPdf.Title,
  576. ChartPermissionName: strings.Join(permissionNames, ","),
  577. ClassifyId1: reportPdf.ClassifyIdFirst,
  578. ClassifyName1: reportPdf.ClassifyNameFirst,
  579. ClassifyId2: reportPdf.ClassifyIdSecond,
  580. ClassifyName2: reportPdf.ClassifyNameSecond,
  581. Timestamp: int(curTime.Unix()),
  582. CreateTime: curTime,
  583. CreateDate: curTime.Format(utils.FormatDate),
  584. ReportType: utils.ReportTypePdf,
  585. }
  586. insertId, err = userReadRecord.Insert()
  587. if err != nil {
  588. br.Msg = "添加阅读记录失败"
  589. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  590. return
  591. }
  592. userReadPermission1 := make([]*models.UserReadPermission1, 0)
  593. for _, id := range permission1Ids {
  594. userReadPermission1 = append(userReadPermission1, &models.UserReadPermission1{
  595. UserReadRecordId: int(insertId),
  596. ChartPermissionId: id,
  597. PermissionName: chartMap[id].PermissionName,
  598. })
  599. }
  600. err = models.UserReadPermission1MultiInsert(userReadPermission1)
  601. if err != nil {
  602. br.Msg = "添加阅读记录失败"
  603. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  604. return
  605. }
  606. userReadPermission2 := make([]*models.UserReadPermission2, 0)
  607. for _, id := range permission2Ids {
  608. userReadPermission2 = append(userReadPermission2, &models.UserReadPermission2{
  609. UserReadRecordId: int(insertId),
  610. ChartPermissionId: id,
  611. })
  612. }
  613. err = models.UserReadPermission2MultiInsert(userReadPermission2)
  614. if err != nil {
  615. br.Msg = "添加阅读记录失败"
  616. br.ErrMsg = "添加阅读记录失败,Err:" + err.Error()
  617. return
  618. }
  619. count, err := models.GetUserReadRecordCountByReportPdfIdAndUserId(req.ReportPdfId, user.UserId)
  620. if err != nil {
  621. br.Msg = "添加阅读记录失败"
  622. br.ErrMsg = "获取阅读记录失败,Err:" + err.Error()
  623. return
  624. }
  625. if count > 1 {
  626. err = models.UpdateReportPdfPv(req.ReportPdfId)
  627. if err != nil {
  628. br.Msg = "添加研报阅读记录失败"
  629. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  630. return
  631. }
  632. } else {
  633. err = models.UpdateReportPdfUvAndPv(req.ReportPdfId)
  634. if err != nil {
  635. br.Msg = "添加研报阅读记录失败"
  636. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  637. return
  638. }
  639. }
  640. } else {
  641. // 如果存在就计算停留时间
  642. userRecord, err := models.GetUserReadRecordListById(req.RecordId)
  643. if err != nil {
  644. if err.Error() == utils.ErrNoRow() {
  645. br.Msg = "更新阅读记录不存在"
  646. return
  647. }
  648. br.Msg = "更新阅读记录失败"
  649. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  650. return
  651. }
  652. stayTime := curTime.Unix() - int64(userRecord.Timestamp)
  653. stayTimeStr := utils.SecondsToHMS(stayTime)
  654. err = models.UpdateUserReadRecordById(req.RecordId, int(curTime.Unix()), int(stayTime), stayTimeStr)
  655. if err != nil {
  656. br.Msg = "更新阅读记录失败"
  657. br.ErrMsg = "更新阅读记录失败,Err:" + err.Error()
  658. return
  659. }
  660. }
  661. resp := new(response.UserReadRecordResp)
  662. resp.RecordId = insertId
  663. br.Msg = "添加阅读记录成功"
  664. br.Ret = 200
  665. br.Success = true
  666. br.Data = resp
  667. }
  668. // AreaCodeList
  669. // @Title 手机号区号列表
  670. // @Description 手机号区号列表
  671. // @Success 200 Ret=200 获取成功
  672. // @router /area_code/list [get]
  673. func (this *UserController) AreaCodeList() {
  674. br := new(models.BaseResponse).Init()
  675. defer func() {
  676. if br.ErrMsg == "" {
  677. br.IsSendEmail = false
  678. }
  679. this.Data["json"] = br
  680. this.ServeJSON()
  681. }()
  682. resp := make([]response.AreaCodeListResp, 0)
  683. confValue, e := models.GetConfigDetailByCode(models.ConfAreaCodeListKey)
  684. if e != nil {
  685. br.Msg = "获取失败"
  686. br.ErrMsg = "获取手机号区号配置失败, Err: " + e.Error()
  687. return
  688. }
  689. if confValue == "" {
  690. br.Msg = "获取失败"
  691. br.ErrMsg = "手机号区号配置为空"
  692. return
  693. }
  694. if e := json.Unmarshal([]byte(confValue), &resp); e != nil {
  695. br.Msg = "获取失败"
  696. br.ErrMsg = "手机号区号配置有误"
  697. return
  698. }
  699. br.Data = resp
  700. br.Ret = 200
  701. br.Success = true
  702. br.Msg = "获取成功"
  703. }
  704. // 用户品种信息
  705. // @Title 用户信息
  706. // @Description 用户信息
  707. // @Success 200 Ret=200 获取成功
  708. // @router /info [get]
  709. func (this *UserAuthController) Info() {
  710. br := new(models.BaseResponse).Init()
  711. defer func() {
  712. this.Data["json"] = br
  713. this.ServeJSON()
  714. }()
  715. user := this.User
  716. if user == nil {
  717. user = &models.User{}
  718. }
  719. var department *models.SysDepartment
  720. var err error
  721. if user.SellerDepartmentId > 0 {
  722. department, err = models.GetSysDepartmentById(user.SellerDepartmentId)
  723. if err != nil {
  724. if err.Error() == utils.ErrNoRow() {
  725. br.Msg = "查询失败"
  726. br.ErrMsg = "部门不存在,系统异常,Err:" + err.Error()
  727. return
  728. }
  729. br.Msg = "查询失败"
  730. br.ErrMsg = "查询失败,系统异常,Err:" + err.Error()
  731. return
  732. }
  733. } else {
  734. department = new(models.SysDepartment)
  735. }
  736. private, err := services.GetPrivateChartPermissionList()
  737. if err != nil {
  738. br.Msg = "查询失败"
  739. br.ErrMsg = "查询失败,系统异常,Err:" + err.Error()
  740. return
  741. }
  742. if private.Ret != 200 {
  743. br.Msg = private.Msg
  744. br.ErrMsg = private.ErrMsg
  745. return
  746. }
  747. userPermissionIds, err := models.GetUserChartPermissionIdByUserId(user.UserId)
  748. if err != nil {
  749. br.Msg = "查看权限失败"
  750. br.ErrMsg = "查看权限失败,系统异常,Err:" + err.Error()
  751. return
  752. }
  753. userPermissionMap := make(map[int]struct{})
  754. for _, v := range userPermissionIds {
  755. userPermissionMap[v] = struct{}{}
  756. }
  757. var hasPermission string
  758. for _, v := range private.Data {
  759. for _, vv := range v.Child {
  760. if _, ok := userPermissionMap[vv.ChartPermissionId]; ok {
  761. hasPermission = "私有权限"
  762. break
  763. }
  764. }
  765. }
  766. if hasPermission == "" || user.Status == utils.UserStatusNo {
  767. hasPermission = "公有权限"
  768. }
  769. miniconf, err := models.GetMiniConf()
  770. if err != nil {
  771. br.Msg = "获取配置失败"
  772. br.ErrMsg = "获取配置失败,系统异常,Err:" + err.Error()
  773. return
  774. }
  775. userView := &models.UserView{
  776. Headimgurl: miniconf["Logo"],
  777. RealName: user.RealName,
  778. Phone: user.Phone,
  779. AreaCode: user.AreaCode,
  780. SellerDepartmentName: department.SysDepartmentName,
  781. HasPermission: hasPermission,
  782. Email: user.Email,
  783. Componey: user.Company,
  784. IsRegistered: user.IsRegistered,
  785. Status: user.Status,
  786. ValidEndTime: user.ValidEndTime.Format(utils.FormatDate),
  787. }
  788. // 固定电话
  789. userView.SellerDepartmentPhone = append(userView.SellerDepartmentPhone,
  790. []string{"021-63123065", "021-63123067"}...)
  791. if user.ValidEndTime.IsZero() {
  792. userView.ValidEndTime = ""
  793. }
  794. br.Data = userView
  795. br.Msg = "查询成功"
  796. br.Success = true
  797. br.Ret = 200
  798. }
  799. // PermissionList
  800. // @Title 用户个人权限列表
  801. // @Description 用户个人权限列表
  802. // @Param request body models.LoginReq true "type json string"
  803. // @Success 200 {object} []models.ChartPermissionTreeView
  804. // @router /permission/list [get]
  805. func (this *UserAuthController) PermissionList() {
  806. br := new(models.BaseResponse).Init()
  807. defer func() {
  808. this.Data["json"] = br
  809. this.ServeJSON()
  810. }()
  811. user := this.User
  812. permissionIds, err := models.GetUserChartPermissionIdByUserId(user.UserId)
  813. if err != nil {
  814. br.Msg = "查询用户权限失败"
  815. br.ErrMsg = "查询用户权限失败,系统异常,Err:" + err.Error()
  816. return
  817. }
  818. userPermissionMap := make(map[int]struct{})
  819. for _, v := range permissionIds {
  820. userPermissionMap[v] = struct{}{}
  821. }
  822. // 查询公有权限
  823. var publicView []*models.ChartPermissionTreeView
  824. publicResp, err := services.GetPublicChartPermissionList()
  825. if err != nil {
  826. br.Msg = "查询公有权限失败"
  827. br.ErrMsg = "查询私有权限失败,系统异常,Err:" + err.Error()
  828. }
  829. if publicResp.Ret != 200 {
  830. br.Msg = publicResp.Msg
  831. br.ErrMsg = publicResp.ErrMsg
  832. return
  833. }
  834. publicView = publicResp.Data
  835. // 如果是正式用户,则查询私有权限
  836. var privateView []*models.ChartPermissionTreeView
  837. if user.Status == utils.UserStatusFormal {
  838. privateResp, err := services.GetPrivateChartPermissionList()
  839. if err != nil {
  840. br.Msg = "查询私有权限失败"
  841. br.ErrMsg = "查询私有权限失败,系统异常,Err:" + err.Error()
  842. }
  843. if privateResp.Ret != 200 {
  844. br.Msg = privateResp.Msg
  845. br.ErrMsg = privateResp.ErrMsg
  846. return
  847. }
  848. for _, v := range privateResp.Data {
  849. IsAdd := false
  850. curPermissionView := &models.ChartPermissionTreeView{
  851. ChartPermissionId: v.ChartPermissionId,
  852. PermissionName: v.PermissionName,
  853. IsPublic: v.IsPublic,
  854. Sort: v.Sort,
  855. Child: make([]*models.ChartPermissionTreeView, 0),
  856. }
  857. for _, vv := range v.Child {
  858. if _, ok := userPermissionMap[vv.ChartPermissionId]; ok {
  859. curPermissionView.Child = append(curPermissionView.Child, vv)
  860. IsAdd = true
  861. }
  862. }
  863. if IsAdd {
  864. privateView = append(privateView, curPermissionView)
  865. }
  866. }
  867. }
  868. privateAloneView := make([]*models.ChartPermissionTreeView, 0)
  869. for _, vi := range privateView {
  870. isHas := false
  871. for _, vb := range publicView {
  872. if vi.ChartPermissionId == vb.ChartPermissionId {
  873. isHas = true
  874. vb.Child = append(vb.Child, vi.Child...)
  875. break
  876. }
  877. }
  878. if !isHas {
  879. privateAloneView = append(privateAloneView, vi)
  880. }
  881. }
  882. publicView = append(publicView, privateAloneView...)
  883. for _, vi := range publicView {
  884. vi.ChartPermissionType = utils.PermissionTypeEta
  885. for _, vi := range vi.Child {
  886. vi.ChartPermissionType = utils.PermissionTypeEta
  887. }
  888. }
  889. br.Data = publicView
  890. br.Msg = "查询成功"
  891. br.Success = true
  892. br.Ret = 200
  893. }
  894. // PermissionList
  895. // @Title 用户已购权限列表
  896. // @Description 用户已购权限列表
  897. // @Param request body models.LoginReq true "type json string"
  898. // @Success 200 {object} []models.ChartPermissionTreeView
  899. // @router /purchased/list [get]
  900. func (this *UserAuthController) PurchasedPermission() {
  901. br := new(models.BaseResponse).Init()
  902. defer func() {
  903. this.Data["json"] = br
  904. this.ServeJSON()
  905. }()
  906. user := this.User
  907. permissionIds, err := models.GetUserChartPermissionIdByUserId(user.UserId)
  908. if err != nil {
  909. br.Msg = "查询用户权限失败"
  910. br.ErrMsg = "查询用户权限失败,系统异常,Err:" + err.Error()
  911. return
  912. }
  913. permissionMap := make(map[int]struct{})
  914. for _, v := range permissionIds {
  915. permissionMap[v] = struct{}{}
  916. }
  917. // 查询私有权限
  918. privateResp, err := services.GetPrivateChartPermissionList()
  919. if err != nil {
  920. br.Msg = "查询私有权限失败"
  921. br.ErrMsg = "查询私有权限失败,系统异常,Err:" + err.Error()
  922. }
  923. if privateResp.Ret != 200 {
  924. br.Msg = privateResp.Msg
  925. br.ErrMsg = privateResp.ErrMsg
  926. return
  927. }
  928. var privateView []*models.ChartPermissionTreeView
  929. for _, v := range privateResp.Data {
  930. IsAdd := false
  931. curPermissionView := &models.ChartPermissionTreeView{
  932. ChartPermissionId: v.ChartPermissionId,
  933. PermissionName: v.PermissionName,
  934. IsPublic: v.IsPublic,
  935. Sort: v.Sort,
  936. Child: make([]*models.ChartPermissionTreeView, 0),
  937. ChartPermissionType: utils.PermissionTypeEta,
  938. }
  939. for _, vv := range v.Child {
  940. if _, ok := permissionMap[vv.ChartPermissionId]; ok && vv.ParentId != 0 {
  941. vv.ChartPermissionType = utils.PermissionTypeEta
  942. curPermissionView.Child = append(curPermissionView.Child, vv)
  943. IsAdd = true
  944. }
  945. }
  946. if IsAdd {
  947. privateView = append(privateView, curPermissionView)
  948. }
  949. }
  950. for _, vi := range privateView {
  951. vi.Child = append(vi.Child, &models.ChartPermissionTreeView{
  952. ChartPermissionId: -1,
  953. PermissionName: utils.MINI_CUSTOM_PERMISSION_NAME,
  954. IsPublic: 0,
  955. Sort: 0,
  956. ChartPermissionType: utils.ReportTypePdf,
  957. })
  958. }
  959. br.Data = privateView
  960. br.Msg = "查询成功"
  961. br.Success = true
  962. br.Ret = 200
  963. }
  964. // UserInfoSave
  965. // @Title 用户信息补充
  966. // @Description 用户信息补充
  967. // @Param request body request.UserEidtReq true "type json string"
  968. // @Success Ret=200 保存成功
  969. // @router /info/save [post]
  970. func (this *UserAuthController) UserInfoSave() {
  971. br := new(models.BaseResponse).Init()
  972. defer func() {
  973. this.Data["json"] = br
  974. this.ServeJSON()
  975. }()
  976. var req request.UserInfoSaveReq
  977. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  978. if err != nil {
  979. br.Msg = "参数解析异常!"
  980. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  981. return
  982. }
  983. user := this.User
  984. if user == nil {
  985. br.Msg = "用户不存在"
  986. return
  987. }
  988. if user.SellerDepartmentId > 0 {
  989. req.SysDepartmentId = user.SellerDepartmentId
  990. }
  991. if user.RealName != "" {
  992. req.RealName = user.RealName
  993. }
  994. msg, err := services.SaveUserInfo(user.UserId, req.SysDepartmentId, req.RealName)
  995. if err != nil {
  996. if msg == "" {
  997. br.Msg = "保存失败"
  998. } else {
  999. br.Msg = msg
  1000. }
  1001. br.ErrMsg = "保存失败,系统异常,Err:" + err.Error()
  1002. return
  1003. }
  1004. if msg != "" {
  1005. br.Msg = msg
  1006. return
  1007. }
  1008. br.Msg = "用户信息保存成功"
  1009. br.Success = true
  1010. br.Ret = 200
  1011. }
  1012. // ApplyPermission
  1013. // @Title 用户申请认证
  1014. // @Description 用户申请认证
  1015. // @Success Ret=200 获取成功
  1016. // @router /apply/permission [post]
  1017. func (this *UserAuthController) ApplyPermission() {
  1018. br := new(models.BaseResponse).Init()
  1019. defer func() {
  1020. this.Data["json"] = br
  1021. this.ServeJSON()
  1022. }()
  1023. user := this.User
  1024. if user.ApplyStatus == 1 {
  1025. br.Ret = 200
  1026. br.Msg = "您已提交过认证申请,请等待!"
  1027. br.Success = true
  1028. return
  1029. }
  1030. user.ApplyStatus = 1
  1031. user.ApplyTime = time.Now()
  1032. err := user.Update([]string{"apply_status", "apply_time"})
  1033. if err != nil {
  1034. br.Msg = "提交认证申请失败"
  1035. br.ErrMsg = "提交认证申请失败,系统异常,Err:" + err.Error()
  1036. return
  1037. }
  1038. br.Msg = "认证申请,需要1~3个工作日"
  1039. br.Success = true
  1040. br.Ret = 200
  1041. }
  1042. // DepartmentList
  1043. // @Title 营业部门列表
  1044. // @Description 营业部门列表
  1045. // @Success 200 {object} []*models.SysDepartment
  1046. // @router /department/list [get]
  1047. func (this *UserController) DepartmentList() {
  1048. br := new(models.BaseResponse).Init()
  1049. defer func() {
  1050. this.Data["json"] = br
  1051. this.ServeJSON()
  1052. }()
  1053. department, err := models.GetSysDepartmentByName("营业部")
  1054. if err != nil {
  1055. if err.Error() == utils.ErrNoRow() {
  1056. br.Msg = "营业部不存在"
  1057. return
  1058. }
  1059. br.Msg = "获取营业部失败"
  1060. br.ErrMsg = "获取营业部失败,系统异常,Err:" + err.Error()
  1061. return
  1062. }
  1063. depList, err := models.GetChildSysDepartmentByParentId(department.SysDepartmentId)
  1064. if err != nil {
  1065. br.Msg = "获取营业部门失败"
  1066. br.ErrMsg = "获取子部门失败,系统异常,Err:" + err.Error()
  1067. return
  1068. }
  1069. br.Msg = "获取成功"
  1070. br.Data = depList
  1071. br.Success = true
  1072. br.Ret = 200
  1073. }