base_from_radish_research_classify.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. package data
  2. import (
  3. "errors"
  4. "eta/eta_api/models/data_manage"
  5. dataSourceModel "eta/eta_api/models/data_source"
  6. "eta/eta_api/models/system"
  7. "eta/eta_api/services/elastic"
  8. "eta/eta_api/utils"
  9. "fmt"
  10. "time"
  11. )
  12. // GetRadishResearchClassifyTreeRecursive 递归获取分类树形结构
  13. func GetRadishResearchClassifyTreeRecursive(list []*data_manage.BaseFromRadishResearchClassifyItem, parentId int) []*data_manage.BaseFromRadishResearchClassifyItem {
  14. res := make([]*data_manage.BaseFromRadishResearchClassifyItem, 0)
  15. for _, v := range list {
  16. if v.ParentId == parentId {
  17. t := GetRadishResearchClassifyTreeRecursive(list, v.ClassifyId)
  18. v.Children = nil // 这一步是方便前端组件判断null...
  19. if len(t) > 0 {
  20. v.Children = t
  21. }
  22. res = append(res, v)
  23. }
  24. }
  25. return res
  26. }
  27. // RadishResearchMoveClassify 移动指标分类
  28. func RadishResearchMoveClassify(req data_manage.BaseFromRadishResearchClassifyMoveReq, sysUser *system.Admin) (err error, errMsg string) {
  29. // req.ClassifyId, req.ParentClassifyId, req.PrevClassifyId, req.NextClassifyId
  30. classifyId := req.ClassifyId
  31. parentClassifyId := req.ParentClassifyId
  32. prevClassifyId := req.PrevClassifyId
  33. nextClassifyId := req.NextClassifyId
  34. itemId := req.ItemId
  35. prevItemId := req.PrevItemId
  36. nextItemId := req.NextItemId
  37. //首先确定移动的对象是分类还是指标
  38. //判断上一个节点是分类还是指标
  39. //判断下一个节点是分类还是指标
  40. //同时更新分类目录下的分类sort和指标sort
  41. //更新当前移动的分类或者指标sort
  42. var parentEdbClassifyInfo *data_manage.BaseFromRadishResearchClassify
  43. if parentClassifyId > 0 {
  44. parentEdbClassifyInfo, err = data_manage.GetRadishResearchClassifyById(parentClassifyId)
  45. if err != nil {
  46. errMsg = "移动失败"
  47. err = errors.New("获取上级分类信息失败,Err:" + err.Error())
  48. return
  49. }
  50. }
  51. //如果有传入 上一个兄弟节点分类id
  52. var (
  53. edbClassifyInfo *data_manage.BaseFromRadishResearchClassify
  54. prevClassify *data_manage.BaseFromRadishResearchClassify
  55. nextClassify *data_manage.BaseFromRadishResearchClassify
  56. edbInfo *data_manage.BaseFromRadishResearchIndex
  57. prevEdbInfo *data_manage.BaseFromRadishResearchIndex
  58. nextEdbInfo *data_manage.BaseFromRadishResearchIndex
  59. prevSort int
  60. nextSort int
  61. )
  62. // 移动对象为分类, 判断权限
  63. if itemId == 0 {
  64. edbClassifyInfo, err = data_manage.GetRadishResearchClassifyById(classifyId)
  65. if err != nil {
  66. if utils.IsErrNoRow(err) {
  67. errMsg = "当前分类不存在"
  68. err = errors.New("获取分类信息失败,Err:" + err.Error())
  69. return
  70. }
  71. errMsg = "移动失败"
  72. err = errors.New("获取分类信息失败,Err:" + err.Error())
  73. return
  74. }
  75. if parentClassifyId > 0 && parentEdbClassifyInfo.Level == 6 {
  76. errMsg = "最高只支持添加6级分类"
  77. err = errors.New(errMsg)
  78. return
  79. }
  80. // 如果是移动目录, 那么校验一下父级目录下是否有重名目录
  81. exists, e := data_manage.GetRadishResearchClassifyByParentIdAndName(parentClassifyId, edbClassifyInfo.ClassifyName, classifyId)
  82. if e != nil && !utils.IsErrNoRow(e) {
  83. errMsg = "移动失败"
  84. err = fmt.Errorf("获取父级分类下的同名分类失败, Err: %s", e.Error())
  85. return
  86. }
  87. if exists != nil && exists.ClassifyId > 0 {
  88. errMsg = "移动失败,分类名称已存在"
  89. return
  90. }
  91. } else {
  92. edbInfo, err = data_manage.GetRadishResearchIndexById(req.ItemId)
  93. if err != nil {
  94. if utils.IsErrNoRow(err) {
  95. errMsg = "当前指标不存在"
  96. err = errors.New("获取分类信息失败,Err:" + err.Error())
  97. return
  98. }
  99. errMsg = "移动失败"
  100. err = errors.New("获取分类信息失败,Err:" + err.Error())
  101. return
  102. }
  103. if edbInfo != nil && edbInfo.BaseFromRadishResearchIndexId <= 0 {
  104. errMsg = "当前指标不存在"
  105. err = errors.New("获取指标信息失败, Err:" + err.Error())
  106. return
  107. }
  108. if parentClassifyId == 0 {
  109. errMsg = "移动失败,指标必须挂在分类下"
  110. err = errors.New(errMsg)
  111. return
  112. }
  113. //// 移动权限校验
  114. //button := GetEdbOpButton(sysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType, haveOperaAuth)
  115. //if !button.MoveButton {
  116. // errMsg = "无操作权限"
  117. // err = errors.New(errMsg)
  118. // return
  119. //}
  120. }
  121. if prevClassifyId > 0 {
  122. prevClassify, err = data_manage.GetRadishResearchClassifyById(prevClassifyId)
  123. if err != nil {
  124. errMsg = "移动失败"
  125. err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
  126. return
  127. }
  128. prevSort = prevClassify.Sort
  129. } else if prevItemId > 0 {
  130. prevEdbInfo, err = data_manage.GetRadishResearchIndexById(prevItemId)
  131. if err != nil {
  132. errMsg = "移动失败"
  133. err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
  134. return
  135. }
  136. prevSort = prevEdbInfo.Sort
  137. }
  138. if nextClassifyId > 0 {
  139. //下一个兄弟节点
  140. nextClassify, err = data_manage.GetRadishResearchClassifyById(nextClassifyId)
  141. if err != nil {
  142. errMsg = "移动失败"
  143. err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
  144. return
  145. }
  146. nextSort = nextClassify.Sort
  147. } else if nextItemId > 0 {
  148. //下一个兄弟节点
  149. nextEdbInfo, err = data_manage.GetRadishResearchIndexById(nextItemId)
  150. if err != nil {
  151. errMsg = "移动失败"
  152. err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
  153. return
  154. }
  155. nextSort = nextEdbInfo.Sort
  156. }
  157. err, errMsg = radishResearchMoveEdbClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextClassify, edbInfo, prevEdbInfo, nextEdbInfo, parentClassifyId, prevSort, nextSort)
  158. return
  159. }
  160. // radishResearchMoveEdbClassify 移动指标分类
  161. func radishResearchMoveEdbClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextClassify *data_manage.BaseFromRadishResearchClassify, edbInfo, prevEdbInfo, nextEdbInfo *data_manage.BaseFromRadishResearchIndex, parentClassifyId int, prevSort, nextSort int) (err error, errMsg string) {
  162. updateCol := make([]string, 0)
  163. var moveParent bool // 是否移动分类的父级目录
  164. var moveParentId int // 被改变父级分类的目录ID
  165. indexOb := new(data_manage.BaseFromRadishResearchIndex)
  166. // 移动对象为分类, 判断分类是否存在
  167. if edbClassifyInfo != nil {
  168. oldParentId := edbClassifyInfo.ParentId
  169. oldLevel := edbClassifyInfo.Level
  170. var classifyIds []int
  171. if oldParentId != parentClassifyId {
  172. //更新子分类对应的level
  173. childList, e, m := GetRadishResearchChildClassifyByClassifyId(edbClassifyInfo.BaseFromRadishResearchClassifyId)
  174. if e != nil {
  175. errMsg = "移动失败"
  176. err = errors.New("查询子分类失败,Err:" + e.Error() + m)
  177. return
  178. }
  179. if len(childList) > 0 {
  180. for _, v := range childList {
  181. if v.BaseFromRadishResearchClassifyId == edbClassifyInfo.BaseFromRadishResearchClassifyId {
  182. continue
  183. }
  184. classifyIds = append(classifyIds, v.BaseFromRadishResearchClassifyId)
  185. }
  186. }
  187. }
  188. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  189. if edbClassifyInfo.ParentId != parentClassifyId && parentClassifyId != 0 {
  190. if edbClassifyInfo.Level != parentEdbClassifyInfo.Level+1 { //禁止层级调整
  191. errMsg = "移动失败"
  192. err = errors.New("不支持目录层级变更")
  193. return
  194. }
  195. edbClassifyInfo.ParentId = parentEdbClassifyInfo.BaseFromRadishResearchClassifyId
  196. edbClassifyInfo.RootId = parentEdbClassifyInfo.RootId
  197. edbClassifyInfo.Level = parentEdbClassifyInfo.Level + 1
  198. edbClassifyInfo.LevelPath = fmt.Sprintf("%s,%d", parentEdbClassifyInfo.LevelPath, edbClassifyInfo.BaseFromRadishResearchClassifyId) // 注意更新层级路径
  199. edbClassifyInfo.ModifyTime = time.Now()
  200. // 更改层级路径
  201. edbClassifyInfo.LevelPath = fmt.Sprintf("%s,%d", parentEdbClassifyInfo.LevelPath, edbClassifyInfo.BaseFromRadishResearchClassifyId)
  202. updateCol = append(updateCol, "ParentId", "RootId", "Level", "LevelPath", "ModifyTime", "LevelPath")
  203. moveParent = true
  204. moveParentId = edbClassifyInfo.BaseFromRadishResearchClassifyId
  205. } else if edbClassifyInfo.ParentId != parentClassifyId && parentClassifyId == 0 {
  206. errMsg = "移动失败"
  207. err = errors.New("不支持目录层级变更")
  208. return
  209. }
  210. if prevSort > 0 {
  211. //如果是移动在两个兄弟节点之间
  212. if nextSort > 0 {
  213. //下一个兄弟节点
  214. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  215. if prevSort == nextSort || prevSort == edbClassifyInfo.Sort {
  216. //变更兄弟节点的排序
  217. updateSortStr := `sort + 2`
  218. //变更分类
  219. if prevClassify != nil {
  220. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, prevClassify.BaseFromRadishResearchClassifyId, prevClassify.Sort, updateSortStr)
  221. } else {
  222. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr)
  223. }
  224. //变更指标
  225. if prevEdbInfo != nil {
  226. //变更兄弟节点的排序
  227. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.BaseFromRadishResearchIndexId, updateSortStr)
  228. } else {
  229. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
  230. }
  231. } else {
  232. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  233. if nextSort-prevSort == 1 {
  234. //变更兄弟节点的排序
  235. updateSortStr := `sort + 1`
  236. //变更分类
  237. if prevClassify != nil {
  238. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, prevClassify.BaseFromRadishResearchClassifyId, prevSort, updateSortStr)
  239. } else {
  240. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr)
  241. }
  242. //变更指标
  243. if prevEdbInfo != nil {
  244. //变更兄弟节点的排序
  245. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.BaseFromRadishResearchIndexId, updateSortStr)
  246. } else {
  247. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
  248. }
  249. }
  250. }
  251. }
  252. edbClassifyInfo.Sort = prevSort + 1
  253. edbClassifyInfo.ModifyTime = time.Now()
  254. updateCol = append(updateCol, "Sort", "ModifyTime")
  255. } else if prevClassify == nil && nextClassify == nil && prevEdbInfo == nil && nextEdbInfo == nil && parentClassifyId > 0 {
  256. //处理只拖动到目录里,默认放到目录底部的情况
  257. var maxSort int
  258. maxSort, err = GetRadishResearchClassifyMaxSort(parentClassifyId)
  259. if err != nil {
  260. errMsg = "移动失败"
  261. err = errors.New("查询组内排序信息失败,Err:" + err.Error())
  262. return
  263. }
  264. edbClassifyInfo.Sort = maxSort + 1 //那就是排在组内最后一位
  265. edbClassifyInfo.ModifyTime = time.Now()
  266. updateCol = append(updateCol, "Sort", "ModifyTime")
  267. } else {
  268. // 拖动到父级分类的第一位
  269. firstClassify, tmpErr := data_manage.GetFirstRadishResearchClassifyByParentId(parentClassifyId)
  270. if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
  271. errMsg = "移动失败"
  272. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  273. return
  274. }
  275. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  276. if firstClassify != nil && firstClassify.Sort == 0 {
  277. updateSortStr := ` sort + 1 `
  278. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, firstClassify.BaseFromRadishResearchClassifyId-1, 0, updateSortStr)
  279. //该分类下的所有指标也需要+1
  280. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, 0, 0, updateSortStr)
  281. } else {
  282. //如果该分类下存在指标,且第一个指标的排序等于0,那么需要调整排序
  283. firstEdb, tErr := data_manage.GetFirstRadishResearchIndexByClassifyId(parentClassifyId)
  284. if tErr != nil && !utils.IsErrNoRow(tErr) {
  285. errMsg = "移动失败"
  286. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tErr.Error())
  287. return
  288. }
  289. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  290. if firstEdb != nil && firstEdb.Sort == 0 {
  291. updateSortStr := ` sort + 1 `
  292. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, 0, firstEdb.BaseFromRadishResearchIndexId-1, updateSortStr)
  293. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, 0, 0, updateSortStr)
  294. }
  295. }
  296. edbClassifyInfo.Sort = 0 //那就是排在第一位
  297. edbClassifyInfo.ModifyTime = time.Now()
  298. updateCol = append(updateCol, "Sort", "ModifyTime")
  299. }
  300. //更新
  301. if len(updateCol) > 0 {
  302. err = edbClassifyInfo.Update(updateCol)
  303. if err != nil {
  304. errMsg = "移动失败"
  305. err = errors.New("修改失败,Err:" + err.Error())
  306. return
  307. }
  308. //更新对应分类的root_id和层级
  309. if oldParentId != parentClassifyId {
  310. if len(classifyIds) > 0 {
  311. levelStep := edbClassifyInfo.Level - oldLevel
  312. err = data_manage.UpdateRadishResearchClassifyChildByParentClassifyId(classifyIds, edbClassifyInfo.RootId, levelStep)
  313. if err != nil {
  314. errMsg = "移动失败"
  315. err = errors.New("更新子分类失败,Err:" + err.Error())
  316. return
  317. }
  318. }
  319. }
  320. }
  321. } else {
  322. if edbInfo == nil {
  323. errMsg = "当前指标不存在"
  324. err = errors.New(errMsg)
  325. return
  326. }
  327. //如果改变了分类,那么移动该指标数据
  328. if edbInfo.ClassifyId != parentClassifyId {
  329. edbInfo.ClassifyId = parentClassifyId
  330. edbInfo.ModifyTime = time.Now()
  331. updateCol = append(updateCol, indexOb.Cols().ClassifyId, indexOb.Cols().ModifyTime)
  332. }
  333. if prevSort > 0 {
  334. //如果是移动在两个兄弟节点之间
  335. if nextSort > 0 {
  336. //下一个兄弟节点
  337. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  338. if prevSort == nextSort || prevSort == edbInfo.Sort {
  339. //变更兄弟节点的排序
  340. updateSortStr := `sort + 2`
  341. //变更分类
  342. if prevClassify != nil {
  343. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, prevClassify.BaseFromRadishResearchClassifyId, prevClassify.Sort, updateSortStr)
  344. } else {
  345. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr)
  346. }
  347. //变更指标
  348. if prevEdbInfo != nil {
  349. //变更兄弟节点的排序
  350. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.BaseFromRadishResearchIndexId, updateSortStr)
  351. } else {
  352. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
  353. }
  354. } else {
  355. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  356. if nextSort-prevSort == 1 {
  357. //变更兄弟节点的排序
  358. updateSortStr := `sort + 1`
  359. //变更分类
  360. if prevClassify != nil {
  361. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, prevClassify.BaseFromRadishResearchClassifyId, prevSort, updateSortStr)
  362. } else {
  363. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr)
  364. }
  365. //变更指标
  366. if prevEdbInfo != nil {
  367. //变更兄弟节点的排序
  368. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.BaseFromRadishResearchIndexId, updateSortStr)
  369. } else {
  370. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
  371. }
  372. }
  373. }
  374. }
  375. edbInfo.Sort = prevSort + 1
  376. edbInfo.ModifyTime = time.Now()
  377. updateCol = append(updateCol, indexOb.Cols().Sort, indexOb.Cols().ModifyTime)
  378. } else if prevClassify == nil && nextClassify == nil && prevEdbInfo == nil && nextEdbInfo == nil && parentClassifyId > 0 {
  379. //处理只拖动到目录里,默认放到目录底部的情况
  380. var maxSort int
  381. classifyOb := new(data_manage.BaseFromRadishResearchClassify)
  382. maxSort, err = classifyOb.GetSortMax(parentClassifyId)
  383. if err != nil {
  384. errMsg = "移动失败"
  385. err = errors.New("查询组内排序信息失败,Err:" + err.Error())
  386. return
  387. }
  388. edbInfo.Sort = maxSort + 1 //那就是排在组内最后一位
  389. edbInfo.ModifyTime = time.Now()
  390. updateCol = append(updateCol, indexOb.Cols().Sort, indexOb.Cols().ModifyTime)
  391. } else {
  392. // 拖动到父级分类的第一位
  393. firstClassify, tmpErr := data_manage.GetFirstRadishResearchClassifyByParentId(parentClassifyId)
  394. if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
  395. errMsg = "移动失败"
  396. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  397. return
  398. }
  399. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  400. if firstClassify != nil && firstClassify.Sort == 0 {
  401. updateSortStr := ` sort + 1 `
  402. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, firstClassify.BaseFromRadishResearchClassifyId-1, 0, updateSortStr)
  403. //该分类下的所有指标也需要+1
  404. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, 0, 0, updateSortStr)
  405. } else {
  406. //如果该分类下存在指标,且第一个指标的排序等于0,那么需要调整排序
  407. firstEdb, tErr := data_manage.GetFirstRadishResearchIndexByClassifyId(parentClassifyId)
  408. if tErr != nil && !utils.IsErrNoRow(tErr) {
  409. errMsg = "移动失败"
  410. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tErr.Error())
  411. return
  412. }
  413. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  414. if firstEdb != nil && firstEdb.Sort == 0 {
  415. updateSortStr := ` sort + 1 `
  416. _ = data_manage.UpdateRadishResearchIndexSortByClassifyId(parentClassifyId, 0, firstEdb.BaseFromRadishResearchIndexId-1, updateSortStr)
  417. _ = data_manage.UpdateRadishResearchClassifySortByParentId(parentClassifyId, 0, 0, updateSortStr)
  418. }
  419. }
  420. edbInfo.Sort = 0 //那就是排在第一位
  421. edbInfo.ModifyTime = time.Now()
  422. updateCol = append(updateCol, indexOb.Cols().Sort, indexOb.Cols().ModifyTime)
  423. }
  424. //更新
  425. if len(updateCol) > 0 {
  426. err = edbInfo.Update(updateCol)
  427. if err != nil {
  428. errMsg = "移动失败"
  429. err = errors.New("修改失败,Err:" + err.Error())
  430. return
  431. }
  432. // 更新ES
  433. go func() {
  434. indexItem := new(dataSourceModel.SearchDataSource)
  435. indexItem.PrimaryId = edbInfo.BaseFromRadishResearchIndexId
  436. indexItem.IndexCode = edbInfo.IndexCode
  437. indexItem.IndexName = edbInfo.IndexName
  438. indexItem.ClassifyId = edbInfo.ClassifyId
  439. indexItem.Unit = edbInfo.Unit
  440. indexItem.Frequency = edbInfo.Frequency
  441. indexItem.StartDate = edbInfo.StartDate.Format(utils.FormatDate)
  442. indexItem.EndDate = edbInfo.EndDate.Format(utils.FormatDate)
  443. indexItem.LatestValue = fmt.Sprint(edbInfo.LatestValue)
  444. indexItem.Source = utils.DATA_SOURCE_RADISH_RESEARCH
  445. indexItem.SourceName = utils.DATA_SOURCE_NAME_RADISH_RESEARCH
  446. indexItem.IsDeleted = 0
  447. indexItem.CreateTime = edbInfo.CreateTime.Format(utils.FormatDateTime)
  448. indexItem.ModifyTime = edbInfo.ModifyTime.Format(utils.FormatDateTime)
  449. docId := fmt.Sprintf("%d-%d", utils.DATA_SOURCE_RADISH_RESEARCH, edbInfo.BaseFromRadishResearchIndexId)
  450. if e := elastic.EsAddOrEditDataSourceIndex(utils.EsDataSourceIndexName, docId, indexItem); e != nil {
  451. utils.FileLog.Warning("RadishResearch-写入指标ES失败, %v", e)
  452. return
  453. }
  454. }()
  455. }
  456. }
  457. // 更新子分类的LevelPath
  458. if moveParent {
  459. UpdateRadishResearchClassifyLevelPathRecursive(moveParentId)
  460. }
  461. return
  462. }
  463. func GetRadishResearchChildClassifyByClassifyId(targetClassifyId int) (targetList []*data_manage.BaseFromRadishResearchClassify, err error, errMsg string) {
  464. //判断是否是挂在顶级目录下
  465. targetClassify, err := data_manage.GetRadishResearchClassifyById(targetClassifyId)
  466. if err != nil {
  467. if utils.IsErrNoRow(err) {
  468. errMsg = "当前分类不存在"
  469. err = errors.New(errMsg)
  470. return
  471. }
  472. errMsg = "获取失败"
  473. err = errors.New("获取分类信息失败,Err:" + err.Error())
  474. return
  475. }
  476. orderStr := ` order by level asc, sort asc, base_from_radish_research_classify_id asc`
  477. tmpList, err := data_manage.GetRadishResearchClassifyByRootIdLevel(targetClassify.RootId, orderStr)
  478. if err != nil && !utils.IsErrNoRow(err) {
  479. errMsg = "获取失败"
  480. err = errors.New("获取数据失败,Err:" + err.Error())
  481. return
  482. }
  483. idMap := make(map[int]struct{})
  484. if len(tmpList) > 0 {
  485. for _, v := range tmpList {
  486. if v.BaseFromRadishResearchClassifyId == targetClassify.BaseFromRadishResearchClassifyId {
  487. idMap[v.BaseFromRadishResearchClassifyId] = struct{}{}
  488. }
  489. }
  490. for _, v := range tmpList {
  491. if _, ok := idMap[v.ParentId]; ok {
  492. idMap[v.BaseFromRadishResearchClassifyId] = struct{}{}
  493. }
  494. }
  495. for _, v := range tmpList {
  496. if _, ok := idMap[v.BaseFromRadishResearchClassifyId]; ok {
  497. targetItem := new(data_manage.BaseFromRadishResearchClassify)
  498. targetItem.BaseFromRadishResearchClassifyId = v.BaseFromRadishResearchClassifyId
  499. targetItem.ParentId = v.ParentId
  500. targetItem.RootId = v.RootId
  501. //targetItem.UniqueCode = v.UniqueCode
  502. targetItem.Level = v.Level
  503. targetItem.ClassifyName = v.ClassifyName
  504. //targetItem.IsJoinPermission = v.IsJoinPermission
  505. targetList = append(targetList, targetItem)
  506. }
  507. }
  508. }
  509. return
  510. }
  511. func GetRadishResearchClassifyMaxSort(parentId int) (maxSort int, err error) {
  512. //获取该层级下最大的排序数
  513. classifyOb := new(data_manage.BaseFromRadishResearchClassify)
  514. classifyMaxSort, err := classifyOb.GetSortMax(parentId)
  515. if err != nil {
  516. return
  517. }
  518. maxSort = classifyMaxSort
  519. edbMaxSort, err := data_manage.GetRadishResearchIndexMaxSortByClassifyId(parentId)
  520. if err != nil {
  521. return
  522. }
  523. if maxSort < edbMaxSort {
  524. maxSort = edbMaxSort
  525. }
  526. return
  527. }
  528. // UpdateRadishResearchClassifyLevelPathRecursive 分类父级ID变更后, 递归更新分类LevelPath
  529. func UpdateRadishResearchClassifyLevelPathRecursive(parentId int) {
  530. fmt.Println("ParentId", parentId)
  531. classifyOb := new(data_manage.BaseFromRadishResearchClassify)
  532. cond := fmt.Sprintf(` AND %s = ?`, classifyOb.Cols().ParentId)
  533. pars := make([]interface{}, 0)
  534. pars = append(pars, parentId)
  535. classifies, e := classifyOb.GetItemsByCondition(cond, pars, []string{}, "")
  536. if e != nil {
  537. utils.FileLog.Warning("UpdateRadishResearchClassifyLevelPathRecursive, errMsg: %v", e)
  538. return
  539. }
  540. if len(classifies) == 0 {
  541. return
  542. }
  543. // 批量更新子分类的LevelPath
  544. parentClassify, e := classifyOb.GetItemById(parentId)
  545. if e != nil {
  546. if utils.IsErrNoRow(e) {
  547. return
  548. }
  549. utils.FileLog.Warning("UpdateRadishResearchClassifyLevelPathRecursive, parent errMsg: %v", e)
  550. return
  551. }
  552. if parentClassify != nil && parentClassify.BaseFromRadishResearchClassifyId <= 0 {
  553. return
  554. }
  555. // 继续递归处理
  556. for _, v := range classifies {
  557. e = classifyOb.UpdateLevelPath(v.BaseFromRadishResearchClassifyId, fmt.Sprintf("%s,%d", parentClassify.LevelPath, v.BaseFromRadishResearchClassifyId))
  558. if e != nil {
  559. utils.FileLog.Warning("UpdateRadishResearchClassifyLevelPathRecursive, update errMsg: %v", e)
  560. continue
  561. }
  562. UpdateRadishResearchClassifyLevelPathRecursive(v.BaseFromRadishResearchClassifyId)
  563. }
  564. return
  565. }