custom_analysis.go 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999
  1. package excel
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/controllers"
  5. "eta_gn/eta_api/models"
  6. excelPermissionModel "eta_gn/eta_api/models/data_manage/data_manage_permission"
  7. excelModel "eta_gn/eta_api/models/data_manage/excel"
  8. "eta_gn/eta_api/models/data_manage/excel/request"
  9. "eta_gn/eta_api/models/data_manage/excel/response"
  10. "eta_gn/eta_api/models/system"
  11. "eta_gn/eta_api/services"
  12. "eta_gn/eta_api/services/data/data_manage_permission"
  13. "eta_gn/eta_api/services/data/excel"
  14. excel2 "eta_gn/eta_api/services/data/excel"
  15. "eta_gn/eta_api/utils"
  16. "fmt"
  17. "sort"
  18. "strconv"
  19. "strings"
  20. "time"
  21. "github.com/rdlucklib/rdluck_tools/paging"
  22. )
  23. type CustomAnalysisController struct {
  24. controllers.BaseAuthController
  25. }
  26. // @router /excel_by_name [get]
  27. func (c *CustomAnalysisController) ExcelByName() {
  28. br := new(models.BaseResponse).Init()
  29. defer func() {
  30. c.Data["json"] = br
  31. c.ServeJSON()
  32. }()
  33. sysUser := c.SysUser
  34. if sysUser == nil {
  35. br.Msg = "请登录"
  36. br.ErrMsg = "请登录,SysUser Is Empty"
  37. br.Ret = 408
  38. return
  39. }
  40. excelName := c.GetString("ExcelName")
  41. if excelName == `` {
  42. br.Msg = "请选择表格"
  43. br.ErrMsg = "ExcelName未传"
  44. br.IsSendEmail = false
  45. return
  46. }
  47. resp := response.FindExcelInfoResp{}
  48. excelName = utils.TrimLRStr(excelName)
  49. excelDetail, err := excelModel.GetNoContentExcelInfoByName(excelName, utils.CUSTOM_ANALYSIS_TABLE, sysUser.AdminId)
  50. if err != nil {
  51. if utils.IsErrNoRow(err) {
  52. br.Ret = 200
  53. br.Success = true
  54. br.Msg = "获取成功"
  55. br.Data = resp
  56. return
  57. }
  58. br.Msg = "获取表格事变"
  59. br.ErrMsg = err.Error()
  60. return
  61. }
  62. haveOperaAuth, err := data_manage_permission.CheckExcelPermissionByExcelInfoId(excelDetail.ExcelInfoId, excelDetail.ExcelClassifyId, excelDetail.IsJoinPermission, c.SysUser.AdminId)
  63. if err != nil {
  64. br.Msg = "获取ETA表格失败"
  65. br.ErrMsg = "获取ETA表格权限失败,Err:" + err.Error()
  66. return
  67. }
  68. resp.IsFind = true
  69. resp.ExcelInfo = response.FindExcelInfo{
  70. ExcelInfoId: excelDetail.ExcelInfoId,
  71. Source: excelDetail.Source,
  72. ExcelType: excelDetail.ExcelType,
  73. ExcelName: excelDetail.ExcelName,
  74. UniqueCode: excelDetail.UniqueCode,
  75. ExcelClassifyId: excelDetail.ExcelClassifyId,
  76. SysUserId: excelDetail.SysUserId,
  77. SysUserRealName: excelDetail.SysUserRealName,
  78. ExcelImage: excelDetail.ExcelImage,
  79. FileUrl: excelDetail.FileUrl,
  80. Sort: excelDetail.Sort,
  81. ModifyTime: excelDetail.ModifyTime,
  82. CreateTime: excelDetail.CreateTime,
  83. Button: excel.GetExcelInfoOpButton(sysUser, excelDetail.SysUserId, excelDetail.Source, haveOperaAuth),
  84. HaveOperaAuth: true,
  85. }
  86. if excelDetail != nil {
  87. sheetList, err := excelModel.GetAllSheetItemList(excelDetail.ExcelInfoId)
  88. if err != nil {
  89. br.Msg = "获取sheet失败"
  90. br.ErrMsg = "获取sheet失败,err:" + err.Error()
  91. return
  92. }
  93. resp.SheetList = sheetList
  94. }
  95. br.Ret = 200
  96. br.Success = true
  97. br.Msg = "获取成功"
  98. br.Data = resp
  99. }
  100. // @router /add [post]
  101. func (c *CustomAnalysisController) Add() {
  102. br := new(models.BaseResponse).Init()
  103. defer func() {
  104. c.Data["json"] = br
  105. c.ServeJSON()
  106. }()
  107. sysUser := c.SysUser
  108. if sysUser == nil {
  109. br.Msg = "请登录"
  110. br.ErrMsg = "请登录,SysUser Is Empty"
  111. br.Ret = 408
  112. return
  113. }
  114. deleteCache := true
  115. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  116. defer func() {
  117. if deleteCache {
  118. _ = utils.Rc.Delete(cacheKey)
  119. }
  120. }()
  121. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  122. deleteCache = false
  123. br.Msg = "系统处理中,请稍后重试!"
  124. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  125. return
  126. }
  127. var req request.AddExcelInfoReq
  128. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  129. if err != nil {
  130. br.Msg = "参数解析异常!"
  131. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  132. return
  133. }
  134. req.ExcelName = strings.Trim(req.ExcelName, " ")
  135. if req.ExcelName == "" {
  136. br.Msg = "请填写表格名称!"
  137. br.IsSendEmail = false
  138. return
  139. }
  140. {
  141. var condition string
  142. var pars []interface{}
  143. condition += " AND source=? "
  144. pars = append(pars, utils.CUSTOM_ANALYSIS_TABLE)
  145. condition += " AND excel_name=? "
  146. pars = append(pars, req.ExcelName)
  147. condition += " AND sys_user_id = ? "
  148. pars = append(pars, sysUser.AdminId)
  149. count, err := excelModel.GetExcelInfoCountByCondition(condition, pars)
  150. if err != nil {
  151. br.Msg = "判断表格名称是否存在失败"
  152. br.ErrMsg = "判断表格名称是否存在失败,Err:" + err.Error()
  153. return
  154. }
  155. if count > 0 {
  156. br.Msg = "表格名称已存在,请重新填写表格名称"
  157. br.IsSendEmail = false
  158. return
  159. }
  160. }
  161. if req.ExcelClassifyId <= 0 {
  162. br.Msg = "分类参数错误!"
  163. br.IsSendEmail = false
  164. return
  165. }
  166. excelInfo, err, errMsg, isSendEmail := excel.AddCustomAnalysisTable(utils.TrimLRStr(req.ExcelName), req.Content, req.ExcelImage, req.ExcelClassifyId, sysUser)
  167. if err != nil {
  168. br.Msg = "保存失败"
  169. if errMsg != `` {
  170. br.Msg = errMsg
  171. }
  172. br.ErrMsg = "保存失败,Err:" + err.Error()
  173. br.IsSendEmail = isSendEmail
  174. return
  175. }
  176. resp := new(response.AddExcelInfoResp)
  177. resp.ExcelInfoId = excelInfo.ExcelInfoId
  178. resp.UniqueCode = excelInfo.UniqueCode
  179. go excel.UpdateExcelInfoFileUrl(excelInfo)
  180. br.Ret = 200
  181. br.Success = true
  182. br.Msg = "保存成功"
  183. br.Data = resp
  184. br.IsAddLog = false //数据量太大了,不写入日志吧
  185. }
  186. // @router /save [post]
  187. func (c *CustomAnalysisController) Save() {
  188. br := new(models.BaseResponse).Init()
  189. defer func() {
  190. c.Data["json"] = br
  191. c.ServeJSON()
  192. }()
  193. sysUser := c.SysUser
  194. if sysUser == nil {
  195. br.Msg = "请登录"
  196. br.ErrMsg = "请登录,SysUser Is Empty"
  197. br.Ret = 408
  198. return
  199. }
  200. deleteCache := true
  201. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  202. defer func() {
  203. if deleteCache {
  204. _ = utils.Rc.Delete(cacheKey)
  205. }
  206. }()
  207. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  208. deleteCache = false
  209. br.Msg = "系统处理中,请稍后重试!"
  210. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  211. return
  212. }
  213. var req request.SaveExcelInfoReq
  214. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  215. if err != nil {
  216. br.Msg = "参数解析异常!"
  217. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  218. return
  219. }
  220. req.ExcelName = strings.Trim(req.ExcelName, " ")
  221. if req.ExcelName == "" {
  222. br.Msg = "请填写表格名称!"
  223. br.IsSendEmail = false
  224. return
  225. }
  226. if req.ExcelInfoId <= 0 {
  227. br.Msg = "请选择excel!"
  228. br.IsSendEmail = false
  229. return
  230. }
  231. if req.ExcelClassifyId <= 0 {
  232. br.Msg = "分类参数错误!"
  233. br.IsSendEmail = false
  234. return
  235. }
  236. excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
  237. if err != nil {
  238. br.Msg = "找不到该EXCEL!"
  239. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  240. return
  241. }
  242. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  243. br.Msg = "EXCEL异常!"
  244. br.IsSendEmail = false
  245. return
  246. }
  247. err, errMsg, isSendEmail := excel.SaveCustomAnalysisTable(excelInfo, utils.TrimLRStr(req.ExcelName), req.Content, req.ExcelImage, req.ExcelClassifyId, req.OpSheetList)
  248. if err != nil {
  249. br.Msg = "保存失败"
  250. if errMsg != `` {
  251. br.Msg = errMsg
  252. }
  253. br.ErrMsg = "保存失败,Err:" + err.Error()
  254. br.IsSendEmail = isSendEmail
  255. return
  256. }
  257. resp := new(response.AddExcelInfoResp)
  258. resp.ExcelInfoId = excelInfo.ExcelInfoId
  259. resp.UniqueCode = excelInfo.UniqueCode
  260. go excel.UpdateExcelInfoFileUrl(excelInfo)
  261. br.Ret = 200
  262. br.Success = true
  263. br.Msg = "保存成功"
  264. br.Data = resp
  265. br.IsAddLog = false //数据量太大了,不写入日志吧
  266. }
  267. // @router /excel/base [get]
  268. func (c *CustomAnalysisController) BaseExcelDetail() {
  269. br := new(models.BaseResponse).Init()
  270. defer func() {
  271. c.Data["json"] = br
  272. c.ServeJSON()
  273. }()
  274. sysUser := c.SysUser
  275. if sysUser == nil {
  276. br.Msg = "请登录"
  277. br.ErrMsg = "请登录,SysUser Is Empty"
  278. br.Ret = 408
  279. return
  280. }
  281. uniqueCode := c.GetString("UniqueCode")
  282. if uniqueCode == `` {
  283. br.Msg = "请选择表格"
  284. br.ErrMsg = "UniqueCode未传"
  285. br.IsSendEmail = false
  286. return
  287. }
  288. resp := response.FindExcelInfoResp{}
  289. excelDetail, err := excelModel.GetNoContentExcelInfoByUniqueCode(uniqueCode)
  290. if err != nil {
  291. if utils.IsErrNoRow(err) {
  292. br.Ret = 200
  293. br.Success = true
  294. br.Msg = "获取成功"
  295. br.Data = resp
  296. return
  297. }
  298. br.Msg = "获取表格事变"
  299. br.ErrMsg = err.Error()
  300. return
  301. }
  302. markStatus, err := services.UpdateExcelEditMark(excelDetail.ExcelInfoId, sysUser.AdminId, 2, sysUser.RealName)
  303. if err != nil {
  304. br.Msg = "查询标记状态失败"
  305. br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  306. return
  307. }
  308. permissions, e := excelPermissionModel.GetExcelPermissionByExcelIdAndUserId(excelDetail.ExcelInfoId, sysUser.AdminId)
  309. if e != nil {
  310. br.Msg = "获取失败"
  311. br.ErrMsg = fmt.Sprintf("获取表格权限失败, %v", e)
  312. return
  313. }
  314. var permissionType []int
  315. for _, v := range permissions {
  316. permissionType = append(permissionType, v.PermissionType)
  317. }
  318. opButton := excel.GetCustomAnalysisOpButton(sysUser, excelDetail.SysUserId, permissionType)
  319. resp.IsFind = true
  320. resp.ExcelInfo = response.FindExcelInfo{
  321. ExcelInfoId: excelDetail.ExcelInfoId,
  322. Source: excelDetail.Source,
  323. ExcelType: excelDetail.ExcelType,
  324. ExcelName: excelDetail.ExcelName,
  325. UniqueCode: excelDetail.UniqueCode,
  326. ExcelClassifyId: excelDetail.ExcelClassifyId,
  327. SysUserId: excelDetail.SysUserId,
  328. SysUserRealName: excelDetail.SysUserRealName,
  329. ExcelImage: excelDetail.ExcelImage,
  330. FileUrl: excelDetail.FileUrl,
  331. Sort: excelDetail.Sort,
  332. ModifyTime: excelDetail.ModifyTime,
  333. CreateTime: excelDetail.CreateTime,
  334. Button: opButton,
  335. HaveOperaAuth: true,
  336. }
  337. if markStatus.Status == 0 {
  338. resp.ExcelInfo.CanEdit = true
  339. } else {
  340. resp.ExcelInfo.Editor = markStatus.Editor
  341. }
  342. if excelDetail != nil {
  343. sheetList, err := excelModel.GetAllSheetItemList(excelDetail.ExcelInfoId)
  344. if err != nil {
  345. br.Msg = "获取sheet失败"
  346. br.ErrMsg = "获取sheet失败,err:" + err.Error()
  347. return
  348. }
  349. if len(sheetList) > 0 {
  350. sheetIdList := make([]int, 0)
  351. for _, v := range sheetList {
  352. sheetIdList = append(sheetIdList, v.ExcelSheetId)
  353. }
  354. sheetDataList, err := excelModel.GetSheetDataListBySheetIdListAndPage(sheetIdList, 1)
  355. if err != nil {
  356. br.Msg = "获取sheet中的数据失败"
  357. br.ErrMsg = "获取sheet中的数据失败,err:" + err.Error()
  358. return
  359. }
  360. sheetDataMap := make(map[int]*excelModel.ExcelSheetData)
  361. for _, v := range sheetDataList {
  362. sheetDataMap[v.ExcelSheetId] = v
  363. }
  364. for k, v := range sheetList {
  365. sheetData, ok := sheetDataMap[v.ExcelSheetId]
  366. if !ok {
  367. continue
  368. }
  369. v.Data = sheetData
  370. sheetList[k] = v
  371. }
  372. }
  373. resp.SheetList = sheetList
  374. }
  375. br.Ret = 200
  376. br.Success = true
  377. br.Msg = "获取成功"
  378. br.Data = resp
  379. }
  380. // @router /excel/data [get]
  381. func (c *CustomAnalysisController) ExcelDataList() {
  382. br := new(models.BaseResponse).Init()
  383. defer func() {
  384. c.Data["json"] = br
  385. c.ServeJSON()
  386. }()
  387. sysUser := c.SysUser
  388. if sysUser == nil {
  389. br.Msg = "请登录"
  390. br.ErrMsg = "请登录,SysUser Is Empty"
  391. br.Ret = 408
  392. return
  393. }
  394. uniqueCode := c.GetString("UniqueCode")
  395. if uniqueCode == `` {
  396. br.Msg = "请选择表格"
  397. br.ErrMsg = "UniqueCode未传"
  398. br.IsSendEmail = false
  399. return
  400. }
  401. page, _ := c.GetInt("Page")
  402. if page <= 0 {
  403. br.Msg = "页码异常"
  404. br.ErrMsg = "页码异常"
  405. br.IsSendEmail = false
  406. return
  407. }
  408. sheetList := make([]*excelModel.SheetItem, 0)
  409. excelDetail, err := excelModel.GetNoContentExcelInfoByUniqueCode(uniqueCode)
  410. if err != nil {
  411. if utils.IsErrNoRow(err) {
  412. br.Ret = 200
  413. br.Success = true
  414. br.Msg = "获取成功"
  415. br.Data = sheetList
  416. return
  417. }
  418. br.Msg = "获取表格事变"
  419. br.ErrMsg = err.Error()
  420. return
  421. }
  422. if excelDetail.Source != utils.CUSTOM_ANALYSIS_TABLE {
  423. br.Msg = "excel异常"
  424. br.ErrMsg = "excel异常"
  425. br.IsSendEmail = false
  426. return
  427. }
  428. if excelDetail != nil {
  429. sheetList, err = excelModel.GetAllNoConfigSheetItemList(excelDetail.ExcelInfoId)
  430. if err != nil {
  431. br.Msg = "获取sheet失败"
  432. br.ErrMsg = "获取sheet失败,err:" + err.Error()
  433. return
  434. }
  435. if len(sheetList) > 0 {
  436. sheetIdList := make([]int, 0)
  437. for _, v := range sheetList {
  438. sheetIdList = append(sheetIdList, v.ExcelSheetId)
  439. }
  440. sheetDataList, err := excelModel.GetSheetDataListBySheetIdListAndPage(sheetIdList, page)
  441. if err != nil {
  442. br.Msg = "获取sheet中的数据失败"
  443. br.ErrMsg = "获取sheet中的数据失败,err:" + err.Error()
  444. return
  445. }
  446. sheetDataMap := make(map[int]*excelModel.ExcelSheetData)
  447. for _, v := range sheetDataList {
  448. sheetDataMap[v.ExcelSheetId] = v
  449. }
  450. for k, v := range sheetList {
  451. sheetData, ok := sheetDataMap[v.ExcelSheetId]
  452. if !ok {
  453. continue
  454. }
  455. v.Data = sheetData
  456. sheetList[k] = v
  457. }
  458. }
  459. }
  460. br.Ret = 200
  461. br.Success = true
  462. br.Msg = "获取成功"
  463. br.Data = sheetList
  464. }
  465. // @router /excel_classify/list [get]
  466. func (c *CustomAnalysisController) ClassifyList() {
  467. br := new(models.BaseResponse).Init()
  468. defer func() {
  469. if br.ErrMsg == "" {
  470. br.IsSendEmail = false
  471. }
  472. c.Data["json"] = br
  473. c.ServeJSON()
  474. }()
  475. sysUser := c.SysUser
  476. if sysUser == nil {
  477. br.Msg = "请登录"
  478. br.ErrMsg = "请登录,SysUser Is Empty"
  479. br.Ret = 408
  480. return
  481. }
  482. source := utils.CUSTOM_ANALYSIS_TABLE
  483. isShare, _ := c.GetBool("IsShare")
  484. resp := new(response.ExcelClassifyListResp)
  485. excels, e := excelPermissionModel.GetAdminAuthExcelInfoPermission(source, sysUser.AdminId, "")
  486. if e != nil {
  487. br.Msg = "获取失败"
  488. br.ErrMsg = fmt.Sprintf("获取我分享的/分享给我的表格失败, %v", e)
  489. return
  490. }
  491. hasShareMap := make(map[int]bool) // 是否已分享标记
  492. for _, v := range excels {
  493. if v.CreateUserId == sysUser.AdminId {
  494. hasShareMap[int(v.ExcelInfoId)] = true
  495. }
  496. }
  497. if isShare {
  498. shareExcel := new(excelModel.ExcelClassifyItems)
  499. shareExcel.ExcelClassifyId = excelModel.CustomAnalysisMenuShareId
  500. shareExcel.ExcelClassifyName = "我共享的"
  501. shareExcel.Level = 1
  502. shareExcel.Sort = 1
  503. shareExcel.UniqueCode = fmt.Sprintf("SHARE%d", shareExcel.ExcelClassifyId)
  504. shareExcel.HaveOperaAuth = true
  505. shareExcel.Children = make([]*excelModel.ExcelClassifyItems, 0)
  506. sharedExcel := new(excelModel.ExcelClassifyItems)
  507. sharedExcel.ExcelClassifyId = excelModel.CustomAnalysisMenuSharedId
  508. sharedExcel.ExcelClassifyName = "收到共享"
  509. sharedExcel.Level = 1
  510. sharedExcel.Sort = 2
  511. sharedExcel.UniqueCode = fmt.Sprintf("SHARED%d", sharedExcel.ExcelClassifyId)
  512. sharedExcel.HaveOperaAuth = true
  513. sharedExcel.Children = make([]*excelModel.ExcelClassifyItems, 0)
  514. sharedUserClassify := make(map[int]*excelModel.ExcelClassifyItems)
  515. adminIdName := make(map[int]string)
  516. {
  517. adminOb := new(system.Admin)
  518. adminList, e := adminOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
  519. if e != nil {
  520. br.Msg = "获取失败"
  521. br.ErrMsg = fmt.Sprintf("获取用户列表失败, %v", e)
  522. return
  523. }
  524. for _, v := range adminList {
  525. adminIdName[v.AdminId] = v.RealName
  526. }
  527. }
  528. sortUser := make([]int, 0) // 分享人目录排序
  529. shareExists := make(map[int]bool)
  530. for _, v := range excels {
  531. item := new(excelModel.ExcelClassifyItems)
  532. item.ExcelInfoId = int(v.ExcelInfoId)
  533. item.ExcelClassifyName = v.ExcelName
  534. item.UniqueCode = v.UniqueCode
  535. item.HaveOperaAuth = true
  536. item.HasShare = hasShareMap[int(v.ExcelInfoId)]
  537. if v.CreateUserId == sysUser.AdminId && !shareExists[int(v.ExcelInfoId)] {
  538. shareExists[int(v.ExcelInfoId)] = true
  539. item.Level = 2
  540. item.ParentId = shareExcel.ExcelClassifyId
  541. item.ShowShareBtn = true
  542. shareExcel.Children = append(shareExcel.Children, item)
  543. continue
  544. }
  545. if int(v.SysUserId) == sysUser.AdminId {
  546. if adminIdName[v.CreateUserId] == "" {
  547. continue
  548. }
  549. if !utils.InArrayByInt(sortUser, v.CreateUserId) {
  550. sortUser = append(sortUser, v.CreateUserId)
  551. }
  552. if sharedUserClassify[v.CreateUserId] == nil {
  553. us := new(excelModel.ExcelClassifyItems)
  554. us.ExcelClassifyId = v.CreateUserId // 用户ID作为分类ID
  555. us.ExcelClassifyName = fmt.Sprintf("%s的表格", adminIdName[v.CreateUserId])
  556. us.Level = 2
  557. us.UniqueCode = fmt.Sprintf("%d-%d", sharedExcel.ExcelClassifyId, v.CreateUserId)
  558. us.HaveOperaAuth = true
  559. us.ShowShareBtn = false
  560. us.Children = make([]*excelModel.ExcelClassifyItems, 0)
  561. sharedUserClassify[v.CreateUserId] = us
  562. }
  563. item.Level = 3
  564. item.ParentId = sharedUserClassify[v.CreateUserId].ExcelClassifyId
  565. sharedUserClassify[v.CreateUserId].Children = append(sharedUserClassify[v.CreateUserId].Children, item)
  566. }
  567. }
  568. for i, j := 0, len(sortUser)-1; i < j; i, j = i+1, j-1 {
  569. sortUser[i], sortUser[j] = sortUser[j], sortUser[i]
  570. }
  571. for _, v := range sortUser {
  572. if sharedUserClassify[v] != nil {
  573. sharedExcel.Children = append(sharedExcel.Children, sharedUserClassify[v])
  574. }
  575. }
  576. resp.AllNodes = make([]*excelModel.ExcelClassifyItems, 0)
  577. resp.AllNodes = append(resp.AllNodes, shareExcel, sharedExcel)
  578. br.Ret = 200
  579. br.Success = true
  580. br.Msg = "获取成功"
  581. br.Data = resp
  582. return
  583. }
  584. classifyList, err := excelModel.GetAdminExcelClassifyBySource(source, sysUser.AdminId)
  585. if err != nil {
  586. br.Msg = "获取失败"
  587. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  588. return
  589. }
  590. classifyMap := make(map[int]*excelModel.ExcelClassifyItems)
  591. for _, v := range classifyList {
  592. v.HaveOperaAuth = true
  593. classifyMap[v.ExcelClassifyId] = v
  594. }
  595. allExcelInfo, err := excelModel.GetNoContentExcelInfoAll(source, sysUser.AdminId)
  596. if err != nil && !utils.IsErrNoRow(err) {
  597. br.Msg = "获取失败"
  598. br.ErrMsg = "获取表格信息失败,Err:" + err.Error()
  599. return
  600. }
  601. excelInfoMap := make(map[int][]*excelModel.ExcelClassifyItems)
  602. for _, v := range allExcelInfo {
  603. v.HaveOperaAuth = true
  604. v.ShowShareBtn = true
  605. v.HasShare = hasShareMap[v.ExcelInfoId]
  606. excelInfoMap[v.ExcelClassifyId] = append(excelInfoMap[v.ExcelClassifyId], v)
  607. }
  608. classifyListMap := make(map[int][]*excelModel.ExcelClassifyItems)
  609. for _, v := range classifyList {
  610. if v.ParentId > 0 {
  611. classifyListMap[v.ParentId] = append(classifyListMap[v.ParentId], v)
  612. }
  613. if existItems, ok := excelInfoMap[v.ExcelClassifyId]; ok {
  614. v.Children = existItems
  615. }
  616. }
  617. for key, classify := range classifyList {
  618. subList, ok := classifyListMap[classify.ExcelClassifyId]
  619. if ok {
  620. classifyList[key].Children = append(classifyList[key].Children, subList...)
  621. sort.Slice(classifyList[key].Children, func(i, j int) bool {
  622. return excelModel.ExcelClassifyItemBySort(classifyList[key].Children[i], classifyList[key].Children[j])
  623. })
  624. }
  625. }
  626. nodeAll := make([]*excelModel.ExcelClassifyItems, 0)
  627. for _, v := range classifyList {
  628. if v.ParentId == 0 {
  629. sort.Slice(v.Children, func(i, j int) bool {
  630. return excelModel.ExcelClassifyItemBySort(v.Children[i], v.Children[j])
  631. })
  632. nodeAll = append(nodeAll, v)
  633. }
  634. }
  635. resp.AllNodes = nodeAll
  636. br.Ret = 200
  637. br.Success = true
  638. br.Msg = "获取成功"
  639. br.Data = resp
  640. }
  641. // @router /excel/list [get]
  642. func (c *CustomAnalysisController) List() {
  643. br := new(models.BaseResponse).Init()
  644. defer func() {
  645. if br.ErrMsg == "" {
  646. br.IsSendEmail = false
  647. }
  648. c.Data["json"] = br
  649. c.ServeJSON()
  650. }()
  651. sysUser := c.SysUser
  652. if sysUser == nil {
  653. br.Msg = "请登录"
  654. br.ErrMsg = "请登录,SysUser Is Empty"
  655. br.Ret = 408
  656. return
  657. }
  658. excelClassifyId, _ := c.GetInt("ExcelClassifyId")
  659. pageSize, _ := c.GetInt("PageSize")
  660. currentIndex, _ := c.GetInt("CurrentIndex")
  661. keyword := c.GetString("Keyword")
  662. keyword = strings.TrimSpace(keyword)
  663. adminId := sysUser.AdminId
  664. isShare, _ := c.GetBool("IsShare")
  665. source := utils.CUSTOM_ANALYSIS_TABLE
  666. var condition string
  667. var pars []interface{}
  668. condition += " AND source = ?"
  669. pars = append(pars, source)
  670. if isShare {
  671. if keyword != "" {
  672. keyword = fmt.Sprint("%", keyword, "%")
  673. }
  674. excels, e := excelPermissionModel.GetAdminAuthExcelInfoPermission(source, adminId, keyword)
  675. if e != nil {
  676. br.Msg = "获取失败"
  677. br.ErrMsg = fmt.Sprintf("获取我分享的/分享给我的表格失败, %v", e)
  678. return
  679. }
  680. var excelIds, shareIds, sharedIds, userIds []int
  681. for _, v := range excels {
  682. id := int(v.ExcelInfoId)
  683. if excelClassifyId <= 0 && !utils.InArrayByInt(excelIds, id) {
  684. excelIds = append(excelIds, id)
  685. continue
  686. }
  687. if excelClassifyId == v.CreateUserId {
  688. userIds = append(userIds, id)
  689. continue
  690. }
  691. if excelClassifyId == excelModel.CustomAnalysisMenuShareId && v.CreateUserId == sysUser.AdminId {
  692. shareIds = append(shareIds, id)
  693. continue
  694. }
  695. if excelClassifyId == excelModel.CustomAnalysisMenuSharedId && int(v.SysUserId) == sysUser.AdminId {
  696. sharedIds = append(sharedIds, id)
  697. continue
  698. }
  699. }
  700. if excelClassifyId > 0 {
  701. switch excelClassifyId {
  702. case excelModel.CustomAnalysisMenuShareId: // 我共享的
  703. excelIds = shareIds
  704. case excelModel.CustomAnalysisMenuSharedId: // 收到共享
  705. excelIds = sharedIds
  706. default: // 用户目录
  707. excelIds = userIds
  708. }
  709. }
  710. if len(excelIds) == 0 {
  711. page := paging.GetPaging(currentIndex, pageSize, 0)
  712. resp := response.ExcelListResp{
  713. Paging: page,
  714. List: make([]*excelModel.MyExcelInfoList, 0),
  715. }
  716. br.Ret = 200
  717. br.Success = true
  718. br.Msg = "获取成功"
  719. br.Data = resp
  720. return
  721. }
  722. condition += fmt.Sprintf(` AND excel_info_id IN (%s)`, utils.GetOrmInReplace(len(excelIds)))
  723. pars = append(pars, excelIds)
  724. } else {
  725. condition += ` AND sys_user_id = ?`
  726. pars = append(pars, adminId)
  727. }
  728. if !isShare && excelClassifyId > 0 {
  729. _, err := excelModel.GetExcelClassifyById(excelClassifyId)
  730. if err != nil && !utils.IsErrNoRow(err) {
  731. br.Msg = "获取表格信息失败"
  732. br.ErrMsg = "获取信息失败,GetExcelClassify,Err:" + err.Error()
  733. return
  734. }
  735. childClassify, e, _ := excel2.GetChildClassifyByClassifyId(excelClassifyId, source)
  736. if e != nil && !utils.IsErrNoRow(e) {
  737. br.Msg = "获取失败"
  738. br.ErrMsg = "获取分类信息失败, GetEdbClassify,Err:" + e.Error()
  739. return
  740. }
  741. if len(childClassify) == 0 {
  742. condition += " AND excel_classify_id = ? "
  743. pars = append(pars, excelClassifyId)
  744. } else {
  745. classifyIds := []int{excelClassifyId}
  746. for _, v := range childClassify {
  747. classifyIds = append(classifyIds, v.ExcelClassifyId)
  748. }
  749. condition += fmt.Sprintf(` AND excel_classify_id IN (%s) `, utils.GetOrmInReplace(len(classifyIds)))
  750. pars = append(pars, classifyIds)
  751. }
  752. }
  753. if keyword != "" {
  754. condition += ` AND (excel_name LIKE ?)`
  755. pars = utils.GetLikeKeywordPars(pars, keyword, 1)
  756. }
  757. var total int
  758. page := paging.GetPaging(currentIndex, pageSize, total)
  759. var startSize int
  760. if pageSize <= 0 {
  761. pageSize = utils.PageSize20
  762. }
  763. if currentIndex <= 0 {
  764. currentIndex = 1
  765. }
  766. startSize = paging.StartIndex(currentIndex, pageSize)
  767. list, err := excelModel.GetNoContentExcelListByCondition(condition, pars, startSize, pageSize)
  768. if err != nil && !utils.IsErrNoRow(err) {
  769. br.Success = true
  770. br.Msg = "获取表格信息失败"
  771. br.ErrMsg = "获取表格信息失败,Err:" + err.Error()
  772. return
  773. }
  774. for _, v := range list {
  775. v.HaveOperaAuth = true
  776. }
  777. dataCount, err := excelModel.GetExcelListCountByCondition(condition, pars)
  778. if err != nil && !utils.IsErrNoRow(err) {
  779. br.Msg = "获取表格列表信息失败"
  780. br.ErrMsg = "获取表格列表数据总数失败,Err:" + err.Error()
  781. return
  782. }
  783. page = paging.GetPaging(currentIndex, pageSize, dataCount)
  784. resp := response.ExcelListResp{
  785. Paging: page,
  786. List: list,
  787. }
  788. br.Ret = 200
  789. br.Success = true
  790. br.Msg = "获取成功"
  791. br.Data = resp
  792. }
  793. // @router /excel/share [post]
  794. func (c *CustomAnalysisController) Share() {
  795. br := new(models.BaseResponse).Init()
  796. defer func() {
  797. if br.ErrMsg != "" {
  798. br.IsSendEmail = false
  799. }
  800. c.Data["json"] = br
  801. c.ServeJSON()
  802. }()
  803. var req request.ShareExcelInfoReq
  804. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  805. if err != nil {
  806. br.Msg = "参数解析异常!"
  807. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  808. return
  809. }
  810. sysUser := c.SysUser
  811. if sysUser == nil {
  812. br.Msg = "请登录"
  813. br.ErrMsg = "请登录,SysUser Is Empty"
  814. br.Ret = 408
  815. return
  816. }
  817. if req.ExcelInfoId <= 0 {
  818. br.Msg = "请选择表格"
  819. return
  820. }
  821. excelInfo, e := excelModel.GetExcelInfoById(req.ExcelInfoId)
  822. if e != nil {
  823. if utils.IsErrNoRow(e) {
  824. br.Msg = "表格不存在, 请刷新页面"
  825. return
  826. }
  827. br.Msg = "操作失败"
  828. br.ErrMsg = fmt.Sprintf("获取表格失败, %v", e)
  829. return
  830. }
  831. if excelInfo.SysUserId != sysUser.AdminId {
  832. br.Msg = "无权操作"
  833. br.ErrMsg = fmt.Sprintf("无权设置表格权限, ExcelInfoId: %d, SysAdminId: %d", req.ExcelInfoId, sysUser.AdminId)
  834. return
  835. }
  836. source := utils.CUSTOM_ANALYSIS_TABLE
  837. newPermissions := make([]*excelPermissionModel.ExcelInfoPermission, 0)
  838. for _, v := range req.ViewUserIds {
  839. newPermissions = append(newPermissions, &excelPermissionModel.ExcelInfoPermission{
  840. ExcelInfoId: int32(req.ExcelInfoId),
  841. Source: int32(source),
  842. SysUserId: int32(v),
  843. CreateTime: time.Now().Local(),
  844. ModifyTime: time.Now().Local(),
  845. PermissionType: 1,
  846. })
  847. }
  848. for _, v := range req.EditUserIds {
  849. newPermissions = append(newPermissions, &excelPermissionModel.ExcelInfoPermission{
  850. ExcelInfoId: int32(req.ExcelInfoId),
  851. Source: int32(source),
  852. SysUserId: int32(v),
  853. CreateTime: time.Now().Local(),
  854. ModifyTime: time.Now().Local(),
  855. PermissionType: 2,
  856. })
  857. }
  858. if e := excelPermissionModel.ClearAndSetExcelInfoPermission(source, req.ExcelInfoId, newPermissions); e != nil {
  859. br.Msg = "操作失败"
  860. br.ErrMsg = fmt.Sprintf("设置表格权限失败, %v", e)
  861. return
  862. }
  863. br.Ret = 200
  864. br.Success = true
  865. br.Msg = "操作成功"
  866. }
  867. // @router /excel/share_detail [get]
  868. func (c *CustomAnalysisController) ShareDetail() {
  869. br := new(models.BaseResponse).Init()
  870. defer func() {
  871. if br.ErrMsg != "" {
  872. br.IsSendEmail = false
  873. }
  874. c.Data["json"] = br
  875. c.ServeJSON()
  876. }()
  877. sysUser := c.SysUser
  878. if sysUser == nil {
  879. br.Msg = "请登录"
  880. br.ErrMsg = "请登录,SysUser Is Empty"
  881. br.Ret = 408
  882. return
  883. }
  884. excelInfoId, _ := c.GetInt("ExcelInfoId")
  885. if excelInfoId <= 0 {
  886. br.Msg = "请选择表格"
  887. return
  888. }
  889. permissions, e := excelPermissionModel.GetExcelPermissionBySourceAndId(excelInfoId, utils.CUSTOM_ANALYSIS_TABLE)
  890. if e != nil {
  891. br.Msg = "获取失败"
  892. br.ErrMsg = fmt.Sprintf("获取表格权限失败, %v", e)
  893. return
  894. }
  895. resp := new(response.ShareExcelInfoDetail)
  896. resp.ExcelInfoId = excelInfoId
  897. for _, v := range permissions {
  898. if v.PermissionType == 1 {
  899. resp.ViewUserIds = append(resp.ViewUserIds, int(v.SysUserId))
  900. }
  901. if v.PermissionType == 2 {
  902. resp.EditUserIds = append(resp.EditUserIds, int(v.SysUserId))
  903. }
  904. }
  905. br.Data = resp
  906. br.Ret = 200
  907. br.Success = true
  908. br.Msg = "获取成功"
  909. }