Răsfoiți Sursa

文章阅读时间统计

xingzai 3 ani în urmă
părinte
comite
33f4ccde0c

+ 114 - 222
controllers/article.go

@@ -432,227 +432,119 @@ func (this *ArticleCommonController) Detail() {
 	br.Data = resp
 }
 
-// @Title 获取报告同步
-// @Description 获取报告详情接口
-// @Param   ArticleIdMd5   query   int  true       "报告ID"
+// @Title 上传文章阅读时间
+// @Description 上传文章阅读时间接口
+// @Param  request	body models.AddStopTimeRep true "type json string"
 // @Success 200 {object} models.ArticleDetailResp
-// @router /tongbu [get]
-//func (this *ArticleCommonController) Tongbu() {
-//	br := new(models.BaseResponse).Init()
-//	defer func() {
-//		this.Data["json"] = br
-//		this.ServeJSON()
-//	}()
-//
-//	fmt.Println("同步数据")
-//	indexName := utils.IndexName
-//	fmt.Println(indexName)
-//	endDate := time.Now().AddDate(0, 0, -7).Format(utils.FormatDate)
-//	list, err := models.GetTacticsList(endDate)
-//	//list, err := models.GetTacticsListAll2()
-//	if err != nil {
-//		fmt.Println("GetTacticsList Err:", err.Error())
-//		return
-//	}
-//	fmt.Println("list len:", len(list))
-//
-//	summaryCategoryIds := "28,32,45,50,57,62,72,74,79,84,86,88,90,95,96" //纪要库的文章类型ID
-//	listSummarys := strings.Split(summaryCategoryIds, ",")
-//	fmt.Println(listSummarys)
-//	for _, v := range listSummarys {
-//		vs, _ := strconv.Atoi(v)
-//		fmt.Printf("n 的类型 %T", vs)
-//	}
-//
-//	for _, v := range list {
-//		for _, vs := range listSummarys {
-//			vint, _ := strconv.Atoi(vs)
-//			//fmt.Printf("vint 的类型 %T", vint)
-//			//fmt.Println("————————————")
-//			//fmt.Printf("vCategoryId 的类型 %T", v.CategoryId)
-//			//fmt.Println("————————————")
-//
-//			if v.CategoryId == vint {
-//
-//			}
-//		}
-//	}
-//
-//	br.Msg = "测试!"
-//	br.ErrMsg = "参数解析失败,Err:"
-//	return
+// @router /addStopTime [post]
+func (this *ArticleController) AddStopTime() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req models.AddStopTimeRep
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	uid := user.UserId
+	articleId := req.ArticleId
+	stopTime := req.StopTime
+	if articleId <= 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误"
+		return
+	}
+
+	if stopTime == 0 {
+		br.Msg = "时间错误"
+		return
+	}
+	detail := new(models.ArticleDetail)
+	hasPermission := 0
+	hasFree := 0
 
-//listSummary, errsu := models.GetReportMappingCategoryID()
-//if errsu != nil {
-//	fmt.Println("GetTacticsList Err:", errsu.Error())
-//	return
-//}
-//
-//listPermission, errper := models.GetPermissionMappingCategoryID()
-//if errper != nil {
-//	fmt.Println("GetTacticsList Err:", errper.Error())
-//	return
-//}
-//for k, v := range list {
-//
-//	//是否属于纪要库
-//	//countSummary, err := models.GetPermissionMappingById(v.CategoryId)
-//	//if err != nil && err.Error() != utils.ErrNoRow() {
-//	//	br.Msg = "参数解析异常!"
-//	//	br.ErrMsg = "参数解析失败,Err:" + err.Error()
-//	//	return
-//	//}
-//	//if countSummary > 0 {
-//	//	v.IsSummary = 1
-//	//}
-//	for _, vSum := range listSummary {
-//		if v.CategoryId == vSum.CategoryId {
-//			v.IsSummary = 1
-//		}
-//	}
-//	//是否属于报告
-//	//countReport, err := models.GetReportMappingById(v.CategoryId)
-//	//if err != nil && err.Error() != utils.ErrNoRow() {
-//	//	br.Msg = "参数解析异常!"
-//	//	br.ErrMsg = "参数解析失败,Err:" + err.Error()
-//	//	return
-//	//}
-//	for _, vPer := range listPermission {
-//		if v.CategoryId == vPer.CategoryId {
-//			v.IsReport = 1
-//		}
-//	}
-//	if v.IsReport > 0 {
-//		//是否属于策略 策略自动归类
-//		//是否属于行业报告 行业报告自动归类
-//		if v.CategoryId == 7 || v.CategoryId == 11 || v.CategoryId == 51 || v.CategoryId == 52 || v.CategoryId == 64 || v.CategoryId == 80 || v.CategoryId == 87 {
-//			v.IsClass = 1
-//		}
-//		if v.CategoryId == 64 || v.CategoryId == 87 || v.CategoryId == 80 {
-//			v.ReportType = 2 //是否属于行业报告
-//		} else {
-//			v.ReportType = 1 //是否属于产业报告
-//		}
-//	}
-//	v.Department = "弘则权益研究"
-//	fmt.Println(k, v.ArticleId)
-//	hh, _ := time.ParseDuration("8h")
-//	//pDate := publishDate.Add(hh)
-//	v.PublishDate = v.PublishDate.Add(hh)
-//	//判断是否已经存在
-//	if v.ArticleId < 0 {
-//		if err != nil {
-//			br.Msg = "参数解析异常!"
-//			br.ErrMsg = "参数解析失败,Err:" + err.Error()
-//			return
-//		}
-//	}
-//	count, err := models.GetArticleCountById(v.ArticleId)
-//	if err != nil && err.Error() != utils.ErrNoRow() {
-//		br.Msg = "参数解析异常!"
-//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-//		return
-//	}
-//	fmt.Println(v.IsClass)
-//	v.Body = strings.Replace(v.Body, "http://vmp.hzinsights.com", "https://vmp.hzinsights.com", -1)
-//	expertNumStr, expertContentStr, interviewDateStr := services.BodyAnalysis(v.Body)
-//	if count > 0 {
-//		fmt.Println(k, v.ArticleId, "edit")
-//		//articleInfo, err := models.GetArticleDetailById(v.ArticleId)
-//		//if err != nil {
-//		//	br.Msg = "同步失败!文章ID:" + strconv.Itoa(v.ArticleId)
-//		//	br.ErrMsg = "同步失败,Err:" + err.Error()
-//		//	return
-//		//}
-//		//if articleInfo.IsClass == 1 {
-//		//	v.IsClass = 1
-//		//}
-//		bodyText, _ := services.GetReportContentTextSub(v.Body)
-//		updateParams := make(map[string]interface{})
-//		updateParams["Title"] = v.Title
-//		updateParams["TitleEn"] = v.TitleEn
-//		updateParams["UpdateFrequency"] = v.UpdateFrequency
-//		updateParams["CreateDate"] = v.CreateDate
-//		updateParams["PublishDate"] = v.PublishDate
-//		updateParams["Body"] = html.EscapeString(v.Body)
-//		updateParams["BodyText"] = bodyText
-//		updateParams["Abstract"] = html.EscapeString(v.Abstract)
-//		updateParams["CategoryName"] = v.CategoryName
-//		updateParams["SubCategoryName"] = v.SubCategoryName
-//		updateParams["CategoryId"] = v.CategoryId
-//		updateParams["PublishStatus"] = v.PublishStatus
-//		updateParams["ExpertBackground"] = expertContentStr
-//		updateParams["ExpertNumber"] = expertNumStr
-//		updateParams["InterviewDate"] = interviewDateStr
-//		updateParams["IsClass"] = v.IsClass
-//		updateParams["IsSummary"] = v.IsSummary
-//		updateParams["IsReport"] = v.IsReport
-//		updateParams["ReportType"] = v.ReportType
-//		if v.Department != "弘则权益研究" {
-//			v.Department = "弘则权益研究"
-//		}
-//		updateParams["Department"] = v.Department
-//		whereParam := map[string]interface{}{"article_id": v.ArticleId}
-//		err = models.UpdateByExpr(models.CygxArticle{}, whereParam, updateParams)
-//		if err != nil {
-//			fmt.Println("UpdateByExpr Err:" + err.Error())
-//		}
-//	} else {
-//		fmt.Println(k, v.ArticleId, "add")
-//		item := new(models.CygxArticle)
-//		articleIdInt := v.ArticleId
-//		item.ArticleId = articleIdInt
-//		item.Title = v.Title
-//		item.TitleEn = v.TitleEn
-//		item.UpdateFrequency = v.UpdateFrequency
-//		item.CreateDate = v.CreateDate
-//		item.PublishDate = v.PublishDate.Format(utils.FormatDateTime)
-//		item.Body = html.EscapeString(v.Body)
-//		item.Abstract = html.EscapeString(v.Abstract)
-//		item.CategoryName = v.CategoryName
-//		item.SubCategoryName = v.SubCategoryName
-//		item.CategoryId = v.CategoryId
-//		item.PublishStatus = v.PublishStatus
-//		item.ExpertBackground = expertContentStr
-//		item.ExpertNumber = expertNumStr
-//		item.InterviewDate = interviewDateStr
-//		item.Department = v.Department
-//		item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleIdInt))
-//		item.IsClass = v.IsClass
-//		item.IsSummary = v.IsSummary
-//		item.IsReport = v.IsReport
-//		item.ReportType = v.ReportType
-//		_, err = models.AddCygxArticles(item)
-//		if err != nil {
-//			fmt.Println("AddCygxArticle Err:", err.Error())
-//			br.Msg = "参数解析异常!"
-//			br.ErrMsg = "参数解析失败,Err:" + err.Error()
-//			return
-//		}
-//	}
-//	//纪要库的数据同步到Es
-//	if v.IsSummary == 1 {
-//		content := html.UnescapeString(v.Body)
-//		doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
-//		if err != nil {
-//			fmt.Println("create doc err:", err.Error())
-//			br.Msg = "参数解析异常!"
-//			br.ErrMsg = "参数解析失败,Err:" + err.Error()
-//			return
-//		}
-//		doc.Find("a").Each(func(i int, a *goquery.Selection) {
-//			a.Remove()
-//		})
-//		bodyText := doc.Text()
-//		item := new(services.ElasticTestArticleDetail)
-//		item.ArticleId = v.ArticleId
-//		item.Title = v.Title
-//		item.BodyText = bodyText
-//		item.PublishDate = v.PublishDate.Format(utils.FormatDateTime)
-//		services.EsAddOrEditData(indexName, strconv.Itoa(v.ArticleId), item)
-//	}
-//}
-//br.Ret = 200
-//br.Success = true
-//br.Msg = "同步成功"
-//}
+	//判断是否已经申请过
+	applyCount, err := models.GetApplyRecordCount(uid)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
+		return
+	}
+	//`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
+	if user.CompanyId > 1 {
+		companyPermission, err := models.GetCompanyPermission(user.CompanyId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+			return
+		}
+		detail, err = models.GetArticleDetailById(articleId)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取信息失败,Err:" + err.Error()
+			return
+		}
+		if companyPermission == "" {
+			if applyCount > 0 {
+				hasPermission = 5
+			} else {
+				hasPermission = 2
+			}
+			hasFree = 2
+			goto Loop
+		} else {
+			hasFree = 1
+			articlePermission, err := models.GetArticlePermission(detail.CategoryId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+				return
+			}
+			if articlePermission == nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+				return
+			}
+			if strings.Contains(companyPermission, articlePermission.PermissionName) {
+				detailNew, err := models.GetNewArticleHistoryRecord(uid, articleId)
+				if err != nil {
+					br.Msg = "获取信息失败"
+					br.ErrMsg = "获取信息失败,Err:" + err.Error()
+					return
+				}
+				hasPermission = 1
+				historyRecord := new(models.AddStopTimeNewRep)
+				historyRecord.StopTime = detailNew.StopTime + stopTime
+				historyRecord.Id = detailNew.Id
+				go models.AddArticleStopTime(historyRecord)
+			} else { //无该行业权限
+				hasPermission = 3
+			}
+		}
+	} else { //潜在客户
+		if applyCount > 0 {
+			hasPermission = 5
+		} else {
+			hasPermission = 4
+		}
+	}
+Loop:
+	resp := new(models.ArticleDetailAddStopTimeRep)
+	resp.HasPermission = hasPermission
+	resp.HasFree = hasFree
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+	br.Data = resp
+}

+ 1 - 1
controllers/report.go

@@ -404,7 +404,7 @@ func (this *ReportController) ArticleCollect() {
 	}
 	if countIndustrial == 0 {
 		br.Msg = "产业不存在!"
-		br.ErrMsg = "产业不存在"
+		br.ErrMsg = "产业ID不存在:" + strconv.Itoa(industrialManagementId)
 		return
 	}
 	count, err := models.GetCygxIndustryTop(uid, industrialManagementId)

+ 1 - 0
models/article.go

@@ -29,6 +29,7 @@ type CygxArticle struct {
 	IsReport         int    `description:"是否属于报告,1是,0否"`
 	ReportType       int    `description:"报告类型,1行业报告,2产业报告,0无"`
 	FileLink         string `description:"下载预览链接"`
+	MatchTypeName    string `description:"匹配类型"`
 }
 
 //新增文章

+ 43 - 10
models/article_history_record.go

@@ -29,19 +29,21 @@ func AddCygxArticleHistoryRecord(item *CygxArticleHistoryRecord) (lastId int64,
 			o.Rollback()
 		}
 	}()
-	var count int
-	sql := `SELECT COUNT(1) AS count FROM cygx_article_history_record WHERE user_id=? AND article_id=? `
-	err = o.Raw(sql, item.UserId, item.ArticleId).QueryRow(&count)
+	//var count int
+	//sql := `SELECT COUNT(1) AS count FROM cygx_article_history_record WHERE user_id=? AND article_id=? `
+	//err = o.Raw(sql, item.UserId, item.ArticleId).QueryRow(&count)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		return
 	}
-	if count > 0 {
-		sql := `UPDATE cygx_article_history_record SET modify_time=NOW() WHERE user_id=? AND article_id=? `
-		_, err = o.Raw(sql, item.UserId, item.ArticleId).Exec()
-	} else {
-		item.ModifyTime = time.Now()
-		lastId, err = o.Insert(item)
-	}
+	//if count > 0 {
+	//	sql := `UPDATE cygx_article_history_record SET modify_time=NOW() WHERE user_id=? AND article_id=? `
+	//	_, err = o.Raw(sql, item.UserId, item.ArticleId).Exec()
+	//} else {
+	//	item.ModifyTime = time.Now()
+	//	lastId, err = o.Insert(item)
+	//}
+	item.ModifyTime = time.Now()
+	lastId, err = o.Insert(item)
 	return
 }
 
@@ -52,3 +54,34 @@ func GetUserToArticleCount(uid, articleId int) (count int, err error) {
 	err = o.Raw(sqlCount, uid, articleId).QueryRow(&count)
 	return
 }
+
+type AddStopTimeRep struct {
+	ArticleId int `description:"文章ID"`
+	StopTime  int `description:"停留时间"`
+}
+
+type AddStopTimeNewRep struct {
+	Id        int `description:"ID"`
+	ArticleId int `description:"文章ID"`
+	StopTime  int `description:"停留时间"`
+}
+
+type ArticleDetailAddStopTimeRep struct {
+	HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	HasFree       int `description:"1:已付费(至少包含一个品类的权限),2:未付费(没有任何品类权限)"`
+}
+
+func AddArticleStopTime(item *AddStopTimeNewRep) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_article_history_record SET stop_time = ? WHERE id =?`
+	_, err = o.Raw(sql, item.StopTime, item.Id).Exec()
+	return
+}
+
+//获取最新的一条阅读记录
+func GetNewArticleHistoryRecord(uid, articleId int) (item *AddStopTimeNewRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM  cygx_article_history_record WHERE user_id = ? AND article_id = ? ORDER BY id DESC LIMIT 1;`
+	err = o.Raw(sql, uid, articleId).QueryRow(&item)
+	return
+}

+ 8 - 0
models/report_mapping.go

@@ -121,3 +121,11 @@ func CheckThisCategoryNewArticleIsRead(uid, categoryId int) (count int, err erro
 	err = o.Raw(sql, uid, categoryId).QueryRow(&count)
 	return
 }
+
+//获取策略下面的所有分类
+func GetMatchTypeNamenNotNull() (items []*ReportMapping, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT category_id,match_type_name FROM cygx_report_mapping WHERE match_type_name <> ''`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 31 - 5
services/tactics.go

@@ -304,6 +304,13 @@ func SyncTacticsListAddreport() (err error) {
 		fmt.Println("GetTacticsList Err:", err.Error())
 		return
 	}
+
+	listGetMatchTypeName, errMatch := models.GetMatchTypeNamenNotNull() //手动归类的文章,不替换文章类型
+	if errMatch != nil {
+		fmt.Println("GetTacticsList Err:", errMatch.Error())
+		return
+	}
+
 	fmt.Println("list len:", len(list))
 	summaryCategoryIds := "28,32,45,50,57,62,72,74,79,84,86,88,90,93,95,96,98" //纪要库的文章类型categoty_id
 	listSummary := strings.Split(summaryCategoryIds, ",")
@@ -314,14 +321,31 @@ func SyncTacticsListAddreport() (err error) {
 		fmt.Println("GetTacticsList Err:", errper.Error())
 		return
 	}
+
+	summaryMap := make(map[int]int)
+	for _, vSum := range listSummary {
+		vSumInt, _ := strconv.Atoi(vSum)
+		summaryMap[vSumInt] = 1
+	}
+
 	for k, v := range list {
-		//是否属于纪要库的数据
-		for _, vSum := range listSummary {
-			vSumInt, _ := strconv.Atoi(vSum)
-			if v.CategoryId == vSumInt {
-				v.IsSummary = 1
+		//同步匹配类型
+		matchTypeName := ""
+		for _, vMatch := range listGetMatchTypeName {
+			if v.CategoryId == vMatch.CategoryId {
+				matchTypeName = vMatch.MatchTypeName
 			}
 		}
+		//是否属于纪要库的数据
+		if _, has := summaryMap[v.CategoryId]; has {
+			v.IsSummary = 1
+		}
+		//for _, vSum := range listSummary {
+		//	vSumInt, _ := strconv.Atoi(vSum)
+		//	if v.CategoryId == vSumInt {
+		//		v.IsSummary = 1
+		//	}
+		//}
 		//排除不属于纪要库类型的文章
 		for _, vArt := range listNoSummaryArticleIds {
 			vArtInt, _ := strconv.Atoi(vArt)
@@ -409,6 +433,7 @@ func SyncTacticsListAddreport() (err error) {
 			}
 			if isCustom == false {
 				updateParams["CategoryId"] = v.CategoryId
+				updateParams["MatchTypeName"] = matchTypeName
 			}
 			//updateParams["CategoryId"] = v.CategoryId
 			updateParams["PublishStatus"] = v.PublishStatus
@@ -457,6 +482,7 @@ func SyncTacticsListAddreport() (err error) {
 			item.IsReport = v.IsReport
 			item.ReportType = v.ReportType
 			item.FileLink = fileLink
+			item.MatchTypeName = matchTypeName
 			_, err = models.AddCygxArticles(item)
 			if err != nil {
 				fmt.Println("AddCygxArticle Err:", err.Error())