sa_compare.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  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. err = global.DEFAULT_DmSQL.Raw(sql, pars...).Find(&items).Error
  143. return
  144. }
  145. // SaCompareSaveReq 比对保存请求体
  146. type SaCompareSaveReq struct {
  147. SaCompareId int `description:"比对ID"`
  148. Title string `description:"标题"`
  149. ClassifyId int `description:"分类ID"`
  150. CompareList []struct {
  151. SaDocId int `description:"文档ID"`
  152. SectionList []struct {
  153. SaDocSectionId int `description:"段落ID"`
  154. IsPart int `description:"是否为片段: 0-整段; 1-片段"`
  155. StartIndex int `description:"片段开始下标"`
  156. EndIndex int `description:"片段结束下标"`
  157. Content string `description:"打标签的内容"`
  158. LabelIds []int `description:"标签IDs"`
  159. } `description:"段落标签信息"`
  160. } `description:"比对列表"`
  161. }
  162. // SaCompareSaveResp 比对保存响应体
  163. type SaCompareSaveResp struct {
  164. SaCompareId int `description:"比对ID"`
  165. TitleList []string `description:"标题列表"`
  166. LabelList []*SaCompareSaveRespLabel `description:"标签列表"`
  167. //ThemeList []string `description:"主题列表"`
  168. }
  169. // SaCompareSaveRespLabel 比对响应标签
  170. type SaCompareSaveRespLabel struct {
  171. SaLabelId int `description:"标签ID"`
  172. LabelName string `description:"标签名称"`
  173. DocList []*SaCompareSaveRespDoc `description:"文档列表"`
  174. }
  175. // SaCompareSaveRespDoc 比对响应文档
  176. type SaCompareSaveRespDoc struct {
  177. SaDocId int `description:"文档ID"`
  178. Title string `description:"文档标题"`
  179. SectionList []*SaCompareSaveRespSection `description:"段落列表"`
  180. }
  181. // SaCompareSaveRespSection 比对响应段落
  182. type SaCompareSaveRespSection struct {
  183. SaDocSectionId int `description:"段落ID"`
  184. IsPart int `description:"是否为片段: 0-否 1-是"`
  185. Content string `description:"段落内容"`
  186. }
  187. type SaComparePageListResp struct {
  188. List []*SaCompareItem
  189. Paging *paging.PagingItem `description:"分页数据"`
  190. }
  191. type SaCompareItem struct {
  192. SaCompareId int `description:"比对ID"`
  193. ClassifyId int `description:"比对分类ID"`
  194. ClassifyName string `description:"比对分类名称"`
  195. Title string `description:"标题"`
  196. ResultImg string `description:"比对结果图片"`
  197. SysAdminId int `description:"创建人ID"`
  198. SysAdminName string `description:"创建人姓名"`
  199. CreateTime string `description:"创建时间"`
  200. }
  201. type SaCompareElastic struct {
  202. SaCompareId int `description:"比对ID"`
  203. ClassifyId int `description:"比对分类ID"`
  204. ClassifyName string `description:"比对分类名称"`
  205. Title string `description:"标题"`
  206. ResultImg string `description:"比对结果图片"`
  207. SysAdminId int `description:"创建人ID"`
  208. SysAdminName string `description:"创建人姓名"`
  209. CreateTime string `description:"创建时间"`
  210. ModifyTime string `description:"修改时间"`
  211. }
  212. // SaCompareUpdateResultImgReq 更新比对结果图片请求体
  213. type SaCompareUpdateResultImgReq struct {
  214. SaCompareId int `description:"比对ID"`
  215. ResultImg string `description:"结果图片"`
  216. }
  217. // UpdateSaCompareClassifyByClassifyId 更新比对分类信息
  218. func UpdateSaCompareClassifyByClassifyId(classifyId int, classifyName string) (err error) {
  219. //o := orm.NewOrm()
  220. sql := `UPDATE sa_compare SET classify_name = ? WHERE classify_id = ?`
  221. //_, err = o.Raw(sql, classifyName, classifyId).Exec()
  222. err = global.DEFAULT_DmSQL.Exec(sql, classifyName, classifyId).Error
  223. return
  224. }
  225. // CreateSaCompare 新增比对、比对段落和比对标签
  226. func CreateSaCompare(compareItem *SaCompare, compareDocs []*SaCompareDoc, compareLabels []*SaCompareLabel) (err error) {
  227. //o := orm.NewOrm()
  228. //tx, err := o.Begin()
  229. //if err != nil {
  230. // return
  231. //}
  232. //defer func() {
  233. // if err != nil {
  234. // _ = tx.Rollback()
  235. // } else {
  236. // _ = tx.Commit()
  237. // }
  238. //}()
  239. //
  240. //// 新增比对
  241. //lastId, err := tx.Insert(compareItem)
  242. //if err != nil {
  243. // return
  244. //}
  245. //compareId := int(lastId)
  246. //compareItem.SaCompareId = compareId
  247. //
  248. //// 新增比对段落
  249. //if len(compareDocs) > 0 {
  250. // for i := range compareDocs {
  251. // compareDocs[i].CompareId = compareId
  252. // }
  253. // if _, e := tx.InsertMulti(len(compareDocs), compareDocs); e != nil {
  254. // err = e
  255. // return
  256. // }
  257. //}
  258. //
  259. //// 新增比对标签
  260. //if len(compareLabels) > 0 {
  261. // for i := range compareLabels {
  262. // compareLabels[i].CompareId = compareId
  263. // }
  264. // if _, e := tx.InsertMulti(len(compareLabels), compareLabels); e != nil {
  265. // err = e
  266. // return
  267. // }
  268. //}
  269. tx := global.DEFAULT_DmSQL.Begin()
  270. defer func() {
  271. if err != nil {
  272. _ = tx.Rollback()
  273. return
  274. }
  275. _ = tx.Commit()
  276. }()
  277. // 新增比对
  278. e := tx.Create(compareItem).Error
  279. if e != nil {
  280. err = fmt.Errorf("insert compare err: %v", e)
  281. return
  282. }
  283. // 新增比对段落
  284. if len(compareDocs) > 0 {
  285. for i := range compareDocs {
  286. compareDocs[i].CompareId = compareItem.SaCompareId
  287. }
  288. e = tx.CreateInBatches(compareDocs, utils.MultiAddNum).Error
  289. if e != nil {
  290. err = fmt.Errorf("insert docs err: %v", e)
  291. return
  292. }
  293. }
  294. // 新增比对标签
  295. if len(compareLabels) > 0 {
  296. for i := range compareLabels {
  297. compareLabels[i].CompareId = compareItem.SaCompareId
  298. }
  299. e = tx.CreateInBatches(compareLabels, utils.MultiAddNum).Error
  300. if e != nil {
  301. err = fmt.Errorf("insert labels err: %v", e)
  302. return
  303. }
  304. }
  305. return
  306. }
  307. // UpdateSaCompare 保存比对、比对段落和比对标签
  308. func UpdateSaCompare(compareItem *SaCompare, compareDocs []*SaCompareDoc, compareLabels []*SaCompareLabel, compareUpCols []string) (err error) {
  309. //o := orm.NewOrm()
  310. //tx, err := o.Begin()
  311. //if err != nil {
  312. // return
  313. //}
  314. //defer func() {
  315. // if err != nil {
  316. // _ = tx.Rollback()
  317. // } else {
  318. // _ = tx.Commit()
  319. // }
  320. //}()
  321. //
  322. //// 删除比对段落和标签
  323. //sql := `DELETE FROM sa_compare_doc WHERE compare_id = ?`
  324. //_, err = tx.Raw(sql, compareItem.SaCompareId).Exec()
  325. //if err != nil {
  326. // return
  327. //}
  328. //sql = `DELETE FROM sa_compare_label WHERE compare_id = ?`
  329. //_, err = tx.Raw(sql, compareItem.SaCompareId).Exec()
  330. //if err != nil {
  331. // return
  332. //}
  333. //
  334. //// 更新比对
  335. //_, err = tx.Update(compareItem, compareUpCols...)
  336. //if err != nil {
  337. // return
  338. //}
  339. //
  340. //// 新增比对段落
  341. //if len(compareDocs) > 0 {
  342. // for i := range compareDocs {
  343. // compareDocs[i].CompareId = compareItem.SaCompareId
  344. // }
  345. // if _, e := tx.InsertMulti(len(compareDocs), compareDocs); e != nil {
  346. // err = e
  347. // return
  348. // }
  349. //}
  350. //
  351. //// 新增比对标签
  352. //if len(compareLabels) > 0 {
  353. // for i := range compareLabels {
  354. // compareLabels[i].CompareId = compareItem.SaCompareId
  355. // }
  356. // if _, e := tx.InsertMulti(len(compareLabels), compareLabels); e != nil {
  357. // err = e
  358. // return
  359. // }
  360. //}
  361. tx := global.DEFAULT_DmSQL.Begin()
  362. defer func() {
  363. if err != nil {
  364. _ = tx.Rollback()
  365. return
  366. }
  367. _ = tx.Commit()
  368. }()
  369. // 删除比对段落和标签
  370. sql := `DELETE FROM sa_compare_doc WHERE compare_id = ?`
  371. e := tx.Exec(sql, compareItem.SaCompareId).Error
  372. if e != nil {
  373. err = fmt.Errorf("delete docs err: %v", e)
  374. return
  375. }
  376. sql = `DELETE FROM sa_compare_label WHERE compare_id = ?`
  377. e = tx.Exec(sql, compareItem.SaCompareId).Error
  378. if e != nil {
  379. err = fmt.Errorf("delete labels err: %v", e)
  380. return
  381. }
  382. // 更新比对
  383. e = tx.Select(compareUpCols).Updates(compareItem).Error
  384. if e != nil {
  385. err = fmt.Errorf("update compare err: %v", e)
  386. return
  387. }
  388. // 新增比对段落
  389. if len(compareDocs) > 0 {
  390. for i := range compareDocs {
  391. compareDocs[i].CompareId = compareItem.SaCompareId
  392. }
  393. e = tx.CreateInBatches(compareDocs, utils.MultiAddNum).Error
  394. if e != nil {
  395. err = fmt.Errorf("insert docs err: %v", e)
  396. return
  397. }
  398. }
  399. // 新增比对标签
  400. if len(compareLabels) > 0 {
  401. for i := range compareLabels {
  402. compareLabels[i].CompareId = compareItem.SaCompareId
  403. }
  404. e = tx.CreateInBatches(compareLabels, utils.MultiAddNum).Error
  405. if e != nil {
  406. err = fmt.Errorf("insert labels err: %v", e)
  407. return
  408. }
  409. }
  410. return
  411. }
  412. type SaCompareDetail struct {
  413. SaCompareItem
  414. HeadLabel []*SaCompareDetailHeadLabel `description:"标签列表"`
  415. DocList []*SaCompareDetailDoc `description:"文档列表"`
  416. KeywordsList []string `description:"历史搜索关键词"`
  417. }
  418. type SaCompareDetailHeadLabel struct {
  419. LabelId int `description:"标签ID"`
  420. LabelName string `description:"标签名称"`
  421. IsMine int `description:"是否为我的:0-否;1-是"`
  422. }
  423. type SaCompareDetailDoc struct {
  424. DocId int `description:"文档ID"`
  425. Title string `description:"文档标题"`
  426. Theme string `description:"文档主题"`
  427. ClassifyName string `description:"分类名称"`
  428. SectionList []*SaCompareDetailSection `description:"段落列表"`
  429. }
  430. type SaCompareDetailSection struct {
  431. SectionId int `description:"段落ID"`
  432. Content string `description:"段落内容"`
  433. Sort int `description:"段落排序"`
  434. IsPart int `description:"是否为片段: 0-否; 1-是"`
  435. StartIndex int `description:"片段开始下标"`
  436. EndIndex int `description:"片段结束下标"`
  437. LabelList []*SaCompareDetailFormatLabel `description:"段落标签"`
  438. }
  439. type SaCompareDetailFormatLabel struct {
  440. LabelId int `description:"标签ID"`
  441. LabelName string `description:"标签名称"`
  442. IsThis int `description:"是否为当前标签"`
  443. IsHistory int `description:"是否为历史标签"`
  444. IsOther int `description:"是否为其他人标签"`
  445. }
  446. type SaCompareDelReq struct {
  447. SaCompareId int `description:"比对ID"`
  448. }
  449. // DelSaCompare 删除文档和段落
  450. func DelSaCompare(compareId int) (err error) {
  451. //o := orm.NewOrm()
  452. //tx, err := o.Begin()
  453. //if err != nil {
  454. // return
  455. //}
  456. //defer func() {
  457. // if err != nil {
  458. // _ = tx.Rollback()
  459. // } else {
  460. // _ = tx.Commit()
  461. // }
  462. //}()
  463. //
  464. //sql := `DELETE FROM sa_compare WHERE sa_compare_id = ? LIMIT 1`
  465. //_, err = tx.Raw(sql, compareId).Exec()
  466. //if err != nil {
  467. // return
  468. //}
  469. //sql = `DELETE FROM sa_compare_doc WHERE compare_id = ?`
  470. //_, err = tx.Raw(sql, compareId).Exec()
  471. //if err != nil {
  472. // return
  473. //}
  474. //sql = `DELETE FROM sa_compare_label WHERE compare_id = ?`
  475. //_, err = tx.Raw(sql, compareId).Exec()
  476. tx := global.DEFAULT_DmSQL.Begin()
  477. defer func() {
  478. if err != nil {
  479. _ = tx.Rollback()
  480. return
  481. }
  482. _ = tx.Commit()
  483. }()
  484. // 删除比对/段落/标签
  485. sql := `DELETE FROM sa_compare WHERE sa_compare_id = ? LIMIT 1`
  486. e := tx.Exec(sql, compareId).Error
  487. if e != nil {
  488. err = fmt.Errorf("delete compare err: %v", e)
  489. return
  490. }
  491. sql = `DELETE FROM sa_compare_doc WHERE compare_id = ?`
  492. e = tx.Exec(sql, compareId).Error
  493. if e != nil {
  494. err = fmt.Errorf("delete docs err: %v", e)
  495. return
  496. }
  497. sql = `DELETE FROM sa_compare_label WHERE compare_id = ?`
  498. e = tx.Exec(sql, compareId).Error
  499. if e != nil {
  500. err = fmt.Errorf("delete labels err: %v", e)
  501. }
  502. return
  503. }
  504. // SaCompareMoveReq 移动比对请求体
  505. type SaCompareMoveReq struct {
  506. SaCompareClassifyId int `description:"比对分类ID"`
  507. SaCompareId int `description:"比对ID"`
  508. PrevSaCompareId int `description:"上一个比对ID"`
  509. NextSaCompareId int `description:"下一个比对ID"`
  510. }
  511. // UpdateSaCompareSort 根据分类ID更新排序
  512. func UpdateSaCompareSort(classifyId, nowSort int, prevId int, updateSort string) (err error) {
  513. //o := orm.NewOrm()
  514. sql := ` UPDATE sa_compare SET sort = ` + updateSort + ` WHERE classify_id = ? AND `
  515. if prevId > 0 {
  516. sql += ` ( sort > ? or ( sa_compare_id > ` + fmt.Sprint(prevId) + ` and sort = ` + fmt.Sprint(nowSort) + ` )) `
  517. }
  518. //_, err = o.Raw(sql, classifyId, nowSort).Exec()
  519. err = global.DEFAULT_DmSQL.Exec(sql, classifyId, nowSort).Error
  520. return
  521. }
  522. // GetFirstSortSaCompare 获取排序最前的比对
  523. func GetFirstSortSaCompare(classifyId int) (item *SaCompare, err error) {
  524. //o := orm.NewOrm()
  525. sql := ` SELECT * FROM sa_compare WHERE classify_id = ? ORDER BY sort ASC,sa_compare_id ASC LIMIT 1`
  526. //err = o.Raw(sql, classifyId).QueryRow(&item)
  527. err = global.DEFAULT_DmSQL.Raw(sql, classifyId).Find(&item).Error
  528. return
  529. }
  530. // CompareListByEsResp 文档对比Es搜索返回
  531. type CompareListByEsResp struct {
  532. Paging *paging.PagingItem
  533. List []*SaCompareElastic
  534. }