package models import ( "fmt" "github.com/beego/beego/v2/client/orm" "hongze/hongze_ETA_mobile_api/utils" "strconv" "time" ) // ResearchReport 研究报告表(晨报、周报等)结构体 type ResearchReport struct { ResearchReportId int `orm:"column(research_report_id);pk" description:"研究报告id"` ResearchReportName string `description:"研究报告名称"` ResearchReportTitle string `description:"研究报告标题"` ResearchReportImg string `description:"报告缩略图URL"` ResearchReportDate time.Time `description:"报告日期"` Type string `description:"报告类型,枚举值:day 晨报 week 周报 twoweek双周报 month 月报;默认:day"` Author string `description:"作者"` ReportVariety string `description:"研究报告的品种,双周报和月报有标识"` IsHasMenu int8 `description:"报告是否含有目录"` IsSendedMsg int8 `description:"是否发送过模板消息"` Periods int `description:"期数"` Status string `description:"状态,draft:草稿,"` Enabled int8 `description:"报告状态"` CreatedTime string `description:"创建时间"` LastUpdatedTime time.Time `description:"最近一次更新时间"` Viewers int `description:"H5观看用户数"` } // GetResearchReportListByIds 根据报告id集合获取报告数据列表 func GetResearchReportListByIds(researchReportIds string) (list []*ResearchReport, err error) { if researchReportIds == "" { return } o := orm.NewOrm() sql := `select * from research_report where research_report_id in (` + researchReportIds + `)` _, err = o.Raw(sql).QueryRows(&list) return } // Update 更新数据 func (researchReport *ResearchReport) Update(updateCols []string) (err error) { o := orm.NewOrm() _, err = o.Update(researchReport, updateCols...) return } type ResearchReportList struct { ResearchReportId int `orm:"column(research_report_id);pk" description:"研究报告id"` ResearchReportName string `description:"研究报告名称"` ResearchReportTitle string `description:"研究报告标题"` ResearchReportImg string `description:"报告缩略图URL"` ResearchReportDate time.Time `description:"报告日期"` Type string `description:"报告类型,枚举值:day 晨报 week 周报 twoweek双周报 month 月报;默认:day"` Author string `description:"作者"` ReportVariety string `description:"研究报告的品种,双周报和月报有标识"` IsHasMenu int8 `description:"报告是否含有目录"` IsSendedMsg int8 `description:"是否发送过模板消息"` Periods int `description:"期数"` Status string `description:"状态,draft:草稿,"` Enabled int8 `description:"报告状态"` CreatedTime string `description:"创建时间"` LastUpdatedTime time.Time `description:"最近一次更新时间"` Viewers int `description:"H5观看用户数"` LinkUrl string `description:"报告阅读地址"` } // GetResearchReportList 获取报告列表 func GetResearchReportList(condition string, pars []interface{}, startSize, pageSize int) (total int, list []*ResearchReportList, err error) { o := orm.NewOrm() sql := `select * from research_report where enabled = 1 ` sql += condition sql += ` order by research_report_date desc,created_time desc ` totalSql := `select count(1) total from (` + sql + `) z ` err = o.Raw(totalSql, pars).QueryRow(&total) if err != nil { return } sql += ` LIMIT ?,? ` _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list) return } // 获取今年报告 func GetMigrateReportList() (list []*ResearchReport, err error) { o := orm.NewOrm() sql := ` SELECT * FROM research_report AS a WHERE a.enabled = 1 AND a.status = "report" AND a.research_report_date >= "2022-01-01" ORDER BY a.research_report_date ASC ` _, err = o.Raw(sql).QueryRows(&list) return } // ResearchReport 研究报告表(晨报、周报等)结构体 type ResearchReportType struct { ResearchReportTypeId int `orm:"column(research_report_type_id);pk" description:"报告章节ID"` ResearchReportId int `description:"报告ID"` TypeId int `description:"分类ID"` Edit int `description:"是否编辑过"` Trend string `description:"趋势观点"` ResearchReportTypeTitle string `description:"报告标题"` CreatedTime string `description:"创建时间"` LastUpdatedTime time.Time `description:"最近一次更新时间"` } type ResearchReportTypeContent struct { ResearchReportTypeContentId int `orm:"column(research_report_type_content_id);pk" description:"章节内容ID"` ResearchReportTypeId int `description:"报告章节ID"` Sort int `description:"排序"` ContentType string `description:"内容分类类型"` Content string `description:"内容"` ImgUrl string `description:"图片路径"` CreatedTime time.Time `description:"创建时间"` LastUpdatedTime time.Time `description:"最近一次更新时间"` } type ResearchReportTypeTicker struct { ResearchReportTypeTickerId int `orm:"column(research_report_type_ticker_id);pk" description:"章节tickerID"` ResearchReportTypeId int `description:"报告章节ID"` Sort int `description:"排序"` Ticker string `description:"指标的ticker"` CreatedTime time.Time `description:"创建时间"` LastUpdatedTime time.Time `description:"最近一次更新时间"` } func GetResearchReportTypeList(researchReportId int) (list []*ResearchReportType, err error) { o := orm.NewOrm() sql := ` SELECT * FROM research_report_type WHERE research_report_id = ? ORDER BY created_time ASC ` _, err = o.Raw(sql, researchReportId).QueryRows(&list) return } func GetResearchReportTypeListByReportIds(reportIds string) (list []*ResearchReportType, err error) { o := orm.NewOrm() sql := ` SELECT * FROM research_report_type WHERE research_report_id IN (` + reportIds + `) ORDER BY created_time ASC,research_report_type_id ASC ` _, err = o.Raw(sql).QueryRows(&list) return } func GetResearchReportTypeContentList(researchReportTypeId int) (list []*ResearchReportTypeContent, err error) { o := orm.NewOrm() sql := ` SELECT * FROM research_report_type_content WHERE research_report_type_id = ? ORDER BY sort ASC ` _, err = o.Raw(sql, researchReportTypeId).QueryRows(&list) return } func GetResearchReportTypeContentListByReportTypeIds(reportTypeIds string) (list []*ResearchReportTypeContent, err error) { o := orm.NewOrm() sql := ` SELECT * FROM research_report_type_content WHERE research_report_type_id IN (` + reportTypeIds + `) ORDER BY research_report_type_id ASC,sort ASC ` _, err = o.Raw(sql).QueryRows(&list) return } func GetResearchReportTypeTickerList(researchReportTypeId int) (list []*ResearchReportTypeTicker, err error) { o := orm.NewOrm() sql := ` SELECT * FROM research_report_type_ticker WHERE research_report_type_id = ? ORDER BY sort ASC ` _, err = o.Raw(sql, researchReportTypeId).QueryRows(&list) return } func GetResearchReportTypeTickerListByReportTypeIds(reportTypeIds string) (list []*ResearchReportTypeTicker, err error) { o := orm.NewOrm() sql := ` SELECT * FROM research_report_type_ticker WHERE research_report_type_id IN (` + reportTypeIds + `) ORDER BY research_report_type_id ASC,sort ASC ` _, err = o.Raw(sql).QueryRows(&list) return } type CreateDayWeekReport struct { Report *Report ChapterList []*CreateDayWeekReportChapter } type CreateDayWeekReportChapter struct { Chapter *ReportChapter TickerList []*ReportChapterTicker } // 新增迁移晨周报 func CreateMigrateNewDayWeekReport(newDayWeekReport *CreateDayWeekReport) (newReportId int, err error) { o := orm.NewOrmUsingDB("rddp") to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() // 新增报告 reportId, err := to.Insert(newDayWeekReport.Report) if err != nil { fmt.Println("InsertReportErr:" + err.Error()) return } // 新增章节 for _, chapter := range newDayWeekReport.ChapterList { chapter.Chapter.ReportId = int(reportId) lastChapterId, tmpErr := to.Insert(chapter.Chapter) if tmpErr != nil { err = tmpErr return } // 新增晨报ticker for _, ticker := range chapter.TickerList { ticker.ReportChapterId = int(lastChapterId) if _, tmpErr = to.Insert(ticker); tmpErr != nil { err = tmpErr return } } } // 修改报告code reportCode := utils.MD5(strconv.Itoa(int(reportId))) sql := `UPDATE report SET report_code = ? WHERE id = ? ` if _, err = to.Raw(sql, reportCode, reportId).Exec(); err != nil { fmt.Println("UpdateReportCodeErr:" + err.Error()) } newReportId = int(reportId) return } // 新增迁移其他报告 func CreateMigrateNewOtherReport(reportInfo *Report, mappingList []*ChartPermissionChapterMapping) (newReportId int, err error) { o := orm.NewOrmUsingDB("rddp") to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() // 新增报告 reportId, err := to.Insert(reportInfo) if err != nil { fmt.Println("InsertReportErr:" + err.Error()) return } // 修改报告code reportCode := utils.MD5(strconv.Itoa(int(reportId))) sql := `UPDATE report SET report_code = ? WHERE id = ? ` if _, err = to.Raw(sql, reportCode, reportId).Exec(); err != nil { fmt.Println("UpdateReportCodeErr:" + err.Error()) return } // 新增权限 newReportId = int(reportId) if len(mappingList) > 0 { r := orm.NewOrm() for _, mapping := range mappingList { sql := ` INSERT INTO chart_permission_chapter_mapping (chart_permission_id, report_chapter_type_id,research_type) VALUES(?,?,?) ` if _, err = r.Raw(sql, mapping.ChartPermissionId, newReportId, "rddp").Exec(); err != nil { fmt.Println("InsertChartPermissionErr:" + err.Error()) return } } } return } type ChartPermissionChapterMapping struct { Id int `orm:"column(id);pk"` ChartPermissionId int `description:"权限ID"` ReportChapterTypeId int `description:"report_chapter_type表主键id或research_report表主键id或tactic表主键id"` ResearchType string `description:"报告类型 week;two_week;tactic;month;other;rddp; "` } func GetChapterPermissionMappingByCondition(reportChapterTypeId int, researchType string) (list []*ChartPermissionChapterMapping, err error) { o := orm.NewOrm() sql := ` SELECT * FROM chart_permission_chapter_mapping WHERE report_chapter_type_id = ? AND research_type = ? ` _, err = o.Raw(sql, reportChapterTypeId, researchType).QueryRows(&list) return } func GetChapterPermissionMappingByResearchReportIds(researchReportIds string) (list []*ChartPermissionChapterMapping, err error) { o := orm.NewOrm() sql := ` SELECT * FROM chart_permission_chapter_mapping WHERE report_chapter_type_id IN (` + researchReportIds + `) AND research_type != "rddp" ORDER BY report_chapter_type_id ASC ` _, err = o.Raw(sql).QueryRows(&list) return }