excel_classify.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917
  1. package excel
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage/excel"
  7. "eta/eta_api/models/data_manage/excel/request"
  8. response2 "eta/eta_api/models/data_manage/excel/response"
  9. "eta/eta_api/services/data/data_manage_permission"
  10. excel2 "eta/eta_api/services/data/excel"
  11. excelService "eta/eta_api/services/excel"
  12. "eta/eta_api/utils"
  13. "fmt"
  14. "sort"
  15. "strconv"
  16. "time"
  17. )
  18. // ExcelClassifyController ETA表格分类
  19. type ExcelClassifyController struct {
  20. controllers.BaseAuthController
  21. }
  22. // List
  23. // @Title excel表格分类列表
  24. // @Description excel表格分类列表接口
  25. // @Param Source query int true "格来源,1:excel插件的表格,2:自定义表格,3:混合表格,默认:1"
  26. // @Param IsShowMe query bool true "是否只看我的,true、false"
  27. // @Success 200 {object} response.ExcelClassifyListResp
  28. // @router /excel_classify/list [get]
  29. func (this *ExcelClassifyController) List() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. this.Data["json"] = br
  33. this.ServeJSON()
  34. }()
  35. source, _ := this.GetInt("Source")
  36. if source <= 0 {
  37. source = utils.EXCEL_DEFAULT
  38. }
  39. //只看我的
  40. isShowMe, _ := this.GetBool("IsShowMe")
  41. // 自定义分析只看自己的
  42. //if source == utils.CUSTOM_ANALYSIS_TABLE {
  43. // br = AnalysisClassifyList(this)
  44. // return
  45. //}
  46. showUserId := 0
  47. if isShowMe {
  48. showUserId = this.SysUser.AdminId
  49. }
  50. classifyList, err := excel.GetExcelClassifyBySource(source)
  51. if err != nil {
  52. br.Msg = "获取失败"
  53. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  54. return
  55. }
  56. // 分类map
  57. classifyMap := make(map[int]*excel.ExcelClassifyItems)
  58. for _, v := range classifyList {
  59. classifyMap[v.ExcelClassifyId] = v
  60. }
  61. // 获取二级分类
  62. // 获取三级分类
  63. // 根据来源获取所有excel表格(无内容)
  64. allExcelInfo := make([]*excel.ExcelClassifyItems, 0)
  65. if source == utils.BALANCE_TABLE {
  66. //找到当前协作人相关的表格ID
  67. var excelIds []int
  68. if isShowMe {
  69. obj := new(excel.ExcelWorker)
  70. existList, err := obj.GetBySysUserId(this.SysUser.AdminId)
  71. if err != nil {
  72. br.Msg = "获取表格协作人失败!"
  73. br.ErrMsg = "获取表格协作人失败,Err:" + err.Error()
  74. return
  75. }
  76. if len(existList) > 0 {
  77. for _, v := range existList {
  78. excelIds = append(excelIds, v.ExcelInfoId)
  79. }
  80. }
  81. }
  82. allExcelInfo, err = excel.GetBalanceNoContentExcelInfoAll(source, excelIds, showUserId)
  83. if err != nil && !utils.IsErrNoRow(err) {
  84. br.Msg = "获取失败"
  85. br.ErrMsg = "获取表格信息失败,Err:" + err.Error()
  86. return
  87. }
  88. } else {
  89. allExcelInfo, err = excel.GetNoContentExcelInfoAll(source, showUserId)
  90. if err != nil && !utils.IsErrNoRow(err) {
  91. br.Msg = "获取失败"
  92. br.ErrMsg = "获取表格信息失败,Err:" + err.Error()
  93. return
  94. }
  95. }
  96. // 获取所有有权限的指标和分类
  97. permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserExcelAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
  98. if err != nil {
  99. br.Msg = "获取失败"
  100. br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
  101. return
  102. }
  103. ExcelInfoMap := make(map[int][]*excel.ExcelClassifyItems)
  104. for _, v := range allExcelInfo {
  105. // 数据权限
  106. if classifyInfo, ok := classifyMap[v.ExcelClassifyId]; ok {
  107. v.HaveOperaAuth = data_manage_permission.CheckExcelPermissionByPermissionIdList(v.IsJoinPermission, classifyInfo.IsJoinPermission, v.ExcelInfoId, v.ExcelClassifyId, permissionEdbIdList, permissionClassifyIdList)
  108. }
  109. if source == utils.BALANCE_TABLE && isShowMe && !v.HaveOperaAuth { // 过滤我不可编辑的表格
  110. continue
  111. }
  112. ExcelInfoMap[v.ExcelClassifyId] = append(ExcelInfoMap[v.ExcelClassifyId], v)
  113. }
  114. classifyListMap := make(map[int][]*excel.ExcelClassifyItems)
  115. for _, v := range classifyList {
  116. // 数据权限
  117. v.HaveOperaAuth = data_manage_permission.CheckExcelClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ExcelClassifyId, permissionClassifyIdList)
  118. if existItems, ok := ExcelInfoMap[v.ExcelClassifyId]; ok {
  119. v.Children = existItems
  120. }
  121. }
  122. for _, v := range classifyList {
  123. if v.ParentId > 0 {
  124. classifyListMap[v.ParentId] = append(classifyListMap[v.ParentId], v)
  125. }
  126. }
  127. //组装三级分类
  128. for key, classify := range classifyList {
  129. subList, ok := classifyListMap[classify.ExcelClassifyId]
  130. if ok {
  131. classifyList[key].Children = append(classifyList[key].Children, subList...)
  132. sort.Slice(classifyList[key].Children, func(i, j int) bool {
  133. return excel.ExcelClassifyItemBySort(classifyList[key].Children[i], classifyList[key].Children[j])
  134. })
  135. }
  136. }
  137. nodeAll := make([]*excel.ExcelClassifyItems, 0)
  138. for _, v := range classifyList {
  139. if v.ParentId == 0 {
  140. sort.Slice(v.Children, func(i, j int) bool { return excel.ExcelClassifyItemBySort(v.Children[i], v.Children[j]) })
  141. nodeAll = append(nodeAll, v)
  142. }
  143. }
  144. if isShowMe {
  145. nodeAll = excel2.GetClassifyListRemoveNoExcel(nodeAll)
  146. }
  147. resp := response2.ExcelClassifyListResp{
  148. AllNodes: nodeAll,
  149. }
  150. br.Ret = 200
  151. br.Success = true
  152. br.Msg = "获取成功"
  153. br.Data = resp
  154. }
  155. func AnalysisClassifyList(this *ExcelClassifyController) (br *models.BaseResponse) {
  156. br = new(models.BaseResponse).Init()
  157. defer func() {
  158. this.Data["json"] = br
  159. this.ServeJSON()
  160. }()
  161. source, _ := this.GetInt("Source")
  162. if source <= 0 {
  163. source = utils.EXCEL_DEFAULT
  164. }
  165. //只看我的
  166. showUserId := this.SysUser.AdminId
  167. classifyList, err := excel.GetExcelClassifyBySource(source)
  168. if err != nil {
  169. br.Msg = "获取失败"
  170. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  171. return
  172. }
  173. // 分类map
  174. classifyMap := make(map[int]*excel.ExcelClassifyItems)
  175. for _, v := range classifyList {
  176. classifyMap[v.ExcelClassifyId] = v
  177. }
  178. // 获取二级分类
  179. // 获取三级分类
  180. // 根据来源获取所有excel表格(无内容)
  181. allExcelInfo, err := excel.GetNoContentExcelInfoAll(source, showUserId)
  182. if err != nil && !utils.IsErrNoRow(err) {
  183. br.Msg = "获取失败"
  184. br.ErrMsg = "获取表格信息失败,Err:" + err.Error()
  185. return
  186. }
  187. // 获取所有有权限的指标和分类
  188. permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserExcelAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
  189. if err != nil {
  190. br.Msg = "获取失败"
  191. br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
  192. return
  193. }
  194. ExcelInfoMap := make(map[int][]*excel.ExcelClassifyItems)
  195. for _, v := range allExcelInfo {
  196. // 数据权限
  197. if classifyInfo, ok := classifyMap[v.ExcelClassifyId]; ok {
  198. v.HaveOperaAuth = data_manage_permission.CheckExcelPermissionByPermissionIdList(v.IsJoinPermission, classifyInfo.IsJoinPermission, v.ExcelInfoId, v.ExcelClassifyId, permissionEdbIdList, permissionClassifyIdList)
  199. }
  200. ExcelInfoMap[v.ExcelClassifyId] = append(ExcelInfoMap[v.ExcelClassifyId], v)
  201. }
  202. classifyListMap := make(map[int][]*excel.ExcelClassifyItems)
  203. for _, v := range classifyList {
  204. // 数据权限
  205. v.HaveOperaAuth = data_manage_permission.CheckExcelClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ExcelClassifyId, permissionClassifyIdList)
  206. if existItems, ok := ExcelInfoMap[v.ExcelClassifyId]; ok {
  207. v.Children = existItems
  208. }
  209. }
  210. for _, v := range classifyList {
  211. if v.ParentId > 0 {
  212. classifyListMap[v.ParentId] = append(classifyListMap[v.ParentId], v)
  213. }
  214. }
  215. //组装三级分类
  216. for key, classify := range classifyList {
  217. subList, ok := classifyListMap[classify.ExcelClassifyId]
  218. if ok {
  219. classifyList[key].Children = append(classifyList[key].Children, subList...)
  220. sort.Slice(classifyList[key].Children, func(i, j int) bool {
  221. return excel.ExcelClassifyItemBySort(classifyList[key].Children[i], classifyList[key].Children[j])
  222. })
  223. }
  224. }
  225. nodeAll := make([]*excel.ExcelClassifyItems, 0)
  226. for _, v := range classifyList {
  227. if v.ParentId == 0 {
  228. sort.Slice(v.Children, func(i, j int) bool { return excel.ExcelClassifyItemBySort(v.Children[i], v.Children[j]) })
  229. nodeAll = append(nodeAll, v)
  230. }
  231. }
  232. // 自定义分析只看自己的分类
  233. nodeAll = removeNodesWithAnalysisClassify(nodeAll, this.SysUser.AdminId)
  234. resp := response2.ExcelClassifyListResp{
  235. AllNodes: nodeAll,
  236. }
  237. br.Ret = 200
  238. br.Success = true
  239. br.Msg = "获取成功"
  240. br.Data = resp
  241. return
  242. }
  243. // removeNodesWithAnalysisClassify
  244. // @Description: 自定义分析只看自己的分类,所以需要移除分类
  245. // @author: Roc
  246. // @datetime 2024-04-09 13:46:51
  247. // @param nodes []*excel.ExcelClassifyItems
  248. // @param adminId int
  249. // @return []*excel.ExcelClassifyItems
  250. func removeNodesWithAnalysisClassify(nodes []*excel.ExcelClassifyItems, adminId int) []*excel.ExcelClassifyItems {
  251. var newListNode []*excel.ExcelClassifyItems
  252. for _, node := range nodes {
  253. if node.Children != nil {
  254. node.Children = removeNodesWithAnalysisClassify(node.Children, adminId)
  255. }
  256. // 如果是ETA表格,那么就保留
  257. if node.ExcelInfoId > 0 {
  258. newListNode = append(newListNode, node)
  259. continue
  260. }
  261. // 如果是公共分类,且名下的ETA表格不为空,那么就保留
  262. if node.SysUserId == 0 && node.Children != nil && len(node.Children) > 0 {
  263. newListNode = append(newListNode, node)
  264. continue
  265. }
  266. // 如果是自己的分类,那么就保留
  267. if node.SysUserId == adminId {
  268. newListNode = append(newListNode, node)
  269. continue
  270. }
  271. }
  272. return newListNode
  273. }
  274. // ExcelClassifyItems
  275. // @Title 获取所有excel表格分类接口-不包含表格
  276. // @Description 获取所有excel表格分类接口-不包含表格
  277. // @Param Source query int true "格来源,1:excel插件的表格,2:自定义表格,3:混合表格,默认:1"
  278. // @Success 200 {object} response.ExcelClassifyListResp
  279. // @router /excel_classify/items [get]
  280. func (this *ExcelClassifyController) ExcelClassifyItems() {
  281. br := new(models.BaseResponse).Init()
  282. defer func() {
  283. this.Data["json"] = br
  284. this.ServeJSON()
  285. }()
  286. source, _ := this.GetInt("Source")
  287. if source <= 0 {
  288. source = utils.EXCEL_DEFAULT
  289. }
  290. classifyList, err := excel.GetExcelClassifyBySource(source)
  291. if err != nil {
  292. br.Msg = "获取失败"
  293. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  294. return
  295. }
  296. // 获取二级分类
  297. // 获取三级分类
  298. classifyMap := make(map[int][]*excel.ExcelClassifyItems)
  299. for _, v := range classifyList {
  300. if v.ParentId > 0 {
  301. classifyMap[v.ParentId] = append(classifyMap[v.ParentId], v)
  302. }
  303. }
  304. //组装三级分类
  305. for key, classify := range classifyList {
  306. subList, ok := classifyMap[classify.ExcelClassifyId]
  307. if ok {
  308. classifyList[key].Children = append(classifyList[key].Children, subList...)
  309. }
  310. }
  311. nodeAll := make([]*excel.ExcelClassifyItems, 0)
  312. for _, v := range classifyList {
  313. if v.ParentId == 0 {
  314. nodeAll = append(nodeAll, v)
  315. }
  316. }
  317. resp := response2.ExcelClassifyListResp{
  318. AllNodes: nodeAll,
  319. }
  320. br.Ret = 200
  321. br.Success = true
  322. br.Msg = "获取成功"
  323. br.Data = resp
  324. }
  325. // AddExcelClassify
  326. // @Title 新增excel表格分类
  327. // @Description 新增excel表格分类接口
  328. // @Param request body request.AddExcelClassifyReq true "type json string"
  329. // @Success 200 Ret=200 保存成功
  330. // @router /excel_classify/add [post]
  331. func (this *ExcelClassifyController) AddExcelClassify() {
  332. br := new(models.BaseResponse).Init()
  333. defer func() {
  334. this.Data["json"] = br
  335. this.ServeJSON()
  336. }()
  337. var req request.AddExcelClassifyReq
  338. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  339. if err != nil {
  340. br.Msg = "参数解析异常!"
  341. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  342. return
  343. }
  344. if req.ExcelClassifyName == "" {
  345. br.Msg = "请输入分类名称"
  346. br.IsSendEmail = false
  347. return
  348. }
  349. if req.ParentId < 0 {
  350. br.Msg = "参数错误"
  351. br.IsSendEmail = false
  352. return
  353. }
  354. source := req.Source
  355. if source <= 0 {
  356. source = utils.EXCEL_DEFAULT
  357. }
  358. // 获取同级分类下存在同名分类的数量
  359. var count int
  360. if source == utils.CUSTOM_ANALYSIS_TABLE {
  361. // 自定义分析分类私有化了
  362. ct, e := excel.GetCustomAnalysisExcelClassifyCount(req.ExcelClassifyName, req.ParentId, source, this.SysUser.AdminId)
  363. if e != nil {
  364. br.Msg = "操作失败"
  365. br.ErrMsg = fmt.Sprintf("获取自定义分析同级分类下同名分类失败, %v", e)
  366. return
  367. }
  368. count = ct
  369. } else {
  370. ct, e := excel.GetExcelClassifyCount(req.ExcelClassifyName, req.ParentId, source)
  371. if e != nil {
  372. br.Msg = "操作失败"
  373. br.ErrMsg = fmt.Sprintf("获取同级分类下同名分类失败, %v", e)
  374. return
  375. }
  376. count = ct
  377. }
  378. if count > 0 {
  379. br.Msg = "分类名称已存在,请重新输入"
  380. br.IsSendEmail = false
  381. return
  382. }
  383. //获取该层级下最大的排序数
  384. maxSort, err := excel2.GetExcelClassifyMaxSort(req.ParentId, req.Source)
  385. if err != nil {
  386. br.Msg = "获取失败"
  387. br.ErrMsg = "查询排序信息失败,Err:" + err.Error()
  388. return
  389. }
  390. level := 1
  391. // 查询父级分类是否存在
  392. if req.ParentId > 0 {
  393. var parent *excel.ExcelClassify
  394. parent, err = excel.GetExcelClassifyById(req.ParentId)
  395. if err != nil {
  396. if utils.IsErrNoRow(err) {
  397. br.Msg = "父级分类不存在"
  398. return
  399. }
  400. br.Msg = "获取失败"
  401. br.ErrMsg = "查询父级分类信息失败,Err:" + err.Error()
  402. return
  403. }
  404. level = parent.Level + 1
  405. }
  406. // 入库
  407. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  408. classify := &excel.ExcelClassify{
  409. //ExcelClassifyId: 0,
  410. ExcelClassifyName: req.ExcelClassifyName,
  411. ParentId: req.ParentId,
  412. Source: source,
  413. SysUserId: this.SysUser.AdminId,
  414. SysUserRealName: this.SysUser.RealName,
  415. Level: level,
  416. UniqueCode: utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + timestamp),
  417. Sort: maxSort + 1,
  418. CreateTime: time.Now(),
  419. ModifyTime: time.Now(),
  420. }
  421. _, err = excel.AddExcelClassify(classify)
  422. if err != nil {
  423. br.Msg = "保存分类失败"
  424. br.ErrMsg = "保存分类失败,Err:" + err.Error()
  425. return
  426. }
  427. // 继承分类权限
  428. {
  429. go data_manage_permission.InheritParentClassify(6, source, classify.ExcelClassifyId, classify.ParentId, classify.ExcelClassifyName)
  430. }
  431. br.Ret = 200
  432. br.Msg = "保存成功"
  433. br.Success = true
  434. }
  435. // EditExcelClassify
  436. // @Title 修改excel表格分类
  437. // @Description 修改excel表格分类
  438. // @Param request body request.EditExcelClassifyReq true "type json string"
  439. // @Success 200 Ret=200 修改成功
  440. // @router /excel_classify/edit [post]
  441. func (this *ExcelClassifyController) EditExcelClassify() {
  442. br := new(models.BaseResponse).Init()
  443. defer func() {
  444. this.Data["json"] = br
  445. this.ServeJSON()
  446. }()
  447. var req request.EditExcelClassifyReq
  448. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  449. if err != nil {
  450. br.Msg = "参数解析异常!"
  451. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  452. return
  453. }
  454. if req.ExcelClassifyName == "" {
  455. br.Msg = "请输入分类名称"
  456. br.IsSendEmail = false
  457. return
  458. }
  459. if req.ExcelClassifyId <= 0 {
  460. br.Msg = "参数错误"
  461. br.IsSendEmail = false
  462. return
  463. }
  464. item, err := excel.GetExcelClassifyById(req.ExcelClassifyId)
  465. if err != nil {
  466. br.Msg = "保存失败"
  467. br.Msg = "获取分类信息失败,Err:" + err.Error()
  468. return
  469. }
  470. // 名字一致的话,直接返回成功
  471. if item.ExcelClassifyName == req.ExcelClassifyName {
  472. br.Ret = 200
  473. br.Msg = "保存成功"
  474. br.Success = true
  475. return
  476. }
  477. // 获取同级分类下存在同名分类的数量
  478. count, err := excel.GetExcelClassifyCount(req.ExcelClassifyName, item.ParentId, item.Source)
  479. if err != nil {
  480. br.Msg = "判断名称是否已存在失败"
  481. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  482. return
  483. }
  484. if count > 0 {
  485. br.Msg = "分类名称已存在,请重新输入"
  486. br.IsSendEmail = false
  487. return
  488. }
  489. // 修改分类名称
  490. item.ExcelClassifyName = req.ExcelClassifyName
  491. err = item.Update([]string{"ExcelClassifyName"})
  492. if err != nil {
  493. br.Msg = "保存失败"
  494. br.ErrMsg = "保存失败,Err:" + err.Error()
  495. return
  496. }
  497. br.Ret = 200
  498. br.Msg = "修改成功"
  499. br.Success = true
  500. br.IsAddLog = true
  501. }
  502. // DeleteExcelClassifyCheck
  503. // @Title 删除表格检测接口
  504. // @Description 删除表格检测接口
  505. // @Param request body request.ExcelClassifyDeleteCheckReq true "type json string"
  506. // @Success 200 {object} response.ExcelClassifyDeleteCheckResp
  507. // @router /excel_classify/delete/check [post]
  508. func (this *ExcelClassifyController) DeleteExcelClassifyCheck() {
  509. br := new(models.BaseResponse).Init()
  510. defer func() {
  511. this.Data["json"] = br
  512. this.ServeJSON()
  513. }()
  514. var req request.ExcelClassifyDeleteCheckReq
  515. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  516. if err != nil {
  517. br.Msg = "参数解析异常!"
  518. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  519. return
  520. }
  521. if req.ExcelClassifyId < 0 && req.ExcelInfoId <= 0 {
  522. br.Msg = "参数错误"
  523. br.IsSendEmail = false
  524. return
  525. }
  526. var deleteStatus int
  527. var tipsMsg string
  528. // 校验是否存在该分类
  529. ExcelClassifyInfo, err := excel.GetExcelClassifyById(req.ExcelClassifyId)
  530. if err != nil {
  531. if utils.IsErrNoRow(err) {
  532. br.Msg = "该分类不存在"
  533. br.ErrMsg = "该分类不存在"
  534. return
  535. }
  536. br.Msg = "删除失败"
  537. br.ErrMsg = "查询该分类失败,Err:" + err.Error()
  538. return
  539. }
  540. if ExcelClassifyInfo == nil {
  541. br.Msg = "该分类不存在"
  542. br.ErrMsg = "该分类不存在"
  543. br.IsSendEmail = false
  544. return
  545. }
  546. //删除分类
  547. if req.ExcelClassifyId > 0 && req.ExcelInfoId == 0 {
  548. //判断表格分类下,是否含有表格
  549. count, err := excel.GetExcelInfoCountByClassifyId(req.ExcelClassifyId)
  550. if err != nil {
  551. br.Msg = "删除失败"
  552. br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  553. return
  554. }
  555. if count > 0 {
  556. deleteStatus = 1
  557. tipsMsg = "该分类下关联表格不可删除"
  558. } else {
  559. childClassify, e := excel.GetChildClassifyById(req.ExcelClassifyId)
  560. if e != nil && !utils.IsErrNoRow(e) {
  561. br.Msg = "获取失败"
  562. br.ErrMsg = "获取分类信息失败, GetEdbClassify,Err:" + e.Error()
  563. return
  564. }
  565. if len(childClassify) > 0 {
  566. var classifyIds []int
  567. for _, v := range childClassify {
  568. classifyIds = append(classifyIds, v.ExcelClassifyId)
  569. }
  570. condition := fmt.Sprintf(` AND excel_classify_id IN (%s) `, utils.GetOrmInReplace(len(classifyIds)))
  571. var pars []interface{}
  572. pars = append(pars, classifyIds)
  573. childCount, err := excel.GetExcelInfoCountByCondition(condition, pars)
  574. if err != nil && !utils.IsErrNoRow(err) {
  575. br.Msg = "删除失败"
  576. br.ErrMsg = "查询分类下表格数量失败,Err:" + err.Error()
  577. return
  578. }
  579. if childCount > 0 {
  580. deleteStatus = 1
  581. tipsMsg = "该分类下关联表格不可删除"
  582. }
  583. }
  584. }
  585. }
  586. //if deleteStatus != 1 && req.ExcelInfoId == 0 {
  587. // classifyCount, err := data_manage.GetExcelClassifyCountByClassifyId(req.ExcelClassifyId)
  588. // if err != nil && err.Error() != utils.ErrNoRow() {
  589. // br.Msg = "删除失败"
  590. // br.ErrMsg = "分类下是否含有表格失败,Err:" + err.Error()
  591. // return
  592. // }
  593. // if classifyCount > 0 {
  594. // deleteStatus = 2
  595. // tipsMsg = "确认删除当前目录及包含的子目录吗?"
  596. // }
  597. //}
  598. if deleteStatus == 0 {
  599. tipsMsg = "可删除,进行删除操作"
  600. }
  601. resp := response2.ExcelClassifyDeleteCheckResp{
  602. DeleteStatus: deleteStatus,
  603. TipsMsg: tipsMsg,
  604. }
  605. br.Ret = 200
  606. br.Msg = "检测成功"
  607. br.Success = true
  608. br.Data = resp
  609. }
  610. // DeleteExcelClassify
  611. // @Title 删除表格分类/表格
  612. // @Description 删除表格分类/表格接口
  613. // @Param request body request.DeleteExcelClassifyReq true "type json string"
  614. // @Success 200 Ret=200 删除成功
  615. // @router /excel_classify/delete [post]
  616. func (this *ExcelClassifyController) DeleteExcelClassify() {
  617. br := new(models.BaseResponse).Init()
  618. defer func() {
  619. this.Data["json"] = br
  620. this.ServeJSON()
  621. }()
  622. sysUser := this.SysUser
  623. if sysUser == nil {
  624. br.Msg = "请登录"
  625. br.ErrMsg = "请登录,SysUser Is Empty"
  626. br.Ret = 408
  627. return
  628. }
  629. var req request.DeleteExcelClassifyReq
  630. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  631. if err != nil {
  632. br.Msg = "参数解析异常!"
  633. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  634. return
  635. }
  636. if req.ExcelClassifyId < 0 && req.ExcelInfoId <= 0 {
  637. br.Msg = "参数错误"
  638. br.IsSendEmail = false
  639. return
  640. }
  641. //删除分类
  642. if req.ExcelClassifyId > 0 && req.ExcelInfoId == 0 {
  643. //判断是否含有指标
  644. count, err := excel.GetExcelInfoCountByClassifyId(req.ExcelClassifyId)
  645. if err != nil && !utils.IsErrNoRow(err) {
  646. br.Msg = "删除失败"
  647. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  648. return
  649. }
  650. if count > 0 {
  651. br.Msg = "该目录下存在关联ETA表格,不可删除"
  652. br.IsSendEmail = false
  653. return
  654. } else {
  655. childClassify, e := excel.GetChildClassifyById(req.ExcelClassifyId)
  656. if e != nil && !utils.IsErrNoRow(e) {
  657. br.Msg = "获取失败"
  658. br.ErrMsg = "获取分类信息失败, GetEdbClassify,Err:" + e.Error()
  659. return
  660. }
  661. if len(childClassify) > 0 {
  662. var classifyIds []int
  663. for _, v := range childClassify {
  664. classifyIds = append(classifyIds, v.ExcelClassifyId)
  665. }
  666. condition := fmt.Sprintf(` AND excel_classify_id IN (%s) `, utils.GetOrmInReplace(len(classifyIds)))
  667. var pars []interface{}
  668. pars = append(pars, classifyIds)
  669. childCount, err := excel.GetExcelInfoCountByCondition(condition, pars)
  670. if err != nil && !utils.IsErrNoRow(err) {
  671. br.Msg = "删除失败"
  672. br.ErrMsg = "查询分类下表格数量失败,Err:" + err.Error()
  673. return
  674. }
  675. if childCount > 0 {
  676. br.Msg = "该目录下存在关联ETA表格,不可删除"
  677. br.IsSendEmail = false
  678. return
  679. }
  680. }
  681. }
  682. classifyItem, err := excel.GetExcelClassifyById(req.ExcelClassifyId)
  683. if err != nil {
  684. br.Msg = "删除失败"
  685. br.ErrMsg = "获取分类失败,Err:" + err.Error()
  686. if utils.IsErrNoRow(err) {
  687. br.Msg = "分类不存在"
  688. br.ErrMsg = "分类不存在"
  689. }
  690. return
  691. }
  692. classifyItem.IsDelete = 1
  693. err = classifyItem.Update([]string{"IsDelete"})
  694. if err != nil {
  695. br.Msg = "删除失败"
  696. br.ErrMsg = "删除失败,Err:" + err.Error()
  697. return
  698. }
  699. }
  700. resp := response2.AddExcelInfoResp{}
  701. //删除表格
  702. if req.ExcelInfoId > 0 {
  703. excelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
  704. if err != nil {
  705. if utils.IsErrNoRow(err) {
  706. br.Msg = "表格已删除,请刷新页面"
  707. br.ErrMsg = "表格已删除,请刷新页面"
  708. return
  709. } else {
  710. br.Msg = "删除失败"
  711. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  712. return
  713. }
  714. }
  715. if excelInfo == nil {
  716. br.Msg = "表格已删除,请刷新页面"
  717. br.IsSendEmail = false
  718. return
  719. }
  720. // 删除excel
  721. err, errMsg, isSendEmail := excel2.Delete(excelInfo, sysUser)
  722. if err != nil {
  723. br.Msg = "删除失败"
  724. if errMsg != `` {
  725. br.Msg = errMsg
  726. }
  727. br.ErrMsg = "删除失败,Err:" + err.Error()
  728. br.IsSendEmail = isSendEmail
  729. return
  730. }
  731. // 写入ES
  732. go func() {
  733. excelService.EsAddOrEditExcel(excelInfo.ExcelInfoId)
  734. }()
  735. // 返回下一个表格的信息
  736. {
  737. var nextItem *excel.ExcelInfo
  738. var condition string
  739. var pars []interface{}
  740. condition += " AND excel_classify_id=? "
  741. pars = append(pars, excelInfo.ExcelClassifyId)
  742. if excelInfo.Source == utils.BALANCE_TABLE {
  743. condition += " AND parent_id=0 AND balance_type=0 "
  744. }
  745. condition += " AND (sort>? OR (sort=? AND excel_info_id<?) ) "
  746. pars = append(pars, excelInfo.Sort, excelInfo.Sort, excelInfo.ExcelInfoId)
  747. nextItem, err = excel.GetNextExcelInfoByCondition(condition, pars)
  748. if err != nil && !utils.IsErrNoRow(err) {
  749. br.Msg = "删除失败"
  750. br.ErrMsg = "获取下一级表格信息失败,Err:" + err.Error()
  751. return
  752. }
  753. // 如果没找到,那么查找下一个分类的第一个表格
  754. if nextItem == nil {
  755. currClassifyInfo, err := excel.GetExcelClassifyById(excelInfo.ExcelClassifyId)
  756. if err != nil && !utils.IsErrNoRow(err) {
  757. br.Msg = "删除失败"
  758. br.ErrMsg = "获取当前表格分类信息失败,Err:" + err.Error()
  759. return
  760. }
  761. nextItem, err = excel.GetNextExcelInfo(excelInfo.ExcelClassifyId, currClassifyInfo.Sort, currClassifyInfo.Source)
  762. if err != nil && !utils.IsErrNoRow(err) {
  763. br.Msg = "删除失败"
  764. br.ErrMsg = "获取下一级表格信息失败,Err:" + err.Error()
  765. return
  766. }
  767. }
  768. // 如果找到下一个表格了,那么就返回
  769. if nextItem != nil {
  770. resp = response2.AddExcelInfoResp{
  771. ExcelInfoId: nextItem.ExcelInfoId,
  772. UniqueCode: nextItem.UniqueCode,
  773. }
  774. }
  775. }
  776. //新增操作日志
  777. //{
  778. // ExcelLog := new(data_manage.ExcelInfoLog)
  779. // ExcelLog.ExcelName = ExcelInfo.ExcelName
  780. // ExcelLog.ExcelInfoId = req.ExcelInfoId
  781. // ExcelLog.ExcelClassifyId = ExcelInfo.ExcelClassifyId
  782. // ExcelLog.SysUserId = sysUser.AdminId
  783. // ExcelLog.SysUserRealName = sysUser.RealName
  784. // ExcelLog.UniqueCode = ExcelInfo.UniqueCode
  785. // ExcelLog.CreateTime = time.Now()
  786. // ExcelLog.Content = string(this.Ctx.Input.RequestBody)
  787. // ExcelLog.Status = "删除表格"
  788. // ExcelLog.Method = this.Ctx.Input.URI()
  789. // go data_manage.AddExcelInfoLog(ExcelLog)
  790. //}
  791. }
  792. br.Ret = 200
  793. br.Msg = "删除成功"
  794. br.Success = true
  795. br.Data = resp
  796. br.IsAddLog = true
  797. }
  798. // ExcelClassifyMove
  799. // @Title 表格分类移动接口
  800. // @Description 表格分类移动接口
  801. // @Success 200 {object} request.MoveExcelClassifyReq
  802. // @router /excel_classify/move [post]
  803. func (this *ExcelClassifyController) ExcelClassifyMove() {
  804. br := new(models.BaseResponse).Init()
  805. defer func() {
  806. this.Data["json"] = br
  807. this.ServeJSON()
  808. }()
  809. sysUser := this.SysUser
  810. if sysUser == nil {
  811. br.Msg = "请登录"
  812. br.ErrMsg = "请登录,SysUser Is Empty"
  813. br.Ret = 408
  814. return
  815. }
  816. var req request.MoveExcelClassifyReq
  817. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  818. if err != nil {
  819. br.Msg = "参数解析异常!"
  820. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  821. return
  822. }
  823. if req.ClassifyId <= 0 && req.ExcelInfoId <= 0 {
  824. br.Msg = "参数错误"
  825. br.ErrMsg = "请选择拖动目标,分类目录或者指标"
  826. return
  827. }
  828. //判断分类是否存在
  829. err, errMsg := excel2.MoveExcelClassify(req)
  830. if err != nil {
  831. br.Msg = err.Error()
  832. br.ErrMsg = errMsg
  833. return
  834. }
  835. br.Ret = 200
  836. br.Success = true
  837. br.IsAddLog = true
  838. br.Msg = "移动成功"
  839. }