package models import ( "eta_gn/eta_task/global" "fmt" "strings" "time" ) // 报告状态 const ( ReportStateUnpublished = 1 // 未发布 ReportStatePublished = 2 // 已发布 ReportStateWaitSubmit = 3 // 待提交 ReportStateWaitApprove = 4 // 审批中 ReportStateRefused = 5 // 已驳回 ReportStatePass = 6 // 已通过 ) type Report struct { Id int `orm:"column(id)" description:"报告Id"` AddType int `description:"新增方式:1:新增报告,2:继承报告"` ClassifyIdFirst int `description:"一级分类id"` ClassifyNameFirst string `description:"一级分类名称"` ClassifyIdSecond int `description:"二级分类id"` ClassifyNameSecond 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:已发布"` PublishTime time.Time `description:"发布时间"` Stage int `description:"期数"` MsgIsSend int `description:"消息是否已发送,0:否,1:是"` Content string `description:"内容"` VideoUrl string `description:"音频文件URL"` VideoName string `description:"音频文件名称"` VideoPlaySeconds string `description:"音频播放时长"` ContentSub string `description:"内容前两个章节"` HasChapter int `description:"是否有章节 0-否 1-是"` ChapterType string `description:"章节类型 day-晨报 week-周报"` OldReportId int `description:"research_report表ID(后续一两个版本过渡需要,之后可移除)"` PreMsgSend int `description:"定时发布成功后是否立即推送模版消息:0否,1是"` AdminId int AdminName string `description:"系统用户名称"` ClassifyIdThird int `description:"三级分类id"` ClassifyNameThird string `description:"三级分类名称"` ReportSource int `gorm:"column:report_source" description:"报告来源:1-系统内;2-智力共享"` OutReportId string `gorm:"column:out_report_id" description:"外部报告ID(或编码)"` TopicEndTime time.Time `gorm:"column:topic_end_time" description:"课题结束时间"` } // //func GetReportById(reportId int) (item *ReportDetail, err error) { // o := orm.NewOrmUsingDB("rddp") // sql := `SELECT * FROM report WHERE id=?` // err = o.Raw(sql, reportId).QueryRow(&item) // return //} // //func GetReport() (items []*Report, err error) { // sql := `SELECT * FROM report ORDER BY id ASC ` // o := orm.NewOrmUsingDB("rddp") // _, err = o.Raw(sql).QueryRows(&items) // return //} // //func ModifyReportContentSub(id int, contentSub string) (err error) { // sql := `UPDATE report SET content_sub=? WHERE id=? ` // o := orm.NewOrmUsingDB("rddp") // _, err = o.Raw(sql, contentSub, id).Exec() // return //} // //func GetReportLimit() (items []*Report, err error) { // sql := `SELECT * FROM report WHERE state=2 ORDER BY id DESC LIMIT 50 ` // o := orm.NewOrmUsingDB("rddp") // _, err = o.Raw(sql).QueryRows(&items) // return //} // //func EditReportContent(reportId int, content, contentSub string) (err error) { // o := orm.NewOrmUsingDB("rddp") // sql := ` UPDATE report SET content=?,content_sub=?,modify_time=NOW() WHERE id=? ` // _, err = o.Raw(sql, content, contentSub, reportId).Exec() // return //} // //// 删除报告日志记录-保留3个月 //func DeleteReportSaveLog() { // startDateTime := time.Now().AddDate(0, -3, 0).Format(utils.FormatDateTime) // fmt.Println(startDateTime) //} // //func EditReportContentHtml(reportId int, content string) (err error) { // o := orm.NewOrmUsingDB("rddp") // sql := ` UPDATE report SET content=?,modify_time=NOW() WHERE id=? ` // _, err = o.Raw(sql, content, reportId).Exec() // return //} // GetPrePublishedReports 获取定时发布时间为当前时间的未发布的报告列表 func GetPrePublishedReports(startTime, endTime, afterDate string) (list []*Report, err error) { //o := orm.NewOrmUsingDB("rddp") //sql := `SELECT * FROM report WHERE state = 1 and pre_publish_time >= ? and pre_publish_time <=? and modify_time >= ?` //_, err = o.Raw(sql, startTime, endTime, afterDate).QueryRows(&list) sql := `SELECT * FROM report WHERE state = 1 and pre_publish_time >= ? and pre_publish_time <=? and modify_time >= ?` err = global.DmSQL["rddp"].Raw(sql, startTime, endTime, afterDate).Find(&list).Error return } // PublishReportById 发布报告 func PublishReportById(reportId int, publishTime time.Time) (err error) { //o := orm.NewOrmUsingDB("rddp") //sql := `UPDATE report SET state = 2, publish_time = ?, modify_time = NOW() WHERE id = ? ` //_, err = o.Raw(sql, publishTime, reportId).Exec() sql := `UPDATE report SET state = 2, publish_time = ?, modify_time = NOW() WHERE id = ? ` err = global.DmSQL["rddp"].Exec(sql, publishTime, reportId).Error return } type ReportDetail struct { Id int `orm:"column(id)" description:"报告Id"` AddType int `description:"新增方式:1:新增报告,2:继承报告"` ClassifyIdFirst int `description:"一级分类id"` ClassifyNameFirst string `description:"一级分类名称"` ClassifyIdSecond int `description:"二级分类id"` ClassifyNameSecond 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:"内容"` VideoUrl string `description:"音频文件URL"` VideoName string `description:"音频文件名称"` VideoPlaySeconds string `description:"音频播放时长"` ContentSub string `description:"内容前两个章节"` ThsMsgIsSend int `description:"客户群消息是否已发送,0:否,1:是"` HasChapter int `description:"是否有章节 0-否 1-是"` ChapterType string `description:"章节类型 day-晨报 week-周报"` OldReportId int `description:"research_report表ID(后续一两个版本过渡需要,之后可移除)"` PreMsgSend int `description:"定时发布成功后是否立即推送模版消息:0否,1是"` } func ModifyReportVideo(reportId int, videoUrl, videoName, videoSize string, playSeconds float64) (err error) { //o := orm.NewOrmUsingDB("rddp") //sql := `UPDATE report SET video_url=?,video_name=?,video_play_seconds=?,video_size=? WHERE id=? ` //_, err = o.Raw(sql, videoUrl, videoName, playSeconds, videoSize, reportId).Exec() sql := `UPDATE report SET video_url=?,video_name=?,video_play_seconds=?,video_size=? WHERE id=? ` err = global.DmSQL["rddp"].Exec(sql, videoUrl, videoName, playSeconds, videoSize, reportId).Error return } type ReportChapterTypePermission struct { Id int `gorm:"column:id;primaryKey"` // `orm:"column(id);pk" description:"主键ID"` ReportChapterTypeId int `description:"报告章节类型ID"` ReportChapterTypeName string `description:"章节名称"` ChartPermissionId int `description:"大分类ID"` PermissionName string `description:"权限名称"` ResearchType string `description:"研报类型"` CreatedTime time.Time `description:"创建时间"` } // //// GetChapterTypePermissionByTypeIdAndResearchType 根据章节类型ID及研报类型获取章节类型权限列表 //func GetChapterTypePermissionByTypeIdAndResearchType(typeId int, researchType string) (list []*ReportChapterTypePermission, err error) { // o := orm.NewOrm() // sql := ` SELECT * FROM report_chapter_type_permission WHERE report_chapter_type_id = ? AND research_type = ? ORDER BY chart_permission_id ASC ` // _, err = o.Raw(sql, typeId, researchType).QueryRows(&list) // return //} type ElasticReportDetail struct { ReportId int `description:"报告ID"` ReportChapterId int `description:"报告章节ID"` Title string `description:"标题"` Abstract string `description:"摘要"` BodyContent string `description:"内容"` PublishTime string `description:"发布时间"` PublishState int `description:"发布状态 1-未发布 2-已发布"` Author string `description:"作者"` ClassifyIdFirst int `description:"一级分类ID"` ClassifyNameFirst string `description:"一级分类名称"` ClassifyIdSecond int `description:"二级分类ID"` ClassifyNameSecond string `description:"二级分类名称"` ClassifyId int `description:"最小单元的分类ID"` ClassifyName string `description:"最小单元的分类名称"` Categories string `description:"关联的品种名称(包括品种别名)"` StageStr string `description:"报告期数"` } type ChartPermissionMappingIdName struct { PermissionId int PermissionName string } func GetChartPermissionNameFromMappingByKeyword(source string, classifyId int) (list []*ChartPermissionMappingIdName, err error) { //o := orm.NewOrmUsingDB("rddp") //sql := " SELECT b.chart_permission_id AS permission_id,b.permission_name FROM chart_permission_search_key_word_mapping AS a INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id WHERE a.`from` = ? AND a.classify_id = ? " //_, err = o.Raw(sql, source, classifyId).QueryRows(&list) sql := " SELECT b.chart_permission_id AS permission_id,b.permission_name FROM chart_permission_search_key_word_mapping AS a INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id WHERE a.`from` = ? AND a.classify_id = ? " err = global.DmSQL["rddp"].Raw(sql, source, classifyId).Find(&list).Error return } func UpdateReportPublishTime(reportId int, videoNameDate string) (err error) { //o := orm.NewOrmUsingDB("rddp") //sql1 := ` UPDATE report SET publish_time = NOW() WHERE id = ? ` //_, err = o.Raw(sql1, reportId).Exec() //if err != nil { // return //} ////修改音频标题 //sql2 := ` UPDATE report SET video_name=CONCAT(SUBSTRING_INDEX(video_name,"(",1),"` + videoNameDate + `") WHERE id = ? and (video_name !="" and video_name is not null)` //_, err = o.Raw(sql2, reportId).Exec() sql1 := ` UPDATE report SET publish_time = NOW() WHERE id = ? ` err = global.DmSQL["rddp"].Exec(sql1, reportId).Error if err != nil { return } //修改音频标题 sql2 := ` UPDATE report SET video_name=CONCAT(SUBSTRING_INDEX(video_name,"(",1),"` + videoNameDate + `") WHERE id = ? and (video_name !='' and video_name is not null)` err = global.DmSQL["rddp"].Exec(sql2, reportId).Error return } func UpdateReportChapterPublishTime(reportId int, videoNameDate string) (err error) { //o := orm.NewOrmUsingDB("rddp") //sql1 := ` UPDATE report_chapter SET publish_time = NOW() WHERE report_id = ? ` //_, err = o.Raw(sql1, reportId).Exec() //if err != nil { // return //} ////修改音频标题 //sql2 := ` UPDATE report_chapter SET video_name=CONCAT(SUBSTRING_INDEX(video_name,"(",1),"` + videoNameDate + `") WHERE report_id = ? and (video_name !="" and video_name is not null)` //_, err = o.Raw(sql2, reportId).Exec() sql1 := ` UPDATE report_chapter SET publish_time = NOW() WHERE report_id = ? ` err = global.DmSQL["rddp"].Exec(sql1, reportId).Error if err != nil { return } //修改音频标题 sql2 := ` UPDATE report_chapter SET video_name=CONCAT(SUBSTRING_INDEX(video_name,"(",1),"` + videoNameDate + `") WHERE report_id = ? and (video_name !='' and video_name is not null)` err = global.DmSQL["rddp"].Exec(sql2, reportId).Error return } func ModifyReportMsgIsSend(reportId int) (err error) { //o := orm.NewOrmUsingDB("rddp") //sql := `UPDATE report SET msg_is_send = 1, msg_send_time=NOW() WHERE id = ? and msg_is_send=0` //_, err = o.Raw(sql, reportId).Exec() sql := `UPDATE report SET msg_is_send = 1, msg_send_time=NOW() WHERE id = ? and msg_is_send=0` err = global.DmSQL["rddp"].Exec(sql, reportId).Error return } // ClearReportSaveLog 清理报告保存日志 func ClearReportSaveLog(date string) (err error) { //o := orm.NewOrmUsingDB("rddp") //sql := `DELETE FROM report_save_log WHERE create_time <= ?` //_, err = o.Raw(sql, date).Exec() sql := `DELETE FROM report_save_log WHERE create_time <= ?` err = global.DmSQL["rddp"].Exec(sql, date).Error return } // PublishReportAndChapter 发布报告及章节 func PublishReportAndChapter(reportInfo *Report, isPublishReport bool, cols []string) (err error) { //o := orm.NewOrmUsingDB("rddp") //to, err := o.Begin() //if err != nil { // return //} //defer func() { // if err != nil { // _ = to.Rollback() // } else { // _ = to.Commit() // } //}() to := global.DmSQL["rddp"].Begin() defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() // 更新报告 if isPublishReport { err = to.Select(cols).Updates(reportInfo).Error if err != nil { return } } // 发布该报告的所有章节 //sql := ` UPDATE report_chapter SET publish_state = 2, publish_time = ? WHERE report_id = ? ` //_, err = to.Raw(sql, reportInfo.PublishTime, reportInfo.Id).Exec() sql := ` UPDATE report_chapter SET publish_state = 2, publish_time = ? WHERE report_id = ? ` err = to.Exec(sql, reportInfo.PublishTime, reportInfo.Id).Error // 发布章节 //if len(publishIds) > 0 { // sql := ` UPDATE report_chapter SET publish_state = 2, publish_time = ? WHERE report_id = ? AND report_chapter_id IN (` + utils.GetOrmInReplace(len(publishIds)) + `) ` // _, err = to.Raw(sql, reportInfo.PublishTime, reportInfo.Id, publishIds).Exec() //} //if len(unPublishIds) > 0 { // sql := ` UPDATE report_chapter SET publish_state = 1, publish_time = NULL, is_edit = 0 WHERE report_id = ? AND report_chapter_id IN (` + utils.GetOrmInReplace(len(unPublishIds)) + `) ` // _, err = to.Raw(sql, reportInfo.Id, unPublishIds).Exec() //} return } func (m *Report) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*Report, 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 report WHERE 1=1 %s %s`, fields, condition, order) err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error return }