chart_public_classify.go 29 KB

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