xingzai 10 meses atrás
pai
commit
63965d0174
2 arquivos alterados com 410 adições e 3 exclusões
  1. 15 0
      models/article.go
  2. 395 3
      services/article.go

+ 15 - 0
models/article.go

@@ -993,3 +993,18 @@ WHERE
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+// 获取文章列表
+func GetArticleInit13_5GuSHou() (items []*ArticleDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	art.title,
+	art.article_id
+FROM
+	cygx_article AS art
+
+WHERE
+	1 = 1  AND category_id  IN (10070,10082)  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 395 - 3
services/article.go

@@ -2297,14 +2297,22 @@ func GetYxArticleIdMap(articleIds []int) (mapResp map[int]bool) {
 
 //func init() {
 //
-//	listarticle, err := models.GetArticleInit13_5()
+//	//listarticle, err := models.GetArticleInit13_5()
+//	//fmt.Println(err)
+//	//fmt.Println("listarticle", len(listarticle))
+//	//
+//	//for _, v := range listarticle {
+//	//	HandleArticleListByApiInit13_5(v.ArticleId)
+//	//}
+//	//HandleArticleListByApiInit13_5(10825)
+//
+//	listarticle, err := models.GetArticleInit13_5GuSHou()
 //	fmt.Println(err)
 //	fmt.Println("listarticle", len(listarticle))
 //
 //	for _, v := range listarticle {
-//		HandleArticleListByApiInit13_5(v.ArticleId)
+//		HandleArticleListByApiInit13_5GuShou(v.ArticleId)
 //	}
-//	//HandleArticleListByApiInit13_5(10825)
 //
 //}
 
@@ -2691,3 +2699,387 @@ func HandleArticleListByApiInit13_5(artcleId int) (err error) {
 	AddCygxReportMappingCategoryGroupByArticleId(artcleId)
 	return err
 }
+
+func HandleArticleListByApiInit13_5GuShou(artcleId int) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("处理同步策略平台数据失败"+"GetArticleListByApi ErrMsg:"+err.Error()+"artcleId:"+strconv.Itoa(artcleId), 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ErrMsg:"+err.Error()+"artcleId:"+strconv.Itoa(artcleId), utils.EmailSendToUsers)
+		}
+	}()
+	var clueApiUrl string
+	clueApiUrl = fmt.Sprint(utils.ApiUrl, "articles/", artcleId)
+	fmt.Println(clueApiUrl)
+
+	authorization := utils.ApiAuthorization
+	body, err := PublicGetDate(clueApiUrl, authorization)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	var articleResultDate models.ArticleDetailResultApi
+	err = json.Unmarshal(body, &articleResultDate)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		return err
+	}
+	item := new(models.CygxShanghaiCompanyLog)
+	item.CreateTime = time.Now()
+	item.Url = clueApiUrl
+	item.Body = ""
+	item.Result = string(body)
+
+	articleResult := articleResultDate.Data
+
+	exitMap := make(map[int]int)
+	categoryIdMap := make(map[int]int)
+	classMap := make(map[int]int)
+	reportMap := make(map[int]int)
+	summaryMap := make(map[int]int)
+	listMap, err := models.GetArticleApiMap()
+	if err != nil {
+		fmt.Println("GetlistMap Err:", err.Error())
+		return err
+	}
+
+	//新旧分类 反向隐射,是否归类,是否是报告,是否是纪要库
+	for _, v := range listMap {
+		exitMap[v.SeriesId] = v.OldId
+		categoryIdMap[v.SeriesId] = v.OldIdMap
+		if v.IsClass == 1 {
+			classMap[v.OldId] = 1
+		}
+		if v.IsReport == 1 {
+			reportMap[v.OldId] = 1
+		}
+		if v.IsSummary == 1 {
+			summaryMap[v.OldId] = 1
+		}
+	}
+	var list []*models.Tactics2
+	var listArticleData []*models.CygxArticleData
+	var listAuthor []*models.CygxArticleAuthor
+	//如果是英文报告 ,或者香港类型那么则不同步  publish_area   :all  全部  ;hk 香港
+	if articleResult.TypeId == 9 || articleResult.PublishArea != "all" {
+		// 如果是英文报告,或者是香港报告就进行删除处理
+		err = models.UpdateArticlePublish(artcleId, 0)
+		if err != nil {
+			fmt.Println("UpdateArticlePublish Err:", err.Error())
+			return err
+		}
+		UpdateArticleResourceData(artcleId) //把数据写入 cygx_resource_data 表
+		return
+	}
+
+	var cover string
+	if articleResult.Series.Name == "图解市场" {
+		cover = GetArticleCoverByChartFirst(articleResult.Content.Body)
+	} else if articleResult.Series.Name == "行业深度" {
+		cover = articleResult.Cover
+	}
+	fmt.Println(cover)
+	//return
+	//状态等于 2 跟 4 的进行同步 IsActive 为false 软删除的也不同步
+	if exitMap[articleResult.SeriesId] > 0 && (articleResult.PublishStatus == 2 || articleResult.PublishStatus == 4) && articleResult.IsActive {
+		articleResult.PublishDate = time.Date(articleResult.PublishDate.Year(), articleResult.PublishDate.Month(), articleResult.PublishDate.Day(), articleResult.PublishDate.Hour(), articleResult.PublishDate.Minute(), articleResult.PublishDate.Second(), articleResult.PublishDate.Nanosecond(), time.Local)
+		item := new(models.Tactics2)
+		itemArticleData := new(models.CygxArticleData)
+		itemArticleData.ArticleId = articleResult.ArticleId
+		itemArticleData.Cover = articleResult.Cover
+		itemArticleData.CreateTime = time.Now()
+		listArticleData = append(listArticleData, itemArticleData)
+		itemAuthor := new(models.CygxArticleAuthor)
+		item.ArticleId = articleResult.ArticleId
+		item.Title = articleResult.Title
+		item.TitleEn = articleResult.TitleEn
+		item.File = articleResult.File
+		if articleResult.Frequency == "日度" {
+			item.UpdateFrequency = "daily"
+		} else if articleResult.Frequency == "周度" {
+			item.UpdateFrequency = "weekly"
+		} else if articleResult.Frequency == "月度" {
+			item.UpdateFrequency = "monthly"
+		} else if articleResult.Frequency == "季度" {
+			item.UpdateFrequency = "quarterly"
+		} else if articleResult.Frequency == "年度" {
+			item.UpdateFrequency = "yearly"
+		} else {
+			item.UpdateFrequency = "unknow"
+		}
+		item.CreateDate = articleResult.CreateDate
+		item.PublishDate = articleResult.PublishDate.Add(time.Hour * 8)
+		item.PublishStatus = 1
+		item.Body = articleResult.Content.Body
+		item.Abstract = articleResult.Content.Abstract
+		item.Annotation = articleResult.Content.Annotation
+		item.CategoryName = articleResult.Industry.Name
+		item.CategoryId = categoryIdMap[articleResult.SeriesId]
+		item.CategoryIdTwo = exitMap[articleResult.SeriesId]
+		item.SubCategoryName = articleResult.Series.Name
+		item.Cover = cover
+
+		fmt.Println("item.CategoryIdTwo", item.CategoryIdTwo)
+		fmt.Println("item.CategoryId", item.CategoryId)
+
+		{
+			//这两种情况特殊处理
+			if articleResult.Field.Name == "宏观利率" {
+				item.CategoryId = 10070
+				item.CategoryIdTwo = item.CategoryId
+			}
+			if articleResult.Field.Name == "信用" {
+				item.CategoryId = 10082
+				item.CategoryIdTwo = item.CategoryId
+			}
+		}
+
+		if len(articleResult.Stock) > 0 {
+			var stock string
+			for _, vS := range articleResult.Stock {
+				stock += vS + "/"
+			}
+			stock = strings.TrimRight(stock, "/")
+			item.Stock = stock
+		}
+		item.FieldName = articleResult.Field.Name
+		item.TypeName = articleResult.Type.Name
+		item.UpdateDate = articleResult.UpdateDate
+		item.CeLueFieldId = articleResult.Field.Id
+		list = append(list, item)
+		itemAuthor.ArticleId = articleResult.ArticleId
+		itemAuthor.Name = articleResult.Author.Name
+		itemAuthor.Mobile = articleResult.Author.PhoneNumber
+		fmt.Println(articleResult.Cover)
+		listAuthor = append(listAuthor, itemAuthor)
+	} else {
+		// 如果这篇文章没有发布,那么就不作处理。
+		//err = models.UpdateArticlePublish(artcleId, 0)
+		//if err != nil {
+		//	fmt.Println("UpdateArticlePublish Err:", err.Error())
+		//	return err
+		//}
+		//UpdateArticleResourceData(artcleId) //把数据写入 cygx_resource_data 表
+		//go UpdateResourceData(artcleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
+		return
+	}
+
+	fmt.Println("同步文章条数:", len(list))
+	listCustomArticle, err := models.GetCustomArticleId() //手动归类的文章,不替换文章类型
+	if err != nil {
+		fmt.Println("GetTacticsList Err:", err.Error())
+		return err
+	}
+	listGetMatchTypeName, errMatch := models.GetMatchTypeNamenNotNull() //手动归类的文章,不替换文章类型
+	if errMatch != nil {
+		fmt.Println("GetTacticsList Err:", errMatch.Error())
+		return err
+	}
+	//mapCategoryIdSet := make(map[int]int)
+	//for _, vMatch := range listGetMatchTypeName {
+	//	mapCategoryIdSet[vMatch.CategoryId] = vMatch.CategoryIdSet
+	//}
+	fmt.Println("list len:", len(list))
+	noSummaryArticleIds := "" //非纪要库类型的文章ID
+	listNoSummaryArticleIds := strings.Split(noSummaryArticleIds, ",")
+	for k, v := range list {
+		//同步匹配类型
+		matchTypeName := ""
+		for _, vMatch := range listGetMatchTypeName {
+			if v.CategoryId == vMatch.CategoryId {
+				matchTypeName = vMatch.MatchTypeName
+			}
+		}
+		//是否属于纪要库的数据
+		//if _, has := summaryMap[v.CategoryId]; has {
+		//	v.IsSummary = 1
+		//}
+		if v.TypeName == "纪要" {
+			v.IsSummary = 1
+		}
+		//排除不属于纪要库类型的文章
+		for _, vArt := range listNoSummaryArticleIds {
+			vArtInt, _ := strconv.Atoi(vArt)
+			if v.ArticleId == vArtInt {
+				v.IsSummary = 0
+			}
+		}
+		if _, has := reportMap[v.CategoryIdTwo]; has {
+			v.IsReport = 1
+			if _, ok := classMap[v.CategoryIdTwo]; ok {
+				v.IsClass = 1
+				v.ReportType = 1 //是否属于行业报告
+			} else {
+				v.ReportType = 2 //是否属于产业报告
+			}
+		}
+		v.Department = "弘则权益研究"
+		//判断是否已经存在
+		if v.ArticleId < 0 {
+			fmt.Println("AddCygxArticle Err:")
+			return err
+		}
+		var count int
+		count, err = models.GetArticleCountById(v.ArticleId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			fmt.Println("AddCygxArticle Err:", err.Error())
+			return err
+		}
+		v.Body = strings.Replace(v.Body, "http://vmp.hzinsights.com", "https://vmp.hzinsights.com", -1)
+		expertNumStr, expertContentStr, interviewDateStr, _, bodyReturn := BodyAnalysis2(v.Body)
+		if strings.Index(v.Body, "报告全文(") > 0 && strings.Index(v.Body, "PDF格式报告下载.pdf") > 0 {
+			v.Body = strings.Replace(v.Body, "报告全文(", "", -1)
+			v.Body = strings.Replace(v.Body, "PDF格式报告下载.pdf", "", -1)
+			v.Body = strings.Replace(v.Body, "):", "", -1)
+		}
+		var titleNew string
+		titleNew = v.Title
+		// 7资金流向 、11大类资产 、51每日复盘 、80医药周报、9估值研究
+		if v.CategoryId == 7 || v.CategoryId == 11 || v.CategoryId == 51 || v.CategoryId == 9 {
+			if v.UpdateFrequency == "daily" {
+				var daystr string
+				daystr = strconv.Itoa(v.PublishDate.Day())
+				if len(daystr) == 1 {
+					daystr = "0" + daystr
+				}
+				titleNew = v.Title + "(" + strconv.Itoa(v.PublishDate.Year())[2:len(strconv.Itoa(v.PublishDate.Year()))-0] + v.PublishDate.Format("01") + daystr + ")"
+			} else if v.UpdateFrequency == "weekly" {
+				titleNew = v.Title + utils.WeekByDate(v.PublishDate)
+			}
+		}
+		if v.CategoryId == 80 {
+			titleNew = v.Title + utils.WeekByDate(v.PublishDate)
+		}
+
+		//类型是综述报告的,不区分是什么系列,统一归类到对应产业的路演精华
+		if articleResult.Type.Name == "综述报告" {
+			detailCategory, err := models.GetdetailByCategoryIdLyjh(v.CategoryIdTwo)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				return err
+			}
+			v.CategoryId = detailCategory.CategoryId
+			v.IsSummary = 0
+		}
+
+		if count > 0 {
+			fmt.Println(k, v.ArticleId, "edit")
+
+			bodyText, _ := GetReportContentTextSubNew(v.Body)
+
+			var isCustom bool
+			updateParams := make(map[string]interface{})
+			//updateParams["Title"] = v.Title
+			updateParams["Title"] = titleNew
+			updateParams["TitleEn"] = v.TitleEn
+			updateParams["UpdateFrequency"] = v.UpdateFrequency
+			updateParams["CreateDate"] = v.CreateDate
+			updateParams["PublishDate"] = v.PublishDate
+			//updateParams["Body"] = html.EscapeString(v.Body)
+			updateParams["Body"] = html.EscapeString(bodyReturn)
+			updateParams["BodyText"] = bodyText
+			updateParams["Abstract"] = html.EscapeString(v.Abstract)
+			updateParams["CategoryName"] = v.CategoryName
+			for _, vCustom := range listCustomArticle {
+				if v.ArticleId == vCustom.ArticleId {
+					fmt.Println("手动归类的文章:" + strconv.Itoa(v.ArticleId))
+					isCustom = true
+				}
+			}
+			if isCustom == false {
+				updateParams["CategoryId"] = v.CategoryId
+				updateParams["MatchTypeName"] = matchTypeName
+				updateParams["IsSummary"] = v.IsSummary
+				updateParams["IsReport"] = v.IsReport
+				updateParams["ReportType"] = v.ReportType
+				updateParams["SubCategoryName"] = v.SubCategoryName
+			}
+			//updateParams["CategoryId"] = v.CategoryId
+			updateParams["PublishStatus"] = 1
+			updateParams["ExpertBackground"] = expertContentStr
+			updateParams["ExpertNumber"] = expertNumStr
+			updateParams["InterviewDate"] = interviewDateStr
+			//updateParams["IsClass"] = v.IsClass
+			v.Department = "弘则权益研究"
+			updateParams["Department"] = v.Department
+			updateParams["FileLink"] = v.File
+			updateParams["Stock"] = v.Stock
+			updateParams["FieldName"] = v.FieldName
+			updateParams["Annotation"] = v.Annotation
+			updateParams["TypeName"] = v.TypeName
+			updateParams["ModifyTimeByCl"] = v.UpdateDate
+			updateParams["CeLueFieldId"] = v.CeLueFieldId
+			updateParams["Cover"] = v.Cover
+			whereParam := map[string]interface{}{"article_id": v.ArticleId}
+			err = models.UpdateByExpr(models.CygxArticle{}, whereParam, updateParams)
+			if err != nil {
+				fmt.Println("UpdateByExpr Err:" + err.Error())
+				return err
+			}
+			fmt.Println("v.ReportType", v.ReportType)
+
+			if v.ReportType == 2 {
+				var subjectStr string
+				var industrialManagementIdStr string
+				var industrialSubjectIdStr string
+
+				sliceSubjects := strings.Split(v.Stock, "/")
+				mapManagementForSubject := make(map[string]string)
+				mapIndustrialId := make(map[int]int)
+				if len(sliceSubjects) > 0 {
+					for _, vSubject := range sliceSubjects {
+						sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
+						sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
+						subject := sliceXiahuaxian[0]
+						subjectStr += "'" + subject + "',"
+					}
+					//获取该产业下所对应的行业图片
+					detailCategory, errCategory := models.GetdetailByCategoryIdOne(v.CategoryId)
+					if errCategory != nil {
+						fmt.Println("GetdetailByCategoryIdOne Err:", err.Error())
+						return err
+					}
+					subjectStr = strings.TrimRight(subjectStr, ",")
+					if subjectStr != "" {
+						listIndustrial, err := models.GetIndustrialManagementForSubjecName(subjectStr, detailCategory.ChartPermissionId)
+						if err != nil {
+							fmt.Println("GetIndustrialManagementForSubjecName Err:", err.Error())
+							return err
+						}
+						subjectStr = strings.Replace(subjectStr, "','", "】【", -1)
+						subjectStr = strings.Replace(subjectStr, "'", "", -1)
+						subjectStr = "【" + subjectStr + "】"
+						if len(listIndustrial) > 0 {
+							for _, vIndustrial := range listIndustrial {
+								if _, ok := mapIndustrialId[vIndustrial.IndustrialManagementId]; !ok {
+									industrialManagementIdStr += strconv.Itoa(vIndustrial.IndustrialManagementId) + ","
+								}
+								mapIndustrialId[vIndustrial.IndustrialManagementId] = vIndustrial.IndustrialManagementId
+								industrialSubjectIdStr += strconv.Itoa(vIndustrial.IndustrialSubjectId) + ","
+								mapManagementForSubject[vIndustrial.IndustryName] += vIndustrial.SubjectName + "/"
+								if vIndustrial.LayoutTime == "0000-00-00 00:00:00" {
+									go models.UpdateIndustrialManagementLayoutTime(v.PublishDate.AddDate(0, 0, -10).Format(utils.FormatDateTime), vIndustrial.IndustrialManagementId)
+								}
+							}
+
+							industrialManagementIdStr = strings.TrimRight(industrialManagementIdStr, ",")
+							industrialSubjectIdStr = strings.TrimRight(industrialSubjectIdStr, ",")
+							if industrialManagementIdStr != "" {
+								err = models.ReportArticleClassificationEditNew(artcleId, industrialManagementIdStr, v.ArticleId, industrialSubjectIdStr)
+								if err != nil {
+									fmt.Println("ReportArticleClassificationEditNew Err:", err.Error())
+									return err
+								}
+							}
+						}
+						//}
+					}
+				}
+
+			}
+		}
+	}
+
+	AddComprehensiveIndustrialSource("Hz", artcleId) // 同步到综合页面的搜索引擎(添加产业资源包)
+
+	AddCygxReportMappingCategoryGroupByArticleId(artcleId)
+	return err
+}