package knowledge import ( "eta_gn/eta_api/global" "eta_gn/eta_api/utils" "fmt" "github.com/rdlucklib/rdluck_tools/paging" "gorm.io/gorm" "strings" "time" ) const ( // 事件类型-事件库 KnowledgeResourceTypeEvent = 0 // 事件-政策库 KnowledgeResourceTypePolicy = 1 // 事件-观点库 KnowledgeResourceTypeOpinion = 2 // 事件类型-知识库 KnowledgeResourceTypeKnow = 3 ) type KnowledgeResource struct { KnowledgeResourceId int `gorm:"column:knowledge_resource_id;;primaryKey;autoIncrement"` ResourceType int `gorm:"column:resource_type;"` ClassifyId int `gorm:"column:classify_id"` Title string `gorm:"column:title;"` CreateTime time.Time `gorm:"column:create_time" description:"创建时间"` ModifyTime time.Time `gorm:"column:modify_time;autoUpdateTime" description:"修改时间"` State int `gorm:"column:state" description:"0:未发布;1:已发布;"` Content string `gorm:"column:content"` ResourceCode string `gorm:"column:resource_code"` AdminId int `gorm:"column:admin_id" description:"创建者账号"` AdminRealName string `gorm:"column:admin_real_name" description:"创建者姓名"` SourceFrom string `gorm:"column:source_from"` TagId int `gorm:"column:tag_id;default:0;NOT NULL"` StartTime *time.Time `gorm:"column:start_time"` EndTime *time.Time `gorm:"column:end_time"` IsFile int `gorm:"column:is_file;default:0;NOT NULL"` FileUrl string `gorm:"column:file_url"` } func (m *KnowledgeResource) TableName() string { return "knowledge_resource" } // 查询列表 func (m *KnowledgeResource) QueryList(condition string, pars []interface{}) (items []*KnowledgeResource, err error) { return } type KnowledgeResourceList struct { KnowledgeResourceId int `gorm:"column:knowledge_resource_id;;primaryKey;autoIncrement"` ResourceType int `gorm:"column:resource_type;"` ClassifyId int `gorm:"column:classify_id"` Title string `gorm:"column:title;"` CreateTime string `gorm:"column:create_time" description:"创建时间"` ModifyTime string `gorm:"column:modify_time;autoUpdateTime" description:"修改时间"` State int `gorm:"column:state" description:"1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"` ResourceCode string `gorm:"column:resource_code"` AdminId int `gorm:"column:admin_id" description:"创建者账号"` AdminRealName string `gorm:"column:admin_real_name" description:"创建者姓名"` SourceFrom string `gorm:"column:source_from"` TagId int `gorm:"column:tag_id;default:0;NOT NULL"` StartTime string `gorm:"column:start_time"` EndTime string `gorm:"column:end_time"` ClassifyFullName string TagName string // todo 是否需要记录最后更新人 /*DetailImgUrl string `gorm:"column:detail_img_url" description:"事件详情长图地址"` DetailPdfUrl string `gorm:"column:detail_pdf_url" description:"事件详情PDF地址"` LastModifyAdminId int `gorm:"column:last_modify_admin_id" description:"最后更新人ID"` LastModifyAdminName string `gorm:"column:last_modify_admin_name" description:"最后更新人姓名"` ContentModifyTime time.Time `gorm:"column:content_modify_time" description:"内容更新时间"`*/ } type KnowledgeResourceListResp struct { List []*KnowledgeResourceList Paging *paging.PagingItem `description:"分页数据"` } func GetKnowledgeResourceList(condition string, pars []interface{}, startSize, pageSize int) (items []*KnowledgeResource, err error) { sql := `SELECT * FROM knowledge_resource WHERE 1=1 ` if condition != "" { sql += condition } // 排序:1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过 sql += `ORDER BY modify_time DESC LIMIT ?,?` //_, err = o.Raw(sql, pars...).QueryRows(&items) pars = append(pars, startSize) pars = append(pars, pageSize) err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error return } func GetKnowledgeResourceListCount(condition string, pars []interface{}) (count int, err error) { //oRddp := orm.NewOrmUsingDB("rddp") sql := `SELECT COUNT(1) AS count FROM knowledge_resource WHERE 1=1 ` if condition != "" { sql += condition } //err = oRddp.Raw(sql, pars).QueryRow(&count) err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error return } func (m *KnowledgeResource) Delete(knowledgeResourceIds int) (err error) { sql := ` DELETE FROM knowledge_resource WHERE knowledge_resource_id =? ` //_, err = o.Raw(sql, knowledgeResourceIds).Exec() err = global.DmSQL["rddp"].Exec(sql, knowledgeResourceIds).Error return } func (m *KnowledgeResource) GetById(knowledgeResourceId int) (item *KnowledgeResource, err error) { sql := `SELECT * FROM knowledge_resource WHERE knowledge_resource_id =?` //err = o.Raw(sql, knowledgeResourceId).QueryRow(&item) err = global.DmSQL["rddp"].Raw(sql, knowledgeResourceId).First(&item).Error return } // GetSimpleKnowledgeResourceByIds 根据事件ID查询事件基本信息 func GetSimpleKnowledgeResourceByIds(knowledgeResourceIds []int) (list []*KnowledgeResource, err error) { if len(knowledgeResourceIds) == 0 { return } sql := `SELECT id, title, resource_code FROM knowledge_resource WHERE knowledge_resource_id IN (` + utils.GetOrmInReplace(len(knowledgeResourceIds)) + `)` //_, err = o.Raw(sql, knowledgeResourceIds).QueryRows(&list) err = global.DmSQL["rddp"].Raw(sql, knowledgeResourceIds).Find(&list).Error return } type DeleteReq struct { KnowledgeResourceId int `description:"事件id"` } type AddReq struct { ResourceType int `gorm:"column:resource_type;"` ClassifyId int `gorm:"column:classify_id"` Title string `gorm:"column:title;"` State int `gorm:"column:state" description:"1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"` Content string `gorm:"column:content"` SourceFrom string `gorm:"column:source_from"` TagId int `gorm:"column:tag_id;default:0;NOT NULL"` StartTime string `gorm:"column:start_time"` EndTime string `gorm:"column:end_time"` FileUrl string `gorm:"column:file_url"` } type AddResp struct { KnowledgeResourceId int `description:"事件id"` ResourceCode string `description:"事件code"` } func (m *KnowledgeResource) Add(item *KnowledgeResource) (err error) { err = global.DmSQL["rddp"].Create(item).Error return } func (m *KnowledgeResource) AddBatch(item []*KnowledgeResource) (err error) { err = global.DmSQL["rddp"].CreateInBatches(item, 50).Error return } type EditReq struct { KnowledgeResourceId int64 `description:"事件id"` AddReq } type EditResp struct { KnowledgeResourceId int64 `description:"事件id"` ResourceCode string `description:"事件code"` } type ReportDetailReq struct { KnowledgeResourceId int `description:"事件id"` } type ClassifyIdDetailReq struct { ClassifyIdFirst int `description:"事件一级分类id"` ClassifyIdSecond int `description:"事件二级分类id"` } func GetReportDetailByClassifyId(classifyIdFirst, classifyIdSecond int) (item *KnowledgeResource, err error) { sql := ` SELECT * FROM knowledge_resource WHERE 1=1 ` if classifyIdSecond > 0 { sql = sql + ` AND classify_id_second=? ORDER BY stage DESC LIMIT 1` //err = o.Raw(sql, classifyIdSecond).QueryRow(&item) err = global.DmSQL["rddp"].Raw(sql, classifyIdSecond).First(&item).Error } else { sql = sql + ` AND classify_id_first=? ORDER BY stage DESC LIMIT 1` //err = o.Raw(sql, classifyIdFirst).QueryRow(&item) err = global.DmSQL["rddp"].Raw(sql, classifyIdFirst).First(&item).Error } return } type SaveReportContent struct { Content string `description:"内容"` KnowledgeResourceId int `description:"事件id"` NoChange int `description:"内容是否未改变:1:内容未改变"` // 以下是智能研报相关 ContentStruct string `description:"内容组件"` HeadImg string `description:"事件头图地址"` EndImg string `description:"事件尾图地址"` CanvasColor string `description:"画布颜色"` NeedSplice int `description:"是否拼接版头版位的标记,主要是为了兼容历史事件。0-不需要 1-需要"` HeadResourceId int `description:"版头资源ID"` EndResourceId int `description:"版尾资源ID"` } func AddReportSaveLog(knowledgeResourceId, adminId int, content, contentSub, contentStruct, canvasColor, adminName string, headResourceId, endResourceId int) (err error) { sql := ` INSERT INTO knowledge_resource_save_log(knowledge_resource_id, content,content_sub,content_struct,canvas_color,head_resource_id,end_resource_id,admin_id,admin_name) VALUES (?,?,?,?,?,?,?,?,?) ` //_, err = o.Raw(sql, knowledgeResourceId, content, contentSub, contentStruct, canvasColor, headResourceId, endResourceId, adminId, adminName).Exec() err = global.DmSQL["rddp"].Exec(sql, knowledgeResourceId, content, contentSub, contentStruct, canvasColor, headResourceId, endResourceId, adminId, adminName).Error return } type SaveReportContentResp struct { KnowledgeResourceId int `description:"事件id"` } func ModifyResourceCode(knowledgeResourceId int64, resourceCode string) (err error) { sql := `UPDATE knowledge_resource SET resource_code=? WHERE knowledge_resource_id =? ` err = global.DmSQL["rddp"].Exec(sql, resourceCode, knowledgeResourceId).Error return } // SaveDayWeekReportReq 新增晨报周报请求体 type SaveDayWeekReportReq struct { KnowledgeResourceId int `description:"事件ID"` Title string `description:"标题"` ReportType string `description:"一级分类ID"` Author string `description:"作者"` CreateTime string `description:"创建时间"` } // UpdateReport 更新事件 func (m *KnowledgeResource) Update(cols []string) (err error) { //_, err = o.Update(reportInfo, cols...) err = global.DmSQL["rddp"].Select(cols).Updates(m).Error return } type ElasticReportDetail struct { gorm.Model KnowledgeResourceId int `gorm:"column:knowledge_resource_id;index" description:"事件ID"` Title string `gorm:"column:title" description:"标题"` Abstract string `gorm:"column:abstract" description:"摘要"` BodyContent string `gorm:"column:body_content" description:"内容"` ClassifyId int `gorm:"column:classify_id" description:"最小单元的分类ID"` ClassifyName string `gorm:"column:classify_name" description:"最小单元的分类名称"` } // UpdateReportSecondClassifyNameByClassifyId 更新事件分类名称字段 func UpdateReportSecondClassifyNameByClassifyId(classifyId int, classifyName string) (err error) { sql := " UPDATE knowledge_resource SET classify_name_second = ? WHERE classify_id_second = ? " //_, err = o.Raw(sql, classifyName, classifyId).Exec() err = global.DmSQL["rddp"].Exec(sql, classifyName, classifyId).Error return } // UpdateReportFirstClassifyNameByClassifyId 更新事件分类一级名称字段 func UpdateReportFirstClassifyNameByClassifyId(classifyId int, classifyName string) (err error) { sql := " UPDATE knowledge_resource SET classify_name_first = ? WHERE classify_id_first = ? " //_, err = o.Raw(sql, classifyName, classifyId).Exec() err = global.DmSQL["rddp"].Exec(sql, classifyName, classifyId).Error return } // UpdateReportThirdClassifyNameByClassifyId 更新事件的三级分类名称字段 func UpdateReportThirdClassifyNameByClassifyId(classifyId int, classifyName string) (err error) { sql := " UPDATE knowledge_resource SET classify_name_third = ? WHERE classify_id_third = ? " //_, err = o.Raw(sql, classifyName, classifyId).Exec() err = global.DmSQL["rddp"].Exec(sql, classifyName, classifyId).Error return } // MarkEditReport 标记编辑英文研报的请求数据 type MarkEditReport struct { KnowledgeResourceId int `description:"研报id"` ReportChapterId int `description:"研报章节id"` Status int `description:"标记状态,1:编辑中,2:查询状态,3:编辑完成"` } type MarkReportResp struct { Status int `description:"状态:0:无人编辑, 1:当前有人在编辑"` Msg string `description:"提示信息"` Editor string `description:"编辑者姓名"` } type MarkReportItem struct { AdminId int `description:"编辑者ID"` Editor string `description:"编辑者姓名"` ReportClassifyNameFirst string } // GetReportByCondition 获取事件 func GetReportByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, isPage bool, startSize, pageSize int) (items []*KnowledgeResource, err error) { fields := `*` if len(fieldArr) > 0 { fields = strings.Join(fieldArr, ",") } sql := `SELECT ` + fields + ` FROM knowledge_resource WHERE 1=1 ` sql += condition order := ` ORDER BY modify_time DESC` if orderRule != `` { order = orderRule } sql += order if isPage { sql += ` LIMIT ?,?` //_, err = o.Raw(sql, pars...).QueryRows(&items) err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error } else { //_, err = o.Raw(sql, pars).QueryRows(&items) err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error } return } // SetPrePublishReportById 设置定时发布 func SetPrePublishReportById(knowledgeResourceId int, prePublishTime string, preMsgSend int) (err error) { sql := `UPDATE knowledge_resource SET pre_publish_time=?, pre_msg_send=? WHERE knowledge_resource_id = ? and state = 1 ` //_, err = o.Raw(sql, prePublishTime, preMsgSend, knowledgeResourceId).Exec() err = global.DmSQL["rddp"].Exec(sql, prePublishTime, preMsgSend, knowledgeResourceId).Error return } // UpdateReportsStateBySecondIds 批量更新二级分类事件状态 func UpdateReportsStateBySecondIds(oldState, newState int, secondIds []int) (err error) { if len(secondIds) <= 0 { return } // (有审批流的)未发布->待提交 sql := fmt.Sprintf(`UPDATE knowledge_resource SET state = ?, pre_publish_time = NULL WHERE state = ? AND classify_id_second IN (%s)`, utils.GetOrmInReplace(len(secondIds))) //_, err = o.Raw(sql, newState, oldState, secondIds).Exec() err = global.DmSQL["rddp"].Exec(sql, newState, oldState, secondIds).Error if err != nil { return } // (无审批流的)待提交->未发布 sql = fmt.Sprintf(`UPDATE knowledge_resource SET state = ?, pre_publish_time = NULL WHERE state = ? AND classify_id_second NOT IN (%s)`, utils.GetOrmInReplace(len(secondIds))) //_, err = o.Raw(sql, oldState, newState, secondIds).Exec() err = global.DmSQL["rddp"].Exec(sql, oldState, newState, secondIds).Error return } func (m *KnowledgeResource) AddMulti(items []*KnowledgeResource) (err error) { err = global.DmSQL["rddp"].CreateInBatches(items, utils.MultiAddNum).Error return } func (m *KnowledgeResource) GetSourceFrom(keyword string, resource_type int) (items []string, err error) { sql := fmt.Sprintf(`SELECT distinct source_from FROM %s WHERE 1=1 and resource_type=? `, m.TableName()) if keyword != `` { sql += ` AND source_from LIKE '%` + keyword + `%'` } err = global.DmSQL["rddp"].Raw(sql, resource_type).Scan(&items).Error return } type KnowledgeResourceDetailView struct { *KnowledgeResource } type ResourceImportData struct { Title string `description:"标题"` StartDate string `description:"开始日期"` EndDate string `description:"开始时间"` StartTime string `description:"结束日期"` EndTime string `description:"结束时间"` Content string `description:"正文"` Tag string `description:"标签"` SourceFrom string `description:"来源"` ClassifyFirstName string `description:"一级分类"` ClassifySecondName string `description:"二级分类"` ClassifyThirdName string `description:"三级分类"` } type UpdateResourceResp struct { FileUrl string `description:"文件地址"` } type GetSourceFromResp struct { List []string `description:"来源列表"` }