Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into cygx_11.3

xingzai 1 year ago
parent
commit
fa6546e21d

+ 1 - 1
controllers/activity.go

@@ -3802,7 +3802,7 @@ func (this *ActivityCoAntroller) ActivityListSearch() {
 	if source == 1 {
 		condition += ` AND art.yidong_activity_id = '' `
 	}
-	condition += ` AND art.is_limit_people = 1 AND art.publish_status = 1 ` + conditionActivity
+	condition += ` AND art.publish_status = 1 ` + conditionActivity
 	list, total, err := services.GetActivitySpecialSearcheList(user, condition, startSize, pageSize, keyWord)
 	if err != nil {
 		br.Msg = "获取失败"

+ 177 - 0
controllers/collection.go

@@ -0,0 +1,177 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
+	"hongze/hongze_cygx/utils"
+	"time"
+)
+
+// Collection
+type CollectionController struct {
+	BaseAuthController
+}
+
+// @Title 精选看板、路演banner列表
+// @Description 精选看板、路演banner列表接口
+// @Success Ret=200 {object} cygx.CollectionBannerListResp
+// @router /banner/list [get]
+func (this *CollectionController) BannerList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	resp := new(models.CollectionBannerListResp)
+	var listA []*models.CollectionBannerResp
+	listB := new(models.CollectionBannerResp)
+	listA = []*models.CollectionBannerResp{
+		&models.CollectionBannerResp{Title: "", IndexImg: "https://hzstatic.hzinsights.com/cygx/banner/xcx/lyhf.png", Path: "/reportPages/internalDetials/internalDetials?id=43"},
+	}
+	listB.Title = ""
+	listB.IndexImg = "https://hzstatic.hzinsights.com/cygx/banner/xcx/jxkb.png"
+	listB.IsShowSustainable = true
+	resp.ListA = listA
+	resp.ListB = listB
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 精选看板跳转详情地址
+// @Description 精选看板跳转详情地址接口
+// @Success Ret=200 {object} cygx.CollectionBannerListResp
+// @router /detail [get]
+func (this *CollectionController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	resp := new(models.CollectionDetailResp)
+	if user.Mobile != "" {
+		userTokenByMobile, _ := services.GetUserTokenByMobile(user.Mobile)
+		resp.HttpUrl = utils.COLLECTIONS_INFO_HTTP_URL + "?token=" + userTokenByMobile
+	} else {
+		resp.HttpUrl = utils.COLLECTIONS_INFO_HTTP_URL
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 提交精选看板申请接口
+// @Description 提交精选看板申请接口
+// @Param	request	body cygx.CygxBannerIdReq true "type json string"
+// @Success 200 Ret=200 提交成功
+// @router /apply/add [post]
+func (this *CollectionController) ApplyAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req models.ApplyCollectionReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	content := req.Content
+	if content == "" {
+		br.Msg = "内容不能为空"
+		br.ErrMsg = "内容不能为空"
+		return
+	}
+	item := new(models.CygxApplyCollection)
+	item.UserId = user.UserId
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.Content = content
+	item.RegisterPlatform = utils.REGISTER_PLATFORM
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	item.RealName = user.RealName
+	if sellerItem != nil {
+		item.SellerName = sellerItem.RealName
+	}
+	newId, err := models.AddCygxApplyCollection(item)
+	services.SendCygxApplyCollectionTemplateMsg(user, content, int(newId))
+	if err != nil {
+		br.Msg = "申请失败"
+		br.ErrMsg = "申请失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "记录成功"
+}
+
+// @Title  获取申请详情
+// @Description 获取申请详情接口
+// @Param   ApplyCollectionId   query   int  true       "ID"
+// @Success Ret=200 {object} cygx.CygxApplyCollectionDetailResp
+// @router /apply/detail [get]
+func (this *CollectionController) ApplyDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	resp := new(models.CygxApplyCollectionDetailResp)
+	applyCollectionId, _ := this.GetInt("ApplyCollectionId")
+	if applyCollectionId < 1 {
+		br.Msg = "请输入详情ID"
+		return
+	}
+	detail, err := models.GetCygxApplyCollectionDetail(applyCollectionId)
+	if err != nil {
+		br.Msg = "详情不存在"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 3 - 2
controllers/home.go

@@ -838,13 +838,14 @@ func (this *HomeController) NewList() {
 		pageSize = 4
 	} else {
 		condition += ` AND source NOT IN ('activity','activityspecial','newchart') ` + conditionInit
-		conditionActivity, err := services.GetActivityonditionList(user, "", "", "", "1,2,3", "", 0, 0, "", 0, 1)
+		//conditionActivity, err := services.GetActivityonditionList(user, "", "", "", "1,2,3", "", 0, 0, "", 0, 1)
+		conditionActivity, err := services.ActivityConditioninitSql(user, "", 0)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
 			return
 		}
-		conditionActivity += ` AND art.is_limit_people = 1 AND art.publish_status = 1 `
+		conditionActivity += ` AND art.publish_status = 1 `
 		var conditionOrder string
 		conditionOrder = ` ORDER BY art.activity_time DESC ,  art.active_state ASC   `
 		conditionActivity += conditionOrder

+ 5 - 1
controllers/product_interior.go

@@ -121,7 +121,11 @@ func (this *ProductInteriorController) Detail() {
 	}
 	detail.PublishTime = utils.TimeRemoveHms2(detail.PublishTime)
 	resp.Detail = detail
-	detail.BodySlice = services.GetProductInteriorUrlBody(detail.Body)
+	detail.BodySlice, err = services.GetProductInteriorUrlBody(detail.Body, user)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
+	}
 	go services.AddCygxProductInteriorHistory(user, productInteriorId)
 	br.Ret = 200
 	br.Success = true

+ 1 - 0
controllers/tactics.go

@@ -97,6 +97,7 @@ func (this *TacticsController) List() {
 				list[k].IsRed = true
 			}
 		}
+		list[k].Abstract, _ = services.GetReportContentTextSub(v.Abstract)
 	}
 	if categoryId > 0 {
 		detail, errCategory := models.GetCygxReportMappingCygxByCategoryId(categoryId)

+ 25 - 1
controllers/user.go

@@ -869,8 +869,12 @@ func (this *UserController) ApplyTryOut() {
 	uid := user.UserId
 
 	var title string
+	var sourceId int
+	var source string
 	tryType := req.TryType
 	detailId := req.DetailId
+	sourceId = detailId
+	source = tryType
 	var isResearch bool // 是否属于研选
 	if tryType == "Article" {
 		detail, err := models.GetArticleDetailById(detailId)
@@ -903,6 +907,19 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = microAudio.VoiceName
+		sourceId = microAudio.ActivityId
+		source = "activityvoice"
+	} else if tryType == "ActivityVideo" {
+		// 活动视频
+		activityVideo, e := models.GetCygxActivityVideoById(detailId)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "微路演音频信息有误, 不存在的VoiceId: " + strconv.Itoa(detailId)
+			return
+		}
+		title = activityVideo.VideoName
+		sourceId = activityVideo.ActivityId
+		source = "activityvideo"
 	} else if tryType == "MicroVideo" {
 		// 微路演视频
 		microVideo, e := models.GetMicroRoadshowVideoById(detailId)
@@ -912,6 +929,7 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = microVideo.VideoName
+		source = "roadshow"
 	} else if tryType == "Researchsummary" {
 		// 本周研究汇总
 		ResearchSummaryInfo, e := models.GetCygxResearchSummaryInfoById(detailId)
@@ -921,6 +939,7 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = ResearchSummaryInfo.Title
+		source = "researchsummary"
 	} else if tryType == "Minutessummary" {
 		// 上周纪要汇总
 		MinutesSummaryInfo, e := models.GetCygxMinutesSummaryInfoById(detailId)
@@ -930,6 +949,7 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = MinutesSummaryInfo.Title
+		source = "minutessummary"
 	} else if tryType == "ReportSelection" {
 		// 报告精选
 		ReportSelectionInfo, e := models.GetCygxReportSelectionInfoById(detailId)
@@ -939,6 +959,7 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = ReportSelectionInfo.Title
+		source = "reportselection"
 	} else if tryType == "ProductInterior" {
 		// 产品内测
 		ProductInteriorDetail, e := models.GetCygxProductInteriorDetail(detailId)
@@ -948,9 +969,9 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = ProductInteriorDetail.Title
+		source = "productinterior"
 	}
 
-	fmt.Println(title)
 	//缓存校验
 	cacheKey := fmt.Sprint("xygx:apply_record:add:", uid)
 	ttlTime := utils.Rc.GetRedisTTL(cacheKey)
@@ -1138,6 +1159,9 @@ func (this *UserController) ApplyTryOut() {
 		//如果是潜在客户就标记来源
 		item.InviteCompanySource = 2
 	}
+	item.Title = title
+	item.SourceId = sourceId
+	item.Source = strings.ToLower(source)
 	item.RegisterPlatform = utils.REGISTER_PLATFORM
 	err = models.AddApplyRecord(item)
 	if err != nil {

+ 10 - 2
models/activity_video.go

@@ -32,6 +32,7 @@ type CygxActivityVideoReq struct {
 	VideoName     string `description:"视频名称"`
 	VideoDuration string `description:"视频时长"`
 	VideoUrl      string `description:"视频地址"`
+	ActivityId    int    ` description:"活动ID"`
 }
 
 // string `orm:"column(label)";description:"主题"`
@@ -76,13 +77,20 @@ func GetCygxActivityVideoByActivityId(activityId int) (item *CygxActivityVideo,
 	return
 }
 
-// GetCygxActivityVideoById 获取活动视频
-func GetCygxActivityVideoById(activityId int) (item *CygxActivityVideo, err error) {
+// GetCygxActivityVideoByActivityId 获取活动视频
+func GetCygxActivityVideoReqByActivityId(activityId int) (item *CygxActivityVideoReq, err error) {
 	sql := `SELECT * FROM cygx_activity_video WHERE video_id = ? LIMIT 1 `
 	err = orm.NewOrm().Raw(sql, activityId).QueryRow(&item)
 	return
 }
 
+// GetCygxActivityVideoById 获取活动视频
+func GetCygxActivityVideoById(videoId int) (item *CygxActivityVideo, err error) {
+	sql := `SELECT * FROM cygx_activity_video WHERE video_id = ? LIMIT 1 `
+	err = orm.NewOrm().Raw(sql, videoId).QueryRow(&item)
+	return
+}
+
 // 列表
 func GetActivityVideoList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityVideoResp, err error) {
 	o := orm.NewOrm()

+ 77 - 0
models/apply_collection.go

@@ -0,0 +1,77 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CollectionBannerResp struct {
+	Title             string `description:"标题"`
+	IndexImg          string `description:"小程序封面图"`
+	Path              string `description:"小程序路径"`
+	IsShowSustainable bool   `description:"是否展示限免标签"`
+}
+
+type CollectionBannerListResp struct {
+	ListA []*CollectionBannerResp
+	ListB *CollectionBannerResp
+}
+
+type CollectionDetailResp struct {
+	HttpUrl string `description:"跳转地址"`
+}
+
+type ApplyCollectionReq struct {
+	Content string `description:"内容"`
+}
+
+// 精选看板申请表
+type CygxApplyCollection struct {
+	ApplyCollectionId int       `orm:"column(apply_collection_id);pk" description:"主键ID"`
+	UserId            int       `description:"用户ID"`         // 用户ID
+	Mobile            string    `description:"手机号"`          // 手机号
+	Email             string    `description:"邮箱"`           // 邮箱
+	CompanyId         int       `description:"公司ID"`         // 公司ID
+	CompanyName       string    `description:"公司名称"`         // 公司名称
+	RealName          string    `description:"用户实际名称"`       // 用户实际名称
+	SellerName        string    `description:"所属销售"`         // 所属销售
+	CreateTime        time.Time `description:"创建时间"`         // 创建时间
+	ModifyTime        time.Time `description:"修改时间"`         // 修改时间
+	RegisterPlatform  int       `description:"来源 1小程序,2:网页"` // 来源 1小程序,2:网页
+	Content           string    `description:" 内容"`          // 内容
+}
+
+// 精选看板申请表
+type CygxApplyCollectionResp struct {
+	ApplyCollectionId int       `gorm:"column:"`
+	UserId            int       `gorm:"column:"`                    // 用户ID
+	Mobile            string    `gorm:"column:"`                    // 手机号
+	Email             string    `gorm:"column:"`                    // 邮箱
+	CompanyId         int       `gorm:"column:;default:0"`          // 公司ID
+	CompanyName       string    `gorm:"column:"`                    // 公司名称
+	RealName          string    `gorm:"column:"`                    // 用户实际名称
+	SellerName        string    `gorm:"column:"`                    // 所属销售
+	CreateTime        time.Time `gorm:"column:"`                    // 创建时间
+	ModifyTime        time.Time `gorm:"column:"`                    // 修改时间
+	RegisterPlatform  int       `gorm:"column:;default:1;NOT NULL"` // 来源 1小程序,2:网页
+	Content           string    `gorm:"column:;NOT NULL"`           // 内容
+}
+
+// 添加信息
+func AddCygxApplyCollection(item *CygxApplyCollection) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+// 通过ID获取详情
+func GetCygxApplyCollectionDetail(applyCollectionId int) (item *CygxApplyCollectionResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_apply_collection  WHERE apply_collection_id=?  `
+	err = o.Raw(sql, applyCollectionId).QueryRow(&item)
+	return
+}
+
+type CygxApplyCollectionDetailResp struct {
+	Detail *CygxApplyCollectionResp
+}

+ 3 - 0
models/apply_record.go

@@ -19,6 +19,9 @@ type CygxApplyRecord struct {
 	ApplyMethod         int       `description:"1:已付费客户申请试用,2:非客户申请试用"`
 	RegisterPlatform    int       `description:"来源 1小程序,2:网页"`
 	InviteCompanySource int       `description:"来源 1小程序,2:网页"`
+	SourceId            int       `description:"资源ID"`
+	Source              string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
+	Title               string    `description:"标题"`
 }
 
 type CygxApplyRecordResp struct {

+ 1 - 0
models/db.go

@@ -157,6 +157,7 @@ func init() {
 		new(CygxActivityPointsCompany),
 		new(CygxTagHistory),
 		new(CygxActivitySpecialInheritPointsCompany),
+		new(CygxApplyCollection),
 		new(CygxArticleApplyAppointmentExpert),
 		new(CygxBannerYxSurvey),
 		new(CygxReportSelectionLogApply),

+ 6 - 4
models/product_interior.go

@@ -88,10 +88,12 @@ type CygxProductInteriorResp struct {
 }
 
 type ProductInteriorUrlResp struct {
-	ChartPermissionId int    `description:"行业id"`
-	SourceId          int    `description:"资源ID"`
-	Type              int    `description:"类型:1普通文本,2:文章、3:活动、4:产业"`
-	Body              string `description:"内容"`
+	ChartPermissionId int                     `description:"行业id"`
+	SourceId          int                     `description:"资源ID"`
+	Type              int                     `description:"类型:1普通文本,2:文章、3:活动、4:产业"`
+	Body              string                  `description:"内容"`
+	ActivityVideo     *CygxActivityVideoReq   //活动视频
+	AuthInfo          *UserPermissionAuthInfo // 权限
 }
 
 // 获取数量

+ 2 - 0
models/report.go

@@ -157,6 +157,7 @@ func GetReportAndproductIndustrylList(categoryId, startSize, pageSize int) (item
 	sql := `SELECT
 			art.article_id,
 			art.title,
+			art.abstract,
 			art.publish_date,
 			1 AS resource 
 		FROM
@@ -167,6 +168,7 @@ func GetReportAndproductIndustrylList(categoryId, startSize, pageSize int) (item
 		SELECT
 			art.product_interior_id AS article_id,
 			art.title,
+			"" as abstract,
 			art.publish_time AS publish_date,
 			2 AS resource 
 		FROM

+ 36 - 0
routers/commentsRouter.go

@@ -691,6 +691,42 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"],
+        beego.ControllerComments{
+            Method: "ApplyAdd",
+            Router: `/apply/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"],
+        beego.ControllerComments{
+            Method: "ApplyDetail",
+            Router: `/apply/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"],
+        beego.ControllerComments{
+            Method: "BannerList",
+            Router: `/banner/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"],
+        beego.ControllerComments{
+            Method: "Detail",
+            Router: `/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ConfigController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ConfigController"],
         beego.ControllerComments{
             Method: "AboutUsAdd",

+ 5 - 0
routers/router.go

@@ -165,6 +165,11 @@ func init() {
 				&controllers.TagController{},
 			),
 		),
+		web.NSNamespace("/collection",
+			web.NSInclude(
+				&controllers.CollectionController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 26 - 18
services/activity.go

@@ -172,13 +172,7 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("err:", err)
-			go utils.SendAlarmMsg("发送附件模版消息失败", 2)
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
-		}
-		if msg != "" {
-			fmt.Println(msg)
-			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
+			go utils.SendAlarmMsg("预约外呼名单,会前1小时自动发送邮件给专家组失败"+msg, 2)
 		}
 	}()
 	endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
@@ -207,7 +201,7 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 	//}
 
 	for _, v := range listActivity {
-		time.Sleep(30 * time.Second) //延时30秒,避免邮件发送不成功
+		//time.Sleep(30 * time.Second) //延时30秒,避免邮件发送不成功
 		activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
 		if activityInfo == nil {
 			msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
@@ -294,18 +288,32 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 		} else if strings.Contains(activityInfo.ChartPermissionName, "研选") {
 			touser = utils.EmailExpert
 		}
-		sendResult := utils.SendEmailByHongze(title, content, touser, fileName, title+".xlsx")
-		if sendResult {
-			errFile = models.UPdateActivityIdToSendFile(v.ActivityId)
-			if errFile != nil {
-				msg = "获取失败,Err:" + errFile.Error()
-				return
+
+		sub := strings.Index(touser, ";")
+		if sub >= 0 {
+			spArr := strings.Split(touser, ";")
+			for _, v := range spArr {
+				utils.SendEmailByHongze(title, content, v, fileName, title+".xlsx")
 			}
-			os.Remove(downLoadnFilePath)
-		} else {
-			go utils.SendAlarmMsg("发送附件模版消息失败"+activityInfo.ActivityName, 2)
-			utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
 		}
+		os.Remove(downLoadnFilePath)
+		err = models.UPdateActivityIdToSendFile(v.ActivityId)
+		if err != nil {
+			go utils.SendAlarmMsg("UPdateActivityIdToSendFile err"+msg, 2)
+		}
+
+		//sendResult := utils.SendEmailByHongze(title, content, touser, fileName, title+".xlsx")
+		//if sendResult {
+		//	errFile = models.UPdateActivityIdToSendFile(v.ActivityId)
+		//	if errFile != nil {
+		//		msg = "获取失败,Err:" + errFile.Error()
+		//		return
+		//	}
+		//	os.Remove(downLoadnFilePath)
+		//} else {
+		//	go utils.SendAlarmMsg("发送附件模版消息失败"+activityInfo.ActivityName, 2)
+		//	utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
+		//}
 	}
 	return
 }

+ 94 - 0
services/collection.go

@@ -0,0 +1,94 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+//精选看板
+
+// 用户提交研选调研需求,给王芳、对口销售、内容组全员发模板消息
+func SendCygxApplyCollectionTemplateMsg(user *models.WxUserItem, content string, articleId int) (err error) {
+	var msg string
+	msg = fmt.Sprint(user, articleId)
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("SendCygxBannerYxSurveyTemplateMsg Err"+msg, 2)
+		}
+	}()
+
+	var mobiles []string
+	//获取权益销售
+	sellerItem, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if e != nil {
+		err = errors.New("GetAdminByRoleName, Err: " + e.Error())
+		return
+	}
+	//内容组全员手机号
+	configCode := utils.TPL_MSG_NEI_RONG_ZU
+	cnf, e := models.GetConfigByCode(configCode)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+
+	//王芳手机号
+	cnfWangFang, e := models.GetConfigByCode(utils.TPL_MSG)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+
+	mobiles = append(mobiles, sellerItem.Mobile)
+	mobiles = append(mobiles, cnfWangFang.ConfigValue)
+	listMobile := strings.Split(cnf.ConfigValue, ",")
+	for _, v := range listMobile {
+		mobiles = append(mobiles, v)
+	}
+
+	openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
+	if e != nil {
+		err = errors.New("GetWxOpenIdByMobileSliceList, Err: " + e.Error() + configCode)
+		return
+	}
+	if len(openIdList) == 0 {
+		return
+	}
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, "(", sellerItem.RealName, ")")
+	if user.Mobile == "" {
+		user.Mobile = user.Email
+	}
+	keyword2 = user.Mobile
+	keyword3 = time.Now().Format(utils.FormatDateTime)
+	keyword4 = fmt.Sprint("精选看板:", content)
+	var redirectUrl string
+	if utils.RunMode == "release" {
+		redirectUrl = utils.WX_MSG_PATH_APPLY_COLLECTION_DETAIL + strconv.Itoa(articleId)
+	}
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = strconv.Itoa(articleId)
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
+	return
+}

+ 55 - 7
services/product_interior.go

@@ -1,6 +1,7 @@
 package services
 
 import (
+	"errors"
 	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
@@ -41,13 +42,22 @@ func GetProductInteriorUrl(url string, urlMap map[string]string) (itemResp *mode
 }
 
 // GetProductInteriorUrl 处理产品内测中的连接并做跳转处理
-func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorUrlResp) {
+func GetProductInteriorUrlBody(body string, user *models.WxUserItem) (itemResp []*models.ProductInteriorUrlResp, err error) {
 	//2:文章详情  https://web.hzinsights.com/material/info/8436
 	//3:活动详情  https://web.hzinsights.com/activity/detail/2701
 	//4:产业详情  https://web.hzinsights.com/indepth/info/20/79
-	material := "material/info"
-	activity := "activity/detail"
-	indepth := "indepth/info"
+
+	// 用户权限
+	authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
+	if e != nil {
+		err = errors.New("GetUserRaiPermissionInfo, Err: " + e.Error())
+		return
+	}
+
+	material := "material/info"     // 2:文章详情
+	activity := "activity/detail"   //3:活动详情
+	indepth := "indepth/info"       //4:产业详情
+	ctivityvideo := "ctivity/video" //5:活动音频
 
 	var randStrStart = "start_cygx_{|}"
 	var randStr = "start_cygx_{|}_end_cygx"
@@ -57,10 +67,9 @@ func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorU
 	if match != nil {
 		for _, v := range match {
 			//过滤不相干的超链接
-			if !strings.Contains(v, material) && !strings.Contains(v, activity) && !strings.Contains(v, indepth) {
+			if !strings.Contains(v, material) && !strings.Contains(v, activity) && !strings.Contains(v, indepth) && !strings.Contains(v, ctivityvideo) {
 				continue
 			}
-			fmt.Println(v)
 			body = strings.Replace(body, fmt.Sprint("href=\"", v, "\""), "", -1)
 			body = strings.Replace(body, fmt.Sprint("<a >"), "", -1)
 			body = strings.Replace(body, fmt.Sprint("</a>"), "", -1)
@@ -68,7 +77,6 @@ func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorU
 			urlMap[v] = v
 		}
 	}
-	fmt.Println(urlMap)
 	sliceBody := strings.Split(body, randStr)
 	var sliceBodyUrl []string
 	for _, v := range sliceBody {
@@ -101,6 +109,46 @@ func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorU
 					item.ChartPermissionId = chartPermissionId
 				}
 				item.Type = 4
+			} else if strings.Contains(url, ctivityvideo) {
+				if lenurlSlice >= 2 {
+					chartPermissionId, _ := strconv.Atoi(urlSlice[lenurlSlice-2])
+					item.ChartPermissionId = chartPermissionId
+				}
+				item.Type = 5
+				activityVideo, e := models.GetCygxActivityVideoReqByActivityId(sourceId)
+				if e != nil {
+					err = errors.New("GetCygxActivityVideoReqByActivityId, Err: " + e.Error())
+					return
+				}
+				if activityVideo != nil {
+					item.ActivityVideo = activityVideo
+				}
+				activityInfo, e := models.GetAddActivityInfoById(sourceId)
+				if e != nil {
+					err = errors.New("GetAddActivityInfoById, Err: " + e.Error())
+					return
+				}
+				// 权限
+				au := new(models.UserPermissionAuthInfo)
+				au.SellerName = authInfo.SellerName
+				au.SellerMobile = authInfo.SellerMobile
+				au.HasPermission = authInfo.HasPermission
+				au.OperationMode = authInfo.OperationMode
+				if au.HasPermission == 1 {
+					// 非宏观权限进一步判断是否有权限
+					if activityInfo.ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, activityInfo.ChartPermissionName) {
+						au.HasPermission = 2
+					}
+				}
+				// 无权限的弹框提示
+				if au.HasPermission != 1 {
+					if au.OperationMode == UserPermissionOperationModeCall {
+						au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
+					} else {
+						au.PopupMsg = UserPermissionPopupMsgApplyActivity
+					}
+				}
+				item.AuthInfo = au
 			}
 		}
 		itemResp = append(itemResp, item)

+ 2 - 1
services/resource_data.go

@@ -215,8 +215,9 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 		var activityListRersp []*models.ActivityDetail
 		for _, v := range activityList {
 			v.SignupType = mapActivitySignup[v.ActivityId]
-			activityListRersp = append(activityListRersp, ActivityButtonShow(v))
+			//activityListRersp = append(activityListRersp, ActivityButtonShow(v))
 		}
+		activityListRersp = ActivityArrButtonShow(activityList)
 		for _, v := range activityListRersp {
 			if v == nil {
 				continue

+ 21 - 1
services/wx_template_msg.go

@@ -15,6 +15,9 @@ import (
 
 // 活动预开始模版消息通知
 func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -23,7 +26,6 @@ func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime
 		}
 		fmt.Println("line 21", err, msg)
 	}()
-
 	redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
 	sendInfo := new(SendWxTemplate)
 
@@ -47,6 +49,9 @@ func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime
 // 专项调研活动预开始消息通知
 // func SendWxMsgWithFrequencySpecial(first, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
 func SendWxMsgWithFrequencySpecial(first, keyword1, keyword2, keyword3, keyword4, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -78,6 +83,9 @@ func SendWxMsgWithFrequencySpecial(first, keyword1, keyword2, keyword3, keyword4
 
 // 发送报告提问消息提醒
 func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.OpenIdList, articleId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -162,6 +170,9 @@ func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openId
 
 // 发送报告提问消息提醒
 func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, articleId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -204,6 +215,9 @@ func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 str
 
 // 发送用户阅读报告消息提醒
 func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -243,6 +257,9 @@ func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*mod
 
 // 发送用户操作活动消息提醒
 func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -279,6 +296,9 @@ func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*mo
 
 // 发送用户操作专项调研活动消息提醒
 func SendWxMsgWithSpecialActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {

+ 7 - 7
utils/config.go

@@ -167,13 +167,13 @@ func init() {
 		IndexNameComprehensive = "cygx_comprehensive"
 
 		//接收附件邮箱
-		EmailTechnology = "mlluo@hzinsights.com;jxu@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com;hwang@hzinsights.com;rli@hzinsights.com"       //科技行业专家邮箱
-		EmailMedicine = "xlzheng@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com;yxyan@hzinsights.com;ppwang@hzinsights.com"                       //医药行业专家邮箱
-		EmailConsumption = "yrhuang@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com;jxu@hzinsights.com;hychen@hzinsights.com;lwang@hzinsights.com" //消费行业专家邮箱
-		EmailZhizao = "xfma@hzinsights.com;agne@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"                                                   //智造行业专家邮箱
-		EmailStrategy = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"                                                                  //策略行业专家邮箱
-		EmailExpert = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"                                                                    //研选行业专家邮箱
-		EmaiWhiteUserList = "tshen@hzinsights.com;cxzhang@hzinsights.com;yyli@hzinsights.com"                                                                                       //白名单邮箱
+		EmailTechnology = "mlluo@hzinsights.com;jxu@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;hwang@hzinsights.com;rli@hzinsights.com"       //科技行业专家邮箱
+		EmailMedicine = "xlzheng@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;yxyan@hzinsights.com;ppwang@hzinsights.com"                       //医药行业专家邮箱
+		EmailConsumption = "yrhuang@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jxu@hzinsights.com;hychen@hzinsights.com;lwang@hzinsights.com" //消费行业专家邮箱
+		EmailZhizao = "xfma@hzinsights.com;agne@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com"                                                   //智造行业专家邮箱
+		EmailStrategy = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com"                                                                  //策略行业专家邮箱
+		EmailExpert = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com"                                                                    //研选行业专家邮箱
+		EmaiWhiteUserList = "tshen@hzinsights.com;cxzhang@hzinsights.com;yyli@hzinsights.com"                                                                 //白名单邮箱
 		WxMsgTemplateIdAskMsg = "PaoDanHGlt1kFw5q-4_ipJSwO3FyZpxSSNg4rwB7YCk"
 		WxMsgTemplateIdArticleUserRemind = "7qe3i4MrGxAIPhJeMgoqqw6j0A_foUB65DLSmxKe05s"
 		WxMsgTemplateIdAskMsgMobile = ""

+ 3 - 1
utils/constants.go

@@ -113,7 +113,8 @@ const (
 )
 
 const (
-	CHART_INFO_HTTP_URL = "https://vmp.hzinsights.com/v2/charts/"
+	CHART_INFO_HTTP_URL       = "https://vmp.hzinsights.com/v2/charts/"
+	COLLECTIONS_INFO_HTTP_URL = "https://vmp.hzinsights.com/v2/collections"
 )
 
 const (
@@ -181,6 +182,7 @@ const (
 	WX_MSG_PATH_ACTIVITY_SIGN            = "pages-message/activityTemplate/activityTemplate?id="          //活动模板消息地址
 	WX_MSG_PATH_APPLY_DETAIL             = "pages-message/applyFor/applyFor?id="                          //潜在用户试用权限申请
 	WX_MSG_PATH_YX_SURVEY_DETAIL         = "pages-purchaser/survey/surveyDetail?surveyId="                //用户提交研选调研需求
+	WX_MSG_PATH_APPLY_COLLECTION_DETAIL  = "reportPages/bulletinDetail/bulletinDetail?id="                //精选看板申请详情页
 )
 
 //2:文章详情  https://web.hzinsights.com/material/info/8436  小程序路径:/pageMy/reportDetail/reportDetail?id=