Roc 1 year ago
parent
commit
151c623626

+ 336 - 38
controllers/data_manage/excel/custom_analysis.go

@@ -20,13 +20,13 @@ type CustomAnalysisController struct {
 	controllers.BaseAuthController
 }
 
-// GetExcelByName
+// ExcelByName
 // @Title 根据excel名称获取表格详情(基础信息+第一页初始化数据)
 // @Description 根据excel名称获取表格详情(基础信息+第一页初始化数据)
 // @Param   ExcelName   query   string  true       "搜索关键词"
 // @Success 200 {object} response.ExcelListResp
 // @router /excel_by_name [get]
-func (c *CustomAnalysisController) GetExcelByName() {
+func (c *CustomAnalysisController) ExcelByName() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		c.Data["json"] = br
@@ -76,37 +76,6 @@ func (c *CustomAnalysisController) GetExcelByName() {
 			return
 		}
 
-		if len(sheetList) > 0 {
-			sheetIdList := make([]int, 0)
-			for _, v := range sheetList {
-				sheetIdList = append(sheetIdList, v.ExcelSheetId)
-			}
-			// 获取所有sheet的第一页的数据
-			sheetDataList, err := excelModel.GetSheetDataListBySheetIdListAndPage(sheetIdList, 1)
-			if err != nil {
-				br.Msg = "获取sheet中的数据失败"
-				br.ErrMsg = "获取sheet中的数据失败,err:" + err.Error()
-				return
-			}
-
-			sheetDataMap := make(map[int]*excelModel.ExcelSheetData)
-			for _, v := range sheetDataList {
-				sheetDataMap[v.ExcelSheetId] = v
-			}
-
-			for k, v := range sheetList {
-				sheetData, ok := sheetDataMap[v.ExcelSheetId]
-				if !ok {
-					continue
-				}
-				v.Data = sheetData
-				sheetList[k] = v
-			}
-
-		}
-
-		// TODO 合并单元格信息、计算公式
-
 		resp.SheetList = sheetList
 	}
 
@@ -174,7 +143,124 @@ func (c *CustomAnalysisController) Add() {
 		return
 	}
 
-	_, err, errMsg, isSendEmail := excel.AddCustomAnalysisTable(utils.TrimLRStr(req.ExcelName), req.Content, req.ExcelImage, req.ExcelClassifyId, sysUser)
+	excelInfo, err, errMsg, isSendEmail := excel.AddCustomAnalysisTable(utils.TrimLRStr(req.ExcelName), req.Content, req.ExcelImage, req.ExcelClassifyId, sysUser)
+	if err != nil {
+		br.Msg = "保存失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		br.IsSendEmail = isSendEmail
+		return
+	}
+
+	// 更新excel下载地址(默认的EXCEL需要更新,自定义表格不需要更新)
+	//if req.Source == 1 {
+	//	go UpdateExcelInfoFileUrl(excelInfo)
+	//}
+	//
+	resp := new(response.AddExcelInfoResp)
+	resp.ExcelInfoId = excelInfo.ExcelInfoId
+	resp.UniqueCode = excelInfo.UniqueCode
+
+	//新增操作日志
+	//{
+	//	excelLog := &data_manage.ExcelInfoLog{
+	//		//ExcelInfoLogId:  0,
+	//		ExcelInfoId:     excelInfo.ExcelInfoId,
+	//		ExcelName:       req.ExcelName,
+	//		ExcelClassifyId: req.ExcelClassifyId,
+	//		SysUserId:       sysUser.AdminId,
+	//		SysUserRealName: sysUser.RealName,
+	//		UniqueCode:      excelInfo.UniqueCode,
+	//		CreateTime:      time.Now(),
+	//		Content:         string(c.Ctx.Input.RequestBody),
+	//		Status:          "新增表格",
+	//		Method:          c.Ctx.Input.URI(),
+	//	}
+	//	go data_manage.AddExcelInfoLog(excelLog)
+	//}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+	br.IsAddLog = false //数据量太大了,不写入日志吧
+}
+
+// Save
+// @Title 保存表格接口
+// @Description 保存表格接口
+// @Param	request	body request.AddExcelInfoReq true "type json string"
+// @Success 200 {object} response.AddExcelInfoResp
+// @router /save [post]
+func (c *CustomAnalysisController) Save() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	deleteCache := true
+	cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
+	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
+	}
+	var req request.AddExcelInfoReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.ExcelName = strings.Trim(req.ExcelName, " ")
+	if req.ExcelName == "" {
+		br.Msg = "请填写表格名称!"
+		br.IsSendEmail = false
+		return
+	}
+
+	if req.ExcelInfoId <= 0 {
+		br.Msg = "请选择excel!"
+		br.IsSendEmail = false
+		return
+	}
+
+	if req.ExcelClassifyId <= 0 {
+		br.Msg = "分类参数错误!"
+		br.IsSendEmail = false
+		return
+	}
+
+	excelInfo, err := data_manage.GetExcelInfoById(req.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
+	}
+
+	err, errMsg, isSendEmail := excel.SaveCustomAnalysisTable(excelInfo, utils.TrimLRStr(req.ExcelName), req.Content, req.ExcelImage, req.ExcelClassifyId, sysUser)
 	if err != nil {
 		br.Msg = "保存失败"
 		if errMsg != `` {
@@ -190,9 +276,9 @@ func (c *CustomAnalysisController) Add() {
 	//	go UpdateExcelInfoFileUrl(excelInfo)
 	//}
 	//
-	//resp := new(response.AddExcelInfoResp)
-	//resp.ExcelInfoId = excelInfo.ExcelInfoId
-	//resp.UniqueCode = excelInfo.UniqueCode
+	resp := new(response.AddExcelInfoResp)
+	resp.ExcelInfoId = excelInfo.ExcelInfoId
+	resp.UniqueCode = excelInfo.UniqueCode
 
 	//新增操作日志
 	//{
@@ -215,6 +301,218 @@ func (c *CustomAnalysisController) Add() {
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "保存成功"
-	//br.Data = resp
+	br.Data = resp
 	br.IsAddLog = false //数据量太大了,不写入日志吧
 }
+
+// BaseExcelDetail
+// @Title 根据excel名称获取表格详情(基础信息+第一页初始化数据)
+// @Description 根据excel名称获取表格详情(基础信息+第一页初始化数据)
+// @Param   UniqueCode   query   string  true       "excel唯一编码"
+// @Success 200 {object} response.ExcelListResp
+// @router /excel/base [get]
+func (c *CustomAnalysisController) BaseExcelDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	uniqueCode := c.GetString("UniqueCode")
+	if uniqueCode == `` {
+		br.Msg = "请选择表格"
+		br.ErrMsg = "UniqueCode未传"
+		br.IsSendEmail = false
+		return
+	}
+
+	resp := response.FindExcelInfoResp{}
+
+	// 获取数据详情
+	excelDetail, err := data_manage.GetNoContentExcelInfoByUniqueCode(uniqueCode)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "获取成功"
+			br.Data = resp
+			return
+		}
+		br.Msg = "获取表格事变"
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	resp.IsFind = true
+	resp.ExcelInfo = excelDetail
+	if excelDetail != nil {
+		sheetList, err := excelModel.GetAllSheetItemList(excelDetail.ExcelInfoId)
+		if err != nil {
+			br.Msg = "获取sheet失败"
+			br.ErrMsg = "获取sheet失败,err:" + err.Error()
+			return
+		}
+
+		if len(sheetList) > 0 {
+			sheetIdList := make([]int, 0)
+			for _, v := range sheetList {
+				sheetIdList = append(sheetIdList, v.ExcelSheetId)
+			}
+			// 获取所有sheet的第一页的数据
+			sheetDataList, err := excelModel.GetSheetDataListBySheetIdListAndPage(sheetIdList, 1)
+			if err != nil {
+				br.Msg = "获取sheet中的数据失败"
+				br.ErrMsg = "获取sheet中的数据失败,err:" + err.Error()
+				return
+			}
+
+			sheetDataMap := make(map[int]*excelModel.ExcelSheetData)
+			for _, v := range sheetDataList {
+				sheetDataMap[v.ExcelSheetId] = v
+			}
+
+			for k, v := range sheetList {
+				sheetData, ok := sheetDataMap[v.ExcelSheetId]
+				if !ok {
+					continue
+				}
+				v.Data = sheetData
+				sheetList[k] = v
+			}
+
+		}
+
+		// TODO 合并单元格信息、计算公式
+
+		resp.SheetList = sheetList
+	}
+
+	//resp := response.ExcelListResp{
+	//	Paging: page,
+	//	List:   list,
+	//}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// ExcelDataList
+// @Title 根据excel名称获取表格详情(基础信息+第一页初始化数据)
+// @Description 根据excel名称获取表格详情(基础信息+第一页初始化数据)
+// @Param   UniqueCode   query   string  true       "excel唯一编码"
+// @Param   Page   query   int  true       "页码"
+// @Success 200 {object} response.ExcelListResp
+// @router /excel/data [get]
+func (c *CustomAnalysisController) ExcelDataList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	uniqueCode := c.GetString("UniqueCode")
+	if uniqueCode == `` {
+		br.Msg = "请选择表格"
+		br.ErrMsg = "UniqueCode未传"
+		br.IsSendEmail = false
+		return
+	}
+
+	page, _ := c.GetInt("Page")
+	if page <= 0 {
+		br.Msg = "页码异常"
+		br.ErrMsg = "页码异常"
+		br.IsSendEmail = false
+		return
+	}
+
+	sheetList := make([]*excelModel.SheetItem, 0)
+	// 获取数据详情
+	excelDetail, err := data_manage.GetNoContentExcelInfoByUniqueCode(uniqueCode)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "获取成功"
+			br.Data = sheetList
+			return
+		}
+		br.Msg = "获取表格事变"
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	if excelDetail.Source != utils.CUSTOM_ANALYSIS_TABLE {
+		br.Msg = "excel异常"
+		br.ErrMsg = "excel异常"
+		br.IsSendEmail = false
+		return
+	}
+
+	if excelDetail != nil {
+		sheetList, err = excelModel.GetAllSheetItemList(excelDetail.ExcelInfoId)
+		if err != nil {
+			br.Msg = "获取sheet失败"
+			br.ErrMsg = "获取sheet失败,err:" + err.Error()
+			return
+		}
+
+		if len(sheetList) > 0 {
+			sheetIdList := make([]int, 0)
+			for _, v := range sheetList {
+				sheetIdList = append(sheetIdList, v.ExcelSheetId)
+			}
+			// 获取所有sheet的第一页的数据
+			sheetDataList, err := excelModel.GetSheetDataListBySheetIdListAndPage(sheetIdList, page)
+			if err != nil {
+				br.Msg = "获取sheet中的数据失败"
+				br.ErrMsg = "获取sheet中的数据失败,err:" + err.Error()
+				return
+			}
+
+			sheetDataMap := make(map[int]*excelModel.ExcelSheetData)
+			for _, v := range sheetDataList {
+				sheetDataMap[v.ExcelSheetId] = v
+			}
+
+			for k, v := range sheetList {
+				sheetData, ok := sheetDataMap[v.ExcelSheetId]
+				if !ok {
+					continue
+				}
+				v.Data = sheetData
+				sheetList[k] = v
+			}
+
+		}
+
+		// TODO 合并单元格信息、计算公式
+
+	}
+
+	//resp := response.ExcelListResp{
+	//	Paging: page,
+	//	List:   list,
+	//}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = sheetList
+}

+ 11 - 0
models/data_manage/excel/excel_sheet.go

@@ -10,6 +10,7 @@ type ExcelSheet struct {
 	ExcelSheetId int       `orm:"column(excel_sheet_id);pk"`
 	ExcelInfoId  int       `description:"excel的id"`
 	SheetName    string    `description:"sheet名称"`
+	PageNum      int       `description:"总页码数"`
 	Sort         int       `description:"排序"`
 	ModifyTime   time.Time `description:"最近修改日期"`
 	CreateTime   time.Time `description:"创建日期"`
@@ -51,6 +52,7 @@ type SheetItem struct {
 	ExcelSheetId int             `orm:"column(excel_sheet_id);pk"`
 	ExcelInfoId  int             `description:"excel的id"`
 	SheetName    string          `description:"sheet名称"`
+	PageNum      int             `description:"数据总页码数"`
 	Sort         int             `description:"排序"`
 	ModifyTime   time.Time       `description:"最近修改日期"`
 	CreateTime   time.Time       `description:"创建日期"`
@@ -66,3 +68,12 @@ FROM excel_sheet WHERE 1=1 AND excel_info_id = ? `
 	_, 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:"排序"`
+	DataList     []*ExcelSheetData `description:"excel的数据"`
+}

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

@@ -46,7 +46,7 @@ func GetSheetDataListBySheetIdListAndPage(excelSheetIdList []int, page int) (ite
 	}
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
-FROM excel_sheet_data WHERE 1=1 AND excel_sheet_id in ` + utils.GetOrmInReplace(num) + ` AND sort = ? `
+FROM excel_sheet_data WHERE 1=1 AND excel_sheet_id in (` + utils.GetOrmInReplace(num) + `) AND sort = ? `
 	_, err = o.Raw(sql, excelSheetIdList, page).QueryRows(&item)
 
 	return

+ 7 - 0
models/data_manage/excel/response/sheet.go

@@ -5,8 +5,15 @@ import (
 	"eta/eta_api/models/data_manage/excel"
 )
 
+// FindExcelInfoResp 根据名称获取excel的信息
 type FindExcelInfoResp struct {
 	IsFind    bool                         `description:"是否存在同名文件"`
 	ExcelInfo *data_manage.MyExcelInfoList `description:"图表详情"`
 	SheetList []*excel.SheetItem           `description:"sheet列表"`
 }
+
+// AddExcelInfoResp 添加excel表格的返回
+type AddExcelInfoResp struct {
+	ExcelInfoId int    `description:"表格id"`
+	UniqueCode  string `description:"表格唯一编码"`
+}

+ 68 - 0
models/data_manage/excel_info.go

@@ -1,6 +1,7 @@
 package data_manage
 
 import (
+	"eta/eta_api/models/data_manage/excel"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
@@ -287,3 +288,70 @@ func GetNoContentExcelInfoByName(excelName string, source int) (item *MyExcelInf
 
 	return
 }
+
+// GetNoContentExcelInfoByUniqueCode 根据unique_code来获取excel表格详情
+func GetNoContentExcelInfoByUniqueCode(uniqueCode string) (item *MyExcelInfoList, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT excel_info_id,source,excel_type,excel_name,unique_code,excel_classify_id,sys_user_id,sys_user_real_name,excel_image,file_url,sort,create_time,modify_time 
+ FROM excel_info WHERE unique_code=? AND is_delete=0 `
+	err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	return
+}
+
+func AddExcelInfoAndSheet(excelInfo *ExcelInfo, 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()
+		}
+	}()
+
+	// 表格信息入库
+	lastId, err := o.Insert(excelInfo)
+	if err != nil {
+		return
+	}
+	excelInfo.ExcelInfoId = int(lastId)
+
+	// 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,
+			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
+}

+ 1 - 0
models/data_manage/request/excel_info.go

@@ -15,6 +15,7 @@ type DeleteExcelInfoReq struct {
 
 // AddExcelInfoReq 新增表格请求
 type AddExcelInfoReq struct {
+	ExcelInfoId     int         `description:"表格ID"`
 	ExcelName       string      `description:"表格名称"`
 	Source          int         `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
 	ExcelType       int         `description:"表格类型,1:指标列,2:日期列,默认:1"`

+ 16 - 4
models/db.go

@@ -1,9 +1,9 @@
 package models
 
 import (
-	_ "github.com/go-sql-driver/mysql"
 	"eta/eta_api/models/company"
 	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/excel"
 	future_good2 "eta/eta_api/models/data_manage/future_good"
 	"eta/eta_api/models/data_manage/supply_analysis"
 	"eta/eta_api/models/ppt_english"
@@ -12,6 +12,7 @@ import (
 	"eta/eta_api/models/system"
 	"eta/eta_api/models/yb"
 	"eta/eta_api/utils"
+	_ "github.com/go-sql-driver/mysql"
 	"time"
 
 	"github.com/beego/beego/v2/client/orm"
@@ -132,6 +133,9 @@ func init() {
 
 	// 商家配置
 	initBusinessConf()
+
+	// 初始化EXCEL的表
+	initExcel()
 }
 
 // initSystem 系统表 数据表
@@ -251,9 +255,6 @@ func initEdbData() {
 		new(data_manage.EdbInfoCalculateMapping),
 		new(data_manage.EdbDataCalculateZjpj),            //直接拼接
 		new(data_manage.EdbDataCalculateLjztbpj),         //累计同比值拼接
-		new(data_manage.ExcelClassify),                   //ETA excel表格分类
-		new(data_manage.ExcelInfo),                       //ETA excel表格
-		new(data_manage.ExcelDraft),                      //ETA excel表格草稿
 		new(data_manage.PredictEdbConf),                  //预测指标配置
 		new(data_manage.BaseFromMysteelChemicalClassify), //预测指标配置
 		new(data_manage.BaseFromMysteelChemicalIndex),    //钢联化工
@@ -392,3 +393,14 @@ func initBusinessConf() {
 		new(BusinessConfOperationRecord), // 商家配置操作记录表
 	)
 }
+
+// initExcel 初始化EXCEL
+func initExcel() {
+	orm.RegisterModel(
+		new(data_manage.ExcelClassify), //ETA excel表格分类
+		new(data_manage.ExcelInfo),     //ETA excel表格
+		new(data_manage.ExcelDraft),    //ETA excel表格草稿
+		new(excel.ExcelSheet),          //ETA excel sheet
+		new(excel.ExcelSheetData),      //ETA excel sheet data
+	)
+}

+ 19 - 1
routers/commentsRouter.go

@@ -189,7 +189,25 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:CustomAnalysisController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:CustomAnalysisController"],
         beego.ControllerComments{
-            Method: "GetExcelByName",
+            Method: "BaseExcelDetail",
+            Router: `/excel/base`,
+            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: "ExcelDataList",
+            Router: `/excel/data`,
+            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: "ExcelByName",
             Router: `/excel_by_name`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),

+ 167 - 8
services/data/excel/custom_analysis.go

@@ -23,7 +23,7 @@ func AddCustomAnalysisTable(excelName, content, excelImage string, excelClassify
 	if err != nil {
 		return
 	}
-	return
+
 	excelClassify, err := data_manage.GetExcelClassifyById(excelClassifyId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
@@ -94,23 +94,182 @@ func AddCustomAnalysisTable(excelName, content, excelImage string, excelClassify
 		CreateTime:      time.Now(),
 	}
 
-	sheetsList := make([]*excel.ExcelSheet, 0)
+	addSheetList := make([]excel.AddExcelSheetParams, 0)
+	splitNum := 2000 // 基础分割单元格数
+
+	// sheet处理
+	for k, sheetInfo := range luckySheet.Sheets {
+		addSheetItem := excel.AddExcelSheetParams{
+			ExcelSheetId: 0,
+			ExcelInfoId:  0,
+			SheetName:    sheetInfo.Name,
+			Sort:         k,
+		}
+
+		lenCellData := len(sheetInfo.Celldata)
+
+		splitLen := lenCellData / splitNum
+		residue := lenCellData % splitNum
+		if residue > 0 {
+			splitLen += 1
+		}
+
+		sheetDataList := make([]*excel.ExcelSheetData, 0)
+		for i := 0; i < splitLen; i++ {
+
+			startRow := i * splitNum
+			endRow := (i + 1) * splitNum
+			if i == splitLen-1 && residue > 0 {
+				endRow = lenCellData
+			}
+
+			tmpData := sheetInfo.Celldata[startRow:endRow]
+			tmpDataByte, tmpErr := json.Marshal(tmpData)
+			if tmpErr != nil {
+				errMsg = "保存失败"
+				err = errors.New("保存失败:" + tmpErr.Error())
+				return
+			}
+			sheetDataList = append(sheetDataList, &excel.ExcelSheetData{
+				ExcelDataId:  0,
+				ExcelInfoId:  0,
+				ExcelSheetId: 0,
+				Sort:         i,
+				Data:         string(tmpDataByte),
+				ModifyTime:   time.Now(),
+				CreateTime:   time.Now(),
+			})
+		}
+		addSheetItem.DataList = sheetDataList
+
+		addSheetList = append(addSheetList, addSheetItem)
+	}
+
+	err = data_manage.AddExcelInfoAndSheet(excelInfo, addSheetList)
+
+	return
+}
+
+func SaveCustomAnalysisTable(excelInfo *data_manage.ExcelInfo, excelName, content, excelImage string, excelClassifyId int, sysUser *system.Admin) (err error, errMsg string, isSendEmail bool) {
+	isSendEmail = true
+
+	contentByte := []byte(content)
+
+	var luckySheet LuckySheet
+
+	err = json.Unmarshal(contentByte, &luckySheet)
+	if err != nil {
+		return
+	}
+
+	excelClassify, err := data_manage.GetExcelClassifyById(excelClassifyId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			errMsg = "分类不存在"
+			err = errors.New(errMsg)
+			isSendEmail = false
+			return
+		}
+		errMsg = "获取分类信息失败"
+		err = errors.New("获取分类信息失败,Err:" + err.Error())
+		return
+	}
+	if excelClassify == nil {
+		errMsg = "分类不存在"
+		err = errors.New(errMsg)
+		isSendEmail = false
+		return
+	}
+
+	if excelClassify.Source != utils.CUSTOM_ANALYSIS_TABLE {
+		errMsg = "当前分类不是自定义分析分类"
+		err = errors.New("当前分类不是自定义分析分类")
+		isSendEmail = false
+		return
+	}
+
+	// 校验是否同名文件
+	{
+		var condition string
+		var pars []interface{}
+		condition += " AND excel_classify_id=?  AND excel_info_id !=?  "
+		pars = append(pars, excelClassifyId, excelInfo.ExcelInfoId)
+
+		condition += " AND excel_name=? "
+		pars = append(pars, excelName)
+
+		// 获取分类下是否存在该表格名称
+		count, tmpErr := data_manage.GetExcelInfoCountByCondition(condition, pars)
+		if tmpErr != nil {
+			errMsg = "判断表格名称是否存在失败"
+			err = errors.New("判断表格名称是否存在失败,Err:" + tmpErr.Error())
+			return
+		}
+		if count > 0 {
+			errMsg = "表格名称已存在,请重新填写表格名称"
+			err = errors.New(errMsg)
+			isSendEmail = false
+			return
+		}
+	}
+
+	// 表格
+	excelInfo.ExcelName = excelName
+	excelInfo.ExcelClassifyId = excelClassifyId
+	excelInfo.ModifyTime = time.Now()
+
+	addSheetList := make([]excel.AddExcelSheetParams, 0)
+	splitNum := 2000 // 基础分割单元格数
+
 	// sheet处理
 	for k, sheetInfo := range luckySheet.Sheets {
-		sheetsList = append(sheetsList, &excel.ExcelSheet{
+		addSheetItem := excel.AddExcelSheetParams{
 			ExcelSheetId: 0,
 			ExcelInfoId:  0,
 			SheetName:    sheetInfo.Name,
 			Sort:         k,
-			ModifyTime:   time.Now(),
-			CreateTime:   time.Now(),
-		})
+		}
+
+		lenCellData := len(sheetInfo.Celldata)
 
-		//sheetData := make([]*excel.ExcelSheetData, 0)
+		splitLen := lenCellData / splitNum
+		residue := lenCellData % splitNum
+		if residue > 0 {
+			splitLen += 1
+		}
+
+		sheetDataList := make([]*excel.ExcelSheetData, 0)
+		for i := 0; i < splitLen; i++ {
+
+			startRow := i * splitNum
+			endRow := (i + 1) * splitNum
+			if i == splitLen-1 && residue > 0 {
+				endRow = lenCellData
+			}
+
+			tmpData := sheetInfo.Celldata[startRow:endRow]
+			tmpDataByte, tmpErr := json.Marshal(tmpData)
+			if tmpErr != nil {
+				errMsg = "保存失败"
+				err = errors.New("保存失败:" + tmpErr.Error())
+				return
+			}
+			sheetDataList = append(sheetDataList, &excel.ExcelSheetData{
+				ExcelDataId:  0,
+				ExcelInfoId:  0,
+				ExcelSheetId: 0,
+				Sort:         i,
+				Data:         string(tmpDataByte),
+				ModifyTime:   time.Now(),
+				CreateTime:   time.Now(),
+			})
+		}
+		addSheetItem.DataList = sheetDataList
 
+		addSheetList = append(addSheetList, addSheetItem)
 	}
 
-	//err = data_manage.AddExcelInfo(excelInfo)
+	err = data_manage.AddExcelInfoAndSheet(excelInfo, addSheetList)
 
 	return
 }