package excel import ( "encoding/json" "eta/eta_api/controllers" "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/response" "eta/eta_api/models/data_manage/request" "eta/eta_api/services/data/excel" "eta/eta_api/utils" "strconv" "strings" "time" ) // CustomAnalysisController 自定义分析 type CustomAnalysisController struct { controllers.BaseAuthController } // GetExcelByName // @Title 根据excel名称获取表格详情(基础信息+第一页初始化数据) // @Description 根据excel名称获取表格详情(基础信息+第一页初始化数据) // @Param ExcelName query string true "搜索关键词" // @Success 200 {object} response.ExcelListResp // @router /excel_by_name [get] func (c *CustomAnalysisController) GetExcelByName() { 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 } excelName := c.GetString("ExcelName") if excelName == `` { br.Msg = "请选择表格" br.ErrMsg = "ExcelName未传" br.IsSendEmail = false return } resp := response.FindExcelInfoResp{} excelName = utils.TrimLRStr(excelName) // 获取数据详情 excelDetail, err := data_manage.GetNoContentExcelInfoByName(excelName, utils.CUSTOM_ANALYSIS_TABLE) 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 } // Add // @Title 新增表格接口 // @Description 新增表格接口 // @Param request body request.AddExcelInfoReq true "type json string" // @Success 200 {object} response.AddExcelInfoResp // @router /add [post] func (c *CustomAnalysisController) Add() { 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.ExcelClassifyId <= 0 { br.Msg = "分类参数错误!" br.IsSendEmail = false return } _, 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 //数据量太大了,不写入日志吧 }