123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423 |
- package report
- import (
- "encoding/json"
- logger "eta/eta_mini_ht_api/common/component/log"
- "eta/eta_mini_ht_api/common/exception"
- "eta/eta_mini_ht_api/common/utils/page"
- "eta/eta_mini_ht_api/controllers"
- reportDomian "eta/eta_mini_ht_api/domian/report"
- "eta/eta_mini_ht_api/service/report"
- "eta/eta_mini_ht_api/service/user"
- "sync"
- )
- type ReportController struct {
- controllers.ListController
- }
- // Search 搜索报告列表
- // @Description 搜索报告列表
- // @Success 200 {object}
- // @router /search [get]
- func (r *ReportController) Search(key string) {
- controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
- result = r.InitWrapData("分页搜索报告列表失败")
- if key == "" {
- err = exception.New(exception.SearchKeyEmptyError)
- r.FailedResult("分页搜索报告列表失败", result)
- return
- }
- detailType := r.Data["detailType"].(string)
- userInfo := r.Data["user"].(user.User)
- pageRes := page.Page{
- Current: r.PageInfo.Current,
- PageSize: r.PageInfo.PageSize,
- }
- //获取当前可以被搜索的报告原始ID
- //先要限制查询的id范围
- var reportIds []int
- var mappingRiskLevel string
- var userRiskStatus string
- pageRes.Total, pageRes.LatestId, reportIds, _, mappingRiskLevel, userRiskStatus, err = report.RangeSearch(key, isLogin(detailType), userInfo.Id)
- if err != nil {
- logger.Error("获取报告原始ID列表失败:%v", err)
- r.FailedResult("分页搜索报告列表失败", result)
- return
- }
- if len(reportIds) == 0 {
- reports := new(page.PageResult)
- reports.Data = []reportDomian.ReportDTO{}
- reports.Page = pageRes
- logger.Info("没有可以查询的报告列表")
- r.SuccessResult("分页搜索报告列表成功", reports, result)
- return
- }
- if r.PageInfo.LatestId == 0 {
- //pageRes.Total, pageRes.LatestId = report.SearchMaxReportId(key)
- r.PageInfo.LatestId = pageRes.LatestId
- r.PageInfo.Total = pageRes.Total
- } else {
- pageRes.LatestId = r.PageInfo.LatestId
- pageRes.Total = r.PageInfo.Total
- }
- pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
- list := make([]reportDomian.ReportDTO, 0)
- if pageRes.LatestId > 0 {
- list, err = report.SearchReportList(key, reportIds, r.PageInfo, isLogin(detailType), userInfo.Id, mappingRiskLevel, userRiskStatus)
- if err != nil {
- r.FailedResult("分页搜索报告列表失败", result)
- return
- }
- }
- reports := new(page.PageResult)
- reports.Data = list
- reports.Page = pageRes
- r.SuccessResult("分页搜索报告列表成功", reports, result)
- return
- })
- }
- // List 获取报告列表
- // @Description 获取报告列表
- // @Success 200 {object}
- // @router /list [get]
- func (r *ReportController) List(permissionIds string) {
- controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
- result = r.InitWrapData("分页查询报告列表失败")
- pageRes := page.Page{
- Current: r.PageInfo.Current,
- PageSize: r.PageInfo.PageSize,
- }
- detailType := r.Data["detailType"].(string)
- userInfo := r.Data["user"].(user.User)
- permissionIdList, err := r.TransPermissionIds(permissionIds)
- if err != nil {
- logger.Error("品种列表解析错误:%v", err)
- r.FailedResult("分页查询报告列表失败", result)
- err = exception.New(exception.QueryReportPageFailed)
- return
- }
- var reportOrgIds map[string][]int
- var discardIds []int
- var mappingRiskLevel string
- var UserRiskStatus string
- pageRes.Total, pageRes.LatestId, reportOrgIds, discardIds, mappingRiskLevel, UserRiskStatus = report.GetTotalPageCountByPermissionIds(permissionIdList, isLogin(detailType), userInfo.Id)
- if pageRes.Total == 0 {
- reports := new(page.PageResult)
- reports.Data = []reportDomian.ReportDTO{}
- reports.Page = pageRes
- r.SuccessResult("查询报告列表成功", reports, result)
- }
- if r.PageInfo.LatestId == 0 {
- r.PageInfo.LatestId = pageRes.LatestId
- } else {
- pageRes.LatestId = r.PageInfo.LatestId
- pageRes.Total = r.PageInfo.Total
- }
- pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
- if len(reportOrgIds) == 0 {
- logger.Info("没有搜索到相关品种的报告,返回空列表")
- reports := new(page.PageResult)
- reports.Data = []reportDomian.ReportDTO{}
- reports.Page = pageRes
- r.SuccessResult("查询报告列表成功", reports, result)
- return
- }
- list, err := report.GetReportPage(r.PageInfo, reportOrgIds, discardIds, isLogin(detailType), userInfo.Id, mappingRiskLevel, UserRiskStatus)
- if err != nil {
- r.FailedResult("分页查询报告列表失败", result)
- return
- }
- reports := new(page.PageResult)
- reports.Data = list
- reports.Page = pageRes
- r.SuccessResult("查询报告列表成功", reports, result)
- return
- })
- }
- func isLogin(listType string) bool {
- if listType == "logout" {
- logger.Info("当前用户未登录,展示部分详情")
- return false
- }
- if listType == "login" {
- return true
- }
- return false
- }
- // HotRanked @Title 获取本周最热的报告列表
- // @Description 获取本周最热的报告列表
- // @Success 200 {object}
- // @router /hotRankedList [get]
- func (r *ReportController) HotRanked(permissionIds string, limit int) {
- controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
- if limit <= 0 {
- limit = 3
- }
- result = r.InitWrapData("获取本周最热报告列表失败")
- detailType := r.Data["detailType"].(string)
- userInfo := r.Data["user"].(user.User)
- //
- permissionIdsWithRisk, pdRiskLevel, userRiskStatus, err := report.RangePermissionIds(isLogin(detailType), userInfo.Id)
- if err != nil {
- logger.Error("获取带有风险等级的品种列表错误:%v", err)
- r.FailedResult("获取最热报告列表失败", result)
- err = exception.New(exception.GetHotRandListFailed)
- return
- }
- if len(permissionIdsWithRisk) == 0 {
- r.SuccessResult("获取本周最热报告列表成功", []report.HotRankedReport{}, result)
- return
- }
- list, err := report.GetRandedReportByWeeklyHot(50, isLogin(detailType), userInfo.Id, pdRiskLevel, userRiskStatus)
- //二级品种
- permissionIdList, err := r.TransPermissionIds(permissionIds)
- if err != nil {
- logger.Error("品种列表解析错误:%v", err)
- r.FailedResult("获取最热报告列表失败", result)
- err = exception.New(exception.GetHotRandListFailed)
- return
- }
- reportFilterMap := make(map[int]int)
- filterList := make([]report.HotRankedReport, 0)
- var filterPermissionIds []int
- if len(permissionIdList) > 0 {
- //通过有权限的品种过滤查询品种
- for _, permissionId := range permissionIdList {
- for _, permissionIdWIthRisk := range permissionIdsWithRisk {
- if permissionId == permissionIdWIthRisk {
- filterPermissionIds = append(filterPermissionIds, permissionId)
- }
- }
- }
- //for _, item := range list {
- // for _, permissionId := range filterPermissionIds {
- // if _, ok := item.SecondPermissions[permissionId]; ok {
- // filterList = append(filterList, item)
- // }
- // }
- //}
- } else {
- filterPermissionIds = permissionIdsWithRisk
- }
- for _, item := range list {
- for _, permissionId := range filterPermissionIds {
- if _, ok := item.SecondPermissions[permissionId]; ok {
- if reportFilterMap[item.Id] == 0 {
- reportFilterMap[item.Id] = 1
- filterList = append(filterList, item)
- }
- }
- }
- }
- if len(filterList) > limit {
- filterList = filterList[0:limit]
- }
- if err != nil {
- r.FailedResult("获取本周最热报告列表成功", result)
- return
- }
- r.SuccessResult("获取本周最热报告列表成功", filterList, result)
- return
- })
- }
- // PublishRanked @Title 获取最新发布的报告列表
- // @Description 获取最新发布的报告列表
- // @Success 200 {object}
- // @router /publishRankedList [get]
- func (r *ReportController) PublishRanked(permissionIds string, limit int, week bool) {
- controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
- result = r.InitWrapData("获取最新发布报告列表失败")
- if limit <= 0 {
- limit = 3
- }
- detailType := r.Data["detailType"].(string)
- userInfo := r.Data["user"].(user.User)
- //
- permissionIdsWithRisk, pdRiskLevel, userRiskStatus, err := report.RangePermissionIds(isLogin(detailType), userInfo.Id)
- if err != nil {
- logger.Error("获取带有风险等级的品种列表错误:%v", err)
- r.FailedResult("获取最新发布报告列表失败", result)
- err = exception.New(exception.GetPublishedRandListFailed)
- return
- }
- if len(permissionIdsWithRisk) == 0 {
- r.SuccessResult("获取最新发布报告列表成功", []report.HotRankedReport{}, result)
- return
- }
- //获取最新的报告列表
- list, err := report.GetRandedReportByPublishTimeWeekly(50, week, isLogin(detailType), userInfo.Id, pdRiskLevel, userRiskStatus)
- if err != nil {
- r.FailedResult("获取最新发布报告列表失败", result)
- return
- }
- //二级品种
- permissionIdList, err := r.TransPermissionIds(permissionIds)
- if err != nil {
- logger.Error("品种列表解析错误:%v", err)
- r.FailedResult("获取最新发布报告列表失败", result)
- err = exception.New(exception.GetPublishedRandListFailed)
- return
- }
- reportFilterMap := make(map[int]int)
- filterList := make([]report.PublishRankedReport, 0)
- var filterPermissionIds []int
- if len(permissionIdList) > 0 {
- //通过有权限的品种过滤查询品种
- for _, permissionId := range permissionIdList {
- for _, permissionIdWIthRisk := range permissionIdsWithRisk {
- if permissionId == permissionIdWIthRisk {
- filterPermissionIds = append(filterPermissionIds, permissionId)
- }
- }
- }
- //for _, item := range list {
- // for _, permissionId := range filterPermissionIds {
- // if _, ok := item.SecondPermissions[permissionId]; ok {
- // filterList = append(filterList, item)
- // }
- // }
- //}
- } else {
- filterPermissionIds = permissionIdsWithRisk
- }
- for _, item := range list {
- for _, permissionId := range filterPermissionIds {
- if _, ok := item.SecondPermissions[permissionId]; ok {
- if reportFilterMap[item.Id] == 0 {
- reportFilterMap[item.Id] = 1
- filterList = append(filterList, item)
- }
- }
- }
- }
- if len(filterList) > limit {
- filterList = filterList[0:limit]
- }
- r.SuccessResult("获取最新发布报告列表成功", filterList, result)
- return
- })
- }
- // GetPermissions @Title 获取品种列表
- // @Description获取品种列表
- // @Success 200 {object}
- // @router /permissionList [get]
- func (r *ReportController) GetPermissions() {
- controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
- result = r.InitWrapData("获取品种列表失败")
- //获取最新的报告列表
- json, err := report.GetPermissionList()
- if err != nil {
- r.FailedResult("获取品种列表失败", result)
- return
- }
- r.SuccessResult("获取最新发布报告列表成功", json.Children, result)
- return
- })
- }
- type RecordCountReq struct {
- ReportId int `json:"reportId"`
- TraceId string `json:"traceId"`
- IpAddress string `json:"ipAddress"`
- Location string `json:"location"`
- Referer string `json:"referer"`
- Additional interface{} `json:"additional"`
- }
- // Count 获取品种列表
- // @Description 获取最新发布的报告列表
- // @Success 200 {object}
- // @router /count [post]
- func (r *ReportController) Count() {
- controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
- result = r.InitWrapData("研报点击记录失败")
- var userInfo user.User
- userInfo = r.Data["user"].(user.User)
- recordReq := new(RecordCountReq)
- r.GetPostParams(recordReq)
- if recordReq.ReportId <= 0 {
- logger.Error("研报点击记录失败,reportId不能为空")
- r.FailedResult("研报点击记录失败", result)
- err = exception.New(exception.ReportRecordClickCountFailed)
- return
- }
- record := convertToRecordCount(recordReq)
- record.UserId = userInfo.Id
- record.Mobile = userInfo.Mobile
- traceId, err := report.CountReport(record)
- if err != nil {
- r.FailedResult("研报点击记录失败", result)
- err = exception.New(exception.ReportRecordClickCountFailed)
- return
- }
- countResp := struct {
- TraceId string `json:"traceId"`
- }{TraceId: traceId}
- r.SuccessResult("研报点击记录成功", countResp, result)
- return
- })
- }
- // GetReport 获取研报详情
- // @Description 获取研报详情
- // @Success 200 {object}
- // @router /report [get]
- func (r *ReportController) GetReport(reportId int, productId int) {
- controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
- result = r.InitWrapData("获取研报详情失败")
- userInfo := r.Data["user"].(user.User)
- detailType := r.Data["detailType"].(string)
- if !isLogin(detailType) {
- logger.Info("当前用户未登录,展示部分详情")
- }
- var subscribeStatus string
- var wg sync.WaitGroup
- if productId > 0 {
- wg.Add(1)
- go func() {
- defer wg.Done()
- subscribeStatus = user.GetUserScribeStatus(productId, userInfo.Id)
- }()
- } else {
- subscribeStatus = user.UnSubscribe
- }
- wg.Add(1)
- var isCollect bool
- go func() {
- defer wg.Done()
- isCollect, err = user.GetReportBookMarked(reportId, userInfo.Id)
- if err != nil {
- logger.Error("获取研报收藏状态失败:%v", err)
- }
- }()
- wg.Wait()
- reportDetail, err := report.GetReportById(reportId, isLogin(detailType), userInfo.Id)
- if err != nil {
- r.FailedResult("获取研报详情失败", result)
- err = exception.New(exception.GetReportFailed)
- return
- }
- reportDetail.SubscribeStatus = subscribeStatus
- reportDetail.IsCollect = isCollect
- r.SuccessResult("获取研报详情成功", reportDetail, result)
- return
- })
- }
- func convertToRecordCount(req *RecordCountReq) report.RecordCount {
- additionStr, _ := json.Marshal(req.Additional)
- return report.RecordCount{
- ReportId: req.ReportId,
- TraceId: req.TraceId,
- IpAddress: req.IpAddress,
- Location: req.Location,
- Referer: req.Referer,
- Additional: string(additionStr),
- }
- }
|