sa_compare.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749
  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. // 获取表格数据
  173. compLabCond := fmt.Sprintf(` AND a.%s = ?`, saModel.SaCompareLabelColumns.CompareId)
  174. compLabPars := make([]interface{}, 0)
  175. compLabPars = append(compLabPars, compareItem.SaCompareId)
  176. compLabs, e := saModel.GetSaCompareLabelByCond(compLabCond, compLabPars)
  177. if e != nil {
  178. br.Msg = "操作失败"
  179. br.ErrMsg = "获取比对标签列表失败, ErrMsg: " + e.Error()
  180. return
  181. }
  182. resp, e := services.FormatCompareLabels2TableData(compLabs)
  183. if e != nil {
  184. br.Msg = "操作失败"
  185. br.ErrMsg = "获取比对表格数据失败, ErrMsg: " + e.Error()
  186. return
  187. }
  188. resp.SaCompareId = compareItem.SaCompareId
  189. br.Data = resp
  190. br.Ret = 200
  191. br.Success = true
  192. br.Msg = "操作成功"
  193. }
  194. // PageList
  195. // @Title 文档比对列表
  196. // @Description 文档比对列表
  197. // @Param Keyword query string false "关键词"
  198. // @Param ClassifyId query int false "分类ID"
  199. // @Success 200 Ret=200 获取成功
  200. // @router /compare/page_list [get]
  201. func (this *SaCompareController) PageList() {
  202. br := new(models.BaseResponse).Init()
  203. defer func() {
  204. if br.ErrMsg == "" {
  205. br.IsSendEmail = false
  206. }
  207. this.Data["json"] = br
  208. this.ServeJSON()
  209. }()
  210. keyword := this.GetString("Keyword", "")
  211. classifyId, _ := this.GetInt("ClassifyId", 0)
  212. var startSize int
  213. pageSize, _ := this.GetInt("PageSize")
  214. currentIndex, _ := this.GetInt("CurrentIndex")
  215. if pageSize <= 0 {
  216. pageSize = utils.PageSize20
  217. }
  218. if currentIndex <= 0 {
  219. currentIndex = 1
  220. }
  221. startSize = paging.StartIndex(currentIndex, pageSize)
  222. itemOB := new(saModel.SaCompare)
  223. cond := ``
  224. pars := make([]interface{}, 0)
  225. if keyword != "" {
  226. kw := "%" + keyword + "%"
  227. cond += fmt.Sprintf(` AND %s LIKE ?`, saModel.SaCompareColumns.Title)
  228. pars = append(pars, kw)
  229. }
  230. if classifyId > 0 {
  231. cond += fmt.Sprintf(` AND %s = ?`, saModel.SaCompareColumns.ClassifyId)
  232. pars = append(pars, classifyId)
  233. }
  234. total, list, e := itemOB.GetPageItemsByCondition(startSize, pageSize, cond, pars, []string{}, "")
  235. if e != nil {
  236. br.Msg = "获取失败"
  237. br.ErrMsg = "获取文档列表失败, Err: " + e.Error()
  238. return
  239. }
  240. respList := make([]*saModel.SaCompareItem, 0)
  241. for i := range list {
  242. v := new(saModel.SaCompareItem)
  243. v.SaCompareId = list[i].SaCompareId
  244. v.ClassifyId = list[i].ClassifyId
  245. v.ClassifyName = list[i].ClassifyName
  246. v.Title = list[i].Title
  247. v.ResultImg = list[i].ResultImg
  248. v.SysAdminId = list[i].SysAdminId
  249. v.SysAdminName = list[i].SysAdminName
  250. v.CreateTime = list[i].CreateTime.Format(utils.FormatDateTime)
  251. respList = append(respList, v)
  252. }
  253. page := paging.GetPaging(currentIndex, pageSize, total)
  254. resp := &saModel.SaComparePageListResp{
  255. Paging: page,
  256. List: respList,
  257. }
  258. br.Data = resp
  259. br.Ret = 200
  260. br.Success = true
  261. br.Msg = "获取成功"
  262. }
  263. // UpdateResultImg
  264. // @Title 更新比对结果图片
  265. // @Description 更新比对结果图片
  266. // @Param request body saModel.SaCompareUpdateResultImgReq true "type json string"
  267. // @Success 200 Ret=200 操作成功
  268. // @router /compare/update_result_img [post]
  269. func (this *SaCompareController) UpdateResultImg() {
  270. br := new(models.BaseResponse).Init()
  271. defer func() {
  272. if br.ErrMsg == "" {
  273. br.IsSendEmail = false
  274. }
  275. this.Data["json"] = br
  276. this.ServeJSON()
  277. }()
  278. var req saModel.SaCompareUpdateResultImgReq
  279. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  280. br.Msg = "参数解析异常!"
  281. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  282. return
  283. }
  284. if req.SaCompareId <= 0 {
  285. br.Msg = "参数有误"
  286. return
  287. }
  288. if req.ResultImg == "" {
  289. br.Msg = "请选择结果图片"
  290. return
  291. }
  292. compareItem := new(saModel.SaCompare)
  293. if e := compareItem.GetItemById(req.SaCompareId); e != nil {
  294. br.Msg = "操作失败"
  295. br.ErrMsg = "获取比对信息失败, Err: " + e.Error()
  296. return
  297. }
  298. updateCols := []string{saModel.SaCompareColumns.ResultImg, saModel.SaCompareColumns.ModifyTime}
  299. compareItem.ResultImg = req.ResultImg
  300. compareItem.ModifyTime = time.Now().Local()
  301. if e := compareItem.Update(updateCols); e != nil {
  302. br.Msg = "操作失败"
  303. br.ErrMsg = "更新语义分析图片失败, Err: " + e.Error()
  304. return
  305. }
  306. // 新增ES对比文档
  307. go func() {
  308. _ = services.HandleElasticSaCompare(compareItem.SaCompareId)
  309. }()
  310. br.Ret = 200
  311. br.Success = true
  312. br.Msg = "操作成功"
  313. }
  314. // Detail
  315. // @Title 比对详情
  316. // @Description 比对详情
  317. // @Param CompareId query int true "比对ID"
  318. // @Success 200 Ret=200 获取成功
  319. // @router /compare/detail [get]
  320. func (this *SaCompareController) Detail() {
  321. br := new(models.BaseResponse).Init()
  322. defer func() {
  323. if br.ErrMsg == "" {
  324. br.IsSendEmail = false
  325. }
  326. this.Data["json"] = br
  327. this.ServeJSON()
  328. }()
  329. compareId, _ := this.GetInt("CompareId", 0)
  330. if compareId <= 0 {
  331. br.Msg = "参数有误"
  332. return
  333. }
  334. compareItem := new(saModel.SaCompare)
  335. if e := compareItem.GetItemById(compareId); e != nil {
  336. br.Msg = "获取失败"
  337. br.ErrMsg = "获取比对信息失败, Err: " + e.Error()
  338. return
  339. }
  340. // 比对文档IDs
  341. compDocOB := new(saModel.SaCompareDoc)
  342. compDocCond := fmt.Sprintf(` AND %s = ?`, saModel.SaCompareDocColumns.CompareId)
  343. compDocPars := make([]interface{}, 0)
  344. compDocPars = append(compDocPars, compareItem.SaCompareId)
  345. compDocs, e := compDocOB.GetItemsByCondition(compDocCond, compDocPars, []string{saModel.SaCompareDocColumns.DocId}, "")
  346. if e != nil {
  347. br.Msg = "获取失败"
  348. br.ErrMsg = "获取比对文档失败, Err: " + e.Error()
  349. return
  350. }
  351. compDocIds := make([]int, 0)
  352. for _, d := range compDocs {
  353. compDocIds = append(compDocIds, d.DocId)
  354. }
  355. // 比对详情
  356. detail := new(saModel.SaCompareDetail)
  357. detail.SaCompareId = compareItem.SaCompareId
  358. detail.ClassifyId = compareItem.ClassifyId
  359. detail.ClassifyName = compareItem.ClassifyName
  360. detail.Title = compareItem.Title
  361. detail.ResultImg = compareItem.ResultImg
  362. detail.SysAdminId = compareItem.SysAdminId
  363. detail.SysAdminName = compareItem.SysAdminName
  364. detail.CreateTime = compareItem.CreateTime.Format(utils.FormatDateTime)
  365. // 文档详情
  366. docDetail, e := services.GetSaCompareDetailByDocIds(compDocIds, compareId, this.SysUser.AdminId)
  367. if e != nil {
  368. br.Msg = "获取失败"
  369. br.ErrMsg = "获取比对详情信息失败, ErrMsg: " + e.Error()
  370. return
  371. }
  372. detail.HeadLabel = docDetail.HeadLabel
  373. detail.DocList = docDetail.DocList
  374. detail.KeywordsList = docDetail.KeywordsList
  375. br.Data = detail
  376. br.Ret = 200
  377. br.Success = true
  378. br.Msg = "获取成功"
  379. }
  380. // SelectDocs
  381. // @Title 选择比对文档
  382. // @Description 选择比对文档
  383. // @Param DocIds query string true "文档IDs"
  384. // @Success 200 Ret=200 获取成功
  385. // @router /compare/select_docs [get]
  386. func (this *SaCompareController) SelectDocs() {
  387. br := new(models.BaseResponse).Init()
  388. defer func() {
  389. if br.ErrMsg == "" {
  390. br.IsSendEmail = false
  391. }
  392. this.Data["json"] = br
  393. this.ServeJSON()
  394. }()
  395. docIdStr := this.GetString("DocIds", "")
  396. if docIdStr == "" {
  397. br.Msg = "请选择文档"
  398. return
  399. }
  400. docIds := make([]int, 0)
  401. docIdArr := strings.Split(docIdStr, ",")
  402. if len(docIdArr) == 0 {
  403. br.Msg = "请选择文档"
  404. return
  405. }
  406. if len(docIdArr) > 10 {
  407. br.Msg = "最多支持选择10个文档"
  408. return
  409. }
  410. for i := range docIdArr {
  411. d, e := strconv.Atoi(docIdArr[i])
  412. if e != nil {
  413. br.Msg = "文档ID有误"
  414. return
  415. }
  416. docIds = append(docIds, d)
  417. }
  418. resp, e := services.GetSaCompareDetailByDocIds(docIds, 0, this.SysUser.AdminId)
  419. if e != nil {
  420. br.Msg = "获取失败"
  421. br.ErrMsg = "获取选择的文档详情失败, ErrMsg: " + e.Error()
  422. return
  423. }
  424. br.Data = resp
  425. br.Ret = 200
  426. br.Success = true
  427. br.Msg = "获取成功"
  428. }
  429. // Del
  430. // @Title 删除语义分析
  431. // @Description 删除语义分析
  432. // @Param request body saModel.SaCompareDelReq true "type json string"
  433. // @Success 200 Ret=200 操作成功
  434. // @router /compare/del [post]
  435. func (this *SaCompareController) Del() {
  436. br := new(models.BaseResponse).Init()
  437. defer func() {
  438. if br.ErrMsg == "" {
  439. br.IsSendEmail = false
  440. }
  441. this.Data["json"] = br
  442. this.ServeJSON()
  443. }()
  444. var req saModel.SaCompareDelReq
  445. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  446. br.Msg = "参数解析异常!"
  447. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  448. return
  449. }
  450. if req.SaCompareId <= 0 {
  451. br.Msg = "参数有误"
  452. return
  453. }
  454. // TODO:可能会有只让自己或者管理员删除的需求,目前无
  455. item := new(saModel.SaCompare)
  456. e := item.GetItemById(req.SaCompareId)
  457. if e != nil {
  458. if e.Error() == utils.ErrNoRow() {
  459. br.Msg = "文档比对已被删除, 请刷新页面"
  460. return
  461. }
  462. br.Msg = "操作失败"
  463. br.ErrMsg = "获取语义分析比对信息失败, Err: " + e.Error()
  464. return
  465. }
  466. // 删除比对及相关
  467. if e = saModel.DelSaCompare(item.SaCompareId); e != nil {
  468. br.Msg = "操作失败"
  469. br.ErrMsg = "删除语义分析比对失败, Err: " + e.Error()
  470. return
  471. }
  472. go func() {
  473. _ = services.DeleteElasticSaCompare(item.SaCompareId)
  474. }()
  475. br.Ret = 200
  476. br.Success = true
  477. br.Msg = "操作成功"
  478. }
  479. // SaveKeywords
  480. // @Title 保存关键词
  481. // @Description 保存比对
  482. // @Param request body saModel.SaCompareSearchKeywordSaveReq true "type json string"
  483. // @Success 200 Ret=200 操作成功
  484. // @router /compare/save_keywords [post]
  485. func (this *SaCompareController) SaveKeywords() {
  486. br := new(models.BaseResponse).Init()
  487. defer func() {
  488. if br.ErrMsg == "" {
  489. br.IsSendEmail = false
  490. }
  491. this.Data["json"] = br
  492. this.ServeJSON()
  493. }()
  494. var req saModel.SaCompareSearchKeywordSaveReq
  495. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  496. br.Msg = "参数解析异常!"
  497. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  498. return
  499. }
  500. if req.SaCompareId <= 0 {
  501. br.Msg = "参数异常"
  502. return
  503. }
  504. keywords := make([]string, 0)
  505. for k := range req.Keywords {
  506. v := strings.TrimSpace(req.Keywords[k])
  507. if v != "" {
  508. keywords = append(keywords, v)
  509. }
  510. }
  511. keywordOB := new(saModel.SaCompareSearchKeyword)
  512. if e := keywordOB.DelAndCreateSearchKeywords(req.SaCompareId, keywords); e != nil {
  513. br.Msg = "操作失败"
  514. br.ErrMsg = "保存搜索关键词失败, Err: " + e.Error()
  515. return
  516. }
  517. br.Ret = 200
  518. br.Success = true
  519. br.Msg = "操作成功"
  520. }
  521. // Move
  522. // @Title 移动比对
  523. // @Description 移动比对
  524. // @Param request body saModel.SaCompareMoveReq true "type json string"
  525. // @Success 200 Ret=200 操作成功
  526. // @router /compare/move [post]
  527. func (this *SaCompareController) Move() {
  528. br := new(models.BaseResponse).Init()
  529. defer func() {
  530. if br.ErrMsg == "" {
  531. br.IsSendEmail = false
  532. }
  533. this.Data["json"] = br
  534. this.ServeJSON()
  535. }()
  536. var req saModel.SaCompareMoveReq
  537. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  538. br.Msg = "参数解析异常!"
  539. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  540. return
  541. }
  542. if req.SaCompareClassifyId <= 0 {
  543. br.Msg = "请选择分类"
  544. return
  545. }
  546. if req.SaCompareId <= 0 {
  547. br.Msg = "参数异常"
  548. return
  549. }
  550. item := new(saModel.SaCompare)
  551. e := item.GetItemById(req.SaCompareId)
  552. if e != nil {
  553. if e.Error() == utils.ErrNoRow() {
  554. br.Msg = "比对已被删除, 请刷新页面"
  555. return
  556. }
  557. br.Msg = "操作失败"
  558. br.ErrMsg = "获取比对信息失败, Err: " + e.Error()
  559. return
  560. }
  561. // 分类
  562. classifyItem := new(saModel.SaCompareClassify)
  563. if e = classifyItem.GetItemById(req.SaCompareClassifyId); e != nil {
  564. br.Msg = "分类信息有误"
  565. br.ErrMsg = "获取比对分类信息失败, Err: " + e.Error()
  566. return
  567. }
  568. // CV的指标库指标的移动, 没有技术, 全是感情~
  569. if req.PrevSaCompareId > 0 {
  570. prevCompare := new(saModel.SaCompare)
  571. if e = prevCompare.GetItemById(req.PrevSaCompareId); e != nil {
  572. if e.Error() == utils.ErrNoRow() {
  573. br.Msg = "上一个比对已被删除, 请刷新页面"
  574. return
  575. }
  576. br.Msg = "操作失败"
  577. br.ErrMsg = "获取上一个比对信息失败, Err: " + e.Error()
  578. return
  579. }
  580. // 如果是在两个比对之间
  581. if req.NextSaCompareId > 0 {
  582. nextCompare := new(saModel.SaCompare)
  583. if e = nextCompare.GetItemById(req.NextSaCompareId); e != nil {
  584. if e.Error() == utils.ErrNoRow() {
  585. br.Msg = "下一个比对已被删除, 请刷新页面"
  586. return
  587. }
  588. br.Msg = "操作失败"
  589. br.ErrMsg = "获取下一个比对信息失败, Err: " + e.Error()
  590. return
  591. }
  592. // 判断上一个比对与当前比对/下一个比对的位置
  593. if prevCompare.Sort == item.Sort || prevCompare.Sort == nextCompare.Sort {
  594. _ = saModel.UpdateSaCompareSort(prevCompare.ClassifyId, prevCompare.Sort, prevCompare.SaCompareId, `sort + 2`)
  595. } else {
  596. if nextCompare.Sort-prevCompare.Sort == 1 {
  597. _ = saModel.UpdateSaCompareSort(prevCompare.ClassifyId, prevCompare.Sort, prevCompare.SaCompareId, `sort + 1`)
  598. }
  599. }
  600. }
  601. item.Sort = prevCompare.Sort + 1
  602. } else {
  603. firstCompare, e := saModel.GetFirstSortSaCompare(req.SaCompareClassifyId)
  604. if e != nil && e.Error() != utils.ErrNoRow() {
  605. br.Msg = "操作失败"
  606. br.ErrMsg = "获取首个比对失败, Err: " + e.Error()
  607. return
  608. }
  609. if firstCompare != nil && firstCompare.Sort == 0 {
  610. _ = saModel.UpdateSaCompareSort(firstCompare.ClassifyId, 0, firstCompare.SaCompareId-1, `sort + 1`)
  611. }
  612. item.Sort = 0
  613. }
  614. // 更新
  615. item.ClassifyId = classifyItem.SaCompareClassifyId
  616. item.ClassifyName = classifyItem.ClassifyName
  617. item.ModifyTime = time.Now().Local()
  618. updateCols := []string{
  619. saModel.SaCompareColumns.ClassifyId, saModel.SaCompareColumns.ClassifyName, saModel.SaCompareColumns.Sort, saModel.SaCompareColumns.ModifyTime,
  620. }
  621. if e = item.Update(updateCols); e != nil {
  622. br.Msg = "操作失败"
  623. br.ErrMsg = "移动比对失败, Err: " + e.Error()
  624. return
  625. }
  626. br.Ret = 200
  627. br.Success = true
  628. br.Msg = "操作成功"
  629. }
  630. // SearchByEs
  631. // @Title 文档对比搜索(从es获取)
  632. // @Description 图表模糊搜索(从es获取)
  633. // @Param Keyword query string true "文档对比标题"
  634. // @Success 200 {object} saModel.CompareListByEsResp
  635. // @router /compare/search [get]
  636. func (this *SaCompareController) SearchByEs() {
  637. br := new(models.BaseResponse).Init()
  638. defer func() {
  639. this.Data["json"] = br
  640. this.ServeJSON()
  641. }()
  642. sysUser := this.SysUser
  643. if sysUser == nil {
  644. br.Msg = "请登录"
  645. br.ErrMsg = "请登录,SysUser Is Empty"
  646. br.Ret = 408
  647. return
  648. }
  649. pageSize, _ := this.GetInt("PageSize")
  650. currentIndex, _ := this.GetInt("CurrentIndex")
  651. var startSize int
  652. if pageSize <= 0 {
  653. pageSize = utils.PageSize20
  654. }
  655. if currentIndex <= 0 {
  656. currentIndex = 1
  657. }
  658. startSize = paging.StartIndex(currentIndex, pageSize)
  659. keyword := this.GetString("Keyword")
  660. var searchList []*saModel.SaCompareElastic
  661. var total int
  662. var err error
  663. if keyword != "" {
  664. total, searchList, err = services.EsSearchSaCompareData(keyword, startSize, pageSize)
  665. } else {
  666. var list []*saModel.SaCompare
  667. saCompare := new(saModel.SaCompare)
  668. existCond := fmt.Sprintf(` AND result_img != ""`)
  669. existPars := make([]interface{}, 0)
  670. total, list, err = saCompare.GetPageItemsByCondition(startSize, pageSize, existCond, existPars, []string{}, "")
  671. if err != nil && err.Error() != utils.ErrNoRow() {
  672. br.Msg = "获取失败"
  673. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  674. return
  675. }
  676. for _, v := range list {
  677. tmp := new(saModel.SaCompareElastic)
  678. tmp.SaCompareId = v.SaCompareId
  679. tmp.ResultImg = v.ResultImg
  680. tmp.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  681. tmp.ModifyTime = v.ModifyTime.Format(utils.FormatDateTime)
  682. tmp.SysAdminId = v.SysAdminId
  683. tmp.SysAdminName = v.SysAdminName
  684. tmp.ClassifyId = v.ClassifyId
  685. tmp.ClassifyName = v.ClassifyName
  686. tmp.Title = v.Title
  687. searchList = append(searchList, tmp)
  688. }
  689. }
  690. //新增搜索词记录
  691. {
  692. searchKeyword := new(data_manage.SearchKeyword)
  693. searchKeyword.KeyWord = keyword
  694. searchKeyword.CreateTime = time.Now()
  695. go data_manage.AddSearchKeyword(searchKeyword)
  696. }
  697. page := paging.GetPaging(currentIndex, pageSize, total)
  698. resp := saModel.CompareListByEsResp{
  699. Paging: page,
  700. List: searchList,
  701. }
  702. br.Ret = 200
  703. br.Success = true
  704. br.Msg = "获取成功"
  705. br.Data = resp
  706. }