chart_public_classify.go 29 KB

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