sa_compare.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. package semantic_analysis
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "hongze/hz_eta_api/controllers"
  7. "hongze/hz_eta_api/models"
  8. "hongze/hz_eta_api/models/data_manage"
  9. saModel "hongze/hz_eta_api/models/semantic_analysis"
  10. "hongze/hz_eta_api/services"
  11. "hongze/hz_eta_api/utils"
  12. "html"
  13. "strconv"
  14. "strings"
  15. "time"
  16. )
  17. // SaCompareController 语义分析-文档比对
  18. type SaCompareController struct {
  19. controllers.BaseAuthController
  20. }
  21. // Save
  22. // @Title 保存比对
  23. // @Description 保存比对
  24. // @Param request body saModel.SaCompareSaveReq true "type json string"
  25. // @Success 200 Ret=200 操作成功
  26. // @router /compare/save [post]
  27. func (this *SaCompareController) Save() {
  28. br := new(models.BaseResponse).Init()
  29. defer func() {
  30. if br.ErrMsg == "" {
  31. br.IsSendEmail = false
  32. }
  33. this.Data["json"] = br
  34. this.ServeJSON()
  35. }()
  36. var req saModel.SaCompareSaveReq
  37. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  38. br.Msg = "参数解析异常!"
  39. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  40. return
  41. }
  42. req.Title = strings.TrimSpace(req.Title)
  43. if req.Title == "" {
  44. br.Msg = "请输入比对名称"
  45. return
  46. }
  47. if req.ClassifyId <= 0 {
  48. br.Msg = "请选择比对分类"
  49. return
  50. }
  51. if len(req.CompareList) == 0 {
  52. br.Msg = "请选择比对文档"
  53. return
  54. }
  55. //secIds := make([]int, 0)
  56. for _, d := range req.CompareList {
  57. if d.SaDocId <= 0 {
  58. br.Msg = "文档ID有误"
  59. return
  60. }
  61. //for _, s := range d.SectionList {
  62. // if !utils.InArrayByInt(secIds, s.SaDocSectionId) {
  63. // secIds = append(secIds, s.SaDocSectionId)
  64. // }
  65. //}
  66. }
  67. // 标题去重
  68. existItem := new(saModel.SaCompare)
  69. existCond := fmt.Sprintf(` AND %s = ?`, saModel.SaCompareColumns.Title)
  70. existPars := make([]interface{}, 0)
  71. existPars = append(existPars, req.Title)
  72. e := existItem.GetItemByCondition(existCond, existPars)
  73. if e != nil && e.Error() != utils.ErrNoRow() {
  74. br.Msg = "获取重名标题的比对失败"
  75. br.ErrMsg = "获取重名标题比对失败, Err: " + e.Error()
  76. return
  77. }
  78. if existItem != nil && existItem.SaCompareId > 0 {
  79. if existItem.SaCompareId != req.SaCompareId {
  80. br.Msg = "标题已存在"
  81. return
  82. }
  83. }
  84. nowTime := time.Now().Local()
  85. compareClassifyItem := new(saModel.SaCompareClassify)
  86. if e := compareClassifyItem.GetItemById(req.ClassifyId); e != nil {
  87. br.Msg = "操作失败"
  88. br.ErrMsg = "获取比对分类信息失败, Err: " + e.Error()
  89. return
  90. }
  91. compareItem := new(saModel.SaCompare)
  92. updateCols := make([]string, 0)
  93. if req.SaCompareId > 0 {
  94. // 编辑
  95. if e := compareItem.GetItemById(req.SaCompareId); e != nil {
  96. br.Msg = "操作失败"
  97. br.ErrMsg = "获取比对信息失败, Err: " + e.Error()
  98. return
  99. }
  100. compareItem.ClassifyId = req.ClassifyId
  101. compareItem.ClassifyName = compareClassifyItem.ClassifyName
  102. compareItem.Title = req.Title
  103. compareItem.ModifyTime = nowTime
  104. updateCols = []string{
  105. saModel.SaCompareColumns.ClassifyId, saModel.SaCompareColumns.ClassifyName, saModel.SaCompareColumns.Title,
  106. saModel.SaCompareColumns.ModifyTime,
  107. }
  108. } else {
  109. // 新增
  110. compareItem.ClassifyId = req.ClassifyId
  111. compareItem.ClassifyName = compareClassifyItem.ClassifyName
  112. compareItem.Title = req.Title
  113. compareItem.SysAdminId = this.SysUser.AdminId
  114. compareItem.SysAdminName = this.SysUser.RealName
  115. compareItem.CreateTime = nowTime
  116. compareItem.ModifyTime = nowTime
  117. }
  118. // 标签匹配
  119. labelOB := new(saModel.SaLabel)
  120. labelCond := ``
  121. labelPars := make([]interface{}, 0)
  122. labelFields := []string{saModel.SaLabelColumns.SaLabelId, saModel.SaLabelColumns.LabelName}
  123. labelItems, e := labelOB.GetItemsByCondition(labelCond, labelPars, labelFields, "")
  124. if e != nil {
  125. br.Msg = "操作失败"
  126. br.ErrMsg = "获取标签列表失败, Err: " + e.Error()
  127. return
  128. }
  129. labelMap := make(map[int]string)
  130. for _, l := range labelItems {
  131. labelMap[l.SaLabelId] = l.LabelName
  132. }
  133. // 段落和标签
  134. compareDocs := make([]*saModel.SaCompareDoc, 0)
  135. compareLabels := make([]*saModel.SaCompareLabel, 0)
  136. for _, v := range req.CompareList {
  137. compareDocs = append(compareDocs, &saModel.SaCompareDoc{
  138. DocId: v.SaDocId,
  139. })
  140. for _, s := range v.SectionList {
  141. for _, l := range s.LabelIds {
  142. compareLabels = append(compareLabels, &saModel.SaCompareLabel{
  143. DocId: v.SaDocId,
  144. SectionId: s.SaDocSectionId,
  145. LabelId: l,
  146. LabelName: labelMap[l],
  147. IsPart: s.IsPart,
  148. StartIndex: s.StartIndex,
  149. EndIndex: s.EndIndex,
  150. Content: html.EscapeString(s.Content),
  151. SysAdminId: this.SysUser.AdminId,
  152. SysAdminName: this.SysUser.RealName,
  153. CreateTime: nowTime,
  154. })
  155. }
  156. }
  157. }
  158. // 新增/更新比对
  159. if req.SaCompareId > 0 {
  160. if e := saModel.UpdateSaCompare(compareItem, compareDocs, compareLabels, updateCols); e != nil {
  161. br.Msg = "保存失败"
  162. br.ErrMsg = "更新比对失败, Err: " + e.Error()
  163. return
  164. }
  165. } else {
  166. if e := saModel.CreateSaCompare(compareItem, compareDocs, compareLabels); e != nil {
  167. br.Msg = "保存失败"
  168. br.ErrMsg = "新增比对失败, Err: " + e.Error()
  169. return
  170. }
  171. }
  172. // 新增ES对比文档
  173. go func() {
  174. _ = services.HandleElasticSaCompare(compareItem.SaCompareId)
  175. }()
  176. // 获取表格数据
  177. compLabCond := fmt.Sprintf(` AND a.%s = ?`, saModel.SaCompareLabelColumns.CompareId)
  178. compLabPars := make([]interface{}, 0)
  179. compLabPars = append(compLabPars, compareItem.SaCompareId)
  180. compLabs, e := saModel.GetSaCompareLabelByCond(compLabCond, compLabPars)
  181. if e != nil {
  182. br.Msg = "操作失败"
  183. br.ErrMsg = "获取比对标签列表失败, ErrMsg: " + e.Error()
  184. return
  185. }
  186. resp, e := services.FormatCompareLabels2TableData(compLabs)
  187. if e != nil {
  188. br.Msg = "操作失败"
  189. br.ErrMsg = "获取比对表格数据失败, ErrMsg: " + e.Error()
  190. return
  191. }
  192. resp.SaCompareId = compareItem.SaCompareId
  193. br.Data = resp
  194. br.Ret = 200
  195. br.Success = true
  196. br.Msg = "操作成功"
  197. }
  198. // PageList
  199. // @Title 文档比对列表
  200. // @Description 文档比对列表
  201. // @Param Keyword query string false "关键词"
  202. // @Param ClassifyId query int false "分类ID"
  203. // @Success 200 Ret=200 获取成功
  204. // @router /compare/page_list [get]
  205. func (this *SaCompareController) PageList() {
  206. br := new(models.BaseResponse).Init()
  207. defer func() {
  208. if br.ErrMsg == "" {
  209. br.IsSendEmail = false
  210. }
  211. this.Data["json"] = br
  212. this.ServeJSON()
  213. }()
  214. keyword := this.GetString("Keyword", "")
  215. classifyId, _ := this.GetInt("ClassifyId", 0)
  216. var startSize int
  217. pageSize, _ := this.GetInt("PageSize")
  218. currentIndex, _ := this.GetInt("CurrentIndex")
  219. if pageSize <= 0 {
  220. pageSize = utils.PageSize20
  221. }
  222. if currentIndex <= 0 {
  223. currentIndex = 1
  224. }
  225. startSize = paging.StartIndex(currentIndex, pageSize)
  226. itemOB := new(saModel.SaCompare)
  227. cond := ``
  228. pars := make([]interface{}, 0)
  229. if keyword != "" {
  230. kw := "%" + keyword + "%"
  231. cond += fmt.Sprintf(` AND %s LIKE ?`, saModel.SaCompareColumns.Title)
  232. pars = append(pars, kw)
  233. }
  234. if classifyId > 0 {
  235. cond += fmt.Sprintf(` AND %s = ?`, saModel.SaCompareColumns.ClassifyId)
  236. pars = append(pars, classifyId)
  237. }
  238. total, list, e := itemOB.GetPageItemsByCondition(startSize, pageSize, cond, pars, []string{}, "")
  239. if e != nil {
  240. br.Msg = "获取失败"
  241. br.ErrMsg = "获取文档列表失败, Err: " + e.Error()
  242. return
  243. }
  244. respList := make([]*saModel.SaCompareItem, 0)
  245. for i := range list {
  246. v := new(saModel.SaCompareItem)
  247. v.SaCompareId = list[i].SaCompareId
  248. v.ClassifyId = list[i].ClassifyId
  249. v.ClassifyName = list[i].ClassifyName
  250. v.Title = list[i].Title
  251. v.ResultImg = list[i].ResultImg
  252. v.SysAdminId = list[i].SysAdminId
  253. v.SysAdminName = list[i].SysAdminName
  254. v.CreateTime = list[i].CreateTime.Format(utils.FormatDateTime)
  255. respList = append(respList, v)
  256. }
  257. page := paging.GetPaging(currentIndex, pageSize, total)
  258. resp := &saModel.SaComparePageListResp{
  259. Paging: page,
  260. List: respList,
  261. }
  262. br.Data = resp
  263. br.Ret = 200
  264. br.Success = true
  265. br.Msg = "获取成功"
  266. }
  267. // UpdateResultImg
  268. // @Title 更新比对结果图片
  269. // @Description 更新比对结果图片
  270. // @Param request body saModel.SaCompareUpdateResultImgReq true "type json string"
  271. // @Success 200 Ret=200 操作成功
  272. // @router /compare/update_result_img [post]
  273. func (this *SaCompareController) UpdateResultImg() {
  274. br := new(models.BaseResponse).Init()
  275. defer func() {
  276. if br.ErrMsg == "" {
  277. br.IsSendEmail = false
  278. }
  279. this.Data["json"] = br
  280. this.ServeJSON()
  281. }()
  282. var req saModel.SaCompareUpdateResultImgReq
  283. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  284. br.Msg = "参数解析异常!"
  285. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  286. return
  287. }
  288. if req.SaCompareId <= 0 {
  289. br.Msg = "参数有误"
  290. return
  291. }
  292. if req.ResultImg == "" {
  293. br.Msg = "请选择结果图片"
  294. return
  295. }
  296. compareItem := new(saModel.SaCompare)
  297. if e := compareItem.GetItemById(req.SaCompareId); e != nil {
  298. br.Msg = "操作失败"
  299. br.ErrMsg = "获取比对信息失败, Err: " + e.Error()
  300. return
  301. }
  302. updateCols := []string{saModel.SaCompareColumns.ResultImg, saModel.SaCompareColumns.ModifyTime}
  303. compareItem.ResultImg = req.ResultImg
  304. compareItem.ModifyTime = time.Now().Local()
  305. if e := compareItem.Update(updateCols); e != nil {
  306. br.Msg = "操作失败"
  307. br.ErrMsg = "更新语义分析图片失败, Err: " + e.Error()
  308. return
  309. }
  310. // 新增ES对比文档
  311. go func() {
  312. _ = services.HandleElasticSaCompare(compareItem.SaCompareId)
  313. }()
  314. br.Ret = 200
  315. br.Success = true
  316. br.Msg = "操作成功"
  317. }
  318. // Detail
  319. // @Title 比对详情
  320. // @Description 比对详情
  321. // @Param CompareId query int true "比对ID"
  322. // @Success 200 Ret=200 获取成功
  323. // @router /compare/detail [get]
  324. func (this *SaCompareController) Detail() {
  325. br := new(models.BaseResponse).Init()
  326. defer func() {
  327. if br.ErrMsg == "" {
  328. br.IsSendEmail = false
  329. }
  330. this.Data["json"] = br
  331. this.ServeJSON()
  332. }()
  333. compareId, _ := this.GetInt("CompareId", 0)
  334. if compareId <= 0 {
  335. br.Msg = "参数有误"
  336. return
  337. }
  338. compareItem := new(saModel.SaCompare)
  339. if e := compareItem.GetItemById(compareId); e != nil {
  340. br.Msg = "获取失败"
  341. br.ErrMsg = "获取比对信息失败, Err: " + e.Error()
  342. return
  343. }
  344. // 比对文档IDs
  345. compDocOB := new(saModel.SaCompareDoc)
  346. compDocCond := fmt.Sprintf(` AND %s = ?`, saModel.SaCompareDocColumns.CompareId)
  347. compDocPars := make([]interface{}, 0)
  348. compDocPars = append(compDocPars, compareItem.SaCompareId)
  349. compDocs, e := compDocOB.GetItemsByCondition(compDocCond, compDocPars, []string{saModel.SaCompareDocColumns.DocId}, "")
  350. if e != nil {
  351. br.Msg = "获取失败"
  352. br.ErrMsg = "获取比对文档失败, Err: " + e.Error()
  353. return
  354. }
  355. compDocIds := make([]int, 0)
  356. for _, d := range compDocs {
  357. compDocIds = append(compDocIds, d.DocId)
  358. }
  359. // 比对详情
  360. detail := new(saModel.SaCompareDetail)
  361. detail.SaCompareId = compareItem.SaCompareId
  362. detail.ClassifyId = compareItem.ClassifyId
  363. detail.ClassifyName = compareItem.ClassifyName
  364. detail.Title = compareItem.Title
  365. detail.ResultImg = compareItem.ResultImg
  366. detail.SysAdminId = compareItem.SysAdminId
  367. detail.SysAdminName = compareItem.SysAdminName
  368. detail.CreateTime = compareItem.CreateTime.Format(utils.FormatDateTime)
  369. // 文档详情
  370. docDetail, e := services.GetSaCompareDetailByDocIds(compDocIds, compareId, this.SysUser.AdminId)
  371. if e != nil {
  372. br.Msg = "获取失败"
  373. br.ErrMsg = "获取比对详情信息失败, ErrMsg: " + e.Error()
  374. return
  375. }
  376. detail.HeadLabel = docDetail.HeadLabel
  377. detail.DocList = docDetail.DocList
  378. detail.KeywordsList = docDetail.KeywordsList
  379. br.Data = detail
  380. br.Ret = 200
  381. br.Success = true
  382. br.Msg = "获取成功"
  383. }
  384. // SelectDocs
  385. // @Title 选择比对文档
  386. // @Description 选择比对文档
  387. // @Param DocIds query string true "文档IDs"
  388. // @Success 200 Ret=200 获取成功
  389. // @router /compare/select_docs [get]
  390. func (this *SaCompareController) SelectDocs() {
  391. br := new(models.BaseResponse).Init()
  392. defer func() {
  393. if br.ErrMsg == "" {
  394. br.IsSendEmail = false
  395. }
  396. this.Data["json"] = br
  397. this.ServeJSON()
  398. }()
  399. docIdStr := this.GetString("DocIds", "")
  400. if docIdStr == "" {
  401. br.Msg = "请选择文档"
  402. return
  403. }
  404. docIds := make([]int, 0)
  405. docIdArr := strings.Split(docIdStr, ",")
  406. if len(docIdArr) == 0 {
  407. br.Msg = "请选择文档"
  408. return
  409. }
  410. if len(docIdArr) > 10 {
  411. br.Msg = "最多支持选择10个文档"
  412. return
  413. }
  414. for i := range docIdArr {
  415. d, e := strconv.Atoi(docIdArr[i])
  416. if e != nil {
  417. br.Msg = "文档ID有误"
  418. return
  419. }
  420. docIds = append(docIds, d)
  421. }
  422. resp, e := services.GetSaCompareDetailByDocIds(docIds, 0, this.SysUser.AdminId)
  423. if e != nil {
  424. br.Msg = "获取失败"
  425. br.ErrMsg = "获取选择的文档详情失败, ErrMsg: " + e.Error()
  426. return
  427. }
  428. br.Data = resp
  429. br.Ret = 200
  430. br.Success = true
  431. br.Msg = "获取成功"
  432. }
  433. // Del
  434. // @Title 删除语义分析
  435. // @Description 删除语义分析
  436. // @Param request body saModel.SaCompareDelReq true "type json string"
  437. // @Success 200 Ret=200 操作成功
  438. // @router /compare/del [post]
  439. func (this *SaCompareController) Del() {
  440. br := new(models.BaseResponse).Init()
  441. defer func() {
  442. if br.ErrMsg == "" {
  443. br.IsSendEmail = false
  444. }
  445. this.Data["json"] = br
  446. this.ServeJSON()
  447. }()
  448. var req saModel.SaCompareDelReq
  449. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  450. br.Msg = "参数解析异常!"
  451. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  452. return
  453. }
  454. if req.SaCompareId <= 0 {
  455. br.Msg = "参数有误"
  456. return
  457. }
  458. // TODO:可能会有只让自己或者管理员删除的需求,目前无
  459. item := new(saModel.SaCompare)
  460. e := item.GetItemById(req.SaCompareId)
  461. if e != nil {
  462. if e.Error() == utils.ErrNoRow() {
  463. br.Msg = "文档比对已被删除, 请刷新页面"
  464. return
  465. }
  466. br.Msg = "操作失败"
  467. br.ErrMsg = "获取语义分析比对信息失败, Err: " + e.Error()
  468. return
  469. }
  470. // 删除比对及相关
  471. if e = saModel.DelSaCompare(item.SaCompareId); e != nil {
  472. br.Msg = "操作失败"
  473. br.ErrMsg = "删除语义分析比对失败, Err: " + e.Error()
  474. return
  475. }
  476. go func() {
  477. _ = services.DeleteElasticSaCompare(item.SaCompareId)
  478. }()
  479. br.Ret = 200
  480. br.Success = true
  481. br.Msg = "操作成功"
  482. }
  483. // SaveKeywords
  484. // @Title 保存关键词
  485. // @Description 保存比对
  486. // @Param request body saModel.SaCompareSearchKeywordSaveReq true "type json string"
  487. // @Success 200 Ret=200 操作成功
  488. // @router /compare/save_keywords [post]
  489. func (this *SaCompareController) SaveKeywords() {
  490. br := new(models.BaseResponse).Init()
  491. defer func() {
  492. if br.ErrMsg == "" {
  493. br.IsSendEmail = false
  494. }
  495. this.Data["json"] = br
  496. this.ServeJSON()
  497. }()
  498. var req saModel.SaCompareSearchKeywordSaveReq
  499. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  500. br.Msg = "参数解析异常!"
  501. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  502. return
  503. }
  504. if req.SaCompareId <= 0 {
  505. br.Msg = "参数异常"
  506. return
  507. }
  508. keywords := make([]string, 0)
  509. for k := range req.Keywords {
  510. v := strings.TrimSpace(req.Keywords[k])
  511. if v != "" {
  512. keywords = append(keywords, v)
  513. }
  514. }
  515. keywordOB := new(saModel.SaCompareSearchKeyword)
  516. if e := keywordOB.DelAndCreateSearchKeywords(req.SaCompareId, keywords); e != nil {
  517. br.Msg = "操作失败"
  518. br.ErrMsg = "保存搜索关键词失败, Err: " + e.Error()
  519. return
  520. }
  521. br.Ret = 200
  522. br.Success = true
  523. br.Msg = "操作成功"
  524. }
  525. // Move
  526. // @Title 移动比对
  527. // @Description 移动比对
  528. // @Param request body saModel.SaCompareMoveReq true "type json string"
  529. // @Success 200 Ret=200 操作成功
  530. // @router /compare/move [post]
  531. func (this *SaCompareController) Move() {
  532. br := new(models.BaseResponse).Init()
  533. defer func() {
  534. if br.ErrMsg == "" {
  535. br.IsSendEmail = false
  536. }
  537. this.Data["json"] = br
  538. this.ServeJSON()
  539. }()
  540. var req saModel.SaCompareMoveReq
  541. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  542. br.Msg = "参数解析异常!"
  543. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  544. return
  545. }
  546. if req.SaCompareClassifyId <= 0 {
  547. br.Msg = "请选择分类"
  548. return
  549. }
  550. if req.SaCompareId <= 0 {
  551. br.Msg = "参数异常"
  552. return
  553. }
  554. item := new(saModel.SaCompare)
  555. e := item.GetItemById(req.SaCompareId)
  556. if e != nil {
  557. if e.Error() == utils.ErrNoRow() {
  558. br.Msg = "比对已被删除, 请刷新页面"
  559. return
  560. }
  561. br.Msg = "操作失败"
  562. br.ErrMsg = "获取比对信息失败, Err: " + e.Error()
  563. return
  564. }
  565. // 分类
  566. classifyItem := new(saModel.SaCompareClassify)
  567. if e = classifyItem.GetItemById(req.SaCompareClassifyId); e != nil {
  568. br.Msg = "分类信息有误"
  569. br.ErrMsg = "获取比对分类信息失败, Err: " + e.Error()
  570. return
  571. }
  572. // CV的指标库指标的移动, 没有技术, 全是感情~
  573. if req.PrevSaCompareId > 0 {
  574. prevCompare := new(saModel.SaCompare)
  575. if e = prevCompare.GetItemById(req.PrevSaCompareId); e != nil {
  576. if e.Error() == utils.ErrNoRow() {
  577. br.Msg = "上一个比对已被删除, 请刷新页面"
  578. return
  579. }
  580. br.Msg = "操作失败"
  581. br.ErrMsg = "获取上一个比对信息失败, Err: " + e.Error()
  582. return
  583. }
  584. // 如果是在两个比对之间
  585. if req.NextSaCompareId > 0 {
  586. nextCompare := new(saModel.SaCompare)
  587. if e = nextCompare.GetItemById(req.NextSaCompareId); e != nil {
  588. if e.Error() == utils.ErrNoRow() {
  589. br.Msg = "下一个比对已被删除, 请刷新页面"
  590. return
  591. }
  592. br.Msg = "操作失败"
  593. br.ErrMsg = "获取下一个比对信息失败, Err: " + e.Error()
  594. return
  595. }
  596. // 判断上一个比对与当前比对/下一个比对的位置
  597. if prevCompare.Sort == item.Sort || prevCompare.Sort == nextCompare.Sort {
  598. _ = saModel.UpdateSaCompareSort(prevCompare.ClassifyId, prevCompare.Sort, prevCompare.SaCompareId, `sort + 2`)
  599. } else {
  600. if nextCompare.Sort-prevCompare.Sort == 1 {
  601. _ = saModel.UpdateSaCompareSort(prevCompare.ClassifyId, prevCompare.Sort, prevCompare.SaCompareId, `sort + 1`)
  602. }
  603. }
  604. }
  605. item.Sort = prevCompare.Sort + 1
  606. } else {
  607. firstCompare, e := saModel.GetFirstSortSaCompare(req.SaCompareClassifyId)
  608. if e != nil && e.Error() != utils.ErrNoRow() {
  609. br.Msg = "操作失败"
  610. br.ErrMsg = "获取首个比对失败, Err: " + e.Error()
  611. return
  612. }
  613. if firstCompare != nil && firstCompare.Sort == 0 {
  614. _ = saModel.UpdateSaCompareSort(firstCompare.ClassifyId, 0, firstCompare.SaCompareId-1, `sort + 1`)
  615. }
  616. item.Sort = 0
  617. }
  618. // 更新
  619. item.ClassifyId = classifyItem.SaCompareClassifyId
  620. item.ClassifyName = classifyItem.ClassifyName
  621. item.ModifyTime = time.Now().Local()
  622. updateCols := []string{
  623. saModel.SaCompareColumns.ClassifyId, saModel.SaCompareColumns.ClassifyName, saModel.SaCompareColumns.Sort, saModel.SaCompareColumns.ModifyTime,
  624. }
  625. if e = item.Update(updateCols); e != nil {
  626. br.Msg = "操作失败"
  627. br.ErrMsg = "移动比对失败, Err: " + e.Error()
  628. return
  629. }
  630. br.Ret = 200
  631. br.Success = true
  632. br.Msg = "操作成功"
  633. }
  634. // SearchByEs
  635. // @Title 文档对比搜索(从es获取)
  636. // @Description 图表模糊搜索(从es获取)
  637. // @Param Keyword query string true "文档对比标题"
  638. // @Success 200 {object} saModel.CompareListByEsResp
  639. // @router /compare/search [get]
  640. func (this *SaCompareController) SearchByEs() {
  641. br := new(models.BaseResponse).Init()
  642. defer func() {
  643. this.Data["json"] = br
  644. this.ServeJSON()
  645. }()
  646. sysUser := this.SysUser
  647. if sysUser == nil {
  648. br.Msg = "请登录"
  649. br.ErrMsg = "请登录,SysUser Is Empty"
  650. br.Ret = 408
  651. return
  652. }
  653. pageSize, _ := this.GetInt("PageSize")
  654. currentIndex, _ := this.GetInt("CurrentIndex")
  655. var startSize int
  656. if pageSize <= 0 {
  657. pageSize = utils.PageSize20
  658. }
  659. if currentIndex <= 0 {
  660. currentIndex = 1
  661. }
  662. startSize = paging.StartIndex(currentIndex, pageSize)
  663. keyword := this.GetString("Keyword")
  664. var searchList []*saModel.SaCompareElastic
  665. var total int
  666. var err error
  667. if keyword != "" {
  668. total, searchList, err = services.EsSearchSaCompareData(keyword, startSize, pageSize)
  669. } else {
  670. var list []*saModel.SaCompare
  671. saCompare := new(saModel.SaCompare)
  672. existCond := fmt.Sprintf(` AND result_img != ""`)
  673. existPars := make([]interface{}, 0)
  674. total, list, err = saCompare.GetPageItemsByCondition(startSize, pageSize, existCond, existPars, []string{}, "")
  675. if err != nil && err.Error() != utils.ErrNoRow() {
  676. br.Msg = "获取失败"
  677. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  678. return
  679. }
  680. for _, v := range list {
  681. tmp := new(saModel.SaCompareElastic)
  682. tmp.SaCompareId = v.SaCompareId
  683. tmp.ResultImg = v.ResultImg
  684. tmp.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  685. tmp.ModifyTime = v.ModifyTime.Format(utils.FormatDateTime)
  686. tmp.SysAdminId = v.SysAdminId
  687. tmp.SysAdminName = v.SysAdminName
  688. tmp.ClassifyId = v.ClassifyId
  689. tmp.ClassifyName = v.ClassifyName
  690. tmp.Title = v.Title
  691. searchList = append(searchList, tmp)
  692. }
  693. }
  694. //新增搜索词记录
  695. {
  696. searchKeyword := new(data_manage.SearchKeyword)
  697. searchKeyword.KeyWord = keyword
  698. searchKeyword.CreateTime = time.Now()
  699. go data_manage.AddSearchKeyword(searchKeyword)
  700. }
  701. page := paging.GetPaging(currentIndex, pageSize, total)
  702. resp := saModel.CompareListByEsResp{
  703. Paging: page,
  704. List: searchList,
  705. }
  706. br.Ret = 200
  707. br.Success = true
  708. br.Msg = "获取成功"
  709. br.Data = resp
  710. }