excel_classify.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. package excel
  2. import (
  3. "errors"
  4. "eta_gn/eta_api/models/data_manage/excel"
  5. "eta_gn/eta_api/models/data_manage/excel/request"
  6. "eta_gn/eta_api/utils"
  7. "time"
  8. )
  9. func GetExcelClassifyMaxSort(parentId int, source int) (maxSort int, err error) {
  10. maxSort, err = excel.GetExcelClassifyMaxSort(parentId, source)
  11. if err != nil {
  12. return
  13. }
  14. edbMaxSort, err := excel.GetExcelMaxSortByClassifyId(parentId, source)
  15. if err != nil {
  16. return
  17. }
  18. if maxSort < edbMaxSort {
  19. maxSort = edbMaxSort
  20. }
  21. return
  22. }
  23. func MoveExcelClassify(req request.MoveExcelClassifyReq) (err error, errMsg string) {
  24. classifyId := req.ClassifyId
  25. parentClassifyId := req.ParentClassifyId
  26. prevClassifyId := req.PrevClassifyId
  27. nextClassifyId := req.NextClassifyId
  28. excelInfoId := req.ExcelInfoId
  29. prevExcelInfoId := req.PrevExcelInfoId
  30. nextExcelInfoId := req.NextExcelInfoId
  31. source := req.Source
  32. var parentExcelClassifyInfo *excel.ExcelClassify
  33. if parentClassifyId > 0 {
  34. parentExcelClassifyInfo, err = excel.GetExcelClassifyById(parentClassifyId)
  35. if err != nil {
  36. errMsg = "移动失败"
  37. err = errors.New("获取上级分类信息失败,Err:" + err.Error())
  38. return
  39. }
  40. }
  41. var (
  42. excelClassifyInfo *excel.ExcelClassify
  43. prevClassify *excel.ExcelClassify
  44. nextClassify *excel.ExcelClassify
  45. excelInfo *excel.ExcelInfo
  46. prevExcelInfo *excel.ExcelInfo
  47. nextExcelInfo *excel.ExcelInfo
  48. prevSort int
  49. nextSort int
  50. )
  51. if excelInfoId == 0 {
  52. excelClassifyInfo, err = excel.GetExcelClassifyById(classifyId)
  53. if err != nil {
  54. if utils.IsErrNoRow(err) {
  55. errMsg = "当前分类不存在"
  56. err = errors.New("获取分类信息失败,Err:" + err.Error())
  57. return
  58. }
  59. errMsg = "移动失败"
  60. err = errors.New("获取分类信息失败,Err:" + err.Error())
  61. return
  62. }
  63. } else {
  64. excelInfo, err = excel.GetExcelInfoById(excelInfoId)
  65. if err != nil {
  66. if utils.IsErrNoRow(err) {
  67. errMsg = "当前表格不存在"
  68. err = errors.New("获取分类信息失败,Err:" + err.Error())
  69. return
  70. }
  71. errMsg = "移动失败"
  72. err = errors.New("获取分类信息失败,Err:" + err.Error())
  73. return
  74. }
  75. if parentClassifyId == 0 {
  76. errMsg = "移动失败,表格必须挂在分类下"
  77. err = errors.New(errMsg)
  78. return
  79. }
  80. }
  81. if prevClassifyId > 0 {
  82. prevClassify, err = excel.GetExcelClassifyById(prevClassifyId)
  83. if err != nil {
  84. errMsg = "移动失败"
  85. err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
  86. return
  87. }
  88. prevSort = prevClassify.Sort
  89. } else if prevExcelInfoId > 0 {
  90. prevExcelInfo, err = excel.GetExcelInfoById(prevExcelInfoId)
  91. if err != nil {
  92. errMsg = "移动失败"
  93. err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
  94. return
  95. }
  96. prevSort = prevExcelInfo.Sort
  97. }
  98. if nextClassifyId > 0 {
  99. nextClassify, err = excel.GetExcelClassifyById(nextClassifyId)
  100. if err != nil {
  101. errMsg = "移动失败"
  102. err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
  103. return
  104. }
  105. nextSort = nextClassify.Sort
  106. } else if nextExcelInfoId > 0 {
  107. nextExcelInfo, err = excel.GetExcelInfoById(nextExcelInfoId)
  108. if err != nil {
  109. errMsg = "移动失败"
  110. err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
  111. return
  112. }
  113. nextSort = nextExcelInfo.Sort
  114. }
  115. err, errMsg = moveExcelClassify(parentExcelClassifyInfo, excelClassifyInfo, prevClassify, nextClassify, excelInfo, prevExcelInfo, nextExcelInfo, parentClassifyId, prevSort, nextSort, source)
  116. return
  117. }
  118. func moveExcelClassify(parentExcelClassifyInfo, excelClassifyInfo, prevClassify, nextClassify *excel.ExcelClassify, excelInfo, prevExcelInfo, nextExcelInfo *excel.ExcelInfo, parentClassifyId int, prevSort, nextSort int, source int) (err error, errMsg string) {
  119. updateCol := make([]string, 0)
  120. if excelClassifyInfo != nil {
  121. oldParentId := excelClassifyInfo.ParentId
  122. if oldParentId != parentClassifyId {
  123. }
  124. if excelClassifyInfo.ParentId != parentClassifyId && parentClassifyId != 0 {
  125. if excelClassifyInfo.Level != parentExcelClassifyInfo.Level+1 { //禁止层级调整
  126. errMsg = "移动失败"
  127. err = errors.New("不支持目录层级变更")
  128. return
  129. }
  130. excelClassifyInfo.ParentId = parentExcelClassifyInfo.ExcelClassifyId
  131. excelClassifyInfo.Level = parentExcelClassifyInfo.Level + 1
  132. excelClassifyInfo.ModifyTime = time.Now()
  133. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  134. } else if excelClassifyInfo.ParentId != parentClassifyId && parentClassifyId == 0 {
  135. errMsg = "移动失败"
  136. err = errors.New("不支持目录层级变更")
  137. return
  138. }
  139. if prevSort > 0 {
  140. if nextSort > 0 {
  141. if prevSort == nextSort || prevSort == excelClassifyInfo.Sort {
  142. updateSortStr := `sort + 2`
  143. if prevClassify != nil {
  144. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, prevClassify.ExcelClassifyId, prevClassify.Sort, updateSortStr, source)
  145. } else {
  146. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, source)
  147. }
  148. if prevExcelInfo != nil {
  149. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, prevSort, prevExcelInfo.ExcelInfoId, updateSortStr, source)
  150. } else {
  151. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr, source)
  152. }
  153. } else {
  154. if nextSort-prevSort == 1 {
  155. updateSortStr := `sort + 1`
  156. if prevClassify != nil {
  157. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, prevClassify.ExcelClassifyId, prevSort, updateSortStr, source)
  158. } else {
  159. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, source)
  160. }
  161. if prevExcelInfo != nil {
  162. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, prevSort, prevExcelInfo.ExcelInfoId, updateSortStr, source)
  163. } else {
  164. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr, source)
  165. }
  166. }
  167. }
  168. }
  169. excelClassifyInfo.Sort = prevSort + 1
  170. excelClassifyInfo.ModifyTime = time.Now()
  171. updateCol = append(updateCol, "Sort", "ModifyTime")
  172. } else if prevClassify == nil && nextClassify == nil && prevExcelInfo == nil && nextExcelInfo == nil && parentClassifyId > 0 {
  173. var maxSort int
  174. maxSort, err = GetExcelClassifyMaxSort(parentClassifyId, source)
  175. if err != nil {
  176. errMsg = "移动失败"
  177. err = errors.New("查询组内排序信息失败,Err:" + err.Error())
  178. return
  179. }
  180. excelClassifyInfo.Sort = maxSort + 1 //那就是排在组内最后一位
  181. excelClassifyInfo.ModifyTime = time.Now()
  182. updateCol = append(updateCol, "Sort", "ModifyTime")
  183. } else {
  184. firstClassify, tmpErr := excel.GetFirstExcelClassifyByParentId(parentClassifyId)
  185. if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
  186. errMsg = "移动失败"
  187. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  188. return
  189. }
  190. if firstClassify != nil && firstClassify.ExcelClassifyId > 0 && firstClassify.Sort == 0 {
  191. updateSortStr := ` sort + 1 `
  192. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, firstClassify.ExcelClassifyId-1, 0, updateSortStr, source)
  193. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, 0, 0, updateSortStr, source)
  194. } else {
  195. firstExcel, tErr := excel.GetFirstExcelInfoByClassifyId(parentClassifyId)
  196. if tErr != nil && !utils.IsErrNoRow(tErr) {
  197. errMsg = "移动失败"
  198. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tErr.Error())
  199. return
  200. }
  201. if firstExcel != nil && firstExcel.ExcelClassifyId > 0 && firstExcel.Sort == 0 {
  202. updateSortStr := ` sort + 1 `
  203. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, 0, firstExcel.ExcelInfoId-1, updateSortStr, source)
  204. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, 0, 0, updateSortStr, source)
  205. }
  206. }
  207. excelClassifyInfo.Sort = 0 //那就是排在第一位
  208. excelClassifyInfo.ModifyTime = time.Now()
  209. updateCol = append(updateCol, "Sort", "ModifyTime")
  210. }
  211. if len(updateCol) > 0 {
  212. err = excelClassifyInfo.Update(updateCol)
  213. if err != nil {
  214. errMsg = "移动失败"
  215. err = errors.New("修改失败,Err:" + err.Error())
  216. return
  217. }
  218. }
  219. } else {
  220. if excelInfo == nil {
  221. errMsg = "当前表格不存在"
  222. err = errors.New(errMsg)
  223. return
  224. }
  225. if excelInfo.ExcelClassifyId != parentClassifyId {
  226. excelInfo.ExcelClassifyId = parentClassifyId
  227. excelInfo.ModifyTime = time.Now()
  228. updateCol = append(updateCol, "ExcelClassifyId", "ModifyTime")
  229. }
  230. if prevSort > 0 {
  231. if nextSort > 0 {
  232. if prevSort == nextSort || prevSort == excelInfo.Sort {
  233. updateSortStr := `sort + 2`
  234. if prevClassify != nil {
  235. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, prevClassify.ExcelClassifyId, prevClassify.Sort, updateSortStr, source)
  236. } else {
  237. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, source)
  238. }
  239. if prevExcelInfo != nil {
  240. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, prevSort, prevExcelInfo.ExcelInfoId, updateSortStr, source)
  241. } else {
  242. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr, source)
  243. }
  244. } else {
  245. if nextSort-prevSort == 1 {
  246. updateSortStr := `sort + 1`
  247. if prevClassify != nil {
  248. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, prevClassify.ExcelClassifyId, prevSort, updateSortStr, source)
  249. } else {
  250. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, source)
  251. }
  252. if prevExcelInfo != nil {
  253. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, prevSort, prevExcelInfo.ExcelInfoId, updateSortStr, source)
  254. } else {
  255. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr, source)
  256. }
  257. }
  258. }
  259. }
  260. excelInfo.Sort = prevSort + 1
  261. excelInfo.ModifyTime = time.Now()
  262. updateCol = append(updateCol, "Sort", "ModifyTime")
  263. } else if prevClassify == nil && nextClassify == nil && prevExcelInfo == nil && nextExcelInfo == nil && parentClassifyId > 0 {
  264. var maxSort int
  265. maxSort, err = GetExcelClassifyMaxSort(parentClassifyId, source)
  266. if err != nil {
  267. errMsg = "移动失败"
  268. err = errors.New("查询组内排序信息失败,Err:" + err.Error())
  269. return
  270. }
  271. excelInfo.Sort = maxSort + 1 //那就是排在组内最后一位
  272. excelInfo.ModifyTime = time.Now()
  273. updateCol = append(updateCol, "Sort", "ModifyTime")
  274. } else {
  275. firstClassify, tmpErr := excel.GetFirstExcelClassifyByParentId(parentClassifyId)
  276. if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
  277. errMsg = "移动失败"
  278. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
  279. return
  280. }
  281. if firstClassify != nil && firstClassify.ExcelClassifyId > 0 && firstClassify.Sort == 0 {
  282. updateSortStr := ` sort + 1 `
  283. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, firstClassify.ExcelClassifyId-1, 0, updateSortStr, source)
  284. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, 0, 0, updateSortStr, source)
  285. } else {
  286. firstExcel, tErr := excel.GetFirstExcelInfoByClassifyId(parentClassifyId)
  287. if tErr != nil && !utils.IsErrNoRow(tErr) {
  288. errMsg = "移动失败"
  289. err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tErr.Error())
  290. return
  291. }
  292. if firstExcel != nil && firstExcel.ExcelClassifyId > 0 && firstExcel.Sort == 0 {
  293. updateSortStr := ` sort + 1 `
  294. _ = excel.UpdateExcelInfoSortByClassifyId(parentClassifyId, 0, firstExcel.ExcelInfoId-1, updateSortStr, source)
  295. _ = excel.UpdateExcelClassifySortByParentId(parentClassifyId, 0, 0, updateSortStr, source)
  296. }
  297. }
  298. excelInfo.Sort = 0 //那就是排在第一位
  299. excelInfo.ModifyTime = time.Now()
  300. updateCol = append(updateCol, "Sort", "ModifyTime")
  301. }
  302. if len(updateCol) > 0 {
  303. err = excelInfo.Update(updateCol)
  304. if err != nil {
  305. errMsg = "移动失败"
  306. err = errors.New("修改失败,Err:" + err.Error())
  307. return
  308. }
  309. }
  310. }
  311. return
  312. }
  313. func GetChildClassifyByClassifyId(targetClassifyId int, source int) (targetList []*excel.ExcelClassifyItems, err error, errMsg string) {
  314. targetClassify, err := excel.GetExcelClassifyById(targetClassifyId)
  315. if err != nil {
  316. if utils.IsErrNoRow(err) {
  317. errMsg = "当前分类不存在"
  318. err = errors.New(errMsg)
  319. return
  320. }
  321. errMsg = "获取失败"
  322. err = errors.New("获取分类信息失败,Err:" + err.Error())
  323. return
  324. }
  325. tmpList, err := excel.GetExcelClassifyBySourceOrderByLevel(source)
  326. if err != nil && !utils.IsErrNoRow(err) {
  327. errMsg = "获取失败"
  328. err = errors.New("获取数据失败,Err:" + err.Error())
  329. return
  330. }
  331. idMap := make(map[int]struct{})
  332. if len(tmpList) > 0 {
  333. for _, v := range tmpList {
  334. if v.ExcelClassifyId == targetClassify.ExcelClassifyId {
  335. idMap[v.ExcelClassifyId] = struct{}{}
  336. }
  337. }
  338. for _, v := range tmpList {
  339. if _, ok := idMap[v.ParentId]; ok {
  340. idMap[v.ExcelClassifyId] = struct{}{}
  341. }
  342. }
  343. for _, v := range tmpList {
  344. if _, ok := idMap[v.ExcelClassifyId]; ok {
  345. targetItem := new(excel.ExcelClassifyItems)
  346. targetItem.ExcelClassifyId = v.ExcelClassifyId
  347. targetItem.ParentId = v.ParentId
  348. targetItem.UniqueCode = v.UniqueCode
  349. targetItem.Level = v.Level
  350. targetList = append(targetList, targetItem)
  351. }
  352. }
  353. }
  354. return
  355. }