Roc 1 year ago
parent
commit
e56182e105

+ 3 - 3
controllers/data_manage/excel/custom_analysis.go

@@ -6,8 +6,8 @@ import (
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_manage"
 	excelModel "eta/eta_api/models/data_manage/excel"
+	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/data_manage/excel/response"
-	"eta/eta_api/models/data_manage/request"
 	"eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
 	"strconv"
@@ -221,7 +221,7 @@ func (c *CustomAnalysisController) Save() {
 		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
-	var req request.AddExcelInfoReq
+	var req request.SaveExcelInfoReq
 	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
@@ -260,7 +260,7 @@ func (c *CustomAnalysisController) Save() {
 		return
 	}
 
-	err, errMsg, isSendEmail := excel.SaveCustomAnalysisTable(excelInfo, utils.TrimLRStr(req.ExcelName), req.Content, req.ExcelImage, req.ExcelClassifyId, sysUser)
+	err, errMsg, isSendEmail := excel.SaveCustomAnalysisTable(excelInfo, utils.TrimLRStr(req.ExcelName), req.Content, req.ExcelImage, req.ExcelClassifyId, req.OpSheetList)
 	if err != nil {
 		br.Msg = "保存失败"
 		if errMsg != `` {

+ 30 - 0
models/data_manage/excel/request/excel.go

@@ -1 +1,31 @@
 package request
+
+// AddExcelInfoReq 新增表格请求
+type AddExcelInfoReq struct {
+	ExcelInfoId     int         `description:"表格ID"`
+	ExcelName       string      `description:"表格名称"`
+	Source          int         `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
+	ExcelType       int         `description:"表格类型,1:指标列,2:日期列,默认:1"`
+	ExcelImage      string      `description:"表格截图"`
+	ExcelClassifyId int         `description:"分类id"`
+	Content         string      `description:"Excel表格内容"`
+	TableData       interface{} `description:"自定义表格的数据内容"`
+}
+
+// SaveExcelInfoReq 编辑表格请求
+type SaveExcelInfoReq struct {
+	ExcelInfoId     int         `description:"表格ID"`
+	ExcelName       string      `description:"表格名称"`
+	Source          int         `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
+	ExcelType       int         `description:"表格类型,1:指标列,2:日期列,默认:1"`
+	ExcelImage      string      `description:"表格截图"`
+	ExcelClassifyId int         `description:"分类id"`
+	Content         string      `description:"Excel表格内容"`
+	TableData       interface{} `description:"自定义表格的数据内容"`
+	OpSheetList     []SheetOp   `description:"sheet操作"`
+}
+type SheetOp struct {
+	SheetIndex int    `description:"对应的sheet下标"`
+	SheetName  string `description:"对应的sheet名称"`
+	OpType     string `description:"操作类型,新增:add;替换:replace,追加:append"`
+}

+ 75 - 3
services/data/excel/custom_analysis.go

@@ -5,8 +5,10 @@ import (
 	"errors"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/excel"
+	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/system"
 	"eta/eta_api/utils"
+	"fmt"
 	"strconv"
 	"time"
 )
@@ -24,6 +26,14 @@ func AddCustomAnalysisTable(excelName, content, excelImage string, excelClassify
 		return
 	}
 
+	// sheet内容为空
+	if len(luckySheet.Sheets) <= 0 {
+		errMsg = "sheet内容为空"
+		err = errors.New(errMsg)
+		isSendEmail = false
+		return
+	}
+
 	excelClassify, err := data_manage.GetExcelClassifyById(excelClassifyId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
@@ -98,11 +108,20 @@ func AddCustomAnalysisTable(excelName, content, excelImage string, excelClassify
 	splitNum := 2000 // 基础分割单元格数
 
 	// sheet处理
+	sheetNameMap := make(map[string]string)
 	for k, sheetInfo := range luckySheet.Sheets {
+		sheetName := utils.TrimLRStr(sheetInfo.Name)
+		_, ok := sheetNameMap[sheetName]
+		if ok {
+			errMsg = "excel表中存在同名sheet"
+			err = errors.New(errMsg)
+			isSendEmail = false
+			return
+		}
 		addSheetItem := excel.AddExcelSheetParams{
 			ExcelSheetId: 0,
 			ExcelInfoId:  0,
-			SheetName:    sheetInfo.Name,
+			SheetName:    sheetName,
 			Sort:         k,
 		}
 
@@ -150,7 +169,7 @@ func AddCustomAnalysisTable(excelName, content, excelImage string, excelClassify
 	return
 }
 
-func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, content, excelImage string, excelClassifyId int, sysUser *system.Admin) (err error, errMsg string, isSendEmail bool) {
+func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, content, excelImage string, excelClassifyId int, sheetOpList []request.SheetOp) (err error, errMsg string, isSendEmail bool) {
 	isSendEmail = true
 
 	contentByte := []byte(content)
@@ -162,6 +181,22 @@ func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, conten
 		return
 	}
 
+	// sheet内容为空
+	if len(luckySheet.Sheets) <= 0 {
+		errMsg = "sheet内容为空"
+		err = errors.New(errMsg)
+		isSendEmail = false
+		return
+	}
+
+	// sheet内容为空
+	if len(sheetOpList) <= 0 {
+		errMsg = "sheet操作为空"
+		err = errors.New(errMsg)
+		isSendEmail = false
+		return
+	}
+
 	excelClassify, err := data_manage.GetExcelClassifyById(excelClassifyId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
@@ -213,6 +248,34 @@ func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, conten
 		}
 	}
 
+	// 查找当前excel的sheet列表
+	currSheetList, err := excel.GetAllSheetList(excelInfo.ExcelInfoId)
+	if err != nil {
+		errMsg = "保存失败"
+		err = errors.New("查找当前excel的sheet列表失败,Err:" + err.Error())
+		return
+	}
+	currSheetMap := make(map[string]string)
+	for _, currSheet := range currSheetList {
+		currSheetMap[currSheet.SheetName] = currSheet.SheetName
+	}
+
+	for k, sheetOp := range sheetOpList {
+		switch sheetOp.OpType {
+		case "add":
+			// 新增
+		case "replace":
+			// 替换
+		case "append":
+			// 追加
+		default:
+			errMsg = fmt.Sprint("第", k+1, "个sheet,错误的操作类型")
+			err = errors.New(errMsg + "op:" + sheetOp.OpType)
+			isSendEmail = false
+			return
+		}
+	}
+
 	// 表格
 	excelInfo.ExcelName = excelName
 	excelInfo.ExcelClassifyId = excelClassifyId
@@ -222,11 +285,20 @@ func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, conten
 	splitNum := 2000 // 基础分割单元格数
 
 	// sheet处理
+	sheetNameMap := make(map[string]string)
 	for k, sheetInfo := range luckySheet.Sheets {
+		sheetName := utils.TrimLRStr(sheetInfo.Name)
+		_, ok := sheetNameMap[sheetName]
+		if ok {
+			errMsg = "excel表中存在同名sheet"
+			err = errors.New(errMsg)
+			isSendEmail = false
+			return
+		}
 		addSheetItem := excel.AddExcelSheetParams{
 			ExcelSheetId: 0,
 			ExcelInfoId:  0,
-			SheetName:    sheetInfo.Name,
+			SheetName:    sheetName,
 			Sort:         k,
 		}