Quellcode durchsuchen

查询已购页面列表

xiexiaoyuan vor 3 Jahren
Ursprung
Commit
08932f1163

+ 24 - 0
controller/purchase/purchase.go

@@ -0,0 +1,24 @@
+package purchase
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/response"
+	"hongze/hongze_yb/services/purchase"
+	userService "hongze/hongze_yb/services/user"
+)
+
+func List(c *gin.Context) {
+	userinfo := userService.GetInfoByClaims(c)
+	// 判断用户是否有已购权限
+	if userinfo.CompanyID == 0 {
+		response.Fail("无权操作", c)
+		return
+	}
+	list, err := purchase.GetLatestReportAndActivity(userinfo)
+	if err !=nil {
+		response.Fail("获取已购列表失败", c)
+		return
+	}
+
+	response.OkData("获取成功", list, c)
+}

+ 2 - 0
init_serve/router.go

@@ -45,6 +45,8 @@ func InitRouter() (r *gin.Engine) {
 	routers.InitChart(r)
 	// 客户相关路由
 	routers.InitCompany(r)
+	// 已购页面相关路由
+	routers.InitPurchase(r)
 
 	return
 }

+ 38 - 0
models/response/purchase/purchase.go

@@ -0,0 +1,38 @@
+package purchase
+
+import (
+	"golang.org/x/sys/unix"
+	"time"
+)
+
+type PurchaseListItem struct {
+	ReportId           int    `description:"报告Id" json:"report_id"`
+	ReportChapterId    int    `description:"报告章节Id" json:"report_chapter_id"`
+	ActivityId		   int 	  `description:"活动ID" json:"activity_id"`
+	ClassifyIdFirst    int    `description:"一级分类id" json:"classify_id_first"`
+	ClassifyNameFirst  string `description:"一级分类名称" json:"classify_name_first"`
+	ClassifyIdSecond   int    `description:"二级分类id" json:"classify_id_second"`
+	ClassifyNameSecond string `description:"二级分类名称" json:"classify_name_second"`
+	Title              string `description:"标题" json:"title"`
+	Content            string `description:"简介" json:"content"`
+	Stage              int	  `description:"期数" json:"stage"`
+	Unread             int    `description:"未读数" json:"unread"`
+	Time               time.Time `description:"更新时间" json:"time"`
+}
+
+type PurchaseList []*PurchaseListItem
+
+func (p PurchaseList) Len() int {
+	return len(p)
+}
+
+func (p PurchaseList) Less(i, j int) bool {
+	time1, _ := unix.TimeToTimespec(p[i].Time)
+	time2, _ := unix.TimeToTimespec(p[j].Time)
+	return unix.TimespecToNsec(time1) > unix.TimespecToNsec(time2)
+}
+
+func (p PurchaseList) Swap(i, j int) {
+	p[i], p[j] = p[j], p[i]
+}
+

+ 13 - 0
models/tables/chart_permission_chapter_mapping/chart_permission_chapter_mapping.go

@@ -0,0 +1,13 @@
+package chart_permission_chapter_mapping
+
+type ChartPermissionChapterMapping struct {
+	ID                   int  `gorm:"primaryKey;column:id;type:int(11) unsigned;not null" json:"-"`
+	ChartPermissionId    int  `gorm:"column:chart_permission_id;type:int(11)" json:"chart_permission_id"`
+	ReportChapterTypeId  int  `gorm:"column:report_chapter_type_id;type:int(11)" json:"report_chapter_type_id"`
+	ResearchType         string `gorm:"column:research_type;type:varchar(100)" json:"research_type"`
+}
+
+
+func (r *ChartPermissionChapterMapping) TableName() string {
+	return "chart_permission_chapter_mapping"
+}

+ 31 - 0
models/tables/chart_permission_chapter_mapping/query.go

@@ -0,0 +1,31 @@
+package chart_permission_chapter_mapping
+
+import (
+	"hongze/hongze_yb/global"
+)
+
+// GetOtherReportIdsByPermisssionIds 根据权限ID筛选除了晨报和周报以外的报告ID
+func GetOtherReportIdsByPermisssionIds(permissionIds []int) (reportIds []int, err error)  {
+	var charPermissionMapping []*ChartPermissionChapterMapping
+	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).Where("chart_permission_id in (?) AND research_type not in ('day', 'week') ", permissionIds).Scan(&charPermissionMapping).Error
+	if err != nil {
+		return
+	}
+	for _, v := range charPermissionMapping {
+		reportIds = append(reportIds, v.ReportChapterTypeId)
+	}
+	return
+}
+
+// GetDayReportIdsByPermisssionIds 根据权限ID筛选晨报和周报的报告ID
+func GetDayReportIdsByPermisssionIds(permissionIds []int) (reportIds []int, err error)  {
+	var charPermissionMapping []*ChartPermissionChapterMapping
+	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).Where("chart_permission_id in (?) AND research_type in ('day', 'week') ", permissionIds).Scan(&charPermissionMapping).Error
+	if err != nil {
+		return
+	}
+	for _, v := range charPermissionMapping {
+		reportIds = append(reportIds, v.ReportChapterTypeId)
+	}
+	return
+}

+ 29 - 0
models/tables/rddp/report/query.go

@@ -0,0 +1,29 @@
+package report
+
+import "hongze/hongze_yb/global"
+
+func GetLatestClassReportsByIDs(reportIDs []int) (reportList []*Report, err error) {
+	sql := `SELECT
+	max( publish_time ) as publish_time,
+	classify_id_first,
+	classify_name_first,
+	title,
+	classify_id_second,
+	classify_name_second,
+	id 
+FROM
+	report 
+WHERE
+	state = 2 
+	AND id IN ?
+GROUP BY
+	classify_id_first`
+	err = global.MYSQL["rddp"].Raw(sql, reportIDs).Scan(&reportList).Error
+	return
+}
+
+// GetByIds 根据id获取报告信息
+func GetByIds( ids []int) (reportList []*Report, err error) {
+	err = global.MYSQL["rddp"].Model(Report{}).Where("id in (?) ", ids).Scan(reportList).Error
+	return
+}

+ 32 - 0
models/tables/rddp/report/report.go

@@ -0,0 +1,32 @@
+package report
+
+import "time"
+
+type Report struct {
+	Id                 int    `orm:"column(id)" description:"报告Id"`
+	AddType            int    `description:"新增方式:1:新增报告,2:继承报告"`
+	ClassifyIdFirst    int    `description:"一级分类id"`
+	ClassifyNameFirst  string `description:"一级分类名称"`
+	ClassifyIdSecond   int    `description:"二级分类id"`
+	ClassifyNameSecond string `description:"二级分类名称"`
+	Title              string `description:"标题"`
+	Abstract           string `description:"摘要"`
+	Author             string `description:"作者"`
+	Frequency          string `description:"频度"`
+	CreateTime         string `description:"创建时间"`
+	ModifyTime         time.Time `description:"修改时间"`
+	State              int    `description:"1:未发布,2:已发布"`
+	PublishTime        time.Time `description:"发布时间"`
+	Stage              int    `description:"期数"`
+	MsgIsSend          int    `description:"消息是否已发送,0:否,1:是"`
+	Content            string `description:"内容"`
+	VideoUrl           string `description:"音频文件URL"`
+	VideoName          string `description:"音频文件名称"`
+	VideoPlaySeconds   string `description:"音频播放时长"`
+	ContentSub         string `description:"内容前两个章节"`
+	ThsMsgIsSend       int    `description:"客户群消息是否已发送,0:否,1:是"`
+}
+
+func (r *Report) TableName() string {
+	return "report"
+}

+ 24 - 0
models/tables/rddp/report_chapter/query.go

@@ -0,0 +1,24 @@
+package report_chapter
+
+import "hongze/hongze_yb/global"
+
+func GetLatestClassReportChapterByIDs(reportIDs []int) (reportChapterList []*ReportChapter, err error) {
+	sql := `SELECT
+	max( publish_time ) as publish_time,
+	classify_id_first,
+	classify_name_first,
+	title,
+	type_id,
+	type_name,
+	report_chapter_id
+FROM
+	report_chapter
+WHERE
+	publish_state = 2 
+	AND report_chapter_id	IN (?) 
+GROUP BY
+	classify_id_first`
+	err = global.MYSQL["rddp"].Raw(sql, reportIDs).Scan(&reportChapterList).Error
+
+	return
+}

+ 35 - 0
models/tables/rddp/report_chapter/report_chapter.go

@@ -0,0 +1,35 @@
+package report_chapter
+
+import "time"
+
+type ReportChapter struct {
+	ReportChapterId     int       `gorm:"primaryKey;column:report_chapter_id;type:int(10) unsigned;not null" json:"-"`
+	ReportId            int       `gorm:"column:report_id;type:int(10);not null;default:'0'"  json:"report_id"`                        //报告ID
+	ReportCode          string    `gorm:"column:report_code;type:varchar(255);not null;default:''"  json:"report_code"`                //报告唯一编码
+	ReportType          string    `gorm:"column:report_type;type:varchar(255);not null;default:''"  json:"report_type"`                //晨报-day;周报-week;
+	ClassifyIdFirst     int       `gorm:"column:classify_id_first;type:int(10);default:'0'"  json:"classify_id_first"`                 //一级分类id
+	ClassifyNameFirst   string    `gorm:"column:classify_name_first;type:varchar(255);default:''"  json:"classify_name_first"`         //一级分类名称
+	TypeId				int       `gorm:"column:type_id;type:int(10);not null;default:'0'"  json:"type_id"`                            //品种ID
+	TypeName            string    `gorm:"column:type_name;type:varchar(255);not null;default:''"  json:"type_name"`                    //品种名称
+	Title               string	  `gorm:"column:title;type:varchar(255);not null;default:''"  json:"title"`                            //章节标题
+	Abstract            string    `gorm:"column:abstract;type:varchar(255);not null;default:''"  json:"abstract"`                      //摘要
+	AddType             int       `gorm:"column:add_type;type:int(10);not null;default:'0'"  json:"add_type"`                          //是否为继承报告1-空白报告2-继承报告
+	Author              string    `gorm:"column:author;type:varchar(255);not null;default:''"  json:"author"`                          //作者
+	Content             string    `gorm:"column:content;type:longtext;"  json:"content"`                                               //内容
+	Stage				int       `gorm:"column:stage;type:int(10);not null;default:'0'"  json:"stage"`                                 //期数
+	Trend               string    `gorm:"column:trend;type:varchar(255);not null;default:''"  json:"trend"`                             //趋势观点
+	Sort				int       `gorm:"column:sort;type:int(10);not null;default:'0'"  json:"sort"`                                   //排序:数值越小越靠前
+	PublishState        int       `gorm:"column:publish_state;type:int(4);not null;default:'0'"  json:"publish_state"`                 //发布状态1-待发布2-已发布
+	PublishTime         time.Time `gorm:"column:publish_time;type:datetime"  json:"publish_time"`                                      //发布时间
+	Videourl            string    `gorm:"column:video_url;type:varchar(255);not null;default:''"  json:"video_url"`                    //音频文件URL
+	VideoName           string    `gorm:"column:video_name;type:varchar(255);not null;default:''"  json:"video_name"`                  //音频文件名称
+	VideoPlaySeconds    string    `gorm:"column:video_play_seconds;type:varchar(255);not null;default:''"  json:"video_play_seconds"`      //音频播放时长
+	VideoSize           string    `gorm:"column:video_size;type:varchar(255);not null;default:''"  json:"video_size"`                    //音频文件大小,单位M
+	CreateTime          time.Time `gorm:"column:create_time;type:datetime"  json:"create_time"`                                         //创建时间
+	ModifyTime          time.Time `gorm:"column:modify_time;type:datetime"  json:"modify_time"`                                         //修改时间
+
+}
+
+func (r *ReportChapter) TableName() string {
+	return "report_chapter"
+}

+ 5 - 0
models/tables/yb_activity/query.go

@@ -71,4 +71,9 @@ func GetDetailById(activityId int) (activity *ActivityDetail, err error) {
 func GetOneById(activityId int) (activity *YbActivity, err error) {
 	err = global.DEFAULT_MYSQL.Where("activity_id = ?", activityId).First(&activity).Error
 	return
+}
+
+func GetLatestByIds(activityids []int) (activity *YbActivity, err error)  {
+	err = global.DEFAULT_MYSQL.Model(YbActivity{}).Where("activity_id in (?) and is_delete = 0 and publish_status = 1", activityids).Order("create_time desc").First(&activity).Error
+	return
 }

+ 13 - 0
routers/purchase.go

@@ -0,0 +1,13 @@
+package routers
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/purchase"
+	"hongze/hongze_yb/middleware"
+)
+
+func InitPurchase(r *gin.Engine)  {
+	rGroup := r.Group("purchase").Use(middleware.Token())
+
+	rGroup.GET("/list", purchase.List)
+}

+ 30 - 0
services/activity/activity.go

@@ -1,7 +1,9 @@
 package activity
 
 import (
+	"fmt"
 	"gorm.io/gorm"
+	"hongze/hongze_yb/models/response/purchase"
 	"hongze/hongze_yb/models/tables/company_product"
 	"hongze/hongze_yb/models/tables/yb_activity"
 	"hongze/hongze_yb/models/tables/yb_activity_permission"
@@ -194,5 +196,33 @@ func GetUserAuthActivityIds(userInfo user.UserInfo) (acrivityIds []int, err erro
 		acrivityIds = append(acrivityIds, int(v.ActivityID))
 	}
 
+	return
+}
+
+// GetLatestActivity 从用户有权限参与的活动中,筛选出最新的活动
+func GetLatestActivity(permissionIds []int) (purchaseItem *purchase.PurchaseListItem, err error)  {
+	// 获取用户权限可参与的活动ID
+	var artivityIds []int
+	permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(permissionIds)
+	if err != nil {
+		return
+	}
+	for _, v := range permissions {
+		artivityIds = append(artivityIds, int(v.ActivityID))
+	}
+
+	activityItem, err := yb_activity.GetLatestByIds(artivityIds)
+	if err != nil {
+		return
+	}
+
+	purchaseItem = new(purchase.PurchaseListItem)
+	if activityItem.ActivityID > 0 {
+		purchaseItem.ActivityId = activityItem.ActivityID
+		purchaseItem.Title = activityItem.ActivityName
+		purchaseItem.Content = fmt.Sprintf("主讲:%s", activityItem.Speaker)
+		purchaseItem.Time = activityItem.ModifyTime
+	}
+
 	return
 }

+ 17 - 0
services/company/permission.go

@@ -36,6 +36,23 @@ func GetValidPermissionByCompany2ProductId(companyId, productId int64) (list []*
 	return
 }
 
+
+// GetPurchasePermissionIdsByCompany2ProductId 根据客户id和产品id获取有效的权限id集合
+func GetPurchasePermissionIdsByCompany2ProductId(companyId, productId int64) (permissionIds []int, err error) {
+	where := make(map[string]interface{})
+	where["company_id ="] = companyId
+	where["product_id ="] = productId
+	where["status in"] = []string{"正式", "永续"}
+	list, err := company_report_permission.GetByWhereMap(where)
+	if err != nil {
+		return
+	}
+	for _, v := range  list {
+		permissionIds = append(permissionIds, v.ChartPermissionID)
+	}
+	return
+}
+
 // GetValidPermissionIdListByCompany2ProductId 根据客户id和产品id获取有效的权限id列表
 func GetValidPermissionIdListByCompany2ProductId(companyId, productId int64) (list []int, err error) {
 	companyReportPermissionList, err := GetValidPermissionByCompany2ProductId(companyId, productId)

+ 54 - 0
services/purchase/purchase.go

@@ -0,0 +1,54 @@
+package purchase
+
+import (
+	"errors"
+	"hongze/hongze_yb/models/response/purchase"
+	activity2 "hongze/hongze_yb/services/activity"
+	"hongze/hongze_yb/services/company"
+	"hongze/hongze_yb/services/report"
+	"hongze/hongze_yb/services/user"
+	"log"
+	"sort"
+)
+
+func GetLatestReportAndActivity(user user.UserInfo) (list purchase.PurchaseList, err error)  {
+	var tempErr error
+	defer func() {
+		if tempErr != nil {
+			err = tempErr
+			log.Print(err)
+			return
+		}
+	}()
+	permissionIds, tempErr := company.GetPurchasePermissionIdsByCompany2ProductId(user.CompanyID, 1)
+	if tempErr != nil {
+		return
+	}
+	if len(permissionIds) <= 0 {
+		err = errors.New("用户无权限")
+		return
+	}
+
+	list, tempErr = report.GetLatestClassReport(permissionIds)
+	if tempErr != nil {
+		return
+	}
+
+	purItem, tempErr := activity2.GetLatestActivity(permissionIds)
+	if tempErr != nil {
+		return
+	}
+
+	list = append(list, purItem)
+
+	if len(list) > 0 {
+		sort.Sort(list)
+	}
+	return
+}
+
+
+
+
+
+

+ 87 - 0
services/report/report.go

@@ -0,0 +1,87 @@
+package report
+
+import (
+	"fmt"
+	"hongze/hongze_yb/models/response/purchase"
+	"hongze/hongze_yb/models/tables/chart_permission_chapter_mapping"
+	"hongze/hongze_yb/models/tables/rddp/report"
+	"hongze/hongze_yb/models/tables/rddp/report_chapter"
+)
+
+func GetLatestClassReport(permissionIds []int) (purchaseList []*purchase.PurchaseListItem, err error)  {
+	//获取除了晨报和周报以外的报告信息
+	otherReportIds, err := chart_permission_chapter_mapping.GetOtherReportIdsByPermisssionIds(permissionIds)
+	if err != nil {
+		return
+	}
+
+	if len(otherReportIds) > 0 {
+		otherReports, tErr := report.GetLatestClassReportsByIDs(otherReportIds)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+
+		for _, v := range otherReports {
+			temp := new(purchase.PurchaseListItem)
+			temp.ReportId = v.Id
+			temp.ClassifyIdFirst = v.ClassifyIdFirst
+			temp.ClassifyNameFirst = v.ClassifyNameFirst
+			temp.Stage = v.Stage
+			temp.Title = v.Title
+			temp.ClassifyIdSecond = v.ClassifyIdSecond
+			temp.ClassifyNameSecond = v.ClassifyNameSecond
+			if temp.ClassifyIdSecond > 0 {     //包含二级分类
+				temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", v.Stage, v.ClassifyNameSecond, v.ClassifyNameFirst)
+			} else {                   //无二级分类
+				temp.Content = fmt.Sprintf("【第%d期|FICC】%s", v.Stage, v.ClassifyNameFirst)
+			}
+			temp.Time = v.PublishTime
+			purchaseList = append(purchaseList, temp)
+		}
+	}
+
+	//获取晨报和周报的章节相关信息
+	reportIds, err := chart_permission_chapter_mapping.GetDayReportIdsByPermisssionIds(permissionIds)
+	if err != nil {
+		return
+	}
+
+	if len(reportIds) > 0 {
+		reportChapters, tErr := report_chapter.GetLatestClassReportChapterByIDs(reportIds)
+
+		if tErr != nil {
+			err = tErr
+			return
+		}
+		var ids []int
+		for _, v := range reportChapters {
+			ids = append(ids, v.ReportId)
+		}
+		reports, tErr := report.GetByIds(ids)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+		reportMap := make(map[int]*report.Report, 0)
+		for _, v := range reports {
+			reportMap[v.Id] = v
+		}
+
+		for _, v := range reportChapters {
+			temp := new(purchase.PurchaseListItem)
+			ids = append(ids, v.ReportId)
+			temp.ReportId = v.ReportId
+			temp.ReportChapterId = v.ReportChapterId
+			temp.ClassifyIdFirst = v.ClassifyIdFirst
+			temp.ClassifyNameFirst = v.ClassifyNameFirst
+			temp.Stage = reportMap[v.ReportId].Stage
+			temp.Title = v.Title
+			temp.Content = fmt.Sprintf("【第%d期|FICC|%s】%s", temp.Stage, v.TypeName, v.ClassifyNameFirst)
+			temp.Time = v.PublishTime
+			purchaseList = append(purchaseList, temp)
+		}
+	}
+	return
+}
+