Browse Source

feat:新增保存接口,优化详情接口

Roc 1 year ago
parent
commit
a081ee17d3

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

@@ -466,7 +466,7 @@ func (c *CustomAnalysisController) ExcelDataList() {
 	}
 
 	if excelDetail != nil {
-		sheetList, err = excelModel.GetAllSheetItemList(excelDetail.ExcelInfoId)
+		sheetList, err = excelModel.GetAllNoConfigSheetItemList(excelDetail.ExcelInfoId)
 		if err != nil {
 			br.Msg = "获取sheet失败"
 			br.ErrMsg = "获取sheet失败,err:" + err.Error()

+ 19 - 3
models/data_manage/excel/excel_sheet.go

@@ -12,6 +12,8 @@ type ExcelSheet struct {
 	SheetName    string    `description:"sheet名称"`
 	PageNum      int       `description:"总页码数"`
 	Sort         int       `description:"排序"`
+	Config       string    `description:"配置信息"`
+	CalcChain    string    `description:"计算公式"`
 	ModifyTime   time.Time `description:"最近修改日期"`
 	CreateTime   time.Time `description:"创建日期"`
 }
@@ -49,12 +51,14 @@ FROM excel_sheet WHERE 1=1 AND excel_info_id = ? `
 
 // SheetItem excel表格详情表
 type SheetItem struct {
-	ExcelSheetId int             `orm:"column(excel_sheet_id);pk"`
-	ExcelInfoId  int             `description:"excel的id"`
+	ExcelSheetId int             `orm:"column(excel_sheet_id);pk" json:"-"`
+	ExcelInfoId  int             `description:"excel的id"  json:"-"`
 	SheetName    string          `description:"sheet名称"`
 	PageNum      int             `description:"数据总页码数"`
 	Sort         int             `description:"排序"`
-	ModifyTime   time.Time       `description:"最近修改日期"`
+	Config       string          `description:"sheet配置"`
+	CalcChain    string          `description:"计算公式"`
+	ModifyTime   time.Time       `description:"最近修改日期" json:"-"`
 	CreateTime   time.Time       `description:"创建日期"`
 	Data         *ExcelSheetData `description:"excel的数据"`
 }
@@ -69,11 +73,23 @@ FROM excel_sheet WHERE 1=1 AND excel_info_id = ? `
 	return
 }
 
+// GetAllNoConfigSheetItemList 根据excel_id获取所有的sheet详情
+func GetAllNoConfigSheetItemList(excelInfoId int) (item []*SheetItem, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT excel_sheet_id,excel_info_id,sheet_name,sort,page_num,create_time
+FROM excel_sheet WHERE 1=1 AND excel_info_id = ? `
+	sql += " ORDER BY sort asc "
+	_, err = o.Raw(sql, excelInfoId).QueryRows(&item)
+	return
+}
+
 // AddExcelSheetParams excel表格详情表
 type AddExcelSheetParams struct {
 	ExcelSheetId int               `orm:"column(excel_sheet_id);pk"`
 	ExcelInfoId  int               `description:"excel的id"`
 	SheetName    string            `description:"sheet名称"`
 	Sort         int               `description:"排序"`
+	Config       string            `description:"配置信息"`
+	CalcChain    string            `description:"计算公式"`
 	DataList     []*ExcelSheetData `description:"excel的数据"`
 }

+ 77 - 0
models/data_manage/excel_info.go

@@ -298,6 +298,7 @@ func GetNoContentExcelInfoByUniqueCode(uniqueCode string) (item *MyExcelInfoList
 	return
 }
 
+// AddExcelInfoAndSheet 新增excel
 func AddExcelInfoAndSheet(excelInfo *ExcelInfo, sheetParamsList []excel.AddExcelSheetParams) (err error) {
 	o, err := orm.NewOrmUsingDB("data").Begin()
 	if err != nil {
@@ -329,6 +330,82 @@ func AddExcelInfoAndSheet(excelInfo *ExcelInfo, sheetParamsList []excel.AddExcel
 			SheetName:    sheetInfo.SheetName,
 			PageNum:      dataNum,
 			Sort:         sheetInfo.Sort,
+			Config:       sheetInfo.Config,
+			CalcChain:    sheetInfo.CalcChain,
+			ModifyTime:   time.Now(),
+			CreateTime:   time.Now(),
+		}
+		sheetId, tmpErr := o.Insert(excelSheetInfo)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		excelSheetInfo.ExcelSheetId = int(sheetId)
+
+		// data信息入库
+		if dataNum > 0 {
+			for k, _ := range sheetInfo.DataList {
+				sheetInfo.DataList[k].ExcelSheetId = excelSheetInfo.ExcelSheetId
+				sheetInfo.DataList[k].ExcelInfoId = excelSheetInfo.ExcelInfoId
+			}
+			_, tmpErr = o.InsertMulti(dataNum, sheetInfo.DataList)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+		}
+	}
+
+	return
+}
+
+// SaveExcelInfoAndSheet 编辑保存
+func SaveExcelInfoAndSheet(excelInfo *ExcelInfo, updateExcelInfoParam []string, sheetParamsList []excel.AddExcelSheetParams) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 表格信息入库
+	_, err = o.Update(excelInfo, updateExcelInfoParam...)
+	if err != nil {
+		return
+	}
+
+	// 先删除历史的sheet信息
+	sql := `DELETE FROM excel_sheet WHERE excel_info_id = ?`
+	_, err = o.Raw(sql, excelInfo.ExcelInfoId).Exec()
+	if err != nil {
+		return
+	}
+
+	// 再删除历史sheet中的cell data信息
+	sql = `DELETE FROM excel_sheet_data WHERE excel_info_id = ?`
+	_, err = o.Raw(sql, excelInfo.ExcelInfoId).Exec()
+	if err != nil {
+		return
+	}
+
+	// sheet信息入库
+	for _, sheetInfo := range sheetParamsList {
+		dataNum := len(sheetInfo.DataList)
+
+		//sheet信息入库
+		excelSheetInfo := &excel.ExcelSheet{
+			ExcelSheetId: 0,
+			ExcelInfoId:  excelInfo.ExcelInfoId,
+			SheetName:    sheetInfo.SheetName,
+			PageNum:      dataNum,
+			Sort:         sheetInfo.Sort,
+			Config:       sheetInfo.Config,
+			CalcChain:    sheetInfo.CalcChain,
 			ModifyTime:   time.Now(),
 			CreateTime:   time.Now(),
 		}

+ 9 - 0
routers/commentsRouter.go

@@ -214,6 +214,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:CustomAnalysisController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:CustomAnalysisController"],
+        beego.ControllerComments{
+            Method: "Save",
+            Router: `/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/future_good:FutureGoodChartClassifyController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/future_good:FutureGoodChartClassifyController"],
         beego.ControllerComments{
             Method: "AddChartClassify",

+ 76 - 45
services/data/excel/custom_analysis.go

@@ -8,7 +8,6 @@ import (
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/system"
 	"eta/eta_api/utils"
-	"fmt"
 	"strconv"
 	"time"
 )
@@ -118,11 +117,25 @@ func AddCustomAnalysisTable(excelName, content, excelImage string, excelClassify
 			isSendEmail = false
 			return
 		}
+
+		sheetConf, tmpErr := json.Marshal(sheetInfo.Config)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		// 计算公式
+		sheetCalcChain, tmpErr := json.Marshal(sheetInfo.CalcChain)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
 		addSheetItem := excel.AddExcelSheetParams{
 			ExcelSheetId: 0,
 			ExcelInfoId:  0,
 			SheetName:    sheetName,
 			Sort:         k,
+			Config:       string(sheetConf),
+			CalcChain:    string(sheetCalcChain),
 		}
 
 		lenCellData := len(sheetInfo.Celldata)
@@ -169,6 +182,7 @@ func AddCustomAnalysisTable(excelName, content, excelImage string, excelClassify
 	return
 }
 
+// SaveCustomAnalysisTable 编辑自定义分析表格
 func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, content, excelImage string, excelClassifyId int, sheetOpList []request.SheetOp) (err error, errMsg string, isSendEmail bool) {
 	isSendEmail = true
 
@@ -190,12 +204,12 @@ func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, conten
 	}
 
 	// sheet内容为空
-	if len(sheetOpList) <= 0 {
-		errMsg = "sheet操作为空"
-		err = errors.New(errMsg)
-		isSendEmail = false
-		return
-	}
+	//if len(sheetOpList) <= 0 {
+	//	errMsg = "sheet操作为空"
+	//	err = errors.New(errMsg)
+	//	isSendEmail = false
+	//	return
+	//}
 
 	excelClassify, err := data_manage.GetExcelClassifyById(excelClassifyId)
 	if err != nil {
@@ -248,46 +262,48 @@ 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 {
-		sheetName := utils.TrimLRStr(sheetOp.SheetName)
-		switch sheetOp.OpType {
-		case "add":
-			// 新增
-			_, ok := currSheetMap[sheetName]
-			if ok {
-				errMsg = "存在同名sheet:" + sheetName
-				err = errors.New(errMsg)
-				isSendEmail = false
-				return
-			}
-		case "replace":
-			// 替换
-		case "append":
-			// 追加
-		default:
-			errMsg = fmt.Sprint("第", k+1, "个sheet,错误的操作类型")
-			err = errors.New(errMsg + "op:" + sheetOp.OpType)
-			isSendEmail = false
-			return
-		}
-	}
+	//// 查找当前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 {
+	//	sheetName := utils.TrimLRStr(sheetOp.SheetName)
+	//	switch sheetOp.OpType {
+	//	case "add":
+	//		// 新增
+	//		_, ok := currSheetMap[sheetName]
+	//		if ok {
+	//			errMsg = "存在同名sheet:" + sheetName
+	//			err = errors.New(errMsg)
+	//			isSendEmail = false
+	//			return
+	//		}
+	//	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
+	excelInfo.ExcelImage = excelImage
 	excelInfo.ModifyTime = time.Now()
+	updateExcelInfoParam := []string{"ExcelName", "ExcelClassifyId", "ExcelImage", "ModifyTime"}
 
 	addSheetList := make([]excel.AddExcelSheetParams, 0)
 	splitNum := 2000 // 基础分割单元格数
@@ -303,11 +319,25 @@ func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, conten
 			isSendEmail = false
 			return
 		}
+
+		sheetConf, tmpErr := json.Marshal(sheetInfo.Config)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		// 计算公式
+		sheetCalcChain, tmpErr := json.Marshal(sheetInfo.CalcChain)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
 		addSheetItem := excel.AddExcelSheetParams{
 			ExcelSheetId: 0,
-			ExcelInfoId:  0,
+			ExcelInfoId:  excelInfo.ExcelInfoId,
 			SheetName:    sheetName,
 			Sort:         k,
+			Config:       string(sheetConf),
+			CalcChain:    string(sheetCalcChain),
 		}
 
 		lenCellData := len(sheetInfo.Celldata)
@@ -336,7 +366,7 @@ func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, conten
 			}
 			sheetDataList = append(sheetDataList, &excel.ExcelSheetData{
 				ExcelDataId:  0,
-				ExcelInfoId:  0,
+				ExcelInfoId:  excelInfo.ExcelInfoId,
 				ExcelSheetId: 0,
 				Sort:         i + 1,
 				Data:         string(tmpDataByte),
@@ -349,7 +379,7 @@ func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, conten
 		addSheetList = append(addSheetList, addSheetItem)
 	}
 
-	err = data_manage.AddExcelInfoAndSheet(excelInfo, addSheetList)
+	err = data_manage.SaveExcelInfoAndSheet(excelInfo, updateExcelInfoParam, addSheetList)
 
 	return
 }
@@ -365,6 +395,7 @@ type LuckySheet struct {
 	//		Num35 int `json:"35"`
 	//	} `json:"columnlen"`
 	//} `json:"config"`
+	Config           interface{}
 	Index            string `json:"index"`
 	Order            string `json:"order"`
 	ZoomRatio        int    `json:"zoomRatio"`