瀏覽代碼

Merge branch 'pool410_shenwan_pic' of eta_server/eta_api into master

chenhan 4 天之前
父節點
當前提交
afc41354ec

+ 3 - 2
.gitignore

@@ -3,7 +3,6 @@
 /.idea
 /routers/.DS_Store
 /rdlucklog
-/etalogs
 /conf/*.conf
 /binlog/*
 /*.pdf
@@ -18,6 +17,8 @@
 eta_api.exe
 eta_api.exe~
 /static/tmpFile/*
+/static/imgs/*
+/static/ai/*
 etalogs/
 /.vscode
-/fix
+/fix

+ 75 - 41
controllers/data_manage/chart_info.go

@@ -20,6 +20,7 @@ import (
 	"fmt"
 	"os"
 	"os/exec"
+	"regexp"
 	"sort"
 	"strconv"
 	"strings"
@@ -2960,58 +2961,78 @@ func (this *ChartInfoController) ChartInfoBase64Upload() {
 			return
 		}
 	}
-
+	NotBackendGenerate, _ := this.GetBool("NotBackendGenerate", false)
+	if NotBackendGenerate {
+		b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, imgData)
+		if !b {
+			br.Msg = "图片格式不正确"
+			br.ErrMsg = "图片格式不正确"
+			return
+		}
+		re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
+		base64Str := re.ReplaceAllString(imgData, "")
+		base64Str = strings.Replace(base64Str, " ", "", -1)
+		imgData = base64Str
+	}
 	//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()
+	fileName = uploadDir + fileName
+	if NotBackendGenerate {
+		err := utils.SaveBase64ToFile(imgData, outFileName)
 		if err != nil {
-			utils.FileLog.Info("execute command failed, output: , error: \n" + string(output) + err.Error())
-			errorChannel <- err
+			br.Msg = "图片保存失败"
+			br.ErrMsg = "图片保存失败,Err:" + err.Error()
 			return
 		}
-		doneChannel <- true
-	}()
+	} else {
+		err := utils.SaveToFile(imgData, fileName)
+		if err != nil {
+			br.Msg = "图片保存失败"
+			br.ErrMsg = "图片保存失败,Err:" + err.Error()
+			return
+		}
+		doneChannel := make(chan bool, 1)
+		errorChannel := make(chan error, 1)
 
-	select {
-	case <-time.After(30 * time.Second):
-		utils.FileLog.Info("执行超过30秒 杀死超时进程")
-		e := cmd.Process.Kill()
-		if e != nil {
-			fmt.Println("cmd kill err: ", e.Error())
-			utils.FileLog.Info(fmt.Sprintf("cmd kill err: %s", e.Error()))
-			br.Msg = "图片生成失败"
-			br.ErrMsg = "图片生成失败, 执行超时" + e.Error()
+		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秒 杀死超时进程")
+			e := cmd.Process.Kill()
+			if e != nil {
+				fmt.Println("cmd kill err: ", e.Error())
+				utils.FileLog.Info(fmt.Sprintf("cmd kill err: %s", e.Error()))
+				br.Msg = "图片生成失败"
+				br.ErrMsg = "图片生成失败, 执行超时" + e.Error()
+				return
+			}
+			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
 		}
-		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)
+		}()
 	}
-
 	defer func() {
-		os.Remove(fileName)
 		os.Remove(outFileName)
 	}()
 
@@ -3043,7 +3064,7 @@ func (this *ChartInfoController) ChartInfoBase64Upload() {
 		br.ErrMsg = "初始化OSS服务失败"
 		return
 	}
-	resourceUrl, err = ossClient.UploadFile(outFileName, outFileName, "")
+	resourceUrl, err := ossClient.UploadFile(outFileName, outFileName, "")
 	if err != nil {
 		br.Msg = "文件上传失败"
 		br.ErrMsg = "文件上传失败,Err:" + err.Error()
@@ -4622,6 +4643,19 @@ func (this *ChartInfoController) ChartInfoImgSetBySvg() {
 		br.ErrMsg = "图片参数错误,Img Is Empty"
 		return
 	}
+	NotBackendGenerate, _ := this.GetBool("NotBackendGenerate", false)
+	if NotBackendGenerate {
+		b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, imgData)
+		if !b {
+			br.Msg = "图片格式不正确"
+			br.ErrMsg = "图片格式不正确"
+			return
+		}
+		re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
+		base64Str := re.ReplaceAllString(imgData, "")
+		base64Str = strings.Replace(base64Str, " ", "", -1)
+		imgData = base64Str
+	}
 	chartInfoId, _ := this.GetInt("ChartInfoId", 0)
 	if chartInfoId <= 0 {
 		br.Msg = "图片参数错误"
@@ -4631,7 +4665,7 @@ func (this *ChartInfoController) ChartInfoImgSetBySvg() {
 	resp := new(models.ResourceResp)
 
 	// 通过svg图片生成图片资源地址
-	resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData)
+	resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData, NotBackendGenerate)
 	if err != nil {
 		br.Msg = errMsg
 		br.ErrMsg = err.Error()

+ 15 - 2
controllers/data_manage/edb_info.go

@@ -21,6 +21,7 @@ import (
 	etaTrialService "eta/eta_api/services/eta_trial"
 	"eta/eta_api/utils"
 	"fmt"
+	"regexp"
 	"sort"
 	"strconv"
 	"strings"
@@ -6784,13 +6785,25 @@ func (this *EdbInfoController) ChartImageSetBySvg() {
 		br.Ret = 408
 		return
 	}
-
+	NotBackendGenerate,_ := this.GetBool("NotBackendGenerate",false)
 	imgData := this.GetString("Img")
 	if imgData == "" {
 		br.Msg = "图片参数错误"
 		br.ErrMsg = "图片参数错误,Img Is Empty"
 		return
 	}
+	if NotBackendGenerate {
+		b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, imgData)
+		if !b {
+			br.Msg = "图片格式不正确"
+			br.ErrMsg = "图片格式不正确"
+			return
+		}
+		re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
+		base64Str := re.ReplaceAllString(imgData, "")
+		base64Str = strings.Replace(base64Str, " ", "", -1)
+		imgData = base64Str
+	}
 	edbInfoId, _ := this.GetInt("EdbInfoId", 0)
 	if edbInfoId <= 0 {
 		br.Msg = "指标参数错误"
@@ -6799,7 +6812,7 @@ func (this *EdbInfoController) ChartImageSetBySvg() {
 	}
 
 	// 通过svg图片生成图片资源地址
-	resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData)
+	resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData,NotBackendGenerate)
 	if err != nil {
 		br.Msg = errMsg
 		br.ErrMsg = err.Error()

+ 75 - 41
controllers/data_manage/future_good/future_good_chart_info.go

@@ -18,6 +18,7 @@ import (
 	"fmt"
 	"os"
 	"os/exec"
+	"regexp"
 	"sort"
 	"strconv"
 	"strings"
@@ -2614,57 +2615,77 @@ func (this *FutureGoodChartInfoController) ChartInfoBase64Upload() {
 		}
 	}
 
+	NotBackendGenerate, _ := this.GetBool("NotBackendGenerate", false)
+	if NotBackendGenerate {
+		b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, imgData)
+		if !b {
+			br.Msg = "图片格式不正确"
+			br.ErrMsg = "图片格式不正确"
+			return
+		}
+		re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
+		base64Str := re.ReplaceAllString(imgData, "")
+		base64Str = strings.Replace(base64Str, " ", "", -1)
+		imgData = base64Str
+	}
 	//var saveToOssPath string
 	randStr := utils.GetRandStringNoSpecialChar(28)
 	var fileName, outFileName string
-	fileName = randStr + ".txt"
-	//saveSvgPath = 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 NotBackendGenerate {
+		err := utils.SaveBase64ToFile(imgData, outFileName)
 		if err != nil {
-			utils.FileLog.Info("execute command failed, output: , error: \n" + string(output) + err.Error())
-			errorChannel <- err
+			br.Msg = "图片保存失败"
+			br.ErrMsg = "图片保存失败,Err:" + err.Error()
 			return
 		}
-		doneChannel <- true
-	}()
+	} else {
+		fileName = randStr + ".txt"
+		//saveSvgPath = uploadDir + fileName
+		err := utils.SaveToFile(imgData, fileName)
+		if err != nil {
+			br.Msg = "图片保存失败"
+			br.ErrMsg = "图片保存失败,Err:" + err.Error()
+			return
+		}
+		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秒 杀死超时进程")
-		e := cmd.Process.Kill()
-		if e != nil {
-			fmt.Println("cmd kill err: ", e.Error())
-			utils.FileLog.Info(fmt.Sprintf("cmd kill err: %s", e.Error()))
-			br.Msg = "图片生成失败"
-			br.ErrMsg = "图片生成失败, 执行超时" + e.Error()
+		select {
+		case <-time.After(30 * time.Second):
+			utils.FileLog.Info("执行超过30秒 杀死超时进程")
+			e := cmd.Process.Kill()
+			if e != nil {
+				fmt.Println("cmd kill err: ", e.Error())
+				utils.FileLog.Info(fmt.Sprintf("cmd kill err: %s", e.Error()))
+				br.Msg = "图片生成失败"
+				br.ErrMsg = "图片生成失败, 执行超时" + e.Error()
+				return
+			}
+			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
 		}
-		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)
+		}()
 	}
-
 	defer func() {
-		os.Remove(fileName)
 		os.Remove(outFileName)
 	}()
 
@@ -2695,7 +2716,7 @@ func (this *FutureGoodChartInfoController) ChartInfoBase64Upload() {
 		br.ErrMsg = "初始化OSS服务失败"
 		return
 	}
-	resourceUrl, err = ossClient.UploadFile(outFileName, outFileName, "")
+	resourceUrl, err := ossClient.UploadFile(outFileName, outFileName, "")
 	if err != nil {
 		br.Msg = "文件上传失败"
 		br.ErrMsg = "文件上传失败,Err:" + err.Error()
@@ -3570,6 +3591,19 @@ func (this *FutureGoodChartInfoController) ChartInfoImgSetBySvg() {
 		br.ErrMsg = "图片参数错误,Img Is Empty"
 		return
 	}
+	NotBackendGenerate, _ := this.GetBool("NotBackendGenerate", false)
+	if NotBackendGenerate {
+		b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, imgData)
+		if !b {
+			br.Msg = "图片格式不正确"
+			br.ErrMsg = "图片格式不正确"
+			return
+		}
+		re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
+		base64Str := re.ReplaceAllString(imgData, "")
+		base64Str = strings.Replace(base64Str, " ", "", -1)
+		imgData = base64Str
+	}
 	chartInfoId, _ := this.GetInt("ChartInfoId", 0)
 	if chartInfoId <= 0 {
 		br.Msg = "图片参数错误"
@@ -3579,7 +3613,7 @@ func (this *FutureGoodChartInfoController) ChartInfoImgSetBySvg() {
 	resp := new(models.ResourceResp)
 
 	// 通过svg图片生成图片资源地址
-	resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData)
+	resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData, NotBackendGenerate)
 	if err != nil {
 		br.Msg = errMsg
 		br.ErrMsg = err.Error()

+ 16 - 1
controllers/data_manage/predict_edb_info.go

@@ -13,6 +13,7 @@ import (
 	"eta/eta_api/services/elastic"
 	"eta/eta_api/utils"
 	"fmt"
+	"regexp"
 	"sort"
 	"strconv"
 	"strings"
@@ -2183,6 +2184,20 @@ func (this *PredictEdbInfoController) ChartImageSetBySvg() {
 		br.ErrMsg = "图片参数错误,Img Is Empty"
 		return
 	}
+	NotBackendGenerate, _ := this.GetBool("NotBackendGenerate", false)
+	if NotBackendGenerate {
+		b, _ := regexp.MatchString(`^data:\s*image\/(\w+);base64,`, imgData)
+		if !b {
+			br.Msg = "图片格式不正确"
+			br.ErrMsg = "图片格式不正确"
+			return
+		}
+		re, _ := regexp.Compile(`^data:\s*image\/(\w+);base64,`)
+		base64Str := re.ReplaceAllString(imgData, "")
+		base64Str = strings.Replace(base64Str, " ", "", -1)
+		imgData = base64Str
+	}
+
 	edbInfoId, _ := this.GetInt("EdbInfoId", 0)
 	if edbInfoId <= 0 {
 		br.Msg = "指标参数错误"
@@ -2191,7 +2206,7 @@ func (this *PredictEdbInfoController) ChartImageSetBySvg() {
 	}
 
 	// 通过svg图片生成图片资源地址
-	resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData)
+	resourceUrl, err, errMsg := services.GetResourceUrlBySvgImg(imgData,NotBackendGenerate)
 	if err != nil {
 		br.Msg = errMsg
 		br.ErrMsg = err.Error()

+ 8 - 0
controllers/sys_role.go

@@ -724,6 +724,14 @@ func (this *SysRoleController) SystemConfig() {
 	}, system.BusinessConf{
 		ConfKey: "LoginUrl",
 		ConfVal: conf["LoginUrl"],
+	},
+        system.BusinessConf{
+        ConfKey: "KnowledgeBaseName",
+    	ConfVal: conf["KnowledgeBaseName"],
+    },  system.BusinessConf{
+			ConfKey: "NotBackendGenerate",
+			ConfVal: conf["NotBackendGenerate"],
+
 	}, system.BusinessConf{
 		ConfKey: models.KnowledgeBaseName,
 		ConfVal: conf[models.KnowledgeBaseName],

+ 2 - 2
models/system/sys_role.go

@@ -286,10 +286,10 @@ func GetSysRoleByIdList(id []int) (items []*SysRole, err error) {
 	return
 }
 
-
 // 更新所有管理员的角色信息
 func UpdateAdminRoleInfoByRoleId(roleId int, roleName, roleTypeCode string) (err error) {
 	sql := `UPDATE admin SET role_name=?, role_type_code=? WHERE role_id=?`
+	sql=utils.ReplaceDriverKeywords("", sql)
 	err = global.DbMap[utils.DbNameMaster].Exec(sql, roleName, roleTypeCode, roleId).Error
 	return
-}
+}

+ 59 - 51
services/file.go

@@ -108,7 +108,7 @@ func saveToFileByHeader(fileHeader *multipart.FileHeader, tofile string) error {
 // @return resourceUrl string
 // @return err error
 // @return errMsg string
-func GetResourceUrlBySvgImg(imgData string) (resourceUrl string, err error, errMsg string) {
+func GetResourceUrlBySvgImg(imgData string, notBackendGenerate bool) (resourceUrl string, err error, errMsg string) {
 	errMsg = "图表保存失败"
 	uploadDir := "static/images/"
 	if !utils.FileIsExist(uploadDir) {
@@ -118,69 +118,77 @@ func GetResourceUrlBySvgImg(imgData string) (resourceUrl string, err error, errM
 			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 {
-		err = errors.New("图片保存失败,Err:" + err.Error())
-		return
-	}
+	uploadDir = "static/images/"
+	randStr := utils.GetRandStringNoSpecialChar(28)
+	outFileName = randStr + ".png"
 
-	// 删除临时存储的svg文件
-	defer func() {
-		err = os.Remove(fileName)
+	if notBackendGenerate {
+		err = utils.SaveBase64ToFile(imgData, outFileName)
 		if err != nil {
-			utils.FileLog.Info("删除临时存储的svg文件失败, err: " + err.Error())
+			err = errors.New("图片保存失败,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()
+	} else {
+		//var saveToOssPath string
+		fileName = randStr + ".txt"
+		fileName = uploadDir + fileName
+		err = utils.SaveToFile(imgData, fileName)
 		if err != nil {
-			utils.FileLog.Info("execute command failed, output: , error: \n" + string(output) + err.Error())
-			errorChannel <- err
+			err = errors.New("图片保存失败,Err:" + err.Error())
 			return
 		}
-		doneChannel <- true
-	}()
+
+		// 删除临时存储的svg文件
+		defer func() {
+			err = os.Remove(fileName)
+			if err != nil {
+				utils.FileLog.Info("删除临时存储的svg文件失败, err: " + err.Error())
+			}
+		}()
+
+		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秒 杀死超时进程")
+			e := cmd.Process.Kill()
+			if e != nil {
+				fmt.Println("cmd kill err: ", e.Error())
+				utils.FileLog.Info(fmt.Sprintf("cmd kill err: %s", e.Error()))
+				errMsg = "图片生成失败"
+				err = errors.New("图片生成失败, 执行超时" + e.Error())
+				return
+			}
+			fmt.Println("timeout kill process")
+		case <-doneChannel:
+			fmt.Println("done")
+		case e := <-errorChannel:
+			errMsg = "文件上传失败"
+			err = errors.New(fmt.Sprintf("execute command failure err: %s", e.Error()))
+			fmt.Println("execute command failure err:" + e.Error())
+			return
+		}
+	}
 	defer func() {
 		_ = os.Remove(outFileName)
 		if err != nil {
 			utils.FileLog.Info("删除生产的图片文件失败, err: " + err.Error())
 		}
 	}()
-
-	select {
-	case <-time.After(30 * time.Second):
-		utils.FileLog.Info("执行超过30秒 杀死超时进程")
-		e := cmd.Process.Kill()
-		if e != nil {
-			fmt.Println("cmd kill err: ", e.Error())
-			utils.FileLog.Info(fmt.Sprintf("cmd kill err: %s", e.Error()))
-			errMsg = "图片生成失败"
-			err = errors.New("图片生成失败, 执行超时" + e.Error())
-			return
-		}
-		fmt.Println("timeout kill process")
-	case <-doneChannel:
-		fmt.Println("done")
-	case e := <-errorChannel:
-		errMsg = "文件上传失败"
-		err = errors.New(fmt.Sprintf("execute command failure err: %s", e.Error()))
-		fmt.Println("execute command failure err:" + e.Error())
-		return
-	}
-
 	//上传到阿里云 和 minio
 	ossClient := NewOssClient()
 	if ossClient == nil {

文件差異過大導致無法顯示
+ 0 - 7
static/images/UXjAv5IXV9fSqDBqhGS3DPYcj9wb.txt


文件差異過大導致無法顯示
+ 0 - 7
static/images/fdUC0cafpf0LXCjpwluC0r6IzA4Z.txt


部分文件因文件數量過多而無法顯示