knowledge_resource.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package models
  2. import (
  3. "eta_gn/eta_report/global"
  4. "eta_gn/eta_report/utils"
  5. "fmt"
  6. "time"
  7. )
  8. const (
  9. // 事件类型-事件库
  10. KnowledgeResourceTypeEvent = iota
  11. // 事件-政策库
  12. KnowledgeResourceTypePolicy
  13. // 事件-报告库
  14. KnowledgeResourceTypeReport
  15. // 事件类型-知识库
  16. KnowledgeResourceTypeKnow
  17. // 事件-观点库
  18. KnowledgeResourceTypeOpinion
  19. )
  20. const (
  21. // 未发布
  22. KnowledgeResourceStateUnpublished = iota
  23. // 已发布
  24. KnowledgeResourceStatePublished
  25. // 待审批
  26. KnowledgeResourceStatePending
  27. // 已驳回
  28. KnowledgeResourceStateRejected
  29. // 已通过
  30. KnowledgeResourceStateApproved
  31. )
  32. const (
  33. // 内部
  34. KnowledgeOutSourceInternal = iota
  35. // 智力共享
  36. KnowledgeOutSourceIntelligence
  37. // 数据节点
  38. KnowledgeOutSourceDataNode
  39. )
  40. type KnowledgeResourceFile struct {
  41. KnowledgeResourceFileId int `gorm:"column:knowledge_resource_file_id;primaryKey;autoIncrement"`
  42. KnowledgeResourceId int `gorm:"column:knowledge_resource_id"`
  43. FileUrl string `gorm:"column:file_url"`
  44. }
  45. func (k KnowledgeResourceFile) TableName() string {
  46. return "knowledge_resource_file"
  47. }
  48. type KnowledgeResource struct {
  49. KnowledgeResourceId int `gorm:"column:knowledge_resource_id;;primaryKey;autoIncrement"`
  50. ResourceType int `gorm:"column:resource_type;"`
  51. ClassifyId int `gorm:"column:classify_id"`
  52. Title string `gorm:"column:title;"`
  53. CreateTime time.Time `gorm:"column:create_time" description:"创建时间"`
  54. ModifyTime time.Time `gorm:"column:modify_time;autoUpdateTime" description:"修改时间"`
  55. State int `gorm:"column:state" description:"0:未发布;1:已发布;2:待审批;3:已驳回;4:已通过"`
  56. Content string `gorm:"column:content"`
  57. ResourceCode string `gorm:"column:resource_code"`
  58. AdminId int `gorm:"column:admin_id" description:"创建者账号"`
  59. AdminRealName string `gorm:"column:admin_real_name" description:"创建者姓名"`
  60. SourceFrom string `gorm:"column:source_from"`
  61. TagId int `gorm:"column:tag_id;default:0;NOT NULL"`
  62. StartTime *time.Time `gorm:"column:start_time"`
  63. EndTime *time.Time `gorm:"column:end_time"`
  64. IsFile int `gorm:"column:is_file;default:0;NOT NULL"`
  65. FileUrl string `gorm:"column:file_url"`
  66. OutId int `gorm:"column:out_id" description:"外部系统ID"`
  67. IsDelete int `gorm:"column:is_delete;default:0;NOT NULL"`
  68. OutSource int `gorm:"column:out_source" description:"外部来源:0:内部 1:智力共享 2:数据节点"`
  69. EmailUid string `gorm:"column:email_uid" description:"邮件的UID"`
  70. }
  71. func (k KnowledgeResource) TableName() string {
  72. return "knowledge_resource"
  73. }
  74. func (k *KnowledgeResource) Create(fileUrl []string) (err error) {
  75. tx := global.DEFAULT_DmSQL.Begin()
  76. defer func() {
  77. if err != nil {
  78. tx.Rollback()
  79. } else {
  80. tx.Commit()
  81. }
  82. }()
  83. err = tx.Create(k).Error
  84. if len(fileUrl) > 0 {
  85. addFile := make([]*KnowledgeResourceFile, 0, len(fileUrl))
  86. for _, url := range fileUrl {
  87. file := new(KnowledgeResourceFile)
  88. file.KnowledgeResourceId = k.KnowledgeResourceId
  89. file.FileUrl = url
  90. addFile = append(addFile, file)
  91. }
  92. err = tx.CreateInBatches(addFile, utils.MultiAddNum).Error
  93. }
  94. return
  95. }
  96. func (k *KnowledgeResource) Update(cols []string) error {
  97. return global.DEFAULT_DmSQL.Model(k).Select(cols).Updates(k).Error
  98. }
  99. // GetKnowledgeResourceByOutId 根据外部系统ID获取知识资源
  100. func (k *KnowledgeResource) GetKnowledgeResourceByOutId(outId int) (item *KnowledgeResource, err error) {
  101. sql := "SELECT * FROM knowledge_resource WHERE out_id = ?"
  102. err = global.DEFAULT_DmSQL.Raw(sql, outId).First(&item).Error
  103. return
  104. }
  105. type KnowledgeClassify struct {
  106. ClassifyId int `gorm:"primaryKey;column:classify_id"`
  107. ClassifyName string `gorm:"column:classify_name;default:'';type:varchar(125);not null"` // 注意:varchar的默认长度可能需要根据实际情况调整
  108. Sort int `gorm:"column:sort;default:0;type:tinyint"`
  109. ParentId int `gorm:"column:parent_id;default:0;type:int"`
  110. CreateTime time.Time `gorm:"column:create_time;default:CURRENT_TIMESTAMP"`
  111. ModifyTime time.Time `gorm:"column:modify_time;default:CURRENT_TIMESTAMP"`
  112. Enabled int `gorm:"column:enabled;default:1;type:tinyint"`
  113. Level int `gorm:"column:level;default:0;type:bigint"`
  114. ResourceType int `gorm:"column:resource_type;default:0;not null;type:tinyint"`
  115. }
  116. func (k KnowledgeClassify) TableName() string {
  117. return "knowledge_classify"
  118. }
  119. func (k *KnowledgeClassify) Create() error {
  120. return global.DEFAULT_DmSQL.Create(k).Error
  121. }
  122. func (k *KnowledgeClassify) GetClassifyByNameTypeAndParentId(classifyName string, resourceType, parentId int) (items *KnowledgeClassify, err error) {
  123. sql := "SELECT * FROM knowledge_classify WHERE classify_name = ? AND resource_type = ? AND parent_id = ?"
  124. err = global.DEFAULT_DmSQL.Raw(sql, classifyName, resourceType, parentId).First(&items).Error
  125. return
  126. }
  127. func (k *KnowledgeClassify) GetClassifysByNameAndType(classifyName string, resourceType int) (item *KnowledgeClassify, err error) {
  128. sql := "SELECT * FROM knowledge_classify WHERE classify_name = ? AND resource_type = ?"
  129. err = global.DEFAULT_DmSQL.Raw(sql, classifyName, resourceType).Find(&item).Error
  130. return
  131. }
  132. func (k *KnowledgeClassify) GetChildClassifyIdByNamePath(resourceType int, classifyNameFirst string, classifyNameSecond string, classifyNameThird string) (id int, err error) {
  133. sql := `SELECT
  134. c3.classify_id AS id
  135. FROM knowledge_classify c1
  136. JOIN knowledge_classify c2 ON c2.parent_id = c1.classify_id
  137. AND c2.classify_name = ?
  138. AND c2.level = 2
  139. JOIN knowledge_classify c3 ON c3.parent_id = c2.classify_id
  140. AND c3.classify_name = ?
  141. AND c3.level = 3
  142. WHERE c1.classify_name = ?
  143. AND c1.level = 1 AND c1.resource_type = ?`
  144. err = global.DEFAULT_DmSQL.Raw(sql, classifyNameSecond, classifyNameThird, classifyNameFirst, resourceType).Scan(&id).Error
  145. return
  146. }
  147. func (k *KnowledgeResource) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  148. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, k.TableName(), condition)
  149. err = global.DEFAULT_DmSQL.Raw(sql, pars...).Scan(&count).Error
  150. return
  151. }