瀏覽代碼

新增线上路演

xiexiaoyuan 2 年之前
父節點
當前提交
fa47a3416a

+ 3 - 1
controller/community/video.go

@@ -63,10 +63,12 @@ func VideoPlayLog(c *gin.Context) {
 		return
 	}
 	userinfo := user.GetInfoByClaims(c)
-	errMsg, err := community.SaveVideoPlayLog(userinfo, req.VideoId, req.SourceAgent)
+	errMsg, err := community.SaveVideoPlayLog(userinfo, req.VideoId, req.SourceAgent, 1)
 	if err != nil {
 		response.FailMsg(errMsg, "VideoPlayLog ErrMsg:"+err.Error(), c)
 		return
 	}
 	response.Ok("操作成功", c)
 }
+
+

+ 13 - 0
controller/company/company_permission.go

@@ -37,5 +37,18 @@ func GetPermissionTree(c *gin.Context)  {
 		response.FailMsg("获取失败", "GetPermissionList ErrMsg:" + err.Error(), c)
 		return
 	}
+	response.OkData("获取成功", list, c)
+}
+
+// GetBindFiccPermissions 展示有权限的品种列表,无权限的隐藏
+func GetBindFiccPermissions(c *gin.Context) {
+	userinfo := userService.GetInfoByClaims(c)
+
+	list, err := company.GetBindFiccPermissions(userinfo)
+	if err !=nil {
+		response.Fail(err.Error(), c)
+		return
+	}
+
 	response.OkData("获取成功", list, c)
 }

+ 74 - 0
controller/road/video.go

@@ -0,0 +1,74 @@
+package road
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/response"
+	"hongze/hongze_yb/models/request"
+	"hongze/hongze_yb/services/community"
+	"hongze/hongze_yb/services/user"
+	"hongze/hongze_yb/utils"
+)
+
+// VideoList 路演视频列表
+// @Tags 路演视频列表
+// @Description 路演视频列表
+// @Param page_index			query int false "页码"
+// @Param page_size				query int false "每页数量"
+// @Param keywords				query string false "查询关键词"
+// @Param video_id				query int false "视频ID"
+// @Param chart_permission_id		query int false "品种ID"
+// @Success 200 {object}
+// @failure 400 {string} string "获取失败"
+// @Router /road/videos [get]
+func VideoList(c *gin.Context) {
+	var req request.RoadVideoListReq
+	if err := c.Bind(&req); err != nil {
+		response.Fail("参数有误", c)
+		return
+	}
+	if req.PageIndex == 0 {
+		req.PageIndex = 1
+	}
+	if req.PageSize == 0 {
+		req.PageSize = utils.PageSize20
+	}
+	userinfo := user.GetInfoByClaims(c)
+	list, err := community.GetRoadVideoList(userinfo, req.PageIndex, req.PageSize, req.VideoId, req.ChartPermissionId, req.Keywords)
+	if err != nil {
+		response.FailMsg("获取失败", "VideoList ErrMsg:"+err.Error(), c)
+		return
+	}
+	response.OkData("获取成功", list, c)
+}
+
+
+// VideoPlayLog 记录视频播放日志
+// @Tags 视频社区模块
+// @Description 记录视频播放日志
+// @Param video_id		query  int  true  "音频ID"
+// @Param source_agent	query  int  true  "操作来源,1:小程序,2:小程序 pc 3:弘则研究公众号,4:web pc"
+// @Success 200 {string} string "操作成功"
+// @failure 400 {string} string "操作失败"
+// @Router /video/play_log [post]
+func VideoPlayLog(c *gin.Context) {
+	var req request.RoadVideoPlayLogReq
+	if err := c.ShouldBind(&req); err != nil {
+		response.Fail("参数有误", c)
+		return
+	}
+	if req.VideoId == 0 {
+		response.Fail("参数有误", c)
+		return
+	}
+	if req.SourceAgent == 0 {
+		response.Fail("参数有误", c)
+		return
+	}
+	userinfo := user.GetInfoByClaims(c)
+	errMsg, err := community.SaveVideoPlayLog(userinfo, req.VideoId, req.SourceAgent, 2)
+	if err != nil {
+		response.FailMsg(errMsg, "VideoPlayLog ErrMsg:"+err.Error(), c)
+		return
+	}
+	response.Ok("操作成功", c)
+}

+ 2 - 0
init_serve/router.go

@@ -71,5 +71,7 @@ func InitRouter() (r *gin.Engine) {
 	routers.InitSandbox(r)
 	//语音播报
 	routers.InitVoiceBroadcast(r)
+	//线上路演
+	routers.InitRoad(r)
 	return
 }

+ 13 - 0
models/request/community.go

@@ -55,6 +55,19 @@ type VideoPlayLogReq struct {
 	SourceAgent int `json:"source_agent" description:"来源:1-小程序 2-小程序PC 3-公众号 4-Web官网"`
 }
 
+type RoadVideoPlayLogReq struct {
+	VideoId     int `json:"video_id" description:"视频ID"`
+	SourceAgent int `json:"source_agent" description:"来源:1-小程序 2-小程序PC 3-公众号 4-Web官网"`
+}
+
+type RoadVideoListReq struct {
+	PageIndex         int    `json:"page_index" form:"page_index"`
+	PageSize          int    `json:"page_size" form:"page_size"`
+	Keywords          string `json:"keywords" form:"keywords"`
+	VideoId           int    `json:"video_id" form:"video_id"`
+	ChartPermissionId int    `json:"chart_permission_id" form:"chart_permission_id"`
+}
+
 // ReqCommunityQuestionLikeTease 问答点赞/吐槽请求
 type ReqCommunityQuestionLikeTease struct {
 	CommunityQuestionId uint32 `description:"问答id" json:"community_question_id" `

+ 21 - 0
models/response/community.go

@@ -88,6 +88,27 @@ type CommunityVideoItem struct {
 	ChartPermissionName string `json:"chart_permission_name"`
 }
 
+// RoadVideoItem 线上路演
+type RoadVideoItem struct {
+	RoadVideoID         int    `json:"road_video_id"`
+	Title               string `json:"title"`
+	ChartPermissionIds  string `json:"chart_permission_ids"`
+	ChartPermissionName string `json:"chart_permission_name"`
+	CoverImgUrl         string `json:"cover_img_url"`
+	VideoUrl            string `json:"video_url"`
+	VideoSeconds        string `json:"video_seconds"`
+	PublishState        int    `json:"publish_state"`
+	AdminId             int    `json:"admin_id"`
+	AdminRealName       string `json:"admin_real_name"`
+	PublishTime         string `json:"publish_time"`
+	CreateTime          string `json:"create_time"`
+	ModifyTime          string `json:"modify_time"`
+}
+
+type RoadVideoItemResp struct {
+	List []*RoadVideoItem `json:"list"`
+	Paging *PagingItem  	`json:"paging"`
+}
 // RespCommunityQuestionLikeTease
 type RespCommunityQuestionLikeTease struct {
 	LikeTotal  int64 `description:"点赞总数" json:"like_total"`

+ 21 - 0
models/response/permission.go

@@ -32,6 +32,9 @@ type PermissionFiccResp struct {
 	ContactInfo    PermissionCheckContactInfo `json:"contact_info"`
 	CheckFlag      bool                       `json:"check_flag"`
 }
+
+
+
 type PermissionFiccList []*PermissionFiccItem
 
 func (p PermissionFiccList) Len() int {
@@ -60,6 +63,7 @@ func (ps PermissionFiccSecondList) Swap(i, j int) {
 	ps[i], ps[j] = ps[j], ps[i]
 }
 
+
 // PermissionCheckInfo 权限校验完成后的结果
 type PermissionCheckInfo struct {
 	Name         string       `json:"name" description:"销售名称"`
@@ -84,3 +88,20 @@ type CustomerInfo struct {
 	IsSuspend   int8   `json:"is_suspend" description:"启用与否字段:1:暂停,0:启用"`
 	HasApply    bool   `json:"has_apply" description:"是否有申请过"`
 }
+
+
+type BindPermissionFiccResp struct {
+	PermissionList []*BindPermissionFiccItem `json:"permission_list"`
+}
+
+type BindPermissionFiccItem struct {
+	Id           int                             `json:"id"`
+	ClassifyName string                          `json:"classify_name"`
+	List         []*BindPermissionFiccSecondItem `json:"list"`
+}
+
+
+type BindPermissionFiccSecondItem struct {
+	ChartPermissionName string `json:"chart_permission_name"`
+	ChartPermissionID   int    `json:"chart_permission_id"`
+}

+ 7 - 0
models/tables/chart_permission/query.go

@@ -17,6 +17,13 @@ func GetFiccListExceptTacticByProductId() (list []*ChartPermission, err error)
 	err = global.DEFAULT_MYSQL.Where(" enabled = 1 AND permission_type = 0 AND product_id = 1 and classify_name != '市场策略'").Find(&list).Error
 	return
 }
+
+// GetFiccListExceptTacticByProductIdOrderSort 获取ficc 除了市场策略的所有权限
+func GetFiccListExceptTacticByProductIdOrderSort() (list []*ChartPermission, err error)  {
+	err = global.DEFAULT_MYSQL.Where(" enabled = 1 AND permission_type = 0 AND product_id = 1 and classify_name != '市场策略'").
+	Order("sort asc").Find(&list).Error
+	return
+}
 // GetClassNameListByProductId 根据权限id获取权限分类
 func GetClassNameListByProductId(productId int64) (list []*ChartPermission, err error) {
 	err = global.DEFAULT_MYSQL.Where(" product_id = ?", productId).Group("classify_name").Find(&list).Error

+ 5 - 0
models/tables/chart_permission_first/query.go

@@ -10,3 +10,8 @@ func GetIndexShowList() (list []*ChartPermissionFirst, err error) {
 	return
 }
 
+// GetIndexShowListOrderSort 查询首页展示的权限一级分类
+func GetIndexShowListOrderSort() (list []*ChartPermissionFirst, err error) {
+	err = global.DEFAULT_MYSQL.Model(ChartPermissionFirst{}).Where("yb_index_show = 1").Order("yb_index_sort asc").Scan(&list).Error
+	return
+}

+ 1 - 0
models/tables/yb_community_video_play_log/entity.go

@@ -15,6 +15,7 @@ type YbCommunityVideoPlayLog struct {
 	CompanyStatus    string    `gorm:"column:company_status;type:varchar(30);not null;default:''" json:"companyStatus"`                               // 客户状态
 	SourceAgent      int       `gorm:"column:source_agent;type:tinyint(4) unsigned;not null;default:1" json:"sourceAgent"`                            // 操作来源,1:小程序,2:小程序 pc 3:弘则研究公众号,4:web pc
 	SellerID         int       `gorm:"column:seller_id;type:int(11)" json:"sellerId"`
+	Type             int8      `gorm:"column:type;type:tinyint(4); unsigned;not null;default:1" json:"type"`         //统计类型(1 视频社区,2 路演视频)
 	CreateTime       time.Time `gorm:"column:create_time;type:datetime;default:CURRENT_TIMESTAMP" json:"createTime"` // 创建时间
 }
 

+ 61 - 0
models/tables/yb_road_video/entity.go

@@ -0,0 +1,61 @@
+package yb_road_video
+
+import "time"
+
+// YbRoadVideo 研报-路演视频(线上路演)表
+type YbRoadVideo struct {
+	RoadVideoID        int       `gorm:"primaryKey;column:road_video_id;type:int(10) unsigned;not null" json:"-"`
+	Title              string    `gorm:"column:title;type:varchar(255);not null;default:''" json:"title"`                             // 视频标题
+	ChartPermissionIds string    `gorm:"column:chart_permission_ids;type:varchar(255);not null;default:''" json:"chartPermissionIds"` // 品种权限ID, 用英文逗号拼接
+	CoverImgURL        string    `gorm:"column:cover_img_url;type:varchar(255);not null;default:''" json:"coverImgUrl"`               // 封面图地址
+	VideoURL           string    `gorm:"column:video_url;type:varchar(255);not null;default:''" json:"videoUrl"`                      // 视频地址
+	VideoSeconds       string    `gorm:"column:video_seconds;type:varchar(30);not null;default:''" json:"videoSeconds"`               // 视频时长
+	PublishState       int       `gorm:"column:publish_state;type:tinyint(4) unsigned;not null;default:0" json:"publishState"`        // 发布状态:0-未发布 1-已发布
+	SendThsState       int       `gorm:"column:send_ths_state;type:tinyint(4) unsigned;not null;default:0" json:"sendThsState"`       // 推送客群状态:0-未推送 1-已推送
+	IsDeleted          int       `gorm:"column:is_deleted;type:tinyint(4) unsigned;not null;default:0" json:"isDeleted"`              // 是否已删除:0-未删除 1-已删除
+	AdminId            int       `gorm:"column:admin_id;type:int(11) unsigned;not null;default:0" json:"adminId"`                     // 创建人账号
+	AdminRealName      string    `gorm:"column:admin_real_name;type:varchar(50)" json:"adminRealName"`                                // 创建人姓名
+	PublishTime        time.Time `gorm:"column:publish_time;type:datetime" json:"publishTime"`                                        // 发布时间
+	SendThsTime        time.Time `gorm:"column:send_ths_time;type:datetime" json:"sendThsTime"`                                       // 推送客群时间
+	CreateTime         time.Time `gorm:"column:create_time;type:datetime;default:CURRENT_TIMESTAMP" json:"createTime"`                // 创建时间
+	ModifyTime         time.Time `gorm:"column:modify_time;type:datetime;default:CURRENT_TIMESTAMP" json:"modifyTime"`                // 更新时间
+	DeleteTime         time.Time `gorm:"column:delete_time;type:datetime" json:"deleteTime"`
+}
+
+// TableName get sql table name.获取数据库表名
+func (r *YbRoadVideo) TableName() string {
+	return "yb_road_video"
+}
+
+// YbCommunityVideoColumns get sql column name.获取数据库列名
+var YbRoadVideoColumns = struct {
+	RoadVideoID string
+	Title            string
+	ChartPermissionIds     string
+	CoverImgURL      string
+	VideoURL         string
+	VideoSeconds     string
+	PublishState     string
+	SendThsState     string
+	IsDeleted        string
+	PublishTime      string
+	SendThsTime      string
+	CreateTime       string
+	ModifyTime       string
+	DeleteTime       string
+}{
+	RoadVideoID:        "road_video_id",
+	Title:              "title",
+	ChartPermissionIds: "chart_permission_ids",
+	CoverImgURL:        "cover_img_url",
+	VideoURL:           "video_url",
+	VideoSeconds:       "video_seconds",
+	PublishState:       "publish_state",
+	SendThsState:       "send_ths_state",
+	IsDeleted:          "is_deleted",
+	PublishTime:        "publish_time",
+	SendThsTime:        "send_ths_time",
+	CreateTime:         "create_time",
+	ModifyTime:         "modify_time",
+	DeleteTime:         "delete_time",
+}

+ 39 - 0
models/tables/yb_road_video/model.go

@@ -0,0 +1,39 @@
+package yb_road_video
+
+import (
+	"hongze/hongze_yb/global"
+)
+
+func (r *YbRoadVideo) Create() (err error) {
+	err = global.DEFAULT_MYSQL.Create(r).Error
+	return
+}
+
+func (r *YbRoadVideo) Update(updateCols []string) (err error) {
+	err = global.DEFAULT_MYSQL.Model(r).Select(updateCols).Updates(*r).Error
+	return
+}
+
+// GetPageListByCondition 分页获取视频列表
+func GetPageListByCondition(where string, par []interface{}, pageIndex, pageSize int) (list []*YbRoadVideo, total int64, err error) {
+	offset := (pageIndex - 1) * pageSize
+	err = global.DEFAULT_MYSQL.Model(YbRoadVideo{}).
+		Where(where, par...).Count(&total).Error
+	if err != nil {
+		return
+	}
+	err = global.DEFAULT_MYSQL.Model(YbRoadVideo{}).
+		Where(where, par...).
+		Offset(offset).Limit(pageSize).
+		Order("publish_time DESC").Scan(&list).Error
+
+	return
+}
+
+// GetItemById 主键获取已发布的视频
+func GetItemById(videoId int) (item *YbRoadVideo, err error) {
+	err = global.DEFAULT_MYSQL.Model(YbRoadVideo{}).
+		Where("road_video_id = ? AND is_deleted = 0 AND publish_state = 1", videoId).
+		First(&item).Error
+	return
+}

+ 1 - 0
routers/company.go

@@ -11,5 +11,6 @@ func InitCompany(r *gin.Engine) {
 	{
 		rGroup.GET("/getPermissionList", company.GetHomeFiccPermissions)
 		rGroup.GET("/permission/tree", company.GetPermissionTree)
+		rGroup.GET("/permission/bind", company.GetBindFiccPermissions)
 	}
 }

+ 13 - 0
routers/road.go

@@ -0,0 +1,13 @@
+package routers
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/road"
+	"hongze/hongze_yb/middleware"
+)
+
+func InitRoad(r *gin.Engine) {
+	rGroup := r.Group("api/road").Use(middleware.Token(), middleware.CheckBaseAuth())
+	rGroup.GET("/video/list", road.VideoList)
+	rGroup.POST("/video/play_log", road.VideoPlayLog)
+}

+ 126 - 8
services/community/video.go

@@ -3,11 +3,16 @@ package community
 import (
 	"errors"
 	"hongze/hongze_yb/models/response"
+	"hongze/hongze_yb/models/tables/chart_permission"
 	"hongze/hongze_yb/models/tables/company_product"
 	"hongze/hongze_yb/models/tables/yb_community_video"
 	"hongze/hongze_yb/models/tables/yb_community_video_play_log"
+	"hongze/hongze_yb/models/tables/yb_road_video"
+	"hongze/hongze_yb/services/company"
 	"hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/utils"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -55,13 +60,23 @@ func GetVideoList(pageIndex, pageSize, videoId, varietyTagId int, keywords strin
 }
 
 // SaveVideoPlayLog 记录用户播放视频日志
-func SaveVideoPlayLog(userInfo user.UserInfo, videoId, sourceAgent int) (errMsg string, err error) {
-	video, e := yb_community_video.GetItemById(videoId)
-	if e != nil {
-		errMsg = "视频不存在或未发布"
-		err = errors.New("获取视频信息失败, Err: " + e.Error())
-		return
+func SaveVideoPlayLog(userInfo user.UserInfo, videoId, sourceAgent int, videoType int8) (errMsg string, err error) {
+	if videoType == 1 {
+		_, e := yb_community_video.GetItemById(videoId)
+		if e != nil {
+			errMsg = "视频不存在或未发布"
+			err = errors.New("获取视频信息失败, Err: " + e.Error())
+			return
+		}
+	}else{
+		_, e := yb_road_video.GetItemById(videoId)
+		if e != nil {
+			errMsg = "视频不存在或未发布"
+			err = errors.New("获取视频信息失败, Err: " + e.Error())
+			return
+		}
 	}
+
 	companyInfo, e := company_product.GetByCompany2ProductId(userInfo.CompanyID, 1)
 	if e != nil && e != utils.ErrNoRow {
 		errMsg = "保存失败"
@@ -70,12 +85,14 @@ func SaveVideoPlayLog(userInfo user.UserInfo, videoId, sourceAgent int) (errMsg
 	}
 	companyName := "潜在客户"
 	companyStatus := "潜在"
+	sellerId := 0
 	if companyInfo != nil && companyInfo.CompanyID > 0 {
 		companyName = companyInfo.CompanyName
 		companyStatus = companyInfo.Status
+		sellerId = companyInfo.SellerID
 	}
 	item := &yb_community_video_play_log.YbCommunityVideoPlayLog{
-		CommunityVideoID: video.CommunityVideoID,
+		CommunityVideoID: videoId,
 		UserID:           int(userInfo.UserID),
 		Mobile:           userInfo.Mobile,
 		RealName:         userInfo.RealName,
@@ -84,7 +101,8 @@ func SaveVideoPlayLog(userInfo user.UserInfo, videoId, sourceAgent int) (errMsg
 		CompanyName:      companyName,
 		CompanyStatus:    companyStatus,
 		SourceAgent:      sourceAgent,
-		SellerID:         companyInfo.SellerID,
+		SellerID:         sellerId,
+		Type:             videoType,
 		CreateTime:       time.Now().Local(),
 	}
 	if e = item.Create(); e != nil {
@@ -94,3 +112,103 @@ func SaveVideoPlayLog(userInfo user.UserInfo, videoId, sourceAgent int) (errMsg
 	}
 	return
 }
+
+// GetRoadVideoList 获取线上路演视频列表
+func GetRoadVideoList(userInfo user.UserInfo, pageIndex, pageSize, videoId, chartPermissionId int, keywords string) (resp response.RoadVideoItemResp, err error) {
+	list := make([]*response.RoadVideoItem, 0)
+	//获取有权限的permissionID
+	validPermissionList, err := company.GetValidPermissionByCompany2ProductId(userInfo.CompanyID, 1)
+	if err != nil {
+		return
+	}
+	permissionIds := ""
+	for _, v := range validPermissionList {
+		permissionIds += "'"+strconv.Itoa(v.ChartPermissionID) + "'|"
+	}
+	if permissionIds == "" {
+		resp.List = list
+		resp.Paging = response.GetPaging(pageIndex, pageSize, 0)
+		return
+	}
+	permissionIds = strings.Trim(permissionIds,"|")
+	condition := `is_deleted = 0 AND publish_state = 1 and chart_permission_ids REGEXP "(`+permissionIds+`)"`
+	var par []interface{}
+	// 分享点进来的直接定位到具体视频
+	if videoId > 0 {
+		condition += " and road_video_id = ?"
+		par = append(par, videoId)
+	} else {
+		if chartPermissionId > 0 {
+			condition += ` and FIND_IN_SET("'`+strconv.Itoa(chartPermissionId)+`'", chart_permission_ids)`
+		}
+		if keywords != "" {
+			condition += " and title like ? "
+			par = append(par,"%" + keywords + "%")
+		}
+	}
+
+	videoList, total, e := yb_road_video.GetPageListByCondition(condition, par, pageIndex, pageSize)
+	if e != nil {
+		err = errors.New("获取视频列表失败, Err:" + e.Error())
+		return
+	}
+	if len(videoList) <= 0 {
+		resp.List = list
+		resp.Paging = response.GetPaging(pageIndex, pageSize, 0)
+		return
+	}
+
+	chartPermissionIdSlice := make([]int, 0)
+	chartNameMap := make(map[string]string)
+	for _, v := range videoList {
+		tmp := strings.Split(v.ChartPermissionIds, ",")
+		for _, t1 := range tmp {
+			i, _ := strconv.Atoi(strings.Trim(t1, "'"))
+			chartPermissionIdSlice = append(chartPermissionIdSlice, i)
+		}
+	}
+	if len(chartPermissionIdSlice) > 0 {
+		chartList, e := chart_permission.GetListByIds(chartPermissionIdSlice)
+		if e != nil {
+			err = errors.New("获取品种信息失败, Err:" + e.Error())
+			return
+		}
+		for _, v := range chartList {
+			chartNameMap["'"+strconv.Itoa(int(v.ChartPermissionID))+"'"] = v.ChartPermissionName
+		}
+	}
+	var chartPermissionNames string
+	for _, v := range videoList {
+		chartPermissionNames = ""
+		tmpSlice := strings.Split(v.ChartPermissionIds, ",")
+		if len(tmpSlice) > 0 {
+			for _, cid := range tmpSlice {
+				if name, ok := chartNameMap[cid]; ok {
+					chartPermissionNames += name + ","
+				}
+			}
+		}
+		if chartPermissionNames != "" {
+			chartPermissionNames = strings.Trim(chartPermissionNames, ",")
+		}
+		item := &response.RoadVideoItem{
+			RoadVideoID:         v.RoadVideoID,
+			Title:               v.Title,
+			ChartPermissionIds:  v.ChartPermissionIds,
+			ChartPermissionName: chartPermissionNames,
+			CoverImgUrl:         v.CoverImgURL,
+			VideoUrl:            v.VideoURL,
+			VideoSeconds:        v.VideoSeconds,
+			PublishState:        v.PublishState,
+			AdminId:             v.AdminId,
+			AdminRealName:       v.AdminRealName,
+			PublishTime:         v.PublishTime.Format(utils.FormatDateTime),
+			CreateTime:          v.CreateTime.Format(utils.FormatDateTime),
+			ModifyTime:          v.ModifyTime.Format(utils.FormatDateTime),
+		}
+		list = append(list, item)
+	}
+	resp.List = list
+	resp.Paging = response.GetPaging(pageIndex, pageSize, int(total))
+	return
+}

+ 94 - 0
services/company/permission.go

@@ -907,3 +907,97 @@ func CheckUserSandboxPermission(companyId int64, userId, permissionId int) (ok b
 
 	return
 }
+
+func GetBindFiccPermissions(user user.UserInfo) (ret response.BindPermissionFiccResp, err error) {
+	var errMsg string
+	defer func() {
+		if err != nil {
+			global.LOG.Critical(fmt.Sprintf("GetHomeFiccPermissions: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
+		}
+	}()
+	ret.PermissionList = make([]*response.BindPermissionFiccItem, 0)
+	// 判断用户状态是否是正常和永续
+	var productAuthOk bool
+	companyProduct, err := company_product.GetByCompany2ProductId(user.CompanyID, 1)
+	if err == utils.ErrNoRow {
+		err = nil
+		return
+	}
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("查询用户购买产品出错")
+		return
+	}
+	if companyProduct != nil {
+		// 无FICC权限的客户不可见
+		if companyProduct.CompanyProductID > 0 {
+			// 已购或者试用用户可见
+			if strings.Contains("永续,正式", companyProduct.Status) || (companyProduct.Status == "试用" && companyProduct.IsSuspend != 1) {
+				productAuthOk = true
+			}
+		}
+	}
+	if !productAuthOk {
+		return
+	}
+	validPermissionList, err := GetValidPermissionByCompany2ProductId(user.CompanyID, 1)
+	if err != nil {
+		return
+	}
+	var validPermissionIds []int
+	for _, item := range validPermissionList {
+		validPermissionIds = append(validPermissionIds, item.ChartPermissionID)
+	}
+	permissionList, err := chart_permission.GetFiccListExceptTacticByProductIdOrderSort()
+	if err != nil {
+		return
+	}
+	permissionMap := make(map[uint64]bool)
+	permissionFirstMap := make(map[string]*response.BindPermissionFiccItem)
+
+	//查询首页展示的图标
+	permissionFirstList, err := chart_permission_first.GetIndexShowListOrderSort()
+	if err != nil {
+		return
+	}
+	for _, v := range permissionFirstList {
+		permissionFirstMap[v.ClassifyName] = &response.BindPermissionFiccItem{
+			Id:          int(v.Id),
+			ClassifyName: v.YbIndexName,
+		}
+	}
+
+	for _, v := range permissionList {
+		permissionMap[v.ChartPermissionID] = false
+		for _, myPerId := range validPermissionIds {
+			if int(v.ChartPermissionID) == myPerId {
+				permissionMap[v.ChartPermissionID] = true
+				break
+			}
+		}
+	}
+
+	for _, v := range permissionList {
+		temp := new(response.BindPermissionFiccSecondItem)
+		temp.ChartPermissionID = int(v.ChartPermissionID)
+		temp.ChartPermissionName = v.PermissionName
+		if _, ok := permissionFirstMap[v.ClassifyName]; ok && permissionMap[v.ChartPermissionID] {
+			permissionFirstMap[v.ClassifyName].List = append(permissionFirstMap[v.ClassifyName].List, temp)
+		}
+	}
+
+	var list []*response.BindPermissionFiccItem
+	for _, v := range permissionFirstList {
+		item := permissionFirstMap[v.ClassifyName]
+		if len(item.List) > 0 {
+			temp := new(response.BindPermissionFiccItem)
+			temp.Id = item.Id
+			temp.ClassifyName = item.ClassifyName
+			temp.List = item.List
+			list = append(list, temp)
+		}
+	}
+	ret.PermissionList = list
+	return
+}
+