edb_public_classify.go 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. package data
  2. import (
  3. "errors"
  4. "eta_gn/eta_api/models/data_manage"
  5. "eta_gn/eta_api/models/system"
  6. "eta_gn/eta_api/utils"
  7. "fmt"
  8. "strconv"
  9. "time"
  10. )
  11. // TODO 移动的时候,获取上下级的分裂
  12. // AddEdbPublicClassify
  13. // @Description: 添加公共指标分类
  14. // @author: Roc
  15. // @datetime 2024-12-04 18:00:22
  16. // @param classifyName string
  17. // @param parentId int
  18. // @param level int
  19. // @param classifyType uint8
  20. // @param sysUserId int
  21. // @param sysUserName string
  22. // @return classifyInfo *data_manage.EdbPublicClassify
  23. // @return err error
  24. // @return errMsg string
  25. func AddEdbPublicClassify(classifyName string, parentId int, classifyType uint8, sysUserId int, sysUserName string) (classifyInfo *data_manage.EdbPublicClassify, err error, errMsg string) {
  26. edbPublicClassifyObj := data_manage.EdbPublicClassify{}
  27. // 校验分类名称相同的数量
  28. {
  29. var count int
  30. count, err = edbPublicClassifyObj.GetEdbClassifyCount(classifyName, parentId, classifyType)
  31. if err != nil {
  32. errMsg = `判断名称是否已存在失败`
  33. return
  34. }
  35. if count > 0 {
  36. errMsg = `分类名称已存在,请重新输入`
  37. err = errors.New(errMsg)
  38. return
  39. }
  40. }
  41. // 父级的层级
  42. level := 0
  43. //获取该层级下最大的排序数
  44. maxSort, err := GetEdbPublicClassifyMaxSort(parentId, classifyType)
  45. if err != nil {
  46. errMsg = "获取失败"
  47. err = errors.New("查询排序信息失败,Err:" + err.Error())
  48. return
  49. }
  50. //查询顶级rootId
  51. rootId := 0
  52. var classifyNamePath, classifyIdPath string
  53. if parentId > 0 {
  54. parentClassify, tErr := edbPublicClassifyObj.GetEdbClassifyById(parentId)
  55. if tErr != nil {
  56. if utils.IsErrNoRow(tErr) {
  57. errMsg = "父级分类不存在"
  58. err = errors.New(errMsg)
  59. return
  60. }
  61. errMsg = "获取失败"
  62. err = errors.New("获取分类信息失败,Err:" + tErr.Error())
  63. return
  64. }
  65. level = parentClassify.Level
  66. rootId = parentClassify.RootId
  67. classifyNamePath = fmt.Sprint(parentClassify.EdbPublicClassifyNamePath, "|", classifyName)
  68. classifyIdPath = fmt.Sprint(parentClassify.EdbPublicClassifyIdPath, ",")
  69. } else {
  70. classifyNamePath = classifyName
  71. }
  72. // 层级校验
  73. if level > utils.EdbClassifyMaxLevel {
  74. errMsg = fmt.Sprintf("最高只支持添加%d级分类", level)
  75. return
  76. }
  77. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  78. classifyInfo = &data_manage.EdbPublicClassify{
  79. //EdbPublicClassifyId: 0,
  80. ClassifyType: classifyType,
  81. EdbPublicClassifyName: classifyName,
  82. ParentId: parentId,
  83. HasData: 0,
  84. RootId: rootId,
  85. CreateTime: time.Now(),
  86. ModifyTime: time.Now(),
  87. SysUserId: sysUserId,
  88. SysUserRealName: sysUserName,
  89. Level: level + 1,
  90. UniqueCode: utils.MD5(utils.PUBLIC_CLASSIFY_PREFIX + "_" + timestamp),
  91. Sort: maxSort + 1,
  92. LastModifyUserId: sysUserId,
  93. LastModifyUserRealName: sysUserName,
  94. EdbPublicClassifyNamePath: classifyNamePath,
  95. EdbPublicClassifyIdPath: "",
  96. }
  97. err = classifyInfo.Add()
  98. if err != nil {
  99. errMsg = "保存分类失败"
  100. return
  101. }
  102. // 更改分类id完整路径path
  103. updateCols := []string{"EdbPublicClassifyIdPath"}
  104. classifyInfo.EdbPublicClassifyIdPath = fmt.Sprint(classifyIdPath, classifyInfo.EdbPublicClassifyId)
  105. if parentId == 0 { //一级目录的rootId等于自己本身
  106. classifyInfo.RootId = classifyInfo.EdbPublicClassifyId
  107. updateCols = append(updateCols, "RootId")
  108. }
  109. err = classifyInfo.Update(updateCols)
  110. if err != nil {
  111. errMsg = "更新分类失败"
  112. return
  113. }
  114. return
  115. }
  116. // EditEdbPublicClassify
  117. // @Description: 编辑指标分类
  118. // @author: Roc
  119. // @datetime 2024-12-05 09:29:38
  120. // @param classifyId int
  121. // @param classifyName string
  122. // @param sysUser *system.Admin
  123. // @return err error
  124. // @return errMsg string
  125. func EditEdbPublicClassify(classifyId int, classifyName string, sysUser *system.Admin) (err error, errMsg string) {
  126. edbPublicClassifyObj := data_manage.EdbPublicClassify{}
  127. item, err := edbPublicClassifyObj.GetEdbClassifyById(classifyId)
  128. if err != nil {
  129. errMsg = `修改失败`
  130. return
  131. }
  132. // TODO 操作权限校验
  133. {
  134. }
  135. // 需要变更的字段
  136. updateCols := make([]string, 0)
  137. // 旧完整路径 , 新的完整路径
  138. var oldClassifyNamePath, newClassifyNamePath string
  139. // 名字相同,那么就直接返回
  140. if item.EdbPublicClassifyName == classifyName {
  141. return
  142. }
  143. // 判断名称是否已存在
  144. count, tmpErr := edbPublicClassifyObj.GetEdbClassifyCount(classifyName, item.ParentId, item.ClassifyType)
  145. if tmpErr != nil {
  146. err = tmpErr
  147. errMsg = "判断名称是否已存在失败"
  148. return
  149. }
  150. if count > 0 {
  151. errMsg = "分类名称已存在,请重新输入"
  152. err = errors.New(errMsg)
  153. return
  154. }
  155. // 旧完整路径
  156. oldClassifyNamePath = item.EdbPublicClassifyNamePath
  157. if item.ParentId > 0 {
  158. parentItem, tmpErr := edbPublicClassifyObj.GetEdbClassifyById(item.ParentId)
  159. if tmpErr != nil {
  160. err = tmpErr
  161. return
  162. }
  163. newClassifyNamePath = fmt.Sprint(parentItem.EdbPublicClassifyNamePath, "|", classifyName)
  164. } else {
  165. newClassifyNamePath = classifyName
  166. }
  167. // 更新自己的信息
  168. item.EdbPublicClassifyName = classifyName
  169. item.EdbPublicClassifyNamePath = newClassifyNamePath
  170. item.LastModifyUserId = sysUser.AdminId
  171. item.LastModifyUserRealName = sysUser.RealName
  172. updateCols = append(updateCols, "EdbPublicClassifyName", "EdbPublicClassifyNamePath", "LastModifyUserId", "LastModifyUserRealName")
  173. // 修改数据
  174. if len(updateCols) > 0 {
  175. err = item.UpdateEdbClassifyNameAndNamePath(updateCols, oldClassifyNamePath, newClassifyNamePath)
  176. if err != nil {
  177. errMsg = "保存失败"
  178. }
  179. }
  180. return
  181. }
  182. // GetEdbPublicClassifyMaxSort
  183. // @Description: 获取最大排序值
  184. // @author: Roc
  185. // @datetime 2024-12-04 16:54:57
  186. // @param parentId int
  187. // @param classifyType uint8
  188. // @return maxSort int
  189. // @return err error
  190. func GetEdbPublicClassifyMaxSort(parentId int, classifyType uint8) (maxSort int, err error) {
  191. edbPublicClassifyObj := data_manage.EdbPublicClassify{}
  192. //获取该层级下最大的排序数
  193. classifyMaxSort, err := edbPublicClassifyObj.GetEdbClassifyMaxSort(parentId, classifyType)
  194. if err != nil {
  195. return
  196. }
  197. maxSort = classifyMaxSort
  198. edbMaxSort, err := data_manage.GetEdbInfoMaxSortByClassifyId(parentId)
  199. if err != nil {
  200. return
  201. }
  202. if maxSort < edbMaxSort {
  203. maxSort = edbMaxSort
  204. }
  205. return
  206. }
  207. // DeleteEdbPublicClassifyCheck 删除检测
  208. func DeleteEdbPublicClassifyCheck(classifyId int, sysUser *system.Admin) (deleteStatus int, tipsMsg string, allClassifyIdList []int, tableList []*data_manage.ExcelBaseInfo, err error, errMsg string) {
  209. // TODO 操作权限校验
  210. {
  211. }
  212. edbPublicClassifyObj := data_manage.EdbPublicClassify{}
  213. // 查找当前分类
  214. item, tmpErr := edbPublicClassifyObj.GetEdbClassifyById(classifyId)
  215. if tmpErr != nil {
  216. errMsg = `查找分类失败`
  217. err = tmpErr
  218. return
  219. }
  220. // 查找分类下所有子分类
  221. childClassifyIdList, tmpErr := item.GetAllChildClassifyIdList()
  222. if tmpErr != nil {
  223. errMsg = `查找下级分类失败`
  224. err = tmpErr
  225. return
  226. }
  227. allClassifyIdList = childClassifyIdList
  228. allClassifyIdList = append(allClassifyIdList, item.EdbPublicClassifyId)
  229. // 判断分类下,是否含有指标
  230. {
  231. //判断分类下,是否含有指标
  232. count, tmpErr := edbPublicClassifyObj.GetEdbInfoCountByClassifyIdList(allClassifyIdList)
  233. if tmpErr != nil {
  234. errMsg = "删除失败"
  235. err = errors.New("分类下是否含有指标失败,Err:" + tmpErr.Error())
  236. return
  237. }
  238. if count > 0 {
  239. deleteStatus = 1
  240. tipsMsg = "目录关联指标不可删除"
  241. return
  242. }
  243. }
  244. // 子目录数量校验
  245. if len(childClassifyIdList) > 0 {
  246. deleteStatus = 2
  247. tipsMsg = "确认删除当前目录及包含的子目录吗"
  248. return
  249. }
  250. return
  251. }
  252. // DeleteEdbPublicClassify 删除分类/指标
  253. func DeleteEdbPublicClassify(classifyId int, sysUser *system.Admin, requestBody, requestUrl string) (nextItem *data_manage.EdbInfo, tableList []*data_manage.ExcelBaseInfo, err error, errMsg string) {
  254. //删除分类校验
  255. deleteStatus, tipsMsg, allClassifyIdList, _, err, errMsg := DeleteEdbPublicClassifyCheck(classifyId, sysUser)
  256. // 0:可以;2:删除子目录;1:不可删除(有关联指标)
  257. if deleteStatus == 1 {
  258. if tipsMsg != `` {
  259. errMsg = tipsMsg
  260. }
  261. if err == nil {
  262. err = errors.New(errMsg)
  263. }
  264. return
  265. }
  266. edbPublicClassifyObj := data_manage.EdbPublicClassify{}
  267. err = edbPublicClassifyObj.BatchesDel(allClassifyIdList)
  268. if err != nil {
  269. errMsg = "删除失败"
  270. return
  271. }
  272. return
  273. }
  274. // MoveEdbClassify 移动指标分类 TODO
  275. //func MoveEdbPublicClassify(req data_manage.MoveEdbClassifyReq, sysUser *system.Admin, classifyType uint8) (err error, errMsg string) {
  276. // // req.ClassifyId, req.ParentClassifyId, req.PrevClassifyId, req.NextClassifyId
  277. // classifyId := req.ClassifyId
  278. // parentClassifyId := req.ParentClassifyId
  279. // prevClassifyId := req.PrevClassifyId
  280. // nextClassifyId := req.NextClassifyId
  281. //
  282. // edbInfoId := req.EdbInfoId
  283. // prevEdbInfoId := req.PrevEdbInfoId
  284. // nextEdbInfoId := req.NextEdbInfoId
  285. //
  286. // //首先确定移动的对象是分类还是指标
  287. // //判断上一个节点是分类还是指标
  288. // //判断下一个节点是分类还是指标
  289. // //同时更新分类目录下的分类sort和指标sort
  290. // //更新当前移动的分类或者指标sort
  291. //
  292. // var parentEdbClassifyInfo *data_manage.EdbClassify
  293. // if parentClassifyId > 0 {
  294. // parentEdbClassifyInfo, err = data_manage.GetEdbClassifyById(parentClassifyId)
  295. // if err != nil {
  296. // errMsg = "移动失败"
  297. // err = errors.New("获取上级分类信息失败,Err:" + err.Error())
  298. // return
  299. // }
  300. // }
  301. //
  302. // //如果有传入 上一个兄弟节点分类id
  303. // var (
  304. // edbClassifyInfo *data_manage.EdbPublicClassify
  305. // prevClassify *data_manage.EdbPublicClassify
  306. // nextClassify *data_manage.EdbPublicClassify
  307. //
  308. // edbInfo *data_manage.EdbInfo
  309. // prevEdbInfo *data_manage.EdbInfo
  310. // nextEdbInfo *data_manage.EdbInfo
  311. // prevSort int
  312. // nextSort int
  313. // )
  314. // obj:= data_manage.EdbPublicClassify{}
  315. //
  316. // // 移动对象为分类, 判断权限
  317. // if edbInfoId == 0 {
  318. // edbClassifyInfo, err = obj.GetEdbClassifyById(classifyId)
  319. // if err != nil {
  320. // if utils.IsErrNoRow(err) {
  321. // errMsg = "当前分类不存在"
  322. // err = errors.New("获取分类信息失败,Err:" + err.Error())
  323. // return
  324. // }
  325. // errMsg = "移动失败"
  326. // err = errors.New("获取分类信息失败,Err:" + err.Error())
  327. // return
  328. // }
  329. // if edbClassifyInfo.SysUserId != sysUser.AdminId {
  330. // errMsg = "不是本人目录,您没有操作权限"
  331. // err = errors.New(errMsg)
  332. // return
  333. // }
  334. // if parentClassifyId > 0 && parentEdbClassifyInfo.Level == 6 {
  335. // errMsg = "最高只支持添加6级分类"
  336. // err = errors.New(errMsg)
  337. // return
  338. // }
  339. // // 如果是移动目录, 那么校验一下父级目录下是否有重名目录
  340. // exists, e := data_manage.GetEdbPublicClassifyByParentIdAndName(parentClassifyId, edbClassifyInfo.EdbPublicClassifyName, classifyId, classifyType)
  341. // if e != nil && !utils.IsErrNoRow(e) {
  342. // errMsg = "移动失败"
  343. // err = fmt.Errorf("获取父级分类下的同名分类失败, Err: %s", e.Error())
  344. // return
  345. // }
  346. // if exists != nil && exists.ClassifyId > 0 {
  347. // errMsg = "移动失败,分类名称已存在"
  348. // return
  349. // }
  350. //
  351. //
  352. // } else {
  353. // edbInfo, err = data_manage.GetEdbInfoById(req.EdbInfoId)
  354. // if err != nil {
  355. // if utils.IsErrNoRow(err) {
  356. // errMsg = "当前指标不存在"
  357. // err = errors.New("获取分类信息失败,Err:" + err.Error())
  358. // return
  359. // }
  360. // errMsg = "移动失败"
  361. // err = errors.New("获取分类信息失败,Err:" + err.Error())
  362. // return
  363. // }
  364. //
  365. // if edbInfo.SysUserId != sysUser.AdminId {
  366. // errMsg = "不是本人指标,您没有操作权限"
  367. // err = errors.New(errMsg)
  368. // return
  369. // }
  370. //
  371. // if parentClassifyId == 0 {
  372. // errMsg = "移动失败,指标必须挂在分类下"
  373. // err = errors.New(errMsg)
  374. // return
  375. // }
  376. //
  377. // var haveOperaAuth bool
  378. // // 权限校验
  379. // {
  380. // haveOperaAuth, err = data_manage_permission.CheckEdbPermissionByEdbInfoId(edbInfo.EdbInfoId, edbInfo.ClassifyId, edbInfo.IsJoinPermission, sysUser.AdminId)
  381. // if err != nil {
  382. // errMsg = "移动失败"
  383. // err = errors.New("获取指标权限信息失败,Err:" + err.Error())
  384. // return
  385. // }
  386. // }
  387. //
  388. // // 移动权限校验
  389. // button := GetEdbOpButton(sysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType, haveOperaAuth)
  390. // if !button.MoveButton {
  391. // errMsg = "无操作权限"
  392. // err = errors.New(errMsg)
  393. // return
  394. // }
  395. // }
  396. //
  397. // if prevClassifyId > 0 {
  398. // prevClassify, err = data_manage.GetEdbClassifyById(prevClassifyId)
  399. // if err != nil {
  400. // errMsg = "移动失败"
  401. // err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
  402. // return
  403. // }
  404. // prevSort = prevClassify.Sort
  405. // } else if prevEdbInfoId > 0 {
  406. // prevEdbInfo, err = data_manage.GetEdbInfoById(prevEdbInfoId)
  407. // if err != nil {
  408. // errMsg = "移动失败"
  409. // err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
  410. // return
  411. // }
  412. // prevSort = prevEdbInfo.Sort
  413. // }
  414. //
  415. // if nextClassifyId > 0 {
  416. // //下一个兄弟节点
  417. // nextClassify, err = data_manage.GetEdbClassifyById(nextClassifyId)
  418. // if err != nil {
  419. // errMsg = "移动失败"
  420. // err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
  421. // return
  422. // }
  423. // nextSort = nextClassify.Sort
  424. // } else if nextEdbInfoId > 0 {
  425. // //下一个兄弟节点
  426. // nextEdbInfo, err = data_manage.GetEdbInfoById(nextEdbInfoId)
  427. // if err != nil {
  428. // errMsg = "移动失败"
  429. // err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
  430. // return
  431. // }
  432. // nextSort = nextEdbInfo.Sort
  433. // }
  434. //
  435. // err, errMsg = moveEdbOrClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextClassify, edbInfo, prevEdbInfo, nextEdbInfo, parentClassifyId, prevSort, nextSort, classifyType)
  436. // return
  437. //}
  438. // moveEdbOrClassify 移动指标分类 TODO
  439. //func moveEdbOrPublicClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextClassify *data_manage.EdbClassify, edbInfo, prevEdbInfo, nextEdbInfo *data_manage.EdbInfo, parentClassifyId int, prevSort, nextSort int, classifyType uint8) (err error, errMsg string) {
  440. //
  441. // if edbClassifyInfo != nil {
  442. // // 移动分类
  443. // return moveEdbClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextClassify, prevEdbInfo, nextEdbInfo, parentClassifyId, prevSort, nextSort, classifyType)
  444. // } else {
  445. // // 移动指标
  446. // return moveEdb(prevClassify, nextClassify, edbInfo, prevEdbInfo, nextEdbInfo, parentClassifyId, prevSort, nextSort, classifyType)
  447. // }
  448. //
  449. // return
  450. //}
  451. // moveEdb TODO
  452. // @Description: 移动指标
  453. // @author: Roc
  454. // @datetime 2024-11-26 16:07:37
  455. // @param prevClassify *data_manage.EdbClassify
  456. // @param nextClassify *data_manage.EdbClassify
  457. // @param edbInfo *data_manage.EdbInfo
  458. // @param prevEdbInfo *data_manage.EdbInfo
  459. // @param nextEdbInfo *data_manage.EdbInfo
  460. // @param parentClassifyId int
  461. // @param prevSort int
  462. // @param nextSort int
  463. // @param classifyType uint8
  464. // @return err error
  465. // @return errMsg string
  466. //func movePublicEdb(prevClassify, nextClassify *data_manage.EdbClassify, edbInfo, prevEdbInfo, nextEdbInfo *data_manage.EdbInfo, parentClassifyId int, prevSort, nextSort int, classifyType uint8) (err error, errMsg string) {
  467. // updateCol := make([]string, 0)
  468. //
  469. // if edbInfo == nil {
  470. // errMsg = "当前指标不存在"
  471. // err = errors.New(errMsg)
  472. // return
  473. // }
  474. // //如果改变了分类,那么移动该指标数据
  475. // if edbInfo.ClassifyId != parentClassifyId {
  476. // edbInfo.ClassifyId = parentClassifyId
  477. // edbInfo.ModifyTime = time.Now()
  478. // updateCol = append(updateCol, "ClassifyId", "ModifyTime")
  479. // }
  480. // if prevSort > 0 {
  481. // //如果是移动在两个兄弟节点之间
  482. // if nextSort > 0 {
  483. // //下一个兄弟节点
  484. // //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  485. // if prevSort == nextSort || prevSort == edbInfo.Sort {
  486. // //变更兄弟节点的排序
  487. // updateSortStr := `sort + 2`
  488. //
  489. // //变更分类
  490. // if prevClassify != nil {
  491. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, prevClassify.ClassifyId, prevClassify.Sort, updateSortStr, classifyType)
  492. // } else {
  493. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, classifyType)
  494. // }
  495. //
  496. // //变更指标
  497. // if prevEdbInfo != nil {
  498. // //变更兄弟节点的排序
  499. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.EdbInfoId, updateSortStr)
  500. // } else {
  501. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
  502. // }
  503. // } else {
  504. // //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  505. // if nextSort-prevSort == 1 {
  506. // //变更兄弟节点的排序
  507. // updateSortStr := `sort + 1`
  508. // //变更分类
  509. // if prevClassify != nil {
  510. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, prevClassify.ClassifyId, prevSort, updateSortStr, classifyType)
  511. // } else {
  512. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, classifyType)
  513. // }
  514. //
  515. // //变更指标
  516. // if prevEdbInfo != nil {
  517. // //变更兄弟节点的排序
  518. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.EdbInfoId, updateSortStr)
  519. // } else {
  520. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
  521. // }
  522. // }
  523. // }
  524. // }
  525. //
  526. // edbInfo.Sort = prevSort + 1
  527. // edbInfo.ModifyTime = time.Now()
  528. // updateCol = append(updateCol, "Sort", "ModifyTime")
  529. // } else if prevClassify == nil && nextClassify == nil && prevEdbInfo == nil && nextEdbInfo == nil && parentClassifyId > 0 {
  530. // //处理只拖动到目录里,默认放到目录底部的情况
  531. // var maxSort int
  532. // maxSort, err = GetEdbClassifyMaxSort(parentClassifyId, classifyType)
  533. // if err != nil {
  534. // errMsg = "移动失败"
  535. // err = errors.New("查询组内排序信息失败,Err:" + err.Error())
  536. // return
  537. // }
  538. // edbInfo.Sort = maxSort + 1 //那就是排在组内最后一位
  539. // edbInfo.ModifyTime = time.Now()
  540. // updateCol = append(updateCol, "Sort", "ModifyTime")
  541. // } else {
  542. // // 拖动到父级分类的第一位
  543. // firstClassify, tmpErr := data_manage.GetFirstEdbClassifyByParentId(parentClassifyId)
  544. // if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
  545. // errMsg = "移动失败"
  546. // err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  547. // return
  548. // }
  549. //
  550. // //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  551. // if firstClassify != nil && firstClassify.ClassifyId > 0 && firstClassify.Sort == 0 {
  552. // updateSortStr := ` sort + 1 `
  553. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, firstClassify.ClassifyId-1, 0, updateSortStr, classifyType)
  554. // //该分类下的所有指标也需要+1
  555. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, 0, 0, updateSortStr)
  556. // } else {
  557. // //如果该分类下存在指标,且第一个指标的排序等于0,那么需要调整排序
  558. // firstEdb, tErr := data_manage.GetFirstEdbInfoByClassifyId(parentClassifyId)
  559. // if tErr != nil && !utils.IsErrNoRow(tErr) {
  560. // errMsg = "移动失败"
  561. // err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tErr.Error())
  562. // return
  563. // }
  564. //
  565. // //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  566. // if firstEdb != nil && firstEdb.ClassifyId > 0 && firstEdb.Sort == 0 {
  567. // updateSortStr := ` sort + 1 `
  568. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, 0, firstEdb.EdbInfoId-1, updateSortStr)
  569. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, 0, updateSortStr, classifyType)
  570. // }
  571. // }
  572. //
  573. // edbInfo.Sort = 0 //那就是排在第一位
  574. // edbInfo.ModifyTime = time.Now()
  575. // updateCol = append(updateCol, "Sort", "ModifyTime")
  576. // }
  577. //
  578. // //更新
  579. // if len(updateCol) > 0 {
  580. // err = edbInfo.Update(updateCol)
  581. // if err != nil {
  582. // errMsg = "移动失败"
  583. // err = errors.New("修改失败,Err:" + err.Error())
  584. // return
  585. // }
  586. // }
  587. //
  588. // return
  589. //}
  590. // moveEdbClassify TODO
  591. // @Description: 移动指标分类
  592. // @author: Roc
  593. // @datetime 2024-11-26 16:07:44
  594. // @param parentEdbClassifyInfo *data_manage.EdbClassify
  595. // @param edbClassifyInfo *data_manage.EdbClassify
  596. // @param prevClassify *data_manage.EdbClassify
  597. // @param nextClassify *data_manage.EdbClassify
  598. // @param edbInfo *data_manage.EdbInfo
  599. // @param prevEdbInfo *data_manage.EdbInfo
  600. // @param nextEdbInfo *data_manage.EdbInfo
  601. // @param parentClassifyId int
  602. // @param prevSort int
  603. // @param nextSort int
  604. // @param classifyType uint8
  605. // @return err error
  606. // @return errMsg string
  607. //func moveEdbPublicClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextClassify *data_manage.EdbClassify, prevEdbInfo, nextEdbInfo *data_manage.EdbInfo, parentClassifyId int, prevSort, nextSort int, classifyType uint8) (err error, errMsg string) {
  608. // updateCol := make([]string, 0)
  609. //
  610. // // 移动对象为分类, 判断分类是否存在
  611. // oldParentId := edbClassifyInfo.ParentId
  612. // oldLevel := edbClassifyInfo.Level
  613. // var classifyIds []int
  614. // if oldParentId != parentClassifyId {
  615. // //更新子分类对应的level
  616. // childList, e, m := GetChildClassifyByClassifyId(edbClassifyInfo.ClassifyId)
  617. // if e != nil {
  618. // errMsg = "移动失败"
  619. // err = errors.New("查询子分类失败,Err:" + e.Error() + m)
  620. // return
  621. // }
  622. //
  623. // if len(childList) > 0 {
  624. // for _, v := range childList {
  625. // if v.ClassifyId == edbClassifyInfo.ClassifyId {
  626. // continue
  627. // }
  628. // classifyIds = append(classifyIds, v.ClassifyId)
  629. // }
  630. // }
  631. // }
  632. // //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  633. // if edbClassifyInfo.ParentId != parentClassifyId && parentClassifyId != 0 {
  634. // if edbClassifyInfo.Level != parentEdbClassifyInfo.Level+1 { //禁止层级调整
  635. // errMsg = "移动失败"
  636. // err = errors.New("不支持目录层级变更")
  637. // return
  638. // }
  639. // edbClassifyInfo.ParentId = parentEdbClassifyInfo.ClassifyId
  640. // edbClassifyInfo.RootId = parentEdbClassifyInfo.RootId
  641. // edbClassifyInfo.Level = parentEdbClassifyInfo.Level + 1
  642. // edbClassifyInfo.ModifyTime = time.Now()
  643. // updateCol = append(updateCol, "ParentId", "RootId", "Level", "ModifyTime")
  644. // } else if edbClassifyInfo.ParentId != parentClassifyId && parentClassifyId == 0 {
  645. // errMsg = "移动失败"
  646. // err = errors.New("不支持目录层级变更")
  647. // return
  648. // }
  649. //
  650. // if prevSort > 0 {
  651. // //如果是移动在两个兄弟节点之间
  652. // if nextSort > 0 {
  653. // //下一个兄弟节点
  654. // //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  655. // if prevSort == nextSort || prevSort == edbClassifyInfo.Sort {
  656. // //变更兄弟节点的排序
  657. // updateSortStr := `sort + 2`
  658. //
  659. // //变更分类
  660. // if prevClassify != nil {
  661. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, prevClassify.ClassifyId, prevClassify.Sort, updateSortStr, classifyType)
  662. // } else {
  663. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, classifyType)
  664. // }
  665. //
  666. // //变更指标
  667. // if prevEdbInfo != nil {
  668. // //变更兄弟节点的排序
  669. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.EdbInfoId, updateSortStr)
  670. // } else {
  671. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
  672. // }
  673. // } else {
  674. // //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  675. // if nextSort-prevSort == 1 {
  676. // //变更兄弟节点的排序
  677. // updateSortStr := `sort + 1`
  678. //
  679. // //变更分类
  680. // if prevClassify != nil {
  681. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, prevClassify.ClassifyId, prevSort, updateSortStr, classifyType)
  682. // } else {
  683. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, classifyType)
  684. // }
  685. //
  686. // //变更指标
  687. // if prevEdbInfo != nil {
  688. // //变更兄弟节点的排序
  689. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.EdbInfoId, updateSortStr)
  690. // } else {
  691. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
  692. // }
  693. //
  694. // }
  695. // }
  696. // }
  697. //
  698. // edbClassifyInfo.Sort = prevSort + 1
  699. // edbClassifyInfo.ModifyTime = time.Now()
  700. // updateCol = append(updateCol, "Sort", "ModifyTime")
  701. // } else if prevClassify == nil && nextClassify == nil && prevEdbInfo == nil && nextEdbInfo == nil && parentClassifyId > 0 {
  702. // //处理只拖动到目录里,默认放到目录底部的情况
  703. // var maxSort int
  704. // maxSort, err = GetEdbClassifyMaxSort(parentClassifyId, classifyType)
  705. // if err != nil {
  706. // errMsg = "移动失败"
  707. // err = errors.New("查询组内排序信息失败,Err:" + err.Error())
  708. // return
  709. // }
  710. // edbClassifyInfo.Sort = maxSort + 1 //那就是排在组内最后一位
  711. // edbClassifyInfo.ModifyTime = time.Now()
  712. // updateCol = append(updateCol, "Sort", "ModifyTime")
  713. // } else {
  714. // // 拖动到父级分类的第一位
  715. // firstClassify, tmpErr := data_manage.GetFirstEdbClassifyByParentId(parentClassifyId)
  716. // if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
  717. // errMsg = "移动失败"
  718. // err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  719. // return
  720. // }
  721. //
  722. // //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  723. // if firstClassify != nil && firstClassify.ClassifyId > 0 && firstClassify.Sort == 0 {
  724. // updateSortStr := ` sort + 1 `
  725. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, firstClassify.ClassifyId-1, 0, updateSortStr, classifyType)
  726. // //该分类下的所有指标也需要+1
  727. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, 0, 0, updateSortStr)
  728. // } else {
  729. // //如果该分类下存在指标,且第一个指标的排序等于0,那么需要调整排序
  730. // firstEdb, tErr := data_manage.GetFirstEdbInfoByClassifyId(parentClassifyId)
  731. // if tErr != nil && !utils.IsErrNoRow(tErr) {
  732. // errMsg = "移动失败"
  733. // err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tErr.Error())
  734. // return
  735. // }
  736. //
  737. // //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  738. // if firstEdb != nil && firstEdb.ClassifyId > 0 && firstEdb.Sort == 0 {
  739. // updateSortStr := ` sort + 1 `
  740. // _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, 0, firstEdb.EdbInfoId-1, updateSortStr)
  741. // _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, 0, updateSortStr, classifyType)
  742. // }
  743. // }
  744. //
  745. // edbClassifyInfo.Sort = 0 //那就是排在第一位
  746. // edbClassifyInfo.ModifyTime = time.Now()
  747. // updateCol = append(updateCol, "Sort", "ModifyTime")
  748. // }
  749. //
  750. // //更新
  751. // if len(updateCol) > 0 {
  752. // err = edbClassifyInfo.Update(updateCol)
  753. // if err != nil {
  754. // errMsg = "移动失败"
  755. // err = errors.New("修改失败,Err:" + err.Error())
  756. // return
  757. // }
  758. // //更新对应分类的root_id和层级
  759. // if oldParentId != parentClassifyId {
  760. // if len(classifyIds) > 0 {
  761. // levelStep := edbClassifyInfo.Level - oldLevel
  762. // err = data_manage.UpdateEdbClassifyChildByParentClassifyId(classifyIds, edbClassifyInfo.RootId, levelStep)
  763. // if err != nil {
  764. // errMsg = "移动失败"
  765. // err = errors.New("更新子分类失败,Err:" + err.Error())
  766. // return
  767. // }
  768. // }
  769. // }
  770. //
  771. // }
  772. //
  773. // return
  774. //}