Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into cygx_10.2

xingzai 2 years ago
parent
commit
f55dc3cbdc

+ 4 - 1
controllers/activity.go

@@ -873,7 +873,10 @@ func (this *ActivityCoAntroller) SignupAdd() {
 		resp.SellerMobile = sellerMobile
 
 	}
-
+	//公司线下调研活动客户报名后给建会人,所属销售推送模板信息
+	if signupStatus == "Success" {
+		go services.SendResearchActivitiesTemplateMsg(user, activityInfo)
+	}
 	if signupType == 1 && user.IsMsgOutboundMobile == 0 {
 		resp.GoOutboundMobile = true
 		if user.Mobile != "" || user.OutboundMobile != "" {

+ 23 - 10
controllers/report.go

@@ -1495,9 +1495,10 @@ func (this *ReportController) ReportListByType() {
 		br.Msg = "请选择报告类型"
 		return
 	}
-	fmt.Println(tbdb)
 	condition = ` AND publish_status = 1  `
-
+	if user.CompanyId != utils.HZ_COMPANY_ID {
+		condition += ` AND visible_range = 1  `
+	}
 	total, err := models.GetCygxReportSelectionPublic(condition, tbdb, pars)
 	if err != nil {
 		br.Msg = "获取信息失败"
@@ -1743,7 +1744,7 @@ func (this *ReportController) Detail() {
 // @Description 获取本周研究汇总详情接口
 // @Param   ArticleId   query   int  true       "报告ID"
 // @Success 200 {object} models.ResearchSummaryLetailResp
-// @router /researchSummary/detail [get]
+// @router /researchSummary/detail_test_del [get]
 func (this *ReportController) ResearchDetail() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -1920,20 +1921,32 @@ func (this *ReportController) MinutesDetailV4() {
 		br.Msg = "获取信息失败"
 		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
 	}
+	//resp.HasPermission = hasPermission
+	//if hasPermission != 1 {
+	//	br.Ret = 200
+	//	br.Success = true
+	//	br.Msg = "获取成功"
+	//	br.Data = resp
+	//	return
+	//}
+	detail, err := models.GetCygxMinutesSummaryInfoById(articleId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId:" + strconv.Itoa(articleId)
+		return
+	}
+	//未设置全部可见的只能给弘则内部查看
+	if detail.VisibleRange == 1 || user.CompanyId == utils.HZ_COMPANY_ID {
+		resp.IsShow = true
+	}
 	resp.HasPermission = hasPermission
-	if hasPermission != 1 {
+	if hasPermission != 1 || !resp.IsShow {
 		br.Ret = 200
 		br.Success = true
 		br.Msg = "获取成功"
 		br.Data = resp
 		return
 	}
-	detail, err := models.GetCygxMinutesSummaryInfoById(articleId)
-	if err != nil {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId:" + strconv.Itoa(articleId)
-		return
-	}
 	detail.PublishDate = utils.StrTimeToTime(detail.PublishDate).Format(utils.FormatDate)
 	detail.VideoPlaySeconds = utils.Mp3Time(detail.VideoPlaySeconds)
 	listFirst, err := models.GetMinutesSummarylogListAllV4(articleId)

+ 232 - 0
controllers/report_selection.go

@@ -0,0 +1,232 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// 报告
+type ReportSelectionController struct {
+	BaseAuthController
+}
+
+// @Title 获取报告精选详情
+// @Description 获取报告精选详情接口
+// @Param   ArticleId   query   int  true       "报告ID"
+// @Param   IsBestNew   query   bool  false       "是否获取最新的一篇报告"
+// @Success 200 {object} models.ReportSelectionLetailResp
+// @router /detail [get]
+func (this *ReportSelectionController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	uid := user.UserId
+	articleId, _ := this.GetInt("ArticleId")
+	isBestNew, _ := this.GetBool("IsBestNew")
+	if isBestNew {
+		tbdb := "cygx_report_selection"
+		condition := ` AND publish_status = 1  `
+		var pars []interface{}
+		list, err := models.GetReportSelectionListPublic(condition, "1", tbdb, pars, 0, 1)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range list {
+			articleId = v.ArticleId
+		}
+	}
+	if articleId < 1 {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "报告ID错误" + strconv.Itoa(articleId)
+		return
+	}
+	resp := new(models.ReportSelectionLetailResp)
+	//判断用户权限
+	hasPermission, err := services.GetUserhasPermission(user)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
+	}
+	detail, err := models.GetCygxReportSelectionInfoById(articleId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId:" + strconv.Itoa(articleId)
+		return
+	}
+	//未设置全部可见的只能给弘则内部查看
+	if detail.VisibleRange == 1 || user.CompanyId == utils.HZ_COMPANY_ID {
+		resp.IsShow = true
+	}
+	resp.HasPermission = hasPermission
+	if hasPermission != 1 || !resp.IsShow {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+	if detail.ReportLink != "" {
+		articleIdLink, _ := services.GetReportLinkToArticleid(detail.ReportLink)
+		detail.CeLueArticleId = articleIdLink
+	}
+	articleStockMap, _ := services.GetArticleStockMap()
+	detail.PublishDate = utils.StrTimeToTime(detail.PublishDate).Format("2006-01-02")
+	existMap := make(map[int]int)
+	var items []*models.ReportSelectionChartPermission
+	var itemsSubject []*models.ReportSelectionChartLogPermission
+	listLog, err := models.GetReportSelectionlogListAll(articleId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取子类信息失败,Err:" + err.Error()
+		return
+	}
+	detail.VideoPlaySeconds = utils.Mp3Time(detail.VideoPlaySeconds)
+	//获取行业核心逻辑汇总
+	listChartLog, err := models.GetCygxReportSelectionChartLogRepList(articleId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	mapChartLog := make(map[string]string)
+	for _, v := range listChartLog {
+		mapChartLog[v.ChartPermissionName] = v.BodyChartSummary
+	}
+	for _, v := range listLog {
+		item := new(models.ReportSelectionChartPermission)
+		itemSubject := new(models.ReportSelectionChartLogPermission)
+		itemSubject.PermissionName = v.PermissionName
+		if existMap[v.ChartPermissionId] == 0 {
+			//item.PermissionName = v.PermissionName + "领域深度报告和调研"
+			item.PermissionName = v.PermissionName
+			item.IcoLink = v.IcoLink
+			listSonLog, err := models.GetReportSelectionlogSonListAll(articleId, v.ChartPermissionId)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
+				return
+			}
+			for k2, v2 := range listSonLog {
+				if v2.IndustrialManagementId != "" {
+					listIndustrial, err := models.GetIndustrialByIds(v2.IndustrialManagementId)
+					if err != nil && err.Error() != utils.ErrNoRow() {
+						br.Msg = "获取信息失败"
+						br.ErrMsg = "获取信息失败,Err:" + err.Error()
+						return
+					}
+					listSonLog[k2].OverviewArticleId = articleStockMap[v2.SubjectName]
+					listSonLog[k2].List = listIndustrial
+					if v2.Label != "" {
+						v2.CompanyLabel = strings.Split(v2.Label, "{|}")
+					}
+				}
+				itemSubject.ListSubject = append(itemSubject.ListSubject, &models.ReportSelectionChartLogSubjectName{SubjectName: v2.SubjectName, IsNew: v2.IsNew, IndustrialSubjectId: v2.IndustrialSubjectId})
+			}
+			item.BodyChartSummary = mapChartLog[v.PermissionName]
+			item.List = listSonLog
+			items = append(items, item)
+			itemsSubject = append(itemsSubject, itemSubject)
+			//itemLogs = make([]*models.CygxReportSelectionLogDetail, 0)
+		}
+		existMap[v.ChartPermissionId] = v.ChartPermissionId
+	}
+
+	historyRecord := new(models.CygxReportHistoryRecord)
+	historyRecord.UserId = uid
+	historyRecord.ArticleId = articleId
+	historyRecord.CreateTime = time.Now()
+	historyRecord.Mobile = user.Mobile
+	historyRecord.Email = user.Email
+	historyRecord.CompanyId = user.CompanyId
+	historyRecord.CompanyName = user.CompanyName
+	historyRecord.ReportType = "bgjx"
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+		return
+	}
+	historyRecord.RealName = user.RealName
+	if sellerItem != nil {
+		historyRecord.SellerName = sellerItem.RealName
+	}
+
+	go models.AddCygxReportHistoryRecord(historyRecord)
+	resp.List = items
+	resp.ListPermissionSubject = itemsSubject
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 标的点击记录
+// @Description 标的点击记录接口
+// @Param	request	body models.AddCygxReportSelectionSubjectHistoryReq true "type json string"
+// @router /click/history [post]
+func (this *ReportSelectionController) ClickHistory() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	var req models.AddCygxReportSelectionSubjectHistoryReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.ArticleId <= 0 {
+		br.Msg = "文章不存在"
+		br.ErrMsg = "文章不存在,文章ID错误"
+		return
+	}
+	if req.IndustrialSubjectId <= 0 {
+		br.Msg = "标的ID不存在"
+		br.ErrMsg = "标的ID不存在,标的ID错误"
+		return
+	}
+	item := models.CygxReportSelectionSubjectHistory{
+		UserId:              user.UserId,
+		ArticleId:           req.ArticleId,
+		CreateTime:          time.Now(),
+		ModifyTime:          time.Now(),
+		Mobile:              user.Mobile,
+		Email:               user.Email,
+		CompanyId:           user.CompanyId,
+		CompanyName:         user.CompanyName,
+		IndustrialSubjectId: req.IndustrialSubjectId,
+	}
+	err = models.AddCygxReportSelectionSubjectHistory(&item)
+	if err != nil {
+		br.Msg = "记录失败"
+		br.ErrMsg = "记录失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "记录成功"
+}

+ 45 - 0
models/admin.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"time"
 )
 
 type AdminMobileResp struct {
@@ -15,3 +16,47 @@ func GetAdminByRole() (items []*AdminMobileResp, err error) {
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+type Admin struct {
+	AdminId                   int    `orm:"column(admin_id);pk" description:"系统用户id"`
+	AdminName                 string `description:"系统用户名称"`
+	AdminAvatar               string `description:"用户头像"`
+	RealName                  string `description:"系统用户姓名"`
+	Password                  string `json:"-"`
+	LastUpdatedPasswordTime   string `json:"-"`
+	Enabled                   int
+	Email                     string `description:"系统用户邮箱"`
+	LastLoginTime             string
+	CreatedTime               time.Time
+	LastUpdatedTime           string
+	Role                      string    `description:"系统用户角色"`
+	Mobile                    string    `description:"手机号"`
+	RoleType                  int       `description:"角色类型:1需要录入指标,0:不需要"`
+	RoleId                    int       `description:"角色ID"`
+	RoleName                  string    `description:"角色名称"`
+	RoleTypeCode              string    `description:"角色类型编码"`
+	DepartmentId              int       `description:"部门id"`
+	DepartmentName            string    `description:"部门名称"`
+	GroupId                   int       `description:"分组id"`
+	GroupName                 string    `description:"分组名称"`
+	Authority                 int       `description:"管理权限,0:无,1:部门负责人,2:小组负责人,或者ficc销售主管,4:ficc销售组长"`
+	Position                  string    `description:"职位"`
+	DisableTime               time.Time `description:"禁用时间"`
+	ChartPermission           int8      `description:"图表权限id"`
+	OpenId                    string    `description:"弘则部门公众号的openid"`
+	UnionId                   string    `description:"微信公众平台唯一标识"`
+	EdbPermission             int8      `description:"指标库操作权限,0:只能操作 自己的,1:所有指标可操作"`
+	MysteelChemicalPermission int8      `description:"钢联化工指标操作权限,0:只能操作 自己的,1:所有指标可操作"`
+	PredictEdbPermission      int8      `description:"预测指标库操作权限,0:只能操作 自己的,1:所有预测指标可操作"`
+	Province                  string    `description:"省"`
+	ProvinceCode              string    `description:"省编码"`
+	City                      string    `description:"市"`
+	CityCode                  string    `description:"市编码"`
+}
+
+func GetSysAdminById(adminId int) (item *Admin, err error) {
+	sql := `SELECT * FROM admin WHERE admin_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sql, adminId).QueryRow(&item)
+	return
+}

+ 15 - 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 {
@@ -709,3 +710,17 @@ WHERE
 type SummaryArticleStockResp struct {
 	List []*SummaryArticleStock
 }
+
+// 综述报告
+func GetArticleStock() (items []*SummaryArticleStock, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			stock,article_id
+		FROM
+			cygx_article AS art 
+		WHERE
+			1 = 1 
+			AND type_name = '综述报告' `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 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
+}

+ 15 - 0
models/company.go

@@ -91,6 +91,21 @@ func GetCompanyPermission(companyId int) (permission string, err error) {
 	return
 }
 
+func GetCompanyPermissionName(companyId int) (permission string, err error) {
+	sql := ` SELECT GROUP_CONCAT(DISTINCT b.chart_permission_name  ORDER BY b.sort ASC SEPARATOR ',') AS permission
+			FROM company_report_permission AS a
+			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
+			INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id
+			WHERE  a.company_id=?
+			AND c.is_suspend=0
+            AND b.cygx_auth=1
+			AND c.status IN('正式','试用','永续')
+			AND a.status IN('正式','试用','永续') `
+	o := orm.NewOrm()
+	err = o.Raw(sql, companyId).QueryRow(&permission)
+	return
+}
+
 func GetCompanyPermissionByUser(companyId int) (permission string, err error) {
 	sql := ` SELECT GROUP_CONCAT(DISTINCT b.remark  ORDER BY b.sort ASC  SEPARATOR ',') AS permission
 			FROM company_report_permission AS a

+ 1 - 0
models/db.go

@@ -133,6 +133,7 @@ func init() {
 		new(CygxReportSelectionVoiceHistory),
 		new(CygxActivitySpecialTripBill),
 		new(CygxXzsChooseCategory),
+		new(CygxReportSelectionSubjectHistory),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 9 - 6
models/minutesSummary.go

@@ -13,18 +13,21 @@ type DetailCygxMinutesSummaryRep struct {
 	VideoPlaySeconds string `description:"时长"`
 	VideoName        string `description:"音频名称"`
 	Abstract         string `description:"摘要"`
+	VisibleRange     int    `description:"设置可见范围1全部,0内部"`
 }
 
 type MinutesSummaryLetailRespV4 struct {
 	Detail        *DetailCygxMinutesSummaryRep
 	HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
 	List          []*ResearchSummaryChartPermission
+	IsShow        bool `description:"是否展示"`
 }
 
 type MinutesSummaryLetailResp struct {
 	Detail        *DetailCygxMinutesSummaryRep
 	HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
 	List          []*MinutesSummaryChartPermission
+	IsShow        bool `description:"是否展示"`
 }
 
 type MinutesSummaryChartPermission struct {
@@ -49,7 +52,7 @@ type MinutesSummaryId struct {
 	ArticleId int `description:"报告I"`
 }
 
-//通过纪要ID获取详情
+// 通过纪要ID获取详情
 func GetCygxMinutesSummaryInfoById(articleId int) (item *DetailCygxMinutesSummaryRep, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_minutes_summary  WHERE article_id=? AND publish_status = 1 `
@@ -57,7 +60,7 @@ func GetCygxMinutesSummaryInfoById(articleId int) (item *DetailCygxMinutesSummar
 	return
 }
 
-//列表
+// 列表
 func GetMinutesSummarylogListAllV4(articleId int) (items []*ResearchSummaryChartPermission, err error) {
 	o := orm.NewOrm()
 	//sql := `SELECT c.permission_name ,c.image_url,l.*
@@ -76,7 +79,7 @@ func GetMinutesSummarylogListAllV4(articleId int) (items []*ResearchSummaryChart
 	return
 }
 
-//列表
+// 列表
 func GetMinutesSummarylogListAll(articleId int) (items []*MinutesSummaryChartPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT c.permission_name ,c.image_url,l.*
@@ -90,7 +93,7 @@ func GetMinutesSummarylogListAll(articleId int) (items []*MinutesSummaryChartPer
 	return
 }
 
-//列表
+// 列表
 func GetMinutesSummarylogSonListAll(articleId, chartPermissionId int) (items []*CygxMinutesSummaryLogDetail, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT   l.link_article_id,l.body ,a.video_url 
@@ -102,7 +105,7 @@ func GetMinutesSummarylogSonListAll(articleId, chartPermissionId int) (items []*
 	return
 }
 
-//列表
+// 列表
 func GetMinutesSummarylogSonListSecond(articleId int, artType string) (items []*CygxResearchSummaryLogSecond, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT c.permission_name ,c.chart_permission_id ,c.image_url_m as image_url, l.* 
@@ -116,7 +119,7 @@ func GetMinutesSummarylogSonListSecond(articleId int, artType string) (items []*
 	return
 }
 
-//列表
+// 列表
 func GetMinutesSummarylogListThird(articleId, chartPermissionId int, artType string) (items []*CygxResearchSummaryLogThird, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT  l.link_article_id,l.body ,a.video_url

+ 4 - 2
models/report.go

@@ -300,12 +300,14 @@ type ReportDetailRoadshow struct {
 	IsCollect        bool   `description:"是否收藏:true,已收藏,false:未收藏"`
 	IsRoadShow       bool   `description:"是否是路演精华"`
 	CategoryId       int    `description:"文章分类ID"`
+	VisibleRange     int    `description:"设置可见范围1全部,0内部"`
 }
 
 type RoadshowDetailResp struct {
 	Detail        *ReportDetailRoadshow
-	HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
-	HasFree       int `description:"1:已付费(至少包含一个品类的权限),2:未付费(没有任何品类权限)"`
+	HasPermission int  `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	HasFree       int  `description:"1:已付费(至少包含一个品类的权限),2:未付费(没有任何品类权限)"`
+	IsShow        bool `description:"是否展示"`
 }
 
 func GetReportRoadshowDetailById(articleId int) (item *ReportDetailRoadshow, err error) {

+ 2 - 0
models/report_selection.go

@@ -40,6 +40,7 @@ type DetailCygxReportSelectionRep struct {
 	MarketStrategy     string `description:"市场策略核心逻辑汇总"`
 	ReportLink         string `description:"报告链接"`
 	CeLueArticleId     int    `description:"策略报告详情"`
+	VisibleRange       int    `description:"设置可见范围1全部,0内部"`
 }
 
 type ReportSelectionLetailResp struct {
@@ -47,6 +48,7 @@ type ReportSelectionLetailResp struct {
 	HasPermission         int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
 	List                  []*ReportSelectionChartPermission
 	ListPermissionSubject []*ReportSelectionChartLogPermission `description:"行业列表"`
+	IsShow                bool                                 `description:"是否展示"`
 }
 
 type ReportSelectionChartPermission struct {

+ 31 - 0
models/report_selection_subject_history.go

@@ -0,0 +1,31 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxReportSelectionSubjectHistory struct {
+	Id                  int       `orm:"column(id);pk"`
+	ArticleId           int       `description:"文章ID"`
+	UserId              int       `description:"用户ID"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"修改时间"`
+	Mobile              string    `description:"手机号"`
+	Email               string    `description:"邮箱"`
+	CompanyId           int       `description:"公司id"`
+	CompanyName         string    `description:"公司名称"`
+	IndustrialSubjectId int       `description:"标的ID"`
+}
+
+type AddCygxReportSelectionSubjectHistoryReq struct {
+	ArticleId           int `description:"文章id"`
+	IndustrialSubjectId int `description:"标的ID"`
+}
+
+// 添加
+func AddCygxReportSelectionSubjectHistory(item *CygxReportSelectionSubjectHistory) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 5 - 5
models/researchSummary.go

@@ -51,7 +51,7 @@ type ResearchSummaryId struct {
 	ArticleId int `description:"报告I"`
 }
 
-//通过纪要ID获取详情
+// 通过纪要ID获取详情
 func GetCygxResearchSummaryInfoById(articleId int) (item *DetailCygxResearchSummaryRep, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_research_summary  WHERE article_id=?  AND publish_status = 1 `
@@ -72,7 +72,7 @@ type CygxResearchSummaryLog struct {
 	Type                   string    `description:"类型'SDBG深度报告片篇,’CYDYJY:产业调研纪要’,’SJDP事件点评,’BZCHJH:本周晨会精华’"`
 }
 
-//列表
+// 列表
 func GetResearchSummarylogListFirst(articleId int) (items []*ResearchSummaryChartPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT l.* 
@@ -84,7 +84,7 @@ func GetResearchSummarylogListFirst(articleId int) (items []*ResearchSummaryChar
 	return
 }
 
-//列表
+// 列表
 func GetResearchSummarylogSonListSecond(articleId int, artType string) (items []*CygxResearchSummaryLogSecond, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT c.permission_name ,c.chart_permission_id ,c.image_url_m as image_url, l.* 
@@ -98,7 +98,7 @@ func GetResearchSummarylogSonListSecond(articleId int, artType string) (items []
 	return
 }
 
-//列表
+// 列表
 func GetResearchSummarylogSonListThird(articleId, chartPermissionId int, artType string) (items []*CygxResearchSummaryLogThird, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT  l.link_article_id,l.body ,a.video_url
@@ -129,4 +129,4 @@ func UpdateReportSelectionVoiceCounts(articleId int) (err error) {
 	o := orm.NewOrm()
 	_, err = o.Raw(sql, articleId).Exec()
 	return
-}
+}

+ 14 - 9
models/wx_template_msg.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
 )
 
 type SendTemplateResponse struct {
@@ -27,15 +28,6 @@ func GetOpenIdList() (items []*OpenIdList, err error) {
 	return
 }
 
-func GetWxOpenIdList() (items []*OpenIdList, err error) {
-	sql := `SELECT open_id FROM wx_user AS wu 
-          INNER JOIN company AS c ON c.company_id = wu.company_id 
-          WHERE open_id=? `
-	openId := "oW3Gts7V3hj-sTAE1VDi0MhGlee8"
-	_, err = orm.NewOrm().Raw(sql, openId).QueryRows(&items)
-	return
-}
-
 func GetWxOpenIdByMobileList(mobile string) (items []*OpenIdList, err error) {
 	//sql := `SELECT * FROM user_record WHERE bind_account IN (` + utils.WxMsgTemplateIdAskMsgMobile + `) AND create_platform = 1`
 	sql := `SELECT cr.*,user_id FROM user_record  as c
@@ -68,3 +60,16 @@ func GetAdminOpendidByCompany(condition string, pars []interface{}) (list []*Adm
 	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
 	return
 }
+
+func GetWxOpenIdByMobileSliceList(mobiles []string) (items []*OpenIdList, err error) {
+	itemsLen := len(mobiles)
+	if itemsLen == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT cr.*,user_id FROM user_record  as c
+			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
+			WHERE bind_account IN (` + utils.GetOrmInReplace(itemsLen) + `) AND create_platform = 4`
+	_, err = o.Raw(sql, mobiles).QueryRows(&items)
+	return
+}

+ 18 - 0
routers/commentsRouter.go

@@ -1015,6 +1015,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"],
+        beego.ControllerComments{
+            Method: "ClickHistory",
+            Router: `/click/history`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"],
+        beego.ControllerComments{
+            Method: "Detail",
+            Router: `/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ResearchController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ResearchController"],
         beego.ControllerComments{
             Method: "ArticleHotList",

+ 5 - 0
routers/router.go

@@ -139,6 +139,11 @@ func init() {
 				&controllers.IndustryController{},
 			),
 		),
+		web.NSNamespace("/report_selection",
+			web.NSInclude(
+				&controllers.ReportSelectionController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 1 - 0
services/activity.go

@@ -1689,6 +1689,7 @@ func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.Acti
 	articleDetail.IsShowAppointment = false
 	//易董的操作按钮都隐藏
 	if articleDetail.YidongActivityId != "" {
+		articleDetail.SourceType = 1
 		articleDetail.IsShowSignup = false
 		articleDetail.IsShowDetails = true
 		return

+ 85 - 0
services/activity_wx_template_msg.go

@@ -0,0 +1,85 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"time"
+)
+
+// SendResearchActivitiesTemplateMsg 线下调研活动报名给所属销售跟建会人员推送
+func SendResearchActivitiesTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
+	//如果不是公司线下调研就返回
+	if activityDetail.ActivityTypeId != 4 {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("线下调研活动报名给所属销售跟建会人员推送失败Err"+time.Now().Format("2006-01-02 15:04:05"), ";Err:"+err.Error(), utils.EmailSendToUsers)
+			go utils.SendAlarmMsg(fmt.Sprint("线下调研活动报名给所属销售跟建会人员推送失败Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
+		}
+	}()
+	var mobiles []string
+	//获取销售信息
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if sellerItem != nil {
+		mobiles = append(mobiles, sellerItem.Mobile)
+	}
+	//获取建会人员信息
+	admin, err := models.GetSysAdminById(activityDetail.AdminId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if admin != nil {
+		mobiles = append(mobiles, admin.Mobile)
+	}
+
+	var first string
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	var remark string
+	var redirectUrl string
+
+	first = "【" + activityDetail.ActivityName + "】有客户报名"
+	keyword1 = user.RealName + "——" + user.CompanyName + "(所属销售:" + sellerItem.RealName + ")"
+	keyword2 = user.Mobile
+	keyword3 = time.Now().Format(utils.FormatDateTime)
+	keyword4 = activityDetail.ActivityName
+	remark = "点击查看报告详情"
+
+	openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
+	if e != nil {
+		err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
+		return
+	}
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityDetail.ActivityId)
+	sendInfo := new(SendWxTemplate)
+	sendInfo.First = first
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.Remark = remark
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = strconv.Itoa(activityDetail.ArticleId)
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
+	if err != nil {
+		return
+	}
+	return
+}

+ 129 - 148
services/article.go

@@ -668,20 +668,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)
 
 //}
 
@@ -863,7 +864,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
 		}
 		//排除不属于纪要库类型的文章
@@ -1036,6 +1040,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 {
@@ -1161,15 +1166,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
@@ -1221,74 +1228,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)
+					}
 				}
 			}
 		}
@@ -1314,7 +1323,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
 	}
@@ -1449,27 +1470,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
 					}
 				}
 			}
@@ -1515,14 +1532,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
-				//}
 			}
 
 			//如果有权限而且小助手没有提交过信息的 就做正常推送
@@ -1539,63 +1548,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
@@ -1614,7 +1566,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)
@@ -1989,3 +1941,32 @@ func GetReportLinkToArticleid(reportLink string) (articleId int, err error) {
 	}
 	return
 }
+
+// GetArticleStockMap 获取个股标签所对应的文章ID
+func GetArticleStockMap() (mapResp map[string]int, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("获取个股标签所对应的文章ID失败"+err.Error(), 2)
+		}
+	}()
+	list, err := models.GetArticleStock()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	mapResp = make(map[string]int, 0)
+	if len(list) > 0 {
+		//一对一精准匹配
+		for _, v := range list {
+			sliceSubjects := strings.Split(v.Stock, "/")
+			if len(sliceSubjects) > 0 {
+				for _, vSubject := range sliceSubjects {
+					sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
+					sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
+					subject := sliceXiahuaxian[0]
+					mapResp[subject] = v.ArticleId
+				}
+			}
+		}
+	}
+	return
+}

+ 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{}{

+ 1 - 0
services/resource_data.go

@@ -74,6 +74,7 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 		}
 		for _, v := range listArticle {
 			v.Body = ""
+			v.BodyHtml = ""
 			mapItems[fmt.Sprint("article", v.ArticleId)].Article = v
 		}
 	}

+ 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)
 	}
 

+ 1 - 1
services/user_permission.go

@@ -61,7 +61,7 @@ func GetUserRaiPermissionInfo(userId, companyId int) (authInfo models.UserPermis
 	}
 
 	// permissions示例: 医药,消费,科技,智造,策略,专家,买方研选
-	permissions, e := models.GetCompanyPermission(companyId)
+	permissions, e := models.GetCompanyPermissionName(companyId)
 	if e != nil {
 		err = errors.New("获取客户权限失败, Err: " + e.Error())
 		return

+ 12 - 25
services/wechat_send_msg.go

@@ -13,7 +13,7 @@ import (
 	"time"
 )
 
-//访谈申请
+// 访谈申请
 func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle string, itemOpenid *models.OpenIdList) (err error) {
 	var msg string
 	defer func() {
@@ -60,7 +60,7 @@ func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle s
 	return
 }
 
-//访谈申请取消
+// 访谈申请取消
 func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleTitle string, itemOpenid *models.OpenIdList) (err error) {
 	var msg string
 	defer func() {
@@ -102,7 +102,7 @@ func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleT
 	return
 }
 
-//权限申请
+// 权限申请
 func SendPermissionApplyTemplateMsg(realName, companyName, mobile, applyMethod string, itemOpenid *models.OpenIdList) (err error) {
 	var msg string
 	defer func() {
@@ -116,28 +116,15 @@ func SendPermissionApplyTemplateMsg(realName, companyName, mobile, applyMethod s
 	}()
 
 	var accessToken string
-	if utils.RunMode == "release" {
-		accessToken, err = models.GetWxAccessTokenByXzs()
-		if err != nil {
-			msg = "GetWxAccessToken Err:" + err.Error()
-			return
-		}
-		if accessToken == "" {
-			msg = "accessToken is empty"
-			return
-		}
-	} else {
-		accessToken, err = models.GetWxAccessToken()
-		if err != nil {
-			msg = "GetWxAccessToken Err:" + err.Error()
-			return
-		}
-		if accessToken == "" {
-			msg = "accessToken is empty"
-			return
-		}
+	accessToken, err = models.GetWxAccessTokenByXzs()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
 	}
-
 	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
 
 	sendMap := make(map[string]interface{})
@@ -244,7 +231,7 @@ type SendWxTemplate struct {
 	OpenIdArr      []string `description:"消息接收者openid"`
 }
 
-//推送模板消息
+// 推送模板消息
 func PublicSendTemplateMsg(sendInfo *SendWxTemplate) (err error) {
 	postData, err := json.Marshal(sendInfo)
 	if err != nil {

+ 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

@@ -159,7 +159,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"
 
 		//接收附件邮箱