package models import ( "eta/eta_mini_api/utils" "github.com/beego/beego/v2/client/orm" "time" ) type UnionReport struct { Id int `description:"报告ID"` Title string `description:"报告标题"` Abstract string `description:"摘要"` PublishTime time.Time `description:"发布时间"` ReportSource int `description:"报告来源:1-report表;2-outside_report表"` ReportFile string `description:"报告附件"` ClassifyIdFirst int `description:"一级分类ID"` ClassifyIdSecond int `description:"二级分类ID"` ClassifyIdThird int `description:"三级分类ID"` Author string `description:"作者"` } type UnionReportItem struct { Id int `description:"报告ID"` Title string `description:"报告标题"` Abstract string `description:"摘要"` PublishTime string `description:"发布时间"` ReportSource int `description:"报告来源:1-report表;2-outside_report表"` ReportFile string `description:"报告附件"` ClassifyId int `description:"分类ID"` ClassifyName string `description:"分类名称"` Author string `description:"作者"` } func GetReportAndOutsideReportCount(reportCond, outsideCond string, reportPars, outsidePars []interface{}) (total int, err error) { o := orm.NewOrmUsingDB("rddp") sql := `SELECT COUNT(*) AS total FROM ( ( SELECT r.id AS id FROM report r WHERE r.state IN (2,6) ` + reportCond + ` ) UNION ( SELECT o.outside_report_id AS id FROM outside_report o INNER JOIN outside_report_attachment oa ON o.outside_report_id = oa.outside_report_id WHERE oa.title LIKE '%.pdf%' AND oa.create_time = ( SELECT MAX(oa2.create_time) FROM outside_report_attachment oa2 WHERE oa2.outside_report_id = o.outside_report_id AND oa2.title LIKE '%.pdf%' ) ` + outsideCond + ` ) ) AS t` //sql = fmt.Sprintf(sql, reportCond, outsideCond) err = o.Raw(sql, reportPars, outsidePars).QueryRow(&total) return } // GetReportAndOutsideReportByCondition 查询报告及外部中PDF的报告 func GetReportAndOutsideReportByCondition(reportCond, outsideCond string, reportPars, outsidePars []interface{}, startSize, pageSize int) (items []*UnionReport, err error) { o := orm.NewOrmUsingDB("rddp") sql := `( SELECT r.id AS id, r.title AS title, r.abstract AS abstract, r.publish_time AS publish_time, 1 AS report_source, detail_pdf_url AS report_file, r.classify_id_first, r.classify_id_second, r.classify_id_third, r.author FROM report r WHERE r.state IN (2,6) ` + reportCond + ` ) UNION ( SELECT o.outside_report_id AS id, o.title AS title, o.abstract AS abstract, o.modify_time AS publish_time, 2 AS report_source, oa.url AS report_file, o.classify_id AS classify_name_first, o.classify_id AS classify_name_second, o.classify_id AS classify_name_third, o.sys_user_name AS author FROM outside_report o INNER JOIN outside_report_attachment oa ON o.outside_report_id = oa.outside_report_id WHERE oa.title LIKE '%.pdf%' AND oa.create_time = ( SELECT MAX(oa2.create_time) FROM outside_report_attachment oa2 WHERE oa2.outside_report_id = o.outside_report_id AND oa2.title LIKE '%.pdf%' ) ` + outsideCond + ` ) ORDER BY publish_time DESC LIMIT ?,?` //sql = fmt.Sprintf(sql, reportCond, outsideCond) _, err = o.Raw(sql, reportPars, outsidePars, startSize, pageSize).QueryRows(&items) return } type Report struct { Id int `orm:"pk" description:"报告Id"` AddType int `description:"新增方式:1:新增报告,2:继承报告"` ClassifyIdFirst int `description:"一级分类id"` ClassifyNameFirst string `description:"一级分类名称"` ClassifyIdSecond int `description:"二级分类id"` ClassifyNameSecond string `description:"二级分类名称"` ClassifyIdThird int `description:"三级分类id"` ClassifyNameThird string `description:"三级分类名称"` Title string `description:"标题"` Abstract string `description:"摘要"` Author string `description:"作者"` Frequency string `description:"频度"` CreateTime string `description:"创建时间"` ModifyTime time.Time `description:"修改时间"` State int `description:"1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"` PublishTime time.Time `description:"发布时间"` Stage int `description:"期数"` MsgIsSend int `description:"消息是否已发送,0:否,1:是"` ThsMsgIsSend int `description:"客户群消息是否已发送,0:否,1:是"` Content string `description:"内容"` VideoUrl string `description:"音频文件URL"` VideoName string `description:"音频文件名称"` VideoPlaySeconds string `description:"音频播放时长"` VideoSize string `description:"音频文件大小,单位M"` ContentSub string `description:"内容前两个章节"` ReportCode string `description:"报告唯一编码"` ReportVersion int `description:"1:旧版,2:新版"` HasChapter int `description:"是否有章节 0-否 1-是"` ChapterType string `description:"章节类型 day-晨报 week-周报"` OldReportId int `description:"research_report表ID, 大于0则表示该报告为老后台同步过来的"` MsgSendTime time.Time `description:"模版消息发送时间"` AdminId int `description:"创建者账号"` AdminRealName string `description:"创建者姓名"` ApproveTime time.Time `description:"审批时间"` ApproveId int `description:"审批ID"` DetailImgUrl string `description:"报告详情长图地址"` DetailPdfUrl string `description:"报告详情PDF地址"` ContentStruct string `description:"内容组件"` LastModifyAdminId int `description:"最后更新人ID"` LastModifyAdminName string `description:"最后更新人姓名"` ContentModifyTime time.Time `description:"内容更新时间"` Pv int `description:"pv"` Uv int `description:"uv"` HeadImg string `description:"报告头图地址"` EndImg string `description:"报告尾图地址"` CanvasColor string `description:"画布颜色"` NeedSplice int `description:"是否拼接版头版位的标记,主要是为了兼容历史报告。0-不需要 1-需要"` HeadResourceId int `description:"版头资源ID"` EndResourceId int `description:"版尾资源ID"` CollaborateType int8 `description:"协作方式,1:个人,2:多人协作。默认:1"` ReportLayout int8 `description:"报告布局,1:常规布局,2:智能布局。默认:1"` IsPublicPublish int8 `description:"是否公开发布,1:是,2:否"` ReportCreateTime time.Time `description:"报告时间创建时间"` InheritReportId int `description:"待继承的报告ID"` VoiceGenerateType int `description:"音频生成方式,0:系统生成,1:人工上传"` } func (m *Report) GetItemById(id int) (item *Report, err error) { o := orm.NewOrmUsingDB("rddp") sql := `SELECT * FROM report WHERE id = ? LIMIT 1` err = o.Raw(sql, id).QueryRow(&item) return } type ReportDetail struct { Id int `description:"报告Id"` AddType int `description:"新增方式:1:新增报告,2:继承报告"` ClassifyIdFirst int `description:"一级分类id"` ClassifyNameFirst string `description:"一级分类名称"` ClassifyIdSecond int `description:"二级分类id"` ClassifyNameSecond string `description:"二级分类名称"` ClassifyIdThird int `description:"三级分类id"` ClassifyNameThird string `description:"三级分类名称"` Title string `description:"标题"` Abstract string `description:"摘要"` Author string `description:"作者"` Frequency string `description:"频度"` CreateTime string `description:"创建时间"` ModifyTime string `description:"修改时间"` State int `description:"1:未发布,2:已发布"` PublishTime string `description:"发布时间"` Stage int `description:"期数"` MsgIsSend int `description:"消息是否已发送,0:否,1:是"` Content string `description:"内容"` ChapterContent []*ReportChapter `description:"章节内容"` VideoUrl string `description:"音频文件URL"` VideoName string `description:"音频文件名称"` VideoPlaySeconds string `description:"音频播放时长"` VideoSize string `description:"音频文件大小,单位M"` ContentSub string `description:"内容前两个章节"` IsShowNewLabel int `description:"是否显示新标签"` IsCurrentDate int `description:"是否当前日期"` ClassifyName string `description:"分类名称"` TitleType string `description:"标题类型,FICC或者权益"` IsPublic bool `description:"是否是公共报告 "` HeadResourceId int `description:"版头资源库id"` EndResourceId int `description:"版尾资源库id"` HeadResource *SmartReportResource `description:"版头资源库"` EndResource *SmartReportResource `description:"版尾资源库"` CollaborateType int `description:"合作类型, 1:个人,2:多人协作"` ReportLayout int `description:"报告布局, 1:常规布局,2:智能布局"` HasChapter int `description:"是否有章节: 0-否 1-是"` } type ReportChapter struct { Title string `description:"章节标题"` Content string `description:"章节内容"` } func GetReportChapterList(reportId int) (items []*ReportChapter, err error) { o := orm.NewOrmUsingDB("rddp") sql := `SELECT * FROM report_chapter WHERE report_id=? ORDER BY sort ASC` _, err = o.Raw(sql, reportId).QueryRows(&items) return } func GetReportById(reportId int) (item *ReportDetail, err error) { o := orm.NewOrmUsingDB("rddp") sql := `SELECT * FROM report WHERE (state=2 OR state=6) AND id=?` err = o.Raw(sql, reportId).QueryRow(&item) return } type SmartReportResource struct { ResourceId int `description:"资源库id"` ImgUrl string `description:"图片url"` Type int `description:"资源类型:1-版头 2-版尾"` Style string `description:"版图样式"` } func GetSmartReportResourceById(resourceId int) (item *SmartReportResource, err error) { o := orm.NewOrmUsingDB("rddp") sql := `SELECT * FROM smart_report_resource WHERE resource_id=?` err = o.Raw(sql, resourceId).QueryRow(&item) return } type OutsideReport struct { OutsideReportId int `description:"报告ID"` Title string `description:"标题"` Abstract string `description:"摘要"` ClassifyId int `description:"分类ID"` ClassifyName string `description:"分类名称"` SysUserId int `description:"创建人ID"` SysUserName string `description:"创建人姓名"` ReportFile string `description:"报告附件"` CreateTime time.Time `description:"创建时间"` ModifyTime time.Time `description:"修改时间"` } func GetOutsideReportById(reportId int) (item *OutsideReport, err error) { o := orm.NewOrmUsingDB("rddp") sql := `SELECT o.outside_report_id, o.title, o.abstract, o.create_time, o.modify_time, o.classify_id, o.classify_name, o.sys_user_id, o.sys_user_name, oa.url AS report_file FROM outside_report o INNER JOIN outside_report_attachment oa ON o.outside_report_id = oa.outside_report_id WHERE o.outside_report_id = ? AND oa.title LIKE '%.pdf%' AND oa.create_time = ( SELECT MAX(oa2.create_time) FROM outside_report_attachment oa2 WHERE oa2.outside_report_id = o.outside_report_id AND oa2.title LIKE '%.pdf%' ) LIMIT 1` err = o.Raw(sql, reportId).QueryRow(&item) return } type OutsideReportItem struct { OutsideReportId int `description:"报告ID"` Title string `description:"标题"` Abstract string `description:"摘要"` ClassifyId int `description:"分类ID"` ClassifyName string `description:"分类名称"` Author string `description:"作者"` ReportFile string `description:"报告附件"` CreateTime string `description:"创建时间"` ModifyTime string `description:"修改时间"` } func (m *OutsideReport) Format2Item() (item *OutsideReportItem) { item = new(OutsideReportItem) item.OutsideReportId = m.OutsideReportId item.Title = m.Title item.Abstract = m.Abstract item.ClassifyId = m.ClassifyId item.ClassifyName = m.ClassifyName item.Author = m.SysUserName item.ReportFile = m.ReportFile item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime) item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime) return }