kobe6258 7 месяцев назад
Родитель
Сommit
0c3b0a5ef6

+ 8 - 2
common/exception/exc_enums.go

@@ -56,6 +56,9 @@ const (
 	ReportErrCode int = iota + 50000 // iota 自动递增,从 1 开始
 	GetPublishedRandListFailed
 	GetPermissionListFailed
+	ReportRecordClickCountFailed
+	GetHotRandListFailed
+	QueryReportPageFailed
 )
 
 // ErrorMap 用于存储错误码和错误信息的映射
@@ -83,8 +86,11 @@ var ErrorMap = map[int]string{
 	WeChatCodeEmpty:      "微信获取用户信息,code不能为空",
 	WeChatIllegalRequest: "不合法的微信请求",
 	//研报
-	GetPublishedRandListFailed: "获取已发布研报列表失败",
-	GetPermissionListFailed:    "获取品种列表失败",
+	GetPublishedRandListFailed:   "获取已发布研报列表失败",
+	GetPermissionListFailed:      "获取品种列表失败",
+	ReportRecordClickCountFailed: "添加点击访问次数失败",
+	GetHotRandListFailed:         "获取热门研报列表失败",
+	QueryReportPageFailed:        "分页查询报告列表失败",
 }
 
 func Equals(code int, message string) bool {

+ 13 - 0
common/utils/date/date_utils.go

@@ -0,0 +1,13 @@
+package date
+
+import "time"
+
+// GetBeginOfTheWeek 计算给定日期所在周的周一日期
+func GetBeginOfTheWeek(t time.Time, beginFrom time.Weekday) time.Time {
+	weekday := t.Weekday()
+	daysToSubtract := int(weekday - beginFrom)
+	if daysToSubtract < 0 {
+		daysToSubtract += 7
+	}
+	return t.AddDate(0, 0, -daysToSubtract)
+}

+ 16 - 0
common/utils/page/page_utils.go

@@ -1,5 +1,21 @@
 package page
 
+type PageInfo struct {
+	LatestId int64
+	Current  int
+	PageSize int
+}
+type PageResult struct {
+	Page Page
+	Data interface{}
+}
+type Page struct {
+	LatestId int64
+	Current  int
+	PageSize int
+	Total    int64
+}
+
 func StartIndex(page, pagesize int) int {
 	if page > 1 {
 		return (page - 1) * pagesize

+ 3 - 1
common/utils/string/string_utils.go

@@ -1,6 +1,8 @@
 package string
 
-import "strings"
+import (
+	"strings"
+)
 
 func IsEmptyOrNil(s string) bool {
 	return &s == nil || len(s) == 0

+ 2 - 2
controllers/base_controller.go

@@ -18,8 +18,8 @@ type BaseResponse struct {
 	Msg     string
 	ErrMsg  string
 	ErrCode int
-	Data    interface{}
-	Success bool `description:"true 执行成功,false 执行失败"`
+	Data    interface{} `json:"data,omitempty"`
+	Success bool        `description:"true 执行成功,false 执行失败"`
 }
 
 type BaseController struct {

+ 13 - 11
controllers/list_contoller.go

@@ -1,29 +1,31 @@
 package controllers
 
-import "eta_mini_ht_api/common/contants"
+import (
+	"eta_mini_ht_api/common/contants"
+	"eta_mini_ht_api/common/utils/page"
+)
 
 type ListController struct {
 	BaseController
-	PageInfo PageInfo
+	PageInfo page.PageInfo
 }
 
 func (l *ListController) Prepare() {
-	pageSize, _ := l.GetInt("pageSize")
-	currentIndex, _ := l.GetInt("currentIndex")
+	pageSize, _ := l.GetInt("page_size")
+	currentIndex, _ := l.GetInt("current_index")
+	LatestId, _ := l.GetInt64("latest_id")
 	if pageSize <= 0 {
 		pageSize = contants.PageSizeDefault
 	}
 	if currentIndex <= 0 {
 		currentIndex = 1
 	}
-	l.PageInfo = PageInfo{
+	if LatestId < 0 {
+		LatestId = 0
+	}
+	l.PageInfo = page.PageInfo{
+		LatestId: LatestId,
 		Current:  currentIndex,
 		PageSize: pageSize,
 	}
 }
-
-type PageInfo struct {
-	id       int
-	Current  int
-	PageSize int
-}

+ 93 - 6
controllers/report/report_controller.go

@@ -1,7 +1,11 @@
 package report
 
 import (
+	"encoding/json"
+	"eta_mini_ht_api/common/exception"
+	"eta_mini_ht_api/common/utils/page"
 	"eta_mini_ht_api/controllers"
+	"eta_mini_ht_api/domian/user"
 	"eta_mini_ht_api/service/report"
 	"fmt"
 )
@@ -10,11 +14,11 @@ type ReportController struct {
 	controllers.ListController
 }
 
-// @Title 获取报告列表
-// @Description 获取报告列表
+// Search 搜索报告列表
+// @Description 搜索报告列表
 // @Success 200 {object}
-// @router /list [get]
-func (r *ReportController) List(key string) {
+// @router /search [get]
+func (r *ReportController) Search(key string) {
 	controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
 		fmt.Println(key)
 		result = r.InitWrapData("查询报告列表失败")
@@ -23,14 +27,54 @@ func (r *ReportController) List(key string) {
 	})
 }
 
+// List 获取报告列表
+// @Description 获取报告列表
+// @Success 200 {object}
+// @router /list [get]
+func (r *ReportController) List() {
+	controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
+		result = r.InitWrapData("分页查询报告列表失败")
+		pageReq := page.Page{
+			Current:  r.PageInfo.Current,
+			PageSize: r.PageInfo.PageSize,
+		}
+		if r.PageInfo.LatestId == 0 {
+			pageReq.LatestId = report.GetTotalPageCount()
+			r.PageInfo.LatestId = pageReq.LatestId
+		} else {
+			pageReq.LatestId = r.PageInfo.LatestId
+		}
+		pageReq.Total = pageReq.LatestId
+		list, err := report.GetReportPage(r.PageInfo)
+		if err != nil {
+			r.FailedResult("分页查询报告列表失败", result)
+			return
+		}
+		reports := new(page.PageResult)
+		reports.Data = list
+		reports.Page = pageReq
+		r.SuccessResult("查询报告列表成功", reports, result)
+		return
+	})
+}
+
 // HotRanked @Title 获取本周最热的报告列表
 // @Description 获取本周最热的报告列表
 // @Success 200 {object}
 // @router /hotRankedList [get]
 func (r *ReportController) HotRanked() {
 	controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
-		result = r.InitWrapData("查询报告列表失败")
-		r.SuccessResult("查询报告列表成功", r.PageInfo, result)
+		limit, _ := r.GetInt("size")
+		if limit <= 0 {
+			limit = 3
+		}
+		result = r.InitWrapData("获取本周最热报告列表失败")
+		list, err := report.GetRandedReportByWeeklyHot(limit)
+		if err != nil {
+			r.FailedResult("获取本周最热报告列表成功", result)
+			return
+		}
+		r.SuccessResult("获取本周最热报告列表成功", list, result)
 		return
 	})
 }
@@ -71,3 +115,46 @@ func (r *ReportController) GetPermissions() {
 		return
 	})
 }
+
+type RecordCountReq struct {
+	ReportId   int         `json:"report_id"`
+	IpAddress  string      `json:"ip_address"`
+	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.UserDTO
+		userInfo = r.Data["user"].(user.UserDTO)
+		recordReq := new(RecordCountReq)
+		r.GetPostParams(recordReq)
+		record := convertToRecordCount(recordReq)
+		record.UserId = userInfo.Id
+		record.Mobile = userInfo.Mobile
+		err = report.CountReport(record)
+		if err != nil {
+			err = exception.New(exception.ReportRecordClickCountFailed)
+			return
+		}
+		r.SuccessResult("研报点击记录成功", nil, result)
+		return
+	})
+}
+
+func convertToRecordCount(req *RecordCountReq) report.RecordCount {
+	additionStr, _ := json.Marshal(req.Additional)
+	return report.RecordCount{
+		ReportId:   req.ReportId,
+		IpAddress:  req.IpAddress,
+		Location:   req.Location,
+		Referer:    req.Referer,
+		Additional: string(additionStr),
+	}
+}

+ 38 - 0
domian/report/permission_service.go

@@ -0,0 +1,38 @@
+package report
+
+import (
+	logger "eta_mini_ht_api/common/component/log"
+	etaDao "eta_mini_ht_api/models/eta"
+)
+
+func GetPermissionList() (dtoList []PermissionDTO, err error) {
+	list, err := etaDao.GetChartPermissionList()
+	if err != nil {
+		logger.Error("获取研报列表失败")
+		return
+	}
+	dtoList = make([]PermissionDTO, 0)
+	for _, node := range list {
+		dto := convertPermissionDTO(node)
+		dtoList = append(dtoList, dto)
+	}
+	return
+}
+
+func GetReportPermissionsById(id int, source string) (permissionIds []PermissionDTO) {
+	switch source {
+	case SourceETA:
+		return getETAReportFirstPermissions(id)
+	case SourceHT:
+		return []PermissionDTO{}
+	}
+	return
+}
+
+func convertPermissionDTO(node etaDao.ChartPermission) PermissionDTO {
+	return PermissionDTO{
+		ID:       node.ChartPermissionID,
+		Name:     node.PermissionName,
+		ParentID: node.ParentID,
+	}
+}

+ 42 - 34
domian/report/report_service.go

@@ -3,11 +3,13 @@ package report
 import (
 	"eta_mini_ht_api/common/component/es"
 	logger "eta_mini_ht_api/common/component/log"
+	"eta_mini_ht_api/common/utils/page"
 	"eta_mini_ht_api/models"
 	"eta_mini_ht_api/models/eta"
 	etaDao "eta_mini_ht_api/models/eta"
 	reportDao "eta_mini_ht_api/models/report"
 	"strconv"
+	"time"
 )
 
 const (
@@ -15,6 +17,9 @@ const (
 
 	SourceETA = "ETA"
 	SourceHT  = "HT"
+
+	DESC models.Order = "desc"
+	ASC  models.Order = "asc"
 )
 
 func elastic() *es.ESClient {
@@ -39,7 +44,7 @@ type ReportDTO struct {
 	Source          string      `json:"source"`
 	Abstract        string      `json:"abstract"`
 	PublishedTime   string      `json:"published_time"`
-	PermissionNames interface{} `json:"permissionNames"`
+	PermissionNames interface{} `json:"permissionNames,omitempty"`
 }
 
 type PermissionDTO struct {
@@ -48,30 +53,30 @@ type PermissionDTO struct {
 	ParentID int
 }
 
-func GetPermissionList() (dtoList []PermissionDTO, err error) {
-	list, err := etaDao.GetChartPermissionList()
-	if err != nil {
-		logger.Error("获取研报列表失败")
-		return
-	}
-	dtoList = make([]PermissionDTO, 0)
-	for _, node := range list {
-		dto := convertPermissionDTO(node)
-		dtoList = append(dtoList, dto)
-	}
-	return
+type RecordCountDTO struct {
+	UserId     int
+	Mobile     string
+	ReportId   int
+	IpAddress  string
+	Location   string
+	Referer    string
+	Additional string
 }
 
-func GetReportPermissionsById(id int, source string) (permissionIds []PermissionDTO) {
-	switch source {
-	case SourceETA:
-		return getETAReportFirstPermissions(id)
-	case SourceHT:
-		return []PermissionDTO{}
+func GetTotalPageCount() (total int64) {
+	return reportDao.GetTotalPageCount()
+}
+func GetReportPage(pageInfo page.PageInfo) (list []ReportDTO, err error) {
+	offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
+	reports, err := reportDao.GetReportPage(pageInfo.LatestId, pageInfo.PageSize, offset)
+	if err == nil && reports != nil {
+		for _, report := range reports {
+			dto := convertReportDTO(report)
+			list = append(list, dto)
+		}
 	}
 	return
 }
-
 func getETAReportFirstPermissions(id int) (permissionDTOs []PermissionDTO) {
 	classifyId, err := etaDao.GetReportClassifyById(id)
 	if err != nil || classifyId == 0 {
@@ -121,8 +126,8 @@ func SyncETAReportList(list []eta.ETAReport) (err error) {
 	return
 }
 
-func GetListByConditionDesc(column string, limit int) (dtoList []ReportDTO, err error) {
-	reports, err := reportDao.GetListByCondition(column, limit, models.Desc)
+func GetListOrderByCondition(column string, limit int, order models.Order) (dtoList []ReportDTO, err error) {
+	reports, err := reportDao.GetListOrderByCondition(column, limit, order)
 	if err != nil {
 		logger.Error("获取研报失败:%v", err)
 		return
@@ -133,14 +138,20 @@ func GetListByConditionDesc(column string, limit int) (dtoList []ReportDTO, err
 	}
 	return
 }
-func GetListByConditionAsc(column string, limit int) (dtoList []ReportDTO, err error) {
-	reports, err := reportDao.GetListByCondition(column, limit, models.Asc)
+
+func GetListByCondition[T any](column string, ids []T) (dtoList []ReportDTO, err error) {
+	var values []interface{}
+	for _, id := range ids {
+		values = append(values, id)
+	}
+	reports, err := reportDao.GetListByCondition(column, ids)
 	if err != nil {
 		logger.Error("获取研报失败:%v", err)
 		return
 	}
 	for _, report := range reports {
-		dtoList = append(dtoList, convertReportDTO(report))
+		dto := convertReportDTO(report)
+		dtoList = append(dtoList, dto)
 	}
 	return
 }
@@ -167,8 +178,8 @@ func convertEsReport(report reportDao.Report) ESReport {
 	}
 }
 
-func convertReportDTO(report reportDao.Report) ReportDTO {
-	return ReportDTO{
+func convertReportDTO(report reportDao.Report) (reportDTO ReportDTO) {
+	reportDTO = ReportDTO{
 		ReportID:      report.ID,
 		Title:         report.Title,
 		OrgId:         report.OrgID,
@@ -177,12 +188,9 @@ func convertReportDTO(report reportDao.Report) ReportDTO {
 		Abstract:      report.Abstract,
 		PublishedTime: report.PublishedTime,
 	}
-}
-
-func convertPermissionDTO(node etaDao.ChartPermission) PermissionDTO {
-	return PermissionDTO{
-		ID:       node.ChartPermissionID,
-		Name:     node.PermissionName,
-		ParentID: node.ParentID,
+	publishDate, err := time.Parse(time.DateTime, reportDTO.PublishedTime)
+	if err == nil {
+		reportDTO.PublishedTime = publishDate.Format(time.DateOnly)
 	}
+	return
 }

+ 54 - 0
domian/report/user_report_click_flow_service.go

@@ -0,0 +1,54 @@
+package report
+
+import (
+	logger "eta_mini_ht_api/common/component/log"
+	reportDao "eta_mini_ht_api/models/report"
+)
+
+func CountReport(record RecordCountDTO) (err error) {
+	dao := convertUserToReportFlow(record)
+	err = reportDao.CountReportClicks(dao)
+	if err != nil {
+		logger.Error("插入用户研报点击记录失败:%v", err)
+		return
+	}
+	return
+}
+
+type HotReportDTO struct {
+	ReportId int `gorm:"column:report_id"`
+	Count    int `gorm:"column:count"`
+}
+
+func GetHotReports(begin string, end string, limit int) (dtoList []HotReportDTO) {
+	counts, err := reportDao.GetTimeDurationReportCountsById(begin, end, limit)
+	if err != nil {
+		logger.Error("获取最热研报数据失败:%v", err)
+		return
+	}
+	if counts == nil {
+		return []HotReportDTO{}
+	}
+	for _, count := range counts {
+		dtoList = append(dtoList, convertUserToHotReportDTO(count))
+	}
+	return
+}
+func convertUserToReportFlow(report RecordCountDTO) reportDao.UserReportClickFlow {
+	return reportDao.UserReportClickFlow{
+		UserID:         report.UserId,
+		Mobile:         report.Mobile,
+		ReportID:       report.ReportId,
+		IPAddress:      report.IpAddress,
+		Location:       report.Location,
+		Referer:        report.Referer,
+		AdditionalData: report.Additional,
+	}
+}
+
+func convertUserToHotReportDTO(flow reportDao.CountClickFlowById) HotReportDTO {
+	return HotReportDTO{
+		ReportId: flow.ReportId,
+		Count:    flow.Count,
+	}
+}

+ 3 - 0
domian/user/user_serivce.go

@@ -8,6 +8,7 @@ import (
 )
 
 type UserDTO struct {
+	Id       int
 	Username string
 	Mobile   string
 	OpenId   string
@@ -16,6 +17,7 @@ type UserDTO struct {
 
 func convertUserDTO(user user.TemplateUser) UserDTO {
 	return UserDTO{
+		Id:       user.Id,
 		Username: user.Username,
 		Mobile:   user.Mobile,
 	}
@@ -53,6 +55,7 @@ func convertToTemplateUser(dto *UserDTO) user.TemplateUser {
 }
 
 func convertToUserDTO(templateUser user.TemplateUser, dto *UserDTO) {
+	dto.Id = templateUser.Id
 	dto.Username = templateUser.Username
 	dto.Mobile = templateUser.Mobile
 	dto.OpenId = templateUser.OpenId

+ 18 - 0
middleware/auth_middleware.go

@@ -8,6 +8,7 @@ import (
 	"eta_mini_ht_api/common/utils/redis"
 	stringUtils "eta_mini_ht_api/common/utils/string"
 	"eta_mini_ht_api/controllers"
+	"eta_mini_ht_api/domian/user"
 	"github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/context"
 	"strings"
@@ -18,6 +19,7 @@ var (
 )
 
 const (
+	ILLEGALUSER   = "用户信息异常"
 	UNAUTHORIZED  = "请重新登录"
 	FORBIDDEN     = "禁止访问"
 	NOTFOUND      = "未找到"
@@ -68,6 +70,15 @@ func AuthMiddleware() web.FilterFunc {
 				_ = ctx.JSONResp(unAuthorized())
 				return
 			}
+			//组装用户信息
+			var userDTO user.UserDTO
+			userDTO, err = user.GetUserByMobile(info.Mobile)
+			if err != nil {
+				logger.Error("获取用户信息失败:%v", err)
+				_ = ctx.JSONResp(illegalUser())
+				return
+			}
+			ctx.Input.SetData("user", userDTO)
 			return
 		}
 		return
@@ -81,6 +92,13 @@ func unAuthorized() controllers.BaseResponse {
 		ErrMsg: exception.GetMsg(exception.Unauthorized),
 	}
 }
+func illegalUser() controllers.BaseResponse {
+	return controllers.BaseResponse{
+		Ret:    401,
+		Msg:    ILLEGALUSER,
+		ErrMsg: exception.GetMsg(exception.Unauthorized),
+	}
+}
 func allowed(path string) bool {
 	for _, p := range publicRoutes {
 		if stringUtils.IsBlank(p) {

+ 43 - 1
models/report/report.go

@@ -1,6 +1,7 @@
 package report
 
 import (
+	"errors"
 	logger "eta_mini_ht_api/common/component/log"
 	"eta_mini_ht_api/models"
 	"fmt"
@@ -65,7 +66,7 @@ func DoSql(sql string, result interface{}, values ...interface{}) (err error) {
 	return
 }
 
-func GetListByCondition(column string, limit int, order models.Order) (reports []Report, err error) {
+func GetListOrderByCondition(column string, limit int, order models.Order) (reports []Report, err error) {
 	db := models.Main()
 	err = db.Select(CommonColumns).Order(fmt.Sprintf("%s %s", column, order)).Limit(limit).Find(&reports).Error
 	if err != nil {
@@ -76,3 +77,44 @@ func GetListByCondition(column string, limit int, order models.Order) (reports [
 	}
 	return
 }
+
+func GetListByCondition[T any](column string, values []T) (reports []Report, err error) {
+	if len(values) == 0 {
+		logger.Error("查询条件的值不能为空")
+		return []Report{}, nil
+	}
+	db := models.Main()
+	err = db.Select(CommonColumns).Where(fmt.Sprintf("%s in ?", column), values).Find(&reports).Error
+	if err != nil {
+		logger.Error("查询报告列表失败:%v", err)
+	}
+	if reports == nil {
+		return []Report{}, nil
+	}
+	return
+}
+func GetTotalPageCount() (total int64) {
+	db := models.Main()
+	err := db.Model(&Report{}).Count(&total).Error
+	if err != nil {
+		logger.Error("统计报告数量失败:%v", err)
+	}
+	return
+}
+func GetReportPage(latestId int64, limit int, offset int) (list []Report, err error) {
+	if latestId < 0 {
+		err = errors.New("非法的id参数")
+		logger.Error("非法的id参数:%d", latestId)
+		return
+	}
+	if limit <= 0 {
+		err = errors.New("非法的limit参数")
+		logger.Error("非法的limit参数:%d", limit)
+	}
+	db := models.Main()
+	err = db.Select(CommonColumns).Where("id<= ?", latestId).Order("published_time desc").Limit(limit).Offset(offset).Find(&list).Error
+	if err != nil {
+		logger.Error("分页查询报告列表失败:%v", err)
+	}
+	return
+}

+ 46 - 0
models/report/user_report_click_flow.go

@@ -0,0 +1,46 @@
+package report
+
+import (
+	"eta_mini_ht_api/models"
+	"gorm.io/gorm"
+	"time"
+)
+
+const (
+	userReportClickFlows = "user_report_click_flows"
+)
+
+// UserReportClickFlow 用户点击研报流水记录
+type UserReportClickFlow struct {
+	ID             int       `gorm:"column:id;primaryKey;autoIncrement:'id'"`
+	UserID         int       `gorm:"column:user_id"` // 用户ID\
+	Mobile         string    `gorm:"column:mobile"`
+	ReportID       int       `gorm:"column:report_id"`       // 研报ID
+	ClickTime      time.Time `gorm:"column:click_time"`      // 点击时间
+	IPAddress      string    `gorm:"column:ip_address"`      // IP地址
+	Location       string    `gorm:"column:location"`        // 地理位置
+	Referer        string    `gorm:"column:referer"`         // 来源页面
+	AdditionalData string    `gorm:"column:additional_data"` // 额外数据
+}
+
+func (v *UserReportClickFlow) BeforeCreate(tx *gorm.DB) (err error) {
+	v.ClickTime = time.Now()
+	return
+}
+
+func CountReportClicks(count UserReportClickFlow) (err error) {
+	db := models.Main()
+	err = db.Create(&count).Error
+	return
+}
+
+type CountClickFlowById struct {
+	ReportId int `gorm:"column:report_id"`
+	Count    int `gorm:"column:count"`
+}
+
+func GetTimeDurationReportCountsById(begin string, end string, limit int) (ids []CountClickFlowById, err error) {
+	db := models.Main()
+	err = db.Table(userReportClickFlows).Select("report_id,count(*) count").Where("DATE(click_time) BETWEEN ? AND ?", begin, end).Group("report_id").Order("count desc").Limit(limit).Scan(&ids).Error
+	return
+}

+ 1 - 0
models/user/template_user.go

@@ -12,6 +12,7 @@ const (
 )
 
 type TemplateUser struct {
+	Id          int       `gorm:"column:id;primaryKey;autoIncrement:'id'"`
 	Username    string    `gorm:"column:username;type:varchar(20);comment:用户名"`
 	Mobile      string    `gorm:"column:mobile;type:varchar(15);comment:手机号"`
 	OpenId      string    `gorm:"column:open_id;type:varchar(50);comment:open_id"`

+ 21 - 3
routers/commentsRouter.go

@@ -7,6 +7,15 @@ import (
 
 func init() {
 
+    beego.GlobalControllerRouter["eta_mini_ht_api/controllers/report:ReportController"] = append(beego.GlobalControllerRouter["eta_mini_ht_api/controllers/report:ReportController"],
+        beego.ControllerComments{
+            Method: "Count",
+            Router: `/count`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_mini_ht_api/controllers/report:ReportController"] = append(beego.GlobalControllerRouter["eta_mini_ht_api/controllers/report:ReportController"],
         beego.ControllerComments{
             Method: "HotRanked",
@@ -21,9 +30,7 @@ func init() {
             Method: "List",
             Router: `/list`,
             AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(
-				param.New("key"),
-			),
+            MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
@@ -45,6 +52,17 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta_mini_ht_api/controllers/report:ReportController"] = append(beego.GlobalControllerRouter["eta_mini_ht_api/controllers/report:ReportController"],
+        beego.ControllerComments{
+            Method: "Search",
+            Router: `/search`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(
+				param.New("key"),
+			),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_mini_ht_api/controllers/user:AuthController"] = append(beego.GlobalControllerRouter["eta_mini_ht_api/controllers/user:AuthController"],
         beego.ControllerComments{
             Method: "Login",

+ 115 - 33
service/report/report_service.go

@@ -3,6 +3,8 @@ package report
 import (
 	logger "eta_mini_ht_api/common/component/log"
 	"eta_mini_ht_api/common/exception"
+	"eta_mini_ht_api/common/utils/date"
+	"eta_mini_ht_api/common/utils/page"
 	reportService "eta_mini_ht_api/domian/report"
 	"sync"
 	"time"
@@ -12,19 +14,86 @@ type PublishRankedReport struct {
 	Id              int
 	OrgId           int
 	Title           string
+	Abstract        string
 	PermissionNames interface{}
 	PublishedTime   string
 }
 
+type HotRankedReport struct {
+	Id            int
+	OrgId         int
+	Count         int
+	Title         string
+	PublishedTime string
+}
+
 type PermissionNode struct {
 	ID       int               `json:"id"`
 	Name     string            `json:"name"`
 	ParentID int               `json:"parentId"`
-	Children []*PermissionNode `json:"children"`
+	Children []*PermissionNode `json:"children,omitempty"`
+}
+
+type RecordCount struct {
+	UserId     int
+	Mobile     string
+	ReportId   int
+	IpAddress  string
+	Location   string
+	Referer    string
+	Additional string
+}
+
+func GetTotalPageCount() (total int64) {
+	return reportService.GetTotalPageCount()
+}
+
+// GetReportPage 分页获取报告列表
+func GetReportPage(pageInfo page.PageInfo) (list []reportService.ReportDTO, err error) {
+	list, err = reportService.GetReportPage(pageInfo)
+	if err != nil {
+		err = exception.New(exception.QueryReportPageFailed)
+	}
+	return
+}
+func CountReport(count RecordCount) error {
+	dto := convertToRecordCountDTO(count)
+	return reportService.CountReport(dto)
+}
+func GetRandedReportByWeeklyHot(limit int) (reports []HotRankedReport, err error) {
+	end := time.Now()
+	begin := date.GetBeginOfTheWeek(end, time.Monday)
+	hotReports := reportService.GetHotReports(begin.Format(time.DateOnly), end.Format(time.DateOnly), limit)
+	if len(hotReports) > 0 {
+		var dtoList []reportService.ReportDTO
+		var ids []int
+		for i := 0; i < len(hotReports); i++ {
+			ids = append(ids, hotReports[i].ReportId)
+		}
+		dtoList, err = reportService.GetListByCondition("id", ids)
+		if err != nil {
+			logger.Error("获取本周最热研报列表失败:%v", err)
+			err = exception.New(exception.GetHotRandListFailed)
+			return
+		}
+		reports = make([]HotRankedReport, len(ids))
+		for i := 0; i < len(dtoList); i++ {
+			report := convertToHotRankedReport(dtoList[i])
+			for j := 0; j < len(ids); j++ {
+				if ids[j] == report.Id {
+					reports[j] = report
+					break
+				}
+			}
+		}
+	} else {
+		reports = []HotRankedReport{}
+	}
+	return
 }
 
 func GetRandedReportByPublishTime() (reports []PublishRankedReport, err error) {
-	dtoList, err := reportService.GetListByConditionDesc("published_time", 3)
+	dtoList, err := reportService.GetListOrderByCondition("published_time", 3, reportService.DESC)
 	if err != nil {
 		logger.Error("获取最新发布的研报列表失败:%v", err)
 		err = exception.New(exception.GetPublishedRandListFailed)
@@ -51,38 +120,7 @@ func getReportPermissionNames(id int, source string) (labels []string) {
 	}
 	return
 }
-func convertToPublishRankedReportList(dtoList []reportService.ReportDTO) (reports []PublishRankedReport) {
-	reports = []PublishRankedReport{}
-	for _, dto := range dtoList {
-		report := PublishRankedReport{
-			Id:              dto.ReportID,
-			OrgId:           dto.OrgId,
-			PublishedTime:   dto.PublishedTime,
-			Title:           dto.Title,
-			PermissionNames: dto.PermissionNames,
-		}
-		date, err := time.Parse(time.DateTime, report.PublishedTime)
-		if err == nil {
-			report.PublishedTime = date.Format(time.DateOnly)
-		}
-		reports = append(reports, report)
-	}
-	return
-}
 
-func convertToPublishRankedReport(dto reportService.ReportDTO) (report PublishRankedReport) {
-	report = PublishRankedReport{
-		Id:            dto.ReportID,
-		OrgId:         dto.OrgId,
-		PublishedTime: dto.PublishedTime,
-		Title:         dto.Title,
-	}
-	date, err := time.Parse(time.DateTime, report.PublishedTime)
-	if err == nil {
-		report.PublishedTime = date.Format(time.DateOnly)
-	}
-	return
-}
 func GetPermissionList() (root *PermissionNode, err error) {
 	list, err := reportService.GetPermissionList()
 	if err != nil {
@@ -113,3 +151,47 @@ func assemblePermissionNode(list []reportService.PermissionDTO, node *Permission
 		}
 	}
 }
+func convertToHotRankedReport(dto reportService.ReportDTO) (report HotRankedReport) {
+	report = HotRankedReport{
+		Id:            dto.ReportID,
+		OrgId:         dto.OrgId,
+		PublishedTime: dto.PublishedTime,
+		Title:         dto.Title,
+	}
+	//publishDate, err := time.Parse(time.DateTime, report.PublishedTime)
+	//if err == nil {
+	//	report.PublishedTime = publishDate.Format(time.DateOnly)
+	//}
+	return
+}
+func convertToPublishRankedReportList(dtoList []reportService.ReportDTO) (reports []PublishRankedReport) {
+	reports = []PublishRankedReport{}
+	for _, dto := range dtoList {
+		report := PublishRankedReport{
+			Id:              dto.ReportID,
+			OrgId:           dto.OrgId,
+			PublishedTime:   dto.PublishedTime,
+			Abstract:        dto.Abstract,
+			Title:           dto.Title,
+			PermissionNames: dto.PermissionNames,
+		}
+		//publishDate, err := time.Parse(time.DateTime, report.PublishedTime)
+		//if err == nil {
+		//	report.PublishedTime = publishDate.Format(time.DateOnly)
+		//}
+		reports = append(reports, report)
+	}
+	return
+}
+
+func convertToRecordCountDTO(record RecordCount) (dto reportService.RecordCountDTO) {
+	return reportService.RecordCountDTO{
+		UserId:     record.UserId,
+		Mobile:     record.Mobile,
+		ReportId:   record.ReportId,
+		IpAddress:  record.IpAddress,
+		Location:   record.Location,
+		Referer:    record.Referer,
+		Additional: record.Additional,
+	}
+}

+ 1 - 1
task/eta/eta_report_task.go

@@ -44,6 +44,6 @@ type ReportTask struct {
 }
 
 func init() {
-	reportTask := base.NewTask(taskName, cron, new(ReportTask), base.PROD)
+	reportTask := base.NewTask(taskName, cron, new(ReportTask), base.DEV)
 	base.RegisterTask(&reportTask)
 }

+ 1 - 1
task/sms/code_expired_task.go

@@ -27,6 +27,6 @@ type SMSTask struct {
 }
 
 func init() {
-	smsTask := base.NewTask(taskName, cron, new(SMSTask), base.PROD)
+	smsTask := base.NewTask(taskName, cron, new(SMSTask), base.DEV)
 	base.RegisterTask(&smsTask)
 }