Browse Source

fix:调整 删除和另存为接口

Roc 1 year ago
parent
commit
ad50821cc9

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

@@ -163,7 +163,7 @@ func (c *CustomAnalysisController) Add() {
 	resp.UniqueCode = excelInfo.UniqueCode
 
 	// 生成excel文件
-	go UpdateExcelInfoFileUrl(excelInfo)
+	go excel.UpdateExcelInfoFileUrl(excelInfo)
 
 	//新增操作日志
 	//{
@@ -283,7 +283,7 @@ func (c *CustomAnalysisController) Save() {
 	resp.UniqueCode = excelInfo.UniqueCode
 
 	// 生成excel文件
-	go UpdateExcelInfoFileUrl(excelInfo)
+	go excel.UpdateExcelInfoFileUrl(excelInfo)
 
 	//新增操作日志
 	//{

+ 60 - 0
controllers/data_manage/excel/custom_analysis_edb.go

@@ -14,6 +14,66 @@ import (
 	"time"
 )
 
+// EdbList
+// @Title 指标列表
+// @Description 指标列表
+// @Param   ExcelInfoId   query   int  true       "excel的id"
+// @Success 200 {object} []excel.ExcelEdbMappingItem
+// @router /edb/list [get]
+func (c *CustomAnalysisController) EdbList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	excelInfoId, _ := c.GetInt("ExcelInfoId")
+	if excelInfoId <= 0 {
+		br.Msg = "请选择excel"
+		br.IsSendEmail = false
+		return
+	}
+
+	// 获取excel表详情
+	excelInfo, err := excelModel.GetExcelInfoById(excelInfoId)
+	if err != nil {
+		br.Msg = "找不到该EXCEL!"
+		br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
+		return
+	}
+
+	if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
+		br.Msg = "EXCEL异常!"
+		br.IsSendEmail = false
+		return
+	}
+
+	list, err := excelModel.GetAllExcelEdbMappingItemByExcelInfoId(excelInfo.ExcelInfoId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+
+	for k, v := range list {
+		var tmpCalculateFormula excelModel.CalculateFormula
+		err = json.Unmarshal([]byte(v.CalculateFormula), &tmpCalculateFormula)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "公式转换失败,Err:" + err.Error()
+			return
+		}
+		v.DateSequenceStr = tmpCalculateFormula.DateSequenceStr
+		v.DataSequenceStr = tmpCalculateFormula.DataSequenceStr
+		list[k] = v
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+}
+
 // AddEdb
 // @Title 新增指标接口
 // @Description 新增指标接口

+ 18 - 153
controllers/data_manage/excel/excel_info.go

@@ -9,8 +9,6 @@ import (
 	excel3 "eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/data_manage/request"
 	"eta/eta_api/models/data_manage/response"
-	"eta/eta_api/services"
-	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/services/data"
 	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/services/excel"
@@ -198,7 +196,7 @@ func (c *ExcelInfoController) Add() {
 
 	// 更新excel下载地址(默认的EXCEL需要更新,自定义表格不需要更新)
 	if req.Source == 1 {
-		go UpdateExcelInfoFileUrl(excelInfo)
+		go excel2.UpdateExcelInfoFileUrl(excelInfo)
 	}
 
 	resp := new(response.AddExcelInfoResp)
@@ -563,7 +561,7 @@ func (c *ExcelInfoController) Edit() {
 
 	// 更新excel下载地址(默认的EXCEL需要更新,自定义表格不需要更新)
 	if excelInfo.Source == 1 {
-		go UpdateExcelInfoFileUrl(excelInfo)
+		go excel2.UpdateExcelInfoFileUrl(excelInfo)
 	}
 
 	// 加入草稿
@@ -830,23 +828,15 @@ func (c *ExcelInfoController) Delete() {
 		return
 	}
 
-	// 操作权限校验
-	{
-		button := excel2.GetExcelInfoOpButton(sysUser, excelInfo.SysUserId, excelInfo.Source)
-		if !button.DeleteButton {
-			br.Msg = "无操作权限"
-			br.Msg = "无操作权限"
-			br.IsSendEmail = false
-			return
-		}
-	}
-
-	//更新
-	excelInfo.IsDelete = 1
-	err = excelInfo.Update([]string{"IsDelete"})
+	// 删除excel
+	err, errMsg, isSendEmail := excel2.Delete(excelInfo, sysUser)
 	if err != nil {
 		br.Msg = "删除失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
 		br.ErrMsg = "删除失败,Err:" + err.Error()
+		br.IsSendEmail = isSendEmail
 		return
 	}
 
@@ -1137,48 +1127,6 @@ func (c *ExcelInfoController) GetExcelTableData() {
 	br.Data = resp
 }
 
-// UpdateExcelInfoFileUrl 更新excel表格的下载地址
-func UpdateExcelInfoFileUrl(excelInfo *excel3.ExcelInfo) {
-	var err error
-	defer func() {
-		if err != nil {
-			go alarm_msg.SendAlarmMsg(fmt.Sprintf("更新excel表格的下载地址失败,表格id:%d;表格名称:%s; ERR:%s", excelInfo.ExcelInfoId, excelInfo.ExcelName, err), 3)
-		}
-	}()
-	fileName := excelInfo.ExcelName + "_" + excelInfo.UniqueCode + ".xlsx"
-
-	var downloadFilePath string // excel文件下载地址
-
-	switch excelInfo.Source {
-	case utils.EXCEL_DEFAULT: // 自定义表格
-		luckySheetData, err := excel.GetLuckySheetData(excelInfo.Content)
-		if err != nil {
-			fmt.Println("err:", err)
-			return
-		}
-		//_, err = luckySheetData.GetTableDataByLuckySheetDataStr()
-		downloadFilePath, err = luckySheetData.ToExcel()
-	case utils.CUSTOM_ANALYSIS_TABLE: // 自定义分析表格
-		downloadFilePath, err, _ = excel2.GenerateExcelCustomAnalysisExcel(excelInfo)
-	}
-
-	if err != nil {
-		fmt.Println("err:", err)
-		return
-	}
-	defer func() {
-		_ = os.Remove(downloadFilePath)
-	}()
-
-	//上传到阿里云
-	resourceUrl, err := services.UploadAliyunV2(fileName, downloadFilePath)
-	if err != nil {
-		return
-	}
-	excelInfo.FileUrl = resourceUrl
-	err = excelInfo.Update([]string{"FileUrl"})
-}
-
 //func init() {
 //
 //	excelInfo, err := data_manage.GetExcelInfoById(52)
@@ -1927,7 +1875,6 @@ func (c *ExcelInfoController) Copy() {
 		return
 	}
 
-	deleteCache := true
 	var req request.CopyExcelInfoReq
 	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
@@ -1941,17 +1888,15 @@ func (c *ExcelInfoController) Copy() {
 	}
 
 	cacheKey := "CACHE_TABLE_INFO_EDIT_" + strconv.Itoa(req.ExcelInfoId)
-	defer func() {
-		if deleteCache {
-			_ = utils.Rc.Delete(cacheKey)
-		}
-	}()
 	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
-		deleteCache = false
 		br.Msg = "系统处理中,请稍后重试!"
 		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
 		return
 	}
+	defer func() {
+		_ = utils.Rc.Delete(cacheKey)
+	}()
+
 	req.ExcelName = strings.Trim(req.ExcelName, " ")
 	if req.ExcelName == "" {
 		br.Msg = "请填写表格名称!"
@@ -1965,96 +1910,16 @@ func (c *ExcelInfoController) Copy() {
 		return
 	}
 
-	excelClassify, err := excel3.GetExcelClassifyById(req.ExcelClassifyId)
+	excelInfo, err, errMsg, isSendEmail := excel2.Copy(req.ExcelInfoId, req.ExcelClassifyId, req.ExcelName, sysUser)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "分类不存在"
-			br.ErrMsg = "分类不存在"
-			br.IsSendEmail = false
-			return
+		br.Msg = "复制失败"
+		if errMsg != `` {
+			br.Msg = errMsg
 		}
-		br.Msg = "获取分类信息失败"
-		br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
+		br.ErrMsg = "复制失败,Err:" + err.Error()
+		br.IsSendEmail = isSendEmail
 		return
 	}
-	if excelClassify == nil {
-		br.Msg = "分类不存在"
-		br.ErrMsg = "分类不存在"
-		br.IsSendEmail = false
-		return
-	}
-
-	// 获取原ETA表格信息
-	oldExcelInfo, err := excel3.GetExcelInfoById(req.ExcelInfoId)
-	if err != nil {
-		br.Msg = "获取ETA表格失败"
-		br.ErrMsg = "获取ETA表格失败,Err:" + err.Error()
-		return
-	}
-
-	// 操作权限校验
-	{
-		button := excel2.GetExcelInfoOpButton(sysUser, oldExcelInfo.SysUserId, oldExcelInfo.Source)
-		if !button.CopyButton {
-			br.Msg = "无操作权限"
-			br.Msg = "无操作权限"
-			br.IsSendEmail = false
-			return
-		}
-	}
-
-	// 检验分类下是否存在该表格名称
-	{
-		var condition string
-		var pars []interface{}
-		condition += " AND excel_classify_id=? "
-		pars = append(pars, req.ExcelClassifyId)
-
-		condition += " AND excel_name=? "
-		pars = append(pars, req.ExcelName)
-
-		count, err := excel3.GetExcelInfoCountByCondition(condition, pars)
-		if err != nil {
-			br.Msg = "判断表格名称是否存在失败"
-			br.ErrMsg = "判断表格名称是否存在失败,Err:" + err.Error()
-			return
-		}
-		if count > 0 {
-			br.Msg = "表格名称已存在,请重新填写表格名称"
-			br.IsSendEmail = false
-			return
-		}
-	}
-
-	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
-	excelInfo := &excel3.ExcelInfo{
-		//ExcelInfoId:     0,
-		ExcelName:       req.ExcelName,
-		Source:          oldExcelInfo.Source,
-		ExcelType:       oldExcelInfo.ExcelType,
-		UniqueCode:      utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + timestamp),
-		ExcelClassifyId: req.ExcelClassifyId,
-		SysUserId:       sysUser.AdminId,
-		SysUserRealName: sysUser.RealName,
-		Content:         oldExcelInfo.Content,
-		ExcelImage:      oldExcelInfo.ExcelImage,
-		Sort:            0,
-		IsDelete:        0,
-		ModifyTime:      time.Now(),
-		CreateTime:      time.Now(),
-	}
-
-	err = excel3.AddExcelInfo(excelInfo)
-	if err != nil {
-		br.Msg = "保存失败"
-		br.ErrMsg = "保存失败,Err:" + err.Error()
-		return
-	}
-
-	// 更新excel下载地址(默认的EXCEL需要更新,自定义表格不需要更新)
-	if excelInfo.Source == 1 {
-		go UpdateExcelInfoFileUrl(excelInfo)
-	}
 
 	resp := new(response.AddExcelInfoResp)
 	resp.ExcelInfoId = excelInfo.ExcelInfoId

+ 76 - 0
models/data_manage/excel/excel_edb_mapping.go

@@ -0,0 +1,76 @@
+package excel
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// ExcelEdbMapping excel与指标的关系表
+type ExcelEdbMapping struct {
+	ExcelEdbMappingId int       `orm:"column(excel_edb_mapping_id);pk"`
+	ExcelInfoId       int       `description:"excel的id"`
+	Source            int       `description:"表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1"`
+	EdbInfoId         int       `description:"计算指标id"`
+	CreateTime        time.Time `description:"创建时间"`
+	ModifyTime        time.Time `description:"修改时间"`
+}
+
+// AddExcelEdbMappingMulti 批量添加excel与指标的关系
+func AddExcelEdbMappingMulti(items []*ExcelEdbMapping) (err error) {
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+// Add 添加excel与指标的关系
+func (e *ExcelEdbMapping) Add() (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(e)
+	return
+}
+
+// GetExcelEdbMappingByEdbInfoId 根据指标id获取配置关系
+func GetExcelEdbMappingByEdbInfoId(edbInfoId int) (item *ExcelEdbMapping, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT *  FROM excel_edb_mapping WHERE 1=1 AND edb_info_id = ? `
+
+	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	return
+}
+
+// GetExcelEdbMappingByExcelInfoId 根据excel的id获取配置关系
+func GetExcelEdbMappingByExcelInfoId(excelInfoId int) (items []*ExcelEdbMapping, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT *  FROM excel_edb_mapping WHERE 1=1 AND excel_info_id = ? `
+	_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
+
+	return
+}
+
+type ExcelEdbMappingItem struct {
+	EdbInfoId        int    `description:"指标id"`
+	UniqueCode       string `description:"唯一编码"`
+	EdbName          string `description:"指标名称"`
+	ClassifyId       int    `description:"分类id"`
+	Frequency        string `description:"频度"`
+	Unit             string `description:"单位"`
+	CalculateFormula string `json:"-"`
+	DateSequenceStr  string `description:"日期序列公式"`
+	DataSequenceStr  string `description:"数据序列公式"`
+}
+
+// CalculateFormula 计算公式
+type CalculateFormula struct {
+	DateSequenceStr string `json:"DateSequenceStr"`
+	DataSequenceStr string `json:"DataSequenceStr"`
+}
+
+// GetAllExcelEdbMappingItemByExcelInfoId 根据品种id获取所有的指标
+func GetAllExcelEdbMappingItemByExcelInfoId(excelInfoId int) (items []*ExcelEdbMappingItem, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT a.edb_info_id,a.unique_code,a.edb_name,a.classify_id,a.frequency,a.unit,calculate_formula FROM edb_info AS a 
+         JOIN excel_edb_mapping AS b ON a.edb_info_id=b.edb_info_id 
+         WHERE b.excel_info_id = ? ORDER BY b.excel_edb_mapping_id ASC `
+	_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
+	return
+}

+ 2 - 2
models/data_manage/excel/excel_sheet_data.go

@@ -52,8 +52,8 @@ FROM excel_sheet_data WHERE 1=1 AND excel_sheet_id in (` + utils.GetOrmInReplace
 	return
 }
 
-// GetSheetDataListByExcelInfoId 根据表格id获取所有的sheet的所有数据详情
-func GetSheetDataListByExcelInfoId(excelInfoId int) (items []*ExcelSheetData, err error) {
+// GetAllSheetDataListByExcelInfoId 根据表格id获取所有的sheet的所有数据详情
+func GetAllSheetDataListByExcelInfoId(excelInfoId int) (items []*ExcelSheetData, err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
 FROM excel_sheet_data WHERE 1=1 AND excel_info_id = ? ORDER BY sort ASC `

+ 6 - 5
models/db.go

@@ -419,10 +419,11 @@ func initEtaTrial() {
 // initExcel 初始化EXCEL
 func initExcel() {
 	orm.RegisterModel(
-		new(excel.ExcelClassify),  //ETA excel表格分类
-		new(excel.ExcelInfo),      //ETA excel表格
-		new(excel.ExcelDraft),     //ETA excel表格草稿
-		new(excel.ExcelSheet),     //ETA excel sheet
-		new(excel.ExcelSheetData), //ETA excel sheet data
+		new(excel.ExcelClassify),   //ETA excel表格分类
+		new(excel.ExcelInfo),       //ETA excel表格
+		new(excel.ExcelDraft),      //ETA excel表格草稿
+		new(excel.ExcelSheet),      //ETA excel sheet
+		new(excel.ExcelSheetData),  //ETA excel sheet data
+		new(excel.ExcelEdbMapping), //ETA excel 与 指标 的关系表
 	)
 }

+ 9 - 0
routers/commentsRouter.go

@@ -205,6 +205,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: "EdbList",
+            Router: `/edb/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            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: "BaseExcelDetail",

+ 1 - 1
services/data/excel/custom_analysis_edb.go

@@ -29,7 +29,7 @@ func GetCustomAnalysisExcelData(excelInfo *excel.ExcelInfo) (luckySheet excelSer
 
 	// 通过excel的id获取各个sheet的单元格数据map
 	{
-		dataList, tmpErr := excel.GetSheetDataListByExcelInfoId(excelInfo.ExcelInfoId)
+		dataList, tmpErr := excel.GetAllSheetDataListByExcelInfoId(excelInfo.ExcelInfoId)
 		if tmpErr != nil {
 			err = tmpErr
 			return

+ 252 - 0
services/data/excel/excel_op.go

@@ -0,0 +1,252 @@
+package excel
+
+import (
+	"errors"
+	excelModel "eta/eta_api/models/data_manage/excel"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/services/alarm_msg"
+	excel "eta/eta_api/services/excel"
+	"eta/eta_api/utils"
+	"fmt"
+	"os"
+	"strconv"
+	"time"
+)
+
+// Delete excel删除
+func Delete(excelInfo *excelModel.ExcelInfo, sysUser *system.Admin) (err error, errMsg string, isSendEmail bool) {
+	isSendEmail = true
+
+	// 操作权限校验
+	{
+		button := GetExcelInfoOpButton(sysUser, excelInfo.SysUserId, excelInfo.Source)
+		if !button.DeleteButton {
+			errMsg = "无操作权限"
+			err = errors.New(errMsg)
+			isSendEmail = false
+			return
+		}
+	}
+
+	// 自定义分析,需要做这个指标关联的校验
+	if excelInfo.Source == utils.CUSTOM_ANALYSIS_TABLE {
+		list, tmpErr := excelModel.GetExcelEdbMappingByExcelInfoId(excelInfo.ExcelInfoId)
+		if tmpErr != nil {
+			errMsg = `获取关联的指标信息失败`
+			err = tmpErr
+			return
+		}
+
+		if len(list) > 0 {
+			errMsg = "已关联指标,不可删除!"
+			isSendEmail = false
+			return
+		}
+	}
+
+	// 标记删除
+	excelInfo.IsDelete = 1
+	excelInfo.ModifyTime = time.Now()
+	err = excelInfo.Update([]string{"IsDelete", "ModifyTime"})
+
+	return
+}
+
+// Copy 复制excel
+func Copy(oldExcelInfoId, excelClassifyId int, excelName string, sysUser *system.Admin) (excelInfo *excelModel.ExcelInfo, err error, errMsg string, isSendEmail bool) {
+	isSendEmail = true
+
+	excelName = utils.TrimLRStr(excelName)
+
+	excelClassify, err := excelModel.GetExcelClassifyById(excelClassifyId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			errMsg = "分类不存在"
+			err = errors.New(errMsg)
+			isSendEmail = false
+			return
+		}
+		errMsg = "获取分类信息失败"
+		return
+	}
+	if excelClassify == nil {
+		errMsg = "分类不存在"
+		err = errors.New(errMsg)
+		isSendEmail = false
+		return
+	}
+
+	// 获取原ETA表格信息
+	oldExcelInfo, err := excelModel.GetExcelInfoById(oldExcelInfoId)
+	if err != nil {
+		errMsg = "获取ETA表格失败"
+		return
+	}
+
+	// 操作权限校验
+	{
+		button := GetExcelInfoOpButton(sysUser, oldExcelInfo.SysUserId, oldExcelInfo.Source)
+		if !button.CopyButton {
+			errMsg = "无操作权限"
+			err = errors.New(errMsg)
+			isSendEmail = false
+			return
+		}
+	}
+
+	// 检验分类下是否存在该表格名称
+	{
+		var condition string
+		var pars []interface{}
+		condition += " AND excel_classify_id=? "
+		pars = append(pars, excelClassifyId)
+
+		condition += " AND excel_name=? "
+		pars = append(pars, excelName)
+
+		count, tmpErr := excelModel.GetExcelInfoCountByCondition(condition, pars)
+		if tmpErr != nil {
+			errMsg = "判断表格名称是否存在失败"
+			err = tmpErr
+			return
+		}
+		if count > 0 {
+			errMsg = "表格名称已存在,请重新填写表格名称"
+			err = errors.New(errMsg)
+			isSendEmail = false
+			return
+		}
+	}
+
+	// 表格信息
+	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+	excelInfo = &excelModel.ExcelInfo{
+		//ExcelInfoId:     0,
+		ExcelName:       excelName,
+		Source:          oldExcelInfo.Source,
+		ExcelType:       oldExcelInfo.ExcelType,
+		UniqueCode:      utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + timestamp),
+		ExcelClassifyId: excelClassifyId,
+		SysUserId:       sysUser.AdminId,
+		SysUserRealName: sysUser.RealName,
+		Content:         oldExcelInfo.Content,
+		ExcelImage:      oldExcelInfo.ExcelImage,
+		FileUrl:         oldExcelInfo.FileUrl,
+		Sort:            0,
+		IsDelete:        0,
+		ModifyTime:      time.Now(),
+		CreateTime:      time.Now(),
+	}
+
+	// 如果不是自定义分析,那么直接加主表就好了
+	if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
+		err = excelModel.AddExcelInfo(excelInfo)
+		if err != nil {
+			errMsg = "保存失败"
+		}
+
+		return
+	}
+
+	// 自定义分析,需要有额外信息
+	addSheetList := make([]excelModel.AddExcelSheetParams, 0)
+
+	// 获取所有的sheet页
+	oldSheetItemList, err := excelModel.GetAllSheetList(oldExcelInfo.ExcelInfoId)
+	if err != nil {
+		errMsg = `获取sheet页失败`
+		return
+	}
+
+	// 获取所有的sheet页的sheet数据
+	sheetCellDataMapList := make(map[int][]*excelModel.ExcelSheetData)
+	{
+		dataList, tmpErr := excelModel.GetAllSheetDataListByExcelInfoId(oldExcelInfo.ExcelInfoId)
+		if tmpErr != nil {
+			errMsg = `获取sheet页的单元格数据失败`
+			err = tmpErr
+			return
+		}
+
+		for _, cellData := range dataList {
+			sheetDataList, ok := sheetCellDataMapList[cellData.ExcelSheetId]
+			if !ok {
+				sheetDataList = make([]*excelModel.ExcelSheetData, 0)
+			}
+			sheetCellDataMapList[cellData.ExcelSheetId] = append(sheetDataList, cellData)
+		}
+	}
+
+	// sheet处理
+	for _, sheetInfo := range oldSheetItemList {
+		addSheetItem := excelModel.AddExcelSheetParams{
+			ExcelSheetId: 0,
+			ExcelInfoId:  0,
+			SheetName:    sheetInfo.SheetName,
+			Sort:         sheetInfo.Sort,
+			Config:       sheetInfo.Config,
+			CalcChain:    sheetInfo.CalcChain,
+		}
+
+		sheetDataList, ok := sheetCellDataMapList[sheetInfo.ExcelSheetId]
+		if ok {
+			for i, sheetData := range sheetDataList {
+				sheetData.ExcelSheetId = 0
+				sheetData.ExcelInfoId = 0
+				sheetDataList[i] = sheetData
+			}
+		}
+
+		addSheetItem.DataList = sheetDataList
+
+		addSheetList = append(addSheetList, addSheetItem)
+	}
+
+	// 添加表格
+	err = excelModel.AddExcelInfoAndSheet(excelInfo, addSheetList)
+
+	return
+}
+
+// UpdateExcelInfoFileUrl 更新excel表格的下载地址
+func UpdateExcelInfoFileUrl(excelInfo *excelModel.ExcelInfo) {
+	var err error
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg(fmt.Sprintf("更新excel表格的下载地址失败,表格id:%d;表格名称:%s; ERR:%s", excelInfo.ExcelInfoId, excelInfo.ExcelName, err), 3)
+		}
+	}()
+	fileName := excelInfo.ExcelName + "_" + excelInfo.UniqueCode + ".xlsx"
+
+	var downloadFilePath string // excel文件下载地址
+
+	switch excelInfo.Source {
+	case utils.EXCEL_DEFAULT: // 自定义表格
+		luckySheetData, err := excel.GetLuckySheetData(excelInfo.Content)
+		if err != nil {
+			fmt.Println("err:", err)
+			return
+		}
+		//_, err = luckySheetData.GetTableDataByLuckySheetDataStr()
+		downloadFilePath, err = luckySheetData.ToExcel()
+	case utils.CUSTOM_ANALYSIS_TABLE: // 自定义分析表格
+		downloadFilePath, err, _ = GenerateExcelCustomAnalysisExcel(excelInfo)
+	}
+
+	if err != nil {
+		fmt.Println("err:", err)
+		return
+	}
+	defer func() {
+		_ = os.Remove(downloadFilePath)
+	}()
+
+	//上传到阿里云
+	resourceUrl, err := services.UploadAliyunV2(fileName, downloadFilePath)
+	if err != nil {
+		return
+	}
+	excelInfo.FileUrl = resourceUrl
+	err = excelInfo.Update([]string{"FileUrl"})
+}