Эх сурвалжийг харах

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into shanghai_crm_tb_11_18

xingzai 2 жил өмнө
parent
commit
779674df0c

+ 3 - 0
controllers/activity.go

@@ -3097,6 +3097,9 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		}
 		//标签字段关联的产业与标签处理
 		for k2, v2 := range labelList {
+			if v2.YidongActivityId != 0 {
+				v2.IsExternalLabel = true
+			}
 			labelList[k2].KeyWord = services.LabelStrV5(v2.KeyWord, v2.IsShowSubjectName, v2.TemporaryLabel)
 			labelList[k2].ImgUrlBg = v.ImgUrlBgs
 		}

+ 43 - 23
controllers/article.go

@@ -65,7 +65,6 @@ func (this *ArticleController) Detail() {
 	}
 	detail := new(models.ArticleDetail)
 	hasPermission := 0
-	hasFree := 0
 	var haveResearch bool
 	//判断是否已经申请过
 	applyCount, err := models.GetApplyRecordCount(uid)
@@ -74,20 +73,57 @@ func (this *ArticleController) Detail() {
 		br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
 		return
 	}
-	//`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
-	if user.CompanyId > 1 {
-		companyPermission, err := models.GetCompanyPermission(user.CompanyId)
+	resp := new(models.ArticleDetailResp)
+	detail, err = models.GetArticleDetailById(articleId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取信息失败,Err:" + err.Error()
+		return
+	}
+	//是否属于专项调研报告
+	if detail.SubCategoryName == "专项调研" {
+		detail.IsSpecialArticle = true
+		havePower, err := services.GetSpecialArticleDetailUserPower(user, detail)
 		if err != nil {
 			br.Msg = "获取信息失败"
-			br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
+			br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
 			return
 		}
-		detail, err = models.GetArticleDetailById(articleId)
+		resp.IsSpecialArticle = true
+		if !havePower {
+			hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionArticle(user)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
+				return
+			}
+			resp.PopupMsg = popupMsg
+			resp.HasPermission = hasPermission
+			resp.SellerName = sellerName
+			resp.SellerMobile = sellerMobile
+			detail.Body = ""
+			detail.Abstract = ""
+			detail.BodyText = ""
+			detail.SellerName = sellerName
+			detail.SellerMobile = sellerMobile
+			resp.Detail = detail
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "获取成功"
+			br.Data = resp
+			return
+		}
+	}
+	//`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
+	if user.CompanyId > 1 {
+		companyPermission, err := models.GetCompanyPermission(user.CompanyId)
 		if err != nil {
 			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取信息失败,Err:" + err.Error()
+			br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
 			return
 		}
+
+		detail.PublishDate = utils.TimeRemoveHms(detail.PublishDate)
 		detail.Body = html.UnescapeString(detail.Body)
 		detail.Body = strings.Replace(detail.Body, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sans-serif;\">Powered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
 		detail.Body = strings.Replace(detail.Body, "pre", "div", -1)
@@ -99,10 +135,8 @@ func (this *ArticleController) Detail() {
 			} else {
 				hasPermission = 2
 			}
-			hasFree = 2
 			goto Loop
 		} else {
-			hasFree = 1
 			var articlePermissionPermissionName string
 			if detail.CategoryId > 0 {
 				articlePermission, err := models.GetArticlePermission(detail.CategoryId)
@@ -140,16 +174,13 @@ func (this *ArticleController) Detail() {
 			if userType == 1 && strings.Contains(detail.CategoryName, "研选") {
 				hasPersion = false
 			}
-
 			if detail.IsReport == 1 {
-				fmt.Println("报告权限")
 				detailCategory, err := models.GetdetailByCategoryIdSando(detail.CategoryId)
 				if err != nil && err.Error() != utils.ErrNoRow() {
 					br.Msg = "获取信息失败"
 					br.ErrMsg = "获取信息失败,Err:" + err.Error() + "categoryID 不存在:" + strconv.Itoa(detail.CategoryId)
 					return
 				}
-				fmt.Println(detailCategory)
 				permissionStr, err := models.GetCompanyPermissionByUser(user.CompanyId)
 				if err != nil {
 					br.Msg = "获取信息失败"
@@ -361,25 +392,14 @@ Loop:
 
 	// 处理研选下面的路演精华 的报告链接是否跳转
 	if hasPermission == 1 && detail.ArticleId > utils.SummaryArticleId && detail.ArticleTypeId > 0 {
-		//articleTYpeDetail, err := models.GetArticleTypeInfo(detail.ArticleTypeId)
-		//if err != nil && err.Error() != utils.ErrNoRow() {
-		//	br.Msg = "获取信息失败"
-		//	br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-		//	return
-		//}
-		//if articleTYpeDetail != nil {
-		//	detail.IsShowLinkButton = articleTYpeDetail.IsShowLinkButton
-		//}
 		detail.PublishDate = utils.TimeRemoveHms2(detail.PublishDate)
 		if detail.ReportLink != "" {
 			chartUserTokenByMobile, _ := services.GetUserTokenByMobile(user.Mobile)
 			detail.ReportLink += "?token=" + chartUserTokenByMobile
 		}
 	}
-	resp := new(models.ArticleDetailResp)
 	resp.HasPermission = hasPermission
 	resp.HaveResearch = haveResearch
-	resp.HasFree = hasFree
 	resp.Detail = detail
 	if user.Mobile != "" {
 		resp.Mobile = user.Mobile

+ 3 - 3
controllers/micro_roadshow.go

@@ -127,9 +127,9 @@ func (this *MicroRoadShowController) List() {
 		}
 
 		//修改产业视频的标题
-		if list[i].Type == 3 && list[i].IndustryName != ""{
-			list[i].Title = "5min"+"【"+ list[i].IndustryName +"】"+"逻辑解析"
-		}
+		//if list[i].Type == 3 && list[i].IndustryName != "" {
+		//	list[i].Title = "5min" + "【" + list[i].IndustryName + "】" + "逻辑解析"
+		//}
 	}
 
 	resp := new(models.MicroRoadShowListResp)

+ 173 - 2
controllers/report.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"encoding/json"
 	"fmt"
+	"github.com/medivhzhan/weapp/v2"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/services"
@@ -267,6 +268,7 @@ func (this *ReportController) IndustryList() {
 		br.ErrMsg = "获取用户权限失败, Err: " + e.Error()
 		return
 	}
+	mapUPdateTime := make(map[int]string)
 
 	if len(industrialManagementIds) > 0 {
 		// 获取默认图配置
@@ -298,6 +300,28 @@ func (this *ReportController) IndustryList() {
 			}
 			industrialVideoMap[v.IndustryId] = tmp
 		}
+		//获取这些产业下最新更新的文章
+		listUpdateTime, err := models.GetNewArticleDetailByIndustrialIds(industrialManagementIds)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			return
+		}
+		for _, v := range listUpdateTime {
+			mapUPdateTime[v.IndustrialManagementId] = v.PublishDate
+		}
+
+		//时间线的更新时间
+		//	maptimelineUPdateTime := make(map[int]string)
+		listtimelinePublishdate, err := models.GetTimeLineReportIndustrialPublishdateList(industrialManagementIds)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			return
+		}
+		for _, v := range listtimelinePublishdate {
+			if mapUPdateTime[v.IndustrialManagementId] != "" {
+				if utils.StrTimeToTime(v.PublishDate).After(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
+					mapUPdateTime[v.IndustrialManagementId] = v.PublishDate
+				}
+			}
+		}
 	}
 
 	nowTime := time.Now().Local()
@@ -317,7 +341,7 @@ func (this *ReportController) IndustryList() {
 			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
 			return
 		}
-		list[k].UpdateTime = utils.TimeRemoveHms(newArtinfo.PublishDate)
+		list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId])
 		recordCount, err := models.GetUserToArticleCount(uid, newArtinfo.ArticleId)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取信息失败"
@@ -2823,6 +2847,8 @@ func (this *ReportController) SearchReportAndResource() {
 	sqlGroup = ` GROUP BY  a.article_id  ORDER BY a.publish_date DESC  `
 	if pageSize > 0 {
 		sqlGroup += ` LIMIT 5 `
+	} else {
+		sqlGroup += ` LIMIT 100 `
 	}
 	ListYxReport, err := models.GetArticleCollectionList(` AND a.article_id >= 1000000 `+condition+sqlGroup, user.UserId)
 	if err != nil {
@@ -3086,7 +3112,6 @@ func (this *ReportController) StockNameList() {
 			}
 		}
 
-
 		//index := strings.Index(item.Stock, "(")
 		//item.Stock = item.Stock[:index]
 		//if strings.Contains(item.Stock, "-B"){
@@ -3103,3 +3128,149 @@ func (this *ReportController) StockNameList() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 文章留言接口
+// @Description 文章留言接口
+// @Param	request	body models.AddCygxActivityHelpAsk true "type json string"
+// @Success 200 {object} models.TacticsListResp
+// @router /commentAdd [post]
+func (this *ReportController) CommentAdd() {
+	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.AddCygxArticleCommentReq
+	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.Content == "" {
+		br.Msg = "建议内容不可为空"
+		return
+	}
+	content := req.Content
+	itemToken, err := services.WxGetToken()
+	if err != nil {
+		br.Msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if itemToken.AccessToken == "" {
+		br.Msg = "accessToken is empty"
+		return
+	}
+	commerr, err := weapp.MSGSecCheck(itemToken.AccessToken, content)
+	if err != nil {
+		br.Msg = "内容校验失败!"
+		br.ErrMsg = "内容校验失败,Err:" + err.Error()
+		return
+	}
+	if commerr.ErrCode != 0 {
+		br.Msg = "内容违规,请重新提交!"
+		br.ErrMsg = "内容违规,Err:" + commerr.ErrMSG
+		return
+	}
+
+	articleId := req.ArticleId
+	articleInfo, errInfo := models.GetArticleDetailById(articleId)
+	if articleInfo == nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "文章ID错误,不存在articleId:" + strconv.Itoa(articleId)
+		return
+	}
+	if errInfo != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
+		return
+	}
+
+	companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
+	if err != nil {
+		br.Msg = "提交失败!"
+		br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
+		return
+	}
+	if companyDetail == nil {
+		br.Msg = "提交失败!"
+		br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId)
+		return
+	}
+	item := models.CygxArticleComment{
+		UserId:      user.UserId,
+		ArticleId:   req.ArticleId,
+		CreateTime:  time.Now(),
+		Mobile:      user.Mobile,
+		Email:       user.Email,
+		CompanyId:   user.CompanyId,
+		CompanyName: companyDetail.CompanyName,
+		Content:     content,
+	}
+	_, err = models.AddArticleComment(&item)
+	if err != nil {
+		br.Msg = "提交失败"
+		br.ErrMsg = "提交留言失败,Err:" + err.Error()
+		return
+	}
+
+
+	//var sendMobile string
+	//for _, v := range listEmail {
+	//	if strings.Index(activityInfo.Host, v.Name) > 0 {
+	//		sendMobile = v.Mobile
+	//	}
+	//}
+	//if activityInfo.ChartPermissionId == 31 {
+	//	sendMobile = utils.ActSendMsgMobile
+	//}
+
+	//获取销售信息
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "提交失败"
+		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+		return
+	}
+	// 给所属销售发送消息
+	var openIdList []*models.OpenIdList
+	if sellerItem != nil {
+		list, _ := models.GetWxOpenIdByMobileList(sellerItem.Mobile)
+		for _, idList := range list {
+			openIdList = append(openIdList, idList)
+		}
+		if openIdList != nil {
+			// 给芳姐发消息
+			cnf, _ := models.GetConfigByCode("tpl_msg")
+			if cnf != nil {
+				list, _ := models.GetWxOpenIdByMobileList(cnf.ConfigValue)
+				for _, idList := range list {
+					openIdList = append(openIdList, idList)
+				}
+			}
+			if articleId > 1000000{
+				//发给汪洋
+				list, _ := models.GetWxOpenIdByMobileList( utils.ActSendMsgMobile)
+				for _, idList := range list {
+					openIdList = append(openIdList, idList)
+				}
+			}
+			services.SendCommentWxTemplateMsg(articleInfo.Title, user.CompanyName, user.RealName, sellerItem.RealName, item.CreateTime.Format(utils.FormatDateTime), req.Content, openIdList, req.ArticleId)
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "提交成功"
+}

+ 1 - 0
controllers/search.go

@@ -620,6 +620,7 @@ func (this *SearchController) ListHomeArtAndChartPage() {
 				result[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
 			}
 			result[k].Source = 1
+			v.PublishDate = utils.TimeRemoveHms(v.PublishDate)
 		}
 	}
 	//记录用户搜索关键词

+ 3 - 1
models/activity.go

@@ -688,12 +688,14 @@ type CygxActivityLabelList struct {
 	Resource          int    `description:"位置 ,1:活动 ,2:专项产业调研"`
 	TemporaryLabel    string `description:"临时标签"`
 	IsNew             bool   `description:"是否为新:活动存在关联的的产业所关联的报告均在3个月内/无报告则标记新"`
+	YidongActivityId   int   `description:"易董活动ID"`
+	IsExternalLabel   bool   `description:"是否为外部资源"`
 }
 
 //主题列表
 func GetActivityLabelListAll(condition, sortTime string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityLabelList, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT	activity_id, label,temporary_label,is_show_subject_name, MAX( art.activity_time ) AS timesort, MIn( art.activity_time ) AS mintimesort 
+	sql := `SELECT	activity_id, label,temporary_label,is_show_subject_name, MAX( art.activity_time ) AS timesort, MIn( art.activity_time ) AS mintimesort , yidong_activity_id 
 		FROM cygx_activity as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition

+ 10 - 5
models/article.go

@@ -154,6 +154,7 @@ type ArticleDetail struct {
 	ReportLink              string `description:"报告链接"`
 	IsShowLinkButton        int    `description:"这种报告类型是否展示查看报告链接"`
 	ArticleTypeId           int    `description:"文章类型ID"`
+	IsSpecialArticle        bool   `description:"是否属于专项调研报告"`
 }
 
 type ArticleDetailFileLink struct {
@@ -215,11 +216,15 @@ func GetArticlePermission(companyId int) (item *ChartPermission, err error) {
 }
 
 type ArticleDetailResp struct {
-	Detail        *ArticleDetail
-	HasPermission int    `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
-	HasFree       int    `description:"1:已付费(至少包含一个品类的权限),2:未付费(没有任何品类权限)"`
-	HaveResearch  bool   `description:"是否有研选权限"`
-	Mobile        string `description:"用户手机号"`
+	Detail           *ArticleDetail
+	HasPermission    int    `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	HasFree          int    `description:"1:已付费(至少包含一个品类的权限),2:未付费(没有任何品类权限)"`
+	HaveResearch     bool   `description:"是否有研选权限"`
+	Mobile           string `description:"用户手机号"`
+	PopupMsg         string `description:"权限弹窗信息"`
+	SellerMobile     string `description:"销售电话"`
+	SellerName       string `description:"销售姓名"`
+	IsSpecialArticle bool   `description:"是否属于专项调研报告"`
 }
 
 type ArticleDetailHtgjResp struct {

+ 32 - 0
models/article_comment.go

@@ -0,0 +1,32 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxArticleComment struct {
+	Id       int       `orm:"column(id);pk" description:"留言id"`
+	UserId      int       `description:"用户id"`
+	ArticleId  int       `description:"活动id"`
+	CreateTime  time.Time `description:"创建时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	Content     string    `description:"内容"`
+}
+
+
+//添加留言
+func AddArticleComment(item *CygxArticleComment) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+
+type AddCygxArticleCommentReq struct {
+	ArticleId int    `description:"文章id"`
+	Content    string `description:"内容"`
+}

+ 1 - 1
models/chart_permission.go

@@ -33,7 +33,7 @@ func GetCategoryId(chartPermissionId int) (category_id string, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT GROUP_CONCAT(a.category_id) AS category_id 
 			FROM cygx_report_mapping AS a
-			WHERE a.chart_permission_id=? 
+			WHERE a.chart_permission_id=? AND a.is_summary = 1
 			GROUP BY a.chart_permission_id `
 	err = o.Raw(sql, chartPermissionId).QueryRow(&category_id)
 	return

+ 1 - 0
models/db.go

@@ -127,6 +127,7 @@ func init() {
 		new(CygxActivityVideoHistory),
 		new(CygxActivitySpecialTrip),
 		new(CygxArticleData),
+		new(CygxArticleComment),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 55 - 0
models/industrial_management.go

@@ -628,3 +628,58 @@ func GetIndustryByName(industryName string) (item *IndustrialManagement, err err
 	err = orm.NewOrm().Raw(sql, industryName).QueryRow(&item)
 	return
 }
+
+type IndustrialManagementArticle struct {
+	IndustrialManagementId int    `description:"产业Id"`
+	IndustryName           string `description:"产业名称"`
+	ArticleId              int    `description:"文章ID"`
+	PublishDate            string `description:"发布时间"`
+}
+
+//时间线的更新时间
+func GetTimeLineReportIndustrialPublishdateList(industrialIdArr []int) (items []*IndustrialManagementArticle, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT	
+			mmc.id,
+			0,
+			mmc.industry_id AS industrial_management_id,			
+			mmc.content AS title,
+			MAX( mm.meeting_time ) AS publish_date 
+		FROM
+			cygx_morning_meeting_review_chapter AS mmc
+			INNER JOIN cygx_morning_meeting_reviews AS mm 
+		WHERE
+			mm.id = mmc.meeting_id 
+			AND mm.STATUS = 1 
+			AND mmc.industry_id IN (` + utils.GetOrmInReplace(len(industrialIdArr)) + `)
+		GROUP BY industrial_management_id ORDER BY publish_date DESC  `
+	_, err = o.Raw(sql, industrialIdArr).QueryRows(&items)
+	return
+}
+
+//获取该产业下最新的文章详情
+func GetNewArticleDetailByIndustrialIds(industrialIdArr []int) (items []*IndustrialManagementArticle, err error) {
+	arrLen := len(industrialIdArr)
+	if arrLen == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT
+			mg.industrial_management_id,
+			MAX( a.article_id ) AS article_id,
+			a.title,
+			MAX( a.publish_date ) AS publish_date 
+		FROM
+			cygx_industrial_article_group_management AS mg
+			INNER JOIN cygx_article AS a ON mg.article_id = a.article_id 
+		WHERE
+			1 = 1 
+			AND a.article_id < ?
+			AND a.is_report = 1
+			AND a.is_class = 1
+			AND mg.industrial_management_id IN(` + utils.GetOrmInReplace(len(industrialIdArr)) + `)   
+		GROUP BY
+			mg.industrial_management_id `
+	_, err = o.Raw(sql, utils.SummaryArticleId, industrialIdArr).QueryRows(&items)
+	return
+}

+ 4 - 4
models/micro_roadshow.go

@@ -43,9 +43,9 @@ func GetMicroRoadShowVideoPageListV8(startSize, pageSize int, condition string,
 			publish_date AS publish_time,
 			chart_permission_id,
 			chart_permission_name,
-            industry_name,
 			video_duration AS play_seconds,
-			img_url AS background_img,
+			img_url AS background_img,            
+			industry_name,
 			share_img_url AS share_img,
 			"" as  activity_id
 		FROM
@@ -72,8 +72,8 @@ func GetMicroRoadShowVideoPageListV8(startSize, pageSize int, condition string,
 			art.chart_permission_name,
 			"" AS play_seconds,
 			"" AS background_img,
-			"" AS share_img,
 			"" AS industry_name,
+			"" AS share_img,
 			v.activity_id
 		FROM
 			cygx_activity_video as v
@@ -98,8 +98,8 @@ func GetMicroRoadShowVideoPageListV8(startSize, pageSize int, condition string,
 			b.chart_permission_name,
 			a.voice_play_seconds AS play_seconds,
 			a.img_url AS background_img,
+			"" AS industry_name,
 			"" AS share_img,
-            "" AS industry_name,
 			a.activity_id 
 		FROM
 			cygx_activity_voice AS a

+ 9 - 0
routers/commentsRouter.go

@@ -718,6 +718,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "CommentAdd",
+            Router: `/commentAdd`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"],
         beego.ControllerComments{
             Method: "Fllow",

+ 6 - 4
services/activity.go

@@ -1479,10 +1479,12 @@ func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.Acti
 	//专家电话会 1
 	if articleDetail.ActivityTypeId == 1 {
 		articleDetail.IsShowOutboundCall = true
-		if articleDetail.LimitPeopleNum == 0 {
-			articleDetail.IsShowMeetingReminder = true
-			articleDetail.IsShowHelpSsk = true
-		}
+		//if articleDetail.LimitPeopleNum == 0 {
+		//	articleDetail.IsShowMeetingReminder = true
+		//	articleDetail.IsShowHelpSsk = true
+		//}
+		articleDetail.IsShowMeetingReminder = true
+		articleDetail.IsShowHelpSsk = true
 	}
 
 	//分析师电话会 2

+ 6 - 1
services/activity_special.go

@@ -74,6 +74,11 @@ func UpdateCygxActivitySpecialSignupNum(cont context.Context) (err error) {
 //处理专项调研的展示
 func GetActivityLabelSpecialList(user *models.WxUserItem, isPower int, chartPermissionIds, permissionNameStr string) (item *models.ActivityTypeHome, err error) {
 	itemList := new(models.ActivityTypeHome)
+	if user.CompanyId <= 1 {
+		itemList.List = make([]*models.CygxActivityLabelList, 0)
+		item = itemList
+		return
+	}
 	userType, e := GetSpecialUserType(user)
 	if e != nil {
 		err = errors.New("GetSpecialUserType, Err: " + e.Error())
@@ -514,7 +519,7 @@ func GetActivitySpecialSearcheList(user *models.WxUserItem, condition string, st
 	var pars, parsSpecil []interface{}
 	if keywords != "" {
 		keywords = "%" + keywords + "%"
-		conditionSpecil += ` AND (art.research_theme LIKE ? OR art.label LIKE ? OR art.industrial_name LIKE ? OR art.industrial_subject_name LIKE ? ) `
+		conditionSpecil += ` AND art.days > 0 AND (art.research_theme LIKE ? OR art.label LIKE ? OR art.industrial_name LIKE ? OR art.industrial_subject_name LIKE ? ) `
 		parsSpecil = append(parsSpecil, keywords, keywords, keywords, keywords)
 	}
 	list, totalSearche, e := models.GetActivitySpecialSearcheList(condition, pars, conditionSpecil, parsSpecil, startSize, pageSize)

+ 27 - 0
services/article.go

@@ -3,6 +3,7 @@ package services
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"github.com/PuerkitoBio/goquery"
 	"github.com/beego/beego/v2/client/orm"
@@ -1561,3 +1562,29 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	utils.Rc.Put(cacheKey, articleId, time.Hour*12)
 	return
 }
+
+//GetSpecialArticleDetailUserPower 处理用户查看专项调研文章详情的权限
+func GetSpecialArticleDetailUserPower(user *models.WxUserItem, articleInfo *models.ArticleDetail) (havePower bool, err error) {
+	permissionStr, e := GetCompanyPermissionUpgrade(user.CompanyId)
+	if e != nil {
+		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+		return
+	}
+	reportMapDetail, e := models.GetdetailByCategoryIdPush(articleInfo.CategoryId)
+	if e != nil {
+		err = errors.New("GetdetailByCategoryIdPush, Err: " + e.Error())
+		return
+	}
+	if reportMapDetail == nil {
+		err = errors.New("GetdetailByCategoryIdP,获取详情失败, Err: " + e.Error())
+		return
+	}
+	fmt.Println(permissionStr)
+	//如果没有对应的升级权限,则返回
+	if !strings.Contains(permissionStr, reportMapDetail.ChartPermissionName) {
+		return
+	} else {
+		havePower = true
+	}
+	return
+}

+ 43 - 2
services/company_permission.go

@@ -2,7 +2,6 @@ package services
 
 import (
 	"errors"
-	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
 	"strings"
@@ -61,7 +60,6 @@ func GetUserHasPermission(user *models.WxUserItem) (hasPermission int, sellerNam
 					err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
 					return
 				}
-				fmt.Println(sellerItemQy)
 				if sellerItemQy != nil {
 					hasPermission = 2
 					sellerName = sellerItemQy.Mobile
@@ -75,3 +73,46 @@ func GetUserHasPermission(user *models.WxUserItem) (hasPermission int, sellerNam
 	popupMsg = "需要升级行业套餐权限才可参与此活动,请联系对口销售"
 	return
 }
+
+//获取用户对应的权限申请状态 文章详情
+func GetUserHasPermissionArticle(user *models.WxUserItem) (hasPermission int, sellerName, sellerMobile, popupMsg string, err error) {
+	//`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
+	uid := user.UserId
+	applyCount, e := models.GetApplyRecordCount(uid)
+	if e != nil {
+		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
+		return
+	}
+	if user.CompanyId <= 1 {
+		if applyCount == 0 {
+			hasPermission = 4
+		} else {
+			hasPermission = 5
+		}
+	} else {
+		companyPermission, e := models.GetCompanyPermission(user.CompanyId)
+		if e != nil {
+			err = errors.New("GetCompanyPermission, Err: " + e.Error())
+			return
+		}
+		if companyPermission != "" {
+			if applyCount > 0 {
+				hasPermission = 2
+			} else {
+				hasPermission = 3
+				//获取权益销售信息 如果是FICC的客户类型,则默认他申请过
+				sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+				if e != nil && e.Error() != utils.ErrNoRow() {
+					err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
+					return
+				}
+				if sellerItemQy != nil {
+					sellerName = sellerItemQy.Mobile
+					sellerMobile = sellerItemQy.RealName
+				}
+			}
+		}
+	}
+	popupMsg = "需要升级行业套餐权限才可查看此报告,请联系对口销售"
+	return
+}

+ 2 - 2
services/report_billboard.go

@@ -12,7 +12,7 @@ import (
 func UpdateDailyMonthReadBillboard(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
-			go utils.SendAlarmMsg("查研观向-每日更新月阅读飙升榜单失败, ErrMsg: " + err.Error(), 3)
+			go utils.SendAlarmMsg("查研观向-每日更新月阅读飙升榜单失败, ErrMsg: "+err.Error(), 3)
 		}
 	}()
 
@@ -38,4 +38,4 @@ func UpdateDailyMonthReadBillboard(cont context.Context) (err error) {
 		return
 	}
 	return
-}
+}

+ 41 - 0
services/wx_template_msg.go

@@ -658,3 +658,44 @@ func SendActivityOnenIdWxTemplateMsg(first, keyWord1, keyWord2, keyWord3, keyWor
 	WxSendTemplateMsg(sendUrl, sendMap, openIdList, "", utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
 	return
 }
+
+//发送用户留言提醒
+func SendCommentWxTemplateMsg(title, companyName, userName, sellerName, createTime, content 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)
+			go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", articleId), 2)
+			utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
+		}
+	}()
+	accessToken, err := models.GetWxAccessTokenByXzs()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+	var first string
+	first = "【"+title+"】有新的留言,请及时处理"
+	keyword1 := companyName + "--" + userName + "(" + sellerName + ")"
+	keyword2 := "-"
+	keyword3 := createTime
+	keyword4 := content
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+	templateId := utils.WxMsgTemplateIdAskMsgXzs
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+	sendMap["template_id"] = templateId
+	sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ARTICLE_DETAIL + 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, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_COMMENT)
+	return
+}

+ 1 - 0
utils/constants.go

@@ -70,6 +70,7 @@ const (
 	TEMPLATE_MSG_CYGX_ACTIVITY_ADD = 12 //查研观向小程序活动更新推送 12
 	TEMPLATE_MSG_CYGX_ARTICLE_ADD  = 13 //查研观向报告更新推送  13
 	TEMPLATE_MSG_CYGX_APPLY        = 14 //查研观向审批通知
+	TEMPLATE_MSG_CYGX_COMMENT      = 15 //查研观向留言通知
 )
 
 const (