balance_table.go 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587
  1. package excel
  2. import (
  3. "archive/zip"
  4. "encoding/json"
  5. "errors"
  6. "eta_gn/eta_api/models"
  7. "eta_gn/eta_api/models/data_manage"
  8. "eta_gn/eta_api/models/data_manage/excel"
  9. "eta_gn/eta_api/models/data_manage/excel/request"
  10. "eta_gn/eta_api/models/data_manage/excel/response"
  11. "eta_gn/eta_api/models/system"
  12. "eta_gn/eta_api/services/data"
  13. "eta_gn/eta_api/services/data/data_manage_permission"
  14. excelService "eta_gn/eta_api/services/data/excel"
  15. excel2 "eta_gn/eta_api/services/excel"
  16. "eta_gn/eta_api/utils"
  17. "fmt"
  18. "io/ioutil"
  19. "os"
  20. "sort"
  21. "strconv"
  22. "strings"
  23. "time"
  24. "github.com/tealeg/xlsx"
  25. )
  26. // @router /excel_info/child_table [get]
  27. func (c *ExcelInfoController) GetChildTable() {
  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. parentId, _ := c.GetInt("ParentId")
  41. if parentId <= 0 {
  42. br.Msg = "请选择父表"
  43. return
  44. }
  45. list := make([]*excel.ExcelInfo, 0)
  46. childList, err := excel.GetChildExcelInfoByParentId(parentId)
  47. if err != nil {
  48. br.Msg = "查询子表失败"
  49. return
  50. }
  51. if len(childList) > 0 {
  52. list = childList
  53. }
  54. resp := &response.BalanceChildTableResp{List: list}
  55. br.Ret = 200
  56. br.Success = true
  57. br.Msg = "查询成功"
  58. br.Data = resp
  59. }
  60. // @router /excel_info/rename [post]
  61. func (c *ExcelInfoController) Rename() {
  62. br := new(models.BaseResponse).Init()
  63. defer func() {
  64. c.Data["json"] = br
  65. c.ServeJSON()
  66. }()
  67. sysUser := c.SysUser
  68. if sysUser == nil {
  69. br.Msg = "请登录"
  70. br.ErrMsg = "请登录,SysUser Is Empty"
  71. br.Ret = 408
  72. return
  73. }
  74. var req request.RenameExcelInfoReq
  75. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  76. if err != nil {
  77. br.Msg = "参数解析异常!"
  78. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  79. return
  80. }
  81. if req.ExcelInfoId <= 0 {
  82. br.Msg = "请传入ETA表格标识!"
  83. return
  84. }
  85. req.ExcelName = strings.Trim(req.ExcelName, " ")
  86. if req.ExcelName == "" {
  87. br.Msg = "请填写表格名称!"
  88. br.IsSendEmail = false
  89. return
  90. }
  91. excelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
  92. if err != nil {
  93. br.Msg = "获取ETA表格失败"
  94. br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
  95. return
  96. }
  97. var condition string
  98. var pars []interface{}
  99. condition += " AND excel_info_id != ? AND excel_classify_id=? AND excel_name=? AND parent_id=?"
  100. pars = append(pars, req.ExcelInfoId, excelInfo.ExcelClassifyId, req.ExcelName, excelInfo.ParentId)
  101. count, err := excel.GetExcelInfoCountByCondition(condition, pars)
  102. if err != nil {
  103. br.Msg = "ETA判断表格名称是否存在失败"
  104. br.ErrMsg = "判断ETA表格名称是否存在失败,Err:" + err.Error()
  105. return
  106. }
  107. if count > 0 {
  108. br.Msg = "ETA表格名称已存在,请重新填写"
  109. br.IsSendEmail = false
  110. return
  111. }
  112. {
  113. checkExcelInfo := excelInfo
  114. if excelInfo.Source == utils.BALANCE_TABLE {
  115. checkExcelInfoId := excelInfo.ExcelInfoId
  116. if excelInfo.BalanceType == 1 {
  117. checkExcelInfoId = excelInfo.RelExcelInfoId
  118. } else {
  119. if excelInfo.ParentId > 0 {
  120. checkExcelInfoId = excelInfo.ParentId
  121. }
  122. }
  123. if checkExcelInfoId != excelInfo.ExcelInfoId {
  124. checkExcelInfo, err = excel.GetExcelInfoById(checkExcelInfoId)
  125. if err != nil {
  126. br.Msg = "获取平衡表格信息失败"
  127. br.ErrMsg = "获取平衡表格信息失败,Err:" + err.Error()
  128. return
  129. }
  130. }
  131. }
  132. haveOperaAuth, e := data_manage_permission.CheckExcelPermissionByExcelInfoId(checkExcelInfo.ExcelInfoId, checkExcelInfo.ExcelClassifyId, checkExcelInfo.IsJoinPermission, c.SysUser.AdminId)
  133. if e != nil {
  134. br.Msg = "获取ETA表格权限失败"
  135. br.ErrMsg = "获取表格权限信息失败,Err" + e.Error()
  136. return
  137. }
  138. button := excelService.GetBalanceExcelInfoOpButton(sysUser.AdminId, checkExcelInfo.SysUserId, haveOperaAuth, checkExcelInfo.ExcelInfoId)
  139. if !button.OpButton {
  140. br.Msg = "无操作权限"
  141. br.IsSendEmail = false
  142. return
  143. }
  144. }
  145. excelInfo.ModifyTime = time.Now()
  146. excelInfo.ExcelName = req.ExcelName
  147. excelInfo.UpdateUserId = sysUser.AdminId
  148. excelInfo.UpdateUserRealName = sysUser.RealName
  149. updateExcelInfoParams := []string{"ModifyTime", "ExcelName", "UpdateUserId", "UpdateUserRealName"}
  150. err = excelInfo.Update(updateExcelInfoParams)
  151. if err != nil {
  152. br.Msg = "保存失败"
  153. br.ErrMsg = "保存失败,Err:" + err.Error()
  154. return
  155. }
  156. resp := response.AddExcelInfoResp{
  157. ExcelInfoId: excelInfo.ExcelInfoId,
  158. UniqueCode: excelInfo.UniqueCode,
  159. }
  160. _ = utils.Rc.Delete(utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL + ":" + excelInfo.UniqueCode)
  161. br.Ret = 200
  162. br.Success = true
  163. br.Msg = "修改成功"
  164. br.Data = resp
  165. br.IsAddLog = true
  166. }
  167. // @router /excel_info/worker/save [post]
  168. func (c *ExcelInfoController) SaveExcelWorker() {
  169. br := new(models.BaseResponse).Init()
  170. defer func() {
  171. c.Data["json"] = br
  172. c.ServeJSON()
  173. }()
  174. sysUser := c.SysUser
  175. if sysUser == nil {
  176. br.Msg = "请登录"
  177. br.ErrMsg = "请登录,SysUser Is Empty"
  178. br.Ret = 408
  179. return
  180. }
  181. var req request.SaveExcelInfoWorkerReq
  182. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  183. if err != nil {
  184. br.Msg = "参数解析异常!"
  185. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  186. return
  187. }
  188. if req.ExcelInfoId <= 0 {
  189. br.Msg = "请传入ETA表格标识!"
  190. return
  191. }
  192. excelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
  193. if err != nil {
  194. br.Msg = "获取ETA表格失败"
  195. br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
  196. return
  197. }
  198. if excelInfo.SysUserId != sysUser.AdminId {
  199. br.Msg = "您没有权限操作!"
  200. br.ErrMsg = "您没有权限操作!"
  201. return
  202. }
  203. {
  204. haveOperaAuth, err := data_manage_permission.CheckExcelPermissionByExcelInfoId(excelInfo.ExcelInfoId, excelInfo.ExcelClassifyId, excelInfo.IsJoinPermission, c.SysUser.AdminId)
  205. if err != nil {
  206. br.Msg = "获取ETA表格失败"
  207. br.ErrMsg = "获取ETA表格权限失败,Err:" + err.Error()
  208. return
  209. }
  210. button := excelService.GetExcelInfoOpButton(sysUser, excelInfo.SysUserId, excelInfo.Source, haveOperaAuth)
  211. if !button.OpButton {
  212. br.Msg = "无操作权限"
  213. br.IsSendEmail = false
  214. return
  215. }
  216. }
  217. obj := new(excel.ExcelWorker)
  218. notDeleteWorkerIds := make([]string, 0)
  219. workerMap := make(map[int]struct{})
  220. if req.SysUserIds != "" {
  221. notDeleteWorkerIds = strings.Split(req.SysUserIds, ",")
  222. }
  223. existList, err := obj.GetByExcelInfoId(req.ExcelInfoId)
  224. if err != nil {
  225. br.Msg = "获取表格协作人失败!"
  226. br.ErrMsg = "获取表格协作人失败,Err:" + err.Error()
  227. return
  228. }
  229. for _, v := range existList {
  230. workerMap[v.SysUserId] = struct{}{}
  231. }
  232. addIds := make([]int, 0)
  233. for _, v := range notDeleteWorkerIds {
  234. id, _ := strconv.Atoi(v)
  235. if _, ok := workerMap[id]; !ok {
  236. addIds = append(addIds, id)
  237. }
  238. }
  239. adminList, err := system.GetAdminListByIdListWithoutEnable(addIds)
  240. addList := make([]*excel.ExcelWorker, 0)
  241. for _, v := range adminList {
  242. addList = append(addList, &excel.ExcelWorker{
  243. ExcelInfoId: req.ExcelInfoId,
  244. SysUserId: v.AdminId,
  245. SysUserRealName: v.RealName,
  246. CreateTime: time.Now(),
  247. ModifyTime: time.Now(),
  248. })
  249. }
  250. err = obj.AddWorker(req.ExcelInfoId, addList, notDeleteWorkerIds)
  251. if err != nil {
  252. br.Msg = "保存失败"
  253. br.ErrMsg = "保存失败,Err:" + err.Error()
  254. return
  255. }
  256. br.Ret = 200
  257. br.Success = true
  258. br.Msg = "操作成功"
  259. }
  260. // @router /excel_info/worker [get]
  261. func (c *ExcelInfoController) GetWorker() {
  262. br := new(models.BaseResponse).Init()
  263. defer func() {
  264. c.Data["json"] = br
  265. c.ServeJSON()
  266. }()
  267. sysUser := c.SysUser
  268. if sysUser == nil {
  269. br.Msg = "请登录"
  270. br.ErrMsg = "请登录,SysUser Is Empty"
  271. br.Ret = 408
  272. return
  273. }
  274. excelInfoId, _ := c.GetInt("ExcelInfoId")
  275. if excelInfoId <= 0 {
  276. br.Msg = "请选择表格"
  277. br.ErrMsg = "ExcelInfoId未传"
  278. br.IsSendEmail = false
  279. return
  280. }
  281. obj := new(excel.ExcelWorker)
  282. list, err := obj.GetByExcelInfoId(excelInfoId)
  283. if err != nil {
  284. br.Msg = "获取表格协作人失败!"
  285. br.ErrMsg = "获取表格协作人失败,Err:" + err.Error()
  286. return
  287. }
  288. ret := &response.BalanceTableWorkerResp{List: list}
  289. br.Data = ret
  290. br.Ret = 200
  291. br.Success = true
  292. br.Msg = "操作成功"
  293. }
  294. // @router /excel_info/balance/chart_add [post]
  295. func (c *ExcelInfoController) BalanceChartInfoAdd() {
  296. br := new(models.BaseResponse).Init()
  297. defer func() {
  298. c.Data["json"] = br
  299. c.ServeJSON()
  300. }()
  301. sysUser := c.SysUser
  302. if sysUser == nil {
  303. br.Msg = "请登录"
  304. br.ErrMsg = "请登录,SysUser Is Empty"
  305. br.Ret = 408
  306. return
  307. }
  308. deleteCache := true
  309. cacheKey := "CACHE_EXCEL_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  310. defer func() {
  311. if deleteCache {
  312. utils.Rc.Delete(cacheKey)
  313. }
  314. }()
  315. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  316. deleteCache = false
  317. br.Msg = "系统处理中,请稍后重试!"
  318. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  319. return
  320. }
  321. var req request.AddBalanceTableChartReq
  322. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  323. if err != nil {
  324. br.Msg = "参数解析异常!"
  325. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  326. return
  327. }
  328. req.ChartName = strings.Trim(req.ChartName, " ")
  329. if req.ChartName == "" {
  330. br.Msg = "请填写图表名称!"
  331. return
  332. }
  333. excelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
  334. if err != nil {
  335. br.Msg = "获取ETA表格失败"
  336. return
  337. }
  338. if excelInfo.Source != utils.BALANCE_TABLE {
  339. br.Msg = "EXCEL类型错误!"
  340. return
  341. }
  342. {
  343. checkExcelInfo := excelInfo
  344. if excelInfo.Source == utils.BALANCE_TABLE {
  345. checkExcelInfoId := excelInfo.ExcelInfoId
  346. if excelInfo.BalanceType == 1 {
  347. checkExcelInfoId = excelInfo.RelExcelInfoId
  348. } else {
  349. if excelInfo.ParentId > 0 {
  350. checkExcelInfoId = excelInfo.ParentId
  351. }
  352. }
  353. if checkExcelInfoId != excelInfo.ExcelInfoId {
  354. checkExcelInfo, err = excel.GetExcelInfoById(checkExcelInfoId)
  355. if err != nil {
  356. br.Msg = "获取平衡表格信息失败"
  357. br.ErrMsg = "获取平衡表格信息失败,Err:" + err.Error()
  358. return
  359. }
  360. }
  361. }
  362. haveOperaAuth, e := data_manage_permission.CheckExcelPermissionByExcelInfoId(checkExcelInfo.ExcelInfoId, checkExcelInfo.ExcelClassifyId, checkExcelInfo.IsJoinPermission, c.SysUser.AdminId)
  363. if e != nil {
  364. br.Msg = "获取ETA表格权限失败"
  365. br.ErrMsg = "获取表格权限信息失败,Err" + e.Error()
  366. return
  367. }
  368. button := excelService.GetBalanceExcelInfoOpButton(sysUser.AdminId, checkExcelInfo.SysUserId, haveOperaAuth, checkExcelInfo.ExcelInfoId)
  369. if !button.OpButton {
  370. br.Msg = "无操作权限"
  371. br.IsSendEmail = false
  372. return
  373. }
  374. }
  375. dataListMap := make(map[int][]*data_manage.EdbDataList)
  376. if excelInfo.BalanceType == 1 {
  377. newExcelDataMap, excelAllRows, excelAllCols, e, errMsg := excelService.GetBalanceExcelData(excelInfo, c.Lang)
  378. if e != nil {
  379. br.Msg = "获取表格数据失败"
  380. if errMsg != "" {
  381. br.Msg = errMsg
  382. }
  383. br.ErrMsg = "获取表格数据失败,Err:" + e.Error()
  384. return
  385. }
  386. for k, mapping := range req.ChartEdbInfoList {
  387. tmpMapping := &excel.ExcelChartEdb{
  388. ExcelChartEdbId: k,
  389. DateSequence: mapping.DateSequenceStr,
  390. DataSequence: mapping.DataSequenceStr,
  391. }
  392. er, msg := excelService.GetBalanceExcelEdbData(tmpMapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
  393. if er != nil {
  394. utils.FileLog.Info(fmt.Sprintf(" 获取图表,指标信息失败 Err:%s, %s", msg, er.Error()))
  395. continue
  396. }
  397. }
  398. }
  399. chartInfo, err, errMsg, isSendEmail := data.AddBalanceExcelChart(excelInfo, req, sysUser, dataListMap)
  400. if err != nil {
  401. br.Msg = "保存失败"
  402. if errMsg != `` {
  403. br.Msg = errMsg
  404. }
  405. br.ErrMsg = err.Error()
  406. br.IsSendEmail = isSendEmail
  407. return
  408. }
  409. resp := new(data_manage.AddChartInfoResp)
  410. resp.ChartInfoId = chartInfo.ChartInfoId
  411. resp.UniqueCode = chartInfo.UniqueCode
  412. resp.ChartType = req.ChartType
  413. {
  414. chartLog := new(data_manage.ChartInfoLog)
  415. chartLog.ChartInfoId = chartInfo.ChartInfoId
  416. chartLog.ChartName = req.ChartName
  417. chartLog.ChartClassifyId = 0
  418. chartLog.SysUserId = sysUser.AdminId
  419. chartLog.SysUserRealName = sysUser.RealName
  420. chartLog.UniqueCode = chartInfo.UniqueCode
  421. chartLog.CreateTime = time.Now()
  422. chartLog.Content = string(c.Ctx.Input.RequestBody)
  423. chartLog.Status = "新增图表"
  424. chartLog.Method = c.Ctx.Input.URI()
  425. go data_manage.AddChartInfoLog(chartLog)
  426. }
  427. br.Ret = 200
  428. br.Success = true
  429. br.Msg = "保存成功"
  430. br.Data = resp
  431. br.IsAddLog = true
  432. }
  433. // @router /excel_info/balance/chart_edit [post]
  434. func (c *ExcelInfoController) BalanceChartInfoEdit() {
  435. br := new(models.BaseResponse).Init()
  436. defer func() {
  437. c.Data["json"] = br
  438. c.ServeJSON()
  439. }()
  440. sysUser := c.SysUser
  441. if sysUser == nil {
  442. br.Msg = "请登录"
  443. br.ErrMsg = "请登录,SysUser Is Empty"
  444. br.Ret = 408
  445. return
  446. }
  447. deleteCache := true
  448. cacheKey := "CACHE_EXCEL_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  449. defer func() {
  450. if deleteCache {
  451. utils.Rc.Delete(cacheKey)
  452. }
  453. }()
  454. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  455. deleteCache = false
  456. br.Msg = "系统处理中,请稍后重试!"
  457. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  458. return
  459. }
  460. var req request.AddBalanceTableChartReq
  461. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  462. if err != nil {
  463. br.Msg = "参数解析异常!"
  464. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  465. return
  466. }
  467. req.ChartName = strings.Trim(req.ChartName, " ")
  468. if req.ChartName == "" {
  469. br.Msg = "请填写图表名称!"
  470. return
  471. }
  472. if req.ChartInfoId <= 0 {
  473. br.Msg = "请选择图表"
  474. return
  475. }
  476. excelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
  477. if err != nil {
  478. br.Msg = "获取ETA表格失败"
  479. return
  480. }
  481. if excelInfo.Source != utils.BALANCE_TABLE {
  482. br.Msg = "EXCEL类型错误!"
  483. return
  484. }
  485. {
  486. checkExcelInfo := excelInfo
  487. if excelInfo.Source == utils.BALANCE_TABLE {
  488. checkExcelInfoId := excelInfo.ExcelInfoId
  489. if excelInfo.BalanceType == 1 {
  490. checkExcelInfoId = excelInfo.RelExcelInfoId
  491. } else {
  492. if excelInfo.ParentId > 0 {
  493. checkExcelInfoId = excelInfo.ParentId
  494. }
  495. }
  496. if checkExcelInfoId != excelInfo.ExcelInfoId {
  497. checkExcelInfo, err = excel.GetExcelInfoById(checkExcelInfoId)
  498. if err != nil {
  499. br.Msg = "获取平衡表格信息失败"
  500. br.ErrMsg = "获取平衡表格信息失败,Err:" + err.Error()
  501. return
  502. }
  503. }
  504. }
  505. haveOperaAuth, e := data_manage_permission.CheckExcelPermissionByExcelInfoId(checkExcelInfo.ExcelInfoId, checkExcelInfo.ExcelClassifyId, checkExcelInfo.IsJoinPermission, c.SysUser.AdminId)
  506. if e != nil {
  507. br.Msg = "获取ETA表格权限失败"
  508. br.ErrMsg = "获取表格权限信息失败,Err" + e.Error()
  509. return
  510. }
  511. button := excelService.GetBalanceExcelInfoOpButton(sysUser.AdminId, checkExcelInfo.SysUserId, haveOperaAuth, checkExcelInfo.ExcelInfoId)
  512. if !button.OpButton {
  513. br.Msg = "无操作权限"
  514. br.IsSendEmail = false
  515. return
  516. }
  517. }
  518. dataListMap := make(map[int][]*data_manage.EdbDataList)
  519. if excelInfo.BalanceType == 1 {
  520. newExcelDataMap, excelAllRows, excelAllCols, e, errMsg := excelService.GetBalanceExcelData(excelInfo, c.Lang)
  521. if e != nil {
  522. br.Msg = "获取表格数据失败"
  523. if errMsg != "" {
  524. br.Msg = errMsg
  525. }
  526. br.ErrMsg = "获取表格数据失败,Err:" + e.Error()
  527. return
  528. }
  529. for k, mapping := range req.ChartEdbInfoList {
  530. tmpMapping := &excel.ExcelChartEdb{
  531. ExcelChartEdbId: k,
  532. DateSequence: mapping.DateSequenceStr,
  533. DataSequence: mapping.DataSequenceStr,
  534. }
  535. er, msg := excelService.GetBalanceExcelEdbData(tmpMapping, newExcelDataMap, dataListMap, excelAllRows, excelAllCols)
  536. if er != nil {
  537. utils.FileLog.Info(fmt.Sprintf(" 获取图表,指标信息失败 Err:%s, %s", msg, er.Error()))
  538. continue
  539. }
  540. }
  541. }
  542. chartItem, err, errMsg, isSendEmail := data.EditBalanceExcelChart(excelInfo, req, sysUser, dataListMap)
  543. if err != nil {
  544. br.Msg = "保存失败"
  545. if errMsg != `` {
  546. br.Msg = errMsg
  547. }
  548. br.ErrMsg = err.Error()
  549. br.IsSendEmail = isSendEmail
  550. return
  551. }
  552. resp := new(data_manage.AddChartInfoResp)
  553. resp.ChartInfoId = chartItem.ChartInfoId
  554. resp.UniqueCode = chartItem.UniqueCode
  555. resp.ChartType = req.ChartType
  556. {
  557. chartLog := new(data_manage.ChartInfoLog)
  558. chartLog.ChartName = chartItem.ChartName
  559. chartLog.ChartInfoId = req.ChartInfoId
  560. chartLog.ChartClassifyId = chartItem.ChartClassifyId
  561. chartLog.SysUserId = sysUser.AdminId
  562. chartLog.SysUserRealName = sysUser.RealName
  563. chartLog.UniqueCode = chartItem.UniqueCode
  564. chartLog.CreateTime = time.Now()
  565. chartLog.Content = string(c.Ctx.Input.RequestBody)
  566. chartLog.Status = "编辑图表"
  567. chartLog.Method = c.Ctx.Input.URL()
  568. go data_manage.AddChartInfoLog(chartLog)
  569. }
  570. br.Ret = 200
  571. br.Success = true
  572. br.Msg = "保存成功"
  573. br.Data = resp
  574. br.IsAddLog = true
  575. }
  576. // @router /excel_info/balance/chart_list [get]
  577. func (c *ExcelInfoController) GetBalanceChartList() {
  578. br := new(models.BaseResponse).Init()
  579. defer func() {
  580. c.Data["json"] = br
  581. c.ServeJSON()
  582. }()
  583. sysUser := c.SysUser
  584. if sysUser == nil {
  585. br.Msg = "请登录"
  586. br.ErrMsg = "请登录,SysUser Is Empty"
  587. br.Ret = 408
  588. return
  589. }
  590. excelInfoId, _ := c.GetInt("ExcelInfoId")
  591. if excelInfoId <= 0 {
  592. br.Msg = "请选择平衡表"
  593. return
  594. }
  595. excelInfo, err := excel.GetExcelInfoById(excelInfoId)
  596. if err != nil {
  597. if utils.IsErrNoRow(err) {
  598. br.Msg = "表格不存在"
  599. return
  600. }
  601. br.Msg = "查询子表失败"
  602. br.ErrMsg = "查询子表失败,Err:" + err.Error()
  603. return
  604. }
  605. list := make([]*data_manage.BalanceChartInfoDetailResp, 0)
  606. chartInfoList, mappingListMap, dataListMap, err, errMsg := excelService.GetBalanceExcelChartList(excelInfo, "")
  607. if err != nil {
  608. if errMsg != "" {
  609. br.Msg = errMsg
  610. br.ErrMsg = err.Error()
  611. return
  612. } else {
  613. br.Msg = "查询图表失败"
  614. br.ErrMsg = "查询图表失败,Err:" + err.Error()
  615. }
  616. return
  617. }
  618. for _, chartInfo := range chartInfoList {
  619. mappingList, ok := mappingListMap[chartInfo.ChartInfoId]
  620. if !ok {
  621. br.Msg = "未找到图表关联的指标信息"
  622. return
  623. }
  624. var chartInfoResp *data_manage.ChartInfoDetailResp
  625. chartInfoResp, err, errMsg = data.GetBalanceExcelChartDetail(chartInfo, mappingList, sysUser, dataListMap)
  626. if err != nil {
  627. br.Msg = "查询图表详情失败"
  628. br.ErrMsg = "查询图表详情失败,Err:" + err.Error()
  629. return
  630. }
  631. chartEdbList := make([]*data_manage.ExcelChartEdbView, 0)
  632. for _, v := range mappingList {
  633. tmp := &data_manage.ExcelChartEdbView{
  634. ExcelChartEdbId: v.ExcelChartEdbId,
  635. DateSequenceStr: v.DateSequence,
  636. DataSequenceStr: v.DataSequence,
  637. FromTag: v.FromTag,
  638. }
  639. chartEdbList = append(chartEdbList, tmp)
  640. }
  641. balanceChartInfoResp := &data_manage.BalanceChartInfoDetailResp{
  642. ChartInfoDetailResp: chartInfoResp,
  643. ExcelEdbList: chartEdbList,
  644. }
  645. list = append(list, balanceChartInfoResp)
  646. }
  647. ret := &data_manage.BalanceTableChartListResp{List: list}
  648. br.Ret = 200
  649. br.Success = true
  650. br.Msg = "查询成功"
  651. br.Data = ret
  652. }
  653. // @router /excel_info/balance/chart_del [post]
  654. func (c *ExcelInfoController) DeleteBalanceChart() {
  655. br := new(models.BaseResponse).Init()
  656. defer func() {
  657. c.Data["json"] = br
  658. c.ServeJSON()
  659. }()
  660. sysUser := c.SysUser
  661. if sysUser == nil {
  662. br.Msg = "请登录"
  663. br.ErrMsg = "请登录,SysUser Is Empty"
  664. br.Ret = 408
  665. return
  666. }
  667. var req data_manage.DeleteChartClassifyReq
  668. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  669. if err != nil {
  670. br.Msg = "参数解析异常!"
  671. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  672. return
  673. }
  674. if req.ChartInfoId <= 0 {
  675. br.Msg = "参数错误"
  676. br.IsSendEmail = false
  677. return
  678. }
  679. if req.ChartInfoId > 0 {
  680. chartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
  681. if err != nil {
  682. if utils.IsErrNoRow(err) {
  683. br.Msg = "图表已删除,请刷新页面"
  684. br.ErrMsg = "指标不存在,Err:" + err.Error()
  685. return
  686. } else {
  687. br.Msg = "删除失败"
  688. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  689. return
  690. }
  691. }
  692. if chartInfo == nil {
  693. br.Msg = "图表已删除,请刷新页面"
  694. return
  695. }
  696. {
  697. excelInfo, e := excel.GetExcelInfoByChartInfoId(req.ChartInfoId)
  698. if e != nil {
  699. br.Msg = "获取ETA表格失败"
  700. return
  701. }
  702. checkExcelInfo := excelInfo
  703. if excelInfo.Source == utils.BALANCE_TABLE {
  704. checkExcelInfoId := excelInfo.ExcelInfoId
  705. if excelInfo.BalanceType == 1 {
  706. checkExcelInfoId = excelInfo.RelExcelInfoId
  707. } else {
  708. if excelInfo.ParentId > 0 {
  709. checkExcelInfoId = excelInfo.ParentId
  710. }
  711. }
  712. if checkExcelInfoId != excelInfo.ExcelInfoId {
  713. checkExcelInfo, e = excel.GetExcelInfoById(checkExcelInfoId)
  714. if e != nil {
  715. br.Msg = "获取平衡表格信息失败"
  716. br.ErrMsg = "获取平衡表格信息失败,Err:" + e.Error()
  717. return
  718. }
  719. }
  720. }
  721. haveOperaAuth, e := data_manage_permission.CheckExcelPermissionByExcelInfoId(checkExcelInfo.ExcelInfoId, checkExcelInfo.ExcelClassifyId, checkExcelInfo.IsJoinPermission, c.SysUser.AdminId)
  722. if e != nil {
  723. br.Msg = "获取ETA表格权限失败"
  724. br.ErrMsg = "获取表格权限信息失败,Err" + e.Error()
  725. return
  726. }
  727. button := excelService.GetBalanceExcelInfoOpButton(sysUser.AdminId, checkExcelInfo.SysUserId, haveOperaAuth, checkExcelInfo.ExcelInfoId)
  728. if !button.OpButton {
  729. br.Msg = "无操作权限"
  730. br.IsSendEmail = false
  731. return
  732. }
  733. }
  734. var myCond string
  735. var myPars []interface{}
  736. myCond += ` AND a.chart_info_id = ? `
  737. myPars = append(myPars, req.ChartInfoId)
  738. myCharts, e := data_manage.GetMyChartListGroupByCharyInfoIdAndAdminIdByCondition(myCond, myPars)
  739. if e != nil {
  740. br.Msg = "删除失败"
  741. br.ErrMsg = "获取引用图表的MyChats失败, Err: " + e.Error()
  742. return
  743. }
  744. myIds := make([]int, 0)
  745. for _, m := range myCharts {
  746. myIds = append(myIds, m.MyChartId)
  747. }
  748. e = excel.DeleteBalanceExcelChartInfoAndData(req.ChartInfoId)
  749. if e != nil {
  750. br.Msg = "删除失败"
  751. br.ErrMsg = "删除失败,Err:" + e.Error()
  752. return
  753. }
  754. {
  755. go data.EsDeleteChartInfo(req.ChartInfoId)
  756. go data.EsDeleteMyChartInfoByMyChartIds(myIds)
  757. }
  758. {
  759. chartLog := new(data_manage.ChartInfoLog)
  760. chartLog.ChartName = chartInfo.ChartName
  761. chartLog.ChartInfoId = req.ChartInfoId
  762. chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  763. chartLog.SysUserId = sysUser.AdminId
  764. chartLog.SysUserRealName = sysUser.RealName
  765. chartLog.UniqueCode = chartInfo.UniqueCode
  766. chartLog.CreateTime = time.Now()
  767. chartLog.Content = string(c.Ctx.Input.RequestBody)
  768. chartLog.Status = "删除图表"
  769. chartLog.Method = c.Ctx.Input.URI()
  770. go data_manage.AddChartInfoLog(chartLog)
  771. }
  772. }
  773. br.Ret = 200
  774. br.Msg = "删除成功"
  775. br.Success = true
  776. br.IsAddLog = true
  777. }
  778. // @router /excel_info/balance/chartLegend/preview [post]
  779. func (c *ExcelInfoController) BalanceSeasonChartLegendPreview() {
  780. br := new(models.BaseResponse).Init()
  781. defer func() {
  782. c.Data["json"] = br
  783. c.ServeJSON()
  784. }()
  785. sysUser := c.SysUser
  786. if sysUser == nil {
  787. br.Msg = "请登录"
  788. br.ErrMsg = "请登录,SysUser Is Empty"
  789. br.Ret = 408
  790. return
  791. }
  792. var req request.BalanceSeasonChartLegendPreviewReq
  793. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  794. if err != nil {
  795. br.Msg = "参数解析异常!"
  796. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  797. return
  798. }
  799. if len(req.DateArr) == 0 || len(req.DateArr) == 0 || len(req.DateArr) != len(req.DataArr) {
  800. br.Msg = "请输入正确的日期和数据"
  801. return
  802. }
  803. newDataMap := make(map[int]float64)
  804. for i, v := range req.DataArr {
  805. fv, e := strconv.ParseFloat(v, 64)
  806. if e != nil {
  807. br.Msg = "数据格式错误"
  808. return
  809. }
  810. newDataMap[i] = fv
  811. }
  812. dataList := make([]*data_manage.EdbDataList, 0)
  813. for i, v := range req.DateArr {
  814. dataTime, e := time.ParseInLocation(utils.FormatDate, v, time.Local)
  815. if e != nil {
  816. br.Msg = "日期格式错误"
  817. br.ErrMsg = v + "日期格式错误,Err:" + e.Error()
  818. return
  819. }
  820. timestamp := dataTime.UnixNano() / 1e6
  821. tmp := &data_manage.EdbDataList{
  822. EdbDataId: i,
  823. DataTime: v,
  824. DataTimestamp: timestamp,
  825. Value: newDataMap[i],
  826. }
  827. dataList = append(dataList, tmp)
  828. }
  829. sort.Slice(dataList, func(i, j int) bool {
  830. return dataList[i].DataTimestamp < dataList[j].DataTimestamp
  831. })
  832. list, err, errMsg := data.GetBalanceExcelSeasonChartLegendPreview(dataList, req.Calendar, req.SeasonExtraConfig)
  833. if err != nil {
  834. if errMsg != "" {
  835. br.Msg = errMsg
  836. } else {
  837. br.Msg = "预览失败"
  838. }
  839. br.ErrMsg = err.Error()
  840. return
  841. }
  842. ret := &data_manage.BalanceSeasonChartLegendPreviewResp{List: list}
  843. br.Data = ret
  844. br.Ret = 200
  845. br.Success = true
  846. br.Msg = "操作成功"
  847. }
  848. // @router /excel_info/balance/static/add [post]
  849. func (c *ExcelInfoController) AddStaticExcel() {
  850. br := new(models.BaseResponse).Init()
  851. defer func() {
  852. c.Data["json"] = br
  853. c.ServeJSON()
  854. }()
  855. sysUser := c.SysUser
  856. if sysUser == nil {
  857. br.Msg = "请登录"
  858. br.ErrMsg = "请登录,SysUser Is Empty"
  859. br.Ret = 408
  860. return
  861. }
  862. var req request.AddBalanceStaticExcelInfoReq
  863. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  864. if err != nil {
  865. br.Msg = "参数解析异常!"
  866. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  867. return
  868. }
  869. if req.ExcelInfoId <= 0 {
  870. br.Msg = "请传入ETA表格标识!"
  871. return
  872. }
  873. cacheKey := "CACHE_TABLE_INFO_BALANCE_STATIC_ADD_" + strconv.Itoa(req.ExcelInfoId)
  874. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  875. br.Msg = "系统处理中,请稍后重试!"
  876. br.ErrMsg = "系统处理中,请稍后重试!"
  877. return
  878. }
  879. defer func() {
  880. _ = utils.Rc.Delete(cacheKey)
  881. }()
  882. req.VersionName = strings.Trim(req.VersionName, " ")
  883. if req.VersionName == "" {
  884. br.Msg = "请填写版本名称!"
  885. br.IsSendEmail = false
  886. return
  887. }
  888. oldExcelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
  889. if err != nil {
  890. br.Msg = "获取ETA表格失败"
  891. return
  892. }
  893. {
  894. haveOperaAuth, err := data_manage_permission.CheckExcelPermissionByExcelInfoId(oldExcelInfo.ExcelInfoId, oldExcelInfo.ExcelClassifyId, oldExcelInfo.IsJoinPermission, c.SysUser.AdminId)
  895. if err != nil {
  896. br.Msg = "获取ETA表格失败"
  897. br.ErrMsg = "获取ETA表格权限失败,Err:" + err.Error()
  898. return
  899. }
  900. button := excelService.GetExcelInfoOpButton(sysUser, oldExcelInfo.SysUserId, oldExcelInfo.Source, haveOperaAuth)
  901. if !button.OpButton {
  902. br.Msg = "无操作权限"
  903. br.IsSendEmail = false
  904. return
  905. }
  906. }
  907. excelDataMap := make(map[int]map[int][]*data_manage.EdbDataList)
  908. condition := " AND parent_id = ? AND balance_type = 0 "
  909. var pars []interface{}
  910. pars = append(pars, req.ExcelInfoId)
  911. childExcelList, err := excel.GetExcelInfoListByCondition(condition, pars)
  912. if err != nil {
  913. br.Msg = "获取子表失败"
  914. br.ErrMsg = fmt.Sprintf("获取子表失败 %s", err.Error())
  915. return
  916. }
  917. for k, childExcelInfo := range childExcelList {
  918. newExcelDataMap, excelAllRows, excelAllCols, e, errMsg := excelService.GetBalanceExcelData(childExcelInfo, c.Lang)
  919. if e != nil {
  920. br.Msg = "获取表格数据失败"
  921. if errMsg != "" {
  922. br.Msg = errMsg
  923. }
  924. br.ErrMsg = "获取表格数据失败,Err:" + e.Error()
  925. return
  926. }
  927. tmpMappingList, e := excel.GetExcelChartEdbMappingByExcelInfoId(childExcelInfo.ExcelInfoId)
  928. if e != nil {
  929. br.Msg = "获取图表,指标信息失败"
  930. br.ErrMsg = fmt.Sprintf(" 获取图表,指标信息失败 Err:%s", err.Error())
  931. return
  932. }
  933. if len(tmpMappingList) > 0 {
  934. for _, mapping := range tmpMappingList {
  935. child, ok := excelDataMap[mapping.ChartInfoId]
  936. if !ok {
  937. child = make(map[int][]*data_manage.EdbDataList)
  938. }
  939. er, msg := excelService.GetBalanceExcelEdbData(mapping, newExcelDataMap, child, excelAllRows, excelAllCols)
  940. if er != nil {
  941. utils.FileLog.Info(fmt.Sprintf(" 获取图表,指标信息失败 Err:%s, %s", msg, er.Error()))
  942. continue
  943. }
  944. excelDataMap[mapping.ChartInfoId] = child
  945. }
  946. }
  947. content, e := excelService.TransferBalanceExcelContentToStatic(childExcelInfo, c.Lang)
  948. if e != nil {
  949. br.Msg = "动态内容转成静态失败"
  950. br.ErrMsg = fmt.Sprintf("动态内容转成静态失败 %s", e.Error())
  951. return
  952. }
  953. childExcelList[k].Content = content
  954. }
  955. excelInfo, err, errMsg, isSendEmail := data.AddBalanceStaticExcel(oldExcelInfo, oldExcelInfo.ExcelClassifyId, req.VersionName, sysUser, 0, req.ExcelInfoId, 1, childExcelList, true, excelDataMap)
  956. if err != nil {
  957. br.Msg = "复制失败"
  958. if errMsg != `` {
  959. br.Msg = errMsg
  960. }
  961. br.ErrMsg = "复制失败,Err:" + err.Error()
  962. br.IsSendEmail = isSendEmail
  963. return
  964. }
  965. resp := new(response.AddExcelInfoResp)
  966. resp.ExcelInfoId = excelInfo.ExcelInfoId
  967. resp.UniqueCode = excelInfo.UniqueCode
  968. br.Ret = 200
  969. br.Success = true
  970. br.Msg = "保存成功"
  971. br.Data = resp
  972. br.IsAddLog = true
  973. }
  974. // @router /excel_info/balance/version [get]
  975. func (c *ExcelInfoController) BalanceVersionList() {
  976. br := new(models.BaseResponse).Init()
  977. defer func() {
  978. c.Data["json"] = br
  979. c.ServeJSON()
  980. }()
  981. sysUser := c.SysUser
  982. if sysUser == nil {
  983. br.Msg = "请登录"
  984. br.ErrMsg = "请登录,SysUser Is Empty"
  985. br.Ret = 408
  986. return
  987. }
  988. excelInfoId, _ := c.GetInt("ExcelInfoId")
  989. if excelInfoId <= 0 {
  990. br.Msg = "请选择表格"
  991. br.ErrMsg = "ExcelInfoId未传"
  992. br.IsSendEmail = false
  993. return
  994. }
  995. excelInfo, err := excel.GetExcelInfoById(excelInfoId)
  996. if err != nil {
  997. br.Msg = "获取ETA表格失败"
  998. br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
  999. return
  1000. }
  1001. if excelInfo.Source != utils.BALANCE_TABLE {
  1002. br.Msg = "请选择平衡表"
  1003. return
  1004. }
  1005. if excelInfo.BalanceType != 0 && excelInfo.ParentId != 0 {
  1006. br.Msg = "请选择动态平衡表"
  1007. return
  1008. }
  1009. list := make([]*response.BalanceTableVersionListItem, 0)
  1010. list = append(list, &response.BalanceTableVersionListItem{
  1011. ExcelInfoId: excelInfo.ExcelInfoId,
  1012. UniqueCode: excelInfo.UniqueCode,
  1013. BalanceType: excelInfo.BalanceType,
  1014. RelExcelInfoId: excelInfo.RelExcelInfoId,
  1015. VersionName: "动态表", //todo 有个默认的版本名称
  1016. })
  1017. condition := " AND rel_excel_info_id=? AND parent_id = 0 AND balance_type = 1 "
  1018. var pars []interface{}
  1019. pars = append(pars, excelInfoId)
  1020. staticList, err := excel.GetNoContentExcelInfoListByConditionNoPage(condition, pars)
  1021. if err != nil {
  1022. br.Msg = "获取子表失败"
  1023. br.ErrMsg = fmt.Sprintf("获取子表失败 %s", err.Error())
  1024. return
  1025. }
  1026. for _, staticInfo := range staticList {
  1027. tmp := &response.BalanceTableVersionListItem{
  1028. ExcelInfoId: staticInfo.ExcelInfoId,
  1029. UniqueCode: staticInfo.UniqueCode,
  1030. BalanceType: staticInfo.BalanceType,
  1031. RelExcelInfoId: staticInfo.RelExcelInfoId,
  1032. VersionName: staticInfo.VersionName,
  1033. }
  1034. list = append(list, tmp)
  1035. }
  1036. ret := &response.BalanceTableVersionListResp{List: list}
  1037. br.Data = ret
  1038. br.Ret = 200
  1039. br.Success = true
  1040. br.Msg = "操作成功"
  1041. }
  1042. // @router /excel_info/balance/version/modify [post]
  1043. func (c *ExcelInfoController) ModifyBalanceExcelVersion() {
  1044. br := new(models.BaseResponse).Init()
  1045. defer func() {
  1046. c.Data["json"] = br
  1047. c.ServeJSON()
  1048. }()
  1049. sysUser := c.SysUser
  1050. if sysUser == nil {
  1051. br.Msg = "请登录"
  1052. br.ErrMsg = "请登录,SysUser Is Empty"
  1053. br.Ret = 408
  1054. return
  1055. }
  1056. var req request.AddBalanceStaticExcelInfoReq
  1057. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  1058. if err != nil {
  1059. br.Msg = "参数解析异常!"
  1060. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1061. return
  1062. }
  1063. if req.ExcelInfoId <= 0 {
  1064. br.Msg = "请传入ETA表格标识!"
  1065. return
  1066. }
  1067. req.VersionName = strings.Trim(req.VersionName, " ")
  1068. if req.VersionName == "" {
  1069. br.Msg = "请填写版本名称!"
  1070. br.IsSendEmail = false
  1071. return
  1072. }
  1073. excelInfo, err := excel.GetExcelInfoById(req.ExcelInfoId)
  1074. if err != nil {
  1075. br.Msg = "获取ETA表格失败"
  1076. br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
  1077. return
  1078. }
  1079. if excelInfo.Source != utils.BALANCE_TABLE {
  1080. br.Msg = "请选择平衡表"
  1081. return
  1082. }
  1083. if excelInfo.BalanceType != 1 && excelInfo.ParentId != 0 {
  1084. br.Msg = "请选择静态表"
  1085. return
  1086. }
  1087. {
  1088. checkExcelInfo := excelInfo
  1089. if excelInfo.Source == utils.BALANCE_TABLE {
  1090. checkExcelInfoId := excelInfo.ExcelInfoId
  1091. if excelInfo.BalanceType == 1 {
  1092. checkExcelInfoId = excelInfo.RelExcelInfoId
  1093. } else {
  1094. if excelInfo.ParentId > 0 {
  1095. checkExcelInfoId = excelInfo.ParentId
  1096. }
  1097. }
  1098. if checkExcelInfoId != excelInfo.ExcelInfoId {
  1099. checkExcelInfo, err = excel.GetExcelInfoById(checkExcelInfoId)
  1100. if err != nil {
  1101. br.Msg = "获取平衡表格信息失败"
  1102. br.ErrMsg = "获取平衡表格信息失败,Err:" + err.Error()
  1103. return
  1104. }
  1105. }
  1106. }
  1107. haveOperaAuth, e := data_manage_permission.CheckExcelPermissionByExcelInfoId(checkExcelInfo.ExcelInfoId, checkExcelInfo.ExcelClassifyId, checkExcelInfo.IsJoinPermission, c.SysUser.AdminId)
  1108. if e != nil {
  1109. br.Msg = "获取ETA表格权限失败"
  1110. br.ErrMsg = "获取表格权限信息失败,Err" + e.Error()
  1111. return
  1112. }
  1113. button := excelService.GetBalanceExcelInfoOpButton(sysUser.AdminId, checkExcelInfo.SysUserId, haveOperaAuth, checkExcelInfo.ExcelInfoId)
  1114. if !button.OpButton {
  1115. br.Msg = "无操作权限"
  1116. br.IsSendEmail = false
  1117. return
  1118. }
  1119. }
  1120. {
  1121. var condition string
  1122. var pars []interface{}
  1123. condition += " AND rel_excel_info_id=? AND parent_id=0"
  1124. pars = append(pars, req.ExcelInfoId)
  1125. condition += " AND version_name=? "
  1126. pars = append(pars, req.VersionName)
  1127. count, tmpErr := excel.GetExcelInfoCountByCondition(condition, pars)
  1128. if tmpErr != nil {
  1129. br.Msg = "查询版本名称失败"
  1130. br.ErrMsg = tmpErr.Error()
  1131. return
  1132. }
  1133. if count > 0 {
  1134. br.Msg = "表格版本名称已存在,请重新填写版本名称"
  1135. br.IsSendEmail = false
  1136. return
  1137. }
  1138. }
  1139. excelInfo.ModifyTime = time.Now()
  1140. excelInfo.VersionName = req.VersionName
  1141. updateExcelInfoParams := []string{"ModifyTime", "VersionName"}
  1142. err = excelInfo.Update(updateExcelInfoParams)
  1143. if err != nil {
  1144. br.Msg = "操作失败"
  1145. br.ErrMsg = "操作失败,Err:" + err.Error()
  1146. return
  1147. }
  1148. br.Ret = 200
  1149. br.Success = true
  1150. br.Msg = "操作成功"
  1151. br.IsAddLog = true
  1152. }
  1153. func downloadBalanceTable(excelInfo *excel.ExcelInfo, lang string) (savePath, zipName string, uploadDir string, err error, errMsg string) {
  1154. dateDir := time.Now().Format("20060102")
  1155. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1156. uploadDir = "static/xls/" + dateDir + "/" + randStr
  1157. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  1158. if err != nil {
  1159. return
  1160. }
  1161. fileList := make([]string, 0)
  1162. if excelInfo.ParentId != 0 && excelInfo.BalanceType != 0 {
  1163. errMsg = "平衡表类型错误"
  1164. err = fmt.Errorf("平衡表类型错误 ")
  1165. return
  1166. }
  1167. staticCondition := " AND parent_id = 0 AND balance_type = 1 AND rel_excel_info_id=? "
  1168. var staticPars []interface{}
  1169. staticPars = append(staticPars, excelInfo.ExcelInfoId)
  1170. excelList, err := excel.GetExcelInfoListByCondition(staticCondition, staticPars)
  1171. if err != nil {
  1172. errMsg = "获取表格失败"
  1173. err = fmt.Errorf("获取表格失败 %s", err.Error())
  1174. return
  1175. }
  1176. excelList = append(excelList, excelInfo)
  1177. for _, staticExcelInfo := range excelList {
  1178. cCondition := " AND parent_id = ?"
  1179. var cPars []interface{}
  1180. cPars = append(cPars, staticExcelInfo.ExcelInfoId)
  1181. childList, e := excel.GetExcelInfoListByCondition(cCondition, cPars)
  1182. if e != nil {
  1183. errMsg = "获取子表失败"
  1184. err = fmt.Errorf("获取子表失败 %s", err.Error())
  1185. return
  1186. }
  1187. xlsxFile := xlsx.NewFile()
  1188. fileName := staticExcelInfo.ExcelName + ".xlsx"
  1189. fpath := uploadDir + "/" + fileName
  1190. for _, childExcelInfo := range childList {
  1191. var result request.MixedTableReq
  1192. err = json.Unmarshal([]byte(childExcelInfo.Content), &result)
  1193. if err != nil {
  1194. errMsg = "获取失败"
  1195. err = fmt.Errorf("表格json转结构体失败,Err:" + err.Error())
  1196. return
  1197. }
  1198. newResult, er, msg := excelService.GetMixedTableCellData(result, lang)
  1199. if er != nil {
  1200. err = er
  1201. errMsg = msg
  1202. return
  1203. }
  1204. tableData, er := excel2.GetTableDataByMixedTableData(newResult, false)
  1205. if er != nil {
  1206. errMsg = "获取失败"
  1207. err = fmt.Errorf("转换成table失败,Err:" + err.Error())
  1208. return
  1209. }
  1210. err = tableData.WriteExcelSheetData(xlsxFile, childExcelInfo.ExcelName)
  1211. if err != nil {
  1212. return
  1213. }
  1214. }
  1215. err = xlsxFile.Save(fpath)
  1216. if err != nil {
  1217. return
  1218. }
  1219. fileList = append(fileList, fileName)
  1220. }
  1221. zipName = excelInfo.ExcelName + ".zip"
  1222. savePath = uploadDir + "/" + zipName
  1223. fmt.Println(savePath)
  1224. zipFile, err := os.Create(savePath)
  1225. if err != nil {
  1226. return
  1227. }
  1228. zipWriter := zip.NewWriter(zipFile)
  1229. defer func() {
  1230. if err != nil {
  1231. zipWriter.Close()
  1232. zipFile.Close()
  1233. }
  1234. }()
  1235. for i := 0; i < len(fileList); i++ {
  1236. ioWriter, e := zipWriter.Create(fileList[i])
  1237. if e != nil {
  1238. err = fmt.Errorf("创建zip失败,Err:" + e.Error())
  1239. if os.IsPermission(e) {
  1240. fmt.Println("权限不足: ", e)
  1241. return
  1242. }
  1243. return
  1244. }
  1245. fullPath := uploadDir + "/" + fileList[i]
  1246. content, e := ioutil.ReadFile(fullPath)
  1247. if e != nil {
  1248. err = fmt.Errorf("读取文件失败,Err:" + e.Error())
  1249. return
  1250. }
  1251. ioWriter.Write(content)
  1252. }
  1253. zipWriter.Close()
  1254. zipFile.Close()
  1255. return
  1256. }
  1257. func refreshBalanceTable(excelDetail response.ExcelInfoDetail, lang string) (err error) {
  1258. edbInfoIds := make([]int, 0)
  1259. edbInfoIdExist := make(map[int]bool)
  1260. if excelDetail.ParentId > 0 {
  1261. newResult := excelDetail.TableData.(request.MixedTableReq)
  1262. newData := newResult.Data
  1263. if len(newData) > 0 {
  1264. for _, t := range newData {
  1265. for _, v := range t {
  1266. if v.EdbInfoId > 0 && !edbInfoIdExist[v.EdbInfoId] {
  1267. edbInfoIdExist[v.EdbInfoId] = true
  1268. edbInfoIds = append(edbInfoIds, v.EdbInfoId)
  1269. }
  1270. }
  1271. }
  1272. }
  1273. key := utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL + ":" + excelDetail.UniqueCode
  1274. if utils.Re == nil {
  1275. _ = utils.Rc.Delete(key)
  1276. }
  1277. } else {
  1278. cCondition := " AND parent_id = ? AND balance_type=0"
  1279. var cPars []interface{}
  1280. cPars = append(cPars, excelDetail.ExcelInfoId)
  1281. childList, e := excel.GetExcelInfoListByCondition(cCondition, cPars)
  1282. if e != nil {
  1283. err = fmt.Errorf("获取子表失败 %s", err.Error())
  1284. return
  1285. }
  1286. for _, child := range childList {
  1287. var result request.MixedTableReq
  1288. err = json.Unmarshal([]byte(child.Content), &result)
  1289. if err != nil {
  1290. err = errors.New("表格json转结构体失败,Err:" + err.Error())
  1291. return
  1292. }
  1293. var newData [][]request.MixedTableCellDataReq
  1294. newData, err, _ = excelService.GetMixedTableCellData(result, lang)
  1295. if err != nil {
  1296. return
  1297. }
  1298. if len(newData) > 0 {
  1299. for _, t := range newData {
  1300. for _, v := range t {
  1301. if v.EdbInfoId > 0 && !edbInfoIdExist[v.EdbInfoId] {
  1302. edbInfoIdExist[v.EdbInfoId] = true
  1303. edbInfoIds = append(edbInfoIds, v.EdbInfoId)
  1304. }
  1305. }
  1306. }
  1307. }
  1308. key := utils.HZ_CHART_LIB_EXCEL_TABLE_DETAIL + ":" + child.UniqueCode
  1309. if utils.Re == nil {
  1310. _ = utils.Rc.Delete(key)
  1311. }
  1312. }
  1313. }
  1314. if len(edbInfoIds) > 0 {
  1315. err, _ = data.EdbInfoRefreshAllFromBaseV3(edbInfoIds, false, true, false)
  1316. if err != nil {
  1317. err = fmt.Errorf("刷新混合表格数据失败, Err: " + err.Error())
  1318. return
  1319. }
  1320. }
  1321. return
  1322. }
  1323. // @router /excel_info/balance/chart_base_edit [post]
  1324. func (this *ExcelInfoController) BalanceChartInfoBaseEdit() {
  1325. br := new(models.BaseResponse).Init()
  1326. defer func() {
  1327. this.Data["json"] = br
  1328. this.ServeJSON()
  1329. }()
  1330. sysUser := this.SysUser
  1331. if sysUser == nil {
  1332. br.Msg = "请登录"
  1333. br.ErrMsg = "请登录,SysUser Is Empty"
  1334. br.Ret = 408
  1335. return
  1336. }
  1337. var req data_manage.EditChartInfoBaseReq
  1338. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1339. if err != nil {
  1340. br.Msg = "参数解析异常!"
  1341. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1342. return
  1343. }
  1344. req.ChartName = strings.Trim(req.ChartName, " ")
  1345. if req.ChartInfoId <= 0 {
  1346. br.Msg = "请选择图表"
  1347. return
  1348. }
  1349. chartItem, err := data_manage.GetChartInfoById(req.ChartInfoId)
  1350. if err != nil {
  1351. if utils.IsErrNoRow(err) {
  1352. br.Msg = "图表已被删除,请刷新页面"
  1353. br.ErrMsg = "图表已被删除,请刷新页面"
  1354. return
  1355. }
  1356. br.Msg = "获取图表信息失败"
  1357. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  1358. return
  1359. }
  1360. noEdbInfoType := []int{10}
  1361. if len(req.ChartEdbInfoList) <= 0 && !utils.InArrayByInt(noEdbInfoType, chartItem.ChartType) {
  1362. br.Msg = "请选择指标!"
  1363. return
  1364. }
  1365. var edbCondition string
  1366. var edbPars []interface{}
  1367. for _, v := range req.ChartEdbInfoList {
  1368. edbInfoId := v.EdbInfoId
  1369. edbInfo, err := excel.GetExcelChartEdbById(edbInfoId)
  1370. if err != nil {
  1371. if utils.IsErrNoRow(err) {
  1372. br.Msg = "图表不存在!"
  1373. br.ErrMsg = "图表指标不存在,ChartInfoId:" + strconv.Itoa(edbInfoId)
  1374. return
  1375. } else {
  1376. br.Msg = "获取图表信息失败!"
  1377. br.ErrMsg = "获取图表的指标信息失败,Err:" + err.Error()
  1378. return
  1379. }
  1380. }
  1381. if edbInfo == nil {
  1382. br.Msg = "指标不存在!"
  1383. br.ErrMsg = "指标不存在,ChartInfoId:" + strconv.Itoa(edbInfoId)
  1384. return
  1385. }
  1386. if v.EdbName != "" {
  1387. edbCondition = ""
  1388. edbPars = make([]interface{}, 0)
  1389. edbCondition += " AND excel_chart_edb_id<>? AND chart_info_id=?"
  1390. edbPars = append(edbPars, edbInfo.ExcelChartEdbId, chartItem.ChartInfoId)
  1391. switch this.Lang {
  1392. case utils.EnLangVersion:
  1393. edbCondition += " AND edb_name_en =? "
  1394. default:
  1395. edbCondition += " AND edb_name =? "
  1396. }
  1397. edbPars = append(edbPars, v.EdbName)
  1398. edbExist, err := excel.GetBalanceChartEdbByCondition(edbCondition, edbPars)
  1399. if err != nil {
  1400. if !utils.IsErrNoRow(err) {
  1401. br.Msg = "判断英文指标名称是否存在失败"
  1402. br.ErrMsg = "判断英文指标名称是否存在失败,Err:" + err.Error()
  1403. return
  1404. }
  1405. }
  1406. if err == nil && edbExist.ExcelChartEdbId > 0 {
  1407. br.Msg = edbExist.EdbName + ":" + v.EdbName + "指标名称已存在"
  1408. br.ErrMsg = "指标名称已存在,请重新填写"
  1409. br.IsSendEmail = false
  1410. return
  1411. }
  1412. }
  1413. }
  1414. if req.ChartName != "" || req.ExtraConfig != `` {
  1415. var condition string
  1416. var pars []interface{}
  1417. condition += " AND chart_info_id<>? "
  1418. pars = append(pars, req.ChartInfoId)
  1419. switch this.Lang {
  1420. case utils.EnLangVersion:
  1421. condition += " AND chart_name_en = ? "
  1422. default:
  1423. condition += " AND chart_name = ? "
  1424. }
  1425. pars = append(pars, req.ChartName)
  1426. existItem, err := data_manage.GetChartInfoByCondition(condition, pars)
  1427. if err != nil {
  1428. if !utils.IsErrNoRow(err) {
  1429. br.Msg = "判断英文图表名称是否存在失败"
  1430. br.ErrMsg = "判断英文图表名称是否存在失败,Err:" + err.Error()
  1431. return
  1432. }
  1433. }
  1434. if err == nil && existItem.ChartInfoId > 0 {
  1435. br.Msg = existItem.ChartName + ":" + req.ChartName + "图表名称已存在"
  1436. return
  1437. }
  1438. }
  1439. err = excel.EditBalanceChartBaseInfoAndEdbEnInfo(&req, chartItem, this.Lang)
  1440. if err != nil {
  1441. br.Msg = "保存失败"
  1442. br.ErrMsg = "保存失败,Err:" + err.Error()
  1443. return
  1444. }
  1445. go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
  1446. go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
  1447. {
  1448. chartLog := new(data_manage.ChartInfoLog)
  1449. chartLog.ChartName = chartItem.ChartName
  1450. chartLog.ChartInfoId = req.ChartInfoId
  1451. chartLog.ChartClassifyId = chartItem.ChartClassifyId
  1452. chartLog.SysUserId = sysUser.AdminId
  1453. chartLog.SysUserRealName = sysUser.RealName
  1454. chartLog.UniqueCode = chartItem.UniqueCode
  1455. chartLog.CreateTime = time.Now()
  1456. chartLog.Content = string(this.Ctx.Input.RequestBody)
  1457. chartLog.Status = "编辑图表英文信息"
  1458. chartLog.Method = this.Ctx.Input.URL()
  1459. go data_manage.AddChartInfoLog(chartLog)
  1460. }
  1461. if utils.Re == nil && utils.Rc != nil {
  1462. utils.Rc.Delete(utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode) //图表分享链接缓存
  1463. utils.Rc.Delete(data.GetChartInfoDataKey(req.ChartInfoId))
  1464. }
  1465. br.Ret = 200
  1466. br.Success = true
  1467. br.Msg = "编辑成功"
  1468. br.IsAddLog = true
  1469. }