xingzai vor 2 Jahren
Ursprung
Commit
1bcf5b5b48

+ 11 - 2
controllers/report.go

@@ -401,8 +401,10 @@ func (this *MobileReportController) ArticleCategoryList() {
 			br.ErrMsg = "获取信息失败,Err:" + err.Error()
 			return
 		}
-		if recordCount == 0 && user.CreatedTime.Before(utils.StrTimeToTime(Newdetail.PublishDate)) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(Newdetail.PublishDate)) {
-			list[k].IsRed = true
+		if Newdetail != nil {
+			if recordCount == 0 && user.CreatedTime.Before(utils.StrTimeToTime(Newdetail.PublishDate)) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(Newdetail.PublishDate)) {
+				list[k].IsRed = true
+			}
 		}
 	}
 	//标的列表
@@ -422,6 +424,13 @@ func (this *MobileReportController) ArticleCategoryList() {
 		CategoryId:    utils.TIME_CATEGORYID,
 		MatchTypeName: "时间线",
 	}
+	timeLineIsRed, err := services.GetShowTimeLineIsRed(user, industrialManagementId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取用户权限失败, Err: " + err.Error()
+		return
+	}
+	timeLineItem.IsRed = timeLineIsRed
 	list = append([]*models.IndustrialToArticleCategoryRep{&timeLineItem}, list...)
 	resp := new(models.IndustrialToArticleCategoryListRep)
 	resp.List = list

+ 129 - 0
models/cygx_morning_meeting_review_chapter.go

@@ -0,0 +1,129 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// CygxMorningMeetingReviewChapter [...]
+type CygxMorningMeetingReviewChapter struct {
+	Id                   int       `orm:"column(id);pk"`
+	MeetingTime          time.Time `json:"meetingTime"` // 晨会日期
+	CreateTime           time.Time `json:"createTime"`
+	ModifyTime           time.Time `json:"modifyTime"`
+	IndustryId           int       `json:"industryId"`          // 产业id
+	IndustryName         string    `json:"industryName"`        // 产业名称
+	ChartPermissionName  string    `json:"chartPermissionName"` // 行业名称
+	ChartPermissionId    int       `json:"chartPermissionId"`   // 行业id
+	IndustrialSubjectIds string    `json:"industrialSubjectId"` // 标的id
+	MeetingId            int64     `json:"meetingId"`           // 主表id
+	Content              string    `json:"content"`             // 内容
+}
+
+type AddMorningMeetingReviewItem struct {
+	ChapterId            int
+	Content              string
+	ChartPermissionId    int
+	ChartPermissionName  string
+	IndustryId           int
+	IndustryName         string
+	IndustrialSubjectIds string
+}
+
+type AddMorningMeetingReviewsReq struct {
+	List        []*AddMorningMeetingReviewItem
+	MeetingId   int
+	MeetingTime string
+	PublishTime string
+	DoType      int `description:"操作类型 0,保存 、1,发布"`
+}
+
+// 添加晨报点评章节
+func AddCygxMorningMeetingReviewChapter(item *CygxMorningMeetingReviewChapter) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+// 列表
+func GetCygxMorningMeetingReviewsListById(meetingId int) (items []*CygxMorningMeetingReviewChapter, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_morning_meeting_review_chapter WHERE meeting_id = ? `
+	_, err = o.Raw(sql, meetingId).QueryRows(&items)
+	return
+}
+
+type IndustrialSubjectItem struct {
+	IndustrialSubjectId int    `orm:"column(industrial_subject_id);pk" description:"标的id"`
+	SubjectName         string `description:"标的名称"`
+}
+
+type CygxMorningMeetingReviewChapterRespItem struct {
+	Id                    int                      `orm:"column(id);pk"`
+	MeetingTime           time.Time                `json:"meetingTime"` // 晨会日期
+	CreateTime            time.Time                `json:"createTime"`
+	ModifyTime            time.Time                `json:"modifyTime"`
+	IndustryId            int                      `json:"industryId"`            // 产业id
+	IndustryName          string                   `json:"industryName"`          // 产业名称
+	ChartPermissionName   string                   `json:"chartPermissionName"`   // 行业名称
+	ChartPermissionId     int                      `json:"chartPermissionId"`     // 行业id
+	IndustrialSubjectList []*IndustrialSubjectItem `json:"industrialSubjectList"` // 标的list
+	MeetingId             int64                    `json:"meetingId"`             // 主表id
+	Content               string                   `json:"content"`               // 内容
+}
+
+type CygxMorningMeetingReviewChapterResp struct {
+	MeetingTime string
+	Status      int
+	List        []*CygxMorningMeetingReviewChapterRespItem
+}
+
+// 删除晨会点评章节
+func DeleteMorningMeetingChapter(reviewId int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_morning_meeting_review_chapter WHERE meeting_id =? `
+	_, err = o.Raw(sql, reviewId).Exec()
+	return
+}
+
+// 更新晨报点评章节
+func UpdateCygxMorningMeetingReviewChapter(item *CygxMorningMeetingReviewChapter) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_morning_meeting_review_chapter
+			SET
+			  meeting_time =?,
+			  modify_time = ?,
+			  industry_id = ?,
+			  industry_name = ?,
+			  chart_permission_id = ?,
+			  chart_permission_name = ?,
+			  industrial_subject_ids = ?,
+			  content = ? 
+			WHERE id = ? `
+	_, err = o.Raw(sql, item.MeetingTime, item.ModifyTime, item.IndustryId, item.IndustryName,
+		item.ChartPermissionId, item.ChartPermissionName, item.IndustrialSubjectIds, item.Content, item.Id).Exec()
+
+	return
+}
+
+func GetCygxMorningMeetingReviewsListByIdAndIndustryId(meetingId, industryId int) (item *CygxMorningMeetingReviewChapter, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_morning_meeting_review_chapter WHERE meeting_id = ? AND industry_id = ? `
+	err = o.Raw(sql, meetingId, industryId).QueryRow(&item)
+	return
+}
+
+// 删除晨会点评章节
+func DeleteMorningMeetingChapterById(chapterId int) (err error) {
+	o := orm.NewOrm()
+	sql := ` DELETE FROM cygx_morning_meeting_review_chapter WHERE id =? `
+	_, err = o.Raw(sql, chapterId).Exec()
+	return
+}
+
+func GetCygxMorningMeetingReviewsListByIndustrialIds(industrialIds string) (items []*CygxMorningMeetingReviewChapter, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_morning_meeting_review_chapter WHERE industry_id IN (` + industrialIds + `)  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 8 - 0
models/page_history_record.go

@@ -18,6 +18,7 @@ type CygxPageHistoryRecord struct {
 	ChartPermissionId      int       `description:"行业ID"`
 	IndustrialManagementId string    `description:"产业ID"`
 	PageType               string    `description:"页面类型,纪要:Summary,纪要搜索:SummarySearch,报告:Report,报告搜索:ReportSearch,产业列表:IndustryList,活动:Activit,活动搜索:ActivitSearch,活动详情:ActivitParticulars,报告详情:ReportParticulars,已结束活动:OverActivity"`
+	Parameter              string    `description:"参数"`
 }
 
 type CygxPageHistoryRecordRep struct {
@@ -57,3 +58,10 @@ func GetTimeLineRecordItem(userId, industrialManagementId int) (item *CygxPageHi
 	err = o.Raw(sql, userId).QueryRow(&item)
 	return
 }
+
+func GetTimeLineRecordAllCount(userId int, date string) (items []*CygxPageHistoryRecord, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_page_history_record WHERE user_id=? AND router LIKE '%/api/report/industry/ArticleList?PageSize=10&CurrentIndex=1&CategoryId=99999&IndustrialManagementId=%' AND create_time > ? `
+	_, err = o.Raw(sql, userId, date).QueryRows(&items)
+	return
+}

+ 41 - 4
models/report.go

@@ -5,6 +5,7 @@ import (
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hongze_clpt/utils"
 	"strconv"
+	"time"
 )
 
 type IndustrialManagementList struct {
@@ -219,17 +220,29 @@ func IndustrialUserRecordArticleCount(userId, industrialManagementId, categoryId
 FROM
 	cygx_article_history_record 
 WHERE
-	article_id = ( SELECT article_id FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND category_id = ? ORDER BY publish_date DESC LIMIT 0, 1 ) 
+	article_id = ( SELECT article_id FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND category_id  IN (SELECT
+	category_id 
+FROM
+	cygx_report_mapping 
+WHERE
+	chart_permission_id = any( SELECT chart_permission_id FROM cygx_report_mapping WHERE category_id = ? ) 
+	AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ? ) ) ORDER BY publish_date DESC LIMIT 0, 1 ) 
 	AND user_id = ? `
-	err = o.Raw(sql, industrialManagementId, categoryId, userId).QueryRow(&count)
+	err = o.Raw(sql, industrialManagementId, categoryId, categoryId, userId).QueryRow(&count)
 	return
 }
 
 // 获取最新文章
 func GetNewIndustrialUserRecordArticle(industrialManagementId, categoryId int) (item *ArticleDetail, err error) {
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND category_id = ? ORDER BY publish_date DESC LIMIT 0, 1`
-	err = o.Raw(sql, industrialManagementId, categoryId).QueryRow(&item)
+	sql := ` SELECT * FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND category_id  IN (SELECT
+	category_id 
+FROM
+	cygx_report_mapping 
+WHERE
+	chart_permission_id = any( SELECT chart_permission_id FROM cygx_report_mapping WHERE category_id = ? ) 
+	AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ? ) ) ORDER BY publish_date DESC LIMIT 0, 1`
+	err = o.Raw(sql, industrialManagementId, categoryId, categoryId).QueryRow(&item)
 	return
 }
 
@@ -744,3 +757,27 @@ FROM
 	err = o.Raw(sql).QueryRow(&count)
 	return
 }
+
+type IndustrialReadNum struct {
+	IndustrialManagementId int `description:"产业id"`
+	Readnum                int `description:"阅读次数"`
+}
+
+// 获取该产业下文章的用户阅读次数-小红点用
+func GetReportIndustrialReadNumList(userId int, industrialIds string, createtime time.Time) (items []*IndustrialReadNum, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT a.industrial_management_id, MIN(a.readnum) AS readnum FROM (
+SELECT man_g.industrial_management_id,( SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.article_id = a.article_id ) AS readnum 
+FROM
+	cygx_article AS a 
+	INNER JOIN cygx_industrial_article_group_management as man_g ON man_g.article_id = a.article_id
+WHERE
+	a.publish_status = 1 
+	AND a.is_class = 1
+	AND man_g.industrial_management_id IN (` + industrialIds + `)  
+	AND a.publish_date > ? 
+GROUP BY a.article_id ORDER BY publish_date DESC
+) AS a GROUP BY industrial_management_id`
+	_, err = o.Raw(sql, createtime).QueryRows(&items)
+	return
+}

+ 2 - 2
services/article_red.go

@@ -8,7 +8,7 @@ import (
 
 //处理文章小红点
 
-func ShowTimeLine(user *models.WxUserItem, industrialManagementId int) (err error, isRed bool) {
+func GetShowTimeLineIsRed(user *models.WxUserItem, industrialManagementId int) (isRed bool, err error) {
 	//时间线
 	timeLineItem := models.IndustrialToArticleCategoryRep{
 		CategoryId:    99999,
@@ -56,7 +56,7 @@ func ShowTimeLine(user *models.WxUserItem, industrialManagementId int) (err erro
 	if !timeLineItem.IsRed && timeLineRed && haveMorningMeeting {
 		timeLineItem.IsRed = true
 	}
-
+	isRed = timeLineItem.IsRed
 	return
 
 }

+ 94 - 40
services/industrial_management.go

@@ -5,6 +5,8 @@ import (
 	"fmt"
 	"hongze/hongze_clpt/models"
 	"hongze/hongze_clpt/utils"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -119,8 +121,7 @@ func HandleIndustryList(list []*models.IndustrialManagement, user *models.WxUser
 		}
 		v.AuthInfo = au
 	}
-	mapUPdateTime := make(map[int]string)
-	mapHistroyArticleId := make(map[int]int)
+
 	if len(industrialIdArr) > 0 {
 		//合并产业关联的标的
 		listSubjcet, err = models.GetIndustrialSubjectAllByIndustrialId(industrialIdArr)
@@ -136,73 +137,126 @@ func HandleIndustryList(list []*models.IndustrialManagement, user *models.WxUser
 				}
 			}
 		}
+	}
+	mapUPdateTime := make(map[int]string)
+	articleIdArr := make([]int, 0)
+	//获取这些产业下最新更新的文章
 
-		articleIdArr := make([]int, 0)
-		//获取这些产业下最新更新的文章
-		if len(industrialIdArr) > 0 {
-			listUpdateTime, e := models.GetNewArticleDetailByIndustrialIds(industrialIdArr)
-			if e != nil && e.Error() != utils.ErrNoRow() {
-				err = e
-				return
-			}
-			for _, v := range listUpdateTime {
+	listUpdateTime, err := models.GetNewArticleDetailByIndustrialIds(industrialIdArr)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	for _, v := range listUpdateTime {
+		mapUPdateTime[v.IndustrialManagementId] = v.PublishDate
+		articleIdArr = append(articleIdArr, v.ArticleId)
+	}
+
+	//时间线的更新时间
+	//	maptimelineUPdateTime := make(map[int]string)
+	listtimelinePublishdate, err := models.GetTimeLineReportIndustrialPublishdateList(industrialIdArr)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	for _, v := range listtimelinePublishdate {
+		if mapUPdateTime[v.IndustrialManagementId] != "" {
+			if utils.StrTimeToTime(v.PublishDate).After(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
 				mapUPdateTime[v.IndustrialManagementId] = v.PublishDate
-				articleIdArr = append(articleIdArr, v.ArticleId)
 			}
 		}
-		//时间线的更新时间
-		//	maptimelineUPdateTime := make(map[int]string)
-		listtimelinePublishdate, e := models.GetTimeLineReportIndustrialPublishdateList(industrialIdArr)
-		if e != nil && e.Error() != utils.ErrNoRow() {
-			err = e
-			return
-		}
-		for _, v := range listtimelinePublishdate {
-			if mapUPdateTime[v.IndustrialManagementId] != "" {
-				if utils.StrTimeToTime(v.PublishDate).After(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
-					mapUPdateTime[v.IndustrialManagementId] = v.PublishDate
-				}
+	}
+
+	//mapHistroyArticleId := make(map[int]int)
+
+	//if userId > 0 {
+	//	listArticleHistory, e := models.GetUserToArticleHistory(userId, articleIdArr)
+	//	if e != nil && e.Error() != utils.ErrNoRow() {
+	//		err = errors.New("获取产业关联的视频失败,GetindustryVideo " + e.Error())
+	//		return
+	//	}
+	//	for _, v := range listArticleHistory {
+	//		mapHistroyArticleId[v.ArticleId] = v.ArticleId
+	//	}
+	//}
+	var industrialIds string
+	for _, id := range industrialIdArr {
+		industrialIds += strconv.Itoa(id) + ","
+	}
+	industrialIds = strings.TrimRight(industrialIds, ",")
+	articleList, err := models.GetReportIndustrialReadNumList(userId, industrialIds, user.CreatedTime)
+	mapHistroyindustrialId := make(map[int]int)
+	for _, v := range articleList {
+		mapHistroyindustrialId[v.IndustrialManagementId] = v.Readnum
+	}
+	nowTime := time.Now().Local()
+	threeMonBefore := nowTime.AddDate(0, -3, 0)
+
+	//查询用户今天是否看过时间线
+	//haveMorningMeeting := false
+	//var morningMeetingTime string
+	recrodList, err := models.GetTimeLineRecordAllCount(user.UserId, time.Now().Format(utils.FormatDate))
+	if err != nil {
+		return
+	}
+	var industrialManagementIdstr string
+	industrialIdMap := make(map[string]time.Time)
+	for _, v := range recrodList {
+		industrialManagementIdstr = strings.TrimLeft(v.Parameter, "PageSize=10&CurrentIndex=1&CategoryId=99999&IndustrialManagementId=")
+		if createTime, ok := industrialIdMap[industrialManagementIdstr]; ok {
+			if createTime.Before(v.CreateTime) {
+				industrialIdMap[industrialManagementIdstr] = v.CreateTime
 			}
+		} else {
+			industrialIdMap[industrialManagementIdstr] = v.CreateTime
 		}
+	}
 
-		if userId > 0 {
-			listArticleHistory, e := models.GetUserToArticleHistory(userId, industrialIdArr)
-			if e != nil && e.Error() != utils.ErrNoRow() {
-				err = errors.New("获取产业关联的视频失败,GetindustryVideo " + e.Error())
-				return
-			}
-			for _, v := range listArticleHistory {
-				mapHistroyArticleId[v.ArticleId] = v.ArticleId
+	mmList, err := models.GetCygxMorningMeetingReviewsListByIndustrialIds(industrialIds)
+	if err != nil {
+		return
+	}
+	morningMeetingTimeMap := make(map[int]time.Time)
+	for _, v := range mmList {
+		morningMeetingTimeMap[v.IndustryId] = v.CreateTime
+	}
+	timeLineRedMap := make(map[int]bool, 0)
+
+	for _, industrialId := range industrialIdArr {
+		if createTime, ok := industrialIdMap[strconv.Itoa(industrialId)]; ok {
+			if createTime.Before(morningMeetingTimeMap[industrialId]) {
+				timeLineRedMap[industrialId] = true
 			}
 		}
 	}
-	nowTime := time.Now().Local()
-	threeMonBefore := nowTime.AddDate(0, -3, 0)
+
 	for k, v := range list {
 		list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId])
 		if userId > 0 {
 			//如果文章没有阅读,而且,文章的发布时间晚于项目的上线时间,而且文章的发布时间晚于用户的注册时间,就进行标红处理
-			if mapHistroyArticleId[v.ArticleId] == 0 && user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
-				list[k].IsRed = true
+			if mapHistroyindustrialId[v.IndustrialManagementId] == 0 || timeLineRedMap[v.IndustrialManagementId] {
+				if user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
+					list[k].IsRed = true
+				}
 			}
 		} else {
 			if utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
 				list[k].IsRed = true
 			}
-			list[k].IsFollow = false
+			list[k].IsFollow = true
 		}
 
 		list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId])
 		if userId > 0 {
 			//如果文章没有阅读,而且,文章的发布时间晚于项目的上线时间,而且文章的发布时间晚于用户的注册时间,就进行标红处理
-			if mapHistroyArticleId[v.ArticleId] == 0 && user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
-				list[k].IsRed = true
+			if mapHistroyindustrialId[v.IndustrialManagementId] == 0 || timeLineRedMap[v.IndustrialManagementId] {
+				if user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
+					list[k].IsRed = true
+				}
 			}
 		} else {
 			if utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
 				list[k].IsRed = true
 			}
-			list[k].IsFollow = false
+			list[k].IsFollow = true
 		}
 
 		// 关联报告发布时间均在3个月内则标记New