Przeglądaj źródła

6.5研选类型修改

xingzai 2 lat temu
rodzic
commit
8786990fd7

+ 2 - 2
controllers/home.go

@@ -460,9 +460,9 @@ func (this *HomeController) ListHomeArtAndChart() {
 			page = paging.GetPaging(currentIndex, pageSize, total)
 			if categoryId != "" {
 				condition += ` AND category_id IN(` + categoryId + `)`
-				condition += ` OR ( category_name  LIKE '%` + categoryinfo.PermissionName + `%' AND publish_status = 1 AND is_summary = 1 )`
+				condition += ` OR ( category_name  LIKE '%研选` + `%' AND publish_status = 1 AND is_summary = 1 )`
 			} else {
-				condition += ` AND  category_name   LIKE '%` + categoryinfo.PermissionName + `%'`
+				condition += ` AND  category_name   LIKE '%研选` + `%'`
 			}
 		}
 		//永续客户无法查看研选分类的内容

+ 20 - 8
controllers/report.go

@@ -1408,6 +1408,12 @@ func (this *ReportController) ResearchDetail() {
 		br.ErrMsg = "获取子类信息失败,Err:" + err.Error()
 		return
 	}
+	listArticleType, err := models.GetCygxArticleTypeList()
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取文章类型数据失败,Err:" + err.Error()
+		return
+	}
 	for k, v := range listFirst {
 		listSecond, err := models.GetResearchSummarylogSonListSecond(articleId, v.Type)
 		if err != nil && err.Error() != utils.ErrNoRow() {
@@ -1422,13 +1428,19 @@ func (this *ReportController) ResearchDetail() {
 				br.ErrMsg = "获取信息失败,Err:" + err.Error()
 				return
 			}
-			if v2.ChartPermissionId == utils.YanxSummaryPermissionId {
-				listSecond[k2].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
-				listSecond[k2].PermissionName = "研选纪要"
-			} else if v2.ChartPermissionId == utils.YanxViewpointPermissionId {
-				listSecond[k2].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
-				listSecond[k2].PermissionName = "研选观点"
+			for _, vType := range listArticleType {
+				if v2.ChartPermissionId == vType.YanxPermissionId {
+					listSecond[k2].IcoLink = vType.IcoLink
+					listSecond[k2].PermissionName = vType.ArticleTypeName
+				}
 			}
+			//if v2.ChartPermissionId == utils.YanxSummaryPermissionId {
+			//	listSecond[k2].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
+			//	listSecond[k2].PermissionName = "买方研选纪要"
+			//} else if v2.ChartPermissionId == utils.YanxViewpointPermissionId {
+			//	listSecond[k2].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
+			//	listSecond[k2].PermissionName = "买方研选观点"
+			//}
 			if len(listThird) > 0 {
 				for k3, v3 := range listThird {
 					if v3.VideoUrl != "" {
@@ -1461,7 +1473,7 @@ func (this *ReportController) ResearchDetail() {
 			listFirst[k].ListName = "事件点评"
 			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202110/20211020/2a5cXafO3Iws4QcFp1bd5WPdYikV.png"
 		} else if v.Type == "YANX" {
-			listFirst[k].ListName = "研选"
+			listFirst[k].ListName = "买方研选"
 			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
 		}
 	}
@@ -1583,7 +1595,7 @@ func (this *ReportController) MinutesDetailV4() {
 			listFirst[k].ListName = "上市公司调研纪要篇"
 			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211101/ujHXB48I8ay9T0XoPRI7lorz7OkL.png"
 		} else if v.Type == "YANX" {
-			listFirst[k].ListName = "研选纪要"
+			listFirst[k].ListName = "买方研选纪要"
 			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
 		}
 	}

+ 34 - 18
models/article.go

@@ -164,15 +164,6 @@ func GetArticleDetailById(articleId int) (item *ArticleDetail, err error) {
 
 func GetSellerList(articleId int) (items []*SellerRep, err error) {
 	o := orm.NewOrm()
-	//o.Using("tactics")
-	//sql := `SELECT
-	//	ac.phone_number as  seller_mobile,
-	//	ac.name as  seller_name
-	//	FROM
-	//	article_author AS au
-	//	INNER JOIN account_client as ac ON au.author_id = ac.phone_number
-	//	WHERE article_id = ?`
-
 	sql := `SELECT
 		au.mobile as  seller_mobile,
 		au.name as  seller_name
@@ -197,15 +188,6 @@ func GetArticleDetailByIdStr(articleIdStr string) (items []*ArticleDetail, err e
 	return
 }
 
-//func GetArticlePermission(categoryName string) (item []*ChartPermission, err error) {
-//	o := orm.NewOrm()
-//	sql := ` SELECT b.* FROM cygx_permission_mapping AS a
-//			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
-//			WHERE a.sub_category_name=? `
-//	_, err = o.Raw(sql, categoryName).QueryRows(&item)
-//	return
-//}
-
 func GetArticlePermission(companyId int) (item *ChartPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
@@ -241,6 +223,14 @@ func ModifyArticleExpert(articleId int, expertNumStr, expertContentStr, intervie
 	return
 }
 
+//更改文章发布状态
+func UpdateArticlePublish(articleId, publishStatus int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_article SET publish_status=? WHERE article_id=? `
+	_, err = o.Raw(sql, publishStatus, articleId).Exec()
+	return
+}
+
 type ArticleDetailTest struct {
 	ArticleId int    `description:"报告id"`
 	Title     string `description:"标题"`
@@ -506,6 +496,12 @@ type ArticleResultApi struct {
 	Msg  string                 `json:"msg"`
 }
 
+type ArticleDetailResultApi struct {
+	Data ArticleResultApidate `json:"data"`
+	Code int                  `json:"code"`
+	Msg  string               `json:"msg"`
+}
+
 type ArticleResultApidate struct {
 	ArticleId     int                      `json:"id"`
 	Title         string                   `json:"title"`
@@ -615,3 +611,23 @@ WHERE
 	err = o.Raw(sql).QueryRow(&articleid)
 	return
 }
+
+type CygxArticleType struct {
+	ArticleTypeId      int       `orm:"column(article_type_id);pk";description:"文章类型ID"`
+	ArticleTypeName    string    `description:"类型名称"`
+	Sort               int       `description:"排序字段"`
+	CreateTime         time.Time `description:"创建时间"`
+	ModifyTime         time.Time `description:"最后修改时间"`
+	IsSendEs           int       `description:"这种报告类型是否同步到Es"`
+	YanxPermissionId   int       `description:"研选类型所对应的ID"`
+	YanxPermissionName string    `description:"研选类型所对应的名称"`
+	IcoLink            string    `description:"图标链接地址"`
+}
+
+//报告类型列表
+func GetCygxArticleTypeList() (items []*CygxArticleType, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_article_type ORDER BY sort DESC`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 29 - 0
models/article_celue_push.go

@@ -0,0 +1,29 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type CygxArticleCeluePush struct {
+	Id         int    `description:"新ID"`
+	ArticleId  int    `description:"文章ID"`
+	IsHandle   int    `description:"文章ID"`
+	Action     string `description:"日志类型:add,edit,move"`
+	ModifyTime string `description:"修改时间"`
+	CreateTime string `description:"创建时间"`
+}
+
+func GetArticleCeluePushList() (item []*CygxArticleCeluePush, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT *  FROM	cygx_article_celue_push WHERE	is_handle = 0   `
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}
+
+//更改推送内容是否处理状态
+func UpdateCygxArticleCeluePush(id int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_article_celue_push SET is_handle=1 WHERE id=? `
+	_, err = o.Raw(sql, id).Exec()
+	return
+}

+ 570 - 549
services/article.go

@@ -9,8 +9,6 @@ import (
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
 	"html"
-	"io/ioutil"
-	nhttp "net/http"
 	"net/url"
 	"strconv"
 	"strings"
@@ -300,146 +298,482 @@ func FixArticleFirstCount(body string) (contentSub string, err error) {
 	return
 }
 
-func GetArticleListByApi(cont context.Context) (err error) {
-	defer func() {
+func SynchronizationArtclehistory() {
+	fmt.Println("同步开始")
+	list, err := models.GetArticleHistoryList()
+	if err != nil {
+		fmt.Println("获取列表失败", err)
+	}
+	fmt.Println(len(list))
+	for _, v := range list {
+		//endDate := v.ModifyTime.Add(+time.Minute * 10).Format(utils.FormatDateTime)
+		//detail, err := models.GetNewArticleHistoryRecordNewpv(v.UserId, v.ArticleId, endDate)
+		//if err != nil && err.Error() != utils.ErrNoRow() {
+		//	fmt.Println("获取信息失败", err)
+		//}
+		v.OutType = 1
+		//fmt.Println(v.Id)
+		//if detail == nil {
+		//	_, err = models.AddCygxArticleViewRecordNewpv(v)
+		//	if err != nil {
+		//		fmt.Println("新增失败", err)
+		//	}
+		//} else {
+		//	err = models.UpdateCygxArticleViewRecordNewpvList(v, v.StopTime)
+		//	if err != nil {
+		//		fmt.Println("修改失败", err)
+		//	}
+		//}
+		newId, err := models.AddCygxArticleViewRecordNewpv(v)
+		fmt.Println("新增", newId)
 		if err != nil {
-			//fmt.Println("GetArticleListByApi Err:" + err.Error())
-			go utils.SendAlarmMsg("同步策略平台数据失败", 2)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			fmt.Println("新增失败", err)
 		}
-	}()
-	requestUrl := "https://vmp.hzinsights.com/v2api/articles/mp?take=100&skip=0&publish_status=2,4&order=publish_date&sort=DESC"
-	method := "GET"
-	client := &nhttp.Client{}
-	req, err := nhttp.NewRequest(method, requestUrl, nil)
+	}
+	fmt.Println("同步结束")
+}
+
+//统计报表
+func StatisticalReport() {
+	var isSummaryNumAll, isClassNum, pvNumAll, uvNumAll int
+	list, err := models.GetChartPermissionActivity()
 	if err != nil {
-		fmt.Println("GetListApi Err:", err.Error())
-		return err
+		fmt.Println("获取列表失败", err)
+	}
+	for _, v := range list {
+		var listPv []*models.ReportMappingStatistical
+		if v.PermissionName == "研选" {
+			listPv, err = models.GetStatisticalReportArtilceExpert()
+			if err != nil {
+				fmt.Println("获取Pv列表失败", err)
+			}
+		} else {
+			listPv, err = models.GetStatisticalReportArtilce(v.ChartPermissionId)
+			if err != nil {
+				fmt.Println("获取Pv列表失败", err)
+			}
+		}
+		var pvNum, uvNum, isSummaryNum int
+		for _, v2 := range listPv {
+			pvNum += v2.Pv
+			uvNum += v2.Uv
+			if v2.IsSummary == "1" {
+				isSummaryNum += 1
+			}
+			if v2.IsClass == "1" && v.ChartPermissionId <= 22 {
+				isClassNum += 1
+			}
+			if v2.IsSummary == "1" && v.ChartPermissionId <= 22 {
+				isSummaryNumAll += 1
+			}
+		}
+		if v.ChartPermissionId <= 22 {
+			pvNumAll += pvNum
+			uvNumAll += uvNum
+		}
+		fmt.Println(v.PermissionName+"行业", len(listPv), "篇,其中主观类报告", isSummaryNum, "篇,客观类报告", len(listPv)-isSummaryNum, "篇。共产生阅读量pv-,", pvNum, ",uv-", uvNum)
 	}
-	req.Header.Add("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJuYW1lIjoi5YW25LuWIiwiZW50cmFuY2UiOiJwYXNzd3dvcmQiLCJpYXQiOjE2MzQ4NzA1OTQsImV4cCI6MTYzNDg3NDE5NH0.tho2L9jsbDPn8ltEGUVDve_nHsh0Kzf6ZrSz0RcZ0ag")
-	res, err := client.Do(req)
+	fmt.Println("目前同步四大行业的总报告(已归类)数量", isClassNum, "篇,其中主观类报告", isSummaryNumAll, "篇,客观类报告", isClassNum-isSummaryNumAll, "篇。共产生阅读量pv-", pvNumAll, ",uv-", uvNumAll)
+	var totalOnline int        //线上
+	var totalOffline int       //线下
+	var totalPeople int        //共累计预约外呼人数
+	var totalSignUpOff int     //线下报名人数
+	var totalSignUpOffTime int //线下报名人数
+	var totalPeopleMeet int    //线下参会人数
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) FROM cygx_activity WHERE activity_type_id IN (1,2,3) AND publish_status = 1 AND is_submit_meeting = 1 AND activity_time <= NOW();`
+	err = o.Raw(sql).QueryRow(&totalOnline)
 	if err != nil {
-		fmt.Println(err)
-		return err
+		fmt.Println("获取线上", err)
 	}
-	defer res.Body.Close()
-	body, err := ioutil.ReadAll(res.Body)
+	sql = `SELECT COUNT(1) FROM cygx_activity WHERE activity_type_id IN (4,5,6) AND publish_status = 1 AND is_submit_meeting = 1 	AND activity_time <= NOW();`
+	err = o.Raw(sql).QueryRow(&totalOffline)
 	if err != nil {
-		fmt.Println("Getres.Body Err:", err.Error())
-		return err
+		fmt.Println("获取线下", err)
 	}
-	var pdfResult models.ArticleResultApi
-	err = json.Unmarshal(body, &pdfResult)
+	sql = `SELECT COUNT( 1 ) FROM
+			cygx_activity_signup  as s 
+			INNER JOIN cygx_activity as a ON  a.activity_id = s.activity_id
+		WHERE
+			s.do_fail_type = 0
+			AND a.is_submit_meeting = 1
+			AND a.activity_time <= NOW()
+			AND a.publish_status = 1`
+	err = o.Raw(sql).QueryRow(&totalPeople)
 	if err != nil {
-		fmt.Println("Getres.pdfResult Err:", err.Error())
-		return err
+		fmt.Println("共累计预约外呼人数", err)
 	}
-	exitMap := make(map[int]int)
-	classMap := make(map[int]int)
-	reportMap := make(map[int]int)
-	summaryMap := make(map[int]int)
-	listMap, err := models.GetArticleApiMap()
+
+	sql = `SELECT COUNT( 1 ) FROM
+			cygx_activity_signup  as s 
+			INNER JOIN cygx_activity as a ON  a.activity_id = s.activity_id
+		WHERE
+			s.do_fail_type = 0
+			AND a.is_submit_meeting = 1
+			AND a.activity_time <= NOW()
+			AND a.activity_type_id IN (4,5,6)
+			AND a.publish_status = 1`
+	err = o.Raw(sql).QueryRow(&totalSignUpOff)
 	if err != nil {
-		fmt.Println("GetlistMap Err:", err.Error())
-		return err
+		fmt.Println("共累计预约外呼人数", err)
 	}
-	openIdList, err := models.GetUserRecordListByMobile(4, utils.ArticleTaskClassMobile)
+
+	sql = `SELECT COUNT( 1 ) FROM
+			cygx_activity_signup  as s 
+			INNER JOIN cygx_activity as a ON  a.activity_id = s.activity_id
+		WHERE
+			s.do_fail_type = 0
+			AND a.publish_status = 1
+			AND a.is_submit_meeting = 1
+			AND a.activity_time <= NOW()
+			AND a.is_submit_meeting = 1
+			AND a.activity_type_id IN (4,5,6);`
+	err = o.Raw(sql).QueryRow(&totalSignUpOffTime)
 	if err != nil {
-		fmt.Println(err)
-		return err
+		fmt.Println("线下报名参会人数", err)
 	}
-	fmt.Println(openIdList)
-	//新旧分类 反向隐射,是否归类,是否是报告,是否是纪要库
-	for _, v := range listMap {
-		exitMap[v.Id] = v.OldId
-		if v.IsClass == 1 {
-			classMap[v.OldId] = 1
-		}
-		if v.IsReport == 1 {
-			reportMap[v.OldId] = 1
-		}
-		if v.IsSummary == 1 {
-			summaryMap[v.OldId] = 1
-		}
+
+	sql = `SELECT COUNT( 1 ) FROM
+			cygx_activity_signup  as s 
+			INNER JOIN cygx_activity as a ON  a.activity_id = s.activity_id
+		WHERE
+			s.do_fail_type = 0
+			AND a.is_submit_meeting = 1
+			AND a.activity_time <= NOW()
+			AND a.publish_status = 1
+			AND s.is_meeting = 1
+			AND a.activity_type_id IN (4,5,6);`
+	err = o.Raw(sql).QueryRow(&totalPeopleMeet)
+	if err != nil {
+		fmt.Println("线下参会人数", err)
 	}
-	listData := pdfResult.Data
-	var list []*models.Tactics2
-	var listAuthor []*models.CygxArticleAuthor
-	for _, v := range listData {
-		//状态等于 2 跟 4 的进行同步
-		if exitMap[v.SeriesId] > 0 && (v.PublishStatus == 2 || v.PublishStatus == 4) {
-			v.PublishDate = time.Date(v.PublishDate.Year(), v.PublishDate.Month(), v.PublishDate.Day(), v.PublishDate.Hour(), v.PublishDate.Minute(), v.PublishDate.Second(), v.PublishDate.Nanosecond(), time.Local)
-			item := new(models.Tactics2)
-			itemAuthor := new(models.CygxArticleAuthor)
-			item.ArticleId = v.ArticleId
-			item.Title = v.Title
-			item.TitleEn = v.TitleEn
-			item.File = v.File
-			if v.Frequency == "日度" {
-				item.UpdateFrequency = "daily"
-			} else if v.Frequency == "周度" {
-				item.UpdateFrequency = "weekly"
-			} else if v.Frequency == "月度" {
-				item.UpdateFrequency = "monthly"
-			} else if v.Frequency == "季度" {
-				item.UpdateFrequency = "quarterly"
-			} else if v.Frequency == "年度" {
-				item.UpdateFrequency = "yearly"
-			} else {
-				item.UpdateFrequency = "unknow"
-			}
-			item.CreateDate = v.CreateDate
-			item.PublishDate = v.PublishDate.Add(time.Hour * 8)
-			item.PublishStatus = 1
-			item.Body = v.Content.Body
-			item.Abstract = v.Content.Abstract
-			item.CategoryName = v.Industry.Name
-			item.CategoryId = exitMap[v.SeriesId]
-			item.SubCategoryName = v.Series.Name
-			if len(v.Stock) > 0 {
-				var stock string
-				for _, vS := range v.Stock {
-					stock += vS + "/"
-				}
-				stock = strings.TrimRight(stock, "/")
-				item.Stock = stock
-			}
-			item.FieldName = v.Field.Name
-			list = append(list, item)
-			itemAuthor.ArticleId = v.ArticleId
-			itemAuthor.Name = v.Author.Name
-			itemAuthor.Mobile = v.Author.PhoneNumber
-			listAuthor = append(listAuthor, itemAuthor)
-		}
+
+	fmt.Println("共上线活动", totalOnline+totalOffline, "个,其中线上", totalOnline, "个,线下", totalOffline, "个")
+	fmt.Println("共累计预约外呼人数", totalPeople, "人")
+	fmt.Println("报名线下参会", totalSignUpOff, "人,实际到会人数", totalPeopleMeet, "人,线下到会率约", totalPeopleMeet*100/totalSignUpOff, "%")
+
+	num := totalPeopleMeet / totalSignUpOffTime
+	fmt.Println(num)
+	fmt.Println(totalOnline)
+	fmt.Println(totalOffline)
+	fmt.Println(totalPeople)
+	fmt.Println(totalSignUpOff)
+	fmt.Println(totalPeopleMeet)
+	fmt.Println(totalSignUpOffTime)
+	fmt.Println(totalPeopleMeet / totalSignUpOffTime)
+	return
+
+}
+
+// UserViewRedisData 阅读数据
+type UserViewRedisData struct {
+	Mobile      string `json:"mobile"`
+	Email       string `json:"email"`
+	RealName    string `json:"real_name"`
+	CompanyName string `json:"company_name"`
+	ViewTime    string `json:"view_time" description:"阅读时间,格式:2022-02-17 13:06:13"`
+	ProductId   int    `json:"product_id" description:"报告所属产品,ficc:1,权益:2"`
+	CompanyId   int    `json:"company_id" description:"客户id"`
+}
+
+type ReportViewRecord struct {
+	Id          int       `orm:"column(id);pk"`
+	UserId      int       `description:"用户id"`
+	ReportId    int       `description:"报告id"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	RealName    string    `description:"用户实际姓名"`
+	CompanyName string    `description:"公司名称"`
+	CreateTime  time.Time `description:"创建时间"`
+}
+
+// PushViewRecordNewRedisData 阅读数据加入到redis
+func PushViewRecordNewRedisData(reportViewRecord *ReportViewRecord, companyId int) bool {
+	data := &UserViewRedisData{
+		Mobile:      reportViewRecord.Mobile,
+		Email:       reportViewRecord.Email,
+		RealName:    reportViewRecord.RealName,
+		CompanyName: reportViewRecord.CompanyName,
+		ViewTime:    reportViewRecord.CreateTime.Format(utils.FormatDateTime),
+		ProductId:   2,
+		CompanyId:   companyId,
 	}
-	//同步作者
-	for _, v := range listAuthor {
-		var count int
-		count, err = models.GetActivityAuthorCount(v.ArticleId, v.Mobile)
+	if utils.Re == nil {
+		err := utils.Rc.LPush(utils.CACHE_KEY_USER_VIEW, data)
 		if err != nil {
-			fmt.Println("GetCount Err:", err.Error())
-			return err
-		}
-		if count == 0 {
-			_, err = models.AddCygxActivityAuthor(v)
-			if err != nil {
-				fmt.Println("AddCygxActivityAuthor Err:", err.Error())
-				return err
-			}
+			fmt.Println("PushViewRecordNewRedisData LPush Err:" + err.Error())
 		}
+		return true
 	}
-	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
-	}
-	fmt.Println("list len:", len(list))
+	return false
+}
+
+//func GetCeLueArticlePv() {
+//	sum := 0
+//	for i := 0; i <= 450; i++ {
+//		if i >= 102 {
+//			//GetCeLueArticlePvs(strconv.Itoa(i * 1000))
+//		}
+//	}
+//	fmt.Println(sum)
+//}
+
+//获取策略平台报告阅读数据
+func GetCeLueArticlePv(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("同步策略平台阅读数据失败", 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetCeLueArticlePv ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	startTime := time.Now().Add(-time.Minute * 12).Format("2006-01-02 15:04:05")
+	endTime := time.Now().Format("2006-01-02 15:04:05")
+	requestUrl := utils.ApiUrl + "backend/statistics_access?take=1000&skip=0&sort=ASC&mode=all&"
+	encodeData := url.Values{}
+	encodeData.Add("start_dt", startTime)
+	encodeData.Add("end_dt", endTime)
+	encodeStr := encodeData.Encode()
+	requestUrl += encodeStr
+	authorization := utils.ApiAuthorization
+	body, err := PublicGetDate(requestUrl, authorization)
+	if err != nil {
+		return
+	}
+	var chartResult models.CeLueArticleResultApi
+	err = json.Unmarshal(body, &chartResult)
+	if err != nil {
+		fmt.Println(err)
+		return err
+	}
+	mapMobileArticleId := make(map[string]int)
+	//获取当天阅读记录
+	listPv, err := models.GetArticleHistoryRecordAllList()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		fmt.Println("获取当天阅读记录失败", err)
+		return err
+	}
+	if len(listPv) > 0 {
+		for _, v := range listPv {
+			mapMobileArticleId[fmt.Sprint(v.Mobile, "_", v.ArticleId)] = v.ArticleId
+		}
+	}
+	for _, v := range chartResult.Data {
+		//fmt.Println(v.ArticleId)
+		item := new(models.CygxCelueArticleHistoryRecord)
+		item.CelueHistoryId = v.CelueHistoryId
+		item.Mobile = v.Mobile
+		item.ArticleId = v.ArticleId
+		if v.CrmUser != nil {
+			item.RealName = v.CrmUser.RealName
+		}
+		if v.CompanyName != nil {
+			item.CompanyName = v.CompanyName.RealName
+		}
+		item.CreateDateApi = time.Now()
+		t1, _ := time.Parse("2006-01-02T15:04:05Z", v.CreateDate)
+		item.CreateTime = t1.Add(+time.Hour * 8).Format(utils.FormatDateTime)
+		count, err := models.GetCeLueArticleCountById(v.CelueHistoryId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			return err
+		}
+		if count == 0 {
+			_, err := models.AddCeLueArticle(item, mapMobileArticleId)
+			if err != nil {
+				fmt.Println(err)
+				return err
+			}
+		}
+	}
+
+	//处理同步过来的阅读记录所属用户
+	var condition string
+	condition = ` AND create_time  > ` + "'" + startTime + "'"
+	listArticlePv, err := models.GetArticleHistoryRecordAllByMobileList(condition)
+	if err != nil {
+		fmt.Println("GetArticleHistoryRecordAllByMobileList ,Err" + err.Error())
+	}
+	for _, v := range listArticlePv {
+		if v.Mobile != "" {
+			user, err := models.GetWxUserItemByMobile(v.Mobile)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				fmt.Println("GetWxUserItemByUserId ,Err" + err.Error())
+			}
+			if user != nil {
+				err = models.UpdateCygxArticleHistoryRecordAll(user)
+				if err != nil {
+					fmt.Println("UpdateCygxArticleCollect ,Err" + err.Error())
+				}
+			}
+		}
+	}
+	return
+
+}
+
+func GetArticleListByApi(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			//fmt.Println("GetArticleListByApi Err:" + err.Error())
+			go utils.SendAlarmMsg("同步策略平台数据失败", 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+
+	listUpdateArticle, err := models.GetArticleCeluePushList()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return err
+	}
+	//如果长度为零就不处理
+	if len(listUpdateArticle) == 0 {
+		return err
+	}
+	for _, v := range listUpdateArticle {
+		go HandleArticleListByApi(v.ArticleId, v.Id)
+	}
+
+	return
+}
+
+//处理同步过来的文章
+func HandleArticleListByApi(artcleId, celuePushId int) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("处理同步策略平台数据失败", 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ErrMsg:"+err.Error(), 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
+	}
+	articleResult := articleResultDate.Data
+	exitMap := 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
+	}
+	openIdList, err := models.GetUserRecordListByMobile(4, utils.ArticleTaskClassMobile)
+	if err != nil {
+		fmt.Println(err)
+		return err
+	}
+	fmt.Println(openIdList)
+	//新旧分类 反向隐射,是否归类,是否是报告,是否是纪要库
+	for _, v := range listMap {
+		exitMap[v.Id] = v.OldId
+		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 listAuthor []*models.CygxArticleAuthor
+
+	//状态等于 2 跟 4 的进行同步
+	if exitMap[articleResult.SeriesId] > 0 && (articleResult.PublishStatus == 2 || articleResult.PublishStatus == 4) {
+		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)
+		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.CategoryName = articleResult.Industry.Name
+		item.CategoryId = exitMap[articleResult.SeriesId]
+		item.SubCategoryName = articleResult.Series.Name
+		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
+		list = append(list, item)
+		itemAuthor.ArticleId = articleResult.ArticleId
+		itemAuthor.Name = articleResult.Author.Name
+		itemAuthor.Mobile = articleResult.Author.PhoneNumber
+		listAuthor = append(listAuthor, itemAuthor)
+	} else {
+		// 如果这篇文章没有发布,那么就不作处理。
+		err = models.UpdateArticlePublish(0, artcleId)
+		if err != nil {
+			fmt.Println("UpdateArticlePublish Err:", err.Error())
+			return err
+		}
+		go models.UpdateCygxArticleCeluePush(celuePushId)
+		return err
+
+	}
+
+	//同步作者
+	for _, v := range listAuthor {
+		var count int
+		count, err = models.GetActivityAuthorCount(v.ArticleId, v.Mobile)
+		if err != nil {
+			fmt.Println("GetActivityAuthorCount Err:", err.Error())
+			return err
+		}
+		if count == 0 {
+			_, err = models.AddCygxActivityAuthor(v)
+			if err != nil {
+				fmt.Println("AddCygxActivityAuthor Err:", err.Error())
+				return err
+			}
+		}
+	}
+	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
+	}
+	fmt.Println("list len:", len(list))
 	noSummaryArticleIds := "3454,3456,3457,3459,2449,2450,2453,2454,2459,2530,2583,2663,2670,2699,2715,2732,2748,2759,2399,2356,2870,3173,2978,2826,3470" //非纪要库类型的文章ID
 	listNoSummaryArticleIds := strings.Split(noSummaryArticleIds, ",")
 	for k, v := range list {
@@ -638,11 +972,6 @@ func GetArticleListByApi(cont context.Context) (err error) {
 								err = models.ReportArticleClassificationEditNew(int(newId), industrialManagementIdStr, v.ArticleId, industrialSubjectIdStr)
 								if err != nil {
 									fmt.Println("ReportArticleClassificationEditNew Err:", err.Error())
-									//keyword1 = "新报告产业标签:【" + v.FieldName + "】,个股标签:" + subjectStr
-									//keyword2 = "归类失败"
-									//keyword3 = v.Title
-									//keyword4 = v.PublishDate.Format(utils.FormatDateTime)
-									//SendWxMsgWithArticleClassToAdmin(keyword1, keyword2, keyword3, keyword4, openIdList, articleIdInt)
 									return err
 								}
 							}
@@ -666,69 +995,70 @@ func GetArticleListByApi(cont context.Context) (err error) {
 					}
 				}
 			}
-			//类型ID 医药(医享会:28 、药调研:301)、消费【渠道新声:32】、科技【科技前言:79】、智造【匠心智造:84】或者是纪要做消息模板推送
-			fmt.Println(v.CategoryId)
-			if v.IsSummary == 1 || (v.CategoryId == 28 || v.CategoryId == 301 || v.CategoryId == 32 || v.CategoryId == 79 || v.CategoryId == 84) {
-				sliceSubjects := strings.Split(v.Stock, "/")
-				fmt.Println(sliceSubjects)
-				if len(sliceSubjects) > 0 {
-					var subjectStr string
-					for _, vSubject := range sliceSubjects {
-						sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
-						sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
-						subject := sliceXiahuaxian[0]
-						subjectStr += "'" + subject + "',"
+		}
+
+		//类型ID 医药(医享会:28 、药调研:301)、消费【渠道新声:32】、科技【科技前言:79】、智造【匠心智造:84】或者是纪要做消息模板推送
+		fmt.Println(v.CategoryId)
+		if v.IsSummary == 1 || (v.CategoryId == 28 || v.CategoryId == 301 || v.CategoryId == 32 || v.CategoryId == 79 || v.CategoryId == 84) {
+			sliceSubjects := strings.Split(v.Stock, "/")
+			fmt.Println(sliceSubjects)
+			if len(sliceSubjects) > 0 {
+				var subjectStr string
+				for _, vSubject := range sliceSubjects {
+					sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
+					sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
+					subject := sliceXiahuaxian[0]
+					subjectStr += "'" + subject + "',"
+				}
+				if subjectStr != "" {
+					subjectStr = strings.TrimRight(subjectStr, ",")
+					activityIdList, err := models.GetActivityIdListBySubjecName(subjectStr)
+					if err != nil {
+						fmt.Println("GetActivityIdListBySubjecName Err:", err.Error())
+						return err
 					}
-					if subjectStr != "" {
-						subjectStr = strings.TrimRight(subjectStr, ",")
-						activityIdList, err := models.GetActivityIdListBySubjecName(subjectStr)
-						if err != nil {
-							fmt.Println("GetActivityIdListBySubjecName Err:", err.Error())
-							return err
+					if len(activityIdList) > 0 {
+						var activityIdStr string
+						for _, vAct := range activityIdList {
+							activityIdStr += strconv.Itoa(vAct.ActivityId) + ","
 						}
-						if len(activityIdList) > 0 {
-							var activityIdStr string
-							for _, vAct := range activityIdList {
-								activityIdStr += strconv.Itoa(vAct.ActivityId) + ","
+						activityIdStr = strings.TrimRight(activityIdStr, ",")
+						if activityIdStr != "" {
+							appointmentList, err := models.GetAppointmentListByActivityId(activityIdStr, "1,2,5")
+							if err != nil {
+								fmt.Println("GetAppointmentListByActivityId Err:", err.Error())
+								return err
 							}
-							activityIdStr = strings.TrimRight(activityIdStr, ",")
-							if activityIdStr != "" {
-								appointmentList, err := models.GetAppointmentListByActivityId(activityIdStr, "1,2,5")
-								if err != nil {
-									fmt.Println("GetAppointmentListByActivityId Err:", err.Error())
-									return err
-								}
-								if len(appointmentList) > 0 {
-									for _, vApp := range appointmentList {
+							if len(appointmentList) > 0 {
+								for _, vApp := range appointmentList {
 
-										appointmentByMobileList, err := models.GetAppointmentListByActivityIdAndMobile(activityIdStr, vApp.Mobile)
-										if err != nil {
-											fmt.Println("GetAppointmentListByActivityId Err:", err.Error())
-											return err
-										}
-										var appointmentActivityName string
-										if len(appointmentByMobileList) > 0 {
-											for _, vAppM := range appointmentByMobileList {
-												appointmentActivityName += vAppM.ActivityName + ","
-											}
-										}
-										appointmentActivityName = strings.TrimRight(appointmentActivityName, ",")
-										if vApp.ActivityTypeId == 5 && v.CategoryId != 301 {
-											continue
+									appointmentByMobileList, err := models.GetAppointmentListByActivityIdAndMobile(activityIdStr, vApp.Mobile)
+									if err != nil {
+										fmt.Println("GetAppointmentListByActivityId Err:", err.Error())
+										return err
+									}
+									var appointmentActivityName string
+									if len(appointmentByMobileList) > 0 {
+										for _, vAppM := range appointmentByMobileList {
+											appointmentActivityName += vAppM.ActivityName + ","
 										}
+									}
+									appointmentActivityName = strings.TrimRight(appointmentActivityName, ",")
+									if vApp.ActivityTypeId == 5 && v.CategoryId != 301 {
+										continue
+									}
 
-										if vApp.Mobile != "" {
-											openIdListByAppointment, err := models.GetUserRecordListByMobile(4, vApp.Mobile)
-											if err != nil {
-												fmt.Println(err)
-												return err
-											}
-											keyword1 := "您预约的调研,有关联的纪要发布/更新了"
-											keyword2 := appointmentActivityName
-											keyword3 := v.Title
-											keyword4 := v.PublishDate.Format(utils.FormatDateTime)
-											SendWxMsgWithArticleClassToAdmin(keyword1, keyword2, keyword3, keyword4, openIdListByAppointment, articleIdInt)
+									if vApp.Mobile != "" {
+										openIdListByAppointment, err := models.GetUserRecordListByMobile(4, vApp.Mobile)
+										if err != nil {
+											fmt.Println(err)
+											return err
 										}
+										keyword1 := "您预约的调研,有关联的纪要发布/更新了"
+										keyword2 := appointmentActivityName
+										keyword3 := v.Title
+										keyword4 := v.PublishDate.Format(utils.FormatDateTime)
+										SendWxMsgWithArticleClassToAdmin(keyword1, keyword2, keyword3, keyword4, openIdListByAppointment, artcleId)
 									}
 								}
 							}
@@ -736,63 +1066,65 @@ func GetArticleListByApi(cont context.Context) (err error) {
 					}
 				}
 			}
-			//【公司调研】系列纪要发布/更新后
-			if v.CategoryId == 45 || v.CategoryId == 74 || v.CategoryId == 86 || v.CategoryId == 88 {
-				sliceSubjects := strings.Split(v.Stock, "/")
-				if len(sliceSubjects) > 0 {
-					var subjectStr string
-					for _, vSubject := range sliceSubjects {
-						sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
-						sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
-						subject := sliceXiahuaxian[0]
-						subjectStr += "'" + subject + "',"
+		}
+
+		//【公司调研】系列纪要发布/更新后
+		if v.CategoryId == 45 || v.CategoryId == 74 || v.CategoryId == 86 || v.CategoryId == 88 {
+			fmt.Println("处理预约纪要")
+			sliceSubjects := strings.Split(v.Stock, "/")
+			if len(sliceSubjects) > 0 {
+				var subjectStr string
+				for _, vSubject := range sliceSubjects {
+					sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
+					sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
+					subject := sliceXiahuaxian[0]
+					subjectStr += "'" + subject + "',"
+				}
+				if subjectStr != "" {
+					subjectStr = strings.TrimRight(subjectStr, ",")
+					activityIdList, err := models.GetActivityIdListBySubjecName(subjectStr)
+					if err != nil {
+						fmt.Println("GetActivityIdListBySubjecName Err:", err.Error())
+						return err
 					}
-					if subjectStr != "" {
-						subjectStr = strings.TrimRight(subjectStr, ",")
-						activityIdList, err := models.GetActivityIdListBySubjecName(subjectStr)
-						if err != nil {
-							fmt.Println("GetActivityIdListBySubjecName Err:", err.Error())
-							return err
+					if len(activityIdList) > 0 {
+						var activityIdStr string
+						for _, vAct := range activityIdList {
+							activityIdStr += strconv.Itoa(vAct.ActivityId) + ","
 						}
-						if len(activityIdList) > 0 {
-							var activityIdStr string
-							for _, vAct := range activityIdList {
-								activityIdStr += strconv.Itoa(vAct.ActivityId) + ","
+						activityIdStr = strings.TrimRight(activityIdStr, ",")
+						if activityIdStr != "" {
+							appointmentList, err := models.GetAppointmentListByActivityId(activityIdStr, "3,4")
+							if err != nil {
+								fmt.Println("GetAppointmentListByActivityId Err:", err.Error())
+								return err
 							}
-							activityIdStr = strings.TrimRight(activityIdStr, ",")
-							if activityIdStr != "" {
-								appointmentList, err := models.GetAppointmentListByActivityId(activityIdStr, "3,4")
-								if err != nil {
-									fmt.Println("GetAppointmentListByActivityId Err:", err.Error())
-									return err
-								}
-								if len(appointmentList) > 0 {
-									for _, vApp := range appointmentList {
-										appointmentByMobileList, err := models.GetAppointmentListByActivityIdAndMobile(activityIdStr, vApp.Mobile)
-										if err != nil {
-											fmt.Println("GetAppointmentListByActivityId Err:", err.Error())
-											return err
+							if len(appointmentList) > 0 {
+								for _, vApp := range appointmentList {
+									appointmentByMobileList, err := models.GetAppointmentListByActivityIdAndMobile(activityIdStr, vApp.Mobile)
+									if err != nil {
+										fmt.Println("GetAppointmentListByActivityId Err:", err.Error())
+										return err
+									}
+									var appointmentActivityName string
+									if len(appointmentByMobileList) > 0 {
+										for _, vAppM := range appointmentByMobileList {
+											appointmentActivityName += vAppM.ActivityName + ","
 										}
-										var appointmentActivityName string
-										if len(appointmentByMobileList) > 0 {
-											for _, vAppM := range appointmentByMobileList {
-												appointmentActivityName += vAppM.ActivityName + ","
-											}
+									}
+									appointmentActivityName = strings.TrimRight(appointmentActivityName, ",")
+									if vApp.Mobile != "" {
+										openIdListByAppointment, err := models.GetUserRecordListByMobile(4, vApp.Mobile)
+										if err != nil {
+											fmt.Println(err)
+											return err
 										}
-										appointmentActivityName = strings.TrimRight(appointmentActivityName, ",")
-										if vApp.Mobile != "" {
-											openIdListByAppointment, err := models.GetUserRecordListByMobile(4, vApp.Mobile)
-											if err != nil {
-												fmt.Println(err)
-												return err
-											}
-											keyword1 := "您预约的调研,有关联的纪要发布/更新了"
-											keyword2 := appointmentActivityName
-											keyword3 := v.Title
-											keyword4 := v.PublishDate.Format(utils.FormatDateTime)
-											SendWxMsgWithArticleClassToAdmin(keyword1, keyword2, keyword3, keyword4, openIdListByAppointment, articleIdInt)
+										keyword1 := "您预约的调研,有关联的纪要发布/更新了"
+										keyword2 := appointmentActivityName
+										keyword3 := v.Title
+										keyword4 := v.PublishDate.Format(utils.FormatDateTime)
+										SendWxMsgWithArticleClassToAdmin(keyword1, keyword2, keyword3, keyword4, openIdListByAppointment, artcleId)
 
-										}
 									}
 								}
 							}
@@ -800,320 +1132,9 @@ func GetArticleListByApi(cont context.Context) (err error) {
 					}
 				}
 			}
-			//【公司调研】系列纪要发布/更新后 end
-		}
-	}
-	return
-}
-
-func SynchronizationArtclehistory() {
-	fmt.Println("同步开始")
-	list, err := models.GetArticleHistoryList()
-	if err != nil {
-		fmt.Println("获取列表失败", err)
-	}
-	fmt.Println(len(list))
-	for _, v := range list {
-		//endDate := v.ModifyTime.Add(+time.Minute * 10).Format(utils.FormatDateTime)
-		//detail, err := models.GetNewArticleHistoryRecordNewpv(v.UserId, v.ArticleId, endDate)
-		//if err != nil && err.Error() != utils.ErrNoRow() {
-		//	fmt.Println("获取信息失败", err)
-		//}
-		v.OutType = 1
-		//fmt.Println(v.Id)
-		//if detail == nil {
-		//	_, err = models.AddCygxArticleViewRecordNewpv(v)
-		//	if err != nil {
-		//		fmt.Println("新增失败", err)
-		//	}
-		//} else {
-		//	err = models.UpdateCygxArticleViewRecordNewpvList(v, v.StopTime)
-		//	if err != nil {
-		//		fmt.Println("修改失败", err)
-		//	}
-		//}
-		newId, err := models.AddCygxArticleViewRecordNewpv(v)
-		fmt.Println("新增", newId)
-		if err != nil {
-			fmt.Println("新增失败", err)
-		}
-	}
-	fmt.Println("同步结束")
-}
-
-//统计报表
-func StatisticalReport() {
-	var isSummaryNumAll, isClassNum, pvNumAll, uvNumAll int
-	list, err := models.GetChartPermissionActivity()
-	if err != nil {
-		fmt.Println("获取列表失败", err)
-	}
-	for _, v := range list {
-		var listPv []*models.ReportMappingStatistical
-		if v.PermissionName == "研选" {
-			listPv, err = models.GetStatisticalReportArtilceExpert()
-			if err != nil {
-				fmt.Println("获取Pv列表失败", err)
-			}
-		} else {
-			listPv, err = models.GetStatisticalReportArtilce(v.ChartPermissionId)
-			if err != nil {
-				fmt.Println("获取Pv列表失败", err)
-			}
-		}
-		var pvNum, uvNum, isSummaryNum int
-		for _, v2 := range listPv {
-			pvNum += v2.Pv
-			uvNum += v2.Uv
-			if v2.IsSummary == "1" {
-				isSummaryNum += 1
-			}
-			if v2.IsClass == "1" && v.ChartPermissionId <= 22 {
-				isClassNum += 1
-			}
-			if v2.IsSummary == "1" && v.ChartPermissionId <= 22 {
-				isSummaryNumAll += 1
-			}
-		}
-		if v.ChartPermissionId <= 22 {
-			pvNumAll += pvNum
-			uvNumAll += uvNum
-		}
-		fmt.Println(v.PermissionName+"行业", len(listPv), "篇,其中主观类报告", isSummaryNum, "篇,客观类报告", len(listPv)-isSummaryNum, "篇。共产生阅读量pv-,", pvNum, ",uv-", uvNum)
-	}
-	fmt.Println("目前同步四大行业的总报告(已归类)数量", isClassNum, "篇,其中主观类报告", isSummaryNumAll, "篇,客观类报告", isClassNum-isSummaryNumAll, "篇。共产生阅读量pv-", pvNumAll, ",uv-", uvNumAll)
-	var totalOnline int        //线上
-	var totalOffline int       //线下
-	var totalPeople int        //共累计预约外呼人数
-	var totalSignUpOff int     //线下报名人数
-	var totalSignUpOffTime int //线下报名人数
-	var totalPeopleMeet int    //线下参会人数
-	o := orm.NewOrm()
-	sql := `SELECT COUNT(1) FROM cygx_activity WHERE activity_type_id IN (1,2,3) AND publish_status = 1 AND is_submit_meeting = 1 AND activity_time <= NOW();`
-	err = o.Raw(sql).QueryRow(&totalOnline)
-	if err != nil {
-		fmt.Println("获取线上", err)
-	}
-	sql = `SELECT COUNT(1) FROM cygx_activity WHERE activity_type_id IN (4,5,6) AND publish_status = 1 AND is_submit_meeting = 1 	AND activity_time <= NOW();`
-	err = o.Raw(sql).QueryRow(&totalOffline)
-	if err != nil {
-		fmt.Println("获取线下", err)
-	}
-	sql = `SELECT COUNT( 1 ) FROM
-			cygx_activity_signup  as s 
-			INNER JOIN cygx_activity as a ON  a.activity_id = s.activity_id
-		WHERE
-			s.do_fail_type = 0
-			AND a.is_submit_meeting = 1
-			AND a.activity_time <= NOW()
-			AND a.publish_status = 1`
-	err = o.Raw(sql).QueryRow(&totalPeople)
-	if err != nil {
-		fmt.Println("共累计预约外呼人数", err)
-	}
-
-	sql = `SELECT COUNT( 1 ) FROM
-			cygx_activity_signup  as s 
-			INNER JOIN cygx_activity as a ON  a.activity_id = s.activity_id
-		WHERE
-			s.do_fail_type = 0
-			AND a.is_submit_meeting = 1
-			AND a.activity_time <= NOW()
-			AND a.activity_type_id IN (4,5,6)
-			AND a.publish_status = 1`
-	err = o.Raw(sql).QueryRow(&totalSignUpOff)
-	if err != nil {
-		fmt.Println("共累计预约外呼人数", err)
-	}
-
-	sql = `SELECT COUNT( 1 ) FROM
-			cygx_activity_signup  as s 
-			INNER JOIN cygx_activity as a ON  a.activity_id = s.activity_id
-		WHERE
-			s.do_fail_type = 0
-			AND a.publish_status = 1
-			AND a.is_submit_meeting = 1
-			AND a.activity_time <= NOW()
-			AND a.is_submit_meeting = 1
-			AND a.activity_type_id IN (4,5,6);`
-	err = o.Raw(sql).QueryRow(&totalSignUpOffTime)
-	if err != nil {
-		fmt.Println("线下报名参会人数", err)
-	}
-
-	sql = `SELECT COUNT( 1 ) FROM
-			cygx_activity_signup  as s 
-			INNER JOIN cygx_activity as a ON  a.activity_id = s.activity_id
-		WHERE
-			s.do_fail_type = 0
-			AND a.is_submit_meeting = 1
-			AND a.activity_time <= NOW()
-			AND a.publish_status = 1
-			AND s.is_meeting = 1
-			AND a.activity_type_id IN (4,5,6);`
-	err = o.Raw(sql).QueryRow(&totalPeopleMeet)
-	if err != nil {
-		fmt.Println("线下参会人数", err)
-	}
-
-	fmt.Println("共上线活动", totalOnline+totalOffline, "个,其中线上", totalOnline, "个,线下", totalOffline, "个")
-	fmt.Println("共累计预约外呼人数", totalPeople, "人")
-	fmt.Println("报名线下参会", totalSignUpOff, "人,实际到会人数", totalPeopleMeet, "人,线下到会率约", totalPeopleMeet*100/totalSignUpOff, "%")
-
-	num := totalPeopleMeet / totalSignUpOffTime
-	fmt.Println(num)
-	fmt.Println(totalOnline)
-	fmt.Println(totalOffline)
-	fmt.Println(totalPeople)
-	fmt.Println(totalSignUpOff)
-	fmt.Println(totalPeopleMeet)
-	fmt.Println(totalSignUpOffTime)
-	fmt.Println(totalPeopleMeet / totalSignUpOffTime)
-	return
-
-}
-
-// UserViewRedisData 阅读数据
-type UserViewRedisData struct {
-	Mobile      string `json:"mobile"`
-	Email       string `json:"email"`
-	RealName    string `json:"real_name"`
-	CompanyName string `json:"company_name"`
-	ViewTime    string `json:"view_time" description:"阅读时间,格式:2022-02-17 13:06:13"`
-	ProductId   int    `json:"product_id" description:"报告所属产品,ficc:1,权益:2"`
-	CompanyId   int    `json:"company_id" description:"客户id"`
-}
-
-type ReportViewRecord struct {
-	Id          int       `orm:"column(id);pk"`
-	UserId      int       `description:"用户id"`
-	ReportId    int       `description:"报告id"`
-	Mobile      string    `description:"手机号"`
-	Email       string    `description:"邮箱"`
-	RealName    string    `description:"用户实际姓名"`
-	CompanyName string    `description:"公司名称"`
-	CreateTime  time.Time `description:"创建时间"`
-}
-
-// PushViewRecordNewRedisData 阅读数据加入到redis
-func PushViewRecordNewRedisData(reportViewRecord *ReportViewRecord, companyId int) bool {
-	data := &UserViewRedisData{
-		Mobile:      reportViewRecord.Mobile,
-		Email:       reportViewRecord.Email,
-		RealName:    reportViewRecord.RealName,
-		CompanyName: reportViewRecord.CompanyName,
-		ViewTime:    reportViewRecord.CreateTime.Format(utils.FormatDateTime),
-		ProductId:   2,
-		CompanyId:   companyId,
-	}
-	if utils.Re == nil {
-		err := utils.Rc.LPush(utils.CACHE_KEY_USER_VIEW, data)
-		if err != nil {
-			fmt.Println("PushViewRecordNewRedisData LPush Err:" + err.Error())
-		}
-		return true
-	}
-	return false
-}
-
-//func GetCeLueArticlePv() {
-//	sum := 0
-//	for i := 0; i <= 450; i++ {
-//		if i >= 102 {
-//			//GetCeLueArticlePvs(strconv.Itoa(i * 1000))
-//		}
-//	}
-//	fmt.Println(sum)
-//}
-
-//获取策略平台报告阅读数据
-func GetCeLueArticlePv(cont context.Context) (err error) {
-	defer func() {
-		if err != nil {
-			go utils.SendAlarmMsg("同步策略平台阅读数据失败", 2)
-			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetCeLueArticlePv ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-		}
-	}()
-	startTime := time.Now().Add(-time.Minute * 12).Format("2006-01-02 15:04:05")
-	endTime := time.Now().Format("2006-01-02 15:04:05")
-	requestUrl := utils.ApiUrl + "backend/statistics_access?take=1000&skip=0&sort=ASC&mode=all&"
-	encodeData := url.Values{}
-	encodeData.Add("start_dt", startTime)
-	encodeData.Add("end_dt", endTime)
-	encodeStr := encodeData.Encode()
-	requestUrl += encodeStr
-	authorization := utils.ApiAuthorization
-	body, err := PublicGetDate(requestUrl, authorization)
-	if err != nil {
-		return
-	}
-	var chartResult models.CeLueArticleResultApi
-	err = json.Unmarshal(body, &chartResult)
-	if err != nil {
-		fmt.Println(err)
-		return err
-	}
-	mapMobileArticleId := make(map[string]int)
-	//获取当天阅读记录
-	listPv, err := models.GetArticleHistoryRecordAllList()
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		fmt.Println("获取当天阅读记录失败", err)
-		return err
-	}
-	if len(listPv) > 0 {
-		for _, v := range listPv {
-			mapMobileArticleId[fmt.Sprint(v.Mobile, "_", v.ArticleId)] = v.ArticleId
-		}
-	}
-	for _, v := range chartResult.Data {
-		//fmt.Println(v.ArticleId)
-		item := new(models.CygxCelueArticleHistoryRecord)
-		item.CelueHistoryId = v.CelueHistoryId
-		item.Mobile = v.Mobile
-		item.ArticleId = v.ArticleId
-		if v.CrmUser != nil {
-			item.RealName = v.CrmUser.RealName
-		}
-		if v.CompanyName != nil {
-			item.CompanyName = v.CompanyName.RealName
-		}
-		item.CreateDateApi = time.Now()
-		t1, _ := time.Parse("2006-01-02T15:04:05Z", v.CreateDate)
-		item.CreateTime = t1.Add(+time.Hour * 8).Format(utils.FormatDateTime)
-		count, err := models.GetCeLueArticleCountById(v.CelueHistoryId)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			return err
-		}
-		if count == 0 {
-			_, err := models.AddCeLueArticle(item, mapMobileArticleId)
-			if err != nil {
-				fmt.Println(err)
-				return err
-			}
-		}
-	}
-
-	//处理同步过来的阅读记录所属用户
-	var condition string
-	condition = ` AND create_time  > ` + "'" + startTime + "'"
-	listArticlePv, err := models.GetArticleHistoryRecordAllByMobileList(condition)
-	if err != nil {
-		fmt.Println("GetArticleHistoryRecordAllByMobileList ,Err" + err.Error())
-	}
-	for _, v := range listArticlePv {
-		if v.Mobile != "" {
-			user, err := models.GetWxUserItemByMobile(v.Mobile)
-			if err != nil && err.Error() != utils.ErrNoRow() {
-				fmt.Println("GetWxUserItemByUserId ,Err" + err.Error())
-			}
-			if user != nil {
-				err = models.UpdateCygxArticleHistoryRecordAll(user)
-				if err != nil {
-					fmt.Println("UpdateCygxArticleCollect ,Err" + err.Error())
-				}
-			}
 		}
+		//【公司调研】系列纪要发布/更新后 end
 	}
-	return
-
+	go models.UpdateCygxArticleCeluePush(celuePushId)
+	return err
 }

+ 1 - 1
services/send_company_user.go

@@ -103,7 +103,7 @@ func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
 
 func DotongbuShangHai(cont context.Context) (err error) {
 	var condition string
-	updateTime := time.Now().Add(-time.Hour * 30).Format("2006-01-02 15:04:05")
+	updateTime := time.Now().Add(-time.Minute * 22).Format("2006-01-02 15:04:05")
 	listUpdateUser, err := models.GetWxUserOpLog(updateTime)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		return err

+ 7 - 6
services/tactics.go

@@ -670,6 +670,7 @@ func BodyAnalysis2(body string) (expertNumStr, expertContentStr, interviewDateSt
 	if len(expertContentArr) > 0 {
 		expertContentStr = expertContentArr[0]
 	}
+	//当处理过之后的专家背景长度大于600的时候,说明他的格式跟之前的不一样,还要做二次处理 600 是一个约值,先运行看看
 	if len(expertContentStr) > 600 {
 		strnum := strings.Index(expertContentStr, "#专家评价:")
 		content := expertContentStr[strnum:len(expertContentStr)]
@@ -686,12 +687,12 @@ func BodyAnalysis2(body string) (expertNumStr, expertContentStr, interviewDateSt
 	var hrefRegexp = regexp.MustCompile("(?m)<a.*?[^<]>.*?</a>")
 	match := hrefRegexp.FindAllString(body, -1)
 	if match != nil {
-		for k, v := range match {
-			if k == 0 && strings.Index(v, ".pdf") > 0 {
-				numStar := strings.Index(v, "http")
-				numEnd := strings.Index(v, ".pdf")
-				fileLink = v[numStar : numEnd+4]
-			}
+		for _, v := range match {
+			//if k == 0 && strings.Index(v, ".pdf") > 0 {
+			//	numStar := strings.Index(v, "http")
+			//	numEnd := strings.Index(v, ".pdf")
+			//	fileLink = v[numStar : numEnd+4]
+			//}
 			//处理a标签中的PDF
 			numStarAcount := strings.Index(v, "<a")
 			numEndAcount := strings.Index(v, "<img")

+ 2 - 1
services/task.go

@@ -35,7 +35,7 @@ func Task() {
 		sendEmailUserWhiteListChange := task.NewTask("sendEmailUserWhiteListChange", "0 00 17 * * *", SendEmailUserWhiteListChange) //新增 和冻结的客户白名单
 		task.AddTask("白名单发送", sendEmailUserWhiteListChange)
 
-		dotongbuShangHai := task.NewTask("dotongbuShangHai", "0 30 3 * * *", DotongbuShangHai) //把信息同步到上海策略品台
+		dotongbuShangHai := task.NewTask("dotongbuShangHai", "0 */20 * * * *", DotongbuShangHai) //把信息同步到上海策略品台
 		task.AddTask("同步用户到上海", dotongbuShangHai)
 
 		dotongbuShangHaiSendEmail := task.NewTask("dotongbuShangHaiSendEmail", "0 00 4 * * *", DotongbuShangHaiSendEmail) //发送上海策略品台同步结果名单的邮件附件
@@ -76,6 +76,7 @@ func Task() {
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */60 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
 		task.AddTask("getArticleListByApi", getArticleListByApi)
 	}
+
 	//DoCompany()
 	//ActivityAttendanceDetail()
 	//SynchronizationArthistory()//同步原有的阅读记录

+ 4 - 2
services/wx_user.go

@@ -509,6 +509,8 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 								itemCompanyInteraction.ActivityOfficeNum = vsplit.OfficeNum
 								itemCompanyInteraction.ActivityNum = vsplit.OnLineNum + vsplit.OfficeNum
 								mapCompanyInteractionItem[vsplit.CompanyId] = itemCompanyInteraction
+								mapCompanyInteractionItem[vsplit.CompanyId].CreateTime = time.Now()
+								mapCompanyInteractionItem[vsplit.CompanyId].ModifyTime = time.Now()
 							} else {
 								fmt.Println("公司ID", vsplit.CompanyId)
 								mapCompanyInteractionItem[vsplit.CompanyId].CompanyId = vsplit.CompanyId
@@ -587,6 +589,8 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 							itemCompanyInteraction.ActivityOfficeNum = vsplit.OfficeNum
 							itemCompanyInteraction.ActivityNum = vsplit.OnLineNum + vsplit.OfficeNum
 							mapCompanyInteractionItem[vsplit.CompanyId] = itemCompanyInteraction
+							mapCompanyInteractionItem[vsplit.CompanyId].CreateTime = time.Now()
+							mapCompanyInteractionItem[vsplit.CompanyId].ModifyTime = time.Now()
 						} else {
 							mapCompanyInteractionItem[vsplit.CompanyId].CompanyId = vsplit.CompanyId
 							mapCompanyInteractionItem[vsplit.CompanyId].ArticleHistoryNum += vsplit.HistoryNum
@@ -636,8 +640,6 @@ func UpdateWxUserLabel(cont context.Context) (err error) {
 			for _, v := range mapCompanyInteractionItem {
 				fmt.Println(v.CompanyId)
 				if mapCompanyInteraction[v.CompanyId] > 0 {
-					v.CreateTime = time.Now()
-					v.ModifyTime = time.Now()
 					err = models.UpdateCygxCompanyInteractionNum(v)
 					if err != nil {
 						fmt.Println(" UpdateCygxCompanyInteractionNum Err", err)

+ 1 - 1
utils/config.go

@@ -145,7 +145,7 @@ func init() {
 		EmailExpert = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"                         //研选行业专家邮箱
 		EmaiWhiteUserList = "tshen@hzinsights.com;cxzhang@hzinsights.com;yyli@hzinsights.com"                                            //白名单邮箱
 		WxMsgTemplateIdAskMsg = "PaoDanHGlt1kFw5q-4_ipJSwO3FyZpxSSNg4rwB7YCk"
-		WxMsgTemplateIdArticleUserRemind = "CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM"
+		WxMsgTemplateIdArticleUserRemind = "7qe3i4MrGxAIPhJeMgoqqw6j0A_foUB65DLSmxKe05s"
 		WxMsgTemplateIdAskMsgMobile = ""
 		ActSendMsgMobile = "15618524605"
 		ArticleTaskClassMobile = "15557270714,18767183922,15216736473,15000123056,18701809782,17706316791,18652179672"