Browse Source

新增下载接口

tuoling805 1 year ago
parent
commit
bd08dcdf1b
3 changed files with 213 additions and 306 deletions
  1. 185 306
      controllers/data_source/icpi.go
  2. 19 0
      models/data_source/icpi.go
  3. 9 0
      routers/commentsRouter.go

+ 185 - 306
controllers/data_source/icpi.go

@@ -5,7 +5,12 @@ import (
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_source"
 	"eta/eta_api/utils"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"github.com/tealeg/xlsx"
+	"os"
+	"path/filepath"
+	"time"
 )
 
 // 消费者价格指数
@@ -105,14 +110,14 @@ func (this *DataSourceController) IcpiData() {
 
 	icpiObj := new(data_source.BaseFromIcpiIndex)
 
-	baiinfoList, err := icpiObj.GetIcpiIndex(condition, pars)
+	icpiList, err := icpiObj.GetIcpiIndex(condition, pars)
 	if err != nil {
 		br.Msg = "获取数据失败"
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
 	resultList := make([]*data_source.BaseFromIcpiIndexView, 0)
-	for _, v := range baiinfoList {
+	for _, v := range icpiList {
 		product := new(data_source.BaseFromIcpiIndexView)
 		product.BaseFromIcpiIndexId = v.BaseFromIcpiIndexId
 		product.IndexCode = v.IndexCode
@@ -141,307 +146,181 @@ func (this *DataSourceController) IcpiData() {
 	br.Data = resultList
 }
 
-//
-//// ExportBaiinfoList
-//// @Title 导出ICPI数据
-//// @Description 导出ICPI数据
-//// @Param   IndexName   query   string  false       "名称关键词"
-//// @Param   IndexCode   query   string  false       "指标唯一编码"
-//// @Param   ClassifyId   query   string  true       "分类"
-//// @Param   Frequency   query   string  true       "频度"
-//// @Param   UnitName   query   string  false       "单位"
-//// @Param   ModifyTime   query   string  false       "更新时间"
-//// @Success 200  导出成功
-//// @router /export/icpiDataList [get]
-//func (this *DataSourceController) ExportIcpiDataList() {
-//	br := new(models.BaseResponse).Init()
-//	defer func() {
-//		this.Data["json"] = br
-//		this.ServeJSON()
-//	}()
-//
-//	sysUser := this.SysUser
-//	if sysUser == nil {
-//		br.Msg = "请重新登录"
-//		return
-//	}
-//
-//	//typeName := this.GetString("TypeName") //分类
-//	//frequency := this.GetString("Frequency")
-//
-//	indexCode := this.GetString("IndexCode") //指标唯一编码
-//	classifyId, _ := this.GetInt("ClassifyId")
-//	secNameList := make([]*models.EdbdataExportList, 0)
-//
-//	dir, _ := os.Executable()
-//	exPath := filepath.Dir(dir)
-//
-//	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
-//	xlsxFile := xlsx.NewFile()
-//
-//	if classifyId >= 0 && indexCode == "" {
-//
-//		frequencies, err := data_manage.GetBaiinfoFrequency(classifyId)
-//		if err != nil {
-//			fmt.Println("GetBaiinfoFrequency err:", err.Error())
-//			utils.FileLog.Info("GetBaiinfoFrequency err:" + err.Error())
-//			return
-//		}
-//		for _, frequency := range frequencies {
-//
-//			//获取指标
-//			var pars []interface{}
-//			pars = append(pars, classifyId)
-//			pars = append(pars, frequency)
-//			condition := " AND classify_id=? AND frequency=? "
-//			secNameList, err := data_manage.GetBaiinfoIndex(condition, pars)
-//			if err != nil {
-//				fmt.Println("获取数据失败,Err:" + err.Error())
-//				return
-//			}
-//			if len(secNameList) <= 0 {
-//				fmt.Println("secNameList长度为0")
-//				return
-//			}
-//
-//			var sheetNew *xlsx.Sheet
-//			if *frequency == "" {
-//				newFrequency := "无频度"
-//				sheetNew, err = xlsxFile.AddSheet(newFrequency)
-//			} else {
-//				sheetNew, err = xlsxFile.AddSheet(*frequency)
-//			}
-//
-//			if err != nil {
-//				fmt.Println("新增Sheet失败", err.Error())
-//				return
-//			}
-//			//sheetNew.SetColWidth()
-//			//获取指标数据
-//			windRow := sheetNew.AddRow()
-//			secNameRow := sheetNew.AddRow()
-//			indexCodeRow := sheetNew.AddRow()
-//			frequencyRow := sheetNew.AddRow()
-//			unitRow := sheetNew.AddRow()
-//			lastModifyDateRow := sheetNew.AddRow()
-//			//获取分类下指标最大数据量
-//			dataMax, err := data_manage.GetBaiinfoDataMaxCount(classifyId)
-//			if err != nil {
-//				fmt.Println("获取指标最大数据量失败", err.Error())
-//				return
-//			}
-//			fmt.Println("dataMax:", dataMax)
-//			setRowIndex := 6
-//			for k, sv := range secNameList {
-//				//获取数据
-//				dataList, err := data_manage.GetBaiinfoIndexDataByCode(sv.IndexCode)
-//				if err != nil {
-//					br.Msg = "获取数据失败"
-//					br.ErrMsg = "获取数据失败,Err:" + err.Error()
-//					return
-//				}
-//				if len(dataList) > 0 {
-//					windRow.AddCell().SetValue("Baiinfo")
-//					secNameRow.AddCell().SetValue("指标名称")
-//					indexCodeRow.AddCell().SetValue("指标ID")
-//					frequencyRow.AddCell().SetValue("频率")
-//					unitRow.AddCell().SetValue("单位")
-//					lastModifyDateRow.AddCell().SetValue("更新时间")
-//
-//					secNameRow.AddCell().SetValue(sv.IndexName)
-//					indexCodeRow.AddCell().SetValue(sv.IndexCode)
-//					frequencyRow.AddCell().SetValue(sv.Frequency)
-//
-//					unitRow.AddCell().SetValue(sv.Unit)
-//					lastModifyDateRow.AddCell().SetValue(sv.ModifyTime)
-//
-//					windRow.AddCell()
-//					windRow.AddCell()
-//					secNameRow.AddCell()
-//					indexCodeRow.AddCell()
-//					frequencyRow.AddCell()
-//					unitRow.AddCell()
-//					lastModifyDateRow.AddCell()
-//					min := k * 3
-//					sheetNew.SetColWidth(min, min, 15)
-//
-//					if len(dataList) <= 0 {
-//						for n := 0; n < dataMax; n++ {
-//							rowIndex := setRowIndex + n
-//							row := sheetNew.Row(rowIndex)
-//							row.AddCell()
-//							row.AddCell()
-//							row.AddCell()
-//						}
-//					} else {
-//						endRowIndex := 0
-//						for rk, dv := range dataList {
-//							rowIndex := setRowIndex + rk
-//							row := sheetNew.Row(rowIndex)
-//							displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
-//							displayDateCell := row.AddCell()
-//							style := new(xlsx.Style)
-//							style.ApplyAlignment = true
-//							style.Alignment.WrapText = true
-//							displayDateCell.SetStyle(style)
-//							displayDateCell.SetDate(displayDate)
-//
-//							row.AddCell().SetValue(dv.Value)
-//							row.AddCell()
-//							endRowIndex = rowIndex
-//						}
-//						if len(dataList) < dataMax {
-//							dataLen := dataMax - len(dataList)
-//							for n := 0; n < dataLen; n++ {
-//								rowIndex := (endRowIndex + 1) + n
-//								row := sheetNew.Row(rowIndex)
-//								row.AddCell()
-//								row.AddCell()
-//								row.AddCell()
-//							}
-//						}
-//					}
-//				}
-//			}
-//		}
-//	} else {
-//		frequencies, err := data_manage.GetBaiinfoFrequencyByCode(indexCode)
-//		if err != nil {
-//			fmt.Println("GetBaiinfoFrequencyByCode err:", err.Error())
-//			utils.FileLog.Info("GetBaiinfoFrequencyByCode err:" + err.Error())
-//			return
-//		}
-//		for _, frequency := range frequencies {
-//			//获取数据
-//			dataList, err := data_manage.GetBaiinfoIndexDataByCode(indexCode)
-//			if err != nil {
-//				br.Msg = "获取数据失败"
-//				br.ErrMsg = "获取数据失败,Err:" + err.Error()
-//				return
-//			}
-//			if len(dataList) > 0 {
-//				name := this.GetString("IndexName")
-//				unit := this.GetString("UnitName")
-//				modifyTime := this.GetString("ModifyTime")
-//
-//				var sheet *xlsx.Sheet
-//				if *frequency == "" {
-//					newFrequency := "无频度"
-//					sheet, err = xlsxFile.AddSheet(newFrequency)
-//				} else {
-//					sheet, err = xlsxFile.AddSheet(*frequency)
-//				}
-//
-//				if err != nil {
-//					br.Msg = "新增Sheet失败"
-//					br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
-//					return
-//				}
-//				//获取指标数据
-//				windRow := sheet.AddRow()
-//				windRow.AddCell().SetValue("Baiinfo")
-//				rowSecName := sheet.AddRow()
-//				celSecName := rowSecName.AddCell()
-//				celSecName.SetValue("指标名称")
-//				cellSenName := rowSecName.AddCell()
-//				cellSenName.SetValue(name)
-//				indexCodeRow := sheet.AddRow()
-//				indexCodeRow.AddCell().SetValue("指标ID")
-//				indexCodeRow.AddCell().SetValue(indexCode)
-//
-//				rowFrequency := sheet.AddRow()
-//				celFrequency := rowFrequency.AddCell()
-//				celFrequency.SetValue("频率")
-//				cellFrequency := rowFrequency.AddCell()
-//				cellFrequency.SetValue(*frequency)
-//
-//				rowUnit := sheet.AddRow()
-//				celUnit := rowUnit.AddCell()
-//				celUnit.SetValue("单位")
-//				cellUnit := rowUnit.AddCell()
-//				cellUnit.SetValue(unit)
-//
-//				rowModifyDate := sheet.AddRow()
-//				rowModifyCell := rowModifyDate.AddCell()
-//				rowModifyCell.SetValue("更新时间")
-//				rowModifyCell = rowModifyDate.AddCell()
-//				rowModifyCell.SetValue(modifyTime)
-//				dataMax, err := data_manage.GetBaiinfoIndexDataCount(indexCode)
-//				if err != nil {
-//					br.Msg = "查询数量失败"
-//					br.ErrMsg = "GetBaiinfoIndexDataCount,Err:" + err.Error()
-//					return
-//				}
-//				if len(dataList) <= 0 {
-//					for n := 0; n < dataMax; n++ {
-//						rowIndex := 6 + n
-//						row := sheet.Row(rowIndex)
-//						row.AddCell()
-//						row.AddCell()
-//						row.AddCell()
-//					}
-//				} else {
-//					endRowIndex := 0
-//					for rk, dv := range dataList {
-//						rowIndex := 6 + rk
-//						row := sheet.Row(rowIndex)
-//						displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
-//						displayDateCell := row.AddCell()
-//						style := new(xlsx.Style)
-//						style.ApplyAlignment = true
-//						style.Alignment.WrapText = true
-//						displayDateCell.SetStyle(style)
-//						displayDateCell.SetDate(displayDate)
-//
-//						row.AddCell().SetValue(dv.Value)
-//						row.AddCell()
-//						endRowIndex = rowIndex
-//					}
-//					if len(dataList) < dataMax {
-//						dataLen := dataMax - len(dataList)
-//						for n := 0; n < dataLen; n++ {
-//							rowIndex := (endRowIndex + 1) + n
-//							row := sheet.Row(rowIndex)
-//							row.AddCell()
-//							row.AddCell()
-//							row.AddCell()
-//						}
-//					}
-//				}
-//			}
-//		}
-//	}
-//
-//	err := xlsxFile.Save(downLoadnFilePath)
-//	if err != nil {
-//		//有指标无数据时先导出一遍空表
-//		sheet, err := xlsxFile.AddSheet("无数据")
-//		if err != nil {
-//			br.Msg = "新增Sheet失败"
-//			br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
-//			return
-//		}
-//		rowSecName := sheet.AddRow()
-//		celSecName := rowSecName.AddCell()
-//		celSecName.SetValue("")
-//		err = xlsxFile.Save(downLoadnFilePath)
-//		if err != nil {
-//			br.Msg = "保存文件失败"
-//			br.ErrMsg = "保存文件失败"
-//			return
-//		}
-//	}
-//	fileName := `Baiinfo数据`
-//	if len(secNameList) > 0 {
-//		fileName = secNameList[0].ClassifyName
-//	}
-//	fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
-//	this.Ctx.Output.Download(downLoadnFilePath, fileName)
-//	defer func() {
-//		os.Remove(downLoadnFilePath)
-//	}()
-//	br.Ret = 200
-//	br.Success = true
-//	br.Msg = "success"
-//
-//}
+// ExportBaiinfoList
+// @Title 导出ICPI数据
+// @Description 导出ICPI数据
+// @Param   BaseFromIcpiClassifyId   query   int  true       "分类id"
+// @Param   KeyWord   query   string  true       "关键词"
+// @Success 200  导出成功
+// @router /icpi/export/icpiDataList [get]
+func (this *DataSourceController) ExportIcpiDataList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请重新登录"
+		return
+	}
+
+	baseFromIcpiClassifyId, _ := this.GetInt("BaseFromIcpiClassifyId")
+	if baseFromIcpiClassifyId < 0 {
+		br.Msg = "请选择分类"
+		br.ErrMsg = "请选择分类"
+		return
+	}
+
+	keyword := this.GetString("KeyWord")
+
+	//获取指标
+	var condition string
+	var pars []interface{}
+
+	if baseFromIcpiClassifyId >= 0 {
+		condition += ` AND base_from_icpi_classify_id=? `
+		pars = append(pars, baseFromIcpiClassifyId)
+	}
+
+	if keyword != "" {
+		condition += ` AND (index_code =? OR index_name LIKE ?)  `
+		pars = append(pars, keyword)
+		pars = append(pars, "%"+keyword+"%")
+	}
+
+	icpiObj := new(data_source.BaseFromIcpiIndex)
+
+	icpiList, err := icpiObj.GetIcpiIndex(condition, pars)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+
+	dir, _ := os.Executable()
+	exPath := filepath.Dir(dir)
+
+	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
+	xlsxFile := xlsx.NewFile()
+
+	if err != nil {
+		fmt.Println("新增Sheet失败", err.Error())
+		return
+	}
+	//sheetNew.SetColWidth()
+	//获取指标数据
+	sheetNew, _ := xlsxFile.AddSheet("ICPI消费价格指数")
+	windRow := sheetNew.AddRow()
+	secNameRow := sheetNew.AddRow()
+	indexCodeRow := sheetNew.AddRow()
+	frequencyRow := sheetNew.AddRow()
+	lastModifyDateRow := sheetNew.AddRow()
+	//获取分类下指标最大数据量
+	dataMax, err := icpiObj.GetIcpiDataMaxCount(baseFromIcpiClassifyId)
+	if err != nil {
+		fmt.Println("获取指标最大数据量失败", err.Error())
+		return
+	}
+	fmt.Println("dataMax:", dataMax)
+	setRowIndex := 6
+	for k, sv := range icpiList {
+		//获取数据
+		dataList, err := icpiObj.GetIcpiIndexDataByCode(sv.IndexCode)
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+		if len(dataList) > 0 {
+			windRow.AddCell().SetValue("ICPI消费价格指数")
+			secNameRow.AddCell().SetValue("指标名称")
+			indexCodeRow.AddCell().SetValue("指标ID")
+			frequencyRow.AddCell().SetValue("频率")
+			lastModifyDateRow.AddCell().SetValue("更新时间")
+
+			secNameRow.AddCell().SetValue(sv.IndexName)
+			indexCodeRow.AddCell().SetValue(sv.IndexCode)
+			frequencyRow.AddCell().SetValue(sv.Frequency)
+
+			lastModifyDateRow.AddCell().SetValue(sv.ModifyTime)
+
+			windRow.AddCell()
+			windRow.AddCell()
+			secNameRow.AddCell()
+			indexCodeRow.AddCell()
+			frequencyRow.AddCell()
+			lastModifyDateRow.AddCell()
+			min := k * 3
+			sheetNew.SetColWidth(min, min, 15)
+
+			if len(dataList) <= 0 {
+				for n := 0; n < dataMax; n++ {
+					rowIndex := setRowIndex + n
+					row := sheetNew.Row(rowIndex)
+					row.AddCell()
+					row.AddCell()
+					row.AddCell()
+				}
+			} else {
+				endRowIndex := 0
+				for rk, dv := range dataList {
+					rowIndex := setRowIndex + rk
+					row := sheetNew.Row(rowIndex)
+					displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
+					displayDateCell := row.AddCell()
+					style := new(xlsx.Style)
+					style.ApplyAlignment = true
+					style.Alignment.WrapText = true
+					displayDateCell.SetStyle(style)
+					displayDateCell.SetDate(displayDate)
+
+					row.AddCell().SetValue(dv.Value)
+					row.AddCell()
+					endRowIndex = rowIndex
+				}
+				if len(dataList) < dataMax {
+					dataLen := dataMax - len(dataList)
+					for n := 0; n < dataLen; n++ {
+						rowIndex := (endRowIndex + 1) + n
+						row := sheetNew.Row(rowIndex)
+						row.AddCell()
+						row.AddCell()
+						row.AddCell()
+					}
+				}
+			}
+		}
+	}
+
+	err = xlsxFile.Save(downLoadnFilePath)
+	if err != nil {
+		//有指标无数据时先导出一遍空表
+		sheet, err := xlsxFile.AddSheet("无数据")
+		if err != nil {
+			br.Msg = "新增Sheet失败"
+			br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
+			return
+		}
+		rowSecName := sheet.AddRow()
+		celSecName := rowSecName.AddCell()
+		celSecName.SetValue("")
+		err = xlsxFile.Save(downLoadnFilePath)
+		if err != nil {
+			br.Msg = "保存文件失败"
+			br.ErrMsg = "保存文件失败"
+			return
+		}
+	}
+	fileName := `ICPI消费价格指数`
+	fileName += time.Now().Format(utils.FormatDateUnSpace) + `.xlsx` //文件名称
+	this.Ctx.Output.Download(downLoadnFilePath, fileName)
+	defer func() {
+		os.Remove(downLoadnFilePath)
+	}()
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "success"
+
+}

+ 19 - 0
models/data_source/icpi.go

@@ -92,3 +92,22 @@ func (obj *BaseFromIcpiIndex) GetIcpiIndexData(indexCode string, startSize, page
 	_, err = o.Raw(sql, indexCode, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+func (obj *BaseFromIcpiIndex) GetIcpiDataMaxCount(classifyId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT MAX(t.num) AS count FROM (
+				SELECT COUNT(1) AS num  FROM base_from_icpi_index AS a
+				INNER JOIN base_from_icpi_data AS b ON a.base_from_icpi_index_id=b.base_from_icpi_index_id
+				WHERE a.base_from_icpi_classify_id=?
+				GROUP BY a.base_from_icpi_index_id
+			)AS t `
+	err = o.Raw(sql, classifyId).QueryRow(&count)
+	return
+}
+
+func (obj *BaseFromIcpiIndex) GetIcpiIndexDataByCode(indexCode string) (items []*BaseFromIcpiDataView, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT *  FROM base_from_icpi_data WHERE index_code=? ORDER BY data_time DESC  `
+	_, err = o.Raw(sql, indexCode).QueryRows(&items)
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -4210,6 +4210,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_source:DataSourceController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_source:DataSourceController"],
+        beego.ControllerComments{
+            Method: "ExportIcpiDataList",
+            Router: `/icpi/export/icpiDataList`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_source:DataSourceController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_source:DataSourceController"],
         beego.ControllerComments{
             Method: "IcpiData",