Browse Source

查研观向9.10

xingzai 2 years ago
parent
commit
a13cf026c4

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

+ 14 - 0
models/article.go

@@ -709,3 +709,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
+}

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

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

+ 33 - 0
services/article.go

@@ -1989,3 +1989,36 @@ func GetReportLinkToArticleid(reportLink string) (articleId int, err error) {
 	}
 	return
 }
+
+//func init() {
+//	GetArticleStockMap()
+//}
+
+// 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
+}

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