package models

import (
	"eta_gn/eta_api/global"
	"eta_gn/eta_api/utils"
	"fmt"
	"strings"
	"time"

	"github.com/rdlucklib/rdluck_tools/paging"
)

// PptV2 表
type PptV2 struct {
	PptId                  int       `gorm:"column:ppt_id;primaryKey;autoIncrement:true" description:"ppt的Id"`
	TemplateType           int       `gorm:"column:template_type" description:"模版类型"`
	BackgroundImg          string    `gorm:"column:background_img" description:"现在实际存的封面图(前端改动太大,不知道该字段之前谁定义的)"`
	Title                  string    `gorm:"column:title" description:"标题"`
	Abstract               string    `gorm:"column:abstract" description:"摘要"`
	ReportType             string    `gorm:"column:report_type" description:"报告类型"`
	PptDate                string    `gorm:"column:ppt_date" description:"选择日期"`
	Content                string    `gorm:"column:content" description:"ppt内容"`
	PptUrl                 string    `gorm:"column:ppt_url" description:"ppt下载地址"`
	PptxUrl                string    `gorm:"column:pptx_url" description:"pptx下载地址"`
	CreateTime             time.Time `gorm:"column:create_time" description:"创建时间"`
	ModifyTime             time.Time `gorm:"column:modify_time" description:"修改时间"`
	AdminId                int       `gorm:"column:admin_id" description:"系统用户id"`
	AdminRealName          string    `gorm:"column:admin_real_name" description:"系统用户名称"`
	PptVersion             int8      `gorm:"column:ppt_version" description:"是否ppt的旧版本;1:旧的,2:新的"`
	ReportId               int       `gorm:"column:report_id" description:"关联的报告ID"`
	ReportCode             string    `gorm:"column:report_code" description:"关联的报告code"`
	IsShare                int8      `gorm:"column:is_share" description:"是否分享,0:不分享,1:分享"`
	PublishTime            time.Time `gorm:"column:publish_time" description:"发布时间"`
	CoverContent           string    `gorm:"column:cover_content" description:"PPT内容-JSON"`
	PptPage                int       `gorm:"column:ppt_page" description:"PPT页数"`
	TitleSetting           string    `gorm:"column:title_setting" description:"PPT标题设置"`
	ClassifyId             int       `gorm:"column:classify_id" description:"报告分类ID"`
	AddType                int       `gorm:"column:add_type" description:"新增方式:1-新增报告;2-继承报告"`
	InheritReportId        int       `gorm:"column:inherit_report_id" description:"继承的报告ID"`
	CollaborateType        int       `gorm:"column:collaborate_type" description:"协作方式:1-个人;2-多人协作"`
	CollaborateUsers       string    `gorm:"column:collaborate_users" description:"协作人IDs, 英文逗号分隔"`
	IsPublicPublish        int       `gorm:"column:is_public_publish" description:"是否公开发布:1-是;2-否"`
	SubmitTime             time.Time `gorm:"column:submit_time" description:"提交时间"`
	ApproveTime            time.Time `gorm:"column:approve_time" description:"审批时间"`
	ReportSource           int       `gorm:"column:report_source" description:"报告来源:1-系统内;2-智力共享"`
	OutReportId            string    `gorm:"column:out_report_id" description:"外部报告ID(或编码)"`
	State                  int       `gorm:"column:state" description:"报告状态:1-未发布;2-已发布;3-待提交;4-待审批;5-已驳回;6-已通过"`
	TopicEndTime           time.Time `gorm:"column:topic_end_time" description:"课题结束时间"`
	CurrentBackgroundImg   string    `gorm:"column:current_background_img" description:"背景图片"`
	BackCoverImg           string    `gorm:"column:back_cover_img" description:"封底图片"`
	CurrentBackgroundImgId int       `gorm:"column:current_background_img_id" description:"背景图片id"`
	BackCoverImgId         int       `gorm:"column:back_cover_img_id" description:"封底图片id"`
	BackgroundImgId        int       `gorm:"column:background_img_id" description:"封面图id"`
}

type PptV2Item struct {
	PptId         int       `gorm:"column:ppt_id;primaryKey" description:"ppt的Id"`
	TemplateType  int       `gorm:"column:template_type" description:"模版类型"`
	BackgroundImg string    `gorm:"column:background_img" description:"背景图片"`
	Title         string    `gorm:"column:title" description:"标题"`
	ReportType    string    `gorm:"column:report_type" description:"报告类型"`
	PptDate       string    `gorm:"column:ppt_date" description:"选择日期"`
	Content       string    `gorm:"column:content" description:"ppt内容"`
	PptUrl        string    `gorm:"column:ppt_url" description:"ppt下载地址"`
	PptxUrl       string    `gorm:"column:pptx_url" description:"pptx下载地址"`
	CreateTime    time.Time `gorm:"column:create_time" description:"创建时间"`
	ModifyTime    time.Time `gorm:"column:modify_time" description:"修改时间"`
	AdminId       int       `gorm:"column:admin_id" description:"系统用户id"`
	AdminRealName string    `gorm:"column:admin_real_name" description:"系统用户名称"`
	PptVersion    int8      `gorm:"column:ppt_version" description:"是否ppt的旧版本;1:旧的,2:新的"`
	IsAuth        bool      `gorm:"column:is_auth" description:"true:有操作权限,false:无操作权限"`
	ReportId      int       `gorm:"column:report_id" description:"报告ID"`
	ReportCode    string    `gorm:"column:report_code" description:"关联的报告code"`
	IsShare       int8      `gorm:"column:is_share" description:"是否分享,0:不分享,1:分享"`
	PublishTime   time.Time `gorm:"column:publish_time" description:"发布时间"`
	CoverContent  string    `gorm:"column:cover_content" description:"PPT内容-JSON"`
	PptPage       int       `gorm:"column:ppt_page" description:"PPT页数"`
	TitleSetting  string    `gorm:"column:title_setting" description:"PPT标题设置"`
}

func GetPptV2List(condition string, pars []interface{}, startSize, pageSize int) (items []*PptV2Item, err error) {
	sql := `SELECT * FROM ppt_v2 WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	//
	sql += `ORDER BY modify_time DESC LIMIT ?,?`
	pars = append(pars, startSize)
	pars = append(pars, pageSize)
	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
	return
}

func GetPptV2ByCondition(condition string, pars []interface{}) (items []*PptV2, err error) {
	sql := `SELECT * FROM ppt_v2 WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	//
	sql += `ORDER BY modify_time DESC`
	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
	return
}

func GetPptV2ListCount(condition string, pars []interface{}) (count int, err error) {
	sql := `SELECT COUNT(1) AS count FROM ppt_v2 WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
	return
}

type PptV2ListResp struct {
	List   []*PptV2Item
	Paging *paging.PagingItem `description:"分页数据"`
}

// AddPptV2 新增PPT
func AddPptV2(item *PptV2) (lastId int64, err error) {
	err = global.DmSQL["rddp"].Create(item).Error
	lastId = int64(item.PptId)
	return
}

// DeletePptV2 删除ppt
func DeletePptV2(pptId int) (err error) {
	sql := `DELETE FROM ppt_v2 WHERE ppt_id=? `
	err = global.DmSQL["rddp"].Exec(sql, pptId).Error
	return
}

type AddPptV2Req struct {
	PptId     int64 `description:"ppt_id"`
	FirstPage struct {
		Title                  string `description:"标题"`
		ReportType             string `description:"类型"`
		PptDate                string `description:"日期"`
		ImgUrl                 string `description:"封面图片"`
		CurrentBackgroundImg   string `description:"背景图片"`
		BackCoverImg           string `description:"封底图片"`
		CurrentBackgroundImgId int    `description:"背景图片id"`
		BackCoverImgId         int    `description:"封底图片id"`
		BackgroundImgId        int    `description:"封面图id"`
		BackIndex              int    `description:"背景图片下标"`
		TemplateType           int    `description:"模版id"`
	} `description:"首页"`
	Abstract         string `description:"摘要"`
	CollaborateUsers string `description:"协作人IDs, 英文逗号分隔"`
	Content          string `description:"ppt的json数据"`
	GroupId          int64  `description:"目录id"`
	CoverContent     string `description:"封面图内容-JSON数据"`
	TitleSetting     string `description:"PPT标题设置"`
}

type AddPptResp struct {
	PptId int64 `description:"PptId"`
}

// Update 更新ppt基础信息
func (item *PptV2) Update(cols []string) (err error) {
	err = global.DmSQL["rddp"].Select(cols).Updates(item).Error
	return
}

type DeletePptV2Req struct {
	PptId int `description:"PptId" `
}

// SavePptV2PathReq 保存ppt的下载地址请求
type SavePptV2PathReq struct {
	PptId   int    `description:"PptId" `
	PptxUrl string `description:"PptxUrl" `
}

func GetPptV2ById(pptId int) (item *PptV2, err error) {
	sql := `SELECT * FROM ppt_v2 WHERE 1=1 AND ppt_id=? `
	err = global.DmSQL["rddp"].Raw(sql, pptId).Find(&item).Error
	return
}

func GetPptV2ByIds(pptIds []int) (list []*PptV2, err error) {
	err = global.DmSQL["rddp"].Table("ppt_v2").Where("ppt_id IN ?", pptIds).Find(&list).Error
	return
}

// EditPptV2Path 编辑Ppt的下载地址
func EditPptV2Path(pptId int, pptxPath string) (err error) {
	sql := `UPDATE ppt_v2 SET pptx_url=?,modify_time=NOW(),publish_time=NOW() WHERE ppt_id=? `
	err = global.DmSQL["rddp"].Exec(sql, pptxPath, pptId).Error
	return
}

// PptV2PublishRecord 发布记录表
type PptV2PublishRecord struct {
	Id         int `gorm:"primaryKey" `
	PptId      int
	PptUrl     string
	CreateTime time.Time
}

// AddPptV2PublishRecord 添加发布记录,主要是记录每次发布的时候,当前的ppt
func AddPptV2PublishRecord(item *PptV2PublishRecord) (lastId int64, err error) {
	err = global.DmSQL["rddp"].Create(item).Error
	lastId = int64(item.Id)
	return
}

// PptV2SaveLog ppt记录表
type PptV2SaveLog struct {
	Id                   int       `gorm:"column:id;primaryKey;autoIncrement" description:"自增Id"`
	PptId                int       `gorm:"column:ppt_id" description:"ppt的Id"`
	TemplateType         int       `gorm:"column:template_type" description:"模版类型"`
	BackgroundImg        string    `gorm:"column:background_img" description:"背景图片"`
	Title                string    `gorm:"column:title" description:"标题"`
	ReportType           string    `gorm:"column:report_type" description:"报告类型"`
	PptDate              string    `gorm:"column:ppt_date" description:"选择日期"`
	Content              string    `gorm:"column:content" description:"ppt内容"`
	AdminId              int       `gorm:"column:admin_id" description:"系统用户id"`
	AdminRealName        string    `gorm:"column:admin_real_name" description:"系统用户名称"`
	CreateTime           time.Time `gorm:"column:create_time" description:"创建时间"`
	CoverContent         string    `gorm:"column:cover_content" description:"PPT内容-JSON"`
	TitleSetting         string    `gorm:"column:title_setting" description:"PPT标题设置"`
	CurrentBackgroundImg string    `gorm:"column:current_background_img" description:"背景图片"`
	BackCoverImg         string    `gorm:"column:back_cover_img" description:"封底图片"`
}

// AddPptV2SaveLog 新增PPT日志
func AddPptV2SaveLog(item *PptV2SaveLog) (lastId int64, err error) {
	err = global.DmSQL["rddp"].Create(item).Error
	lastId = int64(item.Id)
	return
}

type PptV2ConfigResp struct {
	PptNum   int `description:"ppt数量" json:"ppt_num"`
	ChartNum int `description:"图片数量" json:"chart_num"`
}

type PPT2ReportReq struct {
	PptId      int    `description:"PPT主键"`
	ClassifyId int    `description:"报告二级分类ID"`
	Title      string `description:"标题"`
}

// AddPptV2Multi 批量新增ppt
func AddPptV2Multi(list []*PptV2) (err error) {
	err = global.DmSQL["rddp"].CreateInBatches(list, utils.MultiAddNum).Error
	return
}

// GetAllPptTitle 获取当前目录的所有名称
func GetAllPptTitle() (names []string, err error) {
	sql := "select title from ppt_v2"
	err = global.DmSQL["rddp"].Raw(sql).Scan(&names).Error
	return
}

// PPT2ReportResp PPT转报告响应体
type PPT2ReportResp struct {
	ReportId   int    `description:"关联的报告ID" json:"report_id"`
	ReportCode string `description:"关联的报告编码" json:"report_code"`
}

// GetPptV2ByReportId 通过关联的报告ID获取PPT
func GetPptV2ByReportId(reportId int) (item *PptV2, err error) {
	sql := `SELECT * FROM ppt_v2 WHERE 1=1 AND report_id=? LIMIT 1`
	err = global.DmSQL["rddp"].Raw(sql, reportId).First(&item).Error
	return
}

// GetSharePptV2 获取公开分享的ppt
func GetSharePptV2(IsNewPpt int) (items []*PptV2, err error) {
	sql := `SELECT * FROM ppt_v2 WHERE 1=1 AND is_share = 1 `

	if IsNewPpt > 0 {
		sql += ` AND ppt_version = 2 `
	}
	sql += `ORDER BY create_time DESC`
	err = global.DmSQL["rddp"].Raw(sql).Find(&items).Error
	return
}

// GetAllPptV2List 根据条件获取所有的Ppt
func GetAllPptV2List(condition string, pars []interface{}) (items []*PptV2Item, err error) {
	sql := `SELECT * FROM ppt_v2 WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	//
	sql += `ORDER BY modify_time DESC `
	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
	return
}

type EnPPT2CnReq struct {
	PptId   int `description:"英文PPT主键"`
	GroupId int `description:"目录ID"`
}

type BatchEnPPT2CnReq struct {
	PptIds  string `description:"英文PPT主键s"`
	GroupId int    `description:"目录ID"`
}

func GetPptV2ByTitleAndId(title string, adminId int) (item *PptV2, err error) {
	sql := `SELECT * FROM ppt_v2 WHERE 1=1 AND title=? AND admin_id=? `
	err = global.DmSQL["rddp"].Raw(sql, title, adminId).First(&item).Error
	return
}

// PPTEditingReq 标记编辑中请求体
type PPTEditingReq struct {
	PptId  int `description:"PPT主键ID"`
	Status int `description:"标记状态: 1-编辑中; 2-编辑完成"`
}

// PPTDetailResp PPT详情响应体
type PPTDetailResp struct {
	*PptV2
	Editor  PPTEditingCache `description:"编辑人信息"`
	HasAuth bool            `description:"是否有权限"`
}

// PPTEditingCache PPT编辑缓存信息
type PPTEditingCache struct {
	IsEditing bool   `description:"是否有人编辑"`
	AdminId   int    `description:"编辑者ID"`
	Editor    string `description:"编辑者姓名"`
	Tips      string `description:"提示信息"`
}

func (m *PptV2) TableName() string {
	return "ppt_v2"
}

func (m *PptV2) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*PptV2, err error) {
	fields := strings.Join(fieldArr, ",")
	if len(fieldArr) == 0 {
		fields = `*`
	}
	order := `ORDER BY create_time DESC`
	if orderRule != "" {
		order = ` ORDER BY ` + orderRule
	}
	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
	return
}

func (m *PptV2) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*PptV2, err error) {
	fields := strings.Join(fieldArr, ",")
	if len(fieldArr) == 0 {
		fields = `*`
	}
	order := `ORDER BY create_time DESC`
	if orderRule != "" {
		order = ` ORDER BY ` + orderRule
	}
	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
	pars = append(pars, startSize, pageSize)
	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
	return
}

func (m *PptV2) GetPageItemsByConditionWithAdminId(condition string, pars []interface{}, fieldArr []string, orderRule string, adminId, startSize, pageSize int) (items []*PptV2, err error) {
	fields := strings.Join(fieldArr, ",")
	if len(fieldArr) == 0 {
		fields = `*`
	}
	order := `ORDER BY create_time DESC`
	if orderRule != "" {
		order = ` ORDER BY ` + orderRule
	}
	sql := fmt.Sprintf(`
	SELECT %s FROM %s WHERE 1=1 AND classify_id NOT IN (
		SELECT DISTINCT "classify_id" FROM "classify_visible") %s
	UNION ALL
	SELECT %s FROM %s WHERE 1=1 AND classify_id IN (
		SELECT DISTINCT "classify_id" FROM "classify_visible" WHERE "admin_id" = %d) %s %s LIMIT ?,? `, fields, m.TableName(), condition, fields, m.TableName(), adminId, condition, order)
	pars = append(pars, pars...)
	pars = append(pars, startSize, pageSize)
	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
	return
}

func (m *PptV2) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
	return
}

func (m *PptV2) GetCountByConditionWithAdminId(condition string, pars []interface{}, adminId int) (count int, err error) {
	sql := fmt.Sprintf(`
	SELECT (
		(SELECT COUNT(1) FROM %s WHERE 1=1 AND classify_id NOT IN (
			SELECT DISTINCT "classify_id" FROM "classify_visible") %s)
		+
		(SELECT COUNT(1) FROM %s WHERE 1=1 AND classify_id IN (
			SELECT DISTINCT "classify_id" FROM "classify_visible" WHERE "admin_id" = %d) %s)
	) AS count `, m.TableName(), condition, m.TableName(), adminId, condition)
	pars = append(pars, pars...)
	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
	return
}

// PptReportQueryFields 除富文本的常用查询字段
var PptReportQueryFields = []string{
	"ppt_id", "title", "classify_id", "ppt_version", "pptx_url", "ppt_page", "title_setting", "state", "report_source", "publish_time", "submit_time", "approve_time", "create_time", "modify_time", "admin_id", "admin_real_name", "collaborate_type", "collaborate_users",
}

type PptReportItem struct {
	PptId      int    `description:"主键Id"`
	Title      string `description:"标题"`
	ClassifyId int    `description:"报告分类ID"`
	PptVersion int    `description:"是否ppt的旧版本;1:旧的,2:新的"`
	PptxUrl    string `description:"pptx下载地址"`
	PptPage    int    `description:"PPT总页数"`
	//Content      string `description:"内容"`
	TitleSetting     string                     `description:"PPT标题设置"`
	State            int                        `description:"报告状态:1-未发布;2-已发布;3-待提交;4-待审批;5-已驳回;6-已通过"`
	ReportSource     int                        `description:"报告来源:1-系统内;2-智力共享"`
	PublishTime      string                     `description:"发布时间"`
	SubmitTime       string                     `description:"提交时间"`
	ApproveTime      string                     `description:"审批时间"`
	CreateTime       string                     `description:"创建时间"`
	ModifyTime       string                     `description:"更新时间"`
	FullClassify     string                     `description:"分类完整路径, /分隔"`
	CollaborateType  int                        `description:"协作方式:1-个人;2-多人协作"`
	CollaborateUsers []PptReportCollaborateUser `description:"协作人信息"`
	HasAuth          bool                       `description:"是否创建人/协作人"`
	Editor           PPTEditingCache            `description:"编辑人信息"`
	AdminId          int                        `description:"创建人ID"`
	AdminRealName    string                     `description:"创建人姓名"`
}

type PptReportCollaborateUser struct {
	AdminId  int    `description:"用户ID"`
	RealName string `description:"用户姓名"`
}

func (m *PptV2) Format2ReportItem(origin *PptV2) (item *PptReportItem) {
	if origin == nil {
		return
	}
	item = new(PptReportItem)
	item.PptId = origin.PptId
	item.Title = origin.Title
	item.ClassifyId = origin.ClassifyId
	item.PptVersion = int(origin.PptVersion)
	item.PptxUrl = origin.PptxUrl
	item.PptPage = origin.PptPage
	//item.Content = origin.Content
	item.TitleSetting = origin.TitleSetting
	item.State = origin.State
	item.ReportSource = origin.ReportSource
	item.PublishTime = utils.TimeTransferString(utils.FormatDateTime, origin.PublishTime)
	item.SubmitTime = utils.TimeTransferString(utils.FormatDateTime, origin.SubmitTime)
	item.ApproveTime = utils.TimeTransferString(utils.FormatDateTime, origin.ApproveTime)
	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
	item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime)
	item.AdminId = origin.AdminId
	item.AdminRealName = origin.AdminRealName
	item.CollaborateType = origin.CollaborateType
	return
}

type PptReportClassifyItem struct {
	Id           int                      `description:"分类ID"`
	ClassifyName string                   `description:"分类名称"`
	Sort         int                      `description:"排序"`
	ParentId     int                      `description:"父级分类ID"`
	Enabled      int                      `description:"是否可用,1可用,0禁用"`
	Level        int                      `description:"层级"`
	HasChild     int                      `description:"是否有子级别,0:下面没有子分类,1:下面有子分类;默认:0"`
	ClassifyType int                      `description:"分类类型:1-研报;2-PPT"`
	ReportNum    int                      `description:"分类下的报告数"`
	PptList      []*PptReportItem         `description:"ppt报告"`
	Child        []*PptReportClassifyItem `description:"子分类"`
}

type PptPageReportResp struct {
	List   []*PptReportItem
	Paging *paging.PagingItem `description:"分页数据"`
}

type PptReportCreateReq struct {
	Title              string `description:"标题"`
	ClassifyId         int    `description:"分类ID"`
	Abstract           string `description:"摘要"`
	AddType            int    `description:"新增方式:1:新增报告,2:继承报告"`
	InheritPptId       int    `description:"待继承的报告ID"`
	CollaborateType    int    `description:"协作方式,1:个人,2:多人协作。默认:1"`
	CollaborateUserIds []int  `description:"协作人IDs"`
	FirstPage          struct {
		Title                  string `description:"标题"`
		ReportType             string `description:"类型"`
		PptDate                string `description:"日期"`
		ImgUrl                 string `description:"图片"`
		CurrentBackgroundImg   string `description:"背景图片"`
		BackCoverImg           string `description:"封底图片"`
		CurrentBackgroundImgId int    `description:"背景图片id"`
		BackCoverImgId         int    `description:"封底图片id"`
		BackgroundImgId        int    `description:"封面图id"`
		BackIndex              int    `description:"背景图片下标"`
		TemplateType           int    `description:"模版id"`
	} `description:"首页"`
	Content      string `description:"ppt的json数据"`
	CoverContent string `description:"封面图内容-JSON数据"`
	TitleSetting string `description:"PPT标题设置"`
}

// MovePptReportClassify 转移PPT报告分类
func MovePptReportClassify(newClassifyId, originClassifyId int) (err error) {
	sql := `UPDATE ppt_v2 SET classify_id = ? WHERE classify_id = ?`
	err = global.DmSQL["rddp"].Exec(sql, newClassifyId, originClassifyId).Error
	return
}

// GetPptByImageIdCount 根据图片id查询ppt信息
func GetPptByImageIdCount(imageId int) (count int, err error) {
	sql := `SELECT COUNT(1) FROM ppt_v2 WHERE current_background_img_id = ? or back_cover_img_id = ? or background_img_id = ?`
	err = global.DmSQL["rddp"].Raw(sql, imageId, imageId, imageId).Scan(&count).Error
	return
}