sa_compare.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582
  1. package semantic_analysis
  2. import (
  3. "eta_gn/eta_api/global"
  4. "eta_gn/eta_api/utils"
  5. "fmt"
  6. "github.com/rdlucklib/rdluck_tools/paging"
  7. "strings"
  8. "time"
  9. )
  10. //type SaCompare struct {
  11. // SaCompareId int `orm:"column(sa_compare_id);pk" description:"比对ID"`
  12. // ClassifyId int `description:"比对分类ID"`
  13. // ClassifyName string `description:"比对分类名称"`
  14. // Title string `description:"标题"`
  15. // ResultImg string `description:"比对结果图片"`
  16. // SysAdminId int `description:"创建人ID"`
  17. // SysAdminName string `description:"创建人姓名"`
  18. // Sort int `description:"排序"`
  19. // CreateTime time.Time `description:"创建时间"`
  20. // ModifyTime time.Time `description:"修改时间"`
  21. //}
  22. type SaCompare struct {
  23. SaCompareId int `gorm:"primaryKey;column:sa_compare_id;type:int(10) unsigned;not null"` // 语义分析-比对Id
  24. ClassifyId int `gorm:"index:idx_classify_id;column:classify_id;type:int(10) unsigned;not null;default:0"` // 比对分类Id
  25. ClassifyName string `gorm:"column:classify_name;type:varchar(128);not null;default:''"` // 比对分类名称
  26. Title string `gorm:"column:title;type:varchar(255);not null;default:''"` // 分析标题
  27. ResultImg string `gorm:"column:result_img;type:varchar(255);not null;default:''"` // 比对结果图片
  28. SysAdminId int `gorm:"column:sys_admin_id;type:int(10) unsigned;not null;default:0"` // 创建人Id
  29. SysAdminName string `gorm:"column:sys_admin_name;type:varchar(128);not null;default:''"` // 创建人姓名
  30. Sort int `gorm:"column:sort;type:int(10) unsigned;not null;default:0"` // 排序
  31. CreateTime time.Time `gorm:"column:create_time;type:datetime"` // 创建时间
  32. ModifyTime time.Time `gorm:"column:modify_time;type:datetime"` // 更新时间
  33. }
  34. var SaCompareColumns = struct {
  35. SaCompareId string
  36. ClassifyId string
  37. ClassifyName string
  38. Title string
  39. ResultImg string
  40. SysAdminId string
  41. SysAdminName string
  42. Sort string
  43. CreateTime string
  44. ModifyTime string
  45. }{
  46. SaCompareId: "sa_compare_id",
  47. ClassifyId: "classify_id",
  48. ClassifyName: "classify_name",
  49. Title: "title",
  50. ResultImg: "result_img",
  51. SysAdminId: "sys_admin_id",
  52. SysAdminName: "sys_admin_name",
  53. Sort: "sort",
  54. CreateTime: "create_time",
  55. ModifyTime: "modify_time",
  56. }
  57. func (m *SaCompare) TableName() string {
  58. return "sa_compare"
  59. }
  60. func (m *SaCompare) Create() (err error) {
  61. //o := orm.NewOrm()
  62. //id, err := o.Insert(m)
  63. //if err != nil {
  64. // return
  65. //}
  66. //m.SaCompareId = int(id)
  67. err = global.DEFAULT_DmSQL.Create(m).Error
  68. return
  69. }
  70. func (m *SaCompare) Update(cols []string) (err error) {
  71. //o := orm.NewOrm()
  72. //_, err = o.Update(m, cols...)
  73. err = global.DEFAULT_DmSQL.Select(cols).Updates(m).Error
  74. return
  75. }
  76. func (m *SaCompare) Del() (err error) {
  77. //o := orm.NewOrm()
  78. sql := `DELETE FROM sa_compare WHERE sa_compare_id = ? LIMIT 1`
  79. //_, err = o.Raw(sql, m.SaCompareId).Exec()
  80. err = global.DEFAULT_DmSQL.Exec(sql, m.SaCompareId).Error
  81. return
  82. }
  83. func (m *SaCompare) GetItemById(id int) (err error) {
  84. //o := orm.NewOrm()
  85. sql := `SELECT * FROM sa_compare WHERE sa_compare_id = ? LIMIT 1`
  86. //err = o.Raw(sql, id).QueryRow(&m)
  87. err = global.DEFAULT_DmSQL.Raw(sql, id).First(&m).Error
  88. return
  89. }
  90. func (m *SaCompare) GetItemByCondition(condition string, pars []interface{}) (err error) {
  91. //o := orm.NewOrm()
  92. sql := `SELECT * FROM sa_compare WHERE 1=1 `
  93. sql += condition
  94. sql += ` LIMIT 1`
  95. //err = o.Raw(sql, pars).QueryRow(&m)
  96. err = global.DEFAULT_DmSQL.Raw(sql, pars...).First(&m).Error
  97. return
  98. }
  99. func (m *SaCompare) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  100. //o := orm.NewOrm()
  101. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
  102. //err = o.Raw(sql, pars).QueryRow(&count)
  103. err = global.DEFAULT_DmSQL.Raw(sql, pars...).Scan(&count).Error
  104. return
  105. }
  106. func (m *SaCompare) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*SaCompare, err error) {
  107. //o := orm.NewOrm()
  108. fields := strings.Join(fieldArr, ",")
  109. if len(fieldArr) == 0 {
  110. fields = `*`
  111. }
  112. order := `ORDER BY create_time DESC`
  113. if orderRule != "" {
  114. order = ` ORDER BY ` + orderRule
  115. }
  116. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  117. //_, err = o.Raw(sql, pars).QueryRows(&items)
  118. err = global.DEFAULT_DmSQL.Raw(sql, pars...).Find(&items).Error
  119. return
  120. }
  121. func (m *SaCompare) GetPageItemsByCondition(startSize, pageSize int, condition string, pars []interface{}, fieldArr []string, orderRule string) (total int, items []*SaCompare, err error) {
  122. //o := orm.NewOrm()
  123. fields := strings.Join(fieldArr, ",")
  124. if len(fieldArr) == 0 {
  125. fields = `*`
  126. }
  127. order := `ORDER BY create_time DESC`
  128. if orderRule != "" {
  129. order = ` ORDER BY ` + orderRule
  130. }
  131. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  132. totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z`
  133. //if err = o.Raw(totalSql, pars).QueryRow(&total); err != nil {
  134. // return
  135. //}
  136. err = global.DEFAULT_DmSQL.Raw(totalSql, pars...).Scan(&total).Error
  137. if err != nil {
  138. return
  139. }
  140. sql += ` LIMIT ?,?`
  141. //_, err = o.Raw(sql, pars...).QueryRows(&items)
  142. pars = append(pars, startSize, pageSize)
  143. err = global.DEFAULT_DmSQL.Raw(sql, pars...).Find(&items).Error
  144. return
  145. }
  146. // SaCompareSaveReq 比对保存请求体
  147. type SaCompareSaveReq struct {
  148. SaCompareId int `description:"比对ID"`
  149. Title string `description:"标题"`
  150. ClassifyId int `description:"分类ID"`
  151. CompareList []struct {
  152. SaDocId int `description:"文档ID"`
  153. SectionList []struct {
  154. SaDocSectionId int `description:"段落ID"`
  155. IsPart int `description:"是否为片段: 0-整段; 1-片段"`
  156. StartIndex int `description:"片段开始下标"`
  157. EndIndex int `description:"片段结束下标"`
  158. Content string `description:"打标签的内容"`
  159. LabelIds []int `description:"标签IDs"`
  160. } `description:"段落标签信息"`
  161. } `description:"比对列表"`
  162. }
  163. // SaCompareSaveResp 比对保存响应体
  164. type SaCompareSaveResp struct {
  165. SaCompareId int `description:"比对ID"`
  166. TitleList []string `description:"标题列表"`
  167. LabelList []*SaCompareSaveRespLabel `description:"标签列表"`
  168. //ThemeList []string `description:"主题列表"`
  169. }
  170. // SaCompareSaveRespLabel 比对响应标签
  171. type SaCompareSaveRespLabel struct {
  172. SaLabelId int `description:"标签ID"`
  173. LabelName string `description:"标签名称"`
  174. DocList []*SaCompareSaveRespDoc `description:"文档列表"`
  175. }
  176. // SaCompareSaveRespDoc 比对响应文档
  177. type SaCompareSaveRespDoc struct {
  178. SaDocId int `description:"文档ID"`
  179. Title string `description:"文档标题"`
  180. SectionList []*SaCompareSaveRespSection `description:"段落列表"`
  181. }
  182. // SaCompareSaveRespSection 比对响应段落
  183. type SaCompareSaveRespSection struct {
  184. SaDocSectionId int `description:"段落ID"`
  185. IsPart int `description:"是否为片段: 0-否 1-是"`
  186. Content string `description:"段落内容"`
  187. }
  188. type SaComparePageListResp struct {
  189. List []*SaCompareItem
  190. Paging *paging.PagingItem `description:"分页数据"`
  191. }
  192. type SaCompareItem struct {
  193. SaCompareId int `description:"比对ID"`
  194. ClassifyId int `description:"比对分类ID"`
  195. ClassifyName string `description:"比对分类名称"`
  196. Title string `description:"标题"`
  197. ResultImg string `description:"比对结果图片"`
  198. SysAdminId int `description:"创建人ID"`
  199. SysAdminName string `description:"创建人姓名"`
  200. CreateTime string `description:"创建时间"`
  201. }
  202. type SaCompareElastic struct {
  203. SaCompareId int `description:"比对ID"`
  204. ClassifyId int `description:"比对分类ID"`
  205. ClassifyName string `description:"比对分类名称"`
  206. Title string `description:"标题"`
  207. ResultImg string `description:"比对结果图片"`
  208. SysAdminId int `description:"创建人ID"`
  209. SysAdminName string `description:"创建人姓名"`
  210. CreateTime string `description:"创建时间"`
  211. ModifyTime string `description:"修改时间"`
  212. }
  213. // SaCompareUpdateResultImgReq 更新比对结果图片请求体
  214. type SaCompareUpdateResultImgReq struct {
  215. SaCompareId int `description:"比对ID"`
  216. ResultImg string `description:"结果图片"`
  217. }
  218. // UpdateSaCompareClassifyByClassifyId 更新比对分类信息
  219. func UpdateSaCompareClassifyByClassifyId(classifyId int, classifyName string) (err error) {
  220. //o := orm.NewOrm()
  221. sql := `UPDATE sa_compare SET classify_name = ? WHERE classify_id = ?`
  222. //_, err = o.Raw(sql, classifyName, classifyId).Exec()
  223. err = global.DEFAULT_DmSQL.Exec(sql, classifyName, classifyId).Error
  224. return
  225. }
  226. // CreateSaCompare 新增比对、比对段落和比对标签
  227. func CreateSaCompare(compareItem *SaCompare, compareDocs []*SaCompareDoc, compareLabels []*SaCompareLabel) (err error) {
  228. //o := orm.NewOrm()
  229. //tx, err := o.Begin()
  230. //if err != nil {
  231. // return
  232. //}
  233. //defer func() {
  234. // if err != nil {
  235. // _ = tx.Rollback()
  236. // } else {
  237. // _ = tx.Commit()
  238. // }
  239. //}()
  240. //
  241. //// 新增比对
  242. //lastId, err := tx.Insert(compareItem)
  243. //if err != nil {
  244. // return
  245. //}
  246. //compareId := int(lastId)
  247. //compareItem.SaCompareId = compareId
  248. //
  249. //// 新增比对段落
  250. //if len(compareDocs) > 0 {
  251. // for i := range compareDocs {
  252. // compareDocs[i].CompareId = compareId
  253. // }
  254. // if _, e := tx.InsertMulti(len(compareDocs), compareDocs); e != nil {
  255. // err = e
  256. // return
  257. // }
  258. //}
  259. //
  260. //// 新增比对标签
  261. //if len(compareLabels) > 0 {
  262. // for i := range compareLabels {
  263. // compareLabels[i].CompareId = compareId
  264. // }
  265. // if _, e := tx.InsertMulti(len(compareLabels), compareLabels); e != nil {
  266. // err = e
  267. // return
  268. // }
  269. //}
  270. tx := global.DEFAULT_DmSQL.Begin()
  271. defer func() {
  272. if err != nil {
  273. _ = tx.Rollback()
  274. return
  275. }
  276. _ = tx.Commit()
  277. }()
  278. // 新增比对
  279. e := tx.Create(compareItem).Error
  280. if e != nil {
  281. err = fmt.Errorf("insert compare err: %v", e)
  282. return
  283. }
  284. // 新增比对段落
  285. if len(compareDocs) > 0 {
  286. for i := range compareDocs {
  287. compareDocs[i].CompareId = compareItem.SaCompareId
  288. }
  289. e = tx.CreateInBatches(compareDocs, utils.MultiAddNum).Error
  290. if e != nil {
  291. err = fmt.Errorf("insert docs err: %v", e)
  292. return
  293. }
  294. }
  295. // 新增比对标签
  296. if len(compareLabels) > 0 {
  297. for i := range compareLabels {
  298. compareLabels[i].CompareId = compareItem.SaCompareId
  299. }
  300. e = tx.CreateInBatches(compareLabels, utils.MultiAddNum).Error
  301. if e != nil {
  302. err = fmt.Errorf("insert labels err: %v", e)
  303. return
  304. }
  305. }
  306. return
  307. }
  308. // UpdateSaCompare 保存比对、比对段落和比对标签
  309. func UpdateSaCompare(compareItem *SaCompare, compareDocs []*SaCompareDoc, compareLabels []*SaCompareLabel, compareUpCols []string) (err error) {
  310. //o := orm.NewOrm()
  311. //tx, err := o.Begin()
  312. //if err != nil {
  313. // return
  314. //}
  315. //defer func() {
  316. // if err != nil {
  317. // _ = tx.Rollback()
  318. // } else {
  319. // _ = tx.Commit()
  320. // }
  321. //}()
  322. //
  323. //// 删除比对段落和标签
  324. //sql := `DELETE FROM sa_compare_doc WHERE compare_id = ?`
  325. //_, err = tx.Raw(sql, compareItem.SaCompareId).Exec()
  326. //if err != nil {
  327. // return
  328. //}
  329. //sql = `DELETE FROM sa_compare_label WHERE compare_id = ?`
  330. //_, err = tx.Raw(sql, compareItem.SaCompareId).Exec()
  331. //if err != nil {
  332. // return
  333. //}
  334. //
  335. //// 更新比对
  336. //_, err = tx.Update(compareItem, compareUpCols...)
  337. //if err != nil {
  338. // return
  339. //}
  340. //
  341. //// 新增比对段落
  342. //if len(compareDocs) > 0 {
  343. // for i := range compareDocs {
  344. // compareDocs[i].CompareId = compareItem.SaCompareId
  345. // }
  346. // if _, e := tx.InsertMulti(len(compareDocs), compareDocs); e != nil {
  347. // err = e
  348. // return
  349. // }
  350. //}
  351. //
  352. //// 新增比对标签
  353. //if len(compareLabels) > 0 {
  354. // for i := range compareLabels {
  355. // compareLabels[i].CompareId = compareItem.SaCompareId
  356. // }
  357. // if _, e := tx.InsertMulti(len(compareLabels), compareLabels); e != nil {
  358. // err = e
  359. // return
  360. // }
  361. //}
  362. tx := global.DEFAULT_DmSQL.Begin()
  363. defer func() {
  364. if err != nil {
  365. _ = tx.Rollback()
  366. return
  367. }
  368. _ = tx.Commit()
  369. }()
  370. // 删除比对段落和标签
  371. sql := `DELETE FROM sa_compare_doc WHERE compare_id = ?`
  372. e := tx.Exec(sql, compareItem.SaCompareId).Error
  373. if e != nil {
  374. err = fmt.Errorf("delete docs err: %v", e)
  375. return
  376. }
  377. sql = `DELETE FROM sa_compare_label WHERE compare_id = ?`
  378. e = tx.Exec(sql, compareItem.SaCompareId).Error
  379. if e != nil {
  380. err = fmt.Errorf("delete labels err: %v", e)
  381. return
  382. }
  383. // 更新比对
  384. e = tx.Select(compareUpCols).Updates(compareItem).Error
  385. if e != nil {
  386. err = fmt.Errorf("update compare err: %v", e)
  387. return
  388. }
  389. // 新增比对段落
  390. if len(compareDocs) > 0 {
  391. for i := range compareDocs {
  392. compareDocs[i].CompareId = compareItem.SaCompareId
  393. }
  394. e = tx.CreateInBatches(compareDocs, utils.MultiAddNum).Error
  395. if e != nil {
  396. err = fmt.Errorf("insert docs err: %v", e)
  397. return
  398. }
  399. }
  400. // 新增比对标签
  401. if len(compareLabels) > 0 {
  402. for i := range compareLabels {
  403. compareLabels[i].CompareId = compareItem.SaCompareId
  404. }
  405. e = tx.CreateInBatches(compareLabels, utils.MultiAddNum).Error
  406. if e != nil {
  407. err = fmt.Errorf("insert labels err: %v", e)
  408. return
  409. }
  410. }
  411. return
  412. }
  413. type SaCompareDetail struct {
  414. SaCompareItem
  415. HeadLabel []*SaCompareDetailHeadLabel `description:"标签列表"`
  416. DocList []*SaCompareDetailDoc `description:"文档列表"`
  417. KeywordsList []string `description:"历史搜索关键词"`
  418. }
  419. type SaCompareDetailHeadLabel struct {
  420. LabelId int `description:"标签ID"`
  421. LabelName string `description:"标签名称"`
  422. IsMine int `description:"是否为我的:0-否;1-是"`
  423. }
  424. type SaCompareDetailDoc struct {
  425. DocId int `description:"文档ID"`
  426. Title string `description:"文档标题"`
  427. Theme string `description:"文档主题"`
  428. ClassifyName string `description:"分类名称"`
  429. SectionList []*SaCompareDetailSection `description:"段落列表"`
  430. }
  431. type SaCompareDetailSection struct {
  432. SectionId int `description:"段落ID"`
  433. Content string `description:"段落内容"`
  434. Sort int `description:"段落排序"`
  435. IsPart int `description:"是否为片段: 0-否; 1-是"`
  436. StartIndex int `description:"片段开始下标"`
  437. EndIndex int `description:"片段结束下标"`
  438. LabelList []*SaCompareDetailFormatLabel `description:"段落标签"`
  439. }
  440. type SaCompareDetailFormatLabel struct {
  441. LabelId int `description:"标签ID"`
  442. LabelName string `description:"标签名称"`
  443. IsThis int `description:"是否为当前标签"`
  444. IsHistory int `description:"是否为历史标签"`
  445. IsOther int `description:"是否为其他人标签"`
  446. }
  447. type SaCompareDelReq struct {
  448. SaCompareId int `description:"比对ID"`
  449. }
  450. // DelSaCompare 删除文档和段落
  451. func DelSaCompare(compareId int) (err error) {
  452. //o := orm.NewOrm()
  453. //tx, err := o.Begin()
  454. //if err != nil {
  455. // return
  456. //}
  457. //defer func() {
  458. // if err != nil {
  459. // _ = tx.Rollback()
  460. // } else {
  461. // _ = tx.Commit()
  462. // }
  463. //}()
  464. //
  465. //sql := `DELETE FROM sa_compare WHERE sa_compare_id = ? LIMIT 1`
  466. //_, err = tx.Raw(sql, compareId).Exec()
  467. //if err != nil {
  468. // return
  469. //}
  470. //sql = `DELETE FROM sa_compare_doc WHERE compare_id = ?`
  471. //_, err = tx.Raw(sql, compareId).Exec()
  472. //if err != nil {
  473. // return
  474. //}
  475. //sql = `DELETE FROM sa_compare_label WHERE compare_id = ?`
  476. //_, err = tx.Raw(sql, compareId).Exec()
  477. tx := global.DEFAULT_DmSQL.Begin()
  478. defer func() {
  479. if err != nil {
  480. _ = tx.Rollback()
  481. return
  482. }
  483. _ = tx.Commit()
  484. }()
  485. // 删除比对/段落/标签
  486. sql := `DELETE FROM sa_compare WHERE sa_compare_id = ? LIMIT 1`
  487. e := tx.Exec(sql, compareId).Error
  488. if e != nil {
  489. err = fmt.Errorf("delete compare err: %v", e)
  490. return
  491. }
  492. sql = `DELETE FROM sa_compare_doc WHERE compare_id = ?`
  493. e = tx.Exec(sql, compareId).Error
  494. if e != nil {
  495. err = fmt.Errorf("delete docs err: %v", e)
  496. return
  497. }
  498. sql = `DELETE FROM sa_compare_label WHERE compare_id = ?`
  499. e = tx.Exec(sql, compareId).Error
  500. if e != nil {
  501. err = fmt.Errorf("delete labels err: %v", e)
  502. }
  503. return
  504. }
  505. // SaCompareMoveReq 移动比对请求体
  506. type SaCompareMoveReq struct {
  507. SaCompareClassifyId int `description:"比对分类ID"`
  508. SaCompareId int `description:"比对ID"`
  509. PrevSaCompareId int `description:"上一个比对ID"`
  510. NextSaCompareId int `description:"下一个比对ID"`
  511. }
  512. // UpdateSaCompareSort 根据分类ID更新排序
  513. func UpdateSaCompareSort(classifyId, nowSort int, prevId int, updateSort string) (err error) {
  514. //o := orm.NewOrm()
  515. sql := ` UPDATE sa_compare SET sort = ` + updateSort + ` WHERE classify_id = ? AND `
  516. if prevId > 0 {
  517. sql += ` ( sort > ? or ( sa_compare_id > ` + fmt.Sprint(prevId) + ` and sort = ` + fmt.Sprint(nowSort) + ` )) `
  518. }
  519. //_, err = o.Raw(sql, classifyId, nowSort).Exec()
  520. err = global.DEFAULT_DmSQL.Exec(sql, classifyId, nowSort).Error
  521. return
  522. }
  523. // GetFirstSortSaCompare 获取排序最前的比对
  524. func GetFirstSortSaCompare(classifyId int) (item *SaCompare, err error) {
  525. //o := orm.NewOrm()
  526. sql := ` SELECT * FROM sa_compare WHERE classify_id = ? ORDER BY sort ASC,sa_compare_id ASC LIMIT 1`
  527. //err = o.Raw(sql, classifyId).QueryRow(&item)
  528. err = global.DEFAULT_DmSQL.Raw(sql, classifyId).Find(&item).Error
  529. return
  530. }
  531. // CompareListByEsResp 文档对比Es搜索返回
  532. type CompareListByEsResp struct {
  533. Paging *paging.PagingItem
  534. List []*SaCompareElastic
  535. }