123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- /*
- * @Author: liling
- * @Date: 2022-08-13 14:38:13
- * @LastEditors: liling
- * @LastEditTime: 2022-08-13 14:38:15
- * @FilePath: \police_security\controllers\exelController.go
- * @Description:excel导入导出相关控制器
- *
- * Copyright (c) 2022 by liling/jujutong, All Rights Reserved.
- */
- package controllers
- import (
- "errors"
- "fmt"
- "os"
- "path"
- "scd_check_tools/excel"
- "scd_check_tools/global"
- "scd_check_tools/logger"
- "scd_check_tools/models/bo"
- "scd_check_tools/tools"
- "strings"
- "time"
- "github.com/astaxie/beego/orm"
- )
- //文件/附件服务
- type ExcelController struct {
- BaseController
- }
- func init() {
- }
- //公用数据导出方法
- // @Summary Excel数据导出
- // @Description Excel数据导出。导出成功时将返回导出文件的下载地址。
- // @Tags 文件/附件服务接口
- // @Accept x-www-form-urlencoded
- // @Produce json
- // @Param code query string true "业务类型。值为:scd-comp-result(差异对比结果)\scl-check-result(SCL校验结果)之一"
- // @Param caption query string false "数据标题"
- // @Param expcols query string false "导出的数据列,与expcolnames一一对应。从个数据列之间使用逗号分隔。未设置时将导出业务对应的所有列"
- // @Param expcolnames query string false "导出的数据列对应的名称,与expcols一一一对应。从个数据列名之间使用逗号分隔。未设置时将导出业务对应的所有列"
- // @Success 200 {object} ResultOK 成功
- // @Failure 500 {object} ResultError 失败
- // @router expTableData [post]
- func (c *ApiController) ExpTableData() {
- code := c.GetString("code", "") //业务数据类别,由系统定义
- if code == "" {
- c.Data["json"] = c.ResultError("导出的业务数据类别不能为空")
- c.ServeJSON()
- return
- }
- expCaption := c.GetString("caption", "数据导出-"+time.Now().Format("20060102150405"))
- expcols := []string{}
- expcolnames := []string{}
- c1 := c.GetString("expcols")
- if c1 != "" {
- expcols = strings.Split(c1, ",")
- }
- c2 := c.GetString("expcolnames")
- if c2 != "" {
- expcolnames = strings.Split(c2, ",")
- }
- if len(expcols) != len(expcolnames) {
- c.Data["json"] = c.ResultError("设置了导出列,但列名与中文名数量不一致")
- c.ServeJSON()
- return
- }
- paras := c.Input()
- param := map[string]interface{}{"code": code}
- for k, _ := range paras {
- param[k] = paras.Get(k)
- }
- datalist := []orm.Params{}
- scdinfo := orm.Params{}
- var err error
- switch code {
- case "log-opt":
- //操作日志导出
- /*
- datatable := map[string]interface{}{"state": param["state"], "starttime": param["starttime"], "endtime": param["endtime"], "words": param["words"]}
- queryPara := map[string]interface{}{"datatable": datatable}
- queryReturn, err := bo.QueryGlobalsyslogList(queryPara)
- if err == nil {
- datalist = queryReturn["data"].([]orm.Params)
- }*/
- break
- case "log-colle":
- //数据采集日志导出
- /*
- datatable := map[string]interface{}{"starttime": param["starttime"], "endtime": param["endtime"]}
- queryPara := map[string]interface{}{"datatable": datatable}
- queryReturn, err := bo.QueryDatalogList(queryPara)
- if err == nil {
- datalist = queryReturn["data"].([]orm.Params)
- }*/
- break
- case "log-report":
- /*
- datatable := map[string]interface{}{"state": param["state"], "starttime": param["starttime"], "endtime": param["endtime"], "words": param["words"], "type": param["type"]}
- queryPara := map[string]interface{}{"datatable": datatable}
- queryReturn, err := bo.QueryReportlogList(queryPara)
- if err == nil {
- datalist = queryReturn["data"].([]orm.Params)
- }*/
- //上报日志导出
- break
- case "scd-comp-result":
- //SCD一致性比对结果
- obj := new(bo.ScdCompare)
- compid, _ := c.GetInt("comp_id")
- datalist, err = obj.ExpResultList(compid, c.GetString("nodetype"), c.GetString("nodeid"))
- break
- case "scl-check-result":
- //SCL校验结果
- scdid, _ := c.GetInt64("scd_id")
- scdObj := new(bo.ScdMgr)
- scdinfo, err = scdObj.One(tools.IsEmpty(scdid))
- iedname := c.GetString("ied_name")
- nodename := c.GetString("node_name")
- if err == nil {
- scdname := tools.IsEmpty(scdinfo["scd_name"])
- stationinfo, _ := new(bo.BasicArea).One(tools.IsEmpty(scdinfo["station_id"]))
- if stationinfo != nil {
- obj := new(bo.ScdNodeRule)
- obj.ScdID = scdid
- datalist, _, err = obj.ResultList("", "",
- c.GetString("alert_level"),
- iedname,
- nodename,
- c.GetString("node_id"), 1, 30000)
- if iedname != "" {
- expCaption = fmt.Sprintf("%s-%s-装置(%s)校验结果", stationinfo.AreaName, scdname, iedname)
- } else if nodename != "" {
- nodename_zh := ""
- switch nodename {
- case "SCLSyntax":
- nodename_zh = "语法"
- break
- case "voltage_level":
- nodename_zh = "电压等级"
- key := "global_code_" + c.GetString("node_id")
- vol, _ := global.GoCahce.Get(key)
- if vol != nil {
- nodename_zh = nodename_zh + "(" + tools.IsEmpty(vol.(orm.Params)["name"]) + ")"
- }
- break
- case "area":
- nodename_zh = "间隔"
- areaObj := new(bo.ScdAreaMgr)
- areaInfo, _ := areaObj.One(c.GetString("node_id"))
- if areaInfo != nil {
- nodename_zh = nodename_zh + "(" + areaInfo.(bo.T_substation_area).Name + ")"
- }
- break
- default:
- nodename_zh = nodename
- break
- }
- expCaption = fmt.Sprintf("%s-%s-%s校验结果", stationinfo.AreaName, scdname, nodename_zh)
- } else {
- expCaption = fmt.Sprintf("%s-%s全部校验结果", stationinfo.AreaName, scdname)
- }
- }
- }
- break
- default:
- datalist = nil
- err = errors.New("未定义的导出数据类型:" + code)
- break
- }
- if err != nil {
- c.Data["json"] = c.ResultError(err.Error())
- c.ServeJSON()
- return
- }
- curPath, _ := os.Getwd() //当前绝对路径
- excel.InitExcel("exp_data_"+time.Now().Format("20060102150405"), curPath+string(os.PathSeparator)+"static"+string(os.PathSeparator)+"download")
- filename, errf := excel.ExportExcel(expCaption, expcols, expcolnames, datalist, true)
- if errf != nil {
- c.Data["json"] = c.ResultError(errf.Error())
- } else {
- c.Data["json"] = c.ResultOK("static/download/"+filename, 0)
- }
- c.ServeJSON()
- }
- //公用数据导入方法
- // @Summary 将Excel数据导入到指定模块
- // @Description 将Excel数据导入到指定模块
- // @Tags api
- // @Accept x-www-form-urlencoded
- // @Produce json
- // @Param code query string true "业务数据类别,由系统定义。当前支持:ied_func_fcda"
- // @Param file query file true "文件流参数名"
- // @Param ...paras query string false "根据业务查询需求,提供相应的参数"
- // @Success 200 {object} ApiOK|ApiError 服务访问成功
- // @Failure 401 status 认证未通过,一般是未指定token或token已失效
- // @Failure 500 status 服务器|后台发生错误
- // @router impData [post]
- func (c *ExcelController) UploadExcelFile() {
- code := c.GetString("code", "") //业务数据类别,由系统定义
- if code == "" {
- c.Data["json"] = c.ResultError("导入的业务数据类别不能为空")
- c.ServeJSON()
- return
- }
- _, h, _ := c.GetFile("file")
- ext := path.Ext(h.Filename)
- if strings.Index(".csv,.xlsx", ext) == -1 {
- c.Data["json"] = c.WarpError("不支持的文件格式")
- c.ServeJSON()
- return
- }
- param := tools.ParseFormParam(c.Ctx.Request.Form)
- tmmpDir := os.TempDir() + string(os.PathSeparator) + h.Filename
- c.SaveToFile("file", tmmpDir)
- if ext == ".csv" {
- opt := map[string]string{"delimiter": c.GetString("delimiter", "\"")}
- opt["separator"] = c.GetString("separator", ",")
- csvData, err0 := excel.ImpCsv(tmmpDir, opt)
- os.Remove(tmmpDir)
- if err0 != nil {
- c.Data["json"] = c.WarpError(err0.Error())
- c.ServeJSON()
- return
- }
- param["datalist"] = csvData
- } else {
- dataList, err0 := excel.ImpExcel(tmmpDir)
- os.Remove(tmmpDir)
- if err0 != nil {
- c.Data["json"] = c.WarpError(err0.Error())
- c.ServeJSON()
- return
- }
- param["datalist"] = dataList
- }
- if len(param["datalist"].([]map[int]string)) == 0 {
- c.Data["json"] = c.WarpError("文件中没有可导入的数据,请检查后重试")
- c.ServeJSON()
- return
- }
- var err error
- var data interface{}
- //param为excel解析结果
- //以下为你的逻辑处理
- //....
- //siteDataObj := new(bo.SiteData)
- //data, err := siteDataObj.ExpData(GetCurrentUser(c.Ctx), param)
- switch code {
- case "ied_func_fcda":
- dataOptSrv := new(bo.SysCheckModelIedFuncMgr)
- dataOptSrv.SetUserInfo(c.GetCurrentUserInfo())
- _, err = dataOptSrv.Imp(param)
- break
- /*
- case "optimize_deletion_fillrule":
- dataOptSrv := new(service.DataoptimizeService)
- dataOptSrv.UserInfo = c.GetCurrentUserInfo_rt()
- err = dataOptSrv.ImpDeletionExcel(param)
- break
- */
- default:
- err = errors.New("未定义的导入业务类型code")
- break
- }
- if err != nil {
- logger.Logger.Info(fmt.Sprintf("导入源数据:%+v", param))
- c.Data["json"] = c.WarpError(err.Error())
- } else {
- c.Data["json"] = c.WarpOK(data)
- }
- c.ServeJSON()
- }
|