|
@@ -6,10 +6,14 @@ import (
|
|
|
"eta/eta_mobile/models"
|
|
|
"eta/eta_mobile/models/data_manage"
|
|
|
"eta/eta_mobile/models/system"
|
|
|
+ "eta/eta_mobile/services"
|
|
|
"eta/eta_mobile/services/data"
|
|
|
"eta/eta_mobile/utils"
|
|
|
"fmt"
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
+ "os"
|
|
|
+ "os/exec"
|
|
|
+ "sort"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
@@ -1505,3 +1509,279 @@ func (this *ChartInfoController) BatchChartInfoRefresh() {
|
|
|
br.Success = true
|
|
|
br.Msg = "刷新成功"
|
|
|
}
|
|
|
+
|
|
|
+// @Title 保存图表接口
|
|
|
+// @Description 保存图表接口
|
|
|
+// @Param request body data_manage.SaveChartInfoReq true "type json string"
|
|
|
+// @Success Ret=200 返回图表id
|
|
|
+// @router /chart_info/save [post]
|
|
|
+func (this *ChartInfoController) ChartInfoSave() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var req data_manage.SaveChartInfoReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.ChartInfoId > 0 && len(req.ChartEdbInfoList) <= 0 {
|
|
|
+ br.Msg = "参数错误!"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ chartItem, err := data_manage.GetChartInfoById(req.ChartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ br.Msg = "图表已被删除,请刷新页面!"
|
|
|
+ br.ErrMsg = "图表已被删除,请刷新页面,ChartInfoId:" + strconv.Itoa(req.ChartInfoId)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Msg = "获取图表信息失败!"
|
|
|
+ br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //图表操作权限
|
|
|
+ //ok := data.CheckOpChartPermission(sysUser, chartItem.SysUserId)
|
|
|
+ //if !ok {
|
|
|
+ // br.Msg = "没有该图表的操作权限"
|
|
|
+ // br.ErrMsg = "没有该图表的操作权限"
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+
|
|
|
+ if chartItem.ChartType == 2 && len(req.ChartEdbInfoList) > 1 {
|
|
|
+ br.Msg = "您选择的图表样式为季节性图表,只支持单指标画图!"
|
|
|
+ br.ErrMsg = "您选择的图表样式为季节性图表,只支持单指标画图,Data:" + string(this.Ctx.Input.RequestBody)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.Calendar == "" {
|
|
|
+ req.Calendar = "公历"
|
|
|
+ }
|
|
|
+
|
|
|
+ var edbInfoIdArr []int
|
|
|
+ edbList := make([]*data_manage.EdbInfo, 0)
|
|
|
+
|
|
|
+ for _, v := range req.ChartEdbInfoList {
|
|
|
+ edbInfo, err := data_manage.GetEdbInfoById(v.EdbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ br.Msg = "图表不存在!"
|
|
|
+ br.ErrMsg = "图表不存在,ChartInfoId:" + strconv.Itoa(v.EdbInfoId)
|
|
|
+ return
|
|
|
+ } else {
|
|
|
+ br.Msg = "获取图表信息失败!"
|
|
|
+ br.ErrMsg = "获取图表的指标信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if edbInfo == nil {
|
|
|
+ br.Msg = "指标不存在!"
|
|
|
+ br.ErrMsg = "指标不存在,ChartInfoId:" + strconv.Itoa(v.EdbInfoId)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
|
|
|
+ edbInfo.EdbNameSource = edbInfo.EdbName
|
|
|
+ edbList = append(edbList, edbInfo)
|
|
|
+ }
|
|
|
+ sort.Ints(edbInfoIdArr)
|
|
|
+ var edbInfoIdArrStr []string
|
|
|
+ for _, v := range edbInfoIdArr {
|
|
|
+ edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
|
|
|
+ }
|
|
|
+ edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
|
|
|
+ err = data_manage.ModifyChartInfoAndMapping(edbInfoIdStr, &req, chartItem.ChartType)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存失败"
|
|
|
+ br.ErrMsg = "保存失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ key := utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode
|
|
|
+ if utils.Re == nil && utils.Rc != nil {
|
|
|
+ utils.Rc.Delete(key)
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改es数据
|
|
|
+ go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
|
|
|
+ //修改my eta es数据
|
|
|
+ go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
|
|
|
+
|
|
|
+ //新增操作日志
|
|
|
+ {
|
|
|
+ chartLog := new(data_manage.ChartInfoLog)
|
|
|
+ chartLog.ChartName = chartItem.ChartName
|
|
|
+ chartLog.ChartInfoId = req.ChartInfoId
|
|
|
+ chartLog.ChartClassifyId = chartItem.ChartClassifyId
|
|
|
+ chartLog.SysUserId = sysUser.AdminId
|
|
|
+ chartLog.SysUserRealName = sysUser.RealName
|
|
|
+ chartLog.UniqueCode = chartItem.UniqueCode
|
|
|
+ chartLog.CreateTime = time.Now()
|
|
|
+ chartLog.Content = string(this.Ctx.Input.RequestBody)
|
|
|
+ chartLog.Status = "修改配置项"
|
|
|
+ chartLog.Method = this.Ctx.Input.URI()
|
|
|
+ go data_manage.AddChartInfoLog(chartLog)
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "保存成功"
|
|
|
+ br.IsAddLog = true
|
|
|
+}
|
|
|
+
|
|
|
+// @Param Img query string true "图片"
|
|
|
+// @Success 200 {object} models.ResourceResp
|
|
|
+// @router /chart_info/base64Upload [post]
|
|
|
+func (this *ChartInfoController) ChartInfoBase64Upload() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ imgData := this.GetString("Img")
|
|
|
+ if imgData == "" {
|
|
|
+ br.Msg = "图片参数错误"
|
|
|
+ br.ErrMsg = "图片参数错误,Img Is Empty"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(models.ResourceResp)
|
|
|
+
|
|
|
+ uploadDir := "static/images/"
|
|
|
+ if !utils.FileIsExist(uploadDir) {
|
|
|
+ err := os.MkdirAll(uploadDir, 777)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "图表保存失败"
|
|
|
+ br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var saveToOssPath string
|
|
|
+ randStr := utils.GetRandStringNoSpecialChar(28)
|
|
|
+ var fileName, outFileName string
|
|
|
+ fileName = randStr + ".txt"
|
|
|
+ fileName = uploadDir + fileName
|
|
|
+ err := utils.SaveToFile(imgData, fileName)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "图片保存失败"
|
|
|
+ br.ErrMsg = "图片保存失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ outFileName = randStr + ".png"
|
|
|
+
|
|
|
+ doneChannel := make(chan bool, 1)
|
|
|
+ errorChannel := make(chan error, 1)
|
|
|
+
|
|
|
+ cmd := exec.Command("highcharts-export-server", "--infile", fileName, "--constr", "Chart", "--scale", "2", "--workers", "10", "--workLimit", "3", "--outfile", outFileName)
|
|
|
+
|
|
|
+ go func() {
|
|
|
+ output, err := cmd.CombinedOutput()
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Info("execute command failed, output: , error: \n" + string(output) + err.Error())
|
|
|
+ errorChannel <- err
|
|
|
+ return
|
|
|
+ }
|
|
|
+ doneChannel <- true
|
|
|
+ }()
|
|
|
+
|
|
|
+ select {
|
|
|
+ case <-time.After(30 * time.Second):
|
|
|
+ utils.FileLog.Info("执行超过30秒 杀死超时进程")
|
|
|
+ cmd.Process.Kill()
|
|
|
+ fmt.Println("timeout kill process")
|
|
|
+ case <-doneChannel:
|
|
|
+ fmt.Println("done")
|
|
|
+ case err := <-errorChannel:
|
|
|
+ br.Msg = "文件上传失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("execute command failure err: %s", err.Error())
|
|
|
+ fmt.Println("execute command failure err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ defer func() {
|
|
|
+ os.Remove(fileName)
|
|
|
+ }()
|
|
|
+
|
|
|
+ saveToOssPath = uploadDir + time.Now().Format("200601/20060102/")
|
|
|
+ saveToOssPath += outFileName
|
|
|
+
|
|
|
+ //上传到阿里云 和 minio
|
|
|
+ resourceUrl := ``
|
|
|
+ err = services.UploadFileToAliyun("", outFileName, saveToOssPath)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "文件上传失败"
|
|
|
+ br.ErrMsg = "文件上传失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resourceUrl = utils.Imghost + saveToOssPath
|
|
|
+
|
|
|
+ resp.ResourceUrl = resourceUrl
|
|
|
+ resp.Source = "convert"
|
|
|
+ //resp.CacheKey = imgDataKey
|
|
|
+ br.Msg = "上传成功"
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Data = resp
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// @Title 设置图表图片
|
|
|
+// @Description 设置图表图片接口
|
|
|
+// @Param request body data_manage.SetChartInfoImageReq true "type json string"
|
|
|
+// @Success Ret=200 保存成功
|
|
|
+// @router /chart_info/image/set [post]
|
|
|
+func (this *ChartInfoController) ChartInfoImageSet() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var req data_manage.SetChartInfoImageReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.ChartInfoId > 0 && req.ImageUrl != "" {
|
|
|
+ err = data_manage.EditChartInfoImage(&req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "保存失败"
|
|
|
+ br.ErrMsg = "保存失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改es数据
|
|
|
+ go data.EsAddOrEditChartInfo(req.ChartInfoId)
|
|
|
+ //修改my eta es数据
|
|
|
+ go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "保存成功"
|
|
|
+}
|