excelController.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /*
  2. * @Author: liling
  3. * @Date: 2022-08-13 14:38:13
  4. * @LastEditors: liling
  5. * @LastEditTime: 2022-08-13 14:38:15
  6. * @FilePath: \police_security\controllers\exelController.go
  7. * @Description:excel导入导出相关控制器
  8. *
  9. * Copyright (c) 2022 by liling/jujutong, All Rights Reserved.
  10. */
  11. package controllers
  12. import (
  13. "errors"
  14. "fmt"
  15. "os"
  16. "scd_check_tools/excel"
  17. "scd_check_tools/global"
  18. "scd_check_tools/models/bo"
  19. "scd_check_tools/tools"
  20. "strings"
  21. "time"
  22. "github.com/astaxie/beego/orm"
  23. )
  24. //文件/附件服务
  25. type ExcelController struct {
  26. BaseController
  27. }
  28. func init() {
  29. }
  30. //公用数据导出方法
  31. // @Summary Excel数据导出
  32. // @Description Excel数据导出。导出成功时将返回导出文件的下载地址。
  33. // @Tags 文件/附件服务接口
  34. // @Accept x-www-form-urlencoded
  35. // @Produce json
  36. // @Param code query string true "业务类型。值为:scd-comp-result(差异对比结果)\scl-check-result(SCL校验结果)之一"
  37. // @Param caption query string false "数据标题"
  38. // @Param expcols query string false "导出的数据列,与expcolnames一一对应。从个数据列之间使用逗号分隔。未设置时将导出业务对应的所有列"
  39. // @Param expcolnames query string false "导出的数据列对应的名称,与expcols一一一对应。从个数据列名之间使用逗号分隔。未设置时将导出业务对应的所有列"
  40. // @Success 200 {object} ResultOK 成功
  41. // @Failure 500 {object} ResultError 失败
  42. // @router expTableData [post]
  43. func (c *ApiController) ExpTableData() {
  44. code := c.GetString("code", "") //业务数据类别,由系统定义
  45. if code == "" {
  46. c.Data["json"] = c.ResultError("导出的业务数据类别不能为空")
  47. c.ServeJSON()
  48. return
  49. }
  50. expCaption := c.GetString("caption", "数据导出-"+time.Now().Format("20060102150405"))
  51. expcols := []string{}
  52. expcolnames := []string{}
  53. c1 := c.GetString("expcols")
  54. if c1 != "" {
  55. expcols = strings.Split(c1, ",")
  56. }
  57. c2 := c.GetString("expcolnames")
  58. if c2 != "" {
  59. expcolnames = strings.Split(c2, ",")
  60. }
  61. if len(expcols) != len(expcolnames) {
  62. c.Data["json"] = c.ResultError("设置了导出列,但列名与中文名数量不一致")
  63. c.ServeJSON()
  64. return
  65. }
  66. paras := c.Input()
  67. param := map[string]interface{}{"code": code}
  68. for k, _ := range paras {
  69. param[k] = paras.Get(k)
  70. }
  71. datalist := []orm.Params{}
  72. scdinfo := orm.Params{}
  73. var err error
  74. switch code {
  75. case "log-opt":
  76. //操作日志导出
  77. /*
  78. datatable := map[string]interface{}{"state": param["state"], "starttime": param["starttime"], "endtime": param["endtime"], "words": param["words"]}
  79. queryPara := map[string]interface{}{"datatable": datatable}
  80. queryReturn, err := bo.QueryGlobalsyslogList(queryPara)
  81. if err == nil {
  82. datalist = queryReturn["data"].([]orm.Params)
  83. }*/
  84. break
  85. case "log-colle":
  86. //数据采集日志导出
  87. /*
  88. datatable := map[string]interface{}{"starttime": param["starttime"], "endtime": param["endtime"]}
  89. queryPara := map[string]interface{}{"datatable": datatable}
  90. queryReturn, err := bo.QueryDatalogList(queryPara)
  91. if err == nil {
  92. datalist = queryReturn["data"].([]orm.Params)
  93. }*/
  94. break
  95. case "log-report":
  96. /*
  97. datatable := map[string]interface{}{"state": param["state"], "starttime": param["starttime"], "endtime": param["endtime"], "words": param["words"], "type": param["type"]}
  98. queryPara := map[string]interface{}{"datatable": datatable}
  99. queryReturn, err := bo.QueryReportlogList(queryPara)
  100. if err == nil {
  101. datalist = queryReturn["data"].([]orm.Params)
  102. }*/
  103. //上报日志导出
  104. break
  105. case "scd-comp-result":
  106. //SCD一致性比对结果
  107. obj := new(bo.ScdCompare)
  108. compid, _ := c.GetInt("comp_id")
  109. datalist, err = obj.ExpResultList(compid, c.GetString("nodetype"), c.GetString("nodeid"))
  110. break
  111. case "scl-check-result":
  112. //SCL校验结果
  113. scdid, _ := c.GetInt64("scd_id")
  114. scdObj := new(bo.ScdMgr)
  115. scdinfo, err = scdObj.One(tools.IsEmpty(scdid))
  116. iedname := c.GetString("ied_name")
  117. nodename := c.GetString("node_name")
  118. if err == nil {
  119. scdname := tools.IsEmpty(scdinfo["scd_name"])
  120. stationinfo, _ := new(bo.BasicArea).One(tools.IsEmpty(scdinfo["station_id"]))
  121. if stationinfo != nil {
  122. obj := new(bo.ScdNodeRule)
  123. obj.ScdID = scdid
  124. datalist, _, err = obj.ResultList("", "",
  125. c.GetString("alert_level"),
  126. iedname,
  127. nodename,
  128. c.GetString("node_id"), 1, 30000)
  129. if iedname != "" {
  130. expCaption = fmt.Sprintf("%s-%s-装置(%s)校验结果", stationinfo.AreaName, scdname, iedname)
  131. } else if nodename != "" {
  132. nodename_zh := ""
  133. switch nodename {
  134. case "SCLSyntax":
  135. nodename_zh = "语法"
  136. break
  137. case "voltage_level":
  138. nodename_zh = "电压等级"
  139. key := "global_code_" + c.GetString("node_id")
  140. vol, _ := global.GoCahce.Get(key)
  141. if vol != nil {
  142. nodename_zh = nodename_zh + "(" + tools.IsEmpty(vol.(orm.Params)["name"]) + ")"
  143. }
  144. break
  145. case "area":
  146. nodename_zh = "间隔"
  147. areaObj := new(bo.ScdAreaMgr)
  148. areaInfo, _ := areaObj.One(c.GetString("node_id"))
  149. if areaInfo != nil {
  150. nodename_zh = nodename_zh + "(" + areaInfo.(bo.T_substation_area).Name + ")"
  151. }
  152. break
  153. default:
  154. nodename_zh = nodename
  155. break
  156. }
  157. expCaption = fmt.Sprintf("%s-%s-%s校验结果", stationinfo.AreaName, scdname, nodename_zh)
  158. } else {
  159. expCaption = fmt.Sprintf("%s-%s全部校验结果", stationinfo.AreaName, scdname)
  160. }
  161. }
  162. }
  163. break
  164. default:
  165. datalist = nil
  166. err = errors.New("未定义的导出数据类型:" + code)
  167. break
  168. }
  169. if err != nil {
  170. c.Data["json"] = c.ResultError(err.Error())
  171. c.ServeJSON()
  172. return
  173. }
  174. curPath, _ := os.Getwd() //当前绝对路径
  175. excel.InitExcel("exp_data_"+time.Now().Format("20060102150405"), curPath+string(os.PathSeparator)+"static"+string(os.PathSeparator)+"download")
  176. filename, errf := excel.ExportExcel(expCaption, expcols, expcolnames, datalist, true)
  177. if errf != nil {
  178. c.Data["json"] = c.ResultError(errf.Error())
  179. } else {
  180. c.Data["json"] = c.ResultOK("static/download/"+filename, 0)
  181. }
  182. c.ServeJSON()
  183. }