user.go 32 KB

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