edb_public_classify.go 28 KB

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