فهرست منبع

Merge branch 'master' of http://8.136.199.33:3000/hongze/hz_crm_api into crm/crm_16.1

xingzai 6 ماه پیش
والد
کامیت
8554c643e3

+ 4 - 0
controllers/cygx/apply_record.go

@@ -212,6 +212,10 @@ func (this *ApplyRecordController) ListSysRole() {
 			list[i].HttpUrl = utils.CYGX_WEB_URL + "/recent/" + strconv.Itoa(v.SourceId)
 		case "yanxuanspecial": //研选专栏
 			list[i].HttpUrl = utils.CYGX_WEB_URL + "/column/detail/" + strconv.Itoa(v.SourceId)
+		case utils.CYGX_OBJ_FICC_REPORT: //FICC研报
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.SourceId)
+		case utils.CYGX_OBJ_FICC_REPORT_XCX: //FICC研报
+			list[i].IsGray = true
 		}
 	}
 

+ 1 - 1
controllers/cygx/industrial_management.go

@@ -102,7 +102,7 @@ func (this *IndustrialManagementController) ChartPermissionListIco() {
 	if havestrategy > 0 {
 		condition = ` AND chart_permission_id IN (19,20,21,22,23) `
 	} else {
-		condition = ` AND chart_permission_id IN (19,20,21,22) `
+		condition = ` AND chart_permission_id IN (19,20,21,22) OR ( chart_permission_name = '周期'  AND product_id = 2 )   `
 	}
 	list, err := cygx.GetChartPermissionIco(condition)
 	if err != nil {

+ 22 - 6
controllers/cygx/rai_serve.go

@@ -82,7 +82,14 @@ func (this *RaiServeCoAntroller) SearchTag() {
 	}
 
 	resp := new(cygx.RaiServeTagListResp)
-	list, err := cygx.GetRaiServeSearchTagRespList(keyWord)
+	var chartPermissionId string
+
+	if utils.RunMode == "release" {
+		chartPermissionId = "19, 20, 21, 22 ,62 "
+	} else {
+		chartPermissionId = "19, 20, 21, 22 ,148 "
+	}
+	list, err := cygx.GetRaiServeSearchTagRespList(keyWord, chartPermissionId)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
@@ -168,7 +175,7 @@ func (this *RaiServeCoAntroller) SearchTagCalendar() {
 			hasCelue = true
 		}
 	}
-
+	permissionName = append(permissionName, utils.ZHOU_QI_NAME) //所有行业默认添加周期行业
 	var permissionNameSql []string
 	for _, v := range permissionName {
 		permissionNameSql = append(permissionNameSql, "'"+v+"'")
@@ -316,6 +323,7 @@ func (this *RaiServeCoAntroller) ChcckPermissionName() {
 // @Param   TagId   int   string  false       "标签ID"
 // @Param   Status   query   string  false       "客户状态,正式、未续约(除了正式之外的所有)"
 // @Param   SortType   query   string  true       "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
+// @Param   SortParam   query   string  false       "排序字段参数,用来排序的字段, 枚举值:'money':金额 、 'endDate':结束时间"
 // @Param   KeyWord   query   string  false       "搜索关键词"
 // @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
 // @Success 200 {object} cygx.RaiServeTagListResp
@@ -339,6 +347,8 @@ func (this *RaiServeCoAntroller) List() {
 	status := this.GetString("Status")
 	sellerId := this.GetString("SellerId")
 	shareSellerId := this.GetString("ShareSellerId")
+	//排序参数
+	sortParam := this.GetString("SortParam")
 	sortType := this.GetString("SortType")
 	tagType, _ := this.GetInt("TagType")
 	tagId, _ := this.GetInt("TagId")
@@ -379,11 +389,17 @@ func (this *RaiServeCoAntroller) List() {
 		//pars = append(pars, shareSellerId)
 	}
 
-	if sortType != "" {
+	if sortType != "" && sortParam != "" {
+		if sortParam == "money" {
+			sortStr = " ORDER BY money   "
+		}
+		if sortParam == "endDate" {
+			sortStr = " ORDER BY end_date   "
+		}
 		if sortType == "asc" {
-			sortStr = " ORDER BY money  ASC "
-		} else if sortType == "desc" {
-			sortStr = " ORDER BY money DESC "
+			sortStr += " ASC "
+		} else {
+			sortStr += " DESC "
 		}
 	} else {
 		sortStr = " ORDER BY end_date DESC "

+ 7 - 0
controllers/cygx/report_article.go

@@ -240,6 +240,7 @@ func (this *ReportArticleController) ReportArticleList() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+	//return
 	condition += `	GROUP BY art.article_id  ORDER BY art.publish_date DESC `
 	//fmt.Println(condition)
 	list, err := cygx.GetReportArticleList(condition, pars, startSize, pageSize, isClass)
@@ -369,6 +370,12 @@ func (this *ReportArticleController) ReportArticleList() {
 		list[k].CommentNum = mapCommment[v.ArticleId]
 		list[k].ListIndustrial = mapIndustrialList[v.ArticleId]
 		list[k].ListSubject = mapSubjectList[v.ArticleId]
+
+		if v.ReportId > 0 {
+			list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
+		} else {
+			list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
+		}
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(cygx.GetReportArticleListRep)

+ 18 - 0
controllers/cygx/user.go

@@ -691,6 +691,9 @@ func (this *UserController) TableDetail() {
 				} else {
 					list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
 				}
+				if v.ReportId > 0 {
+					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
+				}
 			}
 
 			//导出excel
@@ -808,6 +811,9 @@ func (this *UserController) TableDetail() {
 				} else {
 					list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
 				}
+				if v.ReportId > 0 {
+					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
+				}
 			}
 		}
 	} else if source == 4 {
@@ -2528,6 +2534,9 @@ func (this *UserController) CompanyTableDetail() {
 			} else {
 				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
 			}
+			if v.ReportId > 0 {
+				list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
+			}
 		}
 		//导出excel
 		if isExport {
@@ -2668,6 +2677,9 @@ func (this *UserController) CompanyTableDetail() {
 				} else {
 					list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
 				}
+				if v.ReportId > 0 {
+					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
+				}
 			}
 		}
 	} else if source == 4 {
@@ -3830,6 +3842,9 @@ func (this *UserController) CompanyList() {
 			} else {
 				list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
 			}
+			if v.ReportId > 0 {
+				list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
+			}
 		}
 		//导出excel
 		if isExport {
@@ -3979,6 +3994,9 @@ func (this *UserController) CompanyList() {
 				} else {
 					list[k].HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
 				}
+				if v.ReportId > 0 {
+					list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
+				}
 			}
 		}
 	} else if source == 4 {

+ 133 - 18
controllers/roadshow/calendar.go

@@ -205,6 +205,20 @@ func (this *CalendarController) Add() {
 		return
 	}
 
+	//如果是权益客户,添加销售跟共享销售的信息
+	var productItemRai *company.CompanyProduct
+	roleTypeCode := sysUser.RoleTypeCode
+	//如果是权益销售、权益销售组长、权益管理员 添加的路演信息,做销售与共享销售信息关联查看
+	if req.CompanyId > 0 && req.ActivityType == "路演" && (roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
+		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN) {
+		productItemRai, err = company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, utils.COMPANY_PRODUCT_RAI_ID)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "客户信息有误"
+			br.ErrMsg = "获取客户信息失败, Err: " + err.Error()
+			return
+		}
+	}
+
 	rsCalendar := new(roadshow.RsCalendar)
 	rsCalendar.SysUserId = sysUser.AdminId
 	rsCalendar.SysUserRealName = sysUser.RealName
@@ -226,6 +240,10 @@ func (this *CalendarController) Add() {
 	rsCalendar.Source = 0
 	rsCalendar.EnglishCompany = req.EnglishCompany
 	rsCalendar.Title = getTitle(req.ActivityType, req.RoadshowType, req.ActivityCategory, req.RoadshowPlatform, req.Province, req.City)
+	if productItemRai != nil {
+		rsCalendar.SellerId = productItemRai.SellerId
+		rsCalendar.ShareSellerId = productItemRai.ShareSellerId
+	}
 	rsCalendarId, err := roadshow.AddRsCalendar(rsCalendar)
 	if err != nil {
 		br.Msg = "保存失败!"
@@ -1188,9 +1206,9 @@ func (this *CalendarController) CalendarList() {
 	roleTypeCode := sysUser.RoleTypeCode
 	//销售
 	if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER ||
-		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
+		//roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
 		roleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP ||
-		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP ||
+		//roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP ||
 		roleTypeCode == utils.ROLE_TYPE_CODE_FICC_TEAM ||
 		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
 		condition += ` AND a.sys_user_id=?`
@@ -1198,6 +1216,15 @@ func (this *CalendarController) CalendarList() {
 		//condition += ` AND a.activity_type IN('路演','公开会议') `
 	}
 
+	//权益销售
+	if roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
+		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
+		//if calendarType == 2 {
+		condition += ` AND  ( a.sys_user_id=?  OR a.seller_id=?  OR a.share_seller_id=?  )  `
+		pars = append(pars, sysUser.AdminId, sysUser.AdminId, sysUser.AdminId)
+		//}
+	}
+
 	if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_RESEARCHR ||
 		roleTypeCode == utils.ROLE_TYPE_CODE_RESEARCHR ||
 		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_RESEARCHR ||
@@ -1237,7 +1264,7 @@ func (this *CalendarController) CalendarList() {
 		br.ErrMsg = "参数错误,calendarType:" + strconv.Itoa(calendarType)
 		return
 	}
-
+	fmt.Println(condition)
 	resp := new(roadshow.CalendarListResp)
 	total, err := roadshow.GetCalendarListCount(condition, pars, calendarType)
 	if err != nil && err.Error() != utils.ErrNoRow() {
@@ -1282,6 +1309,18 @@ func (this *CalendarController) CalendarList() {
 			englishMap[englishList[i].CompanyId] = englishList[i]
 		}
 	}
+
+	//获取所有自定义的权益研究员
+	sysUserList, err := cygx.GetAskEmailList()
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,GetAskEmailList Err: " + err.Error()
+		return
+	}
+	raiAskadminMap := make(map[string]bool, 0)
+	for _, v := range sysUserList {
+		raiAskadminMap[strconv.Itoa(v.AdminId)] = true
+	}
 	mapRaiSllerId := make(map[int]bool)  // 是否为权益销售
 	mapMeetingCount := make(map[int]int) // 路演参会人员数量
 	if len(adminIds) > 0 {
@@ -1323,6 +1362,15 @@ func (this *CalendarController) CalendarList() {
 				dataList[i].ViewButton = true
 			}
 		}
+		//权益研究员的【路演】和【沙龙】,未结束时,显示修改按钮
+		if raiAskadminMap[dataList[i].ResearcherId] && utils.InArrayByStr([]string{"路演", "沙龙"}, dataList[i].ActivityType) && dataList[i].Status == 2 {
+			//未开始的才展示修改按钮
+			startTimeStr := dataList[i].StartDate + " " + dataList[i].StartTime
+			startTime := utils.StrTimeToTime(startTimeStr)
+			if startTime.After(time.Now()) {
+				dataList[i].EditButton = true
+			}
+		}
 	}
 
 	resp.Paging = page
@@ -2305,11 +2353,16 @@ func (this *CalendarController) ResearcherCalendarDetail() {
 	//go roadshowService.SyncCalendarFromShanghai(researcherInfo.Mobile, startDate, endDate)
 	go roadshowService.InsertSyncCalendarFromShanghaiLPush(researcherInfo.Mobile, startDate, endDate)
 
-	condition += ` AND b.start_date>=?`
-	pars = append(pars, startDate)
-	condition += ` AND b.end_date<=?`
-	pars = append(pars, endDate)
-
+	//condition += ` AND b.start_date>=?`
+	//pars = append(pars, startDate)
+	//condition += ` AND b.end_date<=?`
+	//pars = append(pars, endDate)
+	//解决研究员休假,产生跨周的数据查询不到的bug,
+	condition += ` AND ( b.start_date >= ? AND b.end_date <= ? 
+						OR ( b.start_date >= ?  AND  b.start_date <= ? )
+						OR ( b.start_date <= ?  AND  b.end_date  >=  ? ) 
+						OR ( b.end_date >= ?    AND  b.end_date  <=  ? ) )  `
+	pars = append(pars, startDate, endDate, startDate, endDate, startDate, endDate, startDate, endDate)
 	condition += ` AND b.status IN(2) `
 	//pars = append(pars, 2)
 
@@ -2425,13 +2478,22 @@ func (this *CalendarController) MyCalendarDetail() {
 
 	roleTypeCode := sysUser.RoleTypeCode
 	fmt.Println("roleTypeCode:", roleTypeCode)
-	//销售
-	sales := isSellerRole(sysUser.RoleTypeCode)
-	if sales || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN { // 王芳也作为销售身份处理
-		condition += ` AND a.sys_user_id=?`
-		pars = append(pars, sysUser.AdminId)
 
-		condition += ` AND a.activity_type IN('路演','公开会议','沙龙') `
+	//权益销售
+	if roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
+		roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
+		//if calendarType == 2 {
+		condition += ` AND  ( a.sys_user_id=?  OR a.seller_id=?  OR a.share_seller_id=?  )  `
+		pars = append(pars, sysUser.AdminId, sysUser.AdminId, sysUser.AdminId)
+		//}
+	} else {
+		//销售
+		sales := isSellerRole(sysUser.RoleTypeCode)
+		if sales || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN { // 王芳也作为销售身份处理
+			condition += ` AND a.sys_user_id=?`
+			pars = append(pars, sysUser.AdminId)
+			condition += ` AND a.activity_type IN('路演','公开会议','沙龙') `
+		}
 	}
 
 	//研究员
@@ -2458,10 +2520,16 @@ func (this *CalendarController) MyCalendarDetail() {
 		pars = append(pars, sysUser.AdminId)
 	}
 
-	condition += ` AND b.start_date>=?`
-	pars = append(pars, startDate)
-	condition += ` AND b.end_date<=?`
-	pars = append(pars, endDate)
+	//condition += ` AND b.start_date>=?`
+	//pars = append(pars, startDate)
+	//condition += ` AND b.end_date<=?`
+	//pars = append(pars, endDate)
+	//解决研究员休假,产生跨周的数据查询不到的bug,
+	condition += ` AND ( b.start_date >= ? AND b.end_date <= ? 
+						OR ( b.start_date >= ?  AND  b.start_date <= ? )
+						OR ( b.start_date <= ?  AND  b.end_date  >=  ? ) 
+						OR ( b.end_date >= ?    AND  b.end_date  <=  ? ) )  `
+	pars = append(pars, startDate, endDate, startDate, endDate, startDate, endDate, startDate, endDate)
 
 	condition += ` AND b.status IN(2) `
 	//pars = append(pars, 2)
@@ -2856,3 +2924,50 @@ func isSellerRole(roleType string) (ok bool) {
 	}
 	return
 }
+
+//func init() {
+//	init16_2()
+//}
+//func init16_2() {
+//	listDate, err := roadshow.GetRsCalendarResearcherListInit16_2()
+//	if err != nil {
+//		fmt.Println(err)
+//		return
+//	}
+//
+//	sysUserList, err := system.GetAdminList()
+//	if err != nil {
+//		fmt.Println(err)
+//		return
+//	}
+//	adminMap := make(map[int]*system.Admin, 0)
+//	for _, v := range sysUserList {
+//		adminMap[v.AdminId] = v
+//	}
+//
+//	for k, v := range listDate {
+//		fmt.Println(k, "__", v.CompanyId)
+//		//如果是权益客户,添加销售跟共享销售的信息
+//		var productItemRai *company.CompanyProduct
+//
+//		productItemRai, err = company.GetCompanyProductByCompanyIdAndProductId(v.CompanyId, utils.COMPANY_PRODUCT_RAI_ID)
+//		if err != nil && err.Error() != utils.ErrNoRow() {
+//			fmt.Println(err)
+//			return
+//		}
+//
+//		var RoleTypeCode string
+//		if adminMap[v.SysUserId] != nil {
+//			RoleTypeCode = adminMap[v.SysUserId].RoleTypeCode
+//		}
+//
+//		if productItemRai != nil && (RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER || RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN) {
+//			err = roadshow.UpdateRsCalendarSeller(productItemRai.SellerId, productItemRai.ShareSellerId, v.RsCalendarId)
+//			if err != nil && err.Error() != utils.ErrNoRow() {
+//				fmt.Println(err)
+//				return
+//			}
+//		}
+//	}
+//
+//}

+ 18 - 9
controllers/roadshow/calendar_meeting_user.go

@@ -49,12 +49,18 @@ func (this *CalendarMeetingUserController) Add() {
 	rsCalendarId := req.RsCalendarId
 	userIds := req.UserId
 	tagList := req.TagList
+	roadShowTheme := req.RoadShowTheme
 
 	if rsCalendarId == 0 {
 		br.Msg = "路演信息错误!"
 		return
 	}
 
+	if roadShowTheme == "" {
+		br.Msg = "请输入路演主题名称!"
+		return
+	}
+
 	var itemsGroup []*roadshow.RsCalendarMeetingLabelGroup
 	for _, v := range tagList {
 		itemGroup := new(roadshow.RsCalendarMeetingLabelGroup)
@@ -73,7 +79,7 @@ func (this *CalendarMeetingUserController) Add() {
 		br.ErrMsg = "获取信息失败-AddRsCalendarMeetingLabelGroupMulti!Err:" + err.Error()
 		return
 	}
-
+	var items []*roadshow.RsCalendarMeetingUser
 	if len(userIds) > 0 {
 		var userIdsStr []string
 		for _, v := range userIds {
@@ -85,8 +91,6 @@ func (this *CalendarMeetingUserController) Add() {
 			br.ErrMsg = "获取用户信息失败-GetWxUserListByUserIdsHaveCompany!Err:" + err.Error()
 			return
 		}
-
-		var items []*roadshow.RsCalendarMeetingUser
 		for _, v := range listUser {
 			item := new(roadshow.RsCalendarMeetingUser)
 			item.RsCalendarId = rsCalendarId
@@ -99,16 +103,17 @@ func (this *CalendarMeetingUserController) Add() {
 			item.Position = v.Position
 			item.AdminId = sysUser.AdminId
 			item.AdminName = sysUser.RealName
+			item.RoadShowTheme = req.RoadShowTheme
 			item.CreateTime = time.Now()
 			item.ModifyTime = time.Now()
 			items = append(items, item)
 		}
-		err = roadshow.MultiAddRsCalendarMeetingUser(items)
-		if err != nil {
-			br.Msg = "操作失败!"
-			br.ErrMsg = "操作失败-MultiAddRsCalendarMeetingUserErr:" + err.Error()
-			return
-		}
+	}
+	err = roadshow.MultiAddRsCalendarMeetingUser(items, roadShowTheme, rsCalendarId)
+	if err != nil {
+		br.Msg = "操作失败!"
+		br.ErrMsg = "操作失败-MultiAddRsCalendarMeetingUser!Err:" + err.Error()
+		return
 	}
 	br.Ret = 200
 	br.Success = true
@@ -220,6 +225,10 @@ func (this *CalendarMeetingUserController) List() {
 	}
 	if len(list) == 0 {
 		list = make([]*roadshow.RsCalendarMeetingUserResp, 0)
+	} else {
+		for _, v := range list {
+			resp.RoadShowTheme = v.RoadShowTheme
+		}
 	}
 	if len(lebelDetail) == 0 {
 		lebelDetail = make([]*cygx.RaiServeTagResp, 0)

+ 1 - 1
controllers/roadshow/company.go

@@ -40,7 +40,7 @@ func (this *CalendarController) CompanySearch() {
 		groupId = -1
 	}
 
-	list, err := roadshow.CompanySearchV2(sysUser.AdminId, groupId, KeyWord)
+	list, err := roadshow.CompanySearchV2(sysUser.AdminId, groupId, KeyWord, sysUser.RoleTypeCode)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "搜索客户失败!"
 		br.ErrMsg = "搜索客户失败!Err:" + err.Error()

+ 1 - 0
models/cygx/apply_record.go

@@ -65,6 +65,7 @@ type CygxApplyRecordResp struct {
 	Source                   string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
 	Title                    string `description:"标题"`
 	HttpUrl                  string `description:"跳转地址"`
+	IsGray                   bool   `description:"是否置灰"`
 }
 
 func GetCygxApplyRecord(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxApplyRecordResp, err error) {

+ 1 - 1
models/cygx/cygx_report_mapping.go

@@ -16,7 +16,7 @@ type CygxReportMappingListRep struct {
 // 主题列表
 func CygxReportMappingist(chartPermissionId int) (items []*CygxReportMapping, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")
-	sql := `SELECT sub_category_name FROM cygx_report_mapping WHERE  chart_permission_id = ? GROUP BY sub_category_name`
+	sql := `SELECT sub_category_name FROM cygx_report_mapping WHERE  chart_permission_id = ? GROUP BY sub_category_name   ORDER BY sort DESC , id  ASC  `
 	_, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
 	return
 }

+ 3 - 0
models/cygx/cygx_user.go

@@ -301,6 +301,7 @@ type UserInteractionListResp struct {
 
 type UserInteraction struct {
 	ArticleId             int    `description:"文章id"`
+	ReportId              int    `description:"研报文章id"`
 	ActivityId            int    `description:"活动ID"`
 	ArticleType           int    `description:"文章类型 1:查研观向, 2:策略平台"`
 	ArticleIdMd5          string `description:"文章MD5id"`
@@ -371,6 +372,7 @@ type UserInteraction struct {
 	ArticleNum            int    // 已发布的文章数量
 	FansNum               int    // 粉丝数量
 	ResearcherName        string `description:"研究员姓名"`
+	RoadShowTheme         string `description:"路演主题"`
 }
 
 // 查研观向图表
@@ -737,6 +739,7 @@ func GetCygxArticleCollectByUser(uid, startSize, pageSize int, condition string)
 	sql := ` SELECT
 			art.title,
 			art.article_id,
+			art.report_id,
 			art.article_id_md5,
 			art.publish_date,
 			re.chart_permission_name,

+ 2 - 0
models/cygx/cygx_user_company.go

@@ -284,6 +284,7 @@ func GetCygxArticleCollectByCompanyWeekly(startSize, pageSize int, condition str
 	sql := ` SELECT
 			art.title,
 			art.article_id,
+			art.report_id,
 			art.article_id_md5,
 			art.publish_date,
 			re.chart_permission_name,
@@ -961,6 +962,7 @@ func GetCygxArticleCollectByCompanyList(startSize, pageSize int, condition strin
 	sql := ` SELECT
 			art.title,
 			art.article_id,
+			art.report_id,
 			art.article_id_md5,
 			art.publish_date,
 			re.chart_permission_name,

+ 1 - 1
models/cygx/industrial_management.go

@@ -222,7 +222,7 @@ func DeleteIndustrialManagement(industrialManagementId int) (err error) {
 // 获取产业数量
 func GetIndustrialManagementInfo(industrialManagementId int) (item *CygxIndustrialManagement, err error) {
 	sqlCount := ` SELECT *  FROM cygx_industrial_management WHERE industrial_management_id= ? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, industrialManagementId).QueryRow(&item)
 	return
 }

+ 3 - 3
models/cygx/rai_serve_bill.go

@@ -53,7 +53,7 @@ type RaiServeCoverageRateResp struct {
 }
 
 // 服务类型列表
-func GetRaiServeSearchTagRespList(keywords string) (items []*RaiServeTagResp, err error) {
+func GetRaiServeSearchTagRespList(keywords, chartPermissionId string) (items []*RaiServeTagResp, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			1 AS tag_type,
@@ -64,7 +64,7 @@ func GetRaiServeSearchTagRespList(keywords string) (items []*RaiServeTagResp, er
 			cygx_industrial_management AS i 
 		WHERE
 			1 = 1 
-			AND i.chart_permission_id IN ( 19, 20, 21, 22 ) 
+			AND i.chart_permission_id IN (` + chartPermissionId + ` ) 
 			AND  (i.industry_name LIKE '%` + keywords + `%' ) UNION ALL
 		SELECT
 			2 AS tag_type,
@@ -76,7 +76,7 @@ func GetRaiServeSearchTagRespList(keywords string) (items []*RaiServeTagResp, er
 			INNER JOIN cygx_industrial_management AS i ON i.industrial_management_id = s.industrial_management_id 
 		WHERE
 			1 = 1 
-			AND i.chart_permission_id IN ( 19, 20, 21, 22 ) 
+			AND i.chart_permission_id IN (` + chartPermissionId + ` ) 
 			AND ( s.subject_name LIKE  '%` + keywords + `%') 
 		ORDER BY
 			create_time ASC `

+ 4 - 1
models/cygx/report_article.go

@@ -32,7 +32,7 @@ type CygxReportArticleID struct {
 }
 
 type CygxReportArticle struct {
-	ReportId          int    `orm:"column(id);pk"description:"报告id"`
+	ReportId          int    `description:"报告id"`
 	ArticleId         int    `description:"文章id"`
 	Title             string `description:"标题"`
 	PublishDate       string `description:"发布时间"`
@@ -62,6 +62,7 @@ type CygxReportArticle struct {
 	Stock             string `description:"个股标签(上海策略品台同步)"`
 	FieldName         string `description:"产业标签(上海策略品台同步)"`
 	Label             string `description:"标签"`
+	HttpUrl           string `description:"跳转地址"`
 	ListIndustrial    []*IndustrialActivityGroupManagementRep
 	ListSubject       []*SubjectActivityGroupManagementRep
 }
@@ -87,6 +88,7 @@ func GetReportArticleList(condition string, pars []interface{}, startSize, pageS
 		sql = `SELECT
 				art.title,
 				art.article_id,
+				art.report_id,
 				art.category_id,
 				art.publish_date,
 				art.is_class,
@@ -110,6 +112,7 @@ func GetReportArticleList(condition string, pars []interface{}, startSize, pageS
 		sql = `SELECT
 				art.title,
 				art.article_id,
+				art.report_id,
 				art.category_id,
 				art.publish_date,
 				art.is_class,

+ 20 - 1
models/roadshow/calendar.go

@@ -64,6 +64,8 @@ type RsCalendar struct {
 	IsSynced         int    `description:"是否与上海同步 0:未同步 1:已同步"`
 	UnionCode        string `description:"公开会议联合编码"`
 	EnglishCompany   int    `description:"是否为英文客户: 0-否; 1-是"`
+	SellerId         int    `description:"销售id"`
+	ShareSellerId    int    `description:"共享销售员id"`
 }
 
 type RsCalendarResearcher struct {
@@ -298,6 +300,7 @@ type CalendarListView struct {
 	EnglishViewTotal       int    `description:"英文客户-累计点击量"`
 	SubmitButton           bool   `description:"提交按钮是否展示"`
 	ViewButton             bool   `description:"查看按钮是否展示"`
+	EditButton             bool   `description:"修改按钮是否展示"`
 }
 
 type CalendarListResp struct {
@@ -369,7 +372,8 @@ func GetCalendarList(condition string, pars []interface{}, startSize, pageSize,
 		if calendarType == 1 {
 			sql += ` ORDER BY b.create_time ASC LIMIT ?,? `
 		} else {
-			sql += ` ORDER BY b.create_time DESC LIMIT ?,? `
+			//sql += ` ORDER BY b.create_time DESC LIMIT ?,? `
+			sql += ` ORDER BY b.start_date DESC , b.start_time DESC  LIMIT ?,? ` // 已处理申请,按照活动开始时间倒序(包括ficc的)
 		}
 		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
 	}
@@ -999,3 +1003,18 @@ func GetOverseaCustomCalendarList2(sellerId, researcherId, startDate, endDate, c
 
 	return
 }
+
+func GetRsCalendarResearcherListInit16_2() (item []*RsCalendar, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM  rs_calendar WHERE activity_type = '路演' AND company_id > 0  	AND sys_user_id IN (SELECT  admin_id  FROM admin WHERE role_type_code  IN  ('rai_seller','rai_group','rai_admin') )    AND seller_id = 0 `
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}
+
+// 修改可见范围
+func UpdateRsCalendarSeller(seller_id, share_seller_id, rs_calendar_id int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE rs_calendar SET seller_id=?, share_seller_id= ?   WHERE rs_calendar_id =?  `
+	_, err = o.Raw(sql, seller_id, share_seller_id, rs_calendar_id).Exec()
+	return
+}

+ 33 - 6
models/roadshow/company.go

@@ -2,6 +2,7 @@ package roadshow
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_crm_api/utils"
 )
 
 type CompanySearchView struct {
@@ -25,13 +26,15 @@ func CompanySearch(sellerId int, keyWord string) (list []*CompanySearchView, err
 	return
 }
 
-func CompanySearchV2(sellerId, groupId int, keyWord string) (list []*CompanySearchView, err error) {
+func CompanySearchV2(sellerId, groupId int, keyWord, roleTypeCode string) (list []*CompanySearchView, err error) {
 	list = make([]*CompanySearchView, 0)
 
 	// 中文客户
 	companies := make([]*CompanySearchView, 0)
 	o := orm.NewOrm()
-	sql := `SELECT
+	var sql string
+	if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN { // 权益管理员跟管理员的筛选
+		sql = `SELECT
 				b.company_id,
 				a.company_name,
 				0 AS english_company
@@ -39,13 +42,37 @@ func CompanySearchV2(sellerId, groupId int, keyWord string) (list []*CompanySear
 				company AS a
 			INNER JOIN company_product AS b ON a.company_id = b.company_id 
 			WHERE
-				b.status IN ('正式', '试用', '永续') AND (b.seller_id = ? OR b.share_seller_id = ?  OR b.group_id = ? OR b.share_group_id = ?  ) AND a.company_name LIKE ?
+			     1=1 
+			     AND IF  ( b.product_id = 1 , b.status IN ('正式', '试用', '永续') ,1=1 )  
+			     AND IF  ( b.product_id = 2 , b.status IN ('正式', '试用', '永续', '冻结', '流失') ,1=1 )  
+				 AND a.company_name LIKE ?
 			GROUP BY
 				b.company_id `
-	_, err = o.Raw(sql, sellerId, sellerId, groupId, groupId, keyWord).QueryRows(&companies)
-	if err != nil {
-		return
+		_, err = o.Raw(sql, keyWord).QueryRows(&companies)
+		if err != nil {
+			return
+		}
+	} else {
+		sql = `SELECT
+				b.company_id,
+				a.company_name,
+				0 AS english_company
+			FROM
+				company AS a
+			INNER JOIN company_product AS b ON a.company_id = b.company_id 
+			WHERE
+			     1=1 
+			     AND IF  ( b.product_id = 1 , b.status IN ('正式', '试用', '永续') ,1=1 )  
+			     AND IF  ( b.product_id = 2 , b.status IN ('正式', '试用', '永续', '冻结', '流失') ,1=1 )  
+				 AND (b.seller_id = ? OR b.share_seller_id = ?  OR b.group_id = ? OR b.share_group_id = ?  ) AND a.company_name LIKE ?
+			GROUP BY
+				b.company_id `
+		_, err = o.Raw(sql, sellerId, sellerId, groupId, groupId, keyWord).QueryRows(&companies)
+		if err != nil {
+			return
+		}
 	}
+
 	list = append(list, companies...)
 
 	// 英文客户

+ 7 - 7
models/roadshow/rs_calendar_meeting_label_group.go

@@ -26,9 +26,6 @@ func AddRsCalendarMeetingLabelGroup(item *RsCalendarMeetingLabelGroup) (err erro
 
 // AddRsCalendarMeetingLabelGroupMulti 批量添加
 func AddRsCalendarMeetingLabelGroupMulti(items []*RsCalendarMeetingLabelGroup, rsCalendarId int) (err error) {
-	if len(items) == 0 {
-		return
-	}
 	o, err := orm.NewOrm().Begin()
 	if err != nil {
 		return
@@ -48,11 +45,14 @@ func AddRsCalendarMeetingLabelGroupMulti(items []*RsCalendarMeetingLabelGroup, r
 		return
 	}
 
-	//批量插入
-	_, err = o.InsertMulti(len(items), items)
-	if err != nil {
-		return
+	if len(items) > 0 {
+		_, err = o.InsertMulti(len(items), items)
+		if err != nil {
+			return
+		}
 	}
+	//批量插入
+
 	return
 }
 

+ 44 - 9
models/roadshow/rs_calendar_meeting_user.go

@@ -9,9 +9,10 @@ import (
 )
 
 type AddRsCalendarMeetingUserReq struct {
-	RsCalendarId int   `description:"日程ID"`
-	UserId       []int // 用户ID
-	TagList      []*AddRsCalendarMeetingUserTagReq
+	RsCalendarId  int   `description:"日程ID"`
+	UserId        []int // 用户ID
+	TagList       []*AddRsCalendarMeetingUserTagReq
+	RoadShowTheme string `description:"路演主题"`
 }
 
 type AddRsCalendarMeetingUserTagReq struct {
@@ -31,6 +32,7 @@ type RsCalendarMeetingUser struct {
 	Position                string    `description:"职位"`
 	AdminId                 int       `description:"管理员ID"`
 	AdminName               string    `description:"管理员姓名"`
+	RoadShowTheme           string    `description:"路演主题"`
 	CreateTime              time.Time `description:"创建时间"`
 	ModifyTime              time.Time `description:"修改时间"`
 }
@@ -39,6 +41,7 @@ type RsCalendarMeetingUserResp struct {
 	RsCalendarMeetingUserId int    `description:"参会名单主键ID"`
 	RealName                string `description:"用户实际名称"`
 	Position                string `description:"职位"`
+	RoadShowTheme           string `description:"路演主题"`
 }
 
 type DeleteRsCalendarMeetingUserReq struct {
@@ -46,17 +49,46 @@ type DeleteRsCalendarMeetingUserReq struct {
 }
 
 type RsCalendarMeetingUserListResp struct {
-	List      []*RsCalendarMeetingUserResp
-	ListLebel []*cygx.RaiServeTagResp
+	List          []*RsCalendarMeetingUserResp
+	ListLebel     []*cygx.RaiServeTagResp
+	RoadShowTheme string `description:"路演主题"`
 }
 
 // MultiAddRsCalendarMeetingUser 批量添加RsCalendarMeetingUser
-func MultiAddRsCalendarMeetingUser(items []*RsCalendarMeetingUser) (err error) {
-	if len(items) == 0 {
+func MultiAddRsCalendarMeetingUser(items []*RsCalendarMeetingUser, roadShowTheme string, rsCalendarId int) (err error) {
+	to, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	sql := ` UPDATE rs_calendar_meeting_user SET road_show_theme=? WHERE rs_calendar_id=? `
+	_, err = to.Raw(sql, roadShowTheme, rsCalendarId).Exec()
+	if err != nil {
 		return
 	}
+
+	if len(items) > 0 {
+		_, err = to.InsertMulti(len(items), items)
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}
+
+// 获取第一个提交参会信息内容
+func GetRsCalendarMeetingUserFirst(rsCalendarId int) (item *RsCalendarResearcher, err error) {
 	o := orm.NewOrm()
-	_, err = o.InsertMulti(len(items), items)
+	sql := `SELECT * FROM rs_calendar_meeting_user WHERE rs_calendar_id=? LIMIT 1   `
+	err = o.Raw(sql, rsCalendarId).QueryRow(&item)
 	return
 }
 
@@ -154,6 +186,7 @@ type RsCalendarMeetingUserByRai struct {
 	RoadshowType            string `description:"路演形式"`
 	ResearcherName          string `description:"研究员姓名"`
 	TagType                 int    `description:"标签类型,1产业,2标的,3行业权限"`
+	RoadShowTheme           string `description:"路演主题"`
 }
 
 // 权益联系人列表获取相关信息
@@ -165,6 +198,7 @@ func GetRsCalendarMeetingUserByRai(condition string, startSize, pageSize int) (t
 			r.company_name,
 			r.real_name,
 			r.mobile,
+			r.road_show_theme,
 			b.start_date,
 			b.end_date,
 			b.start_time,
@@ -180,7 +214,7 @@ func GetRsCalendarMeetingUserByRai(condition string, startSize, pageSize int) (t
 			INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id = b.rs_calendar_id 
 			LEFT JOIN rs_calendar_meeting_label_group AS g ON g.rs_calendar_id = b.rs_calendar_id 
 		WHERE
-			1 = 1 ` + condition + ` GROUP  BY a.rs_calendar_id  `
+			1 = 1 ` + condition + ` GROUP  BY 	r.rs_calendar_meeting_user_id   `
 
 	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
 	err = o.Raw(totalSql).QueryRow(&total)
@@ -204,6 +238,7 @@ func GetRsCalendarMeetingUserByRaiWeekly(condition string, startSize, pageSize i
 			r.company_name,
 			r.real_name,
 			r.mobile,
+			r.road_show_theme,
 			b.start_date,
 			b.end_date,
 			b.start_time,

+ 3 - 4
models/system/sys_admin.go

@@ -470,11 +470,10 @@ func GetSysuserRaiList() (items []*AdminItem, err error) {
 		FROM
 			admin 
 		WHERE
-			role_type_code LIKE '%rai%' 
-			AND group_id NOT IN ( 19, 10, 17 ) 
+			role_type_code IN ('rai_group','rai_seller')
+			AND group_id NOT IN ( 19, 10, 17 )
 			AND enabled = 1 
-			OR real_name IN ( '沈涛', '张传星' )  
-			OR mobile IN ( '15011263967', '18935318900' , '15600639653', '18010097689', '13520990566') ` // 先写死,看情况要不要改
+			OR real_name IN ( '沈涛', '张传星' ) ` // 先写死,看情况要不要改
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }

+ 19 - 0
services/cygx/article.go

@@ -4,6 +4,7 @@ import (
 	"errors"
 	"fmt"
 	"github.com/PuerkitoBio/goquery"
+	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/services"
@@ -221,6 +222,7 @@ func HandleArticleAndYanxuanRecordList(items []*cygx.CygxArticleAndYanxuanRecord
 		var articleIds []int        // 文章ID
 		var yanxuanSpecialIds []int // 研选专栏ID
 		var sellerCompanyIds []int  // 公司ID
+		var mobiles []string        // 手机号
 		for _, v := range items {
 			if v.Source == utils.CYGX_OBJ_ARTICLE {
 				articleIds = append(articleIds, v.SourceId)
@@ -229,12 +231,25 @@ func HandleArticleAndYanxuanRecordList(items []*cygx.CygxArticleAndYanxuanRecord
 				yanxuanSpecialIds = append(yanxuanSpecialIds, v.SourceId)
 			}
 			sellerCompanyIds = append(sellerCompanyIds, v.CompanyId)
+			mobiles = append(mobiles, v.Mobile)
 		}
 
 		sellNameMap := services.GetSellNameMapByCompanyIds(sellerCompanyIds)
 
 		mapIndustrialLabel := GetArticleIndustrialLabelByArticleId(articleIds) // 关联产业
 		mapSubjectLabel := GetArticleSubjectLabelByArticleId(articleIds)       // 关联标的
+
+		//根据手机号获取这些用户的信息
+		listUser, e := models.GetWxUserByOutboundMobiles(mobiles)
+		if e != nil {
+			err = errors.New("GetWxUserOutboundMobiles, Err: " + e.Error())
+			return
+		}
+		mapUserRealname := make(map[string]string)
+		for _, v := range listUser {
+			mapUserRealname[v.Mobile] = v.RealName
+		}
+
 		var condition string
 		var pars []interface{}
 
@@ -292,6 +307,7 @@ func HandleArticleAndYanxuanRecordList(items []*cygx.CygxArticleAndYanxuanRecord
 					item.PublishDate = mapArticle[v.SourceId].PublishDate
 					item.PermissionName = mapArticle[v.SourceId].PermissionName
 					item.ArticleIdMd5 = mapArticle[v.SourceId].ArticleIdMd5
+					item.ReportId = mapArticle[v.SourceId].ReportId
 				}
 			}
 			if v.Source == utils.CYGX_OBJ_YANXUANSPECIAL {
@@ -307,6 +323,9 @@ func HandleArticleAndYanxuanRecordList(items []*cygx.CygxArticleAndYanxuanRecord
 			item.CreateTime = v.CreateTime
 			item.UserId = v.UserId
 			item.RealName = v.RealName
+			if item.RealName == "" {
+				item.RealName = mapUserRealname[v.Mobile]
+			}
 			item.Mobile = v.Mobile
 			item.CompanyId = v.CompanyId
 			item.CompanyName = v.CompanyName

+ 4 - 4
services/cygx/mail.go

@@ -16,7 +16,7 @@ func SendResearchSummaryEmail(detail *cygx.DetailCygxResearchSummaryRep, touser
 	//	return false
 	//}
 	m := gomail.NewMessage()
-	m.SetHeader("From", "cygx@hzinsights.com ")
+	m.SetHeader("From", "hzcygx@hzinsights.com ")
 	//m.SetHeader("To", touser...)
 	var user []string
 	user = append(user, "zwxi@hzinsights.com ")
@@ -271,7 +271,7 @@ func SendResearchSummaryEmail(detail *cygx.DetailCygxResearchSummaryRep, touser
 	}
 	bodyEnd := " </body>\n</html>"
 	m.SetBody("text/html", head+div+allBody+bodyEnd)
-	d := gomail.NewDialer("smtp.mxhichina.com", 465, "cygx@hzinsights.com", "Hzinsights2022")
+	d := gomail.NewDialer("smtp.mxhichina.com", 465, "hzcygx@hzinsights.com", "Hzinsights2024")
 	if err := d.DialAndSend(m); err != nil {
 		return false
 	}
@@ -285,7 +285,7 @@ func SendMinutesSummaryEmail(detail *cygx.DetailCygxMinutesSummaryRep, touser []
 	//	return false
 	//}
 	m := gomail.NewMessage()
-	m.SetHeader("From", "cygx@hzinsights.com ")
+	m.SetHeader("From", "hzcygx@hzinsights.com ")
 	//m.SetHeader("To", touser...)
 	var user []string
 	user = append(user, "zwxi@hzinsights.com ")
@@ -429,7 +429,7 @@ func SendMinutesSummaryEmail(detail *cygx.DetailCygxMinutesSummaryRep, touser []
 	}
 	bodyEnd := " </body>\n</html>"
 	m.SetBody("text/html", head+div+allBody+bodyEnd)
-	d := gomail.NewDialer("smtp.mxhichina.com", 465, "cygx@hzinsights.com", "Hzinsights2022")
+	d := gomail.NewDialer("smtp.mxhichina.com", 465, "hzcygx@hzinsights.com", "Hzinsights2024")
 	if err := d.DialAndSend(m); err != nil {
 		return false
 	}

+ 1 - 1
services/cygx/resource_data.go

@@ -674,7 +674,7 @@ func UpdateMeetingreviewchaptResourceData(sourceId int) {
 		item.PublishDate = publishDate
 		item.ChartPermissionId = detail.ChartPermissionId
 		item.CreateTime = time.Now()
-		item.SearchTitle = industrialName + subjectName
+		item.SearchTitle = industrialName + subjectName + "晨会精华"
 		content, e := utils.GetHtmlContentText(detail.Content)
 		if e != nil && e.Error() != utils.ErrNoRow() {
 			err = errors.New("GetHtmlContentText, Err: " + e.Error() + "sourceId:" + strconv.Itoa(sourceId))

+ 1 - 0
services/cygx/user_label.go

@@ -359,6 +359,7 @@ func HandleListRsCalendar(list []*roadshow.RsCalendarMeetingUserByRai) (items []
 		item.Mobile = v.Mobile
 		item.CompanyId = v.CompanyId
 		item.CompanyName = v.CompanyName
+		item.RoadShowTheme = v.RoadShowTheme
 		//switch v.TagType {
 		//case 1:
 		//	item.LabelKeyWord = strings.Join(mapGroupindustrialManagementName[v.RsCalendarId], ",")

+ 2 - 0
utils/constants.go

@@ -455,6 +455,8 @@ const (
 	CYGX_OBJ_YANXUANSPECIAL     string = "yanxuanspecial"     // 对象类型:研选专栏
 	CYGX_OBJ_ASKSERIEVIDEO      string = "askserievideo"      // 对象类型:问答系列视频
 	CYGX_OBJ_RS_CALENDAR        string = "rscalendar"         // 对象类型:研究员日历安排
+	CYGX_OBJ_FICC_REPORT        string = "ficcreport"         // 对象类型:FICC研报
+	CYGX_OBJ_FICC_REPORT_XCX    string = "ficcreportxcx"      // 对象类型:FICC研报小程序
 )
 
 const (