Forráskód Böngészése

查研观向6.3 (实际改了之后的6.2版本)

xingzai 2 éve
szülő
commit
ae604298f7

+ 5 - 1
controllers/research.go

@@ -308,6 +308,7 @@ func (this *ResearchController) ThemeDetail() {
 
 	var itemsNull []*models.GetThemeAericleListResp
 	subjectMap := make(map[string]string)
+	articleMap := make(map[int]int)
 	for _, v := range list {
 		resp.IndustryName = v.IndustryName
 		resp.IndustrialManagementId = v.IndustrialManagementId
@@ -322,6 +323,7 @@ func (this *ResearchController) ThemeDetail() {
 		if v.FllowNum > 0 {
 			resp.IsFollw = true
 		}
+
 		if v.SubjectName == "" {
 			item := new(models.GetThemeAericleListResp)
 			item.ArticleId = v.ArticleId
@@ -333,13 +335,14 @@ func (this *ResearchController) ThemeDetail() {
 			item.Pv = v.Pv
 			item.CollectNum = v.CollectNum
 			itemsNull = append(itemsNull, item)
+
 		}
 	}
 
 	for _, v := range resp.ListSubject {
 		subjetcGroup := new(models.GetThemeAericleListBuSubjectResp)
 		for _, v2 := range list {
-			if v2.IndustrialSubjectId == v.IndustrialSubjectId {
+			if v2.IndustrialSubjectId == v.IndustrialSubjectId && articleMap[v2.ArticleId] == 0 {
 				item := new(models.GetThemeAericleListResp)
 				item.ArticleId = v2.ArticleId
 				item.Title = v2.Title
@@ -360,6 +363,7 @@ func (this *ResearchController) ThemeDetail() {
 					item.IsCollect = true
 				}
 				resp.List = append(resp.List, item)
+				articleMap[v2.ArticleId] = v2.ArticleId
 				//subjetcGroup.List = append(subjetcGroup.List, item)
 			}
 			subjetcGroup.SubjectName = v.SubjectName

+ 2 - 2
models/activity.go

@@ -196,14 +196,14 @@ func GetActivityListAll(condition string, pars []interface{}, uid, startSize, pa
 }
 
 //列表
-func GetActivityListByDateTime(startDate, endDate, activityIds string) (items []*CygxActivityList, err error) {
+func GetActivityListByDateTime(startDate, endDate, activityIds, activityIdsLongTime string) (items []*CygxActivityList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_activity WHERE activity_time > '` + startDate + `' AND activity_time < '` + endDate + `' `
 	activityIds = strings.TrimRight(activityIds, ",")
 	if activityIds != "" {
 		sql += ` AND activity_id  NOT IN (` + activityIds + `) `
 	}
-	sql += `  OR activity_id IN (1027,1029,1030,1031,1032,1033)`
+	sql += `  OR activity_id IN (` + activityIdsLongTime + `)`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }

+ 55 - 0
models/celue_article_history_record.go

@@ -0,0 +1,55 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CeLueArticleResultApi struct {
+	Data       []CeLueArticleResultApidate `json:"data"`
+	Code       int                         `json:"code"`
+	Msg        string                      `json:"msg"`
+	Pagination *Pagination                 `json:"pagination"`
+}
+
+type CeLueArticleResultApidate struct {
+	CelueHistoryId int      `json:"id"`
+	Mobile         string   `json:"phone_number"`
+	ArticleId      string   `json:"parameter"`
+	CreateDate     string   `json:"access_time"`
+	CrmUser        *CrmUser `json:"user"`
+	CompanyName    *CrmUser `json:"crm_company"`
+}
+
+type CrmUser struct {
+	RealName string `json:"name"`
+}
+
+type CrmCompany struct {
+	CompanyName string `json:"name"`
+}
+
+func GetCeLueArticleCountById(celueHistoryId int) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) AS count FROM cygx_celue_article_history_record WHERE celue_history_id = ? `
+	err = o.Raw(sql, celueHistoryId).QueryRow(&count)
+	return
+}
+
+type CygxCelueArticleHistoryRecord struct {
+	Id             int       `orm:"column(id);pk"`
+	ArticleId      string    `description:"文章ID"`
+	CelueHistoryId int       `description:"策略平台记录的ID"`
+	CreateTime     string    `description:"本地创建时间"`
+	CreateDateApi  time.Time `description:"图表创建时间"`
+	Mobile         string    `description:"手机号"`
+	CompanyName    string    `description:"公司名称"`
+	RealName       string    `description:"用户姓名"`
+}
+
+//新增
+func AddCeLueArticle(item *CygxCelueArticleHistoryRecord) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}

+ 1 - 0
models/db.go

@@ -102,6 +102,7 @@ func init() {
 		new(CygxChart),
 		new(CygxChartCollect),
 		new(CygxChartTop),
+		new(CygxCelueArticleHistoryRecord),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 69 - 2
models/industrial_management.go

@@ -1,9 +1,11 @@
 package models
 
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"hongze/hongze_cygx/utils"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -204,7 +206,7 @@ func UpdateIndustrialIsDeepLabel(idStr string) (err error) {
 	WHERE
 	industrial_management_id IN (
 		SELECT
-	industrial_management_id
+	a.industrial_management_id
 	FROM
 	cygx_industrial_article_group_management AS a
 	INNER JOIN cygx_article AS b ON b.id = a.cygx_article_id
@@ -212,7 +214,6 @@ func UpdateIndustrialIsDeepLabel(idStr string) (err error) {
 	1 = 1
 	AND b.match_type_name = '行业深度'
 	AND a.industrial_management_id IN ( ` + idStr + `)
-	AND is_hand_deep_label = 0
 	GROUP BY
 	a.industrial_management_id)`
 	_, err = o.Raw(msql).Exec()
@@ -379,3 +380,69 @@ func GetIndustrialManagementNewList(permissionName string) (items []*IndustrialM
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+//获取产业关联标的列表
+func GetIndustrialManagementForSubjecName(subjectName string) (items []*IndustrialSubject, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT s.subject_name,s.industrial_subject_id,m.industrial_management_id,m.industry_name
+			FROM cygx_industrial_subject as s 
+			INNER JOIN cygx_industrial_management as m ON m.industrial_management_id = s.industrial_management_id
+			WHERE subject_name IN (` + subjectName + `)`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//报告分类的新增与修改
+func ReportArticleClassificationEditNew(reportId int, industrialManagementIdStr string, articleId int, ndustrialSubjectIdStr string) (err error) {
+	to, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			to.Commit()
+		} else {
+			to.Rollback()
+		}
+	}()
+	//修改文章是否过滤字段
+	sql := `UPDATE cygx_article SET is_filter=0,  is_class=1 WHERE id=? `
+	_, err = to.Raw(sql, reportId).Exec()
+	if err != nil {
+		return
+	}
+	//删除文章关联标的
+	sql = `	DELETE FROM cygx_industrial_article_group_subject WHERE cygx_article_id = ?`
+	_, err = to.Raw(sql, reportId).Exec()
+	if err != nil {
+		return
+	}
+	//添加文章关联标的
+	if ndustrialSubjectIdStr != "0" && ndustrialSubjectIdStr != "" {
+		strList := strings.Split(ndustrialSubjectIdStr, ",")
+		for _, v := range strList {
+			sql := `INSERT INTO cygx_industrial_article_group_subject ( cygx_article_id, article_id, industrial_subject_id, create_time ) VALUES ( ?, ?, ?, ? )`
+			_, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
+			if err != nil {
+				return
+			}
+		}
+	}
+	//删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
+	sql = `	DELETE FROM cygx_industrial_article_group_management WHERE cygx_article_id = ?`
+	_, err = to.Raw(sql, reportId).Exec()
+	if err != nil {
+		return
+	}
+	//添加文章关联行业
+	industrialStrList := strings.Split(industrialManagementIdStr, ",")
+	for _, v := range industrialStrList {
+		sql = `	INSERT INTO cygx_industrial_article_group_management ( cygx_article_id, article_id, industrial_management_id, create_time ) VALUES ( ?, ?, ?, ? )`
+		_, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 1 - 0
models/report.go

@@ -38,6 +38,7 @@ type IndustrialSubject struct {
 	IndustrialSubjectId    int    `orm:"column(industrial_subject_id);pk" description:"标的id"`
 	IndustrialManagementId int    `description:"产业id"`
 	SubjectName            string `description:"标的名称"`
+	IndustryName           string `description:"产业名称"`
 }
 
 //获取产业报告数量

+ 15 - 0
models/user_record.go

@@ -124,3 +124,18 @@ func GetUserThirdRecordByUserId(userId int) (item *UserRecord, err error) {
 	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
 	return
 }
+
+//根据手机号获取用户的openid
+func GetUserRecordListByMobile(platform int, bindAccount string) (items []*OpenIdList, err error) {
+	var sql string
+	if utils.RunMode == "release" {
+		sql = `SELECT cr.open_id FROM user_record  as u 
+			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
+			WHERE create_platform=? AND bind_account IN (` + bindAccount + `)`
+	} else {
+		platform = 1
+		sql = `SELECT open_id FROM	user_record  WHERE create_platform =? AND bind_account IN (` + bindAccount + `)`
+	}
+	_, err = orm.NewOrm().Raw(sql, platform).QueryRows(&items)
+	return
+}

+ 22 - 11
services/activity.go

@@ -15,11 +15,11 @@ import (
 
 //修改活动状态
 func UpdateActivitySattus(cont context.Context) (err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println("同步失败,Err:", err.Error())
-		}
-	}()
+	//defer func() {
+	//	if err != nil {
+	//		fmt.Println("同步失败,Err:", err.Error())
+	//	}
+	//}()
 	go models.UpdateActivitySattusToHaveInHand()
 	go models.UpdateActivitySattusToComplete()
 	return
@@ -29,6 +29,7 @@ func UpdateActivitySattus(cont context.Context) (err error) {
 func SendActivityBeginMsg(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
+			go utils.SendAlarmMsg("60分钟会议消息提醒失败", 2)
 			fmt.Println("发送失败,Err:", err.Error())
 		}
 	}()
@@ -82,6 +83,7 @@ func SendActivityBeginMsg(cont context.Context) (err error) {
 func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
+			go utils.SendAlarmMsg("15分钟会议消息提醒失败", 2)
 			fmt.Println("发送失败,Err:", err.Error())
 		}
 	}()
@@ -128,6 +130,7 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("err:", err)
+			go utils.SendAlarmMsg("发送附件模版消息失败", 2)
 			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
 		}
@@ -417,12 +420,11 @@ func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
 	//var touser string
 	defer func() {
 		if err != nil {
-			fmt.Println("err:", err)
+			go utils.SendAlarmMsg("发送附件模版消息失败", 2)
 			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
 		}
 		if msg != "" {
-			fmt.Println(msg)
+			go utils.SendAlarmMsg(msg, 2)
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
@@ -494,10 +496,11 @@ func SendEmailFileForAskMsg(cont context.Context) (err error) {
 	//var touser string
 	defer func() {
 		if err != nil {
+			go utils.SendAlarmMsg("发送附件模版消息失败", 2)
 			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
 		}
 		if msg != "" {
+			go utils.SendAlarmMsg(msg, 2)
 			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
 		}
 	}()
@@ -601,12 +604,13 @@ func ActivityAttendanceDetail(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("ActivityAttendanceDetail Err:" + err.Error())
+			go utils.SendAlarmMsg("同步进门财经数据失败", 2)
 			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ActivityAttendanceDetail ErrMsg:"+err.Error(), utils.EmailSendToUsers)
 		}
 	}()
 	var activityIds string
 	fmt.Println("开始同步")
-	dateTime := time.Now().AddDate(0, 0, -14).Format(utils.FormatDate)
+	dateTime := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
 	dateNow := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
 	startDate := dateTime + " 00:00:00"
 	endDate := dateNow + " 23:59:59"
@@ -725,8 +729,15 @@ func ActivityAttendanceDetail(cont context.Context) (err error) {
 		}
 	}
 
+	configCode := "jin_meng_activity_id"
+	detail, err := models.GetConfigByCode(configCode)
+	if err != nil {
+		return err
+	}
+	fmt.Println(detail.ConfigValue)
+
 	//获取需要处理的活动
-	listActivity, err := models.GetActivityListByDateTime(startDate, endDate, activityIds)
+	listActivity, err := models.GetActivityListByDateTime(startDate, endDate, activityIds, detail.ConfigValue)
 	if err != nil {
 		fmt.Println("GetTacticsList Err:", err.Error())
 		return err

+ 147 - 5
services/article.go

@@ -11,6 +11,7 @@ import (
 	"html"
 	"io/ioutil"
 	nhttp "net/http"
+	"net/url"
 	"strconv"
 	"strings"
 	"time"
@@ -302,15 +303,15 @@ func FixArticleFirstCount(body string) (contentSub string, err error) {
 func GetArticleListByApi(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
-			fmt.Println("GetArticleListByApi Err:" + err.Error())
-			go utils.SendAlarmMsg("获取图表信息失败", 2)
+			//fmt.Println("GetArticleListByApi Err:" + err.Error())
+			go utils.SendAlarmMsg("同步策略平台数据失败", 2)
 			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ErrMsg:"+err.Error(), utils.EmailSendToUsers)
 		}
 	}()
-	url := "https://vmp.hzinsights.com/v2api/articles/mp?take=100&skip=0&publish_status=2,4&order=publish_date&sort=DESC"
+	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, url, nil)
+	req, err := nhttp.NewRequest(method, requestUrl, nil)
 	if err != nil {
 		fmt.Println("GetListApi Err:", err.Error())
 		return err
@@ -342,6 +343,12 @@ func GetArticleListByApi(cont context.Context) (err error) {
 		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
@@ -579,11 +586,78 @@ func GetArticleListByApi(cont context.Context) (err error) {
 			item.MatchTypeName = matchTypeName
 			item.Stock = v.Stock
 			item.FieldName = v.FieldName
-			_, err = models.AddCygxArticles(item)
+			newId, err := models.AddCygxArticles(item)
 			if err != nil {
 				fmt.Println("AddCygxArticle Err:", err.Error())
 				return err
 			}
+			if v.ReportType == 2 {
+				var subjectStr string
+				var industrialManagementIdStr string
+				var industrialSubjectIdStr string
+				var keyword1 string
+				var keyword2 string
+				var keyword3 string
+				var keyword4 string
+				sliceSubjects := strings.Split(v.Stock, "/")
+				mapManagementForSubject := make(map[string]string)
+				if len(sliceSubjects) > 0 {
+					for _, vSubject := range sliceSubjects {
+						sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
+						sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
+						subject := sliceXiahuaxian[0]
+						subjectStr += "'" + subject + "',"
+					}
+					subjectStr = strings.TrimRight(subjectStr, ",")
+					if subjectStr != "" {
+						listIndustrial, err := models.GetIndustrialManagementForSubjecName(subjectStr)
+						if err != nil {
+							fmt.Println("AddCygxArticle 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 {
+								industrialManagementIdStr += strconv.Itoa(vIndustrial.IndustrialManagementId) + ","
+								industrialSubjectIdStr += strconv.Itoa(vIndustrial.IndustrialSubjectId) + ","
+								mapManagementForSubject[vIndustrial.IndustryName] += vIndustrial.SubjectName + "/"
+							}
+							industrialManagementIdStr = strings.TrimRight(industrialManagementIdStr, ",")
+							industrialSubjectIdStr = strings.TrimRight(industrialSubjectIdStr, ",")
+							if industrialManagementIdStr != "" {
+								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
+								}
+							}
+
+							var peoductName string
+							for mk, mv := range mapManagementForSubject {
+								peoductName += "【" + mk + "--" + strings.TrimRight(mv, "/") + "】"
+							}
+							keyword1 = "新报告产业标签:【" + v.FieldName + "】,个股标签:" + subjectStr
+							keyword2 = "已自动关联至以下产业和标的:" + peoductName
+							keyword3 = v.Title
+							keyword4 = v.PublishDate.Format(utils.FormatDateTime)
+							SendWxMsgWithArticleClassToAdmin(keyword1, keyword2, keyword3, keyword4, openIdList, articleIdInt)
+						} else {
+							keyword1 = "新报告产业标签:【" + v.FieldName + "】,个股标签:" + subjectStr
+							keyword2 = "未归类"
+							keyword3 = v.Title
+							keyword4 = v.PublishDate.Format(utils.FormatDateTime)
+							SendWxMsgWithArticleClassToAdmin(keyword1, keyword2, keyword3, keyword4, openIdList, articleIdInt)
+						}
+					}
+				}
+			}
 		}
 	}
 	return
@@ -798,3 +872,71 @@ func PushViewRecordNewRedisData(reportViewRecord *ReportViewRecord, companyId in
 	}
 	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
+	}
+
+	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()
+		item.CreateTime = v.CreateDate
+		count, err := models.GetCeLueArticleCountById(v.CelueHistoryId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			return err
+		}
+		if count == 0 {
+			_, err := models.AddCeLueArticle(item)
+			if err != nil {
+				fmt.Println(err)
+				return err
+			}
+		}
+	}
+	return
+
+}

+ 1 - 0
services/chart.go

@@ -43,6 +43,7 @@ func PublicGetDate(url, authorization string) (body []byte, err error) {
 func GetChartListByApi(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
+			go utils.SendAlarmMsg("发送邮件:同步用户到策略平台信息失败", 2)
 			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "GetArticleListByApi ErrMsg:"+err.Error(), utils.EmailSendToUsers)
 		}
 	}()

+ 1 - 2
services/industrial_management.go

@@ -31,7 +31,7 @@ func UpdateIndustrialManagementLabel(cont context.Context) (err error) {
 	idStr = strings.TrimRight(idStr, ",")
 
 	go models.UpdateIndustrialIsDeepLabel(idStr)
-	fmt.Println(idStr)
+	//fmt.Println(idStr)
 	//go models.UpdateActivitySattusToComplete()
 	fmt.Println("修改状态完成")
 	return
@@ -73,7 +73,6 @@ func UpdateIndustrialManagementSubjectNnames() (err error) {
 }
 
 func ChageIndustrialArticleNum(cont context.Context) (err error) {
-	fmt.Println("666")
 	allList, err := models.IndustrialManagementAll()
 	if err != nil {
 		fmt.Println("GetArticleAll Err:", err.Error())

+ 2 - 16
services/send_company_user.go

@@ -54,8 +54,6 @@ func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
 		}
 	}()
 	method := "POST"
-	//fmt.Println(string(jsonCompany))
-	//utils.FileLog.Info(string(jsonCompany))
 	payload := strings.NewReader(jsonCompany)
 	client := &http.Client{}
 	req, err := http.NewRequest(method, url, payload)
@@ -82,9 +80,6 @@ func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
 		return err
 
 	}
-	//if result.Code != 1 {
-	//	go utils.SendEmail("同步策略平台信息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), url, utils.EmailSendToExpert)
-	//}
 	item := new(models.CygxShanghaiCompanyLog)
 	item.CreateTime = time.Now()
 	item.Url = url
@@ -92,10 +87,6 @@ func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
 	item.Result = string(body)
 	go models.AddCygxShanghaiCompanyLog(item)
 
-	//if strings.Index(string(body), "必填") > 0 || strings.Index(string(body), "失败") > 0 || strings.Index(string(body), "社会信用代码格式错误") > 0 {
-	//	go utils.SendEmail("同步策略平台信息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), string(body), utils.EmailSendToExpert)
-	//}
-	//var companyCode string
 	for _, v := range result.Data.FailInfo {
 		if v.ErrMsg != "" {
 			//companyCode += "'" + v.ErrVal + "',"
@@ -108,12 +99,6 @@ func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
 		}
 	}
 	return
-	//给产品导数据用,别删
-	//companyCode = postType + companyCode
-	////fmt.Println(result.Data.FailInfo)
-	//utils.FileLog.Info(string(companyCode))
-	//utils.FileLog.Info(string(body))
-	//fmt.Println(string(body))
 }
 
 func DotongbuShangHai(cont context.Context) (err error) {
@@ -326,7 +311,8 @@ func DotongbuShangHaiSendEmail(cont context.Context) (err error) {
 	var msg string
 	defer func() {
 		if err != nil {
-			go utils.SendEmail("发送邮件同步策略平台获取数据信息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToExpert)
+			go utils.SendAlarmMsg("发送邮件:同步用户到策略平台信息失败", 2)
+			go utils.SendEmail("发送邮件:同步用户到策略平台信息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToExpert)
 		}
 	}()
 	list, err := models.GetCygxShanghaiCompanyLog()

+ 1 - 1
services/tactics.go

@@ -721,7 +721,7 @@ func BodyAnalysis2(body string) (expertNumStr, expertContentStr, interviewDateSt
 func GetSummarytoEs(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
-			fmt.Println("同步失败,Err:", err.Error())
+			go utils.SendAlarmMsg("同步ES记录失败", 2)
 		}
 	}()
 	endDate := time.Now().AddDate(0, 0, -30).Format(utils.FormatDate)

+ 8 - 1
services/task.go

@@ -21,6 +21,10 @@ func Task() {
 		task.AddTask("getSummarytoEs", getSummarytoEs)
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */5 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
 		task.AddTask("getArticleListByApi", getArticleListByApi)
+
+		getCeLueArticlePv := task.NewTask("getCeLueArticlePv", "0 */10 * * * *", GetCeLueArticlePv) //通过三方接口获取策略平台上的阅读记录
+		task.AddTask("getCeLueArticlePv", getCeLueArticlePv)
+
 		//会议提醒模板消息推送
 		sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 8-22 * * *", SendActivityBeginMsg) //会议前60分钟的提醒
 		task.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
@@ -64,7 +68,10 @@ func Task() {
 
 		sendEmailFileForAskMsg := task.NewTask("sendEmailFileForAskMsg", "0 */5 8-22 * * *", SendEmailFileForAskMsg) //非研选系列专家电话会,根据主持人姓名,会前15分钟将问题列表发送给至该主持人对应邮箱
 		task.AddTask("sendEmailFileForAskMsg", sendEmailFileForAskMsg)
-
+	}
+	if utils.RunMode != "release" {
+		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */60 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
+		task.AddTask("getArticleListByApi", getArticleListByApi)
 	}
 
 	//ActivityAttendanceDetail()

+ 1 - 0
services/user.go

@@ -597,6 +597,7 @@ func SendEmailUserWhiteListChange(cont context.Context) (err error) {
 	var condition string
 	defer func() {
 		if err != nil {
+			go utils.SendAlarmMsg("发送附件模版消息失败", 2)
 			fmt.Println("err:", err, time.Now())
 			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
 			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())

+ 42 - 0
services/wx_template_msg.go

@@ -176,6 +176,48 @@ func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openId
 	return
 }
 
+//发送报告提问消息提醒
+func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, articleId int) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		}
+		fmt.Println("line 21", err, msg)
+	}()
+	accessToken, err := models.GetWxAccessTokenByXzs()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+	var first string
+	first = keyWord1
+	keyword1 := keyWord2
+	keyword2 := keyWord3
+	keyword3 := keyWord4
+	keyword4 := ""
+
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	templateId := utils.TemplateIdByProductXzs
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+	sendMap["template_id"] = templateId
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
+	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
+	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"}
+	sendMap["data"] = sendData
+	WxSendTemplateMsg(sendUrl, sendMap, openIdList)
+	return
+}
+
 //弘则投资:
 //Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY  活动预约通知
 //CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM  项目状态变更通知

+ 7 - 1
utils/config.go

@@ -39,6 +39,7 @@ var (
 	WxMsgTemplateIdAskMsgXzs        string //手机号用户【XXX】发送模板消息模板ID(小助手)
 	WxMsgTemplateIdAskMsgMobile     string //手机号用户【XXX】发送模板消息
 	WxMsgTemplateIdAskMsgMobileAll  string //手机号用户【XXX】发送模板消rm -
+	TemplateIdByProductXzs          string //产品运行报告通知-模板ID(小助手)
 )
 
 //微信公众号配置信息
@@ -68,6 +69,7 @@ var (
 	HtgjName                  string //海通国际名称
 	ActSendMsgMobile          string //活动带问发送模板消息接收者的手机号
 	StrategyPlatform          string //策略品台跳转链接地址
+	ArticleTaskClassMobile    string //策略平台报告自动归类消息通知对象
 )
 
 func init() {
@@ -130,7 +132,7 @@ func init() {
 		WxPublicAppId = "wx4a844c734d8c8e56"
 		WxPublicAppSecret = "26c586e7ccb3c575433f0f37797b3eeb"
 		WxPublicId = "gh_b67e0049fb8c"
-		IndexName = "cygx_article_v0225"
+		IndexName = "cygx_article_v0526"
 
 		//接收附件邮箱
 		EmailTechnology = "mlluo@hzinsights.com;jxu@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"    //科技行业专家邮箱
@@ -143,6 +145,7 @@ func init() {
 		WxMsgTemplateIdAskMsg = "PaoDanHGlt1kFw5q-4_ipJSwO3FyZpxSSNg4rwB7YCk"
 		WxMsgTemplateIdAskMsgMobile = ""
 		ActSendMsgMobile = "15618524605"
+		ArticleTaskClassMobile = "15557270714,18767183922"
 
 	} else {
 		WxAppId = "wxcc32b61f96720d2f"
@@ -171,6 +174,7 @@ func init() {
 		WxMsgTemplateIdAskMsg = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"
 		WxMsgTemplateIdAskMsgMobile = "15557270714,17634786714,18767183922,17516315016"
 		ActSendMsgMobile = "17634786714"
+		ArticleTaskClassMobile = "15557270714,18767183922,13253777798"
 	}
 
 	//查研观向小助手
@@ -182,6 +186,7 @@ func init() {
 		WxMsgTemplateIdAskMsgXzs = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"        //手机号用户【XXX】发送模板消息模板ID(小助手)
 		WxMsgTemplateIdApplyXzs = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"         //申请待处理(小助手)
 		WxMsgTemplateIdApplyCancelXzs = "UU_d7ks0XZBnWg2xFzxL9Heilm4kisX39K7dr4SDdO8"   ////预约取消提醒(小助手)
+		TemplateIdByProductXzs = "-YjuPOB7Fqd-S3ilabYa6wvjDY9aXmeEfPN6DCiy-EY"          //产品运行报告通知-模板ID(小助手)
 	} else {
 		//新的模板ID
 		WxPublicIdXzs = "wxb7cb8a15abad5b8e"                                            //查研观向小助手
@@ -190,6 +195,7 @@ func init() {
 		WxMsgTemplateIdAskMsgXzs = "IpS-yuNNQc8osCoy20jPHNkvBUyKRL1NGn7c0G9xmQA"        //手机号用户【XXX】发送模板消息模板ID(小助手)
 		WxMsgTemplateIdApplyXzs = "IpS-yuNNQc8osCoy20jPHNkvBUyKRL1NGn7c0G9xmQA"         //申请待处理(小助手)
 		WxMsgTemplateIdApplyCancelXzs = "gCSCAWNNhjkzE2V1cjbIV_Ex68R_8LM_u25qDlSKWyM"   ////预约取消提醒(小助手)
+		TemplateIdByProductXzs = "tNcCUiK_uUkuxaFF7M9NP2RwLkw8uHFjG-TDIxGUKxo"          //产品运行报告通知-模板ID(小助手)
 	}
 }