zwxi 6 月之前
父节点
当前提交
423845a44b

+ 319 - 0
controllers/bi_dashboard.go

@@ -0,0 +1,319 @@
+package controllers
+
+import (
+	"encoding/json"
+	"errors"
+	"eta_gn/eta_api/models"
+	"eta_gn/eta_api/models/bi_dashboard"
+	"eta_gn/eta_api/services"
+	"eta_gn/eta_api/services/ppt"
+	"eta_gn/eta_api/utils"
+	"time"
+)
+
+type BIDaShboardController struct {
+	BaseAuthController
+}
+
+// GroupList
+// @Title 获取可见的目录列表
+// @Description 获取可见的目录列表接口
+// @Success 200 {object} models.RespGroupList
+// @router /my_list [get]
+func (this *BIDaShboardController) MyList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	// 获取我的看板列表
+	privateCond := ` AND sys_admin_id = ? AND state IN (1,6) `
+	privatePars := []interface{}{this.SysUser.AdminId}
+	privateList, err := bi_dashboard.GetBiDashboardList(privateCond, privatePars)
+	if err != nil {
+		err = errors.New("我的看板列表查询出错:" + err.Error())
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "查询成功"
+	br.Data = privateList
+	return
+}
+
+// AddDashboard
+// @Title 新增ppt
+// @Description 新增ppt接口
+// @Param	request	body models.AddPptV2Req true "type json string"
+// @Success 200 Ret=200 新增成功
+// @router /add [post]
+func (this *BIDaShboardController) AddDashboard() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req bi_dashboard.AddDashboardReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.BiDashboardName == "" {
+		br.Msg = "名称不能为空"
+		return
+	}
+
+	//item := &bi_dashboard.BiDashboard{
+	//	BiDashboardClassifyId: int(req.ClassifyId),
+	//	BiDashboardName:       req.BiDashboardName,
+	//	SysAdminId:            this.SysUser.AdminId,
+	//	SysAdminName:          this.SysUser.AdminName,
+	//	//Sort:                  0,
+	//	CreateTime:            time.Now(),
+	//	ModifyTime:            time.Now(),
+	//	State:                 1,
+	//}
+	//for i, listReq := range req.List {
+	//
+	//}
+
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "新增成功"
+	//br.Data =
+}
+
+// EditPpt
+// @Title 编辑ppt
+// @Description 编辑ppt接口
+// @Param	request	body models.AddPptV2Req true "type json string"
+// @Success 200 Ret=200 编辑成功
+// @router /edit [post]
+func (this *BIDaShboardController) EditPpt() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req models.AddPptV2Req
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.FirstPage.Title == "" {
+		br.Msg = "标题不能为空"
+		return
+	}
+	item, err := models.GetPptV2ByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
+	if err != nil && !utils.IsErrNoRow(err) {
+		br.Msg = "获取数据异常!"
+		br.ErrMsg = "获取数据异常,Err:" + err.Error()
+		return
+	}
+	if item != nil && item.PptId != int(req.PptId) {
+		br.Msg = "标题已存在,不可重复添加"
+		br.IsSendEmail = false
+		return
+	}
+	pptInfo, err := models.GetPptV2ById(int(req.PptId))
+	if err != nil {
+		br.Msg = "信息获取失败"
+		br.ErrMsg = "信息获取失败,Err:" + err.Error()
+		return
+	}
+
+	// 判断权限
+	if pptInfo.AdminId != this.SysUser.AdminId {
+		_, err := models.GetPPtGrantConf(pptInfo.PptId, this.SysUser.AdminId)
+		if err != nil {
+			if utils.IsErrNoRow(err) {
+				br.Msg = `该PPT已取消共享,保存失败`
+				br.ErrMsg = `该PPT已取消共享,保存失败`
+				br.IsSendEmail = false
+			} else {
+				br.Msg = `保存失败`
+				br.ErrMsg = `保存失败,ERR:` + err.Error()
+			}
+			return
+		}
+	}
+
+	// 修改
+	pptInfo.TemplateType = req.FirstPage.TemplateType
+	pptInfo.BackgroundImg = req.FirstPage.ImgUrl
+	pptInfo.Title = req.FirstPage.Title
+	pptInfo.ReportType = req.FirstPage.ReportType
+	pptInfo.PptDate = req.FirstPage.PptDate
+	pptInfo.Content = req.Content
+	pptInfo.CoverContent = req.CoverContent
+	pptInfo.ModifyTime = time.Now()
+	pptInfo.TitleSetting = req.TitleSetting
+	err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime", "CoverContent", "TitleSetting"})
+	if err != nil {
+		br.Msg = "编辑失败"
+		br.ErrMsg = "编辑失败,Err:" + err.Error()
+		return
+	}
+
+	pptMap, err := models.GetPptMappingByPptId(req.PptId)
+	if err != nil {
+		br.Msg = `该PPT信息不存在, 保存失败`
+		br.ErrMsg = `该PPT信息不存在, 保存失败, Err` + err.Error()
+		br.IsSendEmail = false
+		return
+	}
+	pptMapList, err := models.GetPptMappingListByGroupId(pptMap.GroupId)
+	if err != nil {
+		br.ErrMsg = "PPT目录信息异常"
+		return
+	}
+	count, err := models.GetPptMappingByGroupPptCountId(pptMap.GroupPptId, this.SysUser.AdminId)
+	if err != nil {
+		br.Msg = "查询映射关系失败"
+		br.ErrMsg = "查询映射关系失败, 保存失败, Err:" + err.Error()
+		return
+	}
+	if !pptMap.IsMoved && len(pptMapList) > 1 && count > 0 {
+		// 如果没有人为移动位置, 默认将当前ppt置顶
+		err = ppt.MoveGroupPpt(pptMap.GroupId, pptMap.GroupPptId, pptMapList[0].GroupPptId, 0, this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = err.Error()
+			br.ErrMsg = "移动失败,Err:" + err.Error()
+			return
+		}
+	}
+
+	// 日志记录
+	{
+		logInfo := &models.PptV2SaveLog{
+			PptId:         pptInfo.PptId,
+			TemplateType:  pptInfo.TemplateType,
+			BackgroundImg: pptInfo.BackgroundImg,
+			Title:         pptInfo.Title,
+			ReportType:    pptInfo.ReportType,
+			PptDate:       pptInfo.PptDate,
+			Content:       pptInfo.Content,
+			CoverContent:  pptInfo.CoverContent,
+			AdminId:       this.SysUser.AdminId,
+			AdminRealName: this.SysUser.RealName,
+			CreateTime:    time.Now(),
+		}
+		_, err = models.AddPptV2SaveLog(logInfo)
+	}
+
+	resp := models.AddPptResp{
+		PptId: req.PptId,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "编辑成功"
+	br.IsAddLog = true
+	br.Data = resp
+}
+
+// DeletePpt
+// @Title 删除ppt
+// @Description 删除ppt接口
+// @Param	request	body models.DeletePptV2Req true "type json string"
+// @Success 200 Ret=200 删除成功
+// @router /delete [post]
+func (this *BIDaShboardController) DeletePpt() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req models.DeletePptV2Req
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.PptId <= 0 {
+		br.Msg = "参数错误"
+		return
+	}
+	pptInfo, err := models.GetPptV2ById(req.PptId)
+	if err != nil {
+		br.Msg = "ppt不存在"
+		return
+	}
+	if pptInfo.AdminId != this.SysUser.AdminId {
+		br.Msg = "无权删除"
+		return
+	}
+	err = models.DeletePptV2(req.PptId)
+	if err != nil {
+		br.Msg = "删除失败"
+		br.ErrMsg = "删除失败,Err:" + err.Error()
+		return
+	}
+	//如果该ppt存在单个共享记录,则删除共享
+	err = ppt.DeleteGroupPpt(req.PptId)
+	if err != nil {
+		br.Msg = "删除失败"
+		br.ErrMsg = "删除失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.IsAddLog = true
+	br.Msg = "删除成功"
+}
+
+// DetailPpt
+// @Title 获取ppt详情
+// @Description 获取ppt详情接口
+// @Param   PptId   query   int  true       "PptId"
+// @Success 200 {object} models.PptV2
+// @router /detail [get]
+func (this *BIDaShboardController) DetailPpt() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	pptId, _ := this.GetInt("PptId")
+
+	pptInfo, err := models.GetPptV2ById(pptId)
+	if err != nil {
+		br.Msg = "信息获取失败"
+		br.ErrMsg = "信息获取失败,Err:" + err.Error()
+		return
+	}
+
+	// 编辑中
+	editor, e := services.UpdatePptEditing(pptId, 0, sysUser.AdminId, sysUser.RealName, false)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
+		return
+	}
+	resp := new(models.PPTDetailResp)
+	resp.PptV2 = pptInfo
+	resp.Editor = editor
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+

+ 55 - 0
models/bi_dashboard/bi_dashboard.go

@@ -0,0 +1,55 @@
+package bi_dashboard
+
+import (
+	"eta_gn/eta_api/global"
+	"time"
+)
+
+type BiDashboard struct {
+	BiDashboardId         int       `gorm:"primaryKey;autoIncrement;column:bi_dashboard_id" json:"biDashboardId"` // bi看板id
+	BiDashboardClassifyId int       `gorm:"column:bi_dashboard_classify_id" json:"biDashboardClassifyId"`         // 看板分类id
+	BiDashboardName       string    `gorm:"column:bi_dashboard_name;size:255" json:"biDashboardName"`             // 看板名称
+	SysAdminId            int       `gorm:"column:sys_admin_id" json:"sysAdminId"`                                // 创建人ID
+	SysAdminName          string    `gorm:"column:sys_admin_name;size:128" json:"sysAdminName"`                   // 创建人姓名
+	Sort                  int       `gorm:"column:sort" json:"sort"`                                              // 排序字段
+	CreateTime            time.Time `gorm:"column:create_time" json:"createTime"`                                 // 创建时间
+	ModifyTime            time.Time `gorm:"column:modify_time" json:"modifyTime"`                                 // 更新时间
+	State                 int       `gorm:"column:state" json:"state"`                                            // 状态
+}
+
+// tableName
+func (m *BiDashboard) TableName() string {
+	return "bi_dashboard"
+}
+
+// AddBiDashboard 新增看板
+func AddBiDashboard(item *BiDashboard) (lastId int64, err error) {
+	err = global.DEFAULT_DmSQL.Create(item).Error
+	lastId = int64(item.BiDashboardId)
+	return
+}
+
+// GetShareDashboard 获取公开分享的看板
+func GetShareDashboard() (items []*BiDashboard, err error) {
+	//o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM bi_dashboard WHERE 1=1 AND state = 6 `
+
+	sql += `ORDER BY create_time DESC`
+	//sql += `ORDER BY create_time DESC LIMIT ?,?`
+	//_, err = o.Raw(sql).QueryRows(&items)
+	err = global.DEFAULT_DmSQL.Raw(sql).Find(&items).Error
+	return
+}
+
+func GetBiDashboardList(condition string, pars []interface{}) (items []*BiDashboard, err error) {
+	sql := `SELECT * FROM bi_dashboard WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	//
+	sql += `ORDER BY modify_time DESC `
+	//sql += `ORDER BY create_time DESC LIMIT ?,?`
+	//_, err = o.Raw(sql, pars...).QueryRows(&items)
+	err = global.DEFAULT_DmSQL.Raw(sql, pars...).Find(&items).Error
+	return
+}

+ 62 - 0
models/bi_dashboard/bi_dashboard_classify.go

@@ -0,0 +1,62 @@
+package bi_dashboard
+
+import (
+	"eta_gn/eta_api/global"
+	"time"
+)
+
+type BiDashboardClassify struct {
+	BiDashboardClassifyId int       `gorm:"primaryKey;autoIncrement;column:bi_dashboard_classify_id" json:"biDashboardClassifyId"` // bi看板分类id
+	BiDashboardClassifyName string    `gorm:"column:bi_dashboard_classify_name;size:255;not null" json:"biDashboardClassifyName"` // 看板分类名称
+	Sort                   int       `gorm:"column:sort" json:"sort"` // 排序字段
+	CreateTime             time.Time `gorm:"column:create_time" json:"createTime"` // 创建时间
+	ModifyTime             time.Time `gorm:"column:modify_time" json:"modifyTime"` // 更新时间
+}
+
+// tableName
+func (m *BiDashboardClassify) TableName() string {
+	return "bi_dashboard_classify"
+}
+
+// add
+func AddBiDashboardClassify(item *BiDashboardClassify) (lastId int64, err error) {
+	err = global.DEFAULT_DmSQL.Create(item).Error
+	lastId = int64(item.BiDashboardClassifyId)
+	return
+}
+
+type RespGroupList struct {
+	PublicList  []*RespGroupListItem
+	PrivateList []*BiDashboard
+	GrantList   []RespGroupListItem
+}
+
+
+type RespGroupListItem struct {
+	GroupId   int64  `description:"目录id"`
+	GroupName string `description:"目录名称"`
+	AdminId   int    `description:"目录创建者账号ID"`
+	IsShare   int8   `description:"是否共享,0私有,1共享"`
+	DashboardList   []*RespGroupDashboardListItem
+}
+
+type RespGroupDashboardListItem struct {
+	GroupPptId    int64  `description:"目录和ppt绑定序号"`
+	PptId         int64  `description:"ppt ID"`
+	Title         string `description:"标题"`
+	AdminId       int    `description:"移动ppt到该目录的系统用户id"`
+	AdminRealName string `description:"系统用户名称"`
+	PptVersion    int8   `description:"是否ppt的旧版本;1:旧的,2:新的"`
+	IsSingleShare int8   `description:"是否是单个共享ppt,0未单个共享,1共享"`
+	PptxUrl       string `description:"pptx下载地址"`
+	ReportId      int    `description:"关联的报告ID"`
+	ReportCode    string `description:"关联的报告code"`
+	PptCreateTime string `description:"ppt创建时间"`
+	PptModifyTime string `description:"ppt修改时间"`
+	PublishTime   string `description:"发布时间"`
+	PptPage       int    `description:"PPT总页数"`
+	IsReceived    int8   `description:"是否收到的共享,0:不是,1:是"`
+	IsGrant       int8   `description:"是否分配了权限,0:不是,1:是"`
+	TitleSetting  string `description:"PPT标题设置"`
+}
+

+ 44 - 0
models/bi_dashboard/bi_dashboard_detail.go

@@ -0,0 +1,44 @@
+package bi_dashboard
+
+import (
+	"eta_gn/eta_api/global"
+	"time"
+)
+
+type BiDashboardDetail struct {
+	BiDashboardDetailId int       `gorm:"primaryKey;autoIncrement;column:bi_dashboard_detail_id" json:"biDashboardDetailId"` // bi看板id
+	BiDashboardId       int       `gorm:"column:bi_dashboard_id" json:"biDashboardId"`                                       // 看板id
+	Type                int       `gorm:"column:type" json:"type"`                                                           // 1图表 2表格
+	UniqueCode          string    `gorm:"column:unique_code;size:32;not null" json:"uniqueCode"`                             // 报告唯一编码
+	Sort                int       `gorm:"column:sort" json:"sort"`                                                           // 排序字段
+	CreateTime          time.Time `gorm:"column:create_time" json:"createTime"`                                              // 创建时间
+	ModifyTime          time.Time `gorm:"column:modify_time" json:"modifyTime"`                                              // 更新时间
+}
+
+// tableName
+func (m *BiDashboardDetail) TableName() string {
+	return "bi_dashboard_detail"
+}
+
+// add
+func AddBiDashboardDetail(item *BiDashboardDetail) (err error) {
+	err = global.DEFAULT_DmSQL.Create(item).Error
+	return
+}
+
+// multiAdd
+func AddBiDashboardDetailMulti(items []*BiDashboardDetail) (err error) {
+	return global.DEFAULT_DmSQL.CreateInBatches(items, 100).Error
+}
+
+type AddDashboardReq struct {
+	List            []*AddDashboardListReq
+	ClassifyId      int64  `description:"分类id"`
+	BiDashboardName string `description:"看板名称"`
+}
+
+type AddDashboardListReq struct {
+	Type       int
+	UniqueCode string
+	Sort       int
+}

+ 26 - 0
models/bi_dashboard/bi_dashboard_grant.go

@@ -0,0 +1,26 @@
+package bi_dashboard
+
+import (
+	"eta_gn/eta_api/global"
+	"time"
+)
+
+type BiDashboardGrant struct {
+	GrantId       int       `gorm:"primaryKey;autoIncrement;column:grant_id" json:"grantId"` // 授权id
+	BiDashboardId int       `gorm:"column:bi_dashboard_id" json:"biDashboardId"`        // 看板id
+	AdminId       int       `gorm:"column:admin_id" json:"adminId"`                   // 授权的用户id
+	CreateTime    time.Time `gorm:"column:create_time" json:"createTime"`               // 授权时间
+}
+
+// tableName
+func (m *BiDashboardGrant) TableName() string {
+	return "bi_dashboard_grant"
+}
+
+// GetAllGrantList 获取已经有权限的看板列表
+func GetAllGrantList(sysUserId int) (list []*BiDashboardGrant, err error) {
+	sql := `SELECT a.* FROM bi_dashboard a JOIN bi_dashboard_grant b on a.bi_dashboard_id=b.bi_dashboard_id 
+ WHERE a.admin_id=? OR b.grant_admin_id=? GROUP BY a.bi_dashboard_id`
+	err = global.DEFAULT_DmSQL.Raw(sql, sysUserId, sysUserId).Find(&list).Error
+	return
+}

+ 5 - 0
routers/router.go

@@ -387,6 +387,11 @@ func init() {
 				&range_analysis.RangeChartChartInfoController{},
 			),
 		),
+		web.NSNamespace("/bi_dashborad",
+			web.NSInclude(
+				&controllers.BIDaShboardController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }