Parcourir la source

首页icon,已购页面icon,已购详情背景图

xiexiaoyuan il y a 3 ans
Parent
commit
958771ffad

+ 3 - 1
models/response/permission.go

@@ -9,8 +9,10 @@ type PermissionFirstItem struct {
 
 type PermissionFiccItem struct {
 	ClassifyName    string   `json:"classify_name"`
-	List  PermissionFiccSecondList   `json:"list"`
+	List            PermissionFiccSecondList   `json:"list"`
 	Sort           int       `json:"sort"`
+	IconUrl       string     `json:"icon_url"`
+	SelectIconUrl     string     `json:"select_icon_url"`
 }
 
 type PermissionFiccSecondItem struct {

+ 32 - 0
models/tables/rddp/classify/query.go

@@ -10,6 +10,10 @@ func GetAll()(list []*Classify, err error)  {
 	return
 }
 
+func GetSimpleAll()(list []*Classify, err error)  {
+	err = global.MYSQL["rddp"].Select("id, classify_name, yb_icon_url, yb_bg_url, parent_id").Model(Classify{}).Scan(&list).Error
+	return
+}
 // GetByClassifyName 根据分类名称查找专栏详情
 func GetByClassifyName(classifyName string) (item *Classify, err error) {
 	err = global.MYSQL["rddp"].Model(Classify{}).Where("classify_name = ?", classifyName).First(&item).Error
@@ -62,6 +66,34 @@ func GetListByPid(pid int) (list []*Classify, err error) {
 	return
 }
 
+// GetIdsByClassifyName 根据分类名称查找id
+func GetIdsByClassifyName(names []string) (ids []int, err error) {
+	var list []*Classify
+	err = global.MYSQL["rddp"].Model(Classify{}).Select("id").Where("classify_name in (?) ", names).Scan(&list).Error
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		ids = append(ids, v.Id)
+	}
+	return
+}
+
+
+// GetIdsByClassifyNameAndParentId 查询
+func GetIdsByClassifyNameAndParentId(names []string, parentId int) (ids []int, err error) {
+	var list []*Classify
+	err = global.MYSQL["rddp"].Model(Classify{}).Select("id").Where("classify_name in (?) and parent_id = ?", names, parentId).Scan(&list).Error
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		ids = append(ids, v.Id)
+	}
+	return
+}
+
+
 // GetFirstByPid 根据一级分类查找二级分类
 func GetFirstByPid(pid int) (item *Classify, err error) {
 	err = global.MYSQL["rddp"].Model(Classify{}).Where("parent_id = ? ", pid).First(&item).Error

+ 39 - 15
models/tables/rddp/report/query.go

@@ -6,7 +6,8 @@ import (
 	"hongze/hongze_yb/utils"
 )
 
-func GetLatestClassReportsByIDs(reportIDs []int) (reportList []*Report, err error) {
+// GetLatestClassReportsByClassifyIdSeconds 根据用户已购买的分类权限查询个分类最新的报告
+func GetLatestClassReportsByClassifyIdSeconds(classifyIdSeconds []int) (reportList []*Report, err error) {
 	sql := `SELECT
 	max( publish_time ) as publish_time,
 	classify_id_first,
@@ -20,26 +21,18 @@ FROM
 	report 
 WHERE
 	state = 2 
-	AND id IN ?
+	AND classify_id_second IN ?
 GROUP BY
 	classify_id_first`
-	err = global.MYSQL["rddp"].Raw(sql, reportIDs).Scan(&reportList).Error
+	err = global.MYSQL["rddp"].Raw(sql, classifyIdSeconds).Scan(&reportList).Error
 	return
 }
 
-// GetReportsByIDsAndDate 根据时间和报告ID筛选出合适的记录
-func GetReportsByIDsAndDate( ids []int, publishTime string) (reportList []*Report, err error) {
+// GetReportsByClassifyIdSecondsAndDate 根据时间和报告分类筛选出合适的记录
+func GetReportsByClassifyIdSecondsAndDate( classifyIdSeconds []int, publishTime string) (reportList []*Report, err error) {
 	err = global.MYSQL["rddp"].Model(Report{}).
 		Select("id, classify_name_first").
-		Where("id in (?) and state = 2 and publish_time > ? ", ids, publishTime).Scan(&reportList).Error
-	return
-}
-
-// GetReportsByIDsAndDateAndClass 根据时间和报告ID筛选出合适的记录
-func GetReportsByIDsAndDateAndClass( ids []int, classifyNameFirst string, publishTime string) (reportList []*Report, err error) {
-	err = global.MYSQL["rddp"].Model(Report{}).
-		Select("id, classify_name_first").
-		Where("id in (?) and state = 2 and classify_name_first = ? and publish_time > ? ", ids, classifyNameFirst, publishTime).Scan(&reportList).Error
+		Where("classify_id_second in (?) and state = 2 and publish_time > ? ", classifyIdSeconds, publishTime).Scan(&reportList).Error
 	return
 }
 
@@ -64,6 +57,27 @@ func GetListCountByIDsAndClassifyIdFirst( ids []int, classifyIdFirst int) (total
 	return
 }
 
+// GetListByClassifyIdSecondsAndClassifyIdFirst 分页查询
+func GetListByClassifyIdSecondsAndClassifyIdFirst( classifyIdSeconds []int, classifyIdFirst int,  offset , limit int) (reportList []*Report, err error) {
+	err = global.MYSQL["rddp"].Model(Report{}).
+		Select("id, classify_id_first, classify_name_first, classify_id_second, classify_name_second, title, stage, publish_time").
+		Where("classify_id_second in (?) and classify_id_first=? and state = 2 ", classifyIdSeconds, classifyIdFirst).
+		Order("publish_time desc, id desc").
+		Offset(offset).
+		Limit(limit).
+		Scan(&reportList).Error
+	return
+}
+
+// GetListCountByClassifyIdSecondsAndClassifyIdFirst
+func GetListCountByClassifyIdSecondsAndClassifyIdFirst( classifyIdSeconds []int, classifyIdFirst int) (total int64, err error) {
+	err = global.MYSQL["rddp"].Model(Report{}).
+		Select("id, classify_id_first, classify_name_first, classify_id_second, classify_name_second, title, stage, publish_time").
+		Where("classify_id_second in (?) and classify_id_first=? and state = 2 ", classifyIdSeconds, classifyIdFirst).
+		Count(&total).Error
+	return
+}
+
 // GetListByClassifyIdFirst 按照类型分页查询
 func GetListByClassifyIdFirst(classifyIdFirst int,  offset , limit int) (reportList []*Report, err error) {
 	err = global.MYSQL["rddp"].Model(Report{}).
@@ -95,7 +109,10 @@ func GetByReportId(id int) (item *Report, err error) {
 }
 
 func GetLatestDay() (item *Report, err error) {
-	err = global.MYSQL["rddp"].Where("state = 2 and classify_name_first= 'day'").Order("publish_time desc, id desc").First(&item).Error
+	err = global.MYSQL["rddp"].Where("state = 2 and classify_name_first= '晨报'").Order("publish_time desc, id desc").First(&item).Error
+	if err == utils.ErrNoRow {
+		err = nil
+	}
 	return
 }
 
@@ -120,6 +137,13 @@ GROUP BY
 	return
 }
 
+// GetReportListByCondition 获取报告列表
+func GetReportListByCondition(condition string, pars []interface{}) (list []*Report, err error) {
+	err = global.MYSQL["rddp"].Select("id").Model(Report{}).Where(condition, pars...).
+		Scan(&list).Error
+	return
+}
+
 // GetListByClassifyIdSecond 按照二级类型分页查询
 func GetListByClassifyIdSecond(classifyIdSecond int,  offset , limit int) (reportList []*Report, err error) {
 	err = global.MYSQL["rddp"].Model(Report{}).

+ 2 - 1
models/tables/rddp/report_chapter/query.go

@@ -7,6 +7,7 @@ import (
 
 func GetLatestChapterByTypeIdsAndClass(typeIds []int, classifyNameFirst string) (reportChapter *ReportChapter, err error) {
 	sql := `SELECT
+	report_id,	
 	max( publish_time ) as publish_time,
 	classify_id_first,
 	classify_name_first,
@@ -20,7 +21,7 @@ WHERE
 	type_id IN (?) 
 	AND publish_state = 2 
 	AND is_edit = 1
-	AND classify_name_first = ?
+	AND report_type = ?
 ORDER BY
 	publish_time desc`
 	err = global.MYSQL["rddp"].Model(ReportChapter{}).Raw(sql, typeIds, classifyNameFirst).First(&reportChapter).Error

+ 4 - 0
services/activity/activity.go

@@ -228,6 +228,8 @@ func GetLatestActivity(permissionIds []int, userId uint64) (purchaseItem *purcha
 		purchaseItem.Content = fmt.Sprintf("主讲:%s", activityItem.Speaker)
 		purchaseItem.Time = activityItem.ModifyTime
 		purchaseItem.Unread = unRead
+		// TODO 添加活动icon
+		purchaseItem.ImgUrl = ""
 	}
 
 	return
@@ -281,6 +283,8 @@ func GetPurchaseDetail(permissionIds []int, userId uint64,  pageIndex, pageSize
 		temp.Content = fmt.Sprintf("活动时间:%s", timeStr)
 		temp.Time = item.ModifyTime
 		temp.TopName = item.ActivityName
+		// TODO 电话会背景图
+		temp.ImgUrl = ""
 		list = append(list, temp)
 	}
 	ret.List = list

+ 1 - 1
services/report/classify.go

@@ -126,7 +126,7 @@ func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *respon
 	detail.ClassifyNameSecond = classifyInfo.ClassifyName
 	detail.Abstract = classifyInfo.Abstract
 	detail.Descript = classifyInfo.Descript
-	detail.IsVip = classifyInfo.IsVip
+	detail.IsVip = int(classifyInfo.IsVip)
 	detail.PermissionCheck = &permissionCheckInfo
 	detail.AuthOk = authOk
 

+ 103 - 41
services/report/report.go

@@ -33,49 +33,81 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 			global.LOG.Critical(fmt.Sprintf("GetLatestClassReport: userId=%d, err:%s, errMsg:%s", userId, err.Error(), errMsg))
 		}
 	}()
-	//获取所有和权限绑定的报告
-	reportIds, err := GetReportIdsByPermissionIds(permissionIds)
+
+	//获取所有分类信息
+	classifys, err := classify.GetSimpleAll()
 	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("分类查询出错")
 		return
 	}
+	classifyFirstIconMap := make(map[int]string)
+	classifySecondNameMap := make(map[string]int)
+	for _, v := range classifys{
+		if v.ParentId == 0 {
+			classifyFirstIconMap[v.Id] = v.YbIconUrl
+		}else{
+			classifySecondNameMap[v.ClassifyName] = v.Id
+		}
+	}
 	//获取最新的晨报
 	dayReport, err := report.GetLatestDay()
 	if err != nil {
-		if err == utils.ErrNoRow {
-			dayReport = nil
-		}else{
-			return
-		}
+		errMsg = err.Error()
+		err = errors.New("晨报查询出错")
+		return
 	}
 	//获取最新的有权限的周报
-	typeIds, tErr := report_chapter_type.GetEffectTypeID()
-	if tErr != nil {
-		err = tErr
+	typeIds, err := report_chapter_type.GetEffectTypeID()
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("晨报查询出错")
 		return
 	}
 	weekReport, err := GetLatestWeek(permissionIds, typeIds)
 	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("周报查询出错")
 		return
 	}
-
+	// 有权限的二级分类
 	var reports []*report.Report
+	var classifyIdSeconds []int
 	// 获取晨报和周报以外的其他报告
-	reports, err = report.GetLatestClassReportsByIDs(reportIds)
+	// 获取有权限的二级分类
+
+	chartPermissions, err := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp")
 	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("分类权限查询出错")
 		return
 	}
-
-
-	if dayReport != nil {
+	if len(chartPermissions) > 0 {
+		for _, v := range chartPermissions {
+			for _, myPerId := range permissionIds {
+				if v.ChartPermissionId == myPerId {
+					if classifyNameSecond, ok := classifySecondNameMap[v.KeyWord]; ok{
+						classifyIdSeconds = append(classifyIdSeconds, classifyNameSecond)
+					}
+					break
+				}
+			}
+		}
+	}
+	reports, err = report.GetLatestClassReportsByClassifyIdSeconds(classifyIdSeconds)
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("二级分类最新报告查询出错")
+		return
+	}
+	if dayReport.Id > 0 {
 		reports = append(reports, dayReport)
-
 	}
 	if weekReport != nil {
 		reports = append(reports, weekReport)
 	}
-
 	//获取未读数
-	unReadItem, tErr := GetUnRead(reportIds, userId)
+	unReadItem, tErr := GetUnRead(classifyIdSeconds, userId)
 	if tErr != nil {
 		err = tErr
 		return
@@ -90,6 +122,9 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 			temp.Title = v.Title
 			temp.ClassifyIdSecond = v.ClassifyIdSecond
 			temp.ClassifyNameSecond = v.ClassifyNameSecond
+			if imgUrl, ok := classifyFirstIconMap[temp.ClassifyIdFirst]; ok {
+				temp.ImgUrl = imgUrl
+			}
 			if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" {  //晨报或者周报,查询最新的章节信息
 				temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
 			}else{
@@ -108,13 +143,6 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 	return
 }
 
-// GetReportIdsByPermissionIds 获取所有和权限绑定的报告
-func GetReportIdsByPermissionIds(permissionIds []int) (reportIds []int, err error)   {
-	reportIds, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds, "rddp")
-	return
-}
-
-
 // GetPurchaseDetail 已购详情页面
 func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int, pageIndex, pageSize int) (ret *purchase.DetailResp, err error)  {
 	var errMsg string
@@ -124,7 +152,7 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int,
 		}
 	}()
 	var reports []*report.Report
-	var reportIds []int
+	var weekReportIds []int
 
 	classifyInfo, err := classify.GetByClassifyId(classifyIdFirst)
 	if err != nil {
@@ -140,15 +168,16 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int,
 	classifyNameFirst := classifyInfo.ClassifyName
 	offset := (pageIndex - 1) * pageSize
 	var total int64
+	var classifyIdSeconds []int
+
 	if classifyNameFirst == "晨报" {
 		//分类获取
 		reports, err = report.GetListByClassifyIdFirst(classifyIdFirst, offset, pageSize)
 		if err != nil {
+			errMsg = err.Error()
+			err = errors.New("晨报查询出错")
 			return
 		}
-		for _, v := range reports {
-			reportIds = append(reportIds, v.Id)
-		}
 		total, err = report.GetListCountByClassifyIdFirst(classifyIdFirst)
 		if err != nil {
 			errMsg = err.Error()
@@ -161,26 +190,57 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int,
 			if tErr != nil {
 				return
 			}
-			reportIds, err = report_chapter.GetReportIdsByTypeIdsAndClass(newTypeIds, classifyNameFirst)
-		} else {
-			reportIds, err = GetReportIdsByPermissionIds(permissionIds)
-			if err != nil {
-				return
-			}
-		}
-
-		if len(reportIds) > 0 {
+			weekReportIds, err = report_chapter.GetReportIdsByTypeIdsAndClass(newTypeIds, classifyNameFirst)
 			//分类获取
-			reports, err = report.GetListByIDsAndClassifyIdFirst(reportIds, classifyIdFirst, offset, pageSize)
+			reports, err = report.GetListByIDsAndClassifyIdFirst(weekReportIds, classifyIdFirst, offset, pageSize)
 			if err != nil {
 				return
 			}
-			total, err = report.GetListCountByIDsAndClassifyIdFirst(reportIds, classifyIdFirst)
+			total, err = report.GetListCountByIDsAndClassifyIdFirst(weekReportIds, classifyIdFirst)
 			if err != nil {
 				errMsg = err.Error()
 				err = errors.New("查询报告总数出错")
 				return
 			}
+		}else{
+			//获取有权限的二级分类
+			var classifyNameSeconds []string
+			chartPermissions, tErr := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp")
+			if tErr != nil {
+				errMsg = tErr.Error()
+				err = errors.New("分类权限查询出错")
+				return
+			}
+			if len(chartPermissions) > 0 {
+				for _, v := range chartPermissions {
+					for _, myPerId := range permissionIds {
+						if v.ChartPermissionId == myPerId {
+							classifyNameSeconds = append(classifyNameSeconds, v.KeyWord)
+							break
+						}
+					}
+				}
+			}
+			//获取所有二级分类的id
+			classifyIdSeconds, tErr = classify.GetIdsByClassifyNameAndParentId(classifyNameSeconds, classifyIdFirst)
+			if tErr != nil {
+				errMsg = tErr.Error()
+				err = errors.New("二级分类查询出错")
+				return
+			}
+			if len(classifyIdSeconds) > 0 {
+				//分类获取
+				reports, err = report.GetListByClassifyIdSecondsAndClassifyIdFirst(classifyIdSeconds, classifyIdFirst, offset, pageSize)
+				if err != nil {
+					return
+				}
+				total, err = report.GetListCountByClassifyIdSecondsAndClassifyIdFirst(classifyIdSeconds, classifyIdFirst)
+				if err != nil {
+					errMsg = err.Error()
+					err = errors.New("查询报告总数出错")
+					return
+				}
+			}
 		}
 	}
 	var list []*purchase.Detail
@@ -197,6 +257,7 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int,
 			temp.ClassifyIdSecond = v.ClassifyIdSecond
 			temp.ClassifyNameSecond = v.ClassifyNameSecond
 			temp.Stage = v.Stage
+			temp.ImgUrl = classifyInfo.YbBgUrl
 			if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" {  //晨报或者周报,查询最新的章节信息
 				temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
 				temp.TopName = temp.Title
@@ -215,7 +276,8 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int,
 	}
 	ret.List = list
 	ret.Paging = response.GetPaging(pageIndex, pageSize, int(total))
-	_, tErr := BatchInsertReportView(reportIds, userId, classifyNameFirst)
+	_, tErr := BatchInsertReportView(weekReportIds, userId, classifyNameFirst, classifyIdSeconds)
+
 	if tErr != nil {
 		err = tErr
 		return

+ 3 - 5
services/report/report_chapter.go

@@ -27,12 +27,10 @@ func GetLatestWeek(permissionIds []int, typeIds []int) (reportInfo *report.Repor
 	if err != nil {
 		return
 	}
-	if chapter.ReportId > 0 {
-		reportInfo, err = report.GetByReportId(chapter.ReportId)
-		if err == utils.ErrNoRow {
-			return nil, nil
-		}
+	if chapter.ReportId == 0 {
+		return
 	}
+	reportInfo, err = report.GetByReportId(chapter.ReportId)
 	return
 }
 

+ 18 - 4
services/report/report_view_log.go

@@ -8,9 +8,9 @@ import (
 
 
 // GetUnRead 获取未读数
-func GetUnRead(reportIds []int, userId uint64) (unReadItem map[string]int, err error) {
+func GetUnRead(classifyIdSeconds []int, userId uint64) (unReadItem map[string]int, err error) {
 	firstDay := "2022-01-01"
-	newReports, err := report.GetReportsByIDsAndDate(reportIds, firstDay)
+	newReports, err := report.GetReportsByClassifyIdSecondsAndDate(classifyIdSeconds, firstDay)
 	if err != nil {
 		return
 	}
@@ -50,9 +50,23 @@ func GetUnRead(reportIds []int, userId uint64) (unReadItem map[string]int, err e
 }
 
 // BatchInsertReportView 批量新增报告已读记录
-func BatchInsertReportView(reportIds []int, userId uint64, classifyNameFirst string) (num int, err error)  {
+func BatchInsertReportView(weekReportIds []int, userId uint64, classifyNameFirst string, classifyIdSeconds []int) (num int, err error)  {
 	firstDay := "2022-01-01"
-	newReports, err := report.GetReportsByIDsAndDateAndClass(reportIds, classifyNameFirst, firstDay)
+	var newReports []*report.Report
+	pars := make([]interface{}, 0)
+
+	condition := "state = 2 and classify_name_first = ? and publish_time > ? "
+	pars = append(pars, classifyNameFirst, firstDay)
+	if classifyNameFirst == "晨报" {
+	} else if classifyNameFirst == "周报" {
+		condition += " and id in (?)"
+		pars = append(pars, weekReportIds)
+	} else {
+		condition += " and classify_id_second in (?)"
+		pars = append(pars, classifyIdSeconds)
+	}
+	newReports, err = report.GetReportListByCondition(condition, pars)
+
 	if err != nil {
 		return
 	}