Browse Source

Merge branch 'cygx_12.8.1' of http://8.136.199.33:3000/cxzhang/hongze_clpt into debug

xingzai 1 year ago
parent
commit
f44fd7aec7

+ 2 - 2
controllers/activity.go

@@ -1892,7 +1892,7 @@ func (this *ActivityController) AskAdd() {
 					if sellerItem != nil {
 
 						//services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
-						services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
+						services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "提问:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
 					}
 				}
 			}
@@ -1901,7 +1901,7 @@ func (this *ActivityController) AskAdd() {
 				openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
 				if openIpItem != nil && openIpItem.OpenId != "" {
 					//services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName, "所属销售:"+sellerItem.RealName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo)
-					services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "留言:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
+					services.SendActivityAskApplyTemplateMsgV2(user.RealName+"——"+user.CompanyName+"("+sellerItem.RealName+")", "提问:"+activityInfo.ActivityName, time.Now().Format(utils.FormatDateTime), req.Content, activityInfo.ActivityName, openIpItem, activityInfo, int(msgId))
 				}
 			}
 		}

+ 133 - 0
controllers/micro_roadshow.go

@@ -722,3 +722,136 @@ func (this *MicroRoadShowController) AskserieVideoDetail() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 策略系列培训视频
+// @Description 策略系列培训视频接口
+// @Param   PageSize		query	int		true	"每页数据条数"
+// @Param   CurrentIndex	query	int		true	"当前页页码,从1开始"
+// @Success 200 {object} models.HomeListResp
+// @router /training/list [get]
+func (this *MicroRoadShowController) TrainingList() {
+	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
+	}
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+
+	var audioIds []string
+	var videoIds []string
+	var activityVideoIds []string
+	var askserieVideoIds []string                                                                                                  //问答系列视频
+	activityVideoIds = []string{"461", "462", "463", "464", "465", "466"}                                                          // 系列培训视频,固定的六个,这里先写死
+	activityVideoTitle := []string{"第一期_A股运行特征探讨", "第二期_行业比较研究", "第三期_市场风格观察与我们的研究方法", "第四期_市场估值指标追踪", "第五期_宏观经济研究", "第六期_市场回顾专题"} // 系列培训视频,固定的六个,这里先写死
+	audioIdstr := strings.Join(audioIds, ",")
+	ideoIdsStr := strings.Join(videoIds, ",")
+	activityVideoIdsStr := strings.Join(activityVideoIds, ",")
+	askserieVideoIdsStr := strings.Join(askserieVideoIds, ",")
+	// 微路演列表
+	list, total, e := services.GetMicroRoadShowMycollectV12(pageSize, currentIndex, audioIdstr, activityVideoIdsStr, ideoIdsStr, askserieVideoIdsStr, user)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取微路演列表失败, Err: " + e.Error()
+		return
+	}
+
+	//存储反转数据
+	reversed := []*models.MicroRoadShowPageList{}
+	for i := range list {
+		n := list[len(list)-1-i]
+		reversed = append(reversed, n)
+	}
+	list = reversed
+
+	// 用户权限
+	authInfo, permissionArr, e := services.GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取用户权限失败, Err: " + e.Error()
+		return
+	}
+
+	// 获取默认图配置
+	audioMap, videoMap, audioShareMap, videoShareMap, e := services.GetMicroRoadShowDefaultImgConfig()
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取微路演列表失败, Err: " + e.Error()
+		return
+	}
+	for i := range list {
+		// 权限
+		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 list[i].ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, list[i].ChartPermissionName) {
+				au.HasPermission = 2
+			}
+		}
+		// 无权限的弹框提示
+		if au.HasPermission != 1 {
+			if au.OperationMode == services.UserPermissionOperationModeCall {
+				if list[i].Type == 1 {
+					au.PopupMsg = services.UserPermissionPopupMsgCallActivity
+				} else {
+					au.PopupMsg = services.UserPermissionPopupMsgCallMicroVideo
+				}
+			} else {
+				if list[i].Type == 1 {
+					au.PopupMsg = services.UserPermissionPopupMsgApplyActivity
+				} else {
+					au.PopupMsg = services.UserPermissionPopupMsgApplyMicroVideo
+				}
+			}
+		}
+		list[i].AuthInfo = au
+		list[i].PublishTime = utils.StrTimeToTime(list[i].PublishTime).Format(utils.FormatDate)
+		// 默认图
+		if list[i].BackgroundImg == "" {
+			if list[i].Type == 1 {
+				list[i].BackgroundImg = audioMap[list[i].ChartPermissionId]
+			} else {
+				list[i].BackgroundImg = videoMap[list[i].ChartPermissionId]
+			}
+		}
+		// 分享图
+		if list[i].ShareImg == "" {
+			if list[i].Type == 1 {
+				list[i].ShareImg = audioShareMap[list[i].ChartPermissionId]
+			} else {
+				list[i].ShareImg = videoShareMap[list[i].ChartPermissionId]
+			}
+		}
+		if i <= len(activityVideoTitle)-1 {
+			list[i].Title = activityVideoTitle[i]
+		}
+	}
+
+	resp := new(models.MicroRoadShowListResp)
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	resp.List = list
+	resp.Paging = page
+	resp.Describe = "弘则策略首席 马冬凡 主讲"
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 9 - 1
controllers/morning_meeting.go

@@ -165,7 +165,15 @@ func (this *MorningMeetingController) GatherDetail() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取失败,Err:" + err.Error()
 		}
-		detailResp.List = listMeet
+		var meetingreviewchaptIds []int
+		for _, v := range listMeet {
+			meetingreviewchaptIds = append(meetingreviewchaptIds, v.Id)
+		}
+		detailResp.List, err = services.GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "GetCygxMorningMeetingReviewChapterListByIds,Err:" + err.Error()
+		}
 	} else {
 		detailResp.List = make([]*models.CygxMorningMeetingGatherDetailListResp, 0)
 	}

+ 1 - 0
controllers/product_interior.go

@@ -122,6 +122,7 @@ func (this *ProductInteriorController) Detail() {
 	detail.PublishTime = utils.TimeRemoveHms2(detail.PublishTime)
 	resp.Detail = detail
 	detail.BodySlice = services.GetProductInteriorUrlBody(detail.Body)
+	resp.Disclaimers = utils.DISCLAIMERS_PRODUCT_INTERIOR // 免责声明
 	go services.AddCygxProductInteriorHistory(user, productInteriorId)
 	go services.ProductInteriorHistoryUserRmind(user, productInteriorId)
 	br.Ret = 200

+ 19 - 0
controllers/report.go

@@ -1332,6 +1332,25 @@ func (this *MobileReportController) Timeline() {
 		br.ErrMsg = "获取产业报告+晨会点评列表,Err:" + err.Error()
 		return
 	}
+	//处理晨会精华关联的标的,以及要跳转的文章ID
+	var meetingreviewchaptIds []int
+	mapchaptIdAndArticleId := make(map[int]int)                            // 晨会精华ID与跳转文章ID的映射关系
+	mapchaptIdListSubject := make(map[int][]*models.CygxIndustrialSubject) // 晨会精华ID与标的列表的映射关系
+	for _, v := range list {
+		if v.Resource == 3 {
+			meetingreviewchaptIds = append(meetingreviewchaptIds, v.Id)
+		}
+		listMeet, err := services.GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "GetCygxMorningMeetingReviewChapterListByIds,Err:" + err.Error()
+		}
+		for _, v := range listMeet {
+			mapchaptIdAndArticleId[v.Id] = v.LinkArticleId
+			mapchaptIdListSubject[v.Id] = v.ListSubject
+		}
+	}
+
 	//查询用户今天是否看过时间线
 	count, err := models.GetTimeLineRecordCount(user.UserId, industrialManagementId)
 	if err != nil {

+ 13 - 8
models/cygx_morning_meeting_gather.go

@@ -67,14 +67,19 @@ func GetCygxMorningMeetingGatherById(condition string, pars []interface{}) (item
 }
 
 type CygxMorningMeetingGatherDetailListResp struct {
-	Id                  int    `description:"ID"`
-	IndustryId          int    `description:"产业id"` // 产业id
-	IndustryName        string `description:"产业名称"` // 产业名称
-	ChartPermissionName string `description:"行业名称"` // 行业名称
-	ChartPermissionId   int    `description:"行业id"` // 行业id
-	MeetingId           int    `description:"主表id"` // 主表id
-	Content             string `description:"内容"`   // 内容
-	PublishTime         string `description:"发布日期"`
+	Id                   int                      `description:"ID"`
+	IndustryId           int                      `description:"产业id"` // 产业id
+	IndustryName         string                   `description:"产业名称"` // 产业名称
+	ChartPermissionName  string                   `description:"行业名称"` // 行业名称
+	ChartPermissionId    int                      `description:"行业id"` // 行业id
+	MeetingId            int                      `description:"主表id"` // 主表id
+	Content              string                   `description:"内容"`   // 内容
+	PublishTime          string                   `description:"发布日期"`
+	ReportLink           string                   `description:"报告链接"`
+	LinkArticleId        int                      `description:"报告ID链接"`
+	Title                string                   `description:"标题"`
+	IndustrialSubjectIds string                   `description:"标的id"`
+	ListSubject          []*CygxIndustrialSubject `description:"标的列表"`
 }
 
 type CygxMorningMeetingGatherDetailResp struct {

+ 5 - 6
models/industrial_subject.go

@@ -2,7 +2,6 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
-	"time"
 )
 
 type IndustrialSubjectByArticle struct {
@@ -19,11 +18,11 @@ type SubjectArticlGroupList struct {
 }
 
 type CygxIndustrialSubject struct {
-	IndustrialSubjectId    int       `orm:"column(industrial_subject_id);pk" description:"标的id"`
-	IndustrialManagementId int       `description:"产业id"`
-	SubjectName            string    `description:"标的名称"`
-	CreateTime             time.Time `description:"创建时间"`
-	Source                 int       `description:"来源,1正常添加,2:通过文章添加,3通过活动添加(默认为1)"`
+	IndustrialSubjectId    int    `orm:"column(industrial_subject_id);pk" description:"标的id"`
+	IndustrialManagementId int    `description:"产业id"`
+	SubjectName            string `description:"标的名称"`
+	CreateTime             string `description:"创建时间"`
+	Source                 int    `description:"来源,1正常添加,2:通过文章添加,3通过活动添加(默认为1)"`
 }
 
 // 获取标的列表

+ 3 - 2
models/micro_roadshow.go

@@ -9,8 +9,9 @@ import (
 
 // MicroRoadShowListResp 微路演列表响应体
 type MicroRoadShowListResp struct {
-	Paging *paging.PagingItem
-	List   []*MicroRoadShowPageList
+	Paging   *paging.PagingItem
+	List     []*MicroRoadShowPageList
+	Describe string `description:"说明"`
 }
 type CygxMicroRoadshowVideo struct {
 	VideoId             int       `orm:"column(video_id);pk"description:"微路演视频id"`

+ 3 - 2
models/product_interior.go

@@ -120,8 +120,9 @@ func GetCygxProductInteriorList(condition string, pars []interface{}, startSize,
 
 type GetCygxProductInteriorDetailResp struct {
 	Detail        *CygxProductInteriorResp
-	HasPermission int  `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
-	IsShow        bool `description:"是否展示"`
+	HasPermission int    `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	IsShow        bool   `description:"是否展示"`
+	Disclaimers   string `description:"免责声明"`
 }
 
 // 通过ID获取详情

+ 9 - 0
routers/commentsRouter.go

@@ -484,6 +484,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MicroRoadShowController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MicroRoadShowController"],
+        beego.ControllerComments{
+            Method: "TrainingList",
+            Router: `/training/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MicroRoadShowController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MicroRoadShowController"],
         beego.ControllerComments{
             Method: "VideoHistoryAdd",

+ 5 - 5
services/es_comprehensive.go

@@ -409,13 +409,13 @@ func GetResourceDataEsList(list []*SearchComprehensiveItem, user *models.WxUserI
 
 	//处理晨会精华
 	if len(meetingreviewchaptIds) > 0 {
-		pars = make([]interface{}, 0)
-		condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
-		pars = append(pars, meetingreviewchaptIds)
+		//pars = make([]interface{}, 0)
+		//condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
+		//pars = append(pars, meetingreviewchaptIds)
 
-		listrMeet, e := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
+		listrMeet, e := GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds)
 		if e != nil {
-			err = errors.New("GetResourceDataList, Err: " + e.Error())
+			err = errors.New("GetCygxMorningMeetingReviewChapterListByIds, Err: " + e.Error())
 			return
 		}
 		for _, v := range listrMeet {

+ 71 - 0
services/morning_meeting.go

@@ -5,6 +5,8 @@ import (
 	"fmt"
 	"hongze/hongze_clpt/models"
 	"hongze/hongze_clpt/utils"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -48,3 +50,72 @@ func AddCygxMorningMeetingReviewChapterHistory(user *models.WxUserItem, articleI
 	}
 	return
 }
+
+// 通过晨会精华子ID,获取出参列表详情
+func GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds []int) (items []*models.CygxMorningMeetingGatherDetailListResp, err error) {
+	lenArr := len(meetingreviewchaptIds)
+	if lenArr == 0 {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("通过晨会精华子ID,获取出参列表详情失败 ,GetCygxMorningMeetingReviewChapterListByIds err"+err.Error(), "meetingreviewchaptIds:", meetingreviewchaptIds), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+
+	pars = make([]interface{}, 0)
+	condition = ` AND c.id IN (` + utils.GetOrmInReplace(lenArr) + `)`
+	pars = append(pars, meetingreviewchaptIds)
+
+	//查询晨会
+	listrMeet, e := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxMorningMeetingReviewChapterList, Err: " + e.Error())
+		return
+	}
+
+	//获取晨会相关的标的
+	var subjectIds []string
+	for _, v := range listrMeet {
+		if v.IndustrialSubjectIds != "" {
+			slice := strings.Split(v.IndustrialSubjectIds, ",")
+			for _, vS := range slice {
+				subjectIds = append(subjectIds, vS)
+			}
+		}
+	}
+
+	lensubjectIds := len(subjectIds)
+	if lensubjectIds > 0 {
+		//获取标的信息
+		pars = make([]interface{}, 0)
+		condition = ` AND industrial_subject_id  IN (` + utils.GetOrmInReplace(lensubjectIds) + `)`
+		pars = append(pars, subjectIds)
+		listsubject, e := models.GetCygxIndustrialSubjectListCondition(condition, pars)
+		if e != nil {
+			err = errors.New("GetCygxIndustrialSubjectListCondition, Err: " + e.Error())
+			return
+		}
+
+		var meetSubjectItems = make(map[string]*models.CygxIndustrialSubject)
+		for _, v := range listsubject {
+			meetSubjectItems[strconv.Itoa(v.IndustrialSubjectId)] = v
+		}
+
+		//建立标的与晨会的映射关系
+		for _, v := range listrMeet {
+			if v.IndustrialSubjectIds != "" {
+				slice := strings.Split(v.IndustrialSubjectIds, ",")
+				for _, vS := range slice {
+					if meetSubjectItems[vS] != nil {
+						v.ListSubject = append(v.ListSubject, meetSubjectItems[vS])
+					}
+				}
+			}
+		}
+	}
+	items = listrMeet
+	return
+}

+ 6 - 6
services/resource_data.go

@@ -135,13 +135,13 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 
 	//处理晨会精华
 	if len(meetingreviewchaptIds) > 0 {
-		pars = make([]interface{}, 0)
-		condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
-		pars = append(pars, meetingreviewchaptIds)
-
-		listrMeet, e := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
+		//pars = make([]interface{}, 0)
+		//condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
+		//pars = append(pars, meetingreviewchaptIds)
+		//
+		listrMeet, e := GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds)
 		if e != nil {
-			err = errors.New("GetResourceDataList, Err: " + e.Error())
+			err = errors.New("GetCygxMorningMeetingReviewChapterListByIds, Err: " + e.Error())
 			return
 		}
 		for _, v := range listrMeet {

+ 1 - 1
services/wx_template_msg.go

@@ -141,7 +141,7 @@ func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, r
 
 	activityId := itemAct.ActivityId
 	var redirectUrl string
-	redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
+	redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=2"
 	openIdArr := make([]string, 0)
 	openIdArr = append(openIdArr, itemOpenid.OpenId)
 	sendInfo := new(SendWxTemplate)

+ 8 - 7
utils/constants.go

@@ -22,13 +22,14 @@ const (
 )
 
 const (
-	APPNAME             = "弘则-策略平台网页版"
-	EmailSendToUsers    = "cxzhang@hzinsights.com"
-	ApiAuthorization    = "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJuYW1lIjoi5YW25LuWIiwiZW50cmFuY2UiOiJwYXNzd3dvcmQiLCJpYXQiOjE2MzQ4NzA1OTQsImV4cCI6MTYzNDg3NDE5NH0.tho2L9jsbDPn8ltEGUVDve_nHsh0Kzf6ZrSz0RcZ0ag"
-	ApiUrl              = "https://vmp.hzinsights.com/v2api/"
-	CHART_INFO_HTTP_URL = "https://vmp.hzinsights.com/v2/charts/"
-	DISCLAIMERS         = "本文为用户投稿,用户在平台中发表的所有资料、言论等仅代表个人观点,与本平台立场无关,不对您构成任何投资建议。本平台对文中陈述、观点判断保持中立,不对所包含内容及数据的真实性、准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。"
-	REGISTER_PLATFORM   = 2 // 来源 1小程序,2:网页
+	APPNAME                             = "弘则-策略平台网页版"
+	EmailSendToUsers                    = "cxzhang@hzinsights.com"
+	ApiAuthorization                    = "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJuYW1lIjoi5YW25LuWIiwiZW50cmFuY2UiOiJwYXNzd3dvcmQiLCJpYXQiOjE2MzQ4NzA1OTQsImV4cCI6MTYzNDg3NDE5NH0.tho2L9jsbDPn8ltEGUVDve_nHsh0Kzf6ZrSz0RcZ0ag"
+	ApiUrl                              = "https://vmp.hzinsights.com/v2api/"
+	CHART_INFO_HTTP_URL                 = "https://vmp.hzinsights.com/v2/charts/"
+	DISCLAIMERS                         = "本文为用户投稿,用户在平台中发表的所有资料、言论等仅代表个人观点,与本平台立场无关,不对您构成任何投资建议。本平台对文中陈述、观点判断保持中立,不对所包含内容及数据的真实性、准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。"
+	DISCLAIMERS_PRODUCT_INTERIOR string = "<pstyle=\"text-align: center;\">免责声明</p><p>本报告仅供弘则弥道(上海)投资咨询有限公司正式签约的机构客户使用,不会因接收人/接收机构收到本报告而将其视为客户。本报告根据国际和行业通行的准则,以合法渠道获得这些信息,尽可能保证可靠、准确和完整,但并不保证报告所述信息的准确性和完整性,也不保证本报告所包含的信息或建议在本报告发出后不会发生任何变更。本报告中所提供的信息仅供参考。报告中的内容不对投资者做出的最终操作建议做任何的担保,也没有任何形式的分享投资收益或者分担投资损失的书面或口头承诺。不作为客户在投资、法律、会计或税务等方面的最终操作建议,也不作为道义的、责任的和法律的依据或者凭证,无论是否已经明示或者暗示。在任何情况下,本公司不对客户/接收人/接收机构因使用报告中内容所引致的一切损失负责任,客户/接收人/接收机构需自行承担全部风险。</p><p><br/></p>" // 产品内测免责声明
+	REGISTER_PLATFORM                   = 2                                                                                                                                                                                                                                                                                                                                                                                                                            // 来源 1小程序,2:网页
 )
 
 // 手机号,电子邮箱正则