Explorar o código

Merge branch 'cygx_hangye_zx_p2' of http://8.136.199.33:3000/hongze/hongze_cygx into debug

xingzai %!s(int64=2) %!d(string=hai) anos
pai
achega
30c6f3d1a5

+ 1 - 0
models/article.go

@@ -166,6 +166,7 @@ type ArticleDetail struct {
 	IsShowFollowButton      bool   `description:"是否展示关注取关按钮"`
 	IsFollowButton          bool   `description:"是否关注"`
 	IsRoadShow              bool   `description:"是否是路演精华"`
+	ReportType              int    `description:"报告类型,1行业报告,2产业报告,0无"`
 }
 
 type ArticleDetailFileLink struct {

+ 6 - 0
models/chart.go

@@ -11,6 +11,11 @@ type ChartResultApi struct {
 	Code int                  `json:"code"`
 	Msg  string               `json:"msg"`
 }
+type ChartResultDetailApi struct {
+	Data ChartResultApidate `json:"data"`
+	Code int                `json:"code"`
+	Msg  string             `json:"msg"`
+}
 
 type ChartFavoritesResultApi struct {
 	Data       []ChartInfo `json:"data"`
@@ -47,6 +52,7 @@ type ChartResultApidate struct {
 	Ctag          Ptag   `json:"ctag"`
 	PtagTwo       Ptag   `json:"ptag1"`
 	CtagTwo       Ptag   `json:"ctag1"`
+	IsActive      bool   `json:"is_active"`
 }
 
 type Ptag struct {

+ 29 - 0
models/chart_celue_push.go

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

+ 100 - 152
services/article.go

@@ -674,20 +674,21 @@ func GetArticleListByApi(cont context.Context) (err error) {
 		// 这里直接go出去会出现并发,导致文章md5ID唯一索引限制报错
 		err = HandleArticleListByApi(v.ArticleId)
 		if err != nil {
-			utils.FileLog.Info("WxGetToken Result:%s ", err.Error())
+			utils.FileLog.Info("HandleArticleListByApi", err.Error())
 		}
 	}
 	return
 }
 
 //func init() {
-//allList, err := models.GetArticleAll()
+// allList, err := models.GetArticleAll()
 //
-//fmt.Println(err)
-//for _, v := range allList {
-//	HandleArticleListByApi(v.ArticleId)
-//}
-//HandleArticleListByApi(7930)
+// fmt.Println(err)
+//
+//	for _, v := range allList {
+//		HandleArticleListByApi(v.ArticleId)
+//	}
+//HandleArticleListByApi(8112)
 
 //}
 
@@ -869,7 +870,10 @@ func HandleArticleListByApi(artcleId int) (err error) {
 			}
 		}
 		//是否属于纪要库的数据
-		if _, has := summaryMap[v.CategoryId]; has {
+		//if _, has := summaryMap[v.CategoryId]; has {
+		//	v.IsSummary = 1
+		//}
+		if v.TypeName == "纪要" {
 			v.IsSummary = 1
 		}
 		//排除不属于纪要库类型的文章
@@ -1042,6 +1046,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
 				return err
 			}
 			go UpdateResourceData(v.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
+
 			//fmt.Println(newId)
 			//报告自动归类,以及推送相关模板消息
 			if v.ReportType == 2 {
@@ -1167,15 +1172,17 @@ func HandleArticleListByApi(artcleId int) (err error) {
 }
 
 //func init() {
-//	DoArticleOnenIdWxTemplateMsg(8081)
+//	DoArticleOnenIdWxTemplateMsg(8112)
 //}
 
 // 过滤策略平台报告,研选报告重复推送,以及权限勾选的推送
 func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
+
 	//策略平台同步过来的文章ID,做微信模板消息推送,同一篇报告12小时只推送一次
 	cacheKey := fmt.Sprint(utils.CACHE_KEY_ARTICLE_ID_TEMPLATE, ":ArticleId", articleId)
 	ttlTime := utils.Rc.GetRedisTTL(cacheKey)
 	if ttlTime > 0 {
+		fmt.Println(ttlTime)
 		return err
 	}
 	var msg string
@@ -1227,74 +1234,76 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	if chartPermissionId == utils.CE_LUE_ID || chartPermissionId == utils.GU_SHOU_ID {
 		industryName = reportMapDetail.SubCategoryName
 	} else {
-		detailIndustryNameList, err := models.GetIndustrialManagemenDetailByAaticleID(articleId)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			return err
-		}
-		//如果不存在关联的产业则不推送
-		if len(detailIndustryNameList) == 0 {
-			return err
-		}
-		for _, v := range detailIndustryNameList {
-			industryName += v.IndustryName + ","
-			industrialManagementId += strconv.Itoa(v.IndustrialManagementId) + ","
-		}
-		industryName = strings.TrimRight(industryName, ",")
-		industrialManagementId = strings.TrimRight(industrialManagementId, ",")
-
-		//处理勾选了全部行业赛道的用户
-		var allIn string
-		allIn = DoXzsChooseSend(reportMapDetail.ChartPermissionName)
-		if allIn != "" {
-			allInList, err := models.GetCygxXzsChooseSendByAllIn(allIn)
+		if articleInfo.ReportType == 2 {
+			detailIndustryNameList, err := models.GetIndustrialManagemenDetailByAaticleID(articleId)
 			if err != nil && err.Error() != utils.ErrNoRow() {
 				return err
 			}
-			if len(allInList) > 0 {
-				var allInUserId string
-				for _, v := range allInList {
-					allInUserId += strconv.Itoa(v.UserId) + ","
-				}
-				allInUserId = strings.TrimRight(allInUserId, ",")
-
-				userFllowIndustrialList, err := models.GetUserFllowIndustrialListByUserIdAndIndustrial(allInUserId, industrialManagementId)
-				if err != nil && err.Error() != utils.ErrNoRow() {
-					return err
-				}
-				mapUserFllowed := make(map[string]int)
-				for _, v := range userFllowIndustrialList {
-					//用户ID与其关注的产业组成唯一索引,判断是否存在,如果不存在就进行自动关注
-					mapUserFllowed[fmt.Sprint("uid:", v.UserId, "_Industrial:", v.IndustrialManagementId)] = v.UserId
-				}
-				//获取这些allIN用户的的信息进行遍历生成需要插入的数据
-				userList, err := models.GetWxUserListByUserIds(allInUserId)
+			//如果不存在关联的产业则不推送
+			if len(detailIndustryNameList) == 0 {
+				return err
+			}
+			for _, v := range detailIndustryNameList {
+				industryName += v.IndustryName + ","
+				industrialManagementId += strconv.Itoa(v.IndustrialManagementId) + ","
+			}
+			industryName = strings.TrimRight(industryName, ",")
+			industrialManagementId = strings.TrimRight(industrialManagementId, ",")
+
+			//处理勾选了全部行业赛道的用户
+			var allIn string
+			allIn = DoXzsChooseSend(reportMapDetail.ChartPermissionName)
+			if allIn != "" {
+				allInList, err := models.GetCygxXzsChooseSendByAllIn(allIn)
 				if err != nil && err.Error() != utils.ErrNoRow() {
 					return err
 				}
-				var industryFllowItems []*models.CygxIndustryFllow
-				for _, v := range detailIndustryNameList {
-					for _, vUser := range userList {
-						//如果用户这个用户没有关注这个产业就进行自动关注
-						if mapUserFllowed[fmt.Sprint("uid:", vUser.UserId, "_Industrial:", v.IndustrialManagementId)] == 0 {
-							item := new(models.CygxIndustryFllow)
-							item.IndustrialManagementId = v.IndustrialManagementId
-							item.UserId = vUser.UserId
-							item.Email = vUser.Email
-							item.Mobile = vUser.Mobile
-							item.RealName = vUser.RealName
-							item.CompanyId = vUser.CompanyId
-							item.CompanyName = vUser.CompanyName
-							item.Source = 3
-							item.Type = 1
-							item.CreateTime = time.Now()
-							item.ModifyTime = time.Now()
-							industryFllowItems = append(industryFllowItems, item)
+				if len(allInList) > 0 {
+					var allInUserId string
+					for _, v := range allInList {
+						allInUserId += strconv.Itoa(v.UserId) + ","
+					}
+					allInUserId = strings.TrimRight(allInUserId, ",")
+
+					userFllowIndustrialList, err := models.GetUserFllowIndustrialListByUserIdAndIndustrial(allInUserId, industrialManagementId)
+					if err != nil && err.Error() != utils.ErrNoRow() {
+						return err
+					}
+					mapUserFllowed := make(map[string]int)
+					for _, v := range userFllowIndustrialList {
+						//用户ID与其关注的产业组成唯一索引,判断是否存在,如果不存在就进行自动关注
+						mapUserFllowed[fmt.Sprint("uid:", v.UserId, "_Industrial:", v.IndustrialManagementId)] = v.UserId
+					}
+					//获取这些allIN用户的的信息进行遍历生成需要插入的数据
+					userList, err := models.GetWxUserListByUserIds(allInUserId)
+					if err != nil && err.Error() != utils.ErrNoRow() {
+						return err
+					}
+					var industryFllowItems []*models.CygxIndustryFllow
+					for _, v := range detailIndustryNameList {
+						for _, vUser := range userList {
+							//如果用户这个用户没有关注这个产业就进行自动关注
+							if mapUserFllowed[fmt.Sprint("uid:", vUser.UserId, "_Industrial:", v.IndustrialManagementId)] == 0 {
+								item := new(models.CygxIndustryFllow)
+								item.IndustrialManagementId = v.IndustrialManagementId
+								item.UserId = vUser.UserId
+								item.Email = vUser.Email
+								item.Mobile = vUser.Mobile
+								item.RealName = vUser.RealName
+								item.CompanyId = vUser.CompanyId
+								item.CompanyName = vUser.CompanyName
+								item.Source = 3
+								item.Type = 1
+								item.CreateTime = time.Now()
+								item.ModifyTime = time.Now()
+								industryFllowItems = append(industryFllowItems, item)
+							}
 						}
 					}
-				}
-				err = models.AddCygxIndustryFllowMulti(industryFllowItems)
-				if err != nil {
-					go utils.SendAlarmMsg("用户关注全部赛道,出现新赛道批量添加失败 ,AddCygxIndustryFllowMulti ErrMsg:"+err.Error(), 2)
+					err = models.AddCygxIndustryFllowMulti(industryFllowItems)
+					if err != nil {
+						go utils.SendAlarmMsg("用户关注全部赛道,出现新赛道批量添加失败 ,AddCygxIndustryFllowMulti ErrMsg:"+err.Error(), 2)
+					}
 				}
 			}
 		}
@@ -1320,7 +1329,19 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	if err != nil {
 		return err
 	}
-	//return
+
+	//四大行业的行业综述报告,对所有开通了对应行业权限的客户都推送。
+	if articleInfo.ReportType == 1 && chartPermissionId != utils.CE_LUE_ID && chartPermissionId != utils.GU_SHOU_ID {
+		for _, item := range openidPowerList {
+			first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
+			keyword1 := "所属赛道:" + articleInfo.SubCategoryName
+			openIditem := new(models.OpenIdList)
+			openIditem.OpenId = item.OpenId
+			openIditem.UserId = item.UserId
+			SendWxMsgWithArticleUpdate(first, keyword1, articleInfo.Title, articleInfo.PublishDate, articleInfo.Abstract, openIditem, articleId)
+		}
+		return err
+	}
 	for _, v := range openidPowerList {
 		mapOpenidPower[v.UserId] = v.OpenId
 	}
@@ -1455,27 +1476,23 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 			if mapOpenidPushed[k] != "" {
 				continue
 			}
-			chooseSendtList, err := models.GetCygxXzsChooseSend()
-			if err != nil {
-				return err
-			}
 			mapUserIdChooseSendType := make(map[int]int)
-			for _, v := range chooseSendtList {
-				if v.IsRefuse == 1 {
+			for _, vS := range chooseSendtList {
+				if vS.IsRefuse == 1 {
 					continue
 				}
 				//获取选择主客观赛道的用户
 				if reportMapDetail.PermissionType == 1 {
-					if v.IsSubjective == 1 {
-						mapUserIdChooseSendType[v.UserId] = v.UserId
+					if vS.IsSubjective == 1 {
+						mapUserIdChooseSendType[vS.UserId] = vS.UserId
 					}
 				} else if reportMapDetail.PermissionType == 2 {
-					if v.IsObjective == 1 {
-						mapUserIdChooseSendType[v.UserId] = v.UserId
+					if vS.IsObjective == 1 {
+						mapUserIdChooseSendType[vS.UserId] = vS.UserId
 					}
 				} else {
-					if v.IsSubjective == 1 || v.IsObjective == 1 {
-						mapUserIdChooseSendType[v.UserId] = v.UserId
+					if vS.IsSubjective == 1 || vS.IsObjective == 1 {
+						mapUserIdChooseSendType[vS.UserId] = vS.UserId
 					}
 				}
 			}
@@ -1521,14 +1538,6 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 						}
 					}
 				}
-				//fmt.Println("openIditem.UserId:", openIditem.UserId)
-				//if _,ok := mapActivityUserId[openIditem.UserId]; ok{
-				//	first = "您预约的调研,有关联的纪要发布/更新了"
-				//	keyword1 = industryName
-				//	SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
-				//	delete(mapUserIdChooseSendTypeNoPermission, openIditem.UserId)
-				//	mapAlreadySend[openIditem.UserId] = openIditem.UserId
-				//}
 			}
 
 			//如果有权限而且小助手没有提交过信息的 就做正常推送
@@ -1545,63 +1554,6 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 				mapAlreadySend[openIditem.UserId] = openIditem.UserId
 			}
 		}
-
-		//获取提交过推送规则的用户的 openid 并推送模版消息
-
-		//mapActivityUserId := make(map[int]string)
-		//if articleInfo.IsSummary == 1 {
-		//	sliceSubjectId, _ := models.GetSubjectIds(articleId)
-		//	if sliceSubjectId != ""{
-		//		appointmentList, err := models.GetCygxAppointmentSummaryBySubjectId(sliceSubjectId)
-		//		if err != nil {
-		//			fmt.Println("GetCygxAppointmentSummaryListBySubjectId Err:", err.Error())
-		//			return err
-		//		}
-		//		if len(appointmentList) > 0 {
-		//			for _, v := range appointmentList {
-		//				fmt.Println("mapActivityUserId:", v.UserId)
-		//				mapActivityUserId[v.UserId] += v.ActivityName + ","
-		//				first = "您预约的调研,有关联的纪要发布/更新了"
-		//				keyword1 = industryName
-		//				if _, ok := mapAlreadySend[openIditem.UserId]; !ok{
-		//					SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
-		//					delete(mapUserIdChooseSendTypeNoPermission, openIditem.UserId)
-		//					mapAlreadySend[openIditem.UserId] = openIditem.UserId
-		//				}
-		//			}
-		//		}
-		//	}
-		//	//fmt.Println("openIditem.UserId:", openIditem.UserId)
-		//	//if _,ok := mapActivityUserId[openIditem.UserId]; ok{
-		//	//	first = "您预约的调研,有关联的纪要发布/更新了"
-		//	//	keyword1 = industryName
-		//	//	SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
-		//	//	delete(mapUserIdChooseSendTypeNoPermission, openIditem.UserId)
-		//	//	mapAlreadySend[openIditem.UserId] = openIditem.UserId
-		//	//}
-		//}
-
-		//openIditem := new(models.OpenIdList)
-		//first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
-		//keyword1 := "所属赛道:" + industryName
-		//var ids []string
-		//for k, _ := range mapUserIdChooseSendTypeNoPermission {
-		//	ids = append(ids, strconv.Itoa(k))
-		//}
-		//if len(ids) > 0 {
-		//	idStr := strings.Join(ids, ",")
-		//	openidIlist, err := models.GetCygxXzsChooseSendOpenIdByUserIds(idStr)
-		//	if err != nil {
-		//		return err
-		//	}
-		//	for _, item := range openidIlist {
-		//		openIditem.OpenId = item.OpenId
-		//		openIditem.UserId = item.UserId
-		//		if _, ok := mapAlreadySend[openIditem.UserId]; !ok {
-		//			SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
-		//		}
-		//	}
-		//}
 	}
 	utils.Rc.Put(cacheKey, articleId, time.Hour*12)
 	return
@@ -1620,7 +1572,7 @@ func GetSpecialArticleDetailUserPower(user *models.WxUserItem, articleInfo *mode
 		return
 	}
 	if reportMapDetail == nil {
-		err = errors.New("GetdetailByCategoryIdP,获取详情失败, Err: " + e.Error())
+		err = errors.New("GetdetailByCategoryIdP,获取详情失败, ")
 		return
 	}
 	fmt.Println(permissionStr)
@@ -1996,10 +1948,6 @@ func GetReportLinkToArticleid(reportLink string) (articleId int, err error) {
 	return
 }
 
-//func init() {
-//	GetArticleStockMap()
-//}
-
 // GetArticleStockMap 获取个股标签所对应的文章ID
 func GetArticleStockMap() (mapResp map[string]int, err error) {
 	defer func() {

+ 185 - 127
services/chart.go

@@ -13,7 +13,7 @@ import (
 	"time"
 )
 
-//get公共请求方法
+// get公共请求方法
 func PublicGetDate(url, authorization string) (body []byte, err error) {
 	defer func() {
 		if err != nil {
@@ -39,7 +39,7 @@ func PublicGetDate(url, authorization string) (body []byte, err error) {
 	return
 }
 
-//同步图表列表
+// 同步图表列表
 func GetChartListByApi(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
@@ -202,7 +202,7 @@ func GetChartListByApi(cont context.Context) (err error) {
 
 }
 
-//获取图表分类
+// 获取图表分类
 func GetChartPtagByApi() (items []*models.ChartPtagResp, err error) {
 	defer func() {
 		if err != nil {
@@ -237,7 +237,7 @@ func GetChartPtagByApi() (items []*models.ChartPtagResp, err error) {
 	return
 }
 
-//获取用户的Token
+// 获取用户的Token
 func GetUserTokenByMobile(mobile string) (token string, err error) {
 	//缓存校验
 	cacheKey := fmt.Sprint("xygx_chart:chart_token:add:", "Mobile", mobile)
@@ -282,7 +282,7 @@ func GetUserTokenByMobile(mobile string) (token string, err error) {
 	return
 }
 
-//获取图表收藏
+// 获取图表收藏
 func GetChartCollectionByApi(mobile string, take, skip int) (items []*models.HomeChartListResp, err error, total int) {
 	defer func() {
 		if err != nil {
@@ -321,7 +321,7 @@ func GetChartCollectionByApi(mobile string, take, skip int) (items []*models.Hom
 	return
 }
 
-//判断策略平台是否已经添加过收藏
+// 判断策略平台是否已经添加过收藏
 func GetIsCollectionChart(mobile string, chartId int) (isCollection bool, err error) {
 	//获取所有的收藏列表,进行比对看看是否收藏,调用三方接口详情没有是否收藏的字段
 	list, err, _ := GetChartCollectionByApi(mobile, 9999, 0)
@@ -336,7 +336,7 @@ func GetIsCollectionChart(mobile string, chartId int) (isCollection bool, err er
 	return
 }
 
-//添加收藏
+// 添加收藏
 func AddCollectionChart(mobile string, chartId int) (err error) {
 	authorization, err := GetUserTokenByMobile(mobile)
 	if err != nil {
@@ -368,7 +368,7 @@ func AddCollectionChart(mobile string, chartId int) (err error) {
 	return
 }
 
-//移除收藏
+// 移除收藏
 func DeleteCollectionChart(mobile string, chartId int) (err error) {
 	authorization, err := GetUserTokenByMobile(mobile)
 	if err != nil {
@@ -396,129 +396,187 @@ func DeleteCollectionChart(mobile string, chartId int) (err error) {
 	return
 }
 
-func DoCompany() {
+func GetChartDetailByChartId(cont context.Context) (err error) {
+	listUpdate, err := models.GetChartCeluePushList()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		go utils.SendAlarmMsg("发送邮件:同步用户到策略平台信息失败,图表ID:"+err.Error(), 2)
+	}
+	//如果长度为零就不处理
+	if len(listUpdate) == 0 {
+		return err
+	}
+	for _, v := range listUpdate {
+		err = GetChartDetailByApi(v.ChartId)
+		if err != nil {
+			go utils.SendAlarmMsg("发送邮件:同步用户到策略平台信息失败,图表ID:"+strconv.Itoa(v.ChartId)+err.Error(), 2)
+		}
+		err = models.UpdateCygxChartCeluePush(v.ChartId)
+		if err != nil {
+			go utils.SendAlarmMsg("发送邮件:同步用户到策略平台信息失败,图表ID:"+strconv.Itoa(v.ChartId)+err.Error(), 2)
+		}
+	}
+	return
+}
 
-	//listCollect, err := models.GetCygxArticleCollectList()
-	//if err != nil {
-	//	fmt.Println("GetAddCygxArticleCollectList ,Err" + err.Error())
-	//}
-	//for _, v := range listCollect {
-	//	user, err := models.GetWxUserItemByUserId(v.UserId)
-	//	if err != nil && err.Error() != utils.ErrNoRow() {
-	//		fmt.Println("GetWxUserItemByUserId ,Err" + err.Error())
-	//	}
-	//	if user != nil {
-	//		fmt.Println(user.RealName)
-	//		err = models.UpdateCygxArticleCollect(user)
-	//		if err != nil {
-	//			fmt.Println("UpdateCygxArticleCollect ,Err" + err.Error())
-	//		}
-	//	}
-	//}
+//func init() {
+//	GetChartDetailByChartId()
+//}
 
-	//listCollect, err := models.GetCygxSearchKeyWordList()
-	//if err != nil {
-	//	fmt.Println("GetAddCygxArticleCollectList ,Err" + err.Error())
-	//}
-	//for _, v := range listCollect {
-	//	user, err := models.GetWxUserItemByUserId(v.UserId)
-	//	if err != nil && err.Error() != utils.ErrNoRow() {
-	//		fmt.Println("GetWxUserItemByUserId ,Err" + err.Error())
-	//	}
-	//	if user != nil {
-	//		fmt.Println(user.RealName)
-	//		err = models.UpdateCygxSearchKeyWord(user)
-	//		if err != nil {
-	//			fmt.Println("UpdateCygxArticleCollect ,Err" + err.Error())
-	//		}
-	//	}
-	//}
-	//var condition string
-	////updateTime := time.Now().Add(-time.Hour * 25).Format(utils.FormatDateTime)
-	//condition = ` AND real_name  = '' `
-	//listArticlePv, err := models.GetArticleHistoryRecordAllByMobileList(condition)
-	//if err != nil {
-	//	fmt.Println("GetArticleHistoryRecordAllByMobileList ,Err" + err.Error())
-	//}
-	//fmt.Println("长度", len(listArticlePv))
-	//for k, 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 {
-	//			fmt.Println(user.RealName, k)
-	//			err = models.UpdateCygxArticleHistoryRecordAll(user)
-	//			if err != nil {
-	//				fmt.Println("UpdateCygxArticleCollect ,Err" + err.Error())
-	//			}
-	//		}
-	//	}
-	//}
+// 同步图表详情
+func GetChartDetailByApi(chartId int) (err error) {
+	defer func() {
+		if err != nil {
+			//fmt.Println(err)
+			go utils.SendAlarmMsg("发送邮件:同步用户到策略平台信息失败,图表ID:"+strconv.Itoa(chartId)+err.Error(), 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ,图表ID:"+strconv.Itoa(chartId)+"ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	mapChartid := make(map[int]int)
+	chartList, err := models.GetChartListAll()
+	if err != nil {
+		return
+	}
+	for _, v := range chartList {
+		mapChartid[v.ChartId] = v.ChartId
+	}
+	mapAllChartid := make(map[int]int)
+	chartAllList, err := models.GetChartAllListAll()
+	if err != nil {
+		return
+	}
+	for _, v := range chartAllList {
+		mapAllChartid[v.ChartId] = v.ChartId
+	}
+	var chartIdsDelete []int
+	url := utils.ApiUrl + "charts/" + strconv.Itoa(chartId)
+	authorization := utils.ApiAuthorization
+	body, err := PublicGetDate(url, authorization)
+	if err != nil {
+		return
+	}
+	var resultDate models.ChartResultDetailApi
+	err = json.Unmarshal(body, &resultDate)
+	if err != nil {
+		return err
+	}
+	v := resultDate.Data
+	item := new(models.CygxChart)
+	item.ChartId = v.ChartId
+	item.PtagId = v.PtagId
+	item.CtagId = v.CtagId
+	item.Title = v.Title
+	item.TitleEn = v.TitleEn
+	item.CreateDateApi = time.Now()
+	item.CreateDate = v.CreateDate
+	item.PublishStatus = v.PublishStatus
+	item.PtagName = v.Ptag.Name
+	item.CtagName = v.Ctag.Name
 
-	//listIndustryFllow, err := models.GetCygxIndustryFllowList("")
-	//if err != nil {
-	//	fmt.Println("GetArticleDepartmentFollowByMobileList ,Err" + err.Error())
-	//}
-	//fmt.Println("长度", len(listIndustryFllow))
-	//for k, v := range listIndustryFllow {
-	//	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 {
-	//			fmt.Println(user.RealName, k)
-	//			err = models.UpdateCygxIndustryFllow(user)
-	//			if err != nil {
-	//				fmt.Println("UpdateCygxIndustryFllow ,Err" + err.Error())
-	//			}
-	//		}
-	//	}
-	//}
-	//
-	//lisDepartmentF, err := models.GetArticleDepartmentFollowByMobileList("")
-	//if err != nil {
-	//	fmt.Println("GetArticleDepartmentFollowByMobileList ,Err" + err.Error())
-	//}
-	//fmt.Println("长度", len(lisDepartmentF))
-	//for k, v := range lisDepartmentF {
-	//	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 {
-	//			fmt.Println(user.RealName, k)
-	//			err = models.UpdateCygxArticleDepartmentFollow(user)
-	//			if err != nil {
-	//				fmt.Println("UpdateCygxArticleDepartmentFollow ,Err" + err.Error())
-	//			}
-	//		}
-	//	}
-	//}
+	item.PtagNameTwo = v.PtagTwo.Name
+	item.CtagNameTwo = v.CtagTwo.Name
+	item.PtagIdTwo = v.PtagTwo.Id
+	item.CtagIdTwo = v.CtagTwo.Id
+	item.Cover = v.Cover
+	item.Iframe = v.Iframe
 
-	//listChartCollect, err := models.GetCygxChartCollectByMobileList()
-	//if err != nil {
-	//	fmt.Println("GetCygxChartCollectByMobileList ,Err" + err.Error())
-	//}
-	//fmt.Println("长度", len(listChartCollect))
-	//for k, v := range listChartCollect {
-	//	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 {
-	//			fmt.Println(user.RealName, k)
-	//			err = models.UpdateCygxChartCollect(user)
-	//			if err != nil {
-	//				fmt.Println("UpdateCygxChartCollect ,Err" + err.Error())
-	//			}
-	//		}
-	//	}
+	//如果是软删除就做取消发布处理
+	if !v.IsActive {
+		item.PublishStatus = 0
+	}
+
+	//如果没有就新增 有就更新
+	if mapChartid[v.ChartId] == 0 {
+		_, err := models.AddCygxChart(item)
+		if item.PublishStatus == 1 && v.IsActive {
+			go UpdateResourceData(item.ChartId, "newchart", "add", time.Now().Format(utils.FormatDateTime))
+		}
+		if err != nil {
+			return err
+		}
+	} else {
+		if item.PublishStatus == 0 {
+			chartIdsDelete = append(chartIdsDelete, item.ChartId)
+		}
+		updateParams := make(map[string]interface{})
+		updateParams["Title"] = v.Title
+		updateParams["PtagId"] = v.PtagId
+		updateParams["CtagId"] = v.CtagId
+		updateParams["TitleEn"] = v.TitleEn
+		updateParams["CreateDate"] = v.CreateDate
+		updateParams["PublishStatus"] = v.PublishStatus
+		updateParams["PtagName"] = v.Ptag.Name
+		updateParams["CtagName"] = v.Ctag.Name
+		updateParams["PtagNameTwo"] = v.PtagTwo.Name
+		updateParams["CtagNameTwo"] = v.CtagTwo.Name
+		updateParams["PtagIdTwo"] = v.PtagTwo.Id
+		updateParams["CtagIdTwo"] = v.CtagTwo.Id
+		updateParams["Cover"] = v.Cover
+		updateParams["Iframe"] = v.Iframe
+		whereParam := map[string]interface{}{"chart_id": v.ChartId}
+		err = models.UpdateByExpr(models.CygxChart{}, whereParam, updateParams)
+		if err != nil {
+			return err
+		}
+		if item.PublishStatus == 0 {
+			go UpdateResourceData(item.ChartId, "newchart", "delete", time.Now().Format(utils.FormatDateTime))
+		}
+	}
 	//}
+	fmt.Println("删除的", chartIdsDelete)
+	if len(chartIdsDelete) > 0 {
+		go Deletenewchart(chartIdsDelete)
+	}
+
+	//策略平台图表,记录所有,的显示用户收藏使用
+	{
+		item := new(models.CygxChartAll)
+		item.ChartId = v.ChartId
+		item.PtagId = v.PtagId
+		item.CtagId = v.CtagId
+		item.Title = v.Title
+		item.TitleEn = v.TitleEn
+		item.CreateDateApi = time.Now()
+		item.CreateDate = v.CreateDate
+		item.PublishStatus = v.PublishStatus
+		item.PtagName = v.Ptag.Name
+		item.CtagName = v.Ctag.Name
+
+		item.PtagNameTwo = v.PtagTwo.Name
+		item.CtagNameTwo = v.CtagTwo.Name
+		item.PtagIdTwo = v.PtagTwo.Id
+		item.CtagIdTwo = v.CtagTwo.Id
+		item.Cover = v.Cover
+		item.Iframe = v.Iframe
+
+		//如果没有就新增 有就更新
+		if mapAllChartid[v.ChartId] == 0 {
+			_, err := models.AddCygxChartAll(item)
+			if err != nil {
+				return err
+			}
+		} else {
+			updateParams := make(map[string]interface{})
+			updateParams["Title"] = v.Title
+			updateParams["PtagId"] = v.PtagId
+			updateParams["CtagId"] = v.CtagId
+			updateParams["TitleEn"] = v.TitleEn
+			updateParams["CreateDate"] = v.CreateDate
+			updateParams["PublishStatus"] = v.PublishStatus
+			updateParams["PtagName"] = v.Ptag.Name
+			updateParams["CtagName"] = v.Ctag.Name
+			updateParams["PtagNameTwo"] = v.PtagTwo.Name
+			updateParams["CtagNameTwo"] = v.CtagTwo.Name
+			updateParams["PtagIdTwo"] = v.PtagTwo.Id
+			updateParams["CtagIdTwo"] = v.CtagTwo.Id
+			updateParams["Cover"] = v.Cover
+			updateParams["Iframe"] = v.Iframe
+			whereParam := map[string]interface{}{"chart_id": v.ChartId}
+			err = models.UpdateByExpr(models.CygxChartAll{}, whereParam, updateParams)
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return
 
-	fmt.Println("end")
 }

+ 6 - 4
services/elastic.go

@@ -1065,8 +1065,9 @@ func EsArticleSearch(keyWord string, startSize, pageSize int, orderColumn string
 			"Annotation": map[string]interface{}{},
 		},
 		//样式 红色
-		"post_tags": []interface{}{"</font>"},
-		"pre_tags":  []interface{}{"<font color='red'>"},
+		"post_tags":     []interface{}{"</font>"},
+		"pre_tags":      []interface{}{"<font color='red'>"},
+		"fragment_size": 50,
 	}
 
 	mustMap = append(mustMap, map[string]interface{}{
@@ -1328,8 +1329,9 @@ func EsArticleSearchBody(keyWord string, startSize, pageSize int, orderColumn st
 			"Annotation": map[string]interface{}{},
 		},
 		//样式 红色
-		"post_tags": []interface{}{"</font>"},
-		"pre_tags":  []interface{}{"<font color='red'>"},
+		"post_tags":     []interface{}{"</font>"},
+		"pre_tags":      []interface{}{"<font color='red'>"},
+		"fragment_size": 50,
 	}
 
 	mustMap = append(mustMap, map[string]interface{}{

+ 12 - 6
services/tactics.go

@@ -13,7 +13,7 @@ import (
 	"time"
 )
 
-//同步策略文章
+// 同步策略文章
 func SyncTacticsList() (err error) {
 	defer func() {
 		if err != nil {
@@ -133,7 +133,7 @@ func SyncTacticsList() (err error) {
 	return
 }
 
-//同步策略文章
+// 同步策略文章
 func SyncCygxArticleList() (err error) {
 	defer func() {
 		if err != nil {
@@ -180,7 +180,7 @@ func SyncCygxArticleList() (err error) {
 	return
 }
 
-//body 解析
+// body 解析
 func BodyAnalysis(body string) (expertNumStr, expertContentStr, interviewDateStr string) {
 	body = html.UnescapeString(body)
 	doc, err := goquery.NewDocumentFromReader(strings.NewReader(body))
@@ -284,7 +284,7 @@ func BodyAnalysis(body string) (expertNumStr, expertContentStr, interviewDateStr
 	return
 }
 
-//同步策略,报告文章
+// 同步策略,报告文章
 func SyncTacticsListAddreport(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
@@ -520,7 +520,7 @@ func SyncTacticsListAddreport(cont context.Context) (err error) {
 	return
 }
 
-//同步策略到Es
+// 同步策略到Es
 func SyncTacticsListToEs() (err error) {
 	defer func() {
 		if err != nil {
@@ -570,7 +570,7 @@ func SyncTacticsListToEs() (err error) {
 	return
 }
 
-//body 解析
+// body 解析
 func BodyAnalysis2(body string) (expertNumStr, expertContentStr, interviewDateStr, fileLink, bodyReturn string) {
 	body = html.UnescapeString(body)
 	//fmt.Println(body)
@@ -737,6 +737,12 @@ func GetSummarytoEs(articleId int) (err error) {
 		fmt.Println("GetArticleAll Err:", err.Error())
 		return
 	}
+	if v == nil {
+		return
+	}
+	if v.IsSummary != 1 {
+		return
+	}
 	indexName := utils.IndexName
 	//for _, v := range allList {
 	content := html.UnescapeString(v.Body)

+ 1 - 1
services/task.go

@@ -38,7 +38,7 @@ func Task() {
 		dotongbuShangHaiSendEmail := task.NewTask("dotongbuShangHaiSendEmail", "0 00 4 * * *", DotongbuShangHaiSendEmail) //发送上海策略品台同步结果名单的邮件附件
 		task.AddTask("发送上海策略品台同步结果名单的邮件附件", dotongbuShangHaiSendEmail)
 
-		getChartListByApi := task.NewTask("getChartListByApi", "0 */30 * * * *", GetChartListByApi) //同步图表
+		getChartListByApi := task.NewTask("getChartListByApi", "0 */10 * * * *", GetChartDetailByChartId) //同步图表
 		task.AddTask("getChartListByApi", getChartListByApi)
 
 		getYiDongActivity := task.NewTask("getYiDongActivity", "0 */10 * * * *", GetYiDongActivity) //同步易董的活动信息

+ 1 - 1
services/wx_template_msg.go

@@ -625,7 +625,7 @@ func SendWxMsgWithArticleUpdate(first, keyWord1, keyWord2, keyWord3, keyWord4 st
 	sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
 	sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
 	sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
-	sendData["remark"] = map[string]interface{}{"value": "点击查看活动详情", "color": "#173177"}
+	sendData["remark"] = map[string]interface{}{"value": "点击查看报告详情", "color": "#173177"}
 	sendMap["data"] = sendData
 	WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
 	return

+ 1 - 1
utils/config.go

@@ -160,7 +160,7 @@ func init() {
 		WxPublicAppId = "wx4a844c734d8c8e56"
 		WxPublicAppSecret = "26c586e7ccb3c575433f0f37797b3eeb"
 		WxPublicId = "gh_b67e0049fb8c"
-		IndexName = "cygx_article_v02_01"
+		IndexName = "cygx_article_v03_23"
 		IndexNameArticleHistory = "cygx_article_history_v07_08"
 
 		//接收附件邮箱