浏览代码

Merge remote-tracking branch 'origin/master' into eta/2.4.5

# Conflicts:
#	controllers/chart_common.go
#	controllers/excel_info.go
#	models/response/excel_info.go
#	utils/constants.go
Roc 1 周之前
父节点
当前提交
e16b61378f
共有 78 个文件被更改,包括 3731 次插入996 次删除
  1. 132 11
      controllers/chart.go
  2. 1 1
      controllers/chart_auth.go
  3. 3 3
      controllers/chart_common.go
  4. 54 0
      controllers/eta_forum_chart.go
  5. 13 2
      controllers/excel_info.go
  6. 1 1
      controllers/table.go
  7. 146 0
      facade/instance/ht_mini_facade.go
  8. 234 0
      facade/mini_facde.go
  9. 16 0
      global/global.go
  10. 167 0
      global/initDb.go
  11. 4 0
      go.mod
  12. 9 0
      go.sum
  13. 7 3
      main.go
  14. 7 10
      models/business_conf.go
  15. 97 43
      models/chart.go
  16. 40 14
      models/chart_edb_mapping.go
  17. 44 24
      models/chart_series.go
  18. 7 4
      models/chart_series_edb_mapping.go
  19. 63 42
      models/data_manage/chart_info.go
  20. 25 17
      models/data_manage/chart_info_correlation.go
  21. 36 32
      models/data_manage/chart_theme/chart_theme.go
  22. 19 16
      models/data_manage/chart_theme/chart_theme_type.go
  23. 14 10
      models/data_manage/cross_variety/chart_tag.go
  24. 8 6
      models/data_manage/cross_variety/chart_tag_variety.go
  25. 27 23
      models/data_manage/cross_variety/chart_variety.go
  26. 22 8
      models/data_manage/edb_info.go
  27. 18 9
      models/data_manage/edb_info_calculate.go
  28. 5 6
      models/data_manage/edb_source.go
  29. 27 16
      models/data_manage/excel/excel_chart_data.go
  30. 86 47
      models/data_manage/excel/excel_chart_edb.go
  31. 65 47
      models/data_manage/excel/excel_classify.go
  32. 14 10
      models/data_manage/excel/excel_draft.go
  33. 30 22
      models/data_manage/excel/excel_edb_mapping.go
  34. 153 95
      models/data_manage/excel/excel_info.go
  35. 24 16
      models/data_manage/excel/excel_sheet.go
  36. 19 15
      models/data_manage/excel/excel_sheet_data.go
  37. 66 46
      models/data_manage/factor_edb_series.go
  38. 46 31
      models/data_manage/factor_edb_series_chart_mapping.go
  39. 46 31
      models/data_manage/factor_edb_series_mapping.go
  40. 25 17
      models/data_manage/future_good/chart_info_future_good_profit.go
  41. 54 33
      models/data_manage/future_good/future_good_chart_classify.go
  42. 32 22
      models/data_manage/future_good/future_good_edb_info.go
  43. 22 12
      models/data_manage/future_good/future_good_edb_info_data.go
  44. 18 13
      models/data_manage/multiple_graph_config.go
  45. 24 20
      models/data_manage/multiple_graph_config_chart_mapping.go
  46. 23 18
      models/data_manage/multiple_graph_config_edb_mapping.go
  47. 46 28
      models/data_manage/predict_edb_conf.go
  48. 20 13
      models/data_manage/predict_edb_conf_calculate_mapping.go
  49. 8 4
      models/data_manage/predict_edb_rule_data.go
  50. 4 4
      models/db.go
  51. 79 49
      models/excel_info.go
  52. 25 14
      models/excel_info_rule_mapping.go
  53. 43 28
      models/factor_edb_series_calculate_data_qjjs.go
  54. 31 0
      models/referenced_excel_config.go
  55. 8 0
      models/request/mini.go
  56. 1 0
      models/request/mixed_table.go
  57. 11 10
      models/response/excel_info.go
  58. 11 4
      models/share_chart_refresh_log.go
  59. 7 4
      models/table.go
  60. 7 5
      models/table_data.go
  61. 18 0
      routers/commentsRouter.go
  62. 5 0
      routers/router.go
  63. 593 0
      services/data/area_graph/processor_business_logic.go
  64. 28 0
      services/data/area_graph/processor_factory.go
  65. 20 4
      services/data/chart_info.go
  66. 5 6
      services/data/chart_theme.go
  67. 3 5
      services/data/edb_info.go
  68. 1 1
      services/data/excel/balance_table.go
  69. 1 1
      services/data/excel/excel_info.go
  70. 6 6
      services/data/range_analysis/chart_info.go
  71. 57 0
      services/eta_forum/chart_collect.go
  72. 58 0
      services/eta_forum/eta_forum_hub_lib.go
  73. 3 0
      services/excel/lucky_sheet.go
  74. 91 6
      utils/common.go
  75. 30 0
      utils/config.go
  76. 25 8
      utils/constants.go
  77. 135 0
      utils/date_util.go
  78. 358 0
      utils/sql.go

+ 132 - 11
controllers/chart.go

@@ -2,11 +2,15 @@ package controllers
 
 import (
 	"encoding/json"
+	"errors"
+	"eta/eta_chart_lib/facade"
 	"eta/eta_chart_lib/models"
 	"eta/eta_chart_lib/models/data_manage"
 	"eta/eta_chart_lib/models/data_manage/cross_variety/request"
 	"eta/eta_chart_lib/models/data_manage/excel"
+	requestDTO "eta/eta_chart_lib/models/request"
 	"eta/eta_chart_lib/services/data"
+	"eta/eta_chart_lib/services/data/area_graph"
 	"eta/eta_chart_lib/services/data/cross_variety"
 	"eta/eta_chart_lib/services/data/range_analysis"
 	dwmini "eta/eta_chart_lib/services/dw_mini"
@@ -37,6 +41,7 @@ func (this *ChartController) ChartInfoDetail() {
 	uniqueCode := this.GetString("UniqueCode")
 	token := this.GetString("Token")
 	source, _ := this.GetInt("Source")
+	miniSource := this.GetString("MiniSource")
 	if uniqueCode == "" {
 		br.Msg = "参数错误"
 		br.ErrMsg = "参数错误,uniqueCode is empty"
@@ -53,16 +58,24 @@ func (this *ChartController) ChartInfoDetail() {
 		return
 	}
 	var isCollect bool
-	if source == utils.CHART_SOURCE_DW && token != "" {
-		tmpIsCollect, err := dwmini.GetMyChartIsCollect(token, uniqueCode)
-		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取收藏状态失败,Err:" + err.Error()
-			return
+	if miniSource != "" {
+		auth := this.Ctx.Request.Header.Get("Authorization")
+		param := facade.BaseRequest{
+			Auth:       auth,
+			UniqueCode: uniqueCode,
+		}
+		isCollect = facade.FacadeClient.Deal(param).IsCollect(facade.GetInstance(miniSource))
+	} else {
+		if source == utils.CHART_SOURCE_DW && token != "" {
+			tmpIsCollect, err := dwmini.GetMyChartIsCollect(token, uniqueCode)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取收藏状态失败,Err:" + err.Error()
+				return
+			}
+			isCollect = tmpIsCollect
 		}
-		isCollect = tmpIsCollect
 	}
-
 	//判断是否有缓存
 	if utils.Re == nil {
 		if utils.Re == nil && utils.Rc.IsExist(key) {
@@ -88,7 +101,7 @@ func (this *ChartController) ChartInfoDetail() {
 
 	chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该图已被删除,请刷新页面"
 			br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
 			return
@@ -185,7 +198,7 @@ func (this *ChartController) ChartInfoRefresh() {
 	}
 	chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该图已被删除,请刷新页面"
 			br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
 			return
@@ -256,6 +269,50 @@ func (this *ChartController) ChartInfoRefresh() {
 	br.Msg = "刷新成功"
 }
 
+// MiniBookMark
+// @Title 小程序收藏/取消收藏通用接口
+// @Description 小程序收藏/取消收藏通用接口
+// @Param	request	body models.ChartCollectReq true "type json string"
+// @Success Ret=200 取消收藏成功
+// @router /mini/bookMark [post]
+func (this *ChartController) MiniBookMark() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req requestDTO.ChartCollectReq
+	if err := json.Unmarshal(this.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,Err:" + err.Error()
+		return
+	}
+	if req.UniqueCode == "" {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,UniqueCode is empty"
+		return
+	}
+	if req.Source == "" {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,Source is empty"
+		return
+	}
+	auth := this.Ctx.Request.Header.Get("Authorization")
+	param := facade.BaseRequest{
+		Auth:       auth,
+		UniqueCode: req.UniqueCode,
+	}
+	action, err := facade.FacadeClient.Deal(param).HandleAction(req.Action, facade.GetInstance(req.Source))
+	if err != nil {
+		br.Msg = action + "失败"
+		br.ErrMsg = action + "失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = action + "成功"
+}
+
 // CollectCancel
 // @Title 东吴小程序图表取消收藏接口
 // @Description 东吴小程序图表取消收藏接口
@@ -334,7 +391,7 @@ func (this *ChartController) Collect() {
 
 	chartInfo, err := models.GetChartInfoByUniqueCode(req.UniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该图已被删除,请刷新页面"
 			br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
 			return
@@ -493,6 +550,16 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (
 		return
 	}
 
+	// 面积图 面积堆积 数据处理
+	if chartType == utils.CHART_TYPE_AREA {
+		err, errMsg = fillAreaGraphData(extraConfigStr, edbList)
+		if err != nil {
+			msg = "获取失败"
+			errMsg = "获取面积图数据失败,Err:" + err.Error()
+			return
+		}
+	}
+
 	for _, v := range edbList {
 		// 指标别名
 		if barConfig.EdbInfoIdList != nil && len(barConfig.EdbInfoIdList) > 0 {
@@ -523,3 +590,57 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, key string) (
 	isOk = true
 	return
 }
+
+func fillAreaGraphData(extraConfigStr string, edbDataList []*models.ChartEdbInfoMapping) (err error, errMsg string) {
+
+	var tmpConfig data_manage.AreaExtraConf
+	if extraConfigStr != `` {
+		err = json.Unmarshal([]byte(extraConfigStr), &tmpConfig)
+		if err != nil {
+			errMsg = "面积图配置异常"
+			err = errors.New(errMsg)
+			return
+		}
+		if tmpConfig.StandardEdbInfoId <= 0 {
+			utils.FileLog.Info("面积图未开启面积堆积")
+			return
+		}
+	}
+	if tmpConfig.IsHeap == 1 {
+		standardIndexMap := make(map[string]*models.EdbDataList)
+		var startDate, endDate string
+		for _, v := range edbDataList {
+			// 判断是否为基准指标
+			if v.EdbInfoId == tmpConfig.StandardEdbInfoId {
+				if dataList, ok := v.DataList.([]*models.EdbDataList); ok {
+					startDate = dataList[0].DataTime
+					endDate = dataList[len(dataList)-1].DataTime
+					for _, dataObject := range dataList {
+						standardIndexMap[dataObject.DataTime] = dataObject
+					}
+				}
+				break
+			}
+		}
+		strategy, err := area_graph.CreateStrategy(tmpConfig.NullDealWay)
+		if err != nil {
+			return err, "创建空值处理器失败"
+		}
+		err = strategy.Deal(tmpConfig, edbDataList, standardIndexMap, startDate, endDate)
+		if err != nil {
+			return err, err.Error()
+		}
+
+		// 时间戳处理
+		for _, mapping := range edbDataList {
+			if dataList, ok := mapping.DataList.([]*models.EdbDataList); ok {
+				for _, dataInfo := range dataList {
+					toFormatTime := utils.StringToFormatTime(dataInfo.DataTime, utils.FormatDate)
+					dataInfo.DataTimestamp = toFormatTime.UnixMilli()
+				}
+			}
+		}
+	}
+
+	return nil, ""
+}

+ 1 - 1
controllers/chart_auth.go

@@ -64,7 +64,7 @@ func (this *ChartAuthController) ChartInfoDetail() {
 
 	chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该图已被删除,请刷新页面"
 			br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
 			return

+ 3 - 3
controllers/chart_common.go

@@ -57,7 +57,7 @@ func (this *ChartController) CommonChartInfoDetailFromUniqueCode() {
 
 	chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该图已被删除,请刷新页面"
 			br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
 			return
@@ -744,7 +744,7 @@ func (this *ChartController) FutureGoodChartInfoRefresh() {
 	}
 	chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该图已被删除,请刷新页面"
 			br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
 			return
@@ -942,7 +942,7 @@ func (this *ChartController) CorrelationChartInfoRefresh() {
 	}
 	chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该图已被删除,请刷新页面"
 			br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
 			return

+ 54 - 0
controllers/eta_forum_chart.go

@@ -0,0 +1,54 @@
+package controllers
+
+import (
+	"eta/eta_chart_lib/models"
+	"eta/eta_chart_lib/services/eta_forum"
+)
+
+type EtaForumChartController struct {
+	BaseCommonController
+}
+
+// CommonChartInfoDetailFromUniqueCode
+// @Title 根据编码获取图表详情
+// @Description 根据编码获取图表详情接口
+// @Param   UniqueCode   query   int  true       "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
+// @Param   IsCache   query   bool  true       "是否走缓存,默认false"
+// @Success 200 {object} data_manage.ChartInfoDetailFromUniqueCodeResp
+// @router /chart/common/detail [get]
+func (this *EtaForumChartController) CommonChartInfoDetailFromUniqueCode() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	uniqueCode := this.GetString("UniqueCode")
+	if uniqueCode == "" {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,uniqueCode is empty"
+		return
+	}
+
+	resp := new(models.ChartInfoDetailResp)
+	//是否走缓存
+	isCache, _ := this.GetBool("IsCache")
+	forumResp, err, _ := eta_forum.GeChartFromUniqueCode(uniqueCode, isCache)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取图表信息失败, Err: " + err.Error()
+		return
+	}
+	chartInfo := forumResp.ChartInfo
+	resp.ChartInfo = chartInfo
+	resp.DataResp = forumResp.DataResp
+	resp.EdbInfoList = forumResp.EdbInfoList
+	resp.XDataList = forumResp.XDataList
+	resp.YDataList = forumResp.YDataList
+	resp.WaterMark = forumResp.WaterMark
+	resp.IsAuth = true
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 13 - 2
controllers/excel_info.go

@@ -44,6 +44,8 @@ func (this *ExcelInfoController) GetTableDetail() {
 		return
 	}
 	fromScene, _ := this.GetInt("FromScene", 0)
+	referencedId, _ := this.GetInt("ReferencedId", 0)
+	uuid := this.GetString("Uuid")
 	authToken := this.GetString("AuthToken")
 
 	businessConf, err := models.GetBusinessConfByKey(models.BusinessConfIsOpenChartExpired)
@@ -56,7 +58,7 @@ func (this *ExcelInfoController) GetTableDetail() {
 	resp := new(response.ExcelTableDetailResp)
 	excelInfo, err := models.GetExcelInfoByUniqueCode(uniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该表格已被删除,请刷新页面"
 			br.ErrMsg = "该表格已被删除,请刷新页面,Err:" + err.Error()
 			return
@@ -301,6 +303,14 @@ func (this *ExcelInfoController) GetTableDetail() {
 		}
 	}
 
+	// 获取表格引用
+	reference, err := models.GetReferencedExcelConfig(referencedId, fromScene, uniqueCode, uuid)
+	if err != nil && !utils.IsErrNoRow(err) {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取表格引用失败,Err:" + err.Error()
+		return
+	}
+
 	resp.IsAuth = true
 	resp.TableInfo = tableData
 	resp.Source = excelInfo.Source
@@ -310,6 +320,7 @@ func (this *ExcelInfoController) GetTableDetail() {
 	resp.UniqueCode = excelInfo.UniqueCode
 	resp.Config = config
 	resp.SourcesFrom = excelInfo.SourcesFrom
+	resp.ReferencedExcelConfig = reference
 
 	if utils.Re == nil {
 		data, _ := json.Marshal(resp)
@@ -399,7 +410,7 @@ func (this *ExcelInfoController) Refresh() {
 	// 获取数据详情
 	excelDetail, errMsg, err := excel2.GetExcelDetailInfoByExcelInfoId(uniqueCode, this.Lang)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该表格已被删除,请刷新页面"
 			br.ErrMsg = "该表格已被删除,请刷新页面,Err:" + err.Error()
 			return

+ 1 - 1
controllers/table.go

@@ -53,7 +53,7 @@ func (this *TableController) TableInfoDetail() {
 
 	tableInfo, err := models.GetTableInfoByUniqueCode(uniqueCode)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			br.Msg = "该表格已被删除,请刷新页面"
 			br.ErrMsg = "该表格已被删除,请刷新页面,Err:" + err.Error()
 			return

+ 146 - 0
facade/instance/ht_mini_facade.go

@@ -0,0 +1,146 @@
+package instance
+
+import (
+	"encoding/json"
+	"errors"
+	"eta/eta_chart_lib/facade"
+	"eta/eta_chart_lib/models"
+	"eta/eta_chart_lib/utils"
+	"fmt"
+)
+
+const (
+	bookMarkUrl      = "user/bookMark"
+	unBookMarkUrl    = "user/unBookMark"
+	checkBookMarkUrl = "user/checkBookMark"
+	target           = "ht"
+)
+
+type HTCollectionReq struct {
+	UniqueCode string `json:"uniqueCode"`
+}
+type HTMiniFacade struct {
+	facade.BaseMiniFacade
+}
+type HTResponse struct {
+	Ret     int
+	Msg     string
+	Data    interface{} `json:"data"`
+	ErrMsg  string
+	ErrCode int
+	Success bool
+}
+type HTRequest struct {
+	facade.BaseRequest
+	ChartInfoId int
+	ChartName   string
+	ChartImage  string
+	SourceType  string
+	SourceId    int
+}
+
+func dealChartInfo(baseReq facade.BaseRequest) (request HTRequest, err error) {
+	chartInfo, err := models.GetChartInfoByUniqueCode(baseReq.UniqueCode)
+	if err != nil {
+		utils.FileLog.Error("收藏失败,获取图表信息失败:%v", err.Error())
+		return
+	}
+	request = HTRequest{
+		BaseRequest: baseReq,
+		ChartImage:  chartInfo.ChartImage,
+		ChartInfoId: chartInfo.ChartInfoId,
+		ChartName:   chartInfo.ChartName,
+		SourceType:  "chart",
+		SourceId:    chartInfo.ChartInfoId,
+	}
+	return
+}
+func parseResult(resp string) (response HTResponse, err error) {
+	err = json.Unmarshal([]byte(resp), &response)
+	if err != nil {
+		utils.FileLog.Error("收藏失败,解析应答失败:%v,应答结果:%s", err.Error(), resp)
+	}
+	if !response.Success {
+		utils.FileLog.Error("收藏失败,应答结果:%d[%s]", response.ErrCode, response.ErrMsg)
+		err = errors.New(response.ErrMsg)
+	}
+	return
+}
+func (ht *HTMiniFacade) Collect(req facade.BaseRequest) (err error) {
+	param, err := dealChartInfo(req)
+	if err != nil {
+		utils.FileLog.Error("收藏失败,获取图表信息失败:%v", err.Error())
+		return err
+	}
+	url, err := generateUrl(bookMarkUrl)
+	if err != nil {
+		return
+	}
+	resp, err := ht.Post(url, param, req.Auth)
+	if err != nil {
+		utils.FileLog.Error("收藏失败,err:%v,resp:%v", err, resp)
+		return
+	}
+	_, err = parseResult(resp)
+	return
+}
+func (ht *HTMiniFacade) UnCollect(req facade.BaseRequest) (err error) {
+	param, err := dealChartInfo(req)
+	if err != nil {
+		utils.FileLog.Error("收藏失败,获取图表信息失败:%v", err.Error())
+		return err
+	}
+	url, err := generateUrl(unBookMarkUrl)
+	if err != nil {
+		return
+	}
+	resp, err := ht.Post(url, param, req.Auth)
+	if err != nil {
+		utils.FileLog.Error("取消收藏失败,err:%v,resp:%v", err, resp)
+		return
+	}
+	_, err = parseResult(resp)
+	return
+}
+func generateUrl(path string) (url string, err error) {
+	configPath := utils.GetMiniUrl(target)
+	if configPath == "" {
+		utils.FileLog.Error("获取mini接口地址失败", err)
+		err = errors.New("获取mini接口地址失败")
+		return
+	}
+	url = fmt.Sprintf("%s%s", configPath, path)
+	return
+}
+func (ht *HTMiniFacade) IsCollect(req facade.BaseRequest) bool {
+	param, err := dealChartInfo(req)
+	if err != nil {
+		utils.FileLog.Error("获取是否收藏失败,获取图表信息失败:%v", err.Error())
+		return false
+	}
+	url, err := generateUrl(checkBookMarkUrl)
+	if err != nil {
+		return false
+	}
+	resp, err := ht.Post(url, param, req.Auth)
+	if err != nil {
+		utils.FileLog.Error("获取是否收藏失败,err:%v,resp:%v", err, resp)
+		return false
+	}
+	response, err := parseResult(resp)
+	if err != nil {
+		utils.FileLog.Error("获取是否收藏失败,解析应答失败:%v,应答结果:%s", err, resp)
+		return false
+	}
+	var resMap = response.Data.(map[string]interface{})
+	bookMarked := resMap["isBookMarked"]
+	if bookMarked == nil {
+		return false
+	}
+	return bookMarked.(bool)
+}
+func init() {
+	facade.RegisterMiniFacade(target, &HTMiniFacade{
+		BaseMiniFacade: facade.FacadeClient,
+	})
+}

+ 234 - 0
facade/mini_facde.go

@@ -0,0 +1,234 @@
+package facade
+
+import (
+	"context"
+	"encoding/json"
+	"errors"
+	"eta/eta_chart_lib/utils"
+	"fmt"
+	"io"
+	"net/http"
+	"strings"
+	"sync"
+	"time"
+)
+
+var (
+	once          sync.Once
+	miniFacadeMap = make(map[string]ChartCollect)
+
+	FacadeClient = BaseMiniFacade{
+		client: DefaultClient(),
+	}
+)
+
+const (
+	bookMark   = "bookMark"
+	unBookMark = "unBookMark"
+)
+
+func GetInstance(name string) ChartCollect {
+	return miniFacadeMap[name]
+}
+
+type ChartCollect interface {
+	Collect(data BaseRequest) (err error)
+	UnCollect(data BaseRequest) (err error)
+	IsCollect(data BaseRequest) bool
+}
+
+type BaseRequest struct {
+	Auth       string `json:"auth"`
+	UniqueCode string `json:"uniqueCode"`
+}
+
+func (bm *BaseMiniFacade) GetData() interface{} {
+	return bm.data
+}
+
+func (bm *BaseMiniFacade) Post(url string, data interface{}, auth string) (result string, err error) {
+	resp, err := bm.client.Post(url, data, auth)
+	if err != nil {
+		return
+	}
+	respBody, respErr := io.ReadAll(resp.Body)
+	if respErr != nil {
+		utils.FileLog.Error("读取body失败,err:%v", err)
+		return
+	}
+	result = string(respBody)
+	return
+}
+func (bm *BaseMiniFacade) Deal(data BaseRequest) *BaseMiniFacade {
+	bm.data = data
+	return bm
+}
+func (bm *BaseMiniFacade) HandleAction(action string, handler ChartCollect) (actionMsg string, err error) {
+	if handler == nil {
+		return "", errors.New("不支持的操作类型")
+	}
+	switch action {
+	case bookMark:
+		err = handler.Collect(bm.data)
+		actionMsg = "收藏"
+	case unBookMark:
+		err = handler.UnCollect(bm.data)
+		actionMsg = "取消收藏"
+	default:
+		err = errors.New("不支持的操作")
+	}
+	return
+}
+
+func (bm *BaseMiniFacade) IsCollect(handler ChartCollect) bool {
+	return handler.IsCollect(bm.data)
+}
+
+type BaseMiniFacade struct {
+	client *HttpClient
+	data   BaseRequest //返回参数
+}
+
+type HttpClient struct {
+	*http.Client
+	maxRetries     int
+	retryDelayFunc RetryDelayFunc
+}
+
+// NewClient 构造函数,其中 delayFunc 参数是可选的
+func NewClient(timeout time.Duration, maxRetries int, delayFunc ...RetryDelayFunc) *HttpClient {
+	var df RetryDelayFunc
+	if len(delayFunc) > 0 {
+		df = delayFunc[0]
+	} else {
+		df = defaultRetryDelayFunc
+	}
+	return &HttpClient{
+		Client:         &http.Client{Timeout: timeout},
+		maxRetries:     maxRetries,
+		retryDelayFunc: df,
+	}
+}
+
+func DefaultClient() *HttpClient {
+	return NewClient(time.Second*10, 3)
+}
+func defaultRetryDelayFunc(attempt int) time.Duration {
+	delay := time.Duration(attempt) * time.Second
+	if attempt > 0 {
+		delay *= 2
+	}
+	return delay
+}
+
+type RetryDelayFunc func(attempt int) time.Duration
+
+func retryErr(err error) bool {
+	return errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled)
+}
+
+// DoWithRetry 发送带有重试机制的HTTP请求,允许用户自定义重试延迟逻辑
+func (hc *HttpClient) DoWithRetry(ctx context.Context, req *http.Request) (resp *http.Response, err error) {
+	attempt := 0
+	for {
+		resp, err = hc.Do(req.WithContext(ctx))
+		if err != nil && retryErr(err) {
+			if attempt >= hc.maxRetries {
+
+				return nil, fmt.Errorf("请求失败: %w", err)
+			}
+			attempt++
+			delay := hc.retryDelayFunc(attempt)
+			time.Sleep(delay)
+			continue
+		}
+		return
+	}
+}
+
+func (hc *HttpClient) Post(url string, data interface{}, auth string) (resp *http.Response, err error) {
+	dataStr, err := json.Marshal(data)
+	if err != nil {
+		utils.FileLog.Error("请求data json序列化失败,err:" + err.Error())
+	}
+	body := io.NopCloser(strings.NewReader(string(dataStr)))
+	req, err := http.NewRequest(http.MethodPost, url, body)
+	req.Header.Set("Content-Type", "application/json")
+	req.Header.Set("Authorization", auth)
+	if err != nil {
+		utils.FileLog.Error("创建POST请求失败: %v", err.Error())
+	}
+	resp, err = hc.DoWithRetry(req.Context(), req)
+	if err == nil {
+		code := resp.StatusCode
+		if code != 200 {
+			utils.FileLog.Error("请求错误应答,状态码:%d", code)
+			errMsg := fmt.Sprintf("请求状态码异常,StatusCode:[%d]", code)
+			respBody, respErr := io.ReadAll(resp.Body)
+			if respErr != nil {
+				utils.FileLog.Error("读取body失败,err:%v", err)
+				err = errors.New(errMsg)
+				return
+			}
+			utils.FileLog.Error("请求错误应答,body:%s", string(respBody))
+			errMsg = fmt.Sprintf("%s,body:%s", errMsg, string(respBody))
+			err = errors.New(errMsg)
+			return
+		}
+	} else {
+		utils.FileLog.Error("未知的应答错误,获取第三方授权信息失败", err.Error())
+	}
+	return
+}
+func (hc *HttpClient) PostWithAuth(url string, data interface{}, token string) (resp *http.Response, err error) {
+	dataStr, err := json.Marshal(data)
+	if err != nil {
+		utils.FileLog.Error("请求data json序列化失败,err:" + err.Error())
+	}
+	body := io.NopCloser(strings.NewReader(string(dataStr)))
+	req, err := http.NewRequest(http.MethodPost, url, body)
+	req.Header.Set("Content-Type", "application/json")
+	req.Header.Set("Authorization", token)
+	if err != nil {
+		utils.FileLog.Error("创建POST请求失败: %v", err)
+	}
+	resp, err = hc.DoWithRetry(req.Context(), req)
+	code := resp.StatusCode
+	if code != 200 {
+		utils.FileLog.Error("请求错误应答,状态码:%d", code)
+		errMsg := fmt.Sprintf("请求状态码异常,StatusCode:[%d]", code)
+		respBody, respErr := io.ReadAll(resp.Body)
+		if respErr != nil {
+			utils.FileLog.Error("读取body失败,err:%v", err)
+			err = errors.New(errMsg)
+			return
+		}
+		utils.FileLog.Error("请求错误应答,body:%s", string(respBody))
+		errMsg = fmt.Sprintf("%s,body:%s", errMsg, string(respBody))
+		err = errors.New(errMsg)
+		return
+	}
+	return
+}
+func (hc *HttpClient) Get(url string) (resp *http.Response, err error) {
+	req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, url, nil)
+	if err != nil {
+		utils.FileLog.Error("创建请求失败: %v", err)
+	}
+	resp, err = hc.DoWithRetry(req.Context(), req)
+	return
+}
+
+func RegisterMiniFacade(name string, facade ChartCollect) {
+	if facade == nil {
+		panic("实例不存在,无法注册")
+	}
+	if _, ok := miniFacadeMap[name]; ok {
+		utils.FileLog.Error("请勿重复注册小程序插件:" + name)
+	}
+	miniFacadeMap[name] = facade
+}
+
+func init() {
+
+}

+ 16 - 0
global/global.go

@@ -0,0 +1,16 @@
+package global
+
+import (
+	_ "github.com/go-sql-driver/mysql"
+	"gorm.io/gorm"
+)
+
+var (
+	DbMap      map[string]*gorm.DB //数据库连接配置
+	DEFAULT_DB *gorm.DB            //默认数据库连接配置
+)
+
+func init() {
+	// 初始化数据库连接
+	InitDb()
+}

+ 167 - 0
global/initDb.go

@@ -0,0 +1,167 @@
+package global
+
+import (
+	"database/sql/driver"
+	_ "dm"
+	dm "dmgorm2"
+	"eta/eta_chart_lib/utils"
+	"fmt"
+	"gorm.io/driver/mysql"
+	"gorm.io/gorm"
+	"gorm.io/gorm/logger"
+	"gorm.io/gorm/schema"
+	"io"
+	"log"
+	"os"
+	"strings"
+	"time"
+)
+
+var (
+	//需要钩子函数执行的数据库表
+	tableMap = map[string]int{
+		"base_from_mysteel_chemical_data": 1,
+		"future_good_edb_info":            1,
+	}
+)
+
+type LocalTime time.Time
+
+// InitDb
+// @Description: 数据库初始化
+func InitDb() {
+	dbMap := make(map[string]*gorm.DB)
+
+	//开启日志
+	logWriter := io.MultiWriter(utils.Binlog) //binlog日志,记录到文件中去
+	if utils.RunMode == `dev` {               // 测试环境,默认输出在控制台,不需要的话,可以注释if里面下面的这行
+		logWriter = io.MultiWriter(utils.Binlog, os.Stdout)
+	}
+	newLogger := logger.New(log.New(logWriter, "\r\n", log.LstdFlags), logger.Config{
+		SlowThreshold:             200 * time.Millisecond, //慢sql :200ms
+		LogLevel:                  logger.Info,            //记录的日志类型,info代表所有信息都记录
+		IgnoreRecordNotFoundError: true,                   //是否忽略找不到数据错误信息(只是日志记录记录成err还是普通的输出的区别,并不影响业务代码中的:找不到数据行error)
+		Colorful:                  false,                  //是否颜色输出
+	})
+
+	// 默认库
+	connectDb(utils.MYSQL_URL, utils.DbNameMaster, newLogger, dbMap, true)
+
+	// 手工数据库
+	connectDb(utils.MYSQL_URL_EDB, utils.DbNameManualIndex, newLogger, dbMap, false)
+	// 指标库
+	connectDb(utils.MYSQL_URL_DATA, utils.DbNameIndex, newLogger, dbMap, false)
+
+	// gorm前置处理
+	for _, db := range dbMap {
+		_ = db.Callback().Query().Before("gorm:query").Register("before_query", func(tx *gorm.DB) {
+			orgSql := tx.Statement.SQL.String()
+			if _, ok := tableMap[tx.Statement.Table]; ok && strings.Contains(strings.ToLower(orgSql), "select") {
+				newSql := utils.ReplaceDriverKeywords(utils.DbDriverName, orgSql)
+				tx.Statement.SQL.Reset()
+				tx.Statement.SQL.WriteString(newSql)
+			}
+		})
+		_ = db.Callback().Raw().Before("gorm:raw").Register("before_raw", func(tx *gorm.DB) {
+			orgSql := tx.Statement.SQL.String()
+			if _, ok := tableMap[tx.Statement.Table]; ok &&
+				(strings.Contains(strings.ToLower(orgSql), "delete") ||
+					strings.Contains(strings.ToLower(orgSql), "update") ||
+					strings.Contains(strings.ToLower(orgSql), "insert")) {
+				newSql := utils.ReplaceDriverKeywords(utils.DbDriverName, orgSql)
+				tx.Statement.SQL.Reset()
+				tx.Statement.SQL.WriteString(newSql)
+			}
+		})
+	}
+
+	//全局赋值数据库链接
+	DbMap = dbMap
+
+}
+
+// connectDb
+// @Description: 达梦数据库连接
+// @param dsn
+// @param aliasName
+// @param newLogger
+// @param dbMap
+// @param isDefault
+func connectDb(dsn, aliasName string, newLogger logger.Interface, dbMap map[string]*gorm.DB, isDefault bool) {
+	//fmt.Println("dsn:", dsn, "  ==  ;aliasName:", aliasName)
+	if dsn == `` {
+		return
+	}
+
+	var dialector gorm.Dialector
+	switch utils.DbDriverName {
+	case utils.DbDriverByMysql:
+		if !strings.Contains(dsn, `parseTime`) {
+			dsn += `&parseTime=true`
+		}
+		dialector = mysql.Open(dsn)
+	case utils.DbDriverByDm:
+		dialector = dm.Open(dsn)
+	default:
+		panic(fmt.Errorf("数据库 链接异常,错误的数据库类型,数据库:%s", utils.DbDriverName))
+	}
+	db, err := gorm.Open(dialector, &gorm.Config{
+		Logger: newLogger,
+		NamingStrategy: schema.NamingStrategy{
+			SingularTable: true, // 表示使用单数表名,启用该选项后,GORM 将不会对表名进行复数化处理
+		},
+	})
+	if err != nil {
+		//global.LOG.Errorf("mysql 启动异常,数据库:default;Err:", err)
+		panic(fmt.Errorf("数据库 链接异常,数据库:%s;Err:%s", aliasName, err))
+	}
+	//创建连接池
+	sqlDB, err := db.DB()
+	if err != nil {
+		//global.LOG.Errorf("达梦 创建连接池失败,数据库:default;Err:", err)
+		panic(fmt.Errorf("数据库 创建连接池失败,数据库:%s;Err:%s", aliasName, err))
+	}
+
+	dbMap[aliasName] = db
+
+	//默认数据库连接
+	if isDefault {
+		DEFAULT_DB = db
+	}
+
+	// SetMaxIdleConns 设置空闲连接池中连接的最大数量
+	sqlDB.SetMaxIdleConns(50)
+
+	// SetMaxOpenConns 设置打开数据库连接的最大数量。
+	sqlDB.SetMaxOpenConns(100)
+
+	// SetConnMaxLifetime 设置了连接可复用的最大时间。
+	sqlDB.SetConnMaxLifetime(10 * time.Minute)
+
+}
+
+func (t *LocalTime) MarshalJSON() ([]byte, error) {
+	tTime := time.Time(*t)
+	if tTime.IsZero() {
+		return []byte("\"\""), nil
+	}
+	return []byte(fmt.Sprintf("\"%v\"", tTime.Format("2006-01-02 15:04:05"))), nil
+}
+
+func (t LocalTime) Value() (driver.Value, error) {
+	var zeroTime time.Time
+	tlt := time.Time(t)
+	//判断给定时间是否和默认零时间的时间戳相同
+	if tlt.UnixNano() == zeroTime.UnixNano() {
+		return nil, nil
+	}
+	return tlt, nil
+}
+
+func (t *LocalTime) Scan(v interface{}) error {
+	if value, ok := v.(time.Time); ok {
+		*t = LocalTime(value)
+		return nil
+	}
+	return fmt.Errorf("can not convert %v to timestamp", v)
+}

+ 4 - 0
go.mod

@@ -16,6 +16,8 @@ require (
 	github.com/yidane/formula v0.0.0-20220322063702-c9da84ba3476
 	go.mongodb.org/mongo-driver v1.15.0
 	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
+	gorm.io/driver/mysql v1.5.7
+	gorm.io/gorm v1.25.12
 )
 
 require (
@@ -35,6 +37,8 @@ require (
 	github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 // indirect
 	github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 // indirect
 	github.com/hashicorp/golang-lru v0.5.4 // indirect
+	github.com/jinzhu/inflection v1.0.0 // indirect
+	github.com/jinzhu/now v1.1.5 // indirect
 	github.com/klauspost/compress v1.13.6 // indirect
 	github.com/kr/text v0.2.0 // indirect
 	github.com/leodido/go-urn v1.2.0 // indirect

+ 9 - 0
go.sum

@@ -109,6 +109,10 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
@@ -342,3 +346,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
+gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
+gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
+gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
+gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=

+ 7 - 3
main.go

@@ -2,16 +2,17 @@ package main
 
 import (
 	"eta/eta_chart_lib/controllers"
+	_ "eta/eta_chart_lib/facade/instance"
+	"eta/eta_chart_lib/models"
 	_ "eta/eta_chart_lib/routers"
 	"eta/eta_chart_lib/services/alarm_msg"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"runtime"
-	"time"
-
 	"github.com/beego/beego/v2/adapter/logs"
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/context"
+	"runtime"
+	"time"
 )
 
 func main() {
@@ -20,6 +21,9 @@ func main() {
 		beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
 	}
 
+	// 初始化表数据入库
+	models.AfterInitTable()
+
 	// 异常处理
 	beego.ErrorController(&controllers.ErrorController{})
 

+ 7 - 10
models/business_conf.go

@@ -1,12 +1,11 @@
 package models
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
 	"html"
 	"time"
-
-	"github.com/beego/beego/v2/client/orm"
 )
 
 const (
@@ -27,7 +26,8 @@ var FromSceneMap = map[int]string{
 
 // BusinessConf 商户配置表
 type BusinessConf struct {
-	Id         int    `orm:"column(id);pk"`
+	//Id         int    `orm:"column(id);pk"`
+	Id         int    `gorm:"column:id;primaryKey"`
 	ConfKey    string `description:"配置Key"`
 	ConfVal    string `description:"配置值"`
 	ValType    int    `description:"1-字符串;2-数值;3-字符串数组;4-富文本;"`
@@ -41,9 +41,8 @@ func GetBusinessConf() (list map[string]string, err error) {
 	list = make(map[string]string)
 
 	var items []*BusinessConf
-	o := orm.NewOrm()
 	sql := `SELECT * FROM business_conf`
-	_, err = o.Raw(sql).QueryRows(&items)
+	err = global.DEFAULT_DB.Raw(sql).Find(&items).Error
 	if err != nil {
 		return
 	}
@@ -59,9 +58,8 @@ func GetBusinessConf() (list map[string]string, err error) {
 }
 
 func GetBusinessConfByKey(key string) (item *BusinessConf, err error) {
-	o := orm.NewOrm()
 	sql := fmt.Sprintf(`SELECT * FROM business_conf WHERE conf_key = ? LIMIT 1`)
-	err = o.Raw(sql, key).QueryRow(&item)
+	err = global.DEFAULT_DB.Raw(sql, key).First(&item).Error
 	return
 }
 
@@ -71,9 +69,8 @@ func GetBusinessConfByKeys(key []string) (list map[string]string, err error) {
 		return
 	}
 	var items []*BusinessConf
-	o := orm.NewOrm()
-	sql := fmt.Sprintf(`SELECT * FROM business_conf WHERE conf_key IN (%s) `, utils.GetOrmInReplace(len(key)))
-	_, err = o.Raw(sql, key).QueryRows(&items)
+	sql := fmt.Sprintf(`SELECT * FROM business_conf WHERE conf_key IN (?) `)
+	err = global.DEFAULT_DB.Raw(sql, key).Find(&items).Error
 
 	for _, v := range items {
 		if v.ValType == 4 {

+ 97 - 43
models/chart.go

@@ -2,20 +2,22 @@ package models
 
 import (
 	"errors"
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/models/mgo"
 	"eta/eta_chart_lib/utils"
 	"fmt"
+	"gorm.io/gorm"
 	"strconv"
 	"time"
 
-	"github.com/beego/beego/v2/client/orm"
 	"go.mongodb.org/mongo-driver/bson"
 
 	"github.com/nosixtools/solarlunar"
 )
 
 type ChartInfo struct {
-	ChartInfoId       int       `json:"-" orm:"column(chart_info_id);pk"`
+	//ChartInfoId       int       `json:"-" orm:"column(chart_info_id);pk"`
+	ChartInfoId       int       `json:"-" gorm:"column:chart_info_id;primaryKey"`
 	ChartName         string    `description:"来源名称"`
 	ChartNameEn       string    `description:"英文图表名称"`
 	ChartClassifyId   int       `json:"-" description:"图表分类id"`
@@ -47,7 +49,7 @@ type ChartInfo struct {
 	Source            int       `description:"1:ETA图库;2:商品价格曲线"`
 	Unit              string    `description:"中文单位名称"`
 	UnitEn            string    `description:"英文单位名称"`
-	ExtraConfig       string    `description:"图表额外配置,json数据" json:"-"`
+	ExtraConfig       string    `description:"图表额外配置,json数据"`
 	ChartSource       string    `description:"图表来源str"`
 	ChartSourceEn     string    `description:"图表来源(英文)"`
 	SeasonExtraConfig string    `description:"季节性图表中的配置,json数据"`
@@ -60,44 +62,59 @@ type ChartInfo struct {
 	MarkersAreas      string    `description:"标识区"`
 }
 
+func (m *ChartInfo) ConvertDate() {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+	m.SeasonStartDate = utils.GormDateStrToDateStr(m.SeasonStartDate)
+	m.SeasonEndDate = utils.GormDateStrToDateStr(m.SeasonEndDate)
+
+	return
+}
+
 func GetChartInfoByUniqueCode(uniqueCode string) (item *ChartInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM chart_info WHERE unique_code=? `
-	err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	//err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, uniqueCode).First(&item).Error
+	if err != nil {
+		item.ConvertDate()
+	}
+
 	return
 }
 
 type ChartEdbInfoMapping struct {
-	EdbInfoId         int     `description:"指标id"`
-	SourceName        string  `description:"来源名称"`
-	Source            int     `description:"来源id"`
-	EdbCode           string  `description:"指标编码"`
-	EdbName           string  `description:"指标名称"`
-	EdbAliasName      string  `description:"指标名称(别名)"`
-	EdbAliasNameEn    string  `description:"英文指标名称(别名)"`
-	EdbNameEn         string  `description:"英文指标名称"`
-	Frequency         string  `description:"频率"`
-	FrequencyEn       string  `description:"英文频率"`
-	Unit              string  `description:"单位"`
-	UnitEn            string  `description:"英文单位"`
-	StartDate         string  `description:"起始日期"`
-	EndDate           string  `description:"终止日期"`
-	ModifyTime        string  `description:"指标最后更新时间"`
-	ChartEdbMappingId int     `description:"图表指标id" json:"-"`
-	ChartInfoId       int     `description:"图表id"`
-	MaxData           float64 `description:"上限"`
-	MinData           float64 `description:"下限"`
-	IsOrder           bool    `description:"true:正序,false:逆序"`
-	IsAxis            int     `description:"1:左轴,0:右轴"`
-	EdbInfoType       int     `description:"1:标准指标,0:领先指标"`
-	EdbType           int     `description:"指标类型:1:基础指标,2:计算指标"`
-	LeadValue         int     `description:"领先值"`
-	LeadUnit          string  `description:"领先单位"`
-	LeadUnitEn        string  `description:"领先英文单位"`
-	ChartStyle        string  `description:"图表类型"`
-	ChartColor        string  `description:"颜色"`
-	ChartWidth        float64 `description:"线条大小"`
-	DataList          interface{}
+	EdbInfoId         int         `description:"指标id"`
+	SourceName        string      `description:"来源名称"`
+	Source            int         `description:"来源id"`
+	EdbCode           string      `description:"指标编码"`
+	EdbName           string      `description:"指标名称"`
+	EdbAliasName      string      `description:"指标名称(别名)"`
+	EdbAliasNameEn    string      `description:"英文指标名称(别名)"`
+	EdbNameEn         string      `description:"英文指标名称"`
+	Frequency         string      `description:"频率"`
+	FrequencyEn       string      `description:"英文频率"`
+	Unit              string      `description:"单位"`
+	UnitEn            string      `description:"英文单位"`
+	StartDate         string      `description:"起始日期"`
+	EndDate           string      `description:"终止日期"`
+	ModifyTime        string      `description:"指标最后更新时间"`
+	ChartEdbMappingId int         `description:"图表指标id" json:"-"`
+	ChartInfoId       int         `description:"图表id"`
+	MaxData           float64     `description:"上限"`
+	MinData           float64     `description:"下限"`
+	IsOrder           bool        `description:"true:正序,false:逆序"`
+	IsAxis            int         `description:"1:左轴,0:右轴"`
+	EdbInfoType       int         `description:"1:标准指标,0:领先指标"`
+	EdbType           int         `description:"指标类型:1:基础指标,2:计算指标"`
+	LeadValue         int         `description:"领先值"`
+	LeadUnit          string      `description:"领先单位"`
+	LeadUnitEn        string      `description:"领先英文单位"`
+	ChartStyle        string      `description:"图表类型"`
+	ChartColor        string      `description:"颜色"`
+	ChartWidth        float64     `description:"线条大小"`
+	ChartScale        float64     `description:"参考刻度线"`
+	DataList          interface{} `gorm:"-"`
 
 	EdbInfoCategoryType int     `description:"0:普通指标,1:预测指标"`
 	PredictChartColor   string  `description:"预测数据的颜色"`
@@ -123,16 +140,36 @@ type ChartEdbInfoMapping struct {
 	IsJoinPermission    int     `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
 }
 
+func (m *ChartEdbInfoMapping) AfterFind(db *gorm.DB) (err error) {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+	m.LatestDate = utils.GormDateStrToDateStr(m.LatestDate)
+	m.MoveLatestDate = utils.GormDateStrToDateStr(m.MoveLatestDate)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+
+	return
+}
+
+func (m *ChartEdbInfoMapping) ConvertDate() {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+	m.LatestDate = utils.GormDateStrToDateStr(m.LatestDate)
+	m.MoveLatestDate = utils.GormDateStrToDateStr(m.MoveLatestDate)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+
+	return
+}
+
 func GetChartEdbMappingList(chartInfoId int) (list []*ChartEdbInfoMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
-	aField := `a.chart_edb_mapping_id,a.chart_info_id,a.edb_info_id,a.create_time,a.modify_time,a.unique_code,a.max_data,a.min_data,a.is_order,a.is_axis,a.edb_info_type,a.lead_value,a.lead_unit,a.chart_style,a.chart_color,a.predict_chart_color,a.chart_width,a.source as mapping_source,a.edb_alias_name`
+	aField := `a.chart_edb_mapping_id,a.chart_info_id,a.edb_info_id,a.create_time,a.modify_time,a.unique_code,a.max_data,a.min_data,a.is_order,a.is_axis,a.edb_info_type,a.lead_value,a.lead_unit,a.chart_style,a.chart_color,a.predict_chart_color,a.chart_width,a.source as mapping_source,a.edb_alias_name,a.chart_scale`
 	sql := ` SELECT ` + aField + `,b.source_name,b.source,b.edb_code,b.edb_name,b.edb_name_en,b.frequency,b.unit,b.unit_en,b.start_date,b.end_date,b.modify_time,b.edb_type,b.latest_date,b.latest_value,b.unique_code,b.edb_info_type AS edb_info_category_type,b.sub_source,
 a.is_convert, a.convert_type, a.convert_value, a.convert_unit, a.convert_en_unit 
              FROM chart_edb_mapping AS a
 			 INNER JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
 			 WHERE chart_info_id=? 
              ORDER BY chart_edb_mapping_id ASC `
-	_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	//_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId).Find(&list).Error
 	return
 }
 
@@ -141,7 +178,13 @@ type EdbDataList struct {
 	EdbInfoId     int     `json:"-" description:"指标ID"`
 	DataTime      string  `description:"数据日期"`
 	DataTimestamp int64   `description:"数据日期"`
-	Value         float64 `description:"数据值"`
+	Value         float64 `description:"数据值" gorm:"column:value"`
+}
+
+func (m *EdbDataList) AfterFind(db *gorm.DB) (err error) {
+	m.DataTime = utils.GormDateStrToDateStr(m.DataTime)
+
+	return
 }
 
 // GetEdbDataList 获取指标的数据(日期正序返回)
@@ -191,8 +234,14 @@ func getEdbDataListByMysql(source, subSource, edbInfoId int, startDate, endDate
 	}
 	sql += ` ORDER BY data_time ASC  `
 	sql = fmt.Sprintf(sql, tableName)
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Raw(sql, edbInfoId, pars).QueryRows(&list)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Raw(sql, edbInfoId, pars).QueryRows(&list)
+	newPars := utils.ForwardPars(pars, edbInfoId)
+	pars = append(pars, edbInfoId)
+	sql = utils.ReplaceDriverKeywords("", sql)
+
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, newPars...).Find(&list).Error
+
 	return
 }
 
@@ -947,9 +996,14 @@ type ChartTimeCombineDataResp struct {
 }
 
 func GetChartInfoById(chartInfoId int) (item *ChartInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM chart_info WHERE chart_info_id=? `
-	err = o.Raw(sql, chartInfoId).QueryRow(&item)
+	//err = o.Raw(sql, chartInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId).First(&item).Error
+	if err != nil {
+		item.ConvertDate()
+	}
+
 	return
 }
 

+ 40 - 14
models/chart_edb_mapping.go

@@ -1,13 +1,13 @@
 package models
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 )
 
 // GetEtaEdbChartEdbMapping       商品曲线图查询对应的普通指标
 func GetEtaEdbChartEdbMapping(chartInfoId int) (item *ChartEdbInfoMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 
 	aField := `a.chart_edb_mapping_id,a.chart_info_id,a.edb_info_id,a.create_time,a.modify_time,a.unique_code,a.max_data,a.min_data,a.is_order,a.is_axis,a.edb_info_type,a.lead_value,a.lead_unit,a.chart_style,a.chart_color,a.predict_chart_color,a.chart_width,a.source as mapping_source`
 	sql := ` SELECT ` + aField + `,b.source_name,b.source,b.sub_source,b.edb_code,b.edb_name,b.edb_name_en,b.frequency,b.unit,b.unit_en,b.start_date,b.end_date,b.modify_time,b.latest_date,b.latest_value,b.unique_code,b.edb_info_type AS edb_info_category_type
@@ -15,13 +15,19 @@ func GetEtaEdbChartEdbMapping(chartInfoId int) (item *ChartEdbInfoMapping, err e
 			 INNER JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
 			 WHERE a.chart_info_id=? AND a.source = ?
              ORDER BY chart_edb_mapping_id ASC `
-	err = o.Raw(sql, chartInfoId, utils.CHART_SOURCE_DEFAULT).QueryRow(&item)
+	//err = o.Raw(sql, chartInfoId, utils.CHART_SOURCE_DEFAULT).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId, utils.CHART_SOURCE_DEFAULT).First(&item).Error
+	if err != nil {
+		return
+	}
+	item.ConvertDate()
+
 	return
 }
 
 // GetEtaEdbChartEdbMappingList       商品曲线图查询对应的普通指标
 func GetEtaEdbChartEdbMappingList(chartInfoId int) (items []*ChartEdbInfoMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	aField := `a.chart_edb_mapping_id,a.chart_info_id,a.edb_info_id,a.create_time,a.modify_time,a.unique_code,a.max_data,a.min_data,a.is_order,a.is_axis,a.edb_info_type,a.lead_value,a.lead_unit,a.chart_style,a.chart_color,a.predict_chart_color,a.chart_width,a.source as mapping_source`
 
 	sql := ` SELECT ` + aField + `,b.source_name,b.source,b.sub_source,b.edb_code,b.edb_name,b.edb_name_en,b.frequency,b.unit,b.unit_en,b.start_date,b.end_date,b.modify_time,b.latest_date,b.latest_value,b.unique_code,b.edb_info_type AS edb_info_category_type,b.classify_id,b.is_join_permission
@@ -29,43 +35,57 @@ func GetEtaEdbChartEdbMappingList(chartInfoId int) (items []*ChartEdbInfoMapping
 			 INNER JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
 			 WHERE a.chart_info_id=? AND a.source = ?
              ORDER BY chart_edb_mapping_id ASC `
-	_, err = o.Raw(sql, chartInfoId, utils.CHART_SOURCE_DEFAULT).QueryRows(&items)
+	//_, err = o.Raw(sql, chartInfoId, utils.CHART_SOURCE_DEFAULT).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId, utils.CHART_SOURCE_DEFAULT).Find(&items).Error
 	return
 }
 
 // GetFutureGoodEdbChartEdbMapping       商品曲线图查询对应的商品指标
 func GetFutureGoodEdbChartEdbMapping(chartInfoId int) (item *ChartEdbInfoMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	aField := `a.chart_edb_mapping_id,a.chart_info_id,a.edb_info_id,a.create_time,a.modify_time,a.unique_code,a.max_data,a.min_data,a.is_order,a.is_axis,a.edb_info_type,a.lead_value,a.lead_unit,a.chart_style,a.chart_color,a.predict_chart_color,a.chart_width,a.source as mapping_source`
 	sql := ` SELECT ` + aField + `,b.future_good_edb_info_id,b.future_good_edb_code as edb_code,b.future_good_edb_name as edb_name,b.start_date,b.end_date,b.modify_time,b.latest_date,b.latest_value
              FROM chart_edb_mapping AS a
 			 INNER JOIN future_good_edb_info AS b ON a.edb_info_id=b.future_good_edb_info_id
 			 WHERE a.chart_info_id=? AND a.source = ?
              ORDER BY chart_edb_mapping_id ASC `
-	err = o.Raw(sql, chartInfoId, utils.CHART_SOURCE_FUTURE_GOOD).QueryRow(&item)
+	//err = o.Raw(sql, chartInfoId, utils.CHART_SOURCE_FUTURE_GOOD).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId, utils.CHART_SOURCE_FUTURE_GOOD).First(&item).Error
+	if err != nil {
+		return
+	}
+	item.ConvertDate()
+
 	return
 }
 
 // GetFutureGoodEdbChartEdbMappingList       商品曲线图查询对应的商品指标
 func GetFutureGoodEdbChartEdbMappingList(chartInfoId int) (items []*ChartEdbInfoMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	aField := `a.chart_edb_mapping_id,a.chart_info_id,a.edb_info_id,a.create_time,a.modify_time,a.unique_code,a.max_data,a.min_data,a.is_order,a.is_axis,a.edb_info_type,a.lead_value,a.lead_unit,a.chart_style,a.chart_color,a.predict_chart_color,a.chart_width,a.source as mapping_source`
 	sql := ` SELECT ` + aField + `,b.future_good_edb_info_id,b.future_good_edb_code as edb_code,b.future_good_edb_name as edb_name,b.start_date,b.end_date,b.modify_time,b.latest_date,b.latest_value
              FROM chart_edb_mapping AS a
 			 INNER JOIN future_good_edb_info AS b ON a.edb_info_id=b.future_good_edb_info_id
 			 WHERE a.chart_info_id=? AND a.source = ?
              ORDER BY chart_edb_mapping_id ASC `
-	_, err = o.Raw(sql, chartInfoId, utils.CHART_SOURCE_FUTURE_GOOD).QueryRows(&items)
+	//_, err = o.Raw(sql, chartInfoId, utils.CHART_SOURCE_FUTURE_GOOD).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId, utils.CHART_SOURCE_FUTURE_GOOD).Find(&items).Error
 	return
 }
 
 // GetChartEdbMappingByEdbInfoId 根据指标id获取edb_mapping
 func GetChartEdbMappingByEdbInfoId(edbInfoId int) (item *ChartEdbInfoMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT edb_info_id,source_name,source,sub_source,edb_code,edb_name,edb_name_en,frequency,unit,unit_en,start_date,end_date,modify_time,latest_date,latest_value,unique_code,edb_info_type AS edb_info_category_type,max_value,min_value
              FROM edb_info
 			 WHERE edb_info_id = ? limit 1`
-	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	//err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).First(&item).Error
+	if err != nil {
+		return
+	}
+	item.ConvertDate()
+
 	return
 }
 
@@ -75,12 +95,18 @@ func GetChartEdbMappingListByEdbInfoIdList(edbIdList []int) (list []*ChartEdbInf
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT edb_info_id,source_name,source,sub_source,edb_code,edb_name,edb_name_en,frequency,unit,unit_en,start_date,end_date,modify_time,latest_date,latest_value,unique_code,edb_info_type AS edb_info_category_type,max_value,min_value,edb_type
              FROM edb_info
-			 WHERE edb_info_id IN(` + utils.GetOrmInReplace(num) + `)
+			 WHERE edb_info_id IN ?
 			ORDER BY FIELD(edb_info_id,` + utils.GetOrmInReplace(num) + `)
               `
-	_, err = o.Raw(sql, edbIdList, edbIdList).QueryRows(&list)
+	//_, err = o.Raw(sql, edbIdList, edbIdList).QueryRows(&list)
+	var pars []interface{}
+	pars = append(pars, edbIdList)
+	for i := 0; i < num; i++ {
+		pars = append(pars, edbIdList[i])
+	}
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
 	return
 }

+ 44 - 24
models/chart_series.go

@@ -2,14 +2,15 @@ package models
 
 import (
 	"encoding/json"
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 type ChartSeries struct {
-	ChartSeriesId int       `orm:"column(chart_series_id);pk"`
+	//ChartSeriesId int       `orm:"column(chart_series_id);pk"`
+	ChartSeriesId int       `gorm:"column:chart_series_id;primaryKey"`
 	SeriesName    string    `description:"系列名称"`
 	SeriesNameEn  string    `description:"系列英文名称"`
 	ChartInfoId   int       `description:"图表ID"`
@@ -31,16 +32,18 @@ func (c *ChartSeries) TableName() string {
 }
 
 func GetChartSeriesByChartInfoId(chartInfoId int) (items []*ChartSeries, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := "SELECT * FROM chart_series WHERE chart_info_id = ?"
-	_, err = o.Raw(sql, chartInfoId).QueryRows(&items)
+	//_, err = o.Raw(sql, chartInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId).Find(&items).Error
 	return
 }
 
 // EditChartSeriesAndEdbMapping
 func EditChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	to, err := o.Begin()
+	//o := orm.NewOrmUsingDB("data")
+	//to, err := o.Begin()
+	to := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -72,7 +75,8 @@ func EditChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err e
 	}
 
 	// 删除所有的指标映射
-	_, err = o.Raw("DELETE FROM chart_series_edb_mapping WHERE chart_info_id = ?", chartInfoId).Exec()
+	//_, err = o.Raw("DELETE FROM chart_series_edb_mapping WHERE chart_info_id = ?", chartInfoId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec("DELETE FROM chart_series_edb_mapping WHERE chart_info_id = ?", chartInfoId).Error
 	if err != nil {
 		return
 	}
@@ -102,16 +106,20 @@ func EditChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err e
 			}
 			//新增
 			tmp.CreateTime = time.Now()
-			seriesIdTmp, e := to.Insert(tmp)
+			//seriesIdTmp, e := to.Insert(tmp)
+			e := to.Create(&tmp).Error
 			if e != nil {
 				err = fmt.Errorf("AddChartSeries Err:" + e.Error())
 				return
 			}
-			seriesId = int(seriesIdTmp)
+			//seriesId = int(seriesIdTmp)
+			seriesId = tmp.ChartSeriesId
 		} else {
 			//编辑
 			delete(seriesDeleteMap, v.ChartSeriesId)
-			_, e := to.Update(tmp)
+			//_, e := to.Update(tmp)
+			//e := to.Model(tmp).Select("*").Updates(tmp).Error
+			e := to.Save(&tmp).Error
 			if e != nil {
 				err = fmt.Errorf("UpdateChartSeries Err:" + e.Error())
 				return
@@ -141,7 +149,8 @@ func EditChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err e
 			addSeriesEdbList = append(addSeriesEdbList, edbTmp)
 		}
 		if len(addSeriesEdbList) > 0 {
-			_, err = to.InsertMulti(len(addSeriesEdbList), addSeriesEdbList)
+			//_, err = to.InsertMulti(len(addSeriesEdbList), addSeriesEdbList)
+			err = to.CreateInBatches(addSeriesEdbList, len(addSeriesEdbList)).Error
 			if err != nil {
 				err = fmt.Errorf("AddChartSeries Err:" + err.Error())
 				return
@@ -154,14 +163,18 @@ func EditChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err e
 		seriesIds = append(seriesIds, id)
 	}
 	if len(seriesIds) > 0 {
-		sql := `DELETE FROM chart_series WHERE chart_series_id IN (` + utils.GetOrmInReplace(len(seriesIds)) + `) and chart_info_id=?`
-		_, err = to.Raw(sql, seriesIds, chartInfoId).Exec()
+		//sql := `DELETE FROM chart_series WHERE chart_series_id IN (` + utils.GetOrmInReplace(len(seriesIds)) + `) and chart_info_id=?`
+		//_, err = to.Raw(sql, seriesIds, chartInfoId).Exec()
+		sql := `DELETE FROM chart_series WHERE chart_series_id IN ? and chart_info_id=?`
+		err = to.Exec(sql, seriesIds, chartInfoId).Error
 		if err != nil {
 			err = fmt.Errorf("删除系列失败 Err:" + err.Error())
 			return
 		}
-		sql = `DELETE FROM chart_series_edb_mapping WHERE chart_series_id IN (` + utils.GetOrmInReplace(len(seriesIds)) + `) and chart_info_id=?`
-		_, err = to.Raw(sql, seriesIds, chartInfoId).Exec()
+		//sql = `DELETE FROM chart_series_edb_mapping WHERE chart_series_id IN (` + utils.GetOrmInReplace(len(seriesIds)) + `) and chart_info_id=?`
+		//_, err = to.Raw(sql, seriesIds, chartInfoId).Exec()
+		sql = `DELETE FROM chart_series_edb_mapping WHERE chart_series_id IN ? and chart_info_id=?`
+		err = to.Exec(sql, seriesIds, chartInfoId).Error
 		if err != nil {
 			err = fmt.Errorf("删除系列指标 Err:" + err.Error())
 			return
@@ -172,8 +185,9 @@ func EditChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err e
 }
 
 func AddChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	to, err := o.Begin()
+	//o := orm.NewOrmUsingDB("data")
+	//to, err := o.Begin()
+	to := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -209,12 +223,14 @@ func AddChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err er
 			CreateTime:   time.Now(),
 			ModifyTime:   time.Now(),
 		}
-		seriesIdTmp, e := to.Insert(tmp)
+		//seriesIdTmp, e := to.Insert(tmp)
+		e := to.Create(&tmp).Error
 		if e != nil {
 			err = fmt.Errorf("AddChartSeries Err:" + e.Error())
 			return
 		}
-		seriesId := int(seriesIdTmp)
+		//seriesId := int(seriesIdTmp)
+		seriesId := tmp.ChartSeriesId
 		addSeriesEdbList := make([]*ChartSeriesEdbMapping, 0)
 		for _, edbItem := range v.EdbInfoList {
 			dateConfStrByte, e := json.Marshal(edbItem.DateConf)
@@ -238,7 +254,8 @@ func AddChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err er
 			addSeriesEdbList = append(addSeriesEdbList, edbTmp)
 		}
 		if len(addSeriesEdbList) > 0 {
-			_, e = to.InsertMulti(len(addSeriesEdbList), addSeriesEdbList)
+			//_, e = to.InsertMulti(len(addSeriesEdbList), addSeriesEdbList)
+			e = to.CreateInBatches(addSeriesEdbList, len(addSeriesEdbList)).Error
 			if e != nil {
 				err = fmt.Errorf("AddChartSeries Err:" + e.Error())
 				return
@@ -249,8 +266,9 @@ func AddChartSeriesAndEdbMapping(extraConfigStr string, chartInfoId int) (err er
 }
 
 func DeleteChartSeriesAndEdbMapping(chartInfoId int) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	to, err := o.Begin()
+	//o := orm.NewOrmUsingDB("data")
+	//to, err := o.Begin()
+	to := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -263,12 +281,14 @@ func DeleteChartSeriesAndEdbMapping(chartInfoId int) (err error) {
 	}()
 
 	sql := ` DELETE FROM chart_series WHERE chart_info_id=? `
-	_, err = to.Raw(sql, chartInfoId).Exec()
+	//_, err = to.Raw(sql, chartInfoId).Exec()
+	err = to.Exec(sql, chartInfoId).Error
 	if err != nil {
 		return
 	}
 	sql = ` DELETE FROM  chart_series_edb_mapping WHERE chart_info_id=? `
-	_, err = to.Raw(sql, chartInfoId).Exec()
+	//_, err = to.Raw(sql, chartInfoId).Exec()
+	err = to.Exec(sql, chartInfoId).Error
 	return
 }
 

+ 7 - 4
models/chart_series_edb_mapping.go

@@ -1,12 +1,14 @@
 package models
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 type ChartSeriesEdbMapping struct {
-	ChartSeriesEdbMappingId int       `orm:"column(chart_series_edb_mapping_id);pk"`
+	//ChartSeriesEdbMappingId int       `orm:"column(chart_series_edb_mapping_id);pk"`
+	ChartSeriesEdbMappingId int       `gorm:"column:chart_series_edb_mapping_id;primaryKey"`
 	ChartSeriesId           int       `description:"系列ID"`
 	ChartInfoId             int       `description:"图表ID"`
 	EdbInfoId               int       `description:"指标id"`
@@ -22,8 +24,9 @@ func (c *ChartSeriesEdbMapping) TableName() string {
 }
 
 func GetChartSeriesEdbByChartInfoId(chartInfoId int) (items []*ChartSeriesEdbMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := "SELECT * FROM chart_series_edb_mapping WHERE chart_info_id = ?"
-	_, err = o.Raw(sql, chartInfoId).QueryRows(&items)
+	//_, err = o.Raw(sql, chartInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId).Find(&items).Error
 	return
 }

+ 63 - 42
models/data_manage/chart_info.go

@@ -1,59 +1,80 @@
 package data_manage
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
+	"gorm.io/gorm"
 )
 
 type ChartEdbInfoMapping struct {
-	EdbInfoId           int     `description:"指标id"`
-	SourceName          string  `description:"来源名称"`
-	Source              int     `description:"来源id"`
-	EdbCode             string  `description:"指标编码"`
-	EdbName             string  `description:"指标名称"`
-	EdbAliasName        string  `description:"指标名称(别名)"`
-	EdbNameEn           string  `description:"英文指标名称"`
-	EdbAliasNameEn      string  `description:"英文指标名称(别名)"`
-	EdbType             int     `description:"指标类型:1:基础指标,2:计算指标"`
-	Frequency           string  `description:"频率"`
-	FrequencyEn         string  `description:"英文频率"`
-	Unit                string  `description:"单位"`
-	UnitEn              string  `description:"英文单位"`
-	StartDate           string  `description:"起始日期"`
-	EndDate             string  `description:"终止日期"`
-	ModifyTime          string  `description:"指标最后更新时间"`
-	ChartEdbMappingId   int     `description:"图表指标id"`
-	ChartInfoId         int     `description:"图表id"`
-	MaxData             float64 `description:"上限"`
-	MinData             float64 `description:"下限"`
-	IsOrder             bool    `description:"true:正序,false:逆序"`
-	IsAxis              int     `description:"1:左轴,0:右轴"`
-	EdbInfoType         int     `description:"1:标准指标,0:领先指标"`
-	EdbInfoCategoryType int     `description:"0:普通指标,1:预测指标"`
-	LeadValue           int     `description:"领先值"`
-	LeadUnit            string  `description:"领先单位"`
-	LeadUnitEn          string  `description:"领先英文单位"`
-	ChartStyle          string  `description:"图表类型"`
-	ChartColor          string  `description:"颜色"`
-	PredictChartColor   string  `description:"预测数据的颜色"`
-	ChartWidth          float64 `description:"线条大小"`
-	ChartType           int     `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图"`
-	LatestDate          string  `description:"数据最新日期"`
-	LatestValue         float64 `description:"数据最新值"`
-	UniqueCode          string  `description:"指标唯一编码"`
-	MinValue            float64 `json:"-" description:"最小值"`
-	MaxValue            float64 `json:"-" description:"最大值"`
-	DataList            interface{}
-	IsNullData          bool `json:"-" description:"是否空数据"`
+	EdbInfoId           int         `description:"指标id"`
+	SourceName          string      `description:"来源名称"`
+	Source              int         `description:"来源id"`
+	EdbCode             string      `description:"指标编码"`
+	EdbName             string      `description:"指标名称"`
+	EdbAliasName        string      `description:"指标名称(别名)"`
+	EdbNameEn           string      `description:"英文指标名称"`
+	EdbAliasNameEn      string      `description:"英文指标名称(别名)"`
+	EdbType             int         `description:"指标类型:1:基础指标,2:计算指标"`
+	Frequency           string      `description:"频率"`
+	FrequencyEn         string      `description:"英文频率"`
+	Unit                string      `description:"单位"`
+	UnitEn              string      `description:"英文单位"`
+	StartDate           string      `description:"起始日期"`
+	EndDate             string      `description:"终止日期"`
+	ModifyTime          string      `description:"指标最后更新时间"`
+	ChartEdbMappingId   int         `description:"图表指标id"`
+	ChartInfoId         int         `description:"图表id"`
+	MaxData             float64     `description:"上限"`
+	MinData             float64     `description:"下限"`
+	IsOrder             bool        `description:"true:正序,false:逆序"`
+	IsAxis              int         `description:"1:左轴,0:右轴"`
+	EdbInfoType         int         `description:"1:标准指标,0:领先指标"`
+	EdbInfoCategoryType int         `description:"0:普通指标,1:预测指标"`
+	LeadValue           int         `description:"领先值"`
+	LeadUnit            string      `description:"领先单位"`
+	LeadUnitEn          string      `description:"领先英文单位"`
+	ChartStyle          string      `description:"图表类型"`
+	ChartColor          string      `description:"颜色"`
+	PredictChartColor   string      `description:"预测数据的颜色"`
+	ChartWidth          float64     `description:"线条大小"`
+	ChartType           int         `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图"`
+	LatestDate          string      `description:"数据最新日期"`
+	LatestValue         float64     `description:"数据最新值"`
+	UniqueCode          string      `description:"指标唯一编码"`
+	MinValue            float64     `json:"-" description:"最小值"`
+	MaxValue            float64     `json:"-" description:"最大值"`
+	DataList            interface{} `gorm:"-"`
+	IsNullData          bool        `gorm:"-" json:"-" description:"是否空数据"`
+}
+
+// AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
+func (m *ChartEdbInfoMapping) AfterFind(db *gorm.DB) (err error) {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+	m.LatestDate = utils.GormDateStrToDateStr(m.LatestDate)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+
+	return
+}
+
+// AreaExtraConf 面积图配置
+type AreaExtraConf struct {
+	IsHeap            int `description:"是否堆积 1-堆积 2-不堆积"`
+	HeapWay           int `description:"堆积方式 1-普通 2-百分比"`
+	StandardEdbInfoId int `description:"基准指标id"`
+	NullDealWay       int `description:"空值处理方式,1-插值填充 2-前值填充 3-后值填充 4-等于0 5-删除日期"`
 }
 
 func GetChartEdbMappingList(chartInfoId int) (list []*ChartEdbInfoMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT a.*,b.source_name,b.source,b.edb_code,b.edb_name,b.edb_name_en,b.frequency,b.unit,b.unit_en,b.start_date,b.end_date,b.modify_time,b.latest_date,b.latest_value,b.unique_code,b.edb_info_type AS edb_info_category_type
              FROM chart_edb_mapping AS a
 			 INNER JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
 			 WHERE chart_info_id=? 
              ORDER BY chart_edb_mapping_id ASC `
-	_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	//_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId).Find(&list).Error
 	return
 }
 

+ 25 - 17
models/data_manage/chart_info_correlation.go

@@ -1,15 +1,17 @@
 package data_manage
 
 import (
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"strings"
 	"time"
 )
 
 // ChartInfoCorrelation 相关性图表-扩展信息
 type ChartInfoCorrelation struct {
-	CorrelationChartInfoId int       `orm:"column(correlation_chart_info_id);pk" description:"相关性图表ID(chart_info表source=3的)"`
+	//CorrelationChartInfoId int       `orm:"column(correlation_chart_info_id);pk" description:"相关性图表ID(chart_info表source=3的)"`
+	CorrelationChartInfoId int       `gorm:"column:correlation_chart_info_id;primaryKey" description:"相关性图表ID(chart_info表source=3的)"`
 	LeadValue              int       `description:"领先值"`
 	LeadUnit               string    `description:"领先单位"`
 	CalculateValue         int       `description:"计算窗口"`
@@ -33,44 +35,49 @@ func (m *ChartInfoCorrelation) TableName() string {
 }
 
 func (m *ChartInfoCorrelation) Create() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Insert(m)
-	if err != nil {
-		return
-	}
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Insert(m)
+	//if err != nil {
+	//	return
+	//}
 	//m.CorrelationChartInfoId = int(id)
+	err = global.DbMap[utils.DbNameIndex].Create(&m).Error
 	return
 }
 
 func (m *ChartInfoCorrelation) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(m, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(m, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&m).Select(cols).Updates(&m).Error
 	return
 }
 
 func (m *ChartInfoCorrelation) Delete() (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE correlation_chart_info_id = ? LIMIT 1`, m.TableName())
-	_, err = o.Raw(sql, m.CorrelationChartInfoId).Exec()
+	//_, err = o.Raw(sql, m.CorrelationChartInfoId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, m.CorrelationChartInfoId).Error
 	return
 }
 
 func (m *ChartInfoCorrelation) GetItemById(id int) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE correlation_chart_info_id = ? LIMIT 1`, m.TableName())
-	err = o.Raw(sql, id).QueryRow(&m)
+	//err = o.Raw(sql, id).QueryRow(&m)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&m).Error
 	return
 }
 
 func (m *ChartInfoCorrelation) GetItemByCondition(condition string, pars []interface{}) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
-	err = o.Raw(sql, pars).QueryRow(&m)
+	//err = o.Raw(sql, pars).QueryRow(&m)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&m).Error
 	return
 }
 
 func (m *ChartInfoCorrelation) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartInfoCorrelation, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -80,7 +87,8 @@ func (m *ChartInfoCorrelation) GetItemsByCondition(condition string, pars []inte
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	//_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 

+ 36 - 32
models/data_manage/chart_theme/chart_theme.go

@@ -2,14 +2,16 @@ package chart_theme
 
 import (
 	"errors"
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // ChartTheme
 // @Description: 图表主题表
 type ChartTheme struct {
-	ChartThemeId     int       `description:"图表主题类型ID" orm:"column(chart_theme_id);pk"`
+	//ChartThemeId     int       `description:"图表主题类型ID" orm:"column(chart_theme_id);pk"`
+	ChartThemeId     int       `description:"图表主题类型ID" gorm:"column:chart_theme_id;primaryKey"`
 	ChartThemeName   string    `description:"图表主题名称"`
 	ChartThemeTypeId int       `description:"图表主题类型ID"`
 	ChartImage       string    `description:"缩略图"`
@@ -30,10 +32,10 @@ type ChartTheme struct {
 // @return item *ChartTheme
 // @return err error
 func GetChartThemeId(chartThemeId int) (item *ChartTheme, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_theme where chart_theme_id = ? AND is_delete = 0`
-	err = o.Raw(sql, chartThemeId).QueryRow(&item)
-
+	//err = o.Raw(sql, chartThemeId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartThemeId).First(&item).Error
 	return
 }
 
@@ -49,12 +51,13 @@ func (m *ChartTheme) Add() (err error) {
 		err = errors.New("该配置已存在")
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	lastId, err := o.Insert(m)
+	//o := orm.NewOrmUsingDB("data")
+	//lastId, err := o.Insert(m)
+	err = global.DbMap[utils.DbNameIndex].Create(&m).Error
 	if err != nil {
 		return
 	}
-	m.ChartThemeId = int(lastId)
+	//m.ChartThemeId = int(lastId)
 
 	return
 }
@@ -67,8 +70,9 @@ func (m *ChartTheme) Add() (err error) {
 // @param cols []string
 // @return err error
 func (m *ChartTheme) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(m, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(m, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&m).Select(cols).Updates(&m).Error
 	return
 }
 
@@ -79,10 +83,10 @@ func (m *ChartTheme) Update(cols []string) (err error) {
 // @return list []*ChartTheme
 // @return err error
 func GetChartThemeListByTypeId(chartThemeTypeId int) (list []*ChartTheme, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_theme WHERE chart_theme_type_id = ? AND  is_delete=0 ORDER BY chart_theme_id ASC `
-	_, err = o.Raw(sql, chartThemeTypeId).QueryRows(&list)
-
+	//_, err = o.Raw(sql, chartThemeTypeId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartThemeTypeId).Find(&list).Error
 	return
 }
 
@@ -93,10 +97,10 @@ func GetChartThemeListByTypeId(chartThemeTypeId int) (list []*ChartTheme, err er
 // @return list []*ChartTheme
 // @return err error
 func GetAllChartThemeList() (list []*ChartTheme, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_theme WHERE  is_delete=0 ORDER BY chart_theme_id ASC `
-	_, err = o.Raw(sql).QueryRows(&list)
-
+	//_, err = o.Raw(sql).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&list).Error
 	return
 }
 
@@ -125,12 +129,12 @@ type ChartThemeItem struct {
 // @return list []*ChartThemeConfig
 // @return err error
 func GetChartThemeItemList(chartThemeTypeId int) (list []*ChartThemeItem, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT a.*,b.default_chart_theme_id FROM chart_theme a 
          JOIN chart_theme_type b on a.chart_theme_type_id =b.chart_theme_type_id 
          WHERE a.chart_theme_type_id = ? AND a.is_delete=0 ORDER BY a.chart_theme_id ASC `
-	_, err = o.Raw(sql, chartThemeTypeId).QueryRows(&list)
-
+	//_, err = o.Raw(sql, chartThemeTypeId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartThemeTypeId).Find(&list).Error
 	return
 }
 
@@ -142,11 +146,11 @@ func GetChartThemeItemList(chartThemeTypeId int) (list []*ChartThemeItem, err er
 // @return item *ChartTheme
 // @return err error
 func GetSystemChartTheme(chartThemeTypeId int) (item *ChartTheme, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT a.* FROM chart_theme a
          WHERE a.chart_theme_type_id = ? AND a.is_system_theme=1 ORDER BY a.chart_theme_id ASC `
-	err = o.Raw(sql, chartThemeTypeId).QueryRow(&item)
-
+	//err = o.Raw(sql, chartThemeTypeId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartThemeTypeId).First(&item).Error
 	return
 }
 
@@ -191,7 +195,7 @@ type DrawOption struct {
 
 type LineOptions struct {
 	DashStyle string  `json:"dashStyle"`
-	LineWidth float64     `json:"lineWidth"`
+	LineWidth float64 `json:"lineWidth"`
 	LineType  string  `json:"lineType"`
 	Radius    float64 `json:"radius"`
 }
@@ -223,13 +227,13 @@ type NewLineOptions struct {
 }
 
 type LineStyleOptions struct {
-	DashStyle string `json:"dashStyle"`
-	Color     string `json:"color"`
-	LineWidth float64    `json:"lineWidth"`
-	LineType  string `json:"lineType"`
-	Radius    int    `json:"radius"`
-	DataMark  string `json:"dataMark"`
-	MarkType  string `json:"markType"`
-	MarkSize  int    `json:"markSize"`
-	MarkColor string `json:"markColor"`
+	DashStyle string  `json:"dashStyle"`
+	Color     string  `json:"color"`
+	LineWidth float64 `json:"lineWidth"`
+	LineType  string  `json:"lineType"`
+	Radius    int     `json:"radius"`
+	DataMark  string  `json:"dataMark"`
+	MarkType  string  `json:"markType"`
+	MarkSize  int     `json:"markSize"`
+	MarkColor string  `json:"markColor"`
 }

+ 19 - 16
models/data_manage/chart_theme/chart_theme_type.go

@@ -1,14 +1,16 @@
 package chart_theme
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // ChartThemeType
 // @Description: 图表主题类型表
 type ChartThemeType struct {
-	ChartThemeTypeId    int       `description:"图表主题类型ID" orm:"column(chart_theme_type_id);pk"`
+	//ChartThemeTypeId    int       `description:"图表主题类型ID" orm:"column(chart_theme_type_id);pk"`
+	ChartThemeTypeId    int       `description:"图表主题类型ID" gorm:"column:chart_theme_type_id;primaryKey"`
 	ChartTypeName       string    `description:"类型名称"`
 	ChartType           int       `description:"图表类型"`
 	ChartSource         int       `description:"图表来源"`
@@ -25,8 +27,9 @@ type ChartThemeType struct {
 // @param cols []string
 // @return err error
 func (m *ChartThemeType) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(m, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(m, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&m).Select(cols).Updates(&m).Error
 	return
 }
 
@@ -37,10 +40,10 @@ func (m *ChartThemeType) Update(cols []string) (err error) {
 // @return list []*ChartThemeType
 // @return err error
 func GetAllChartThemeTypeList() (list []*ChartThemeType, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_theme_type ORDER BY chart_theme_type_id ASC `
-	_, err = o.Raw(sql).QueryRows(&list)
-
+	//_, err = o.Raw(sql).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&list).Error
 	return
 }
 
@@ -52,10 +55,10 @@ func GetAllChartThemeTypeList() (list []*ChartThemeType, err error) {
 // @return list []*ChartThemeType
 // @return err error
 func GetChartThemeTypeListBySource(source int) (list []*ChartThemeType, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_theme_type WHERE chart_source = ?  ORDER BY chart_theme_type_id ASC `
-	_, err = o.Raw(sql, source).QueryRows(&list)
-
+	//_, err = o.Raw(sql, source).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source).Find(&list).Error
 	return
 }
 
@@ -67,10 +70,10 @@ func GetChartThemeTypeListBySource(source int) (list []*ChartThemeType, err erro
 // @return item *ChartThemeType
 // @return err error
 func GetChartThemeTypeById(chartThemeTypeId int) (item *ChartThemeType, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_theme_type where chart_theme_type_id = ? `
-	err = o.Raw(sql, chartThemeTypeId).QueryRow(&item)
-
+	//err = o.Raw(sql, chartThemeTypeId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartThemeTypeId).First(&item).Error
 	return
 }
 
@@ -82,9 +85,9 @@ func GetChartThemeTypeById(chartThemeTypeId int) (item *ChartThemeType, err erro
 // @return item *ChartThemeType
 // @return err error
 func GetChartThemeTypeByChartTypeAndSource(chartType, source int) (item *ChartThemeType, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_theme_type where chart_type = ? AND chart_source = ? `
-	err = o.Raw(sql, chartType, source).QueryRow(&item)
-
+	//err = o.Raw(sql, chartType, source).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartType, source).First(&item).Error
 	return
 }

+ 14 - 10
models/data_manage/cross_variety/chart_tag.go

@@ -1,15 +1,16 @@
 package cross_variety
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ChartTag
 // @Description: chart_tag 图表标签表
 type ChartTag struct {
-	ChartTagId      int       `orm:"column(chart_tag_id);pk"`
+	//ChartTagId      int       `orm:"column(chart_tag_id);pk"`
+	ChartTagId      int       `gorm:"column:chart_tag_id;primaryKey"`
 	ChartTagName    string    `description:"标签名称"`
 	ChartTagNameEn  string    `description:"标签名称(英文)"`
 	SysUserId       int       `description:"创建人id"`
@@ -26,16 +27,18 @@ type ChartTag struct {
 // @param updateColList []string
 // @return err error
 func (item *ChartTag) Update(updateColList []string) (err error) {
-	to := orm.NewOrmUsingDB("data")
-	_, err = to.Update(item, updateColList...)
+	//to := orm.NewOrmUsingDB("data")
+	//_, err = to.Update(item, updateColList...)
 
+	err = global.DbMap[utils.DbNameIndex].Model(&item).Select(updateColList).Updates(&item).Error
 	return
 }
 
 // Delete 删除
 func (item *ChartTag) Delete() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Delete(item)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Delete(item)
+	err = global.DbMap[utils.DbNameIndex].Delete(&item).Error
 	return
 }
 
@@ -51,9 +54,10 @@ func GetTagListByIdList(idList []int) (items []*ChartTag, err error) {
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := `SELECT * FROM chart_tag WHERE 1 = 1 AND chart_tag_id in (` + utils.GetOrmInReplace(num) + `)`
-	_, err = o.Raw(sql, idList).QueryRows(&items)
-
+	//o := orm.NewOrmUsingDB("data")
+	//sql := `SELECT * FROM chart_tag WHERE 1 = 1 AND chart_tag_id in (` + utils.GetOrmInReplace(num) + `)`
+	//_, err = o.Raw(sql, idList).QueryRows(&items)
+	sql := `SELECT * FROM chart_tag WHERE 1 = 1 AND chart_tag_id in ?`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, idList).Find(&items).Error
 	return
 }

+ 8 - 6
models/data_manage/cross_variety/chart_tag_variety.go

@@ -1,15 +1,16 @@
 package cross_variety
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ChartTagVariety
 // @Description: chart_tag_variety 图表标签品种关系表
 type ChartTagVariety struct {
-	Id                        int       `orm:"column(id);pk"`
+	//Id                        int       `orm:"column(id);pk"`
+	Id                        int       `gorm:"column:id;primaryKey"`
 	ChartTagId                int       `description:"标签id"`
 	ChartVarietyId            int       `description:"品种id"`
 	EdbInfoId                 int       `description:"指标id"`
@@ -32,9 +33,10 @@ func GetChartTagVarietyListByTagAndVariety(chartTagId int, varietyIdList []int)
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := `SELECT * FROM chart_tag_variety WHERE chart_tag_id = ? AND chart_variety_id in (` + utils.GetOrmInReplace(num) + `) `
-	_, err = o.Raw(sql, chartTagId, varietyIdList).QueryRows(&items)
-
+	//o := orm.NewOrmUsingDB("data")
+	//sql := `SELECT * FROM chart_tag_variety WHERE chart_tag_id = ? AND chart_variety_id in (` + utils.GetOrmInReplace(num) + `) `
+	sql := `SELECT * FROM chart_tag_variety WHERE chart_tag_id = ? AND chart_variety_id in ? `
+	//_, err = o.Raw(sql, chartTagId, varietyIdList).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartTagId, varietyIdList).Find(&items).Error
 	return
 }

+ 27 - 23
models/data_manage/cross_variety/chart_variety.go

@@ -1,15 +1,16 @@
 package cross_variety
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ChartVariety
 // @Description: chart_variety 图表品种表
 type ChartVariety struct {
-	ChartVarietyId     int       `orm:"column(chart_variety_id);pk"`
+	//ChartVarietyId     int       `orm:"column(chart_variety_id);pk"`
+	ChartVarietyId     int       `gorm:"column:chart_variety_id;primaryKey"`
 	ChartVarietyName   string    `description:"品种名称"`
 	ChartVarietyNameEn string    `description:"品种名称(英文)"`
 	SysUserId          int       `description:"创建人id"`
@@ -26,10 +27,10 @@ type ChartVariety struct {
 // @return item *ChartVariety
 // @return err error
 func GetVarietyById(id int) (item *ChartVariety, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_variety WHERE chart_variety_id = ?`
-	err = o.Raw(sql, id).QueryRow(&item)
-
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }
 
@@ -41,10 +42,10 @@ func GetVarietyById(id int) (item *ChartVariety, err error) {
 // @return item *ChartVariety
 // @return err error
 func GetVarietyByName(name string) (item *ChartVariety, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_variety WHERE chart_variety_name = ?`
-	err = o.Raw(sql, name).QueryRow(&item)
-
+	//err = o.Raw(sql, name).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, name).First(&item).Error
 	return
 }
 
@@ -55,13 +56,14 @@ func GetVarietyByName(name string) (item *ChartVariety, err error) {
 // @param item *ChartVariety
 // @return err error
 func AddVariety(item *ChartVariety) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	lastId, err := o.Insert(item)
+	//o := orm.NewOrmUsingDB("data")
+	//lastId, err := o.Insert(item)
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
 	if err != nil {
 		return
 	}
 
-	item.ChartVarietyId = int(lastId)
+	//item.ChartVarietyId = int(lastId)
 
 	return
 }
@@ -74,16 +76,17 @@ func AddVariety(item *ChartVariety) (err error) {
 // @param updateColList []string
 // @return err error
 func (item *ChartVariety) Update(updateColList []string) (err error) {
-	to := orm.NewOrmUsingDB("data")
-	_, err = to.Update(item, updateColList...)
-
+	//to := orm.NewOrmUsingDB("data")
+	//_, err = to.Update(item, updateColList...)
+	err = global.DbMap[utils.DbNameIndex].Model(&item).Select(updateColList).Updates(&item).Error
 	return
 }
 
 // Delete 删除
 func (item *ChartVariety) Delete() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Delete(item)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Delete(item)
+	err = global.DbMap[utils.DbNameIndex].Delete(&item).Error
 	return
 }
 
@@ -94,10 +97,10 @@ func (item *ChartVariety) Delete() (err error) {
 // @return items []*ChartVariety
 // @return err error
 func GetVarietyList() (items []*ChartVariety, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM chart_variety WHERE 1 = 1 `
-	_, err = o.Raw(sql).QueryRows(&items)
-
+	//_, err = o.Raw(sql).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&items).Error
 	return
 }
 
@@ -113,9 +116,10 @@ func GetVarietyListByIdList(idList []int) (items []*ChartVariety, err error) {
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := `SELECT * FROM chart_variety WHERE 1 = 1 AND chart_variety_id in (` + utils.GetOrmInReplace(num) + `)`
-	_, err = o.Raw(sql, idList).QueryRows(&items)
-
+	//o := orm.NewOrmUsingDB("data")
+	//sql := `SELECT * FROM chart_variety WHERE 1 = 1 AND chart_variety_id in (` + utils.GetOrmInReplace(num) + `)`
+	sql := `SELECT * FROM chart_variety WHERE 1 = 1 AND chart_variety_id in ?`
+	//_, err = o.Raw(sql, idList).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, idList).Find(&items).Error
 	return
 }

+ 22 - 8
models/data_manage/edb_info.go

@@ -1,13 +1,15 @@
 package data_manage
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
+	"gorm.io/gorm"
 	"time"
 )
 
 type EdbInfo struct {
-	EdbInfoId        int    `orm:"column(edb_info_id);pk"`
+	//EdbInfoId        int    `orm:"column(edb_info_id);pk"`
+	EdbInfoId        int    `gorm:"column:edb_info_id;primaryKey"`
 	EdbInfoType      int    `description:"指标类型,0:普通指标,1:预测指标"`
 	SourceName       string `description:"来源名称"`
 	Source           int    `description:"来源id"`
@@ -43,6 +45,15 @@ type EdbInfo struct {
 	StockCode        string  `description:"证券代码"`
 }
 
+// AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
+func (m *EdbInfo) AfterFind(db *gorm.DB) (err error) {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+	m.LatestDate = utils.GormDateStrToDateStr(m.LatestDate)
+
+	return
+}
+
 type EdbInfoMaxAndMinInfo struct {
 	MinDate     string  `description:"最小日期"`
 	MaxDate     string  `description:"最大日期"`
@@ -52,9 +63,10 @@ type EdbInfoMaxAndMinInfo struct {
 }
 
 func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM edb_info WHERE edb_info_id=? `
-	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	//err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).First(&item).Error
 	return
 }
 
@@ -64,15 +76,17 @@ func GetEdbInfoByIdList(edbInfoIdList []int) (items []*EdbInfo, err error) {
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT * FROM edb_info WHERE edb_info_id in (` + utils.GetOrmInReplace(num) + `) `
-	_, err = o.Raw(sql, edbInfoIdList).QueryRows(&items)
+	//o := orm.NewOrmUsingDB("data")
+	//sql := ` SELECT * FROM edb_info WHERE edb_info_id in (` + utils.GetOrmInReplace(num) + `) `
+	sql := ` SELECT * FROM edb_info WHERE edb_info_id in ?`
+	//_, err = o.Raw(sql, edbInfoIdList).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoIdList).Find(&items).Error
 	return
 }
 
 func GetRefreshEdbInfoFromBase(edbInfoId, source int) (baseEdbInfoArr, calculateInfoArr []*EdbInfo, err error) {
 	calculateList, err := GetEdbInfoCalculateMap(edbInfoId, source)
-	if err != nil && err.Error() != utils.ErrNoRow() {
+	if err != nil && !utils.IsErrNoRow(err) {
 		return
 	}
 	for _, item := range calculateList {

+ 18 - 9
models/data_manage/edb_info_calculate.go

@@ -1,13 +1,13 @@
 package data_manage
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 func GetEdbInfoCalculateMap(edbInfoId, source int) (list []*EdbInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 
 	//calculateTableName := GetEdbInfoCalculateTableName(source)
 
@@ -20,7 +20,8 @@ func GetEdbInfoCalculateMap(edbInfoId, source int) (list []*EdbInfo, err error)
 	sql := ` SELECT b.* FROM edb_info_calculate_mapping AS a
 			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
 			WHERE a.edb_info_id=? ORDER BY sort ASC `
-	_, err = o.Raw(sql, edbInfoId).QueryRows(&list)
+	//_, err = o.Raw(sql, edbInfoId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).Find(&list).Error
 	return
 }
 
@@ -31,19 +32,26 @@ func GetEdbInfoAllCalculateByEdbInfoIdList(edbInfoIdList []int) (list []*EdbInfo
 		return
 	}
 
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
+	//sql := ` SELECT b.* FROM edb_info_calculate_mapping AS a
+	//		 INNER JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
+	//         WHERE a.from_edb_info_id in (` + utils.GetOrmInReplace(num) + `)
+	//		 GROUP BY a.edb_info_id
+	//		 ORDER BY a.edb_info_id ASC `
 	sql := ` SELECT b.* FROM edb_info_calculate_mapping AS a
 			 INNER JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
-             WHERE a.from_edb_info_id in (` + utils.GetOrmInReplace(num) + `)
+             WHERE a.from_edb_info_id in ?
 			 GROUP BY a.edb_info_id
 			 ORDER BY a.edb_info_id ASC `
-	_, err = o.Raw(sql, edbInfoIdList).QueryRows(&list)
+	//_, err = o.Raw(sql, edbInfoIdList).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoIdList).Find(&list).Error
 	return
 }
 
 // EdbInfoCalculateMappingInfo
 type EdbInfoCalculateMappingInfo struct {
-	EdbInfoCalculateMappingId int       `orm:"column(edb_info_calculate_mapping_id);pk"`
+	//EdbInfoCalculateMappingId int       `orm:"column(edb_info_calculate_mapping_id);pk"`
+	EdbInfoCalculateMappingId int       `gorm:"column:edb_info_calculate_mapping_id;primaryKey"`
 	EdbInfoId                 int       `description:"计算指标id"`
 	Source                    int       `description:"计算指标来源"`
 	SourceName                string    `description:"计算指标来源名称"`
@@ -66,10 +74,11 @@ type EdbInfoCalculateMappingInfo struct {
 
 // GetEdbInfoCalculateMappingListByEdbInfoId 根据生成的指标id获取来源的指标id列表
 func GetEdbInfoCalculateMappingListByEdbInfoId(edbInfoId int) (items []*EdbInfoCalculateMappingInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT a.*,b.edb_type as from_edb_type,b.edb_info_type as from_edb_info_type, b.unique_code AS from_unique_code, b.classify_id AS from_classify_id FROM edb_info_calculate_mapping AS a
 			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
 			WHERE a.edb_info_id=? `
-	_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
+	//_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).Find(&items).Error
 	return
 }

+ 5 - 6
models/data_manage/edb_source.go

@@ -1,9 +1,9 @@
 package data_manage
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"strings"
 )
 
@@ -13,7 +13,8 @@ var (
 
 // EdbSource 指标来源表
 type EdbSource struct {
-	EdbSourceId      int    `orm:"column(edb_source_id);pk"`
+	//EdbSourceId      int    `orm:"column(edb_source_id);pk"`
+	EdbSourceId      int    `gorm:"column:edb_source_id;primaryKey"`
 	SourceName       string `description:"指标来源名称"`
 	TableName        string `description:"数据表名"`
 	EdbAddMethod     string `description:"指标新增接口"`
@@ -27,7 +28,6 @@ type EdbSource struct {
 
 // GetEdbSourceItemsByCondition 获取指标来源列表
 func GetEdbSourceItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*EdbSource, err error) {
-	o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -37,7 +37,7 @@ func GetEdbSourceItemsByCondition(condition string, pars []interface{}, fieldArr
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM edb_source WHERE 1=1 %s %s`, fields, condition, order)
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -52,9 +52,8 @@ type EdbSourceChild struct {
 
 // GetEdbSourceItemByCondition 获取指标来源
 func GetEdbSourceItemByCondition(condition string, pars []interface{}) (item *EdbSource, err error) {
-	o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM edb_source WHERE 1=1 %s`, condition)
-	err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars).First(&item).Error
 	return
 }
 

+ 27 - 16
models/data_manage/excel/excel_chart_data.go

@@ -1,14 +1,16 @@
 package excel
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/models"
+	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 type ExcelChartData struct {
-	ExcelChartDataId int `orm:"column(excel_chart_data_id);pk"`
+	//ExcelChartDataId int `orm:"column(excel_chart_data_id);pk"`
+	ExcelChartDataId int `gorm:"column:excel_chart_data_id;primaryKey"`
 	ExcelInfoId      int `description:"表格id"`
 	ExcelChartEdbId  int `description:"指标ID"`
 	ChartInfoId      int `description:"图表id"`
@@ -25,38 +27,43 @@ func (e *ExcelChartData) TableName() string {
 
 // 新增
 func (e *ExcelChartData) Add() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Insert(e)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Insert(e)
+	err = global.DbMap[utils.DbNameIndex].Create(&e).Error
 	return
 }
 
 // 修改
 func (e *ExcelChartData) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(e, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(e, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&e).Select(cols).Updates(&e).Error
 	return
 }
 
 // 删除
 func (e *ExcelChartData) Delete() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Delete(e)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Delete(e)
+	err = global.DbMap[utils.DbNameIndex].Delete(&e).Error
 	return
 }
 
 // 查询
 func GetExcelChartDataByExcelInfoId(excelInfoId int) (list []*ExcelChartData, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
              FROM excel_chart_data
 			 WHERE excel_info_id=? 
             ORDER BY excel_chart_edb_id ASC, data_time desc, excel_chart_data_id ASC `
-	_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&list).Error
 	return
 }
 
 func BatchUpdateChartEdbData(excelInfoId int, excelEdbMap map[int]*ExcelChartEdb, excelDataMap map[int][]*models.EdbDataList) (err error) {
-	o, err := orm.NewOrmUsingDB("data").Begin()
+	//o, err := orm.NewOrmUsingDB("data").Begin()
+	o := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -69,7 +76,8 @@ func BatchUpdateChartEdbData(excelInfoId int, excelEdbMap map[int]*ExcelChartEdb
 	}()
 	//如果有数据则删除所有的数据
 	sql := `delete from excel_chart_data where excel_info_id = ?`
-	_, err = o.Raw(sql, excelInfoId).Exec()
+	//_, err = o.Raw(sql, excelInfoId).Exec()
+	err = o.Exec(sql, excelInfoId).Error
 	if err != nil {
 		return
 	}
@@ -96,7 +104,8 @@ func BatchUpdateChartEdbData(excelInfoId int, excelEdbMap map[int]*ExcelChartEdb
 			addList = append(addList, chartData)
 			// data信息入库
 			if len(addList) > 1000 {
-				_, err = o.InsertMulti(len(addList), addList)
+				//_, err = o.InsertMulti(len(addList), addList)
+				err = o.CreateInBatches(addList, len(addList)).Error
 				if err != nil {
 					return
 				}
@@ -107,7 +116,8 @@ func BatchUpdateChartEdbData(excelInfoId int, excelEdbMap map[int]*ExcelChartEdb
 
 	// data信息入库
 	if len(addList) > 0 {
-		_, err = o.InsertMulti(len(addList), addList)
+		//_, err = o.InsertMulti(len(addList), addList)
+		err = o.CreateInBatches(addList, len(addList)).Error
 		if err != nil {
 			return
 		}
@@ -116,11 +126,12 @@ func BatchUpdateChartEdbData(excelInfoId int, excelEdbMap map[int]*ExcelChartEdb
 }
 
 func GetExcelChartDataByChartInfoId(chartInfoId int) (list []*ExcelChartData, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
              FROM excel_chart_Data
 			 WHERE chart_info_id=? 
              ORDER BY excel_chart_edb_id ASC `
-	_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	//_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId).Find(&list).Error
 	return
 }

+ 86 - 47
models/data_manage/excel/excel_chart_edb.go

@@ -1,17 +1,20 @@
 package excel
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/models"
 	"eta/eta_chart_lib/utils"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"gorm.io/gorm"
 	"strconv"
 	"strings"
 	"time"
 )
 
 type ExcelChartEdb struct {
-	ExcelChartEdbId int       `orm:"column(excel_chart_edb_id);pk"`
+	//ExcelChartEdbId int       `orm:"column(excel_chart_edb_id);pk"`
+	ExcelChartEdbId int       `gorm:"column:excel_chart_edb_id;primaryKey"`
 	ExcelInfoId     int       `description:"表格id"`
 	ChartInfoId     int       `description:"图表id"`
 	EdbCode         string    `description:"指标编码"`
@@ -79,22 +82,25 @@ func (e *ExcelChartEdb) TableName() string {
 
 // 新增
 func (e *ExcelChartEdb) Add() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Insert(e)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Insert(e)
+	err = global.DbMap[utils.DbNameIndex].Create(&e).Error
 	return
 }
 
 // 修改
 func (e *ExcelChartEdb) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(e, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(e, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&e).Select(cols).Updates(&e).Error
 	return
 }
 
 // 删除
 func (e *ExcelChartEdb) Delete() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Delete(e)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Delete(e)
+	err = global.DbMap[utils.DbNameIndex].Delete(&e).Error
 	return
 }
 
@@ -105,7 +111,8 @@ type AddChartEdbAndDataItem struct {
 
 // 同时添加指标和指标数据
 func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *models.ChartInfo, deleteEdbIds []int) (err error) {
-	o, err := orm.NewOrmUsingDB("data").Begin()
+	//o, err := orm.NewOrmUsingDB("data").Begin()
+	o := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -119,8 +126,10 @@ func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chart
 
 	// 先删除原先的绑定的指标
 	if len(deleteEdbIds) > 0 && chartInfo.ChartInfoId > 0 {
-		sql := `DELETE FROM excel_chart_edb WHERE chart_info_id = ? AND excel_chart_edb_id in (` + utils.GetOrmInReplace(len(deleteEdbIds)) + `)`
-		_, err = o.Raw(sql, chartInfo.ChartInfoId, deleteEdbIds).Exec()
+		//sql := `DELETE FROM excel_chart_edb WHERE chart_info_id = ? AND excel_chart_edb_id in (` + utils.GetOrmInReplace(len(deleteEdbIds)) + `)`
+		sql := `DELETE FROM excel_chart_edb WHERE chart_info_id = ? AND excel_chart_edb_id in ?`
+		//_, err = o.Raw(sql, chartInfo.ChartInfoId, deleteEdbIds).Exec()
+		err = o.Exec(sql, chartInfo.ChartInfoId, deleteEdbIds).Error
 		if err != nil {
 			err = fmt.Errorf("删除原先的指标失败:%v", err)
 			return
@@ -141,14 +150,17 @@ func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chart
 	//新增图表
 	chartInfoId := chartInfo.ChartInfoId
 	if chartInfo.ChartInfoId <= 0 {
-		lastId, e := o.Insert(chartInfo)
-		if e != nil {
+		//lastId, e := o.Insert(chartInfo)
+		err = o.Create(&chartInfo).Error
+		if err != nil {
 			err = fmt.Errorf("新增图表失败,AddChartEdbAndData: %v", e)
 			return
 		}
-		chartInfoId = int(lastId)
+		//chartInfoId = int(lastId)
+		chartInfoId = chartInfo.ChartInfoId
 	} else {
-		_, err = o.Update(chartInfo)
+		//_, err = o.Update(chartInfo)
+		err = o.Save(&chartInfo).Error
 		if err != nil {
 			err = fmt.Errorf("更新图表失败,AddChartEdbAndData: %v", e)
 			return
@@ -156,8 +168,10 @@ func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chart
 	}
 
 	//更新图表id
-	sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `) and chart_info_id=0`
-	_, err = o.Raw(sql, chartInfoId, updateIds).Exec()
+	//sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `) and chart_info_id=0`
+	sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in ? and chart_info_id=0`
+	//_, err = o.Raw(sql, chartInfoId, updateIds).Exec()
+	err = o.Exec(sql, chartInfoId, updateIds).Error
 	if err != nil {
 		err = fmt.Errorf("更新图表id失败,AddChartEdbAndData: %v", err)
 		return
@@ -167,30 +181,36 @@ func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chart
 		edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
 		//更新图表关联的指标id
 		sql = `update chart_info set edb_info_ids = ? where chart_info_id = ?`
-		_, err = o.Raw(sql, edbInfoIdStr, chartInfoId).Exec()
+		//_, err = o.Raw(sql, edbInfoIdStr, chartInfoId).Exec()
+		err = o.Exec(sql, edbInfoIdStr, chartInfoId).Error
 	}
 	return
 }
 
-func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dataList []*ExcelChartData) (err error) {
+// func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dataList []*ExcelChartData) (err error) {
+func addChartEdbAndData(o *gorm.DB, chartEdb *ExcelChartEdb, dataList []*ExcelChartData) (err error) {
 	// 图表指标信息入库
 	excelChartEdbId := chartEdb.ExcelChartEdbId
 	if chartEdb.ExcelChartEdbId <= 0 {
-		lastId, e := o.Insert(chartEdb)
+		//lastId, e := o.Insert(chartEdb)
+		e := o.Create(&chartEdb).Error
 		if e != nil {
 			err = fmt.Errorf("新增指标失败,addChartEdbAndData: %v", e)
 			return
 		}
-		excelChartEdbId = int(lastId)
+		//excelChartEdbId = int(lastId)
+		excelChartEdbId = chartEdb.ExcelChartEdbId
 	} else {
-		_, e := o.Update(chartEdb)
+		//_, e := o.Update(chartEdb)
+		e := o.Save(&chartEdb).Error
 		if e != nil {
 			err = fmt.Errorf("更新指标失败,addChartEdbAndData: %v", e)
 			return
 		}
 		//如果有数据则删除所有的数据
 		sql := `delete from excel_chart_data where excel_chart_edb_id = ?`
-		_, err = o.Raw(sql, excelChartEdbId).Exec()
+		//_, err = o.Raw(sql, excelChartEdbId).Exec()
+		err = o.Exec(sql, excelChartEdbId).Error
 		if err != nil {
 			return
 		}
@@ -215,7 +235,8 @@ func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dataList []*Exce
 			addList = append(addList, chartData)
 			// data信息入库
 			if len(addList) > 1000 {
-				_, err = o.InsertMulti(len(addList), addList)
+				//_, err = o.InsertMulti(len(addList), addList)
+				err = o.CreateInBatches(addList, len(addList)).Error
 				if err != nil {
 					return
 				}
@@ -226,7 +247,8 @@ func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dataList []*Exce
 
 	// data信息入库
 	if len(addList) > 0 {
-		_, err = o.InsertMulti(len(addList), addList)
+		//_, err = o.InsertMulti(len(addList), addList)
+		err = o.CreateInBatches(addList, len(addList)).Error
 		if err != nil {
 			return
 		}
@@ -235,53 +257,62 @@ func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dataList []*Exce
 }
 
 func GetExcelChartEdbMappingByExcelInfoId(excelInfoId int) (list []*ExcelChartEdb, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
              FROM excel_chart_edb 
 			 WHERE excel_info_id=? 
              ORDER BY chart_info_id asc, excel_chart_edb_id ASC `
-	_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&list).Error
 	return
 }
 
 func GetExcelChartEdbMappingByExcelInfoIds(excelInfoIds []int) (list []*ExcelChartEdb, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
+	//sql := ` SELECT *
+	//         FROM excel_chart_edb
+	//		 WHERE excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
 	sql := ` SELECT *
              FROM excel_chart_edb 
-			 WHERE excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
-	_, err = o.Raw(sql, excelInfoIds).QueryRows(&list)
+			 WHERE excel_info_id in ?`
+	//_, err = o.Raw(sql, excelInfoIds).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoIds).Find(&list).Error
 	return
 }
 
 func GetExcelChartEdbById(id int) (item *ExcelChartEdb, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_chart_edb WHERE excel_chart_edb_id=? `
-	err = o.Raw(sql, id).QueryRow(&item)
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }
 
 func GetExcelChartEdbMappingByChartInfoId(chartInfoId int) (list []*ExcelChartEdb, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
              FROM excel_chart_edb 
 			 WHERE chart_info_id=? 
              ORDER BY excel_chart_edb_id ASC `
-	_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	//_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId).Find(&list).Error
 	return
 }
 
 func GetExcelInfoByChartInfoId(chartInfoId int) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT i.*
              FROM excel_chart_edb e left join excel_info i on e.excel_info_id=i.excel_info_id
 			 WHERE e.chart_info_id=? limit 1`
-	err = o.Raw(sql, chartInfoId).QueryRow(&item)
+	//err = o.Raw(sql, chartInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartInfoId).First(&item).Error
 	return
 }
 
 // 同时删除指标和指标数据
 func DeleteExcelChartEdbAndData(excelInfoIds []int, chartInfoIds []int) (err error) {
-	o, err := orm.NewOrmUsingDB("data").Begin()
+	//o, err := orm.NewOrmUsingDB("data").Begin()
+	o := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -294,16 +325,20 @@ func DeleteExcelChartEdbAndData(excelInfoIds []int, chartInfoIds []int) (err err
 	}()
 	// 把对应的表格状态改成删除状态
 	//更新图表id
-	sql := `update excel_info set is_delete = 1, modify_time = ? where excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
-	_, err = o.Raw(sql, time.Now(), excelInfoIds).Exec()
+	//sql := `update excel_info set is_delete = 1, modify_time = ? where excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
+	sql := `update excel_info set is_delete = 1, modify_time = ? where excel_info_id in ?`
+	//_, err = o.Raw(sql, time.Now(), excelInfoIds).Exec()
+	err = o.Exec(sql, time.Now(), excelInfoIds).Error
 	if err != nil {
 		err = fmt.Errorf("更新图表id失败,AddChartEdbAndData: %v", err)
 		return
 	}
 	// 把删除图表状态
 	if len(chartInfoIds) > 0 {
-		sql := `DELETE FROM chart_info WHERE  chart_info_id in (` + utils.GetOrmInReplace(len(chartInfoIds)) + `)`
-		_, err = o.Raw(sql, chartInfoIds).Exec()
+		//sql := `DELETE FROM chart_info WHERE  chart_info_id in (` + utils.GetOrmInReplace(len(chartInfoIds)) + `)`
+		sql := `DELETE FROM chart_info WHERE  chart_info_id in ?`
+		//_, err = o.Raw(sql, chartInfoIds).Exec()
+		err = o.Exec(sql, chartInfoIds).Error
 		if err != nil {
 			err = fmt.Errorf("删除原先的指标失败:%v", err)
 			return
@@ -312,15 +347,19 @@ func DeleteExcelChartEdbAndData(excelInfoIds []int, chartInfoIds []int) (err err
 		// todo 如果加入到我的图库中,则删除我的图库中的数据
 	}
 	// 删除原先的绑定的指标
-	sql = `DELETE FROM excel_chart_edb WHERE  excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
-	_, err = o.Raw(sql, excelInfoIds).Exec()
+	//sql = `DELETE FROM excel_chart_edb WHERE  excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
+	//_, err = o.Raw(sql, excelInfoIds).Exec()
+	sql = `DELETE FROM excel_chart_edb WHERE  excel_info_id in ?`
+	err = o.Exec(sql, excelInfoIds).Error
 	if err != nil {
 		err = fmt.Errorf("删除原先的指标失败:%v", err)
 		return
 	}
 	// 删除指标数据
-	sql = `DELETE FROM excel_chart_data WHERE  excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
-	_, err = o.Raw(sql, excelInfoIds).Exec()
+	//sql = `DELETE FROM excel_chart_data WHERE  excel_info_id in (` + utils.GetOrmInReplace(len(excelInfoIds)) + `)`
+	//_, err = o.Raw(sql, excelInfoIds).Exec()
+	sql = `DELETE FROM excel_chart_data WHERE  excel_info_id in ?`
+	err = o.Exec(sql, excelInfoIds).Error
 	if err != nil {
 		err = fmt.Errorf("删除原先的指标失败:%v", err)
 		return
@@ -343,20 +382,20 @@ func DeleteBalanceExcelChartInfoAndData(chartInfoId int) (err error) {
 		}
 	}()
 
-	sql := ` DELETE FROM chart_info WHERE chart_info_id=? `
+	sql := ` DELETE FROM chart_info WHERE chart_info_id = ? `
 	_, err = to.Raw(sql, chartInfoId).Exec()
 	if err != nil {
 		err = fmt.Errorf("删除平衡表图表失败 %s", err.Error())
 		return
 	}
-	sql = ` DELETE FROM  excel_chart_edb WHERE chart_info_id=? `
+	sql = ` DELETE FROM  excel_chart_edb WHERE chart_info_id = ? `
 	_, err = to.Raw(sql, chartInfoId).Exec()
 	if err != nil {
 		err = fmt.Errorf("删除平衡表图表指标失败 %s", err.Error())
 		return
 	}
 	// 删除表格里的数据
-	sql = ` DELETE FROM  excel_chart_data WHERE chart_info_id=? `
+	sql = ` DELETE FROM  excel_chart_data WHERE chart_info_id = ? `
 	_, err = to.Raw(sql, chartInfoId).Exec()
 	if err != nil {
 		err = fmt.Errorf("删除平衡表图表指标失败 %s", err.Error())

+ 65 - 47
models/data_manage/excel/excel_classify.go

@@ -1,15 +1,16 @@
 package excel
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ExcelClassify excel表格分类
 type ExcelClassify struct {
-	ExcelClassifyId   int       `orm:"column(excel_classify_id);pk"`
+	//ExcelClassifyId   int       `orm:"column(excel_classify_id);pk"`
+	ExcelClassifyId   int       `gorm:"column:excel_classify_id;primaryKey"`
 	Source            int       `description:"表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1"`
 	ExcelClassifyName string    `description:"分类名称"`
 	ParentId          int       `description:"父级id"`
@@ -26,28 +27,30 @@ type ExcelClassify struct {
 
 // AddExcelClassify 添加excel分类
 func AddExcelClassify(item *ExcelClassify) (lastId int64, err error) {
-	o := orm.NewOrmUsingDB("data")
-	lastId, err = o.Insert(item)
-	if err != nil {
-		return
-	}
-	item.ExcelClassifyId = int(lastId)
-
+	//o := orm.NewOrmUsingDB("data")
+	//lastId, err = o.Insert(item)
+	//if err != nil {
+	//	return
+	//}
+	//item.ExcelClassifyId = int(lastId)
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
 	return
 }
 
 // GetExcelClassifyCount 获取同级分类下存在同名分类的数量
 func GetExcelClassifyCount(ExcelClassifyName string, parentId, source int) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT COUNT(1) AS count FROM excel_classify WHERE parent_id=? AND source = ? AND excel_classify_name=? AND is_delete=0 `
-	err = o.Raw(sql, parentId, source, ExcelClassifyName).QueryRow(&count)
+	//err = o.Raw(sql, parentId, source, ExcelClassifyName).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId, source, ExcelClassifyName).Scan(&count).Error
 	return
 }
 
 func GetExcelClassifyById(classifyId int) (item *ExcelClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM excel_classify WHERE excel_classify_id=? AND is_delete=0 `
-	err = o.Raw(sql, classifyId).QueryRow(&item)
+	//err = o.Raw(sql, classifyId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }
 
@@ -63,9 +66,11 @@ func GetExcelClassifyByIdList(classifyIdList []int) (items []*ExcelClassify, err
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := `SELECT * FROM excel_classify WHERE excel_classify_id in (` + utils.GetOrmInReplace(num) + `) AND is_delete=0 `
-	_, err = o.Raw(sql, classifyIdList).QueryRows(&items)
+	//o := orm.NewOrmUsingDB("data")
+	//sql := `SELECT * FROM excel_classify WHERE excel_classify_id in (` + utils.GetOrmInReplace(num) + `) AND is_delete=0 `
+	//_, err = o.Raw(sql, classifyIdList).QueryRows(&items)
+	sql := `SELECT * FROM excel_classify WHERE excel_classify_id in ? AND is_delete=0 `
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyIdList).Find(&items).Error
 	return
 }
 
@@ -77,44 +82,49 @@ func GetExcelClassifyByIdList(classifyIdList []int) (items []*ExcelClassify, err
 // @return items []*ExcelClassify
 // @return err error
 func GetExcelClassifyBySourceAndIsJoinPermission(source, isJoinPermission int) (items []*ExcelClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM excel_classify WHERE source = ? AND is_join_permission = ? `
-	_, err = o.Raw(sql, source, isJoinPermission).QueryRows(&items)
-
+	//_, err = o.Raw(sql, source, isJoinPermission).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source, isJoinPermission).Find(&items).Error
 	return
 }
 
 func GetChildClassifyById(classifyId int) (items []*ExcelClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM excel_classify WHERE parent_id=? AND is_delete=0 `
-	_, err = o.Raw(sql, classifyId).QueryRows(&items)
+	//_, err = o.Raw(sql, classifyId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Find(&items).Error
 	return
 }
 
 func GetExcelClassifyByParentId(parentId, source int) (items []*ExcelClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_classify WHERE parent_id=? AND source = ? AND is_delete=0 order by sort asc,excel_classify_id asc`
-	_, err = o.Raw(sql, parentId, source).QueryRows(&items)
+	//_, err = o.Raw(sql, parentId, source).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId, source).Find(&items).Error
 	return
 }
 
 func GetExcelClassifyBySource(source int) (items []*ExcelClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_classify WHERE  source = ? AND is_delete=0 order by sort asc,excel_classify_id asc`
-	_, err = o.Raw(sql, source).QueryRows(&items)
+	//_, err = o.Raw(sql, source).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source).Find(&items).Error
 	return
 }
 
 func GetExcelClassifyBySourceOrderByLevel(source int) (items []*ExcelClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_classify WHERE  source = ? AND is_delete=0 order by level asc, sort asc,excel_classify_id asc`
-	_, err = o.Raw(sql, source).QueryRows(&items)
+	//_, err = o.Raw(sql, source).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source).Find(&items).Error
 	return
 }
 func GetExcelClassifyAll() (items []*ExcelClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_classify WHERE parent_id<>0 AND is_delete=0 order by sort asc,excel_classify_id asc`
-	_, err = o.Raw(sql).QueryRows(&items)
+	//_, err = o.Raw(sql).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&items).Error
 	return
 }
 
@@ -135,58 +145,64 @@ type ExcelClassifyItems struct {
 }
 
 func GetExcelClassifyByCondition(condition string, pars []interface{}) (item *ExcelClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_classify WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 // GetNextExcelClassifyByCondition 获取下一个分类
 func GetNextExcelClassifyByCondition(condition string, pars []interface{}) (item *ExcelClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_classify WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += " ORDER BY sort asc , create_time ASC LIMIT 1 "
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 // GetFirstExcelClassifyByParentId 获取当前父级图表分类下的排序第一条的数据
 func GetFirstExcelClassifyByParentId(parentId int) (item *ExcelClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_classify WHERE parent_id=? AND is_delete=0 order by sort asc,excel_classify_id asc limit 1`
-	err = o.Raw(sql, parentId).QueryRow(&item)
+	//err = o.Raw(sql, parentId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId).First(&item).Error
 	return
 }
 
 // UpdateExcelClassifySortByParentId 根据图表父类id更新排序
 func UpdateExcelClassifySortByParentId(parentId, classifyId, nowSort int, updateSort string, source int) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` update excel_classify set sort = ` + updateSort + ` WHERE parent_id=? and source=? and sort > ? AND is_delete=0 `
 	if classifyId > 0 {
 		sql += ` or ( excel_classify_id > ` + fmt.Sprint(classifyId) + ` and sort= ` + fmt.Sprint(nowSort) + `)`
 	}
-	_, err = o.Raw(sql, parentId, source, nowSort).Exec()
+	//_, err = o.Raw(sql, parentId, source, nowSort).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, parentId, source, nowSort).Error
 	return
 }
 
 // Update 更新图表分类基础信息
 func (ExcelClassify *ExcelClassify) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(ExcelClassify, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(ExcelClassify, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&ExcelClassify).Select(cols).Updates(&ExcelClassify).Error
 	return
 }
 
 // GetExcelClassifyMaxSort 获取图表分类下最大的排序数
 func GetExcelClassifyMaxSort(parentId int, source int) (sort int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT Max(sort) AS sort FROM excel_classify WHERE parent_id=? AND source = ? AND is_delete=0 `
-	err = o.Raw(sql, parentId, source).QueryRow(&sort)
+	//err = o.Raw(sql, parentId, source).QueryRow(&sort)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId, source).Scan(&sort).Error
 	return
 }
 
@@ -197,9 +213,10 @@ type ExcelClassifyView struct {
 }
 
 func GetExcelClassifyViewById(classifyId int) (item *ExcelClassifyView, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM excel_classify WHERE excel_classify_id=? AND is_delete=0 `
-	err = o.Raw(sql, classifyId).QueryRow(&item)
+	//err = o.Raw(sql, classifyId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }
 
@@ -220,9 +237,10 @@ func GetClassifyByIdList(classifyIdList []int) (items []*ExcelClassify, err erro
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := `SELECT * FROM excel_classify WHERE excel_classify_id in (` + utils.GetOrmInReplace(num) + `) AND is_delete=0 `
-	_, err = o.Raw(sql, classifyIdList).QueryRows(&items)
-
+	//o := orm.NewOrmUsingDB("data")
+	//sql := `SELECT * FROM excel_classify WHERE excel_classify_id in (` + utils.GetOrmInReplace(num) + `) AND is_delete=0 `
+	sql := `SELECT * FROM excel_classify WHERE excel_classify_id in ? AND is_delete=0 `
+	//_, err = o.Raw(sql, classifyIdList).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyIdList).Find(&items).Error
 	return
 }

+ 14 - 10
models/data_manage/excel/excel_draft.go

@@ -1,13 +1,15 @@
 package excel
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // ExcelDraft 沙盘推演草稿表
 type ExcelDraft struct {
-	ExcelDraftId int       `orm:"column(excel_draft_id);pk" description:"excel表格草稿记录id"`
+	//ExcelDraftId int       `orm:"column(excel_draft_id);pk" description:"excel表格草稿记录id"`
+	ExcelDraftId int       `gorm:"column:excel_draft_id;primaryKey" description:"excel表格草稿记录id"`
 	ExcelId      int       `description:"excel表格id"`
 	Name         string    `description:"excel表格名称"`
 	Content      string    `description:"excel数据"`
@@ -18,20 +20,22 @@ type ExcelDraft struct {
 
 // AddExcelDraft 添加一个新的excel表格草稿
 func AddExcelDraft(excelDraft *ExcelDraft) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	// 新增草稿
-	id, err := o.Insert(excelDraft)
-	if err != nil {
-		return
-	}
-	excelDraft.ExcelDraftId = int(id)
+	//id, err := o.Insert(excelDraft)
+	//if err != nil {
+	//	return
+	//}
+	//excelDraft.ExcelDraftId = int(id)
+	err = global.DbMap[utils.DbNameIndex].Create(&excelDraft).Error
 	return
 }
 
 // GetLastExcelDraftById 根据沙盘id获取最后一条沙盘草稿详情
 func GetLastExcelDraftById(excelId int) (excelDraft *ExcelDraft, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `select * from excel_draft where excel_id = ? order by excel_draft_id desc `
-	err = o.Raw(sql, excelId).QueryRow(&excelDraft)
+	//err = o.Raw(sql, excelId).QueryRow(&excelDraft)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelId).First(&excelDraft).Error
 	return
 }

+ 30 - 22
models/data_manage/excel/excel_edb_mapping.go

@@ -1,15 +1,16 @@
 package excel
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ExcelEdbMapping excel与指标的关系表
 type ExcelEdbMapping struct {
-	ExcelEdbMappingId int       `orm:"column(excel_edb_mapping_id);pk"`
+	//ExcelEdbMappingId int       `orm:"column(excel_edb_mapping_id);pk"`
+	ExcelEdbMappingId int       `gorm:"column:excel_edb_mapping_id;primaryKey"`
 	ExcelInfoId       int       `description:"excel的id"`
 	Source            int       `description:"表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1"`
 	EdbInfoId         int       `description:"计算指标id"`
@@ -19,35 +20,38 @@ type ExcelEdbMapping struct {
 
 // AddExcelEdbMappingMulti 批量添加excel与指标的关系
 func AddExcelEdbMappingMulti(items []*ExcelEdbMapping) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.InsertMulti(len(items), items)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.InsertMulti(len(items), items)
+	err = global.DbMap[utils.DbNameIndex].CreateInBatches(items, len(items)).Error
 	return
 }
 
 // Add 添加excel与指标的关系
 func (e *ExcelEdbMapping) Add() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Insert(e)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Insert(e)
+	err = global.DbMap[utils.DbNameIndex].Create(&e).Error
 	return
 }
 
 // GetExcelEdbMappingByEdbInfoId 根据指标id获取配置关系
 func GetExcelEdbMappingByEdbInfoId(edbInfoId int) (item *ExcelEdbMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *  FROM excel_edb_mapping WHERE 1=1 AND edb_info_id = ? `
 
-	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	//err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).First(&item).Error
 	return
 }
 
 // GetExcelEdbMappingByExcelInfoId 根据excel的id获取配置关系
 func GetExcelEdbMappingByExcelInfoId(excelInfoId int) (items []*ExcelEdbMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *  FROM excel_edb_mapping AS a 
            join edb_info as b on a.edb_info_id = b.edb_info_id
            WHERE 1=1 AND a.excel_info_id = ? `
-	_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
-
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&items).Error
 	return
 }
 
@@ -71,30 +75,33 @@ type CalculateFormula struct {
 
 // GetAllExcelEdbMappingItemByExcelInfoId 根据品种id获取所有的指标结果集
 func GetAllExcelEdbMappingItemByExcelInfoId(excelInfoId int) (items []*ExcelEdbMappingItem, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//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)
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&items).Error
 	return
 }
 
 // GetNoCustomAnalysisExcelEdbMappingCount 根据指标id获取非自定义分析的关联关系
 func GetNoCustomAnalysisExcelEdbMappingCount(edbInfoId int) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT COUNT(1) AS count FROM excel_edb_mapping a 
                           join excel_info b on a.excel_info_id=b.excel_info_id
                           WHERE edb_info_id=? AND a.source != 4 AND b.is_delete = 0`
-	err = o.Raw(sql, edbInfoId).QueryRow(&count)
+	//err = o.Raw(sql, edbInfoId).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).Scan(&count).Error
 	return
 }
 
 // GetAllExcelEdbMappingByExcelInfoId 根据excel的id获取所有的指标
 func GetAllExcelEdbMappingByExcelInfoId(excelInfoId int) (items []*ExcelEdbMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT a.* FROM  excel_edb_mapping a
          WHERE a.excel_info_id = ? ORDER BY a.excel_edb_mapping_id ASC `
-	_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&items).Error
 	return
 }
 
@@ -105,16 +112,16 @@ func GetAllExcelEdbMappingByExcelInfoId(excelInfoId int) (items []*ExcelEdbMappi
 // @param excelInfoId int
 // @return err error
 func DeleteCustomAnalysisExcelEdbMappingByEdbInfoId(excelInfoId int) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `DELETE FROM excel_edb_mapping WHERE source = ? AND edb_info_id = ? LIMIT 1`
-	_, err = o.Raw(sql, utils.CUSTOM_ANALYSIS_TABLE, excelInfoId).Exec()
-
+	//_, err = o.Raw(sql, utils.CUSTOM_ANALYSIS_TABLE, excelInfoId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, utils.CUSTOM_ANALYSIS_TABLE, excelInfoId).Error
 	return
 }
 
 // GetExcelEdbMappingItemByExcelInfoIdOrKeyword 根据表格ID或关键词获取指标
 func GetExcelEdbMappingItemByExcelInfoIdOrKeyword(excelInfoId int, keyword string) (items []*ExcelEdbMappingItem, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	cond := `b.excel_info_id = ?`
 	pars := make([]interface{}, 0)
 	pars = append(pars, excelInfoId)
@@ -137,6 +144,7 @@ func GetExcelEdbMappingItemByExcelInfoIdOrKeyword(excelInfoId int, keyword strin
 			%s
 		ORDER BY
 			b.excel_edb_mapping_id ASC`, cond)
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	//_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }

+ 153 - 95
models/data_manage/excel/excel_info.go

@@ -1,15 +1,16 @@
 package excel
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ExcelInfo excel表格详情表
 type ExcelInfo struct {
-	ExcelInfoId        int       `orm:"column(excel_info_id);pk"`
+	//ExcelInfoId        int       `orm:"column(excel_info_id);pk"`
+	ExcelInfoId        int       `gorm:"column:excel_info_id;primaryKey"`
 	Source             int       `description:"表格来源,1:excel插件的表格,2:自定义表格,3:混合表格,4:自定义分析,默认:1"`
 	ExcelType          int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
 	ExcelName          string    `description:"表格名称"`
@@ -34,13 +35,15 @@ type ExcelInfo struct {
 
 // Update 更新 excel表格基础信息
 func (excelInfo *ExcelInfo) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(excelInfo, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(excelInfo, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&excelInfo).Select(cols).Updates(&excelInfo).Error
 	return
 }
 
 type MyExcelInfoList struct {
-	ExcelInfoId      int       `orm:"column(excel_info_id);pk"`
+	//ExcelInfoId      int       `orm:"column(excel_info_id);pk"`
+	ExcelInfoId      int       `gorm:"column:excel_info_id;primaryKey"`
 	Source           int       `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
 	ExcelType        int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
 	ExcelName        string    `description:"表格名称"`
@@ -59,7 +62,8 @@ type MyExcelInfoList struct {
 
 // AddExcelInfo 新增表格
 func AddExcelInfo(excelInfo *ExcelInfo, excelEdbMappingList []*ExcelEdbMapping) (err error) {
-	o, err := orm.NewOrmUsingDB("data").Begin()
+	//o, err := orm.NewOrmUsingDB("data").Begin()
+	o := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -71,12 +75,15 @@ func AddExcelInfo(excelInfo *ExcelInfo, excelEdbMappingList []*ExcelEdbMapping)
 		}
 	}()
 	// 表格信息入库
-	lastId, err := o.Insert(excelInfo)
+	//lastId, err := o.Insert(excelInfo)
+	//if err != nil {
+	//	return
+	//}
+	//excelInfo.ExcelInfoId = int(lastId)
+	err = o.Create(&excelInfo).Error
 	if err != nil {
 		return
 	}
-	excelInfo.ExcelInfoId = int(lastId)
-
 	// excel与指标的关联关系
 	dataNum := len(excelEdbMappingList)
 	if dataNum > 0 {
@@ -84,7 +91,8 @@ func AddExcelInfo(excelInfo *ExcelInfo, excelEdbMappingList []*ExcelEdbMapping)
 			v.ExcelInfoId = excelInfo.ExcelInfoId
 			excelEdbMappingList[k] = v
 		}
-		_, err = o.InsertMulti(dataNum, excelEdbMappingList)
+		//_, err = o.InsertMulti(dataNum, excelEdbMappingList)
+		err = o.CreateInBatches(excelEdbMappingList, dataNum).Error
 	}
 
 	return
@@ -92,7 +100,8 @@ func AddExcelInfo(excelInfo *ExcelInfo, excelEdbMappingList []*ExcelEdbMapping)
 
 // EditExcelInfo 编辑表格
 func EditExcelInfo(excelInfo *ExcelInfo, updateExcelInfoParams []string, excelEdbMappingList []*ExcelEdbMapping) (err error) {
-	o, err := orm.NewOrmUsingDB("data").Begin()
+	//o, err := orm.NewOrmUsingDB("data").Begin()
+	o := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -105,14 +114,16 @@ func EditExcelInfo(excelInfo *ExcelInfo, updateExcelInfoParams []string, excelEd
 	}()
 
 	// ETA表格信息变更
-	_, err = o.Update(excelInfo, updateExcelInfoParams...)
+	//_, err = o.Update(excelInfo, updateExcelInfoParams...)
+	err = o.Model(&excelInfo).Select(updateExcelInfoParams).Updates(&excelInfo).Error
 	if err != nil {
 		return
 	}
 
 	// 删除关系表
 	sql := `DELETE FROM excel_edb_mapping WHERE excel_info_id=? `
-	_, err = o.Raw(sql, excelInfo.ExcelInfoId).Exec()
+	//_, err = o.Raw(sql, excelInfo.ExcelInfoId).Exec()
+	err = o.Exec(sql, excelInfo.ExcelInfoId).Error
 
 	// excel与指标的关联关系
 	dataNum := len(excelEdbMappingList)
@@ -121,7 +132,8 @@ func EditExcelInfo(excelInfo *ExcelInfo, updateExcelInfoParams []string, excelEd
 			v.ExcelInfoId = excelInfo.ExcelInfoId
 			excelEdbMappingList[k] = v
 		}
-		_, err = o.InsertMulti(dataNum, excelEdbMappingList)
+		//_, err = o.InsertMulti(dataNum, excelEdbMappingList)
+		err = o.CreateInBatches(excelEdbMappingList, dataNum).Error
 	}
 
 	return
@@ -129,17 +141,18 @@ func EditExcelInfo(excelInfo *ExcelInfo, updateExcelInfoParams []string, excelEd
 
 // GetExcelInfoAll 获取所有表格列表,用于分类展示
 func GetExcelInfoAll() (items []*ExcelClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT excel_info_id,excel_classify_id,excel_name AS excel_classify_name,
              unique_code,sys_user_id,sys_user_real_name,is_join_permission
             FROM excel_info where is_delete=0 ORDER BY sort asc,create_time ASC `
-	_, err = o.Raw(sql).QueryRows(&items)
+	//_, err = o.Raw(sql).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&items).Error
 	return
 }
 
 // GetNoContentExcelInfoAll 获取不含content的表格列表 用于分类展示
 func GetNoContentExcelInfoAll(source, userId int) (items []*ExcelClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT excel_info_id,excel_classify_id,excel_name AS excel_classify_name,
              unique_code,sys_user_id,sys_user_real_name,sort,is_join_permission
             FROM excel_info where is_delete=0 AND source = ?  `
@@ -151,53 +164,59 @@ func GetNoContentExcelInfoAll(source, userId int) (items []*ExcelClassifyItems,
 		pars = append(pars, userId)
 	}
 	sql += `  ORDER BY sort asc,excel_info_id desc `
-	_, err = o.Raw(sql, pars...).QueryRows(&items)
+	//_, err = o.Raw(sql, pars...).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 // GetAllExcelInfoBySource 根据来源获取包含content的表格列表
 func GetAllExcelInfoBySource(source int) (items []*ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info where is_delete=0  AND source = ?  ORDER BY sort asc,create_time desc `
-	_, err = o.Raw(sql, source).QueryRows(&items)
+	//_, err = o.Raw(sql, source).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, source).Find(&items).Error
 	return
 }
 
 // GetExcelInfoById 根据id 获取eta表格详情
 func GetExcelInfoById(excelInfoId int) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_info_id=? AND is_delete=0 `
-	err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	//err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).First(&item).Error
 	return
 }
 
 // GetExcelInfoByUnicode 编码获取表格
 func GetExcelInfoByUnicode(unicode string) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE unique_code = ? AND is_delete = 0 `
-	err = o.Raw(sql, unicode).QueryRow(&item)
+	//err = o.Raw(sql, unicode).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, unicode).First(&item).Error
 	return
 }
 
 func GetExcelInfoViewById(excelInfoId int) (item *ExcelInfoView, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_info_id=? AND is_delete=0 `
-	err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	//err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).First(&item).Error
 	return
 }
 
 func GetExcelInfoCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT COUNT(1) AS count FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 func GetNoContentExcelInfoListByCondition(condition string, pars []interface{}, startSize, pageSize int) (items []*ExcelClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT excel_info_id,excel_classify_id,excel_name AS excel_classify_name,
              unique_code,sys_user_id,sys_user_real_name,sort,is_join_permission FROM excel_info WHERE 1=1 `
 	if condition != "" {
@@ -205,51 +224,57 @@ func GetNoContentExcelInfoListByCondition(condition string, pars []interface{},
 	}
 
 	sql += ` AND is_delete=0 ORDER BY excel_info_id DESC LIMIT ?,? `
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 func GetExcelInfoByCondition(condition string, pars []interface{}) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 // GetNextExcelInfoByCondition 根据条件获取下一个表格
 func GetNextExcelInfoByCondition(condition string, pars []interface{}) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += " ORDER BY sort asc , create_time desc LIMIT 1 "
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 // GetNextExcelInfo 根据分类id获取下一个excel表格
 func GetNextExcelInfo(classifyId, classifySort, source int) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT b.* FROM excel_classify AS a
 			INNER JOIN excel_info AS b ON a.excel_classify_id=b.excel_classify_id
 			WHERE (a.sort>? OR (a.sort=? and a.excel_classify_id>?) ) AND a.is_delete=0 AND b.is_delete=0
 			AND a.source = ? AND b.source = ? 
 			ORDER BY a.sort ASC,b.sort asc,b.create_time desc
 			LIMIT 1 `
-	err = o.Raw(sql, classifySort, classifySort, classifyId, source, source).QueryRow(&item)
+	//err = o.Raw(sql, classifySort, classifySort, classifyId, source, source).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifySort, classifySort, classifyId, source, source).First(&item).Error
 	return
 }
 
 // EditExcelInfoImage 修改excel表格的图片
 func EditExcelInfoImage(excelInfoId int, imageUrl string) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 
 	sql := ` UPDATE  excel_info SET excel_image=?, modify_time = NOW() WHERE excel_info_id = ? AND is_delete=0 `
-	_, err = o.Raw(sql, imageUrl, excelInfoId).Exec()
+	//_, err = o.Raw(sql, imageUrl, excelInfoId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, imageUrl, excelInfoId).Error
 	if err != nil {
 		fmt.Println("EditExcelInfoImage Err:", err.Error())
 		return err
@@ -260,35 +285,39 @@ func EditExcelInfoImage(excelInfoId int, imageUrl string) (err error) {
 
 // GetExcelInfoByUniqueCode 根据unique_code来获取excel表格详情
 func GetExcelInfoByUniqueCode(uniqueCode string) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE unique_code=? AND is_delete=0 `
-	err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	//err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, uniqueCode).First(&item).Error
 	return
 }
 
 // GetFirstExcelInfoByClassifyId 获取当前分类下,且排序数相同 的排序第一条的数据
 func GetFirstExcelInfoByClassifyId(classifyId int) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_classify_id=? AND is_delete=0 order by sort asc,excel_info_id desc limit 1`
-	err = o.Raw(sql, classifyId).QueryRow(&item)
+	//err = o.Raw(sql, classifyId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }
 
 // UpdateExcelInfoSortByClassifyId 根据表格id更新排序
 func UpdateExcelInfoSortByClassifyId(classifyId, nowSort, prevExcelInfoId int, updateSort string, source int) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` update excel_info set sort = ` + updateSort + ` WHERE excel_classify_id=? AND source=? AND is_delete=0 AND ( sort > ? `
 	// todo 前一个兄弟节点后移
 	if prevExcelInfoId > 0 {
 		sql += ` or (excel_info_id < ` + fmt.Sprint(prevExcelInfoId) + ` and sort = ` + fmt.Sprint(nowSort) + `)`
 	}
 	sql += `)`
-	_, err = o.Raw(sql, classifyId, source, nowSort).Exec()
+	//_, err = o.Raw(sql, classifyId, source, nowSort).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, classifyId, source, nowSort).Error
 	return
 }
 
 type ExcelInfoView struct {
-	ExcelInfoId       int    `orm:"column(excel_info_id);pk"`
+	//ExcelInfoId       int    `orm:"column(excel_info_id);pk"`
+	ExcelInfoId       int    `gorm:"column:excel_info_id;primaryKey"`
 	ExcelName         string `description:"来源名称"`
 	ExcelClassifyId   int    `description:"表格分类id"`
 	ExcelClassifyName string `description:"表格名称"`
@@ -321,15 +350,16 @@ type ExcelInfoView struct {
 
 // GetExcelInfoByClassifyIdAndName 根据分类id和表格名获取表格信息
 func GetExcelInfoByClassifyIdAndName(classifyId int, excelName string) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_classify_id = ? and excel_name=? AND is_delete=0 `
-	err = o.Raw(sql, classifyId, excelName).QueryRow(&item)
+	//err = o.Raw(sql, classifyId, excelName).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId, excelName).First(&item).Error
 	return
 }
 
 // GetNoContentExcelListByCondition 获取没有content的excel表格列表数据
 func GetNoContentExcelListByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*MyExcelInfoList, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//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,is_join_permission
 FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
@@ -337,76 +367,84 @@ FROM excel_info WHERE 1=1 AND is_delete=0 `
 	}
 	//sql += " ORDER BY sort ASC,chart_info_id DESC LIMIT ?,? "
 	sql += " ORDER BY create_time DESC LIMIT ?,? "
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	pars = append(pars, pageSize, startSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&item).Error
 	return
 }
 
 func GetExcelListCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT COUNT(1) AS count FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 // GetExcelViewInfoByExcelInfoId 根据excelInfoId 获取ETA表格详情
 func GetExcelViewInfoByExcelInfoId(excelInfoId int) (item *MyExcelInfoList, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//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,is_join_permission FROM excel_info WHERE excel_info_id = ? AND is_delete=0 `
-	err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	//err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).First(&item).Error
 	return
 }
 
 // GetExcelInfoCountByClassifyId 根据分类id获取名下表格数量
 func GetExcelInfoCountByClassifyId(classifyId int) (total int64, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT count(1) total FROM excel_info WHERE excel_classify_id = ? AND is_delete=0 `
-	err = o.Raw(sql, classifyId).QueryRow(&total)
+	//err = o.Raw(sql, classifyId).QueryRow(&total)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Count(&total).Error
 	return
 }
 
 // UpdateExcelInfoClassifyId 更改表格分类
 func UpdateExcelInfoClassifyId(classifyId, excelInfoId int) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` update excel_info set excel_classify_id = ? WHERE excel_info_id=? `
-	_, err = o.Raw(sql, classifyId, excelInfoId).Exec()
-
+	//_, err = o.Raw(sql, classifyId, excelInfoId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, classifyId, excelInfoId).Error
 	return
 }
 
 // GetNoContentExcelInfoByName 根据名称 获取eta表格详情
 func GetNoContentExcelInfoByName(excelName string, source int) (item *MyExcelInfoList, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//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,is_join_permission 
  FROM excel_info WHERE excel_name = ? AND source = ? AND is_delete=0 `
-	err = o.Raw(sql, excelName, source).QueryRow(&item)
-
+	//err = o.Raw(sql, excelName, source).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelName, source).First(&item).Error
 	return
 }
 
 // GetNoContentExcelInfoByUniqueCode 根据unique_code来获取excel表格详情
 func GetNoContentExcelInfoByUniqueCode(uniqueCode string) (item *MyExcelInfoList, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//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,is_join_permission 
  FROM excel_info WHERE unique_code=? AND is_delete=0 `
-	err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	//err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, uniqueCode).First(&item).Error
 	return
 }
 
 // GetNoContentExcelInfoByExcelId 根据表格id来获取excel表格详情
 func GetNoContentExcelInfoByExcelId(excelInfoId int) (item *MyExcelInfoList, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//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,is_join_permission 
  FROM excel_info WHERE excel_info_id=? AND is_delete=0 `
-	err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	//err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).First(&item).Error
 	return
 }
 
 // AddExcelInfoAndSheet 新增excel
 func AddExcelInfoAndSheet(excelInfo *ExcelInfo, sheetParamsList []AddExcelSheetParams) (err error) {
-	o, err := orm.NewOrmUsingDB("data").Begin()
+	//o, err := orm.NewOrmUsingDB("data").Begin()
+	o := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -419,11 +457,15 @@ func AddExcelInfoAndSheet(excelInfo *ExcelInfo, sheetParamsList []AddExcelSheetP
 	}()
 
 	// 表格信息入库
-	lastId, err := o.Insert(excelInfo)
+	//lastId, err := o.Insert(excelInfo)
+	//if err != nil {
+	//	return
+	//}
+	//excelInfo.ExcelInfoId = int(lastId)
+	err = o.Create(&excelInfo).Error
 	if err != nil {
 		return
 	}
-	excelInfo.ExcelInfoId = int(lastId)
 
 	// sheet信息入库
 	for _, sheetInfo := range sheetParamsList {
@@ -442,12 +484,13 @@ func AddExcelInfoAndSheet(excelInfo *ExcelInfo, sheetParamsList []AddExcelSheetP
 			ModifyTime:   time.Now(),
 			CreateTime:   time.Now(),
 		}
-		sheetId, tmpErr := o.Insert(excelSheetInfo)
+		//sheetId, tmpErr := o.Insert(excelSheetInfo)
+		tmpErr := o.Create(&excelSheetInfo).Error
 		if tmpErr != nil {
 			err = tmpErr
 			return
 		}
-		excelSheetInfo.ExcelSheetId = int(sheetId)
+		//excelSheetInfo.ExcelSheetId = int(sheetId)
 
 		// data信息入库
 		if dataNum > 0 {
@@ -455,7 +498,8 @@ func AddExcelInfoAndSheet(excelInfo *ExcelInfo, sheetParamsList []AddExcelSheetP
 				sheetInfo.DataList[k].ExcelSheetId = excelSheetInfo.ExcelSheetId
 				sheetInfo.DataList[k].ExcelInfoId = excelSheetInfo.ExcelInfoId
 			}
-			_, tmpErr = o.InsertMulti(dataNum, sheetInfo.DataList)
+			//_, tmpErr = o.InsertMulti(dataNum, sheetInfo.DataList)
+			tmpErr = o.CreateInBatches(sheetInfo.DataList, dataNum).Error
 			if tmpErr != nil {
 				err = tmpErr
 				return
@@ -468,7 +512,8 @@ func AddExcelInfoAndSheet(excelInfo *ExcelInfo, sheetParamsList []AddExcelSheetP
 
 // SaveExcelInfoAndSheet 编辑保存
 func SaveExcelInfoAndSheet(excelInfo *ExcelInfo, updateExcelInfoParam []string, sheetParamsList []AddExcelSheetParams) (err error) {
-	o, err := orm.NewOrmUsingDB("data").Begin()
+	//o, err := orm.NewOrmUsingDB("data").Begin()
+	o := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
@@ -481,21 +526,24 @@ func SaveExcelInfoAndSheet(excelInfo *ExcelInfo, updateExcelInfoParam []string,
 	}()
 
 	// 表格信息入库
-	_, err = o.Update(excelInfo, updateExcelInfoParam...)
+	//_, err = o.Update(excelInfo, updateExcelInfoParam...)
+	err = o.Model(&excelInfo).Select(updateExcelInfoParam).Updates(&excelInfo).Error
 	if err != nil {
 		return
 	}
 
 	// 先删除历史的sheet信息
 	sql := `DELETE FROM excel_sheet WHERE excel_info_id = ?`
-	_, err = o.Raw(sql, excelInfo.ExcelInfoId).Exec()
+	//_, err = o.Raw(sql, excelInfo.ExcelInfoId).Exec()
+	err = o.Exec(sql, excelInfo.ExcelInfoId).Error
 	if err != nil {
 		return
 	}
 
 	// 再删除历史sheet中的cell data信息
 	sql = `DELETE FROM excel_sheet_data WHERE excel_info_id = ?`
-	_, err = o.Raw(sql, excelInfo.ExcelInfoId).Exec()
+	//_, err = o.Raw(sql, excelInfo.ExcelInfoId).Exec()
+	err = o.Exec(sql, excelInfo.ExcelInfoId).Error
 	if err != nil {
 		return
 	}
@@ -517,12 +565,13 @@ func SaveExcelInfoAndSheet(excelInfo *ExcelInfo, updateExcelInfoParam []string,
 			ModifyTime:   time.Now(),
 			CreateTime:   time.Now(),
 		}
-		sheetId, tmpErr := o.Insert(excelSheetInfo)
+		//sheetId, tmpErr := o.Insert(excelSheetInfo)
+		tmpErr := o.Create(&excelSheetInfo).Error
 		if tmpErr != nil {
 			err = tmpErr
 			return
 		}
-		excelSheetInfo.ExcelSheetId = int(sheetId)
+		//excelSheetInfo.ExcelSheetId = int(sheetId)
 
 		// data信息入库
 		if dataNum > 0 {
@@ -530,7 +579,8 @@ func SaveExcelInfoAndSheet(excelInfo *ExcelInfo, updateExcelInfoParam []string,
 				sheetInfo.DataList[k].ExcelSheetId = excelSheetInfo.ExcelSheetId
 				sheetInfo.DataList[k].ExcelInfoId = excelSheetInfo.ExcelInfoId
 			}
-			_, tmpErr = o.InsertMulti(dataNum, sheetInfo.DataList)
+			//_, tmpErr = o.InsertMulti(dataNum, sheetInfo.DataList)
+			tmpErr = o.CreateInBatches(sheetInfo.DataList, dataNum).Error
 			if tmpErr != nil {
 				err = tmpErr
 				return
@@ -551,9 +601,10 @@ type BatchRefreshExcelReq struct {
 
 // GetExcelMaxSortByClassifyId 获取当前分类下,且排序数最大的excel
 func GetExcelMaxSortByClassifyId(classifyId int, source int) (sort int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT Max(sort) AS sort FROM excel_info WHERE excel_classify_id=? AND source = ? AND is_delete=0 order by sort desc,excel_info_id desc limit 1`
-	err = o.Raw(sql, classifyId, source).QueryRow(&sort)
+	//err = o.Raw(sql, classifyId, source).QueryRow(&sort)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId, source).Scan(&sort).Error
 	return
 }
 
@@ -567,10 +618,11 @@ func GetNoContentExcelListByExcelInfoIdList(excelInfoIdList []string) (items []*
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT * FROM excel_info WHERE excel_info_id in (` + utils.GetOrmInReplace(num) + `) order by excel_info_id DESC `
-	_, err = o.Raw(sql, excelInfoIdList).QueryRows(&items)
-
+	//o := orm.NewOrmUsingDB("data")
+	//sql := ` SELECT * FROM excel_info WHERE excel_info_id in (` + utils.GetOrmInReplace(num) + `) order by excel_info_id DESC `
+	//_, err = o.Raw(sql, excelInfoIdList).QueryRows(&items)
+	sql := ` SELECT * FROM excel_info WHERE excel_info_id in ? order by excel_info_id DESC `
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoIdList).Find(&items).Error
 	return
 }
 
@@ -584,10 +636,11 @@ func GetNoContentExcelListByUserId(userIdList []int) (items []*MyExcelInfoList,
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT * FROM excel_info WHERE excel_info_id in (` + utils.GetOrmInReplace(num) + `) order by excel_info_id DESC `
-	_, err = o.Raw(sql, userIdList).QueryRows(&items)
-
+	//o := orm.NewOrmUsingDB("data")
+	//sql := ` SELECT * FROM excel_info WHERE excel_info_id in (` + utils.GetOrmInReplace(num) + `) order by excel_info_id DESC `
+	//_, err = o.Raw(sql, userIdList).QueryRows(&items)
+	sql := ` SELECT * FROM excel_info WHERE excel_info_id in ? order by excel_info_id DESC `
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, userIdList).Find(&items).Error
 	return
 }
 
@@ -604,9 +657,11 @@ func ModifyExcelInfoUserIdByCodeList(excelIdList []string, userId int, userName
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := `UPDATE excel_info SET sys_user_id=?,sys_user_real_name=? WHERE excel_info_id in (` + utils.GetOrmInReplace(num) + `) `
-	_, err = o.Raw(sql, userId, userName, excelIdList).Exec()
+	//o := orm.NewOrmUsingDB("data")
+	//sql := `UPDATE excel_info SET sys_user_id=?,sys_user_real_name=? WHERE excel_info_id in (` + utils.GetOrmInReplace(num) + `) `
+	sql := `UPDATE excel_info SET sys_user_id=?,sys_user_real_name=? WHERE excel_info_id in ? `
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, userId, userName, excelIdList).Error
+	//_, err = o.Raw(sql, userId, userName, excelIdList).Exec()
 	return
 }
 
@@ -623,15 +678,18 @@ func ModifyExcelInfoUserIdByOldUserId(oldUserIdList []int, userId int, userName
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := `UPDATE excel_info SET sys_user_id=?,sys_user_real_name=? WHERE is_delete=0 AND sys_user_id in (` + utils.GetOrmInReplace(num) + `) `
-	_, err = o.Raw(sql, userId, userName, oldUserIdList).Exec()
+	//o := orm.NewOrmUsingDB("data")
+	//sql := `UPDATE excel_info SET sys_user_id=?,sys_user_real_name=? WHERE is_delete=0 AND sys_user_id in (` + utils.GetOrmInReplace(num) + `) `
+	sql := `UPDATE excel_info SET sys_user_id=?,sys_user_real_name=? WHERE is_delete=0 AND sys_user_id in ?`
+	//_, err = o.Raw(sql, userId, userName, oldUserIdList).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, userId, userName, oldUserIdList).Error
 	return
 }
 
 // ExcelInfoDetail excel表格详情(前端使用)
 type ExcelInfoDetail struct {
-	ExcelInfoId     int         `orm:"column(excel_info_id);pk"`
+	//ExcelInfoId     int         `orm:"column(excel_info_id);pk"`
+	ExcelInfoId     int         `gorm:"column:excel_info_id;primaryKey"`
 	Source          int         `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
 	ExcelType       int         `description:"表格类型,1:指标列,2:日期列,默认:1"`
 	ExcelName       string      `description:"表格名称"`

+ 24 - 16
models/data_manage/excel/excel_sheet.go

@@ -1,13 +1,15 @@
 package excel
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // ExcelSheet excel表格详情表
 type ExcelSheet struct {
-	ExcelSheetId int       `orm:"column(excel_sheet_id);pk"`
+	//ExcelSheetId int       `orm:"column(excel_sheet_id);pk"`
+	ExcelSheetId int       `gorm:"column:excel_sheet_id;primaryKey"`
 	ExcelInfoId  int       `description:"excel的id"`
 	SheetName    string    `description:"sheet名称"`
 	PageNum      int       `description:"总页码数"`
@@ -21,38 +23,41 @@ type ExcelSheet struct {
 
 // Update 更新 excel表格的sheet基础信息
 func (excelSheet *ExcelSheet) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(excelSheet, cols...)
-
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(excelSheet, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&excelSheet).Select(cols).Updates(&excelSheet).Error
 	return
 }
 
 // AddExcelSheet 新增excel表格的sheet基础信息
 func AddExcelSheet(excelInfo *ExcelSheet) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	// 表格信息入库
-	lastId, err := o.Insert(excelInfo)
+	//lastId, err := o.Insert(excelInfo)
+	err = global.DbMap[utils.DbNameIndex].Create(&excelInfo).Error
 	if err != nil {
 		return
 	}
-	excelInfo.ExcelInfoId = int(lastId)
+	//excelInfo.ExcelInfoId = int(lastId)
 
 	return
 }
 
 // GetAllSheetList 根据excel_id获取所有的sheet
 func GetAllSheetList(excelInfoId int) (item []*ExcelSheet, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
 FROM excel_sheet WHERE 1=1 AND excel_info_id = ? `
 	sql += " ORDER BY sort asc "
-	_, err = o.Raw(sql, excelInfoId).QueryRows(&item)
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&item).Error
 	return
 }
 
 // SheetItem excel表格详情表
 type SheetItem struct {
-	ExcelSheetId int             `orm:"column(excel_sheet_id);pk" json:"-"`
+	//ExcelSheetId int             `orm:"column(excel_sheet_id);pk" json:"-"`
+	ExcelSheetId int             `gorm:"column:excel_sheet_id;primaryKey" json:"-"`
 	ExcelInfoId  int             `description:"excel的id"  json:"-"`
 	SheetName    string          `description:"sheet名称"`
 	PageNum      int             `description:"数据总页码数"`
@@ -67,27 +72,30 @@ type SheetItem struct {
 
 // GetAllSheetItemList 根据excel_id获取所有的sheet详情
 func GetAllSheetItemList(excelInfoId int) (item []*SheetItem, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
 FROM excel_sheet WHERE 1=1 AND excel_info_id = ? `
 	sql += " ORDER BY sort asc "
-	_, err = o.Raw(sql, excelInfoId).QueryRows(&item)
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&item).Error
 	return
 }
 
 // GetAllNoConfigSheetItemList 根据excel_id获取所有的sheet详情
 func GetAllNoConfigSheetItemList(excelInfoId int) (item []*SheetItem, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//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)
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&item).Error
 	return
 }
 
 // AddExcelSheetParams excel表格详情表
 type AddExcelSheetParams struct {
-	ExcelSheetId int               `orm:"column(excel_sheet_id);pk"`
+	//ExcelSheetId int               `orm:"column(excel_sheet_id);pk"`
+	ExcelSheetId int               `gorm:"column:excel_sheet_id;primaryKey"`
 	ExcelInfoId  int               `description:"excel的id"`
 	SheetName    string            `description:"sheet名称"`
 	Index        string            `description:"excel数据中的index"`

+ 19 - 15
models/data_manage/excel/excel_sheet_data.go

@@ -1,14 +1,15 @@
 package excel
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ExcelSheetData excel表格详情表
 type ExcelSheetData struct {
-	ExcelDataId  int       `orm:"column(excel_data_id);pk"`
+	//ExcelDataId  int       `orm:"column(excel_data_id);pk"`
+	ExcelDataId  int       `gorm:"column:excel_data_id;primaryKey"`
 	ExcelInfoId  int       `description:"数据归属的excel_info的id"`
 	ExcelSheetId int       `description:"数据归属sheet"`
 	Sort         int       `description:"数据排序"`
@@ -19,21 +20,22 @@ type ExcelSheetData struct {
 
 // Update 更新 excel表格的sheet基础信息
 func (ExcelSheetData *ExcelSheetData) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(ExcelSheetData, cols...)
-
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(ExcelSheetData, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&ExcelSheetData).Select(cols).Updates(&ExcelSheetData).Error
 	return
 }
 
 // AddExcelSheetData 新增excel表格的sheet基础信息
 func AddExcelSheetData(excelInfo *ExcelSheetData) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	// 表格信息入库
-	lastId, err := o.Insert(excelInfo)
+	//lastId, err := o.Insert(excelInfo)
+	err = global.DbMap[utils.DbNameIndex].Create(&excelInfo).Error
 	if err != nil {
 		return
 	}
-	excelInfo.ExcelInfoId = int(lastId)
+	//excelInfo.ExcelInfoId = int(lastId)
 
 	return
 }
@@ -44,20 +46,22 @@ func GetSheetDataListBySheetIdListAndPage(excelSheetIdList []int, page int) (ite
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
+	//	sql := ` SELECT *
+	//FROM excel_sheet_data WHERE 1=1 AND excel_sheet_id in (` + utils.GetOrmInReplace(num) + `) AND sort = ? `
 	sql := ` SELECT *
-FROM excel_sheet_data WHERE 1=1 AND excel_sheet_id in (` + utils.GetOrmInReplace(num) + `) AND sort = ? `
-	_, err = o.Raw(sql, excelSheetIdList, page).QueryRows(&items)
-
+FROM excel_sheet_data WHERE 1=1 AND excel_sheet_id in ? AND sort = ? `
+	//_, err = o.Raw(sql, excelSheetIdList, page).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelSheetIdList, page).Find(&items).Error
 	return
 }
 
 // GetAllSheetDataListByExcelInfoId 根据表格id获取所有的sheet的所有数据详情
 func GetAllSheetDataListByExcelInfoId(excelInfoId int) (items []*ExcelSheetData, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
 FROM excel_sheet_data WHERE 1=1 AND excel_info_id = ? ORDER BY sort ASC `
-	_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
-
+	//_, err = o.Raw(sql, excelInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).Find(&items).Error
 	return
 }

+ 66 - 46
models/data_manage/factor_edb_series.go

@@ -2,9 +2,9 @@ package data_manage
 
 import (
 	"encoding/json"
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"strings"
 	"time"
 )
@@ -17,7 +17,8 @@ const (
 
 // FactorEdbSeries 因子指标系列表
 type FactorEdbSeries struct {
-	FactorEdbSeriesId int       `orm:"column(factor_edb_series_id);pk"`
+	//FactorEdbSeriesId int       `orm:"column(factor_edb_series_id);pk"`
+	FactorEdbSeriesId int       `gorm:"column:factor_edb_series_id;primaryKey"`
 	SeriesName        string    `description:"系列名称"`
 	EdbInfoType       int       `description:"关联指标类型:0-普通指标;1-预测指标"`
 	CalculateStep     string    `description:"计算步骤-JSON"`
@@ -53,12 +54,13 @@ func (m *FactorEdbSeries) Cols() FactorEdbSeriesCols {
 }
 
 func (m *FactorEdbSeries) Create() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	id, err := o.Insert(m)
-	if err != nil {
-		return
-	}
-	m.FactorEdbSeriesId = int(id)
+	//o := orm.NewOrmUsingDB("data")
+	//id, err := o.Insert(m)
+	//if err != nil {
+	//	return
+	//}
+	//m.FactorEdbSeriesId = int(id)
+	err = global.DbMap[utils.DbNameIndex].Create(&m).Error
 	return
 }
 
@@ -66,21 +68,24 @@ func (m *FactorEdbSeries) CreateMulti(items []*FactorEdbSeries) (err error) {
 	if len(items) == 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.InsertMulti(len(items), items)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.InsertMulti(len(items), items)
+	err = global.DbMap[utils.DbNameIndex].CreateInBatches(items, len(items)).Error
 	return
 }
 
 func (m *FactorEdbSeries) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(m, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(m, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&m).Select(cols).Updates(&m).Error
 	return
 }
 
 func (m *FactorEdbSeries) Remove() (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
-	_, err = o.Raw(sql, m.FactorEdbSeriesId).Exec()
+	//_, err = o.Raw(sql, m.FactorEdbSeriesId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, m.FactorEdbSeriesId).Error
 	return
 }
 
@@ -88,39 +93,44 @@ func (m *FactorEdbSeries) MultiRemove(ids []int) (err error) {
 	if len(ids) == 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
-	_, err = o.Raw(sql, ids).Exec()
+	//o := orm.NewOrmUsingDB("data")
+	//sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	//_, err = o.Raw(sql, ids).Exec()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN ?`, m.TableName(), m.Cols().PrimaryId)
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, ids).Error
 	return
 }
 
 func (m *FactorEdbSeries) GetItemById(id int) (item *FactorEdbSeries, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
-	err = o.Raw(sql, id).QueryRow(&item)
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }
 
 func (m *FactorEdbSeries) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *FactorEdbSeries, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	order := ``
 	if orderRule != "" {
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
-	err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
+	//err = o.Raw(sql, pars).QueryRow(&item)
 	return
 }
 
 func (m *FactorEdbSeries) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 func (m *FactorEdbSeries) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*FactorEdbSeries, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -130,12 +140,13 @@ func (m *FactorEdbSeries) GetItemsByCondition(condition string, pars []interface
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
+	//_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
 
 func (m *FactorEdbSeries) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*FactorEdbSeries, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -145,7 +156,9 @@ func (m *FactorEdbSeries) GetPageItemsByCondition(condition string, pars []inter
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -190,12 +203,13 @@ func (m *FactorEdbSeries) CreateSeriesAndMapping(item *FactorEdbSeries, mappings
 		err = fmt.Errorf("series is nil")
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	tx, e := o.Begin()
-	if e != nil {
-		err = fmt.Errorf("orm begin err: %v", e)
-		return
-	}
+	//o := orm.NewOrmUsingDB("data")
+	//tx, e := o.Begin()
+	tx := global.DbMap[utils.DbNameIndex].Begin()
+	//if e != nil {
+	//	err = fmt.Errorf("orm begin err: %v", e)
+	//	return
+	//}
 	defer func() {
 		if err != nil {
 			_ = tx.Rollback()
@@ -204,19 +218,21 @@ func (m *FactorEdbSeries) CreateSeriesAndMapping(item *FactorEdbSeries, mappings
 		_ = tx.Commit()
 	}()
 
-	id, e := tx.Insert(item)
+	//id, e := tx.Insert(item)
+	e := tx.Create(&item).Error
 	if e != nil {
 		err = fmt.Errorf("insert series err: %v", e)
 		return
 	}
-	seriesId = int(id)
-	item.FactorEdbSeriesId = seriesId
+	//seriesId = int(id)
+	//item.FactorEdbSeriesId = seriesId
 
 	if len(mappings) > 0 {
 		for _, v := range mappings {
 			v.FactorEdbSeriesId = seriesId
 		}
-		_, e = tx.InsertMulti(200, mappings)
+		e = tx.CreateInBatches(mappings, 200).Error
+		//_, e = tx.InsertMulti(200, mappings)
 		if e != nil {
 			err = fmt.Errorf("insert multi mapping err: %v", e)
 			return
@@ -231,12 +247,13 @@ func (m *FactorEdbSeries) EditSeriesAndMapping(item *FactorEdbSeries, mappings [
 		err = fmt.Errorf("series is nil")
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	tx, e := o.Begin()
-	if e != nil {
-		err = fmt.Errorf("orm begin err: %v", e)
-		return
-	}
+	//o := orm.NewOrmUsingDB("data")
+	//tx, e := o.Begin()
+	//if e != nil {
+	//	err = fmt.Errorf("orm begin err: %v", e)
+	//	return
+	//}
+	tx := global.DbMap[utils.DbNameIndex].Begin()
 	defer func() {
 		if err != nil {
 			_ = tx.Rollback()
@@ -245,7 +262,8 @@ func (m *FactorEdbSeries) EditSeriesAndMapping(item *FactorEdbSeries, mappings [
 		_ = tx.Commit()
 	}()
 
-	_, e = tx.Update(item, updateCols...)
+	//_, e = tx.Update(item, updateCols...)
+	e := tx.Model(&item).Select(updateCols).Updates(&item).Error
 	if e != nil {
 		err = fmt.Errorf("update series err: %v", e)
 		return
@@ -257,7 +275,8 @@ func (m *FactorEdbSeries) EditSeriesAndMapping(item *FactorEdbSeries, mappings [
 	pars := make([]interface{}, 0)
 	pars = append(pars, item.FactorEdbSeriesId)
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, mappingOb.TableName(), cond)
-	_, e = tx.Raw(sql, pars).Exec()
+	//_, e = tx.Raw(sql, pars).Exec()
+	e = tx.Exec(sql, pars...).Error
 	if e != nil {
 		err = fmt.Errorf("remove mapping err: %v", e)
 		return
@@ -267,7 +286,8 @@ func (m *FactorEdbSeries) EditSeriesAndMapping(item *FactorEdbSeries, mappings [
 		for _, v := range mappings {
 			v.FactorEdbSeriesId = item.FactorEdbSeriesId
 		}
-		_, e = tx.InsertMulti(200, mappings)
+		//_, e = tx.InsertMulti(200, mappings)
+		e = tx.CreateInBatches(mappings, 200).Error
 		if e != nil {
 			err = fmt.Errorf("insert multi mapping err: %v", e)
 			return

+ 46 - 31
models/data_manage/factor_edb_series_chart_mapping.go

@@ -1,9 +1,9 @@
 package data_manage
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"strings"
 	"time"
 )
@@ -14,7 +14,8 @@ const (
 
 // FactorEdbSeriesChartMapping 因子指标系列-图表关联
 type FactorEdbSeriesChartMapping struct {
-	FactorEdbSeriesChartMappingId int       `orm:"column(factor_edb_series_chart_mapping_id);pk"`
+	//FactorEdbSeriesChartMappingId int       `orm:"column(factor_edb_series_chart_mapping_id);pk"`
+	FactorEdbSeriesChartMappingId int       `gorm:"column:factor_edb_series_chart_mapping_id;primaryKey"`
 	ChartInfoId                   int       `description:"图表ID"`
 	Source                        int       `description:"图表来源, 同chart_info表source"`
 	CalculateType                 int       `description:"计算方式: 1-相关性"`
@@ -62,12 +63,13 @@ func (m *FactorEdbSeriesChartMapping) Cols() MultipleFactorSeriesChartMappingCol
 }
 
 func (m *FactorEdbSeriesChartMapping) Create() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	id, err := o.Insert(m)
-	if err != nil {
-		return
-	}
-	m.FactorEdbSeriesChartMappingId = int(id)
+	//o := orm.NewOrmUsingDB("data")
+	//id, err := o.Insert(m)
+	//if err != nil {
+	//	return
+	//}
+	//m.FactorEdbSeriesChartMappingId = int(id)
+	err = global.DbMap[utils.DbNameIndex].Create(&m).Error
 	return
 }
 
@@ -75,21 +77,24 @@ func (m *FactorEdbSeriesChartMapping) CreateMulti(items []*FactorEdbSeriesChartM
 	if len(items) == 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.InsertMulti(len(items), items)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.InsertMulti(len(items), items)
+	err = global.DbMap[utils.DbNameIndex].CreateInBatches(items, len(items)).Error
 	return
 }
 
 func (m *FactorEdbSeriesChartMapping) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(m, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(m, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&m).Select(cols).Updates(&m).Error
 	return
 }
 
 func (m *FactorEdbSeriesChartMapping) Remove() (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
-	_, err = o.Raw(sql, m.FactorEdbSeriesChartMappingId).Exec()
+	//_, err = o.Raw(sql, m.FactorEdbSeriesChartMappingId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, m.FactorEdbSeriesChartMappingId).Error
 	return
 }
 
@@ -97,39 +102,44 @@ func (m *FactorEdbSeriesChartMapping) MultiRemove(ids []int) (err error) {
 	if len(ids) == 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
-	_, err = o.Raw(sql, ids).Exec()
+	//o := orm.NewOrmUsingDB("data")
+	//sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	//_, err = o.Raw(sql, ids).Exec()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN ?`, m.TableName(), m.Cols().PrimaryId)
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, ids).Error
 	return
 }
 
 func (m *FactorEdbSeriesChartMapping) GetItemById(id int) (item *FactorEdbSeriesChartMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
-	err = o.Raw(sql, id).QueryRow(&item)
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }
 
 func (m *FactorEdbSeriesChartMapping) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *FactorEdbSeriesChartMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	order := ``
 	if orderRule != "" {
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 func (m *FactorEdbSeriesChartMapping) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 func (m *FactorEdbSeriesChartMapping) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*FactorEdbSeriesChartMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -139,12 +149,13 @@ func (m *FactorEdbSeriesChartMapping) GetItemsByCondition(condition string, pars
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	//_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 func (m *FactorEdbSeriesChartMapping) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*FactorEdbSeriesChartMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -154,21 +165,25 @@ func (m *FactorEdbSeriesChartMapping) GetPageItemsByCondition(condition string,
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 // GetDistinctSeriesIdByChartId 获取图表关联的系列ID
 func (m *FactorEdbSeriesChartMapping) GetDistinctSeriesIdByChartId(chartId int) (seriesIds []int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT DISTINCT %s FROM %s WHERE %s = ?`, m.Cols().FactorEdbSeriesId, m.TableName(), m.Cols().ChartInfoId)
-	_, err = o.Raw(sql, chartId).QueryRows(&seriesIds)
+	//_, err = o.Raw(sql, chartId).QueryRows(&seriesIds)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartId).Scan(&seriesIds).Error
 	return
 }
 
 func (m *FactorEdbSeriesChartMapping) GetItemByChartInfoId(id int) (item *FactorEdbSeriesChartMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().ChartInfoId)
-	err = o.Raw(sql, id).QueryRow(&item)
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }

+ 46 - 31
models/data_manage/factor_edb_series_mapping.go

@@ -1,16 +1,17 @@
 package data_manage
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"strings"
 	"time"
 )
 
 // FactorEdbSeriesMapping 因子指标系列-指标关联表
 type FactorEdbSeriesMapping struct {
-	FactorEdbSeriesMappingId int       `orm:"column(factor_edb_series_mapping_id);pk"`
+	//FactorEdbSeriesMappingId int       `orm:"column(factor_edb_series_mapping_id);pk"`
+	FactorEdbSeriesMappingId int       `gorm:"column:factor_edb_series_mapping_id;primaryKey"`
 	FactorEdbSeriesId        int       `description:"因子指标系列ID"`
 	EdbInfoId                int       `description:"指标ID"`
 	EdbCode                  string    `description:"指标编码"`
@@ -43,12 +44,13 @@ func (m *FactorEdbSeriesMapping) Cols() FactorEdbSeriesMappingCols {
 }
 
 func (m *FactorEdbSeriesMapping) Create() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	id, err := o.Insert(m)
-	if err != nil {
-		return
-	}
-	m.FactorEdbSeriesMappingId = int(id)
+	//o := orm.NewOrmUsingDB("data")
+	//id, err := o.Insert(m)
+	//if err != nil {
+	//	return
+	//}
+	//m.FactorEdbSeriesMappingId = int(id)
+	err = global.DbMap[utils.DbNameIndex].Create(&m).Error
 	return
 }
 
@@ -56,21 +58,24 @@ func (m *FactorEdbSeriesMapping) CreateMulti(items []*FactorEdbSeriesMapping) (e
 	if len(items) == 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.InsertMulti(len(items), items)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.InsertMulti(len(items), items)
+	err = global.DbMap[utils.DbNameIndex].CreateInBatches(items, len(items)).Error
 	return
 }
 
 func (m *FactorEdbSeriesMapping) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(m, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(m, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&m).Select(cols).Updates(&m).Error
 	return
 }
 
 func (m *FactorEdbSeriesMapping) Remove() (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
-	_, err = o.Raw(sql, m.FactorEdbSeriesMappingId).Exec()
+	//_, err = o.Raw(sql, m.FactorEdbSeriesMappingId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, m.FactorEdbSeriesMappingId).Error
 	return
 }
 
@@ -78,9 +83,11 @@ func (m *FactorEdbSeriesMapping) MultiRemove(ids []int) (err error) {
 	if len(ids) == 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
-	_, err = o.Raw(sql, ids).Exec()
+	//o := orm.NewOrmUsingDB("data")
+	//sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	//_, err = o.Raw(sql, ids).Exec()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN ?`, m.TableName(), m.Cols().PrimaryId)
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, ids).Error
 	return
 }
 
@@ -88,39 +95,43 @@ func (m *FactorEdbSeriesMapping) RemoveByCondition(condition string, pars []inte
 	if condition == "" {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
-	_, err = o.Raw(sql, pars).Exec()
+	//_, err = o.Raw(sql, pars).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, pars...).Error
 	return
 }
 
 func (m *FactorEdbSeriesMapping) GetItemById(id int) (item *FactorEdbSeriesMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
-	err = o.Raw(sql, id).QueryRow(&item)
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }
 
 func (m *FactorEdbSeriesMapping) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *FactorEdbSeriesMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	order := ``
 	if orderRule != "" {
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 func (m *FactorEdbSeriesMapping) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 func (m *FactorEdbSeriesMapping) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*FactorEdbSeriesMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -130,12 +141,13 @@ func (m *FactorEdbSeriesMapping) GetItemsByCondition(condition string, pars []in
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	//_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 func (m *FactorEdbSeriesMapping) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*FactorEdbSeriesMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -145,7 +157,9 @@ func (m *FactorEdbSeriesMapping) GetPageItemsByCondition(condition string, pars
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -199,12 +213,13 @@ func (m *FactorEdbSeriesMapping) Format2Item() (item *FactorEdbSeriesMappingItem
 
 // GetChartUsedFactorSeriesEdb 获取图表引用的系列指标
 func GetChartUsedFactorSeriesEdb(chartId int) (items []*FactorEdbSeriesMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	chartOb := new(FactorEdbSeriesChartMapping)
 	edbOb := new(FactorEdbSeriesMapping)
 	sql := fmt.Sprintf(`SELECT b.* FROM %s AS a
 	JOIN %s AS b ON a.%s = b.%s AND a.%s = b.%s
 	WHERE a.%s = ? ORDER BY %s ASC`, chartOb.TableName(), edbOb.TableName(), chartOb.Cols().FactorEdbSeriesId, edbOb.Cols().FactorEdbSeriesId, chartOb.Cols().EdbInfoId, edbOb.Cols().EdbInfoId, chartOb.Cols().ChartInfoId, edbOb.Cols().FactorEdbSeriesId)
-	_, err = o.Raw(sql, chartId).QueryRows(&items)
+	//_, err = o.Raw(sql, chartId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartId).Find(&items).Error
 	return
 }

+ 25 - 17
models/data_manage/future_good/chart_info_future_good_profit.go

@@ -1,15 +1,17 @@
 package future_good
 
 import (
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"strings"
 	"time"
 )
 
 // ChartInfoFutureGoodProfit 商品利润图表-扩展信息
 type ChartInfoFutureGoodProfit struct {
-	ChartInfoId  int       `orm:"column(chart_info_id);pk" description:"商品利润图表ID(chart_info表source=5的)"`
+	//ChartInfoId  int       `orm:"column(chart_info_id);pk" description:"商品利润图表ID(chart_info表source=5的)"`
+	ChartInfoId  int       `gorm:"column:chart_info_id;primaryKey" description:"商品利润图表ID(chart_info表source=5的)"`
 	ProfitName   string    `description:"利润名称"`
 	ProfitNameEn string    `description:"利润英文名称"`
 	XValue       string    `description:"X轴数据值"`
@@ -36,44 +38,49 @@ func (m *ChartInfoFutureGoodProfit) TableName() string {
 }
 
 func (m *ChartInfoFutureGoodProfit) Create() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Insert(m)
-	if err != nil {
-		return
-	}
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Insert(m)
+	//if err != nil {
+	//	return
+	//}
 	//m.CorrelationChartInfoId = int(id)
+	err = global.DbMap[utils.DbNameIndex].Create(&m).Error
 	return
 }
 
 func (m *ChartInfoFutureGoodProfit) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(m, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(m, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&m).Select(cols).Updates(&m).Error
 	return
 }
 
 func (m *ChartInfoFutureGoodProfit) Delete() (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE chart_info_id = ? LIMIT 1`, m.TableName())
-	_, err = o.Raw(sql, m.ChartInfoId).Exec()
+	//_, err = o.Raw(sql, m.ChartInfoId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, m.ChartInfoId).Error
 	return
 }
 
 func (m *ChartInfoFutureGoodProfit) GetItemById(id int) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE chart_info_id = ? LIMIT 1`, m.TableName())
-	err = o.Raw(sql, id).QueryRow(&m)
+	//err = o.Raw(sql, id).QueryRow(&m)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&m).Error
 	return
 }
 
 func (m *ChartInfoFutureGoodProfit) GetItemByCondition(condition string, pars []interface{}) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
-	err = o.Raw(sql, pars).QueryRow(&m)
+	//err = o.Raw(sql, pars).QueryRow(&m)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&m).Error
 	return
 }
 
 func (m *ChartInfoFutureGoodProfit) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartInfoFutureGoodProfit, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -83,6 +90,7 @@ func (m *ChartInfoFutureGoodProfit) GetItemsByCondition(condition string, pars [
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	//_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }

+ 54 - 33
models/data_manage/future_good/future_good_chart_classify.go

@@ -1,14 +1,16 @@
 package future_good
 
 import (
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // FutureGoodChartClassify future_good_chart表格分类
 type FutureGoodChartClassify struct {
-	FutureGoodChartClassifyId   int       `orm:"column(future_good_chart_classify_id);pk"`
+	//FutureGoodChartClassifyId   int       `orm:"column(future_good_chart_classify_id);pk"`
+	FutureGoodChartClassifyId   int       `gorm:"column:future_good_chart_classify_id;primaryKey"`
 	FutureGoodChartClassifyName string    `description:"分类名称"`
 	ParentId                    int       `description:"父级id"`
 	SysUserId                   int       `description:"创建人id"`
@@ -23,37 +25,46 @@ type FutureGoodChartClassify struct {
 
 // AddFutureGoodChartClassify 添加future_good_chart分类
 func AddFutureGoodChartClassify(item *FutureGoodChartClassify) (lastId int64, err error) {
-	o := orm.NewOrmUsingDB("data")
-	lastId, err = o.Insert(item)
+	//o := orm.NewOrmUsingDB("data")
+	//lastId, err = o.Insert(item)
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
+	if err != nil {
+		return
+	}
+	lastId = int64(item.FutureGoodChartClassifyId)
 	return
 }
 
 // GetFutureGoodChartClassifyCount 获取同级分类下存在同名分类的数量
 func GetFutureGoodChartClassifyCount(FutureGoodChartClassifyName string, parentId int) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT COUNT(1) AS count FROM future_good_chart_classify WHERE parent_id=? AND future_good_chart_classify_name=? AND is_delete=0 `
-	err = o.Raw(sql, parentId, FutureGoodChartClassifyName).QueryRow(&count)
+	//err = o.Raw(sql, parentId, FutureGoodChartClassifyName).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId, FutureGoodChartClassifyName).Scan(&count).Error
 	return
 }
 
 func GetFutureGoodChartClassifyById(classifyId int) (item *FutureGoodChartClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_chart_classify WHERE future_good_chart_classify_id=? AND is_delete=0 `
-	err = o.Raw(sql, classifyId).QueryRow(&item)
+	//err = o.Raw(sql, classifyId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }
 
 func GetFutureGoodChartClassifyByParentId(parentId int) (items []*FutureGoodChartClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM future_good_chart_classify WHERE parent_id=? AND is_delete=0 order by sort asc,future_good_chart_classify_id asc`
-	_, err = o.Raw(sql, parentId).QueryRows(&items)
+	//_, err = o.Raw(sql, parentId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId).Find(&items).Error
 	return
 }
 
 func GetFutureGoodChartClassifyAll() (items []*FutureGoodChartClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM future_good_chart_classify WHERE parent_id<>0 AND is_delete=0 order by sort asc,future_good_chart_classify_id asc`
-	_, err = o.Raw(sql).QueryRows(&items)
+	//_, err = o.Raw(sql).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&items).Error
 	return
 }
 
@@ -72,58 +83,64 @@ type FutureGoodChartClassifyItems struct {
 }
 
 func GetFutureGoodChartClassifyByCondition(condition string, pars []interface{}) (item *FutureGoodChartClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM future_good_chart_classify WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 // GetNextFutureGoodChartClassifyByCondition 获取下一个分类
 func GetNextFutureGoodChartClassifyByCondition(condition string, pars []interface{}) (item *FutureGoodChartClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM future_good_chart_classify WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += " ORDER BY sort asc , create_time ASC LIMIT 1 "
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 // GetFirstFutureGoodChartClassifyByParentId 获取当前父级图表分类下的排序第一条的数据
 func GetFirstFutureGoodChartClassifyByParentId(parentId int) (item *FutureGoodChartClassify, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM future_good_chart_classify WHERE parent_id=? AND is_delete=0 order by sort asc,future_good_chart_classify_id asc limit 1`
-	err = o.Raw(sql, parentId).QueryRow(&item)
+	//err = o.Raw(sql, parentId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId).First(&item).Error
 	return
 }
 
 // UpdateFutureGoodChartClassifySortByParentId 根据图表父类id更新排序
 func UpdateFutureGoodChartClassifySortByParentId(parentId, classifyId, nowSort int, updateSort string) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` update future_good_chart_classify set sort = ` + updateSort + ` WHERE parent_id=? and sort > ? AND is_delete=0 `
 	if classifyId > 0 {
 		sql += ` or ( future_good_chart_classify_id > ` + fmt.Sprint(classifyId) + ` and sort= ` + fmt.Sprint(nowSort) + `)`
 	}
-	_, err = o.Raw(sql, parentId, nowSort).Exec()
+	//_, err = o.Raw(sql, parentId, nowSort).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, parentId, nowSort).Error
 	return
 }
 
 // Update 更新图表分类基础信息
 func (FutureGoodChartClassify *FutureGoodChartClassify) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(FutureGoodChartClassify, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(FutureGoodChartClassify, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&FutureGoodChartClassify).Select(cols).Updates(&FutureGoodChartClassify).Error
 	return
 }
 
 // GetFutureGoodChartClassifyMaxSort 获取图表分类下最大的排序数
 func GetFutureGoodChartClassifyMaxSort(parentId int) (sort int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT Max(sort) AS sort FROM future_good_chart_classify WHERE parent_id=? AND is_delete=0 `
-	err = o.Raw(sql, parentId).QueryRow(&sort)
+	//err = o.Raw(sql, parentId).QueryRow(&sort)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId).Scan(&sort).Error
 	return
 }
 
@@ -134,36 +151,40 @@ type FutureGoodChartClassifyView struct {
 }
 
 func GetFutureGoodChartClassifyViewById(classifyId int) (item *FutureGoodChartClassifyView, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_chart_classify WHERE future_good_chart_classify_id=? AND is_delete=0 `
-	err = o.Raw(sql, classifyId).QueryRow(&item)
+	//err = o.Raw(sql, classifyId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }
 
-//用于分类展示
+// 用于分类展示
 func GetChartInfoAll() (items []*FutureGoodChartClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT chart_info_id,chart_classify_id,chart_name AS chart_classify_name,
              unique_code,sys_user_id,sys_user_real_name,date_type,start_date,end_date,chart_type,calendar,season_start_date,season_end_date
             FROM chart_info ORDER BY sort asc,create_time ASC `
-	_, err = o.Raw(sql).QueryRows(&items)
+	//_, err = o.Raw(sql).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&items).Error
 	return
 }
 
 // GetNoContentFutureGoodInfoAll 获取不含content的表格列表 用于分类展示
 func GetNoContentFutureGoodInfoAll() (items []FutureGoodChartClassifyItems, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT excel_info_id,excel_classify_id,excel_name AS excel_classify_name,
              unique_code,sys_user_id,sys_user_real_name
             FROM excel_info where is_delete=0 ORDER BY sort asc,create_time desc `
-	_, err = o.Raw(sql).QueryRows(&items)
+	//_, err = o.Raw(sql).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&items).Error
 	return
 }
 
 // GetFutureGoodChartInfoCountByClassifyId 根据分类id获取名下表格数量
 func GetFutureGoodChartInfoCountByClassifyId(classifyId int) (total int64, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT count(1) total FROM excel_info WHERE excel_classify_id = ? AND is_delete=0 `
-	err = o.Raw(sql, classifyId).QueryRow(&total)
+	//err = o.Raw(sql, classifyId).QueryRow(&total)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Scan(&total).Error
 	return
 }

+ 32 - 22
models/data_manage/future_good/future_good_edb_info.go

@@ -1,13 +1,15 @@
 package future_good
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // FutureGoodEdbInfo 期货指标表
 type FutureGoodEdbInfo struct {
-	FutureGoodEdbInfoId int       `orm:"column(future_good_edb_info_id);pk"`
+	//FutureGoodEdbInfoId int       `orm:"column(future_good_edb_info_id);pk"`
+	FutureGoodEdbInfoId int       `gorm:"column:future_good_edb_info_id;primaryKey"`
 	FutureGoodEdbCode   string    `description:"期货指标code"`
 	FutureGoodEdbName   string    `description:"期货指标名称"`
 	FutureGoodEdbNameEn string    `description:"期货指标英文名称"`
@@ -31,65 +33,72 @@ type FutureGoodEdbInfo struct {
 
 // GetFutureGoodEdbInfo 期货指标
 func GetFutureGoodEdbInfo(edbInfoId int) (item *FutureGoodEdbInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_info_id = ? `
 	sql += ` ORDER BY future_good_edb_info_id DESC `
-	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	//err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).First(&item).Error
 	return
 }
 
 // GetFutureGoodEdbInfoByCode 根据期货code获取 期货指标信息
 func GetFutureGoodEdbInfoByCode(futureGoodEdbCode string) (item *FutureGoodEdbInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_code = ? `
 	sql += ` ORDER BY future_good_edb_info_id DESC `
-	err = o.Raw(sql, futureGoodEdbCode).QueryRow(&item)
+	//err = o.Raw(sql, futureGoodEdbCode).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, futureGoodEdbCode).First(&item).Error
 	return
 }
 
 // GetFutureGoodEdbInfoList 获取指标数据列表
 func GetFutureGoodEdbInfoList(condition string, pars []interface{}) (list []*FutureGoodEdbInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += `ORDER BY future_good_edb_info_id DESC `
-	_, err = o.Raw(sql, pars).QueryRows(&list)
+	//_, err = o.Raw(sql, pars).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
 	return
 }
 
 // GetAllFutureGoodEdbInfoList 获取指标数据列表
 func GetAllFutureGoodEdbInfoList() (list []*FutureGoodEdbInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info  ORDER BY future_good_edb_info_id DESC `
-	_, err = o.Raw(sql).QueryRows(&list)
+	//_, err = o.Raw(sql).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&list).Error
 	return
 }
 
 // GetFutureGoodEdbInfoListByParentId 根据父级ID获取指标数据列表
 func GetFutureGoodEdbInfoListByParentId(parentId int) (list []*FutureGoodEdbInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE parent_id = ? or  future_good_edb_info_id = ? ORDER BY future_good_edb_info_id ASC `
-	_, err = o.Raw(sql, parentId, parentId).QueryRows(&list)
+	//_, err = o.Raw(sql, parentId, parentId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, parentId, parentId).Find(&list).Error
 	return
 }
 
 // AddFutureGoodEdbInfo 添加期货数据库指标
 func AddFutureGoodEdbInfo(item *FutureGoodEdbInfo) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	lastId, err := o.Insert(item)
-	if err != nil {
-		return
-	}
-	item.FutureGoodEdbInfoId = int(lastId)
+	//o := orm.NewOrmUsingDB("data")
+	//lastId, err := o.Insert(item)
+	//if err != nil {
+	//	return
+	//}
+	//item.FutureGoodEdbInfoId = int(lastId)
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
 	return
 }
 
 // Update 更新指标基础信息
 func (FutureGoodEdbInfo *FutureGoodEdbInfo) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(FutureGoodEdbInfo, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(FutureGoodEdbInfo, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&FutureGoodEdbInfo).Select(cols).Updates(&FutureGoodEdbInfo).Error
 	return
 }
 
@@ -102,13 +111,14 @@ type FutureGoodEdbInfoGroupListResp struct {
 
 // GetFutureGoodEdbInfoGroupList 获取分組指标数据列表
 func GetFutureGoodEdbInfoGroupList(condition string, pars []interface{}) (list []*FutureGoodEdbInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += ` ORDER BY future_good_edb_info_id DESC `
-	_, err = o.Raw(sql, pars).QueryRows(&list)
+	//_, err = o.Raw(sql, pars).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
 	return
 }
 

+ 22 - 12
models/data_manage/future_good/future_good_edb_info_data.go

@@ -1,15 +1,16 @@
 package future_good
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"time"
 )
 
 // FutureGoodEdbData 期货指标数据的表
 type FutureGoodEdbData struct {
-	FutureGoodEdbDataId int       `orm:"column(future_good_edb_data_id);pk"`
+	//FutureGoodEdbDataId int       `orm:"column(future_good_edb_data_id);pk"`
+	FutureGoodEdbDataId int       `gorm:"column:future_good_edb_data_id;primaryKey"`
 	FutureGoodEdbInfoId int       `description:"期货指标id"`
 	FutureGoodEdbCode   string    `description:"期货指标code"`
 	DataTime            time.Time `description:"数据日期"`
@@ -35,7 +36,8 @@ type FutureGoodEdbDataListResp struct {
 
 // FutureGoodEdbDataItem 期货指标数据列表数据
 type FutureGoodEdbDataItem struct {
-	FutureGoodEdbDataId int     `orm:"column(future_good_edb_data_id);pk"`
+	//FutureGoodEdbDataId int     `orm:"column(future_good_edb_data_id);pk"`
+	FutureGoodEdbDataId int     `gorm:"column:future_good_edb_data_id;primaryKey"`
 	FutureGoodEdbInfoId int     `description:"期货指标id"`
 	FutureGoodEdbCode   string  `description:"期货指标code"`
 	FutureGoodEdbName   string  `description:"期货指标名称"`
@@ -56,24 +58,27 @@ type FutureGoodEdbDataItem struct {
 
 // GetFutureGoodEdbDataListCount 获取期货指标数据汇总数
 func GetFutureGoodEdbDataListCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT COUNT(1) AS count FROM future_good_edb_data WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 // GetFutureGoodEdbDataList 获取期货指标数据列表
 func GetFutureGoodEdbDataList(condition string, pars []interface{}, startSize, pageSize int) (list []*FutureGoodEdbDataItem, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_data WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += `ORDER BY modify_time DESC LIMIT ?,?`
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
 	return
 }
 
@@ -98,14 +103,17 @@ func GetFutureGoodEdbDataListByDate(futureGoodEdbInfoId int, startDate, endDate
 	}
 
 	sql += ` ORDER BY data_time ASC `
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Raw(sql, futureGoodEdbInfoId, pars).QueryRows(&list)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Raw(sql, futureGoodEdbInfoId, pars).QueryRows(&list)
+	newPars := utils.ForwardPars(pars, futureGoodEdbInfoId)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, newPars...).Find(&list).Error
 	return
 }
 
 func GetFutureGoodEdbDataListByIdsAndDate(futureGoodEdbInfoIds []int, startDate, endDate string) (list []*FutureGoodEdbData, err error) {
 	var pars []interface{}
-	sql := `SELECT * FROM future_good_edb_data WHERE 1=1 AND future_good_edb_info_id in (` + utils.GetOrmInReplace(len(futureGoodEdbInfoIds)) + `)  `
+	//sql := `SELECT * FROM future_good_edb_data WHERE 1=1 AND future_good_edb_info_id in (` + utils.GetOrmInReplace(len(futureGoodEdbInfoIds)) + `)  `
+	sql := `SELECT * FROM future_good_edb_data WHERE 1=1 AND future_good_edb_info_id in ?`
 	if startDate != "" {
 		sql += ` AND data_time>=? `
 		pars = append(pars, startDate)
@@ -116,7 +124,9 @@ func GetFutureGoodEdbDataListByIdsAndDate(futureGoodEdbInfoIds []int, startDate,
 	}
 
 	sql += ` ORDER BY data_time ASC `
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Raw(sql, futureGoodEdbInfoIds, pars).QueryRows(&list)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Raw(sql, futureGoodEdbInfoIds, pars).QueryRows(&list)
+	newPars := utils.ForwardPars(pars, futureGoodEdbInfoIds)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, newPars...).Find(&list).Error
 	return
 }

+ 18 - 13
models/data_manage/multiple_graph_config.go

@@ -1,13 +1,15 @@
 package data_manage
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // MultipleGraphConfig 多图配置表
 type MultipleGraphConfig struct {
-	MultipleGraphConfigId int       `orm:"column(multiple_graph_config_id);pk"`
+	//MultipleGraphConfigId int       `orm:"column(multiple_graph_config_id);pk"`
+	MultipleGraphConfigId int       `gorm:"column:multiple_graph_config_id;primaryKey"`
 	EdbInfoIdA            int       `description:"指标A"`
 	EdbInfoIdB            int       `description:"指标B"`
 	Curve                 string    `description:"曲线图配置"`
@@ -21,29 +23,32 @@ type MultipleGraphConfig struct {
 
 // AddMultipleGraphConfig 新增多图配置
 func AddMultipleGraphConfig(item *MultipleGraphConfig) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	// 表格信息入库
-	lastId, err := o.Insert(item)
-	if err != nil {
-		return
-	}
-	item.MultipleGraphConfigId = int(lastId)
+	//o := orm.NewOrmUsingDB("data")
+	//// 表格信息入库
+	//lastId, err := o.Insert(item)
+	//if err != nil {
+	//	return
+	//}
+	//item.MultipleGraphConfigId = int(lastId)
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
 	return
 }
 
 // Update 更新 基础信息
 func (item *MultipleGraphConfig) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(item, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(item, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&item).Select(cols).Updates(&item).Error
 	return
 }
 
 // GetMultipleGraphConfigById 根据配置id获取配置
 func GetMultipleGraphConfigById(id int) (item *MultipleGraphConfig, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM multiple_graph_config WHERE multiple_graph_config_id = ? `
 	// 表格信息入库
-	err = o.Raw(sql, id).QueryRow(&item)
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }
 

+ 24 - 20
models/data_manage/multiple_graph_config_chart_mapping.go

@@ -1,13 +1,15 @@
 package data_manage
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // MultipleGraphConfigChartMapping 图表与多图配置的关系表
 type MultipleGraphConfigChartMapping struct {
-	Id                    int       `orm:"column(id);pk"`
+	//Id                    int       `orm:"column(id);pk"`
+	Id                    int       `gorm:"column:id;primaryKey"`
 	MultipleGraphConfigId int       `description:"多图配置id"`
 	ChartInfoId           int       `description:"图表id"`
 	Source                int       `description:"来源,1:曲线图,2:相关性图;3:滚动相关性图1;4:滚动相关性图2;"`
@@ -17,46 +19,48 @@ type MultipleGraphConfigChartMapping struct {
 
 // AddMultipleGraphConfigChartMapping 新增多图配置
 func AddMultipleGraphConfigChartMapping(item *MultipleGraphConfigChartMapping) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	// 表格信息入库
-	lastId, err := o.Insert(item)
-	if err != nil {
-		return
-	}
-	item.Id = int(lastId)
+	//o := orm.NewOrmUsingDB("data")
+	//// 表格信息入库
+	//lastId, err := o.Insert(item)
+	//if err != nil {
+	//	return
+	//}
+	//item.Id = int(lastId)
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
 	return
 }
 
 // Update 更新 基础信息
 func (item *MultipleGraphConfigChartMapping) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(item, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(item, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&item).Select(cols).Updates(&item).Error
 	return
 }
 
 // GetMultipleGraphConfigChartMappingByIdAndSource 根据配置id和来源获取关联关系
 func GetMultipleGraphConfigChartMappingByIdAndSource(configId, source int) (item *MultipleGraphConfigChartMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM multiple_graph_config_chart_mapping WHERE multiple_graph_config_id = ? AND source = ? `
-	err = o.Raw(sql, configId, source).QueryRow(&item)
-
+	//err = o.Raw(sql, configId, source).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, configId, source).First(&item).Error
 	return
 }
 
 // GetMultipleGraphConfigChartMappingByChartId 根据图表id和来源获取关联关系
 func GetMultipleGraphConfigChartMappingByChartId(chartId int) (item *MultipleGraphConfigChartMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM multiple_graph_config_chart_mapping WHERE chart_info_id = ?  `
-	err = o.Raw(sql, chartId).QueryRow(&item)
-
+	//err = o.Raw(sql, chartId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartId).First(&item).Error
 	return
 }
 
 // GetMultipleGraphConfigChartMappingListById 根据配置id获取所有关联关系
 func GetMultipleGraphConfigChartMappingListById(configId int) (items []*MultipleGraphConfigChartMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM multiple_graph_config_chart_mapping WHERE multiple_graph_config_id = ? `
-	_, err = o.Raw(sql, configId).QueryRows(&items)
-
+	//_, err = o.Raw(sql, configId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, configId).Find(&items).Error
 	return
 }

+ 23 - 18
models/data_manage/multiple_graph_config_edb_mapping.go

@@ -1,13 +1,15 @@
 package data_manage
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // MultipleGraphConfigEdbMapping 指标与多图配置的关系表
 type MultipleGraphConfigEdbMapping struct {
-	Id                    int       `orm:"column(id);pk"`
+	//Id                    int       `orm:"column(id);pk"`
+	Id                    int       `gorm:"column:id;primaryKey"`
 	MultipleGraphConfigId int       `description:"多图配置id"`
 	EdbInfoId             int       `description:"指标id"`
 	Source                int       `description:"来源,1:曲线图,2:相关性图;3:滚动相关性图1;4:滚动相关性图2;"`
@@ -17,45 +19,48 @@ type MultipleGraphConfigEdbMapping struct {
 
 // AddMultipleGraphConfigEdbMapping 新增多图配置
 func AddMultipleGraphConfigEdbMapping(item *MultipleGraphConfigEdbMapping) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	// 表格信息入库
-	lastId, err := o.Insert(item)
-	if err != nil {
-		return
-	}
-	item.Id = int(lastId)
+	//lastId, err := o.Insert(item)
+	//if err != nil {
+	//	return
+	//}
+	//item.Id = int(lastId)
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
 	return
 }
 
 // Update 更新 基础信息
 func (item *MultipleGraphConfigEdbMapping) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(item, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(item, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&item).Select(cols).Updates(&item).Error
 	return
 }
 
 // GetMultipleGraphConfigEdbMappingByIdAndSource 根据配置id和来源获取关联关系
 func GetMultipleGraphConfigEdbMappingByIdAndSource(configId, source int) (item *MultipleGraphConfigEdbMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM multiple_graph_config_edb_mapping WHERE multiple_graph_config_id = ? AND source = ? `
 	// 表格信息入库
-	err = o.Raw(sql, configId, source).QueryRow(&item)
+	//err = o.Raw(sql, configId, source).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, configId, source).First(&item).Error
 	return
 }
 
 // GetMultipleGraphConfigEdbMappingListById 根据配置id获取所有关联关系
 func GetMultipleGraphConfigEdbMappingListById(configId int) (items []*MultipleGraphConfigEdbMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM multiple_graph_config_edb_mapping WHERE multiple_graph_config_id = ? `
-	_, err = o.Raw(sql, configId).QueryRows(&items)
-
+	//_, err = o.Raw(sql, configId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, configId).Find(&items).Error
 	return
 }
 
 func GetMultipleGraphConfigEdbMappingListByIdAndSource(configId, source int) (items []*MultipleGraphConfigEdbMapping, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM multiple_graph_config_edb_mapping WHERE multiple_graph_config_id = ? AND source = ? `
-	_, err = o.Raw(sql, configId, source).QueryRows(&items)
-
+	//_, err = o.Raw(sql, configId, source).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, configId, source).Find(&items).Error
 	return
 }

+ 46 - 28
models/data_manage/predict_edb_conf.go

@@ -1,15 +1,17 @@
 package data_manage
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/services/alarm_msg"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 type PredictEdbConf struct {
-	ConfigId         int       `orm:"column(config_id);pk" description:"规则id"`
-	PredictEdbInfoId int       `orm:"column(predict_edb_info_id)" description:"预测指标id"`
+	//ConfigId         int       `orm:"column(config_id);pk" description:"规则id"`
+	//PredictEdbInfoId int       `orm:"column(predict_edb_info_id)" description:"预测指标id"`
+	ConfigId         int       `gorm:"column:config_id;primaryKey" description:"规则id"`
+	PredictEdbInfoId int       `gorm:"column:predict_edb_info_id" description:"预测指标id"`
 	SourceEdbInfoId  int       `description:"来源指标id"`
 	RuleType         int       `description:"预测规则,1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值"`
 	FixedValue       float64   `description:"固定值"`
@@ -21,62 +23,73 @@ type PredictEdbConf struct {
 
 // GetPredictEdbConfById 根据预测指标id获取预测指标配置信息
 func GetPredictEdbConfById(edbInfoId int) (item *PredictEdbConf, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM predict_edb_conf WHERE predict_edb_info_id=? `
-	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	//err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).First(&item).Error
 	return
 }
 
 // GetPredictEdbConfBySourceEdbInfoId 根据来源指标id获取配置
 func GetPredictEdbConfBySourceEdbInfoId(sourceEdbInfoId int) (item *PredictEdbConf, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM predict_edb_conf WHERE source_edb_info_id=? `
-	err = o.Raw(sql, sourceEdbInfoId).QueryRow(&item)
+	//err = o.Raw(sql, sourceEdbInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, sourceEdbInfoId).First(&item).Error
 	return
 }
 
 // GetPredictEdbConfCount 根据来源指标id获取被引用的次数
 func GetPredictEdbConfCount(sourceEdbInfoId int) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT COUNT(1) AS count FROM predict_edb_conf WHERE source_edb_info_id=? `
-	err = o.Raw(sql, sourceEdbInfoId).QueryRow(&count)
+	//err = o.Raw(sql, sourceEdbInfoId).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, sourceEdbInfoId).Scan(&count).Error
 	return
 }
 
 // AddPredictEdbConf 添加预测指标规则
 func AddPredictEdbConf(item *PredictEdbConf) (lastId int64, err error) {
-	o := orm.NewOrmUsingDB("data")
-	lastId, err = o.Insert(item)
+	//o := orm.NewOrmUsingDB("data")
+	//lastId, err = o.Insert(item)
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
+	if err != nil {
+		return
+	}
+	lastId = int64(item.ConfigId)
 	return
 }
 
 // AddPredictEdb 添加预测指标
 func AddPredictEdb(item *EdbInfo, predictEdbConf *PredictEdbConf) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	tx, err := o.Begin()
+	//o := orm.NewOrmUsingDB("data")
+	//tx, err := o.Begin()
+	tx := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
 	defer func() {
 		if err != nil {
-			tmpErr := tx.Rollback()
+			tmpErr := tx.Rollback().Error
 			if tmpErr != nil {
 				go alarm_msg.SendAlarmMsg("AddPredictEdb 事务回滚失败,Err:"+tmpErr.Error(), 3)
 			}
 		} else {
-			err = tx.Commit()
+			err = tx.Commit().Error
 		}
 	}()
 	// 新增预测指标
-	edbInfoId, err := o.Insert(item)
+	//edbInfoId, err := o.Insert(item)
+	err = tx.Create(&item).Error
 	if err != nil {
 		return
 	}
-	item.EdbInfoId = int(edbInfoId)
+	//item.EdbInfoId = int(edbInfoId)
 
 	// 新增预测指标配置
 	predictEdbConf.PredictEdbInfoId = item.EdbInfoId
-	_, err = o.Insert(predictEdbConf)
+	//_, err = o.Insert(predictEdbConf)
+	err = tx.Create(&predictEdbConf).Error
 	if err != nil {
 		return
 	}
@@ -85,28 +98,31 @@ func AddPredictEdb(item *EdbInfo, predictEdbConf *PredictEdbConf) (err error) {
 
 // EditPredictEdb 修改预测指标
 func EditPredictEdb(edbInfo *EdbInfo, predictEdbConf *PredictEdbConf, updateEdbInfoCol, updatePredictEdbConfCol []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	tx, err := o.Begin()
+	//o := orm.NewOrmUsingDB("data")
+	//tx, err := o.Begin()
+	tx := global.DbMap[utils.DbNameIndex].Begin()
 	if err != nil {
 		return
 	}
 	defer func() {
 		if err != nil {
-			tmpErr := tx.Rollback()
+			tmpErr := tx.Rollback().Error
 			if tmpErr != nil {
 				go alarm_msg.SendAlarmMsg("AddPredictEdb 事务回滚失败,Err:"+tmpErr.Error(), 3)
 			}
 		} else {
-			err = tx.Commit()
+			err = tx.Commit().Error
 		}
 	}()
 	// 修改预测指标
-	_, err = o.Update(edbInfo, updateEdbInfoCol...)
+	//_, err = o.Update(edbInfo, updateEdbInfoCol...)
+	err = tx.Model(&edbInfo).Select(updateEdbInfoCol).Updates(edbInfo).Error
 	if err != nil {
 		return
 	}
 	// 修改预测指标配置
-	_, err = o.Update(predictEdbConf, updatePredictEdbConfCol...)
+	//_, err = o.Update(predictEdbConf, updatePredictEdbConfCol...)
+	err = tx.Model(&predictEdbConf).Select(updatePredictEdbConfCol).Updates(predictEdbConf).Error
 	if err != nil {
 		return
 	}
@@ -119,20 +135,22 @@ func GetPredictEdbInfoAllCalculate(edbInfoIdList []int) (list []*EdbInfo, err er
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT b.* FROM predict_edb_conf AS a
 			 INNER JOIN edb_info AS b ON a.source_edb_info_id=b.edb_info_id
              WHERE a.predict_edb_info_id in (` + utils.GetOrmInReplace(num) + `)
 			 GROUP BY a.source_edb_info_id
 			 ORDER BY a.source_edb_info_id ASC `
-	_, err = o.Raw(sql, edbInfoIdList).QueryRows(&list)
+	//_, err = o.Raw(sql, edbInfoIdList).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoIdList).Find(&list).Error
 	return
 }
 
 // GetPredictEdbConfListById 根据预测指标id获取预测指标配置信息列表
 func GetPredictEdbConfListById(edbInfoId int) (items []*PredictEdbConf, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM predict_edb_conf WHERE predict_edb_info_id=? ORDER BY config_id ASC`
-	_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
+	//_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).Find(&items).Error
 	return
 }

+ 20 - 13
models/data_manage/predict_edb_conf_calculate_mapping.go

@@ -1,14 +1,15 @@
 package data_manage
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // PredictEdbConfCalculateMapping 预测基础指标规则 与 计算预测指标关联关系表
 type PredictEdbConfCalculateMapping struct {
-	PredictEdbConfCalculateMappingId int       `orm:"column(predict_edb_conf_calculate_mapping_id);pk"`
+	//PredictEdbConfCalculateMappingId int       `orm:"column(predict_edb_conf_calculate_mapping_id);pk"`
+	PredictEdbConfCalculateMappingId int       `gorm:"column:predict_edb_conf_calculate_mapping_id;primaryKey"`
 	EdbInfoId                        int       `description:"指标id"`
 	ConfigId                         int       `description:"配置id"`
 	FromEdbInfoId                    int       `description:"基础指标id"`
@@ -24,22 +25,25 @@ type PredictEdbConfCalculateMapping struct {
 
 // GetPredictEdbConfCalculateMappingListById 根据预测指标id获取预测指标配置的关联指标信息列表
 func GetPredictEdbConfCalculateMappingListById(edbInfoId int) (items []*PredictEdbConf, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM predict_edb_conf_calculate_mapping WHERE edb_info_id=? ORDER BY predict_edb_conf_calculate_mapping_id ASC`
-	_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
+	//_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).Find(&items).Error
 	return
 }
 
 // GetPredictEdbConfCalculateMappingListByConfigId 根据预测指标配置id获取预测指标配置的关联指标信息列表
 func GetPredictEdbConfCalculateMappingListByConfigId(edbInfoId, configId int) (items []*PredictEdbConf, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM predict_edb_conf_calculate_mapping WHERE edb_info_id=? AND config_id=? ORDER BY predict_edb_conf_calculate_mapping_id ASC`
-	_, err = o.Raw(sql, edbInfoId, configId).QueryRows(&items)
+	//_, err = o.Raw(sql, edbInfoId, configId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId, configId).Find(&items).Error
 	return
 }
 
 type PredictEdbConfCalculateMappingDetail struct {
-	PredictEdbConfCalculateMappingId int       `orm:"column(predict_edb_conf_calculate_mapping_id);pk"`
+	//PredictEdbConfCalculateMappingId int       `orm:"column(predict_edb_conf_calculate_mapping_id);pk"`
+	PredictEdbConfCalculateMappingId int       `gorm:"column:predict_edb_conf_calculate_mapping_id;primaryKey"`
 	EdbInfoId                        int       `description:"指标id"`
 	ConfigId                         int       `description:"配置id"`
 	FromEdbInfoId                    int       `description:"基础指标id"`
@@ -59,23 +63,25 @@ type PredictEdbConfCalculateMappingDetail struct {
 
 // GetPredictEdbConfCalculateMappingDetailListById 根据配置id获取 配置关联指标信息
 func GetPredictEdbConfCalculateMappingDetailListById(edbInfoId int) (list []*PredictEdbConfCalculateMappingDetail, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT a.predict_edb_conf_calculate_mapping_id,a.edb_info_id,a.from_edb_info_id,a.from_edb_code,a.from_source,a.from_source_name,a.sort,a.create_time,a.modify_time,a.from_tag,b.edb_name_source as from_edb_name,b.start_date,b.end_date,b.edb_type FROM predict_edb_conf_calculate_mapping AS a
 			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
 			WHERE a.edb_info_id=? ORDER BY sort ASC `
 
-	_, err = o.Raw(sql, edbInfoId).QueryRows(&list)
+	//_, err = o.Raw(sql, edbInfoId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).Find(&list).Error
 	return
 }
 
 // GetPredictEdbConfCalculateMappingDetailListByConfigId 根据配置id和指标id获取 配置关联指标信息
 func GetPredictEdbConfCalculateMappingDetailListByConfigId(edbInfoId, configId int) (list []*PredictEdbConfCalculateMappingDetail, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT a.predict_edb_conf_calculate_mapping_id,a.edb_info_id,a.from_edb_info_id,a.from_edb_code,a.from_source,a.from_source_name,a.sort,a.create_time,a.modify_time,a.from_tag,b.edb_name_source as from_edb_name,b.start_date,b.end_date,b.edb_type FROM predict_edb_conf_calculate_mapping AS a
 			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
 			WHERE a.edb_info_id=? AND a.config_id=?  ORDER BY sort ASC `
 
-	_, err = o.Raw(sql, edbInfoId, configId).QueryRows(&list)
+	//_, err = o.Raw(sql, edbInfoId, configId).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId, configId).Find(&list).Error
 	return
 }
 
@@ -85,11 +91,12 @@ func GetPredictEdbConfCalculateMappingDetailListByEdbInfoId(fromEdbInfoIdList []
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT a.predict_edb_conf_calculate_mapping_id,a.edb_info_id,a.from_edb_info_id,a.from_edb_code,a.from_source,a.from_source_name,a.sort,a.create_time,a.modify_time,a.from_tag,b.edb_name_source as from_edb_name,b.start_date,b.end_date,b.edb_type,b.edb_code FROM predict_edb_conf_calculate_mapping AS a
 			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
 			WHERE a.edb_info_id in (` + utils.GetOrmInReplace(num) + `) GROUP BY a.edb_info_id ORDER BY sort ASC `
 
-	_, err = o.Raw(sql, fromEdbInfoIdList).QueryRows(&list)
+	//_, err = o.Raw(sql, fromEdbInfoIdList).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, fromEdbInfoIdList).Find(&list).Error
 	return
 }

+ 8 - 4
models/data_manage/predict_edb_rule_data.go

@@ -1,13 +1,15 @@
 package data_manage
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // PredictEdbRuleData 预测指标,动态规则的计算数据
 type PredictEdbRuleData struct {
-	PredictEdbRuleDataId int `orm:"column(predict_edb_rule_data_id);pk"`
+	//PredictEdbRuleDataId int `orm:"column(predict_edb_rule_data_id);pk"`
+	PredictEdbRuleDataId int `gorm:"column:predict_edb_rule_data_id;primaryKey"`
 	EdbInfoId            int
 	ConfigId             int
 	DataTime             string
@@ -19,7 +21,7 @@ type PredictEdbRuleData struct {
 
 // GetPredictEdbRuleDataList 根据基础预测指标id集合 获取 所有的普通指标列表数据
 func GetPredictEdbRuleDataList(edbInfoId, configId int, startDate, endDate string) (list []*PredictEdbRuleData, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	var pars []interface{}
 	sql := ` SELECT * FROM predict_edb_rule_data WHERE edb_info_id = ? AND config_id = ? `
 	if startDate != "" {
@@ -31,6 +33,8 @@ func GetPredictEdbRuleDataList(edbInfoId, configId int, startDate, endDate strin
 		pars = append(pars, endDate)
 	}
 	sql += ` ORDER BY data_time ASC `
-	_, err = o.Raw(sql, edbInfoId, configId, pars).QueryRows(&list)
+	//_, err = o.Raw(sql, edbInfoId, configId, pars).QueryRows(&list)
+	pars = utils.ForwardPars(pars, []int{edbInfoId, configId})
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
 	return
 }

+ 4 - 4
models/db.go

@@ -10,7 +10,7 @@ import (
 	"github.com/beego/beego/v2/client/orm"
 )
 
-func init() {
+func init2() {
 
 	_ = orm.RegisterDataBase("default", "mysql", utils.MYSQL_URL)
 	orm.SetMaxIdleConns("default", 50)
@@ -44,7 +44,7 @@ func init() {
 	initFutureGood()
 
 	// 初始化部分数据表变量(直接init会有顺序问题=_=!)
-	afterInitTable()
+	AfterInitTable()
 }
 
 // initFutureGood 注册期货数据 数据表
@@ -57,11 +57,11 @@ func initFutureGood() {
 	)
 }
 
-// afterInitTable
+// AfterInitTable
 // @Description: 初始化表结构的的后置操作
 // @author: Roc
 // @datetime 2024-07-01 13:31:09
-func afterInitTable() {
+func AfterInitTable() {
 	// 初始化指标来源配置
 	data_manage.InitEdbSourceVar()
 

+ 79 - 49
models/excel_info.go

@@ -1,15 +1,16 @@
 package models
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ExcelInfo excel表格详情表
 type ExcelInfo struct {
-	ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
+	//ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
+	ExcelInfoId     int       `gorm:"column:excel_info_id;primaryKey"`
 	Source          int       `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
 	ExcelType       int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
 	ExcelName       string    `description:"表格名称"`
@@ -28,13 +29,15 @@ type ExcelInfo struct {
 
 // Update 更新 excel表格基础信息
 func (excelInfo *ExcelInfo) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(excelInfo, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(excelInfo, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&excelInfo).Select(cols).Updates(&excelInfo).Error
 	return
 }
 
 type MyExcelInfoList struct {
-	ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
+	//ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
+	ExcelInfoId     int       `gorm:"column:excel_info_id;primaryKey"`
 	ExcelName       string    `description:"表格名称"`
 	UniqueCode      string    `description:"表格唯一编码"`
 	ExcelClassifyId int       `description:"表格分类id"`
@@ -49,77 +52,85 @@ type MyExcelInfoList struct {
 
 // AddExcelInfo 新增表格
 func AddExcelInfo(excelInfo *ExcelInfo) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	// 表格信息入库
-	lastId, err := o.Insert(excelInfo)
-	if err != nil {
-		return
-	}
-	excelInfo.ExcelInfoId = int(lastId)
+	//lastId, err := o.Insert(excelInfo)
+	err = global.DbMap[utils.DbNameIndex].Model(&excelInfo).Create(&excelInfo).Error
+	//if err != nil {
+	//	return
+	//}
+	//excelInfo.ExcelInfoId = int(lastId)
 	return
 }
 
 // EditExcelInfo 编辑表格
 func EditExcelInfo(excelInfo *ExcelInfo, updateExcelInfoParams []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	// ETA表格信息变更
-	_, err = o.Update(excelInfo, updateExcelInfoParams...)
+	//_, err = o.Update(excelInfo, updateExcelInfoParams...)
+	err = global.DbMap[utils.DbNameIndex].Model(&excelInfo).Select(updateExcelInfoParams).Updates(&excelInfo).Error
 	return
 }
 
 // GetExcelInfoById 根据id 获取eta表格详情
 func GetExcelInfoById(excelInfoId int) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_info_id=? AND is_delete=0 `
-	err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	//err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).First(&item).Error
 	return
 }
 
 func GetExcelInfoViewById(excelInfoId int) (item *ExcelInfoView, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_info_id=? AND is_delete=0 `
-	err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	//err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).First(&item).Error
 	return
 }
 
 func GetExcelInfoCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT COUNT(1) AS count FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 func GetExcelInfoByCondition(condition string, pars []interface{}) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 // GetNextExcelInfo 根据分类id获取下一个excel表格
 func GetNextExcelInfo(classifyId int) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT b.* FROM excel_classify AS a
 			INNER JOIN excel_info AS b ON a.excel_classify_id=b.excel_classify_id
 			WHERE a.excel_classify_id>? AND is_delete=0
 			ORDER BY a.excel_classify_id ASC
 			LIMIT 1 `
-	err = o.Raw(sql, classifyId).QueryRow(&item)
+	//err = o.Raw(sql, classifyId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }
 
 // EditExcelInfoImage 修改excel表格的图片
 func EditExcelInfoImage(excelInfoId int, imageUrl string) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 
 	sql := ` UPDATE  excel_info SET excel_image=?, modify_time = NOW() WHERE excel_info_id = ? AND is_delete=0 `
-	_, err = o.Raw(sql, imageUrl, excelInfoId).Exec()
+	//_, err = o.Raw(sql, imageUrl, excelInfoId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, imageUrl, excelInfoId).Error
 	if err != nil {
 		fmt.Println("EditExcelInfoImage Err:", err.Error())
 		return err
@@ -130,33 +141,37 @@ func EditExcelInfoImage(excelInfoId int, imageUrl string) (err error) {
 
 // GetExcelInfoByUniqueCode 根据unique_code来获取excel表格详情
 func GetExcelInfoByUniqueCode(uniqueCode string) (item *ExcelInfoView, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE unique_code=? AND is_delete=0 `
-	err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	//err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, uniqueCode).First(&item).Error
 	return
 }
 
 // GetFirstExcelInfoByClassifyId 获取当前分类下,且排序数相同 的排序第一条的数据
 func GetFirstExcelInfoByClassifyId(classifyId int) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_classify_id=? AND is_delete=0 order by sort asc,excel_info_id asc limit 1`
-	err = o.Raw(sql, classifyId).QueryRow(&item)
+	//err = o.Raw(sql, classifyId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).First(&item).Error
 	return
 }
 
 // UpdateExcelInfoSortByClassifyId 根据表格id更新排序
 func UpdateExcelInfoSortByClassifyId(classifyId, nowSort, prevExcelInfoId int, updateSort string) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` update excel_info set sort = ` + updateSort + ` WHERE excel_classify_id=? and sort > ? AND is_delete=0 `
 	if prevExcelInfoId > 0 {
 		sql += ` or (excel_info_id > ` + fmt.Sprint(prevExcelInfoId) + ` and sort = ` + fmt.Sprint(nowSort) + `)`
 	}
-	_, err = o.Raw(sql, classifyId, nowSort).Exec()
+	//_, err = o.Raw(sql, classifyId, nowSort).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, classifyId, nowSort).Error
 	return
 }
 
 type ExcelInfoView struct {
-	ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
+	//ExcelInfoId     int       `orm:"column(excel_info_id);pk"`
+	ExcelInfoId     int       `gorm:"column:excel_info_id;primaryKey"`
 	Source          int       `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
 	ExcelType       int       `description:"表格类型,1:指标列,2:日期列,默认:1"`
 	ExcelName       string    `description:"表格名称"`
@@ -176,9 +191,10 @@ type ExcelInfoView struct {
 
 // GetExcelInfoByClassifyIdAndName 根据分类id和表格名获取表格信息
 func GetExcelInfoByClassifyIdAndName(classifyId int, excelName string) (item *ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_classify_id = ? and excel_name=? AND is_delete=0 `
-	err = o.Raw(sql, classifyId, excelName).QueryRow(&item)
+	//err = o.Raw(sql, classifyId, excelName).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId, excelName).First(&item).Error
 	return
 }
 
@@ -188,28 +204,36 @@ func GetExcelInfoListByUniqueCodeSlice(uniqueCodeSlice []string) (total int64, i
 	if num <= 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT * FROM excel_info WHERE unique_code in ("` + utils.GetOrmInReplace(num) + `") AND is_delete=0 `
-	total, err = o.Raw(sql, uniqueCodeSlice).QueryRows(&items)
+	//o := orm.NewOrmUsingDB("data")
+	//sql := ` SELECT * FROM excel_info WHERE unique_code in ("` + utils.GetOrmInReplace(num) + `") AND is_delete=0 `
+	//total, err = o.Raw(sql, uniqueCodeSlice).QueryRows(&items)
+	sql := ` SELECT * FROM excel_info WHERE unique_code in ? AND is_delete=0 `
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, uniqueCodeSlice).Find(&items).Error
+	if err != nil {
+		return
+	}
+	total = int64(len(items))
 	return
 }
 
 // GetExcelListByCondition 获取excel表格列表数据
 func GetExcelListByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*MyExcelInfoList, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
 	//sql += " ORDER BY sort ASC,chart_info_id DESC LIMIT ?,? "
 	sql += " ORDER BY create_time DESC LIMIT ?,? "
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&item).Error
 	return
 }
 
 // GetNoContentExcelListByCondition 获取没有content的excel表格列表数据
 func GetNoContentExcelListByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*MyExcelInfoList, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT excel_info_id,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 1=1 AND is_delete=0 `
 	if condition != "" {
@@ -217,43 +241,49 @@ FROM excel_info WHERE 1=1 AND is_delete=0 `
 	}
 	//sql += " ORDER BY sort ASC,chart_info_id DESC LIMIT ?,? "
 	sql += " ORDER BY create_time DESC LIMIT ?,? "
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Error
 	return
 }
 
 func GetExcelListCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT COUNT(1) AS count FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 // GetExcelViewInfoByExcelInfoId 根据excelInfoId 获取ETA表格详情
 func GetExcelViewInfoByExcelInfoId(excelInfoId int) (item *MyExcelInfoList, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE excel_info_id = ? AND is_delete=0 `
-	err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	//err = o.Raw(sql, excelInfoId).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, excelInfoId).First(&item).Error
 	return
 }
 
 // GetExcelInfoCountByClassifyId 根据分类id获取名下表格数量
 func GetExcelInfoCountByClassifyId(classifyId int) (total int64, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT count(1) total FROM excel_info WHERE excel_classify_id = ? AND is_delete=0 `
-	err = o.Raw(sql, classifyId).QueryRow(&total)
+	//err = o.Raw(sql, classifyId).QueryRow(&total)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Count(&total).Error
 	return
 }
 
 func GetExcelInfoListByCondition(condition string, pars []interface{}) (items []*ExcelInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_info WHERE 1=1 AND is_delete=0 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += ` ORDER BY sort asc, excel_info_id asc`
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	//_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }

+ 25 - 14
models/excel_info_rule_mapping.go

@@ -1,13 +1,14 @@
 package models
 
 import (
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
-
-	"github.com/beego/beego/v2/client/orm"
 )
 
 type ExcelInfoRuleMapping struct {
-	ExcelInfoRuleMappingId int       `orm:"pk" description:"主键"`
+	//ExcelInfoRuleMappingId int       `orm:"pk" description:"主键"`
+	ExcelInfoRuleMappingId int       `gorm:"primaryKey"`
 	ExcelInfoId            int       `description:"Excel信息ID"`
 	RuleType               int       `description:"规则类型"`
 	LeftValue              string    `description:"左值"`
@@ -27,7 +28,8 @@ type ExcelInfoRuleMapping struct {
 }
 
 type ExcelInfoRuleMappingView struct {
-	ExcelInfoRuleMappingId int    `orm:"pk" description:"主键"`
+	//ExcelInfoRuleMappingId int    `orm:"pk" description:"主键"`
+	ExcelInfoRuleMappingId int    `gorm:"primaryKey"`
 	ExcelInfoId            int    `description:"Excel信息ID"`
 	RuleType               int    `description:"规则类型:1-大于,2-小于,3-介于,4-等于,5-发生日期"`
 	LeftValue              string `description:"左值"`
@@ -47,36 +49,45 @@ type ExcelInfoRuleMappingView struct {
 }
 
 func (e *ExcelInfoRuleMapping) Insert() (insertId int64, err error) {
-	o := orm.NewOrmUsingDB("data")
-	insertId, err = o.Insert(e)
+	//o := orm.NewOrmUsingDB("data")
+	//insertId, err = o.Insert(e)
+	err = global.DbMap[utils.DbNameIndex].Create(&e).Error
+	if err != nil {
+		return
+	}
+	insertId = int64(e.ExcelInfoRuleMappingId)
 	return
 }
 
 func (e *ExcelInfoRuleMapping) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(e, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(e, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&e).Select(cols).Updates(&e).Error
 	return
 }
 
 // GetExcelRuleMappingByExcelInfoId 根据excelInfoId获取规则映射信息
 func GetExcelRuleMappingByExcelInfoId(id int) (items []*ExcelInfoRuleMappingView, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM excel_info_rule_mapping WHERE excel_info_id = ? ORDER BY create_time ASC`
-	_, err = o.Raw(sql, id).QueryRows(&items)
+	//_, err = o.Raw(sql, id).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).Find(&items).Error
 	return
 }
 
 // GetExcelRuleMappingById 根据主键Id获取规则映射信息
 func GetExcelRuleMappingById(id int) (item *ExcelInfoRuleMappingView, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM excel_info_rule_mapping WHERE excel_info_rule_mapping_id = ?`
-	err = o.Raw(sql, id).QueryRow(&item)
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }
 
 func DeleteExcelRuleMappingById(id int) (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := `DELETE FROM excel_info_rule_mapping WHERE excel_info_rule_mapping_id = ?`
-	_, err = o.Raw(sql, id).Exec()
+	//_, err = o.Raw(sql, id).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, id).Error
 	return
 }

+ 43 - 28
models/factor_edb_series_calculate_data_qjjs.go

@@ -1,16 +1,17 @@
 package models
 
 import (
+	"eta/eta_chart_lib/global"
 	"eta/eta_chart_lib/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"strings"
 	"time"
 )
 
 // FactorEdbSeriesCalculateDataQjjs 因子指标系列-区间计算数据表
 type FactorEdbSeriesCalculateDataQjjs struct {
-	FactorEdbSeriesCalculateDataId int       `orm:"column(factor_edb_series_calculate_data_id);pk"`
+	//FactorEdbSeriesCalculateDataId int       `orm:"column(factor_edb_series_calculate_data_id);pk"`
+	FactorEdbSeriesCalculateDataId int       `gorm:"column:factor_edb_series_calculate_data_id;primaryKey"`
 	FactorEdbSeriesId              int       `description:"因子指标系列ID"`
 	EdbInfoId                      int       `description:"指标ID"`
 	EdbCode                        string    `description:"指标编码"`
@@ -52,12 +53,13 @@ func (m *FactorEdbSeriesCalculateDataQjjs) Cols() FactorEdbSeriesCalculateDataQj
 }
 
 func (m *FactorEdbSeriesCalculateDataQjjs) Create() (err error) {
-	o := orm.NewOrmUsingDB("data")
-	id, err := o.Insert(m)
+	//o := orm.NewOrmUsingDB("data")
+	//id, err := o.Insert(m)
+	err = global.DbMap[utils.DbNameIndex].Create(&m).Error
 	if err != nil {
 		return
 	}
-	m.FactorEdbSeriesCalculateDataId = int(id)
+	//m.FactorEdbSeriesCalculateDataId = int(id)
 	return
 }
 
@@ -65,21 +67,24 @@ func (m *FactorEdbSeriesCalculateDataQjjs) CreateMulti(items []*FactorEdbSeriesC
 	if len(items) == 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.InsertMulti(500, items)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.InsertMulti(500, items)
+	err = global.DbMap[utils.DbNameIndex].CreateInBatches(items, 500).Error
 	return
 }
 
 func (m *FactorEdbSeriesCalculateDataQjjs) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(m, cols...)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Update(m, cols...)
+	err = global.DbMap[utils.DbNameIndex].Model(&m).Select(cols).Updates(&m).Error
 	return
 }
 
 func (m *FactorEdbSeriesCalculateDataQjjs) Remove() (err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
-	_, err = o.Raw(sql, m.FactorEdbSeriesCalculateDataId).Exec()
+	//_, err = o.Raw(sql, m.FactorEdbSeriesCalculateDataId).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, m.FactorEdbSeriesCalculateDataId).Error
 	return
 }
 
@@ -87,9 +92,11 @@ func (m *FactorEdbSeriesCalculateDataQjjs) MultiRemove(ids []int) (err error) {
 	if len(ids) == 0 {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
-	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
-	_, err = o.Raw(sql, ids).Exec()
+	//o := orm.NewOrmUsingDB("data")
+	//sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	//_, err = o.Raw(sql, ids).Exec()
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN ?`, m.TableName(), m.Cols().PrimaryId)
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, ids).Error
 	return
 }
 
@@ -97,39 +104,43 @@ func (m *FactorEdbSeriesCalculateDataQjjs) RemoveByCondition(condition string, p
 	if condition == "" {
 		return
 	}
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
-	_, err = o.Raw(sql, pars).Exec()
+	//_, err = o.Raw(sql, pars).Exec()
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, pars...).Error
 	return
 }
 
 func (m *FactorEdbSeriesCalculateDataQjjs) GetItemById(id int) (item *FactorEdbSeriesCalculateDataQjjs, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
-	err = o.Raw(sql, id).QueryRow(&item)
+	//err = o.Raw(sql, id).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, id).First(&item).Error
 	return
 }
 
 func (m *FactorEdbSeriesCalculateDataQjjs) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *FactorEdbSeriesCalculateDataQjjs, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	order := ``
 	if orderRule != "" {
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
-	err = o.Raw(sql, pars).QueryRow(&item)
+	//err = o.Raw(sql, pars).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).First(&item).Error
 	return
 }
 
 func (m *FactorEdbSeriesCalculateDataQjjs) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
-	err = o.Raw(sql, pars).QueryRow(&count)
+	//err = o.Raw(sql, pars).QueryRow(&count)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 func (m *FactorEdbSeriesCalculateDataQjjs) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*FactorEdbSeriesCalculateDataQjjs, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -139,12 +150,13 @@ func (m *FactorEdbSeriesCalculateDataQjjs) GetItemsByCondition(condition string,
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+	//_, err = o.Raw(sql, pars).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
 func (m *FactorEdbSeriesCalculateDataQjjs) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*FactorEdbSeriesCalculateDataQjjs, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
 	if len(fieldArr) == 0 {
 		fields = `*`
@@ -154,7 +166,9 @@ func (m *FactorEdbSeriesCalculateDataQjjs) GetPageItemsByCondition(condition str
 		order = ` ORDER BY ` + orderRule
 	}
 	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
-	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	//_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -192,7 +206,8 @@ func (m *FactorEdbSeriesCalculateDataQjjs) GetEdbDataList(seriesId int, edbInfoI
 
 	sql += ` ORDER BY data_time ASC `
 	sql = fmt.Sprintf(sql, m.TableName())
-	o := orm.NewOrmUsingDB("data")
-	_, err = o.Raw(sql, pars).QueryRows(&list)
+	//o := orm.NewOrmUsingDB("data")
+	//_, err = o.Raw(sql, pars).QueryRows(&list)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Find(&list).Error
 	return
 }

+ 31 - 0
models/referenced_excel_config.go

@@ -0,0 +1,31 @@
+package models
+
+import (
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
+	"time"
+)
+
+type ReferencedExcelConfig struct {
+	//ReferencedExcelConfigId int       `orm:"column(referenced_excel_config_id);pk;auto" ` // excel表格配置id
+	ReferencedExcelConfigId int       `gorm:"column:referenced_excel_config_id;primaryKey;autoIncrement" ` // excel表格配置id
+	UniqueCode              string    // 表格唯一编码
+	ReferencedId            int       // 被引用的id,报告就是报告id,pptId
+	FromScene               int       // 引用类型 1智能研报 2研报列表 3英文研报 4PPT 5英文ppt
+	Uuid                    string    // 引用唯一标识
+	WidthList               string    // 宽度数组
+	HeightList              string    // 高度数组
+	OpUserId                int       // 当前编辑操作的用户id
+	OpUserName              string    // 当前编辑的用户名称(冗余字段,避免查表)
+	CreateTime              time.Time // 创建时间
+	Content                 string    // 内容
+	ModifyTime              time.Time // 修改时间
+}
+
+// getByCode
+func GetReferencedExcelConfig(referencedId, fromScene int, uniqueCode, uuid string) (item ReferencedExcelConfig, err error) {
+	o := global.DbMap[utils.DbNameIndex]
+	sql := ` SELECT * FROM referenced_excel_config WHERE referenced_id = ? AND from_scene = ? AND unique_code = ? AND uuid = ? `
+	err = o.Raw(sql, referencedId, fromScene, uniqueCode, uuid).First(&item).Error
+	return
+}

+ 8 - 0
models/request/mini.go

@@ -0,0 +1,8 @@
+package request
+
+type ChartCollectReq struct {
+	UniqueCode string `json:"uniqueCode"`
+	Source     string `json:"source"`
+	Action     string `json:"action"`
+	ExtraInfo  string `json:"extraInfo"` //通用额外信息传输需要的扩展信息
+}

+ 1 - 0
models/request/mixed_table.go

@@ -169,6 +169,7 @@ type MixCellShowStyle struct {
 	BackgroundColor string      `description:"背景颜色值,#RRG" json:"background-color"`
 	Width           float64     `description:"单元格宽度" json:"width"`
 	Align           string      `description:"对齐方式:left|center|right" json:"align"`
+	FontSize        string      `description:"字体大小" json:"font-size"`
 }
 
 type DateDataBeforeAfterReq struct {

+ 11 - 10
models/response/excel_info.go

@@ -10,17 +10,18 @@ import (
 // ExcelTableDetailResp  excel表格详情
 type ExcelTableDetailResp struct {
 	//ChartInfo   *ChartInfo
-	UniqueCode    string `description:"表格唯一code"`
-	Source        int    `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
-	ExcelType     int    `description:"表格类型,1:指标列,2:日期列,默认:1"`
-	ExcelImage    string `description:"表格截图"`
-	ExcelName     string `description:"表格名称"`
-	SourcesFrom   string `description:"图表来源"`
-	ExcelSource   string `description:"表格来源str"`
-	ExcelSourceEn string `description:"表格来源(英文)"`
+	UniqueCode            string `description:"表格唯一code"`
+	Source                int    `description:"表格来源,1:excel插件的表格,2:自定义表格,默认:1"`
+	ExcelType             int    `description:"表格类型,1:指标列,2:日期列,默认:1"`
+	ExcelImage            string `description:"表格截图"`
+	ExcelName             string `description:"表格名称"`
+	SourcesFrom           string `description:"图表来源"`
+	ExcelSource           string `description:"表格来源str"`
+	ExcelSourceEn         string `description:"表格来源(英文)"`
 	IsAuth        bool   `description:"是否授权"`
-	TableInfo     excel.TableData
-	Config        ExcelTableDetailConfigResp
+	TableInfo             excel.TableData
+	Config                ExcelTableDetailConfigResp
+	ReferencedExcelConfig models.ReferencedExcelConfig `description:"表格引用信息"`
 }
 
 // ExcelTableDetailConfigResp

+ 11 - 4
models/share_chart_refresh_log.go

@@ -1,13 +1,15 @@
 package models
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 // ShareChartRefreshLog 分享图表的日志
 type ShareChartRefreshLog struct {
-	Id         int    `orm:"column(id);pk"`
+	//Id         int    `orm:"column(id);pk"`
+	Id         int    `gorm:"column:id;primaryKey"`
 	Ip         string `description:"来源ip"`
 	ChartId    int    `description:"图表分类id"`
 	CreateTime time.Time
@@ -15,7 +17,12 @@ type ShareChartRefreshLog struct {
 
 // AddShareChartRefreshLog 添加日志
 func AddShareChartRefreshLog(item *ShareChartRefreshLog) (lastId int64, err error) {
-	o := orm.NewOrmUsingDB("data")
-	lastId, err = o.Insert(item)
+	//o := orm.NewOrmUsingDB("data")
+	err = global.DbMap[utils.DbNameIndex].Create(&item).Error
+	if err != nil {
+		return
+	}
+	lastId = int64(item.Id)
+	//lastId, err = o.Insert(item)
 	return
 }

+ 7 - 4
models/table.go

@@ -1,12 +1,14 @@
 package models
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 type TableInfo struct {
-	TableInfoId     int       `orm:"column(table_info_id);pk"`
+	TableInfoId int `gorm:"column:table_info_id;primaryKey"`
+	//TableInfoId     int       `orm:"column(table_info_id);pk"`
 	TableName       string    `description:"表格名称"`
 	UniqueCode      string    `description:"表格唯一编码"`
 	TableClassifyId int       `description:"表格分类id"`
@@ -24,9 +26,10 @@ type TableInfo struct {
 
 // GetTableInfoByUniqueCode 根据union_code 获取表格信息
 func GetTableInfoByUniqueCode(uniqueCode string) (item *TableInfo, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM table_info WHERE unique_code=? `
-	err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	//err = o.Raw(sql, uniqueCode).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, uniqueCode).First(&item).Error
 	return
 }
 

+ 7 - 5
models/table_data.go

@@ -1,12 +1,14 @@
 package models
 
 import (
-	"github.com/beego/beego/v2/client/orm"
+	"eta/eta_chart_lib/global"
+	"eta/eta_chart_lib/utils"
 	"time"
 )
 
 type TableData struct {
-	TableDataId       int       `orm:"column(table_data_id);pk"`
+	//TableDataId       int       `orm:"column(table_data_id);pk"`
+	TableDataId       int       `gorm:"column:table_data_id;primaryKey"`
 	TableInfoId       int       `description:"表格id"`
 	Date              time.Time `description:"指标时间"`
 	DataCol1          string    `orm:"column(data_col_1);" description:"第1个表格的数据"`
@@ -29,12 +31,12 @@ type TableData struct {
 
 // GetTableDataListByTableInfoId 根据表格id获取数据列表
 func GetTableDataListByTableInfoId(tableInfoId int) (items []*TableData, err error) {
-	o := orm.NewOrmUsingDB("data")
+	//o := orm.NewOrmUsingDB("data")
 	pars := make([]interface{}, 0)
 	pars = append(pars, tableInfoId)
 
 	sql := ` SELECT * FROM table_data WHERE table_info_id = ? order by sort asc `
-
-	_, err = o.Raw(sql, tableInfoId).QueryRows(&items)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, tableInfoId).Find(&items).Error
+	//_, err = o.Raw(sql, tableInfoId).QueryRows(&items)
 	return
 }

+ 18 - 0
routers/commentsRouter.go

@@ -70,6 +70,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:ChartController"] = append(beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:ChartController"],
+        beego.ControllerComments{
+            Method: "MiniBookMark",
+            Router: `/mini/bookMark`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:ChartController"] = append(beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:ChartController"],
         beego.ControllerComments{
             Method: "ChartInfoRefresh",
@@ -79,6 +88,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:EtaForumChartController"] = append(beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:EtaForumChartController"],
+        beego.ControllerComments{
+            Method: "CommonChartInfoDetailFromUniqueCode",
+            Router: `/chart/common/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_chart_lib/controllers:ExcelInfoController"],
         beego.ControllerComments{
             Method: "GetTableDetail",

+ 5 - 0
routers/router.go

@@ -34,6 +34,11 @@ func init() {
 				&controllers.ExcelInfoController{},
 			),
 		),
+		web.NSNamespace("/eta_forum",
+			web.NSInclude(
+				&controllers.EtaForumChartController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 593 - 0
services/data/area_graph/processor_business_logic.go

@@ -0,0 +1,593 @@
+package area_graph
+
+import (
+	"errors"
+	"eta/eta_chart_lib/models"
+	"eta/eta_chart_lib/models/data_manage"
+	"eta/eta_chart_lib/utils"
+	"github.com/shopspring/decimal"
+	"math"
+	"sort"
+	"time"
+)
+
+type InterpolateStrategy struct{}
+
+// Deal 空值填充:插值法填充
+func (i *InterpolateStrategy) Deal(tmpConfig data_manage.AreaExtraConf, edbDataList []*models.ChartEdbInfoMapping, standardIndexMap map[string]*models.EdbDataList, startDate string, endDate string) (err error) {
+	for _, v := range edbDataList {
+		if v.EdbInfoId != tmpConfig.StandardEdbInfoId {
+			if dataList, ok := v.DataList.([]*models.EdbDataList); ok {
+
+				// 存放补充数据
+				var replenishDataList []*models.EdbDataList
+
+				// 处理从 startDate 到第一个数据的日期补充
+				if len(dataList) > 0 {
+					firstData := dataList[0]
+					// 将 startDate 到第一个数据日期之间的自然日填充补充数据,值为 0
+					startDataTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
+					firstDataTime, _ := time.ParseInLocation(utils.FormatDate, firstData.DataTime, time.Local)
+
+					// 计算两个日期之间的天数差
+					if !startDataTime.Equal(firstDataTime) {
+						for startDataTime.Before(firstDataTime) {
+							// 补充数据
+							nextDay := startDataTime.Format(utils.FormatDate)
+
+							// 生成补充数据,值为 0
+							replenishIndexData := models.EdbDataList{
+								EdbInfoId:     v.EdbInfoId,
+								DataTime:      nextDay,
+								DataTimestamp: startDataTime.UnixMilli(),
+								Value:         0,
+							}
+
+							// 将补充数据加入补充数据列表
+							replenishDataList = append(replenishDataList, &replenishIndexData)
+
+							// 更新 startDataTime 到下一个日期
+							startDataTime = startDataTime.AddDate(0, 0, 1)
+						}
+					}
+				}
+
+				// 插值法补充数据
+				var startEdbInfoData *models.EdbDataList
+				for index := 0; index < len(dataList); index++ {
+					// 获取当前数据和下一个数据
+					currentIndexData := dataList[index]
+					//afterIndexData := dataList[index+1]
+
+					if startEdbInfoData == nil {
+						startEdbInfoData = currentIndexData
+						continue
+					}
+
+					// 获取两条数据之间相差的天数
+					startDataTime, _ := time.ParseInLocation(utils.FormatDate, startEdbInfoData.DataTime, time.Local)
+					currDataTime, _ := time.ParseInLocation(utils.FormatDate, currentIndexData.DataTime, time.Local)
+					betweenHour := int(currDataTime.Sub(startDataTime).Hours())
+					betweenDay := betweenHour / 24
+
+					// 如果相差一天,那么过滤
+					if betweenDay <= 1 {
+						startEdbInfoData = currentIndexData
+						continue
+					}
+
+					// 生成线性方程式
+					var a, b float64
+					{
+						coordinateData := make([]utils.Coordinate, 0)
+						tmpCoordinate1 := utils.Coordinate{
+							X: 1,
+							Y: startEdbInfoData.Value,
+						}
+						coordinateData = append(coordinateData, tmpCoordinate1)
+						tmpCoordinate2 := utils.Coordinate{
+							X: float64(betweenDay) + 1,
+							Y: currentIndexData.Value,
+						}
+						coordinateData = append(coordinateData, tmpCoordinate2)
+
+						a, b = utils.GetLinearResult(coordinateData)
+						if math.IsNaN(a) || math.IsNaN(b) {
+							err = errors.New("线性方程公式生成失败")
+							return
+						}
+					}
+
+					// 插值补充数据
+					for i := 1; i < betweenDay; i++ {
+						tmpDataTime := startDataTime.AddDate(0, 0, i)
+						aDecimal := decimal.NewFromFloat(a)
+						xDecimal := decimal.NewFromInt(int64(i) + 1)
+						bDecimal := decimal.NewFromFloat(b)
+
+						val, _ := aDecimal.Mul(xDecimal).Add(bDecimal).Round(4).Float64()
+						nextDay := tmpDataTime.Format(utils.FormatDate)
+
+						replenishIndexData := models.EdbDataList{
+							EdbDataId:     currentIndexData.EdbDataId,
+							DataTime:      nextDay,
+							DataTimestamp: tmpDataTime.UnixMilli(),
+							Value:         val,
+						}
+
+						// 将补充数据加入补充数据列表
+						replenishDataList = append(replenishDataList, &replenishIndexData)
+					}
+					startEdbInfoData = currentIndexData
+				}
+
+				// 处理从最后一个数据到 endDate 的日期补充
+				if len(dataList) > 0 {
+					lastData := dataList[len(dataList)-1]
+					// 将最后一个数据日期到 endDate 之间的自然日填充补充数据,值为 0
+					lastDataTime, _ := time.ParseInLocation(utils.FormatDate, lastData.DataTime, time.Local)
+					endDataTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
+
+					// 如果 lastDataTime 不等于 endDate,进行补充
+					if !lastDataTime.Equal(endDataTime) {
+						// 补充数据直到 endDate
+						for lastDataTime.Before(endDataTime) {
+							// 补充数据
+							addDate := lastDataTime.AddDate(0, 0, 1)
+							nextDay := addDate.Format(utils.FormatDate)
+
+							// 生成补充数据,值为 0
+							replenishIndexData := models.EdbDataList{
+								EdbInfoId:     v.EdbInfoId,
+								DataTime:      nextDay,
+								DataTimestamp: addDate.UnixMilli(),
+								Value:         0,
+							}
+
+							// 将补充数据加入补充数据列表
+							replenishDataList = append(replenishDataList, &replenishIndexData)
+
+							// 更新 lastDataTime 到下一个日期
+							lastDataTime = addDate
+						}
+					}
+				}
+
+				dataList = append(dataList, replenishDataList...)
+
+				// 根据基准指标筛选出符合数据
+				var resultDataList []*models.EdbDataList
+				for _, dataObject := range dataList {
+					if _, ok := standardIndexMap[dataObject.DataTime]; ok {
+						// 存在才保留
+						resultDataList = append(resultDataList, dataObject)
+					}
+				}
+
+				// 排序
+				sort.Slice(resultDataList, func(i, j int) bool {
+					return resultDataList[i].DataTimestamp < resultDataList[j].DataTimestamp
+				})
+
+				v.DataList = resultDataList
+			}
+		}
+	}
+	return nil
+}
+
+type FillWithPreviousStrategy struct{}
+
+// Deal 空值填充:前值填充
+func (f *FillWithPreviousStrategy) Deal(tmpConfig data_manage.AreaExtraConf, edbDataList []*models.ChartEdbInfoMapping, standardIndexMap map[string]*models.EdbDataList, startDate string, endDate string) (err error) {
+	// 按自然日补充,再根据基准指标取对应数据
+	for _, v := range edbDataList {
+		if v.EdbInfoId != tmpConfig.StandardEdbInfoId {
+			if dataList, ok := v.DataList.([]*models.EdbDataList); ok {
+				// 存放补充数据
+				var replenishDataList []*models.EdbDataList
+
+				// 处理从 startDate 到第一个数据的日期补充
+				if len(dataList) > 0 {
+					firstData := dataList[0]
+					// 将 startDate 到第一个数据日期之间的自然日填充补充数据,值为 0
+					startDataTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
+					firstDataTime, _ := time.ParseInLocation(utils.FormatDate, firstData.DataTime, time.Local)
+
+					// 计算两个日期之间的天数差
+					if !startDataTime.Equal(firstDataTime) {
+						for startDataTime.Before(firstDataTime) {
+							// 补充数据
+							nextDay := startDataTime.Format(utils.FormatDate)
+
+							// 生成补充数据,值为 0
+							replenishIndexData := models.EdbDataList{
+								EdbInfoId:     v.EdbInfoId,
+								DataTime:      nextDay,
+								DataTimestamp: startDataTime.UnixMilli(),
+								Value:         0,
+							}
+
+							// 将补充数据加入补充数据列表
+							replenishDataList = append(replenishDataList, &replenishIndexData)
+
+							// 更新 startDataTime 到下一个日期
+							startDataTime = startDataTime.AddDate(0, 0, 1)
+						}
+					}
+				}
+
+				// 处理指标中空值数据
+				for index := 0; index < len(dataList)-1; index++ {
+					// 获取当前数据和下一个数据
+					beforeIndexData := dataList[index]
+					afterIndexData := dataList[index+1]
+
+					for utils.IsMoreThanOneDay(beforeIndexData.DataTime, afterIndexData.DataTime) {
+						// 创建补充数据
+						nextDay := utils.GetNextDay(beforeIndexData.DataTime)
+
+						toTime := utils.StringToTime(nextDay)
+						replenishIndexData := models.EdbDataList{
+							EdbInfoId:     v.EdbInfoId,
+							DataTime:      nextDay,
+							DataTimestamp: toTime.UnixMilli(),
+							Value:         beforeIndexData.Value,
+						}
+
+						// 将补充数据加入补充数据列表
+						replenishDataList = append(replenishDataList, &replenishIndexData)
+
+						// 更新 beforeIndexData 为新创建的补充数据
+						beforeIndexData = &replenishIndexData
+					}
+				}
+
+				// 处理从最后一个数据到 endDate 的日期补充
+				if len(dataList) > 0 {
+					lastData := dataList[len(dataList)-1]
+					// 将最后一个数据日期到 endDate 之间的自然日填充补充数据,值为 0
+					lastDataTime, _ := time.ParseInLocation(utils.FormatDate, lastData.DataTime, time.Local)
+					endDataTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
+
+					// 如果 lastDataTime 不等于 endDate,进行补充
+					if !lastDataTime.Equal(endDataTime) {
+						// 补充数据直到 endDate
+						for lastDataTime.Before(endDataTime) {
+							// 补充数据
+							addDate := lastDataTime.AddDate(0, 0, 1)
+							nextDay := addDate.Format(utils.FormatDate)
+
+							// 生成补充数据,值为 0
+							replenishIndexData := models.EdbDataList{
+								EdbInfoId:     v.EdbInfoId,
+								DataTime:      nextDay,
+								DataTimestamp: addDate.UnixMilli(),
+								Value:         0,
+							}
+
+							// 将补充数据加入补充数据列表
+							replenishDataList = append(replenishDataList, &replenishIndexData)
+
+							// 更新 lastDataTime 到下一个日期
+							lastDataTime = addDate
+						}
+					}
+				}
+
+				dataList = append(dataList, replenishDataList...)
+
+				// 根据基准指标筛选出符合数据
+				var resultDataList []*models.EdbDataList
+				for _, dataObject := range dataList {
+					_, ok = standardIndexMap[dataObject.DataTime]
+					if ok {
+						// 存在才保留
+						resultDataList = append(resultDataList, dataObject)
+					}
+				}
+
+				// 排序
+				sort.Slice(resultDataList, func(i, j int) bool {
+					return resultDataList[i].DataTimestamp < resultDataList[j].DataTimestamp
+				})
+
+				v.DataList = resultDataList
+			}
+		}
+	}
+	return nil
+}
+
+type FillWithNextStrategy struct{}
+
+// Deal 空值填充:后值填充
+func (f *FillWithNextStrategy) Deal(tmpConfig data_manage.AreaExtraConf, edbDataList []*models.ChartEdbInfoMapping, standardIndexMap map[string]*models.EdbDataList, startDate string, endDate string) (err error) {
+	// 按自然日补充,再根据基准指标取对应数据
+	for _, v := range edbDataList {
+		if v.EdbInfoId != tmpConfig.StandardEdbInfoId {
+			if dataList, ok := v.DataList.([]*models.EdbDataList); ok {
+
+				// 存放补充数据
+				var replenishDataList []*models.EdbDataList
+
+				// 处理从 startDate 到第一个数据的日期补充
+				if len(dataList) > 0 {
+					firstData := dataList[0]
+					// 将 startDate 到第一个数据日期之间的自然日填充补充数据,值为 0
+					startDataTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
+					firstDataTime, _ := time.ParseInLocation(utils.FormatDate, firstData.DataTime, time.Local)
+
+					// 计算两个日期之间的天数差
+					if !startDataTime.Equal(firstDataTime) {
+						for !startDataTime.After(firstDataTime) {
+							// 补充数据
+							nextDay := startDataTime.Format(utils.FormatDate)
+
+							// 生成补充数据,值为 0
+							replenishIndexData := models.EdbDataList{
+								EdbInfoId:     v.EdbInfoId,
+								DataTime:      nextDay,
+								DataTimestamp: startDataTime.UnixMilli(),
+								Value:         0,
+							}
+
+							// 将补充数据加入补充数据列表
+							replenishDataList = append(replenishDataList, &replenishIndexData)
+
+							// 更新 startDataTime 到下一个日期
+							startDataTime = startDataTime.AddDate(0, 0, 1)
+						}
+					}
+				}
+
+				// 处理从最后一个数据到 endDate 的日期补充
+				if len(dataList) > 0 {
+					lastData := dataList[len(dataList)-1]
+					// 将最后一个数据日期到 endDate 之间的自然日填充补充数据,值为 0
+					lastDataTime, _ := time.ParseInLocation(utils.FormatDate, lastData.DataTime, time.Local)
+					endDataTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
+
+					// 如果 lastDataTime 不等于 endDate,进行补充
+					if !lastDataTime.Equal(endDataTime) {
+						// 补充数据直到 endDate
+						for lastDataTime.Before(endDataTime) {
+							// 补充数据
+							addDate := lastDataTime.AddDate(0, 0, 1)
+							nextDay := addDate.Format(utils.FormatDate)
+
+							// 生成补充数据,值为 0
+							replenishIndexData := models.EdbDataList{
+								EdbInfoId:     v.EdbInfoId,
+								DataTime:      nextDay,
+								DataTimestamp: addDate.UnixMilli(),
+								Value:         0,
+							}
+
+							// 将补充数据加入补充数据列表
+							replenishDataList = append(replenishDataList, &replenishIndexData)
+
+							// 更新 lastDataTime 到下一个日期
+							lastDataTime = addDate
+						}
+					}
+				}
+
+				// 将切片数据倒序
+				reverseSlice(dataList)
+
+				// 处理指标中空值数据
+				for index := 0; index < len(dataList)-1; index++ {
+					// 获取当前数据和下一个数据
+					beforeIndexData := dataList[index]
+					afterIndexData := dataList[index+1]
+
+					for utils.IsMoreThanOneDay(afterIndexData.DataTime, beforeIndexData.DataTime) {
+						// 创建补充数据
+						nextDay := utils.GetNextDay(afterIndexData.DataTime)
+
+						toTime := utils.StringToTime(nextDay)
+						replenishIndexData := models.EdbDataList{
+							EdbInfoId:     v.EdbInfoId,
+							DataTime:      nextDay,
+							DataTimestamp: toTime.UnixMilli(),
+							Value:         beforeIndexData.Value,
+						}
+
+						// 将补充数据加入补充数据列表
+						replenishDataList = append(replenishDataList, &replenishIndexData)
+
+						// 更新 beforeIndexData 为新创建的补充数据
+						afterIndexData = &replenishIndexData
+					}
+				}
+
+				dataList = append(dataList, replenishDataList...)
+
+				// 根据基准指标筛选出符合数据
+				var resultDataList []*models.EdbDataList
+				for _, dataObject := range dataList {
+					_, ok = standardIndexMap[dataObject.DataTime]
+					if ok {
+						// 存在才保留
+						resultDataList = append(resultDataList, dataObject)
+					}
+				}
+
+				// 排序
+				sort.Slice(resultDataList, func(i, j int) bool {
+					return resultDataList[i].DataTimestamp < resultDataList[j].DataTimestamp
+				})
+
+				v.DataList = resultDataList
+			}
+		}
+	}
+	return nil
+}
+
+type SetToZeroStrategy struct{}
+
+// Deal 空值填充:设为0
+func (s *SetToZeroStrategy) Deal(tmpConfig data_manage.AreaExtraConf, edbDataList []*models.ChartEdbInfoMapping, standardIndexMap map[string]*models.EdbDataList, startDate string, endDate string) (err error) {
+	// 按自然日补充,再根据基准指标取对应数据
+	for _, v := range edbDataList {
+		if v.EdbInfoId != tmpConfig.StandardEdbInfoId {
+			if dataList, ok := v.DataList.([]*models.EdbDataList); ok {
+				// 存放补充数据
+				var replenishDataList []*models.EdbDataList
+
+				// 处理从 startDate 到第一个数据的日期补充
+				if len(dataList) > 0 {
+					firstData := dataList[0]
+					// 将 startDate 到第一个数据日期之间的自然日填充补充数据,值为 0
+					startDataTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
+					firstDataTime, _ := time.ParseInLocation(utils.FormatDate, firstData.DataTime, time.Local)
+
+					// 计算两个日期之间的天数差
+					if !startDataTime.Equal(firstDataTime) {
+						for startDataTime.Before(firstDataTime) {
+							// 补充数据
+							nextDay := startDataTime.Format(utils.FormatDate)
+
+							// 生成补充数据,值为 0
+							replenishIndexData := models.EdbDataList{
+								EdbInfoId:     v.EdbInfoId,
+								DataTime:      nextDay,
+								DataTimestamp: startDataTime.UnixMilli(),
+								Value:         0,
+							}
+
+							// 将补充数据加入补充数据列表
+							replenishDataList = append(replenishDataList, &replenishIndexData)
+
+							// 更新 startDataTime 到下一个日期
+							startDataTime = startDataTime.AddDate(0, 0, 1)
+						}
+					}
+				}
+
+				// 处理指标中空值数据
+				for index := 0; index < len(dataList)-1; index++ {
+					// 获取当前数据和下一个数据
+					beforeIndexData := dataList[index]
+					afterIndexData := dataList[index+1]
+
+					for utils.IsMoreThanOneDay(beforeIndexData.DataTime, afterIndexData.DataTime) {
+						// 创建补充数据
+						nextDay := utils.GetNextDay(beforeIndexData.DataTime)
+
+						toTime := utils.StringToTime(nextDay)
+						replenishIndexData := models.EdbDataList{
+							EdbInfoId:     v.EdbInfoId,
+							DataTime:      nextDay,
+							DataTimestamp: toTime.UnixMilli(),
+							Value:         0,
+						}
+
+						// 将补充数据加入补充数据列表
+						replenishDataList = append(replenishDataList, &replenishIndexData)
+
+						// 更新 beforeIndexData 为新创建的补充数据
+						beforeIndexData = &replenishIndexData
+					}
+				}
+
+				// 处理从最后一个数据到 endDate 的日期补充
+				if len(dataList) > 0 {
+					lastData := dataList[len(dataList)-1]
+					// 将最后一个数据日期到 endDate 之间的自然日填充补充数据,值为 0
+					lastDataTime, _ := time.ParseInLocation(utils.FormatDate, lastData.DataTime, time.Local)
+					endDataTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
+
+					// 如果 lastDataTime 不等于 endDate,进行补充
+					if !lastDataTime.Equal(endDataTime) {
+						// 补充数据直到 endDate
+						for lastDataTime.Before(endDataTime) {
+							// 补充数据
+							addDate := lastDataTime.AddDate(0, 0, 1)
+							nextDay := addDate.Format(utils.FormatDate)
+
+							// 生成补充数据,值为 0
+							replenishIndexData := models.EdbDataList{
+								EdbInfoId:     v.EdbInfoId,
+								DataTime:      nextDay,
+								DataTimestamp: addDate.UnixMilli(),
+								Value:         0,
+							}
+
+							// 将补充数据加入补充数据列表
+							replenishDataList = append(replenishDataList, &replenishIndexData)
+
+							// 更新 lastDataTime 到下一个日期
+							lastDataTime = addDate
+						}
+					}
+				}
+
+				dataList = append(dataList, replenishDataList...)
+
+				// 根据基准指标筛选出符合数据
+				var resultDataList []*models.EdbDataList
+				for _, dataObject := range dataList {
+					_, ok = standardIndexMap[dataObject.DataTime]
+					if ok {
+						// 存在才保留
+						resultDataList = append(resultDataList, dataObject)
+					}
+				}
+
+				// 排序
+				sort.Slice(resultDataList, func(i, j int) bool {
+					return resultDataList[i].DataTimestamp < resultDataList[j].DataTimestamp
+				})
+
+				v.DataList = resultDataList
+			}
+		}
+	}
+	return nil
+}
+
+type DeleteDateStrategy struct{}
+
+// Deal 删除日期
+func (d *DeleteDateStrategy) Deal(tmpConfig data_manage.AreaExtraConf, edbDataList []*models.ChartEdbInfoMapping, standardIndexMap map[string]*models.EdbDataList, startDate string, endDate string) error {
+	// 取所有指标的时间交集
+	// 创建一个 map 来保存每个时间点的出现次数
+	timeMap := make(map[string]int)
+	for _, v := range edbDataList {
+		if dataList, ok := v.DataList.([]*models.EdbDataList); ok {
+			// 遍历所有的 dataList,为每个 DataTime 增加一个计数
+			for _, dataObject := range dataList {
+				timeMap[dataObject.DataTime]++
+			}
+		}
+	}
+
+	for _, v := range edbDataList {
+		if dataList, ok := v.DataList.([]*models.EdbDataList); ok {
+			// 遍历所有的 dataList,保留所有时间点在所有指标中都存在的数据
+			var resultDataList []*models.EdbDataList
+			for _, dataObject := range dataList {
+				if timeMap[dataObject.DataTime] == len(edbDataList) {
+					// 如果该时间点在所有指标中都存在,加入到结果列表
+					resultDataList = append(resultDataList, dataObject)
+				}
+			}
+
+			// 将符合条件的数据重新赋值回 v.DataList
+			v.DataList = resultDataList
+		}
+	}
+	return nil
+}
+
+// 将列表颠倒
+func reverseSlice(dataList []*models.EdbDataList) {
+	// 使用双指针法,前后两个指针向中间逼近
+	for i, j := 0, len(dataList)-1; i < j; i, j = i+1, j-1 {
+		// 交换位置
+		dataList[i], dataList[j] = dataList[j], dataList[i]
+	}
+}

+ 28 - 0
services/data/area_graph/processor_factory.go

@@ -0,0 +1,28 @@
+package area_graph
+
+import (
+	"eta/eta_chart_lib/models"
+	"eta/eta_chart_lib/models/data_manage"
+	"fmt"
+)
+
+type NullDealStrategy interface {
+	Deal(tmpConfig data_manage.AreaExtraConf, edbDataList []*models.ChartEdbInfoMapping, standardIndexMap map[string]*models.EdbDataList, startDate string, endDate string) (err error)
+}
+
+func CreateStrategy(dealWay int) (NullDealStrategy, error) {
+	switch dealWay {
+	case 1:
+		return &InterpolateStrategy{}, nil
+	case 2:
+		return &FillWithPreviousStrategy{}, nil
+	case 3:
+		return &FillWithNextStrategy{}, nil
+	case 4:
+		return &SetToZeroStrategy{}, nil
+	case 5:
+		return &DeleteDateStrategy{}, nil
+	default:
+		return nil, fmt.Errorf("未知的空值处理类型: %d", dealWay)
+	}
+}

+ 20 - 4
services/data/chart_info.go

@@ -399,6 +399,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
 			item.ChartStyle = ""
 			item.ChartColor = ""
 			item.ChartWidth = 0
+			item.ChartScale = 0
 			item.MaxData = v.MaxValue
 			item.MinData = v.MinValue
 		} else {
@@ -412,6 +413,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
 			item.ChartStyle = v.ChartStyle
 			item.ChartColor = v.ChartColor
 			item.ChartWidth = v.ChartWidth
+			item.ChartScale = v.ChartScale
 			item.IsOrder = v.IsOrder
 			item.MaxData = v.MaxData
 			item.MinData = v.MinData
@@ -612,6 +614,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
 				return
 			}
 
+			nowYear := time.Now().Year()
 			newDataList := make([]*models.EdbDataList, 0)
 			for _, v := range dataList {
 				dataTime, e := time.Parse(utils.FormatDate, v.DataTime)
@@ -619,6 +622,10 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
 					err = errors.New("季节性图处理右轴指标数据转换日期失败,Err:" + e.Error())
 					return
 				}
+				dataTimeT, _ := time.Parse(utils.FormatDate, v.DataTime)
+				year := dataTimeT.Year()
+				newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
+				v.DataTimestamp = newItemDate.UnixNano() / 1e6
 				if dataTime.Equal(rightAxisDate) || dataTime.After(rightAxisDate) {
 					newDataList = append(newDataList, v)
 				}
@@ -1002,6 +1009,10 @@ func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDat
 				Value:         item.Value,
 			}
 			dataTimeT, _ := time.Parse(utils.FormatDate, item.DataTime)
+			year := dataTimeT.Year()
+			newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
+			timestamp := newItemDate.UnixNano() / 1e6
+			tmpVal.DataTimestamp = timestamp
 			if (startTmpT.Before(dataTimeT) && endTmpT.After(dataTimeT)) || startTmpT == dataTimeT || endTmpT == dataTimeT {
 				tmpV := &tmpVal
 				if findVal, ok := quarterMap[name]; !ok {
@@ -2051,7 +2062,7 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
 						continue
 					}
 					// 农历时dataTimeList的年份为最新年份,图例时间的年份才是真实年份
-					chartLegend,_ := strconv.Atoi(v.ChartLegend)
+					chartLegend, _ := strconv.Atoi(v.ChartLegend)
 					if chartLegend < startYear {
 						continue
 					}
@@ -2187,7 +2198,7 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
 							continue
 						}
 						// 农历时dataTimeList的年份为最新年份,图例时间的年份才是真实年份
-						chartLegend,_ := strconv.Atoi(v.ChartLegend)
+						chartLegend, _ := strconv.Atoi(v.ChartLegend)
 						if chartLegend < startYear {
 							continue
 						}
@@ -2360,7 +2371,7 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
 						continue
 					}
 					// 农历时dataTimeList的年份为最新年份,图例时间的年份才是真实年份
-					chartLegend,_ := strconv.Atoi(quarterDataList[i].ChartLegend)
+					chartLegend, _ := strconv.Atoi(quarterDataList[i].ChartLegend)
 					if chartLegend < startYear {
 						continue
 					}
@@ -2448,7 +2459,7 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
 						continue
 					}
 					// 农历时dataTimeList的年份为最新年份,图例时间的年份才是真实年份
-					chartLegend,_ := strconv.Atoi(quarterDataList[i].ChartLegend)
+					chartLegend, _ := strconv.Atoi(quarterDataList[i].ChartLegend)
 					if chartLegend < startYear {
 						continue
 					}
@@ -2796,6 +2807,7 @@ func getEdbDataMapListForSeason(chartInfoId, chartType int, calendar, startDate,
 				return
 			}
 
+			nowYear := time.Now().Year()
 			newList := make([]*models.EdbDataList, 0)
 			for _, v := range newDataList {
 				dataTime, e := time.Parse(utils.FormatDate, v.DataTime)
@@ -2803,6 +2815,10 @@ func getEdbDataMapListForSeason(chartInfoId, chartType int, calendar, startDate,
 					err = errors.New("季节性图处理右轴指标数据转换日期失败,Err:" + e.Error())
 					return
 				}
+				dataTimeT, _ := time.Parse(utils.FormatDate, v.DataTime)
+				year := dataTimeT.Year()
+				newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
+				v.DataTimestamp = newItemDate.UnixNano() / 1e6
 				if dataTime.Equal(rightAxisDate) || dataTime.After(rightAxisDate) {
 					newList = append(newList, v)
 				}

+ 5 - 6
services/data/chart_theme.go

@@ -17,14 +17,14 @@ import (
 // @return err error
 func GetChartThemeConfig(chartThemeId, source, chartType int) (chartTheme *chart_theme.ChartTheme, err error) {
 	chartTheme, err = chart_theme.GetChartThemeId(chartThemeId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
+	if err != nil && !utils.IsErrNoRow(err) {
 		return
 	}
 
 	err = nil
 
 	// 如果找到了,那么就返回
-	if chartTheme != nil {
+	if chartTheme != nil && chartTheme.ChartThemeId > 0 {
 		// 兼容历史数据,加入新字段LineOptionList
 		newConfig, e := ConvertOldChartOptions(chartTheme.Config)
 		if e == nil {
@@ -46,14 +46,14 @@ func GetChartThemeConfig(chartThemeId, source, chartType int) (chartTheme *chart
 
 	// 寻找默认的主题id
 	chartTheme, err = chart_theme.GetChartThemeId(chartThemeType.DefaultChartThemeId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
+	if err != nil && !utils.IsErrNoRow(err) {
 		return
 	}
 
 	err = nil
 
 	// 如果找到了,那么就返回
-	if chartTheme != nil {
+	if chartTheme != nil && chartTheme.ChartThemeTypeId > 0 {
 		// 兼容历史数据,加入新字段LineOptionList
 		newConfig, e := ConvertOldChartOptions(chartTheme.Config)
 		if e == nil {
@@ -79,7 +79,6 @@ func GetChartThemeConfig(chartThemeId, source, chartType int) (chartTheme *chart
 	return
 }
 
-
 // 兼容历史数据,加入新字段LineOptionList
 func ConvertOldChartOptions(config string) (newConfig string, err error) {
 	var oldTheme chart_theme.OldChartOptions
@@ -108,4 +107,4 @@ func ConvertOldChartOptions(config string) (newConfig string, err error) {
 	newThemeStr, _ := json.Marshal(newTheme)
 	newConfig = string(newThemeStr)
 	return
-}
+}

+ 3 - 5
services/data/edb_info.go

@@ -317,7 +317,7 @@ func EdbInfoRefreshAllFromBaseBak(edbInfoIdList []int, refreshAll bool) (err err
 // getRefreshEdbInfoList 获取待更新的指标(普通基础指标、普通运算指标,预测运算指标)
 func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int, err error, errMsg string) {
 	calculateList, err := data_manage.GetEdbInfoAllCalculateByEdbInfoIdList(edbInfoIdList)
-	if err != nil && err.Error() != utils.ErrNoRow() {
+	if err != nil && !utils.IsErrNoRow(err) {
 		err = errors.New("GetEdbInfoAllCalculate Err:" + err.Error())
 		return
 	}
@@ -1268,9 +1268,8 @@ func GetEdbSourceByEdbInfoIdListForExcel(edbInfoIdList []int) (sourceNameList, s
 	return
 }
 
-
 // HandleDataByLinearRegressionToList 插值法补充数据(线性方程式)
-func HandleDataByLinearRegressionToList (edbInfoDataList []*models.EdbDataList, handleDataMap map[string]float64) (dataTimeList []string,valueList []float64, err error) {
+func HandleDataByLinearRegressionToList(edbInfoDataList []*models.EdbDataList, handleDataMap map[string]float64) (dataTimeList []string, valueList []float64, err error) {
 	if len(edbInfoDataList) < 2 {
 		return
 	}
@@ -1408,9 +1407,8 @@ func HandleDataByLinearRegressionToListV2(edbInfoDataList []*models.EdbDataList,
 	return
 }
 
-
 // HandleDataByLinearRegressionToListV3 插值法补充数据(线性方程式)-直接补充指标起始日期间的所有数据
-func HandleDataByLinearRegressionToListV3 (edbInfoDataList []*models.EdbDataList, handleDataMap map[string]float64) (newEdbInfoDataList []*models.EdbDataList, dataTimeList []string,valueList []float64, err error) {
+func HandleDataByLinearRegressionToListV3(edbInfoDataList []*models.EdbDataList, handleDataMap map[string]float64) (newEdbInfoDataList []*models.EdbDataList, dataTimeList []string, valueList []float64, err error) {
 	if len(edbInfoDataList) < 2 {
 		return
 	}

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

@@ -80,7 +80,7 @@ func GetBalanceExcelChartSingle(chartInfoId, ChartEdbId int, lang string) (mappi
 	excelInfoId := mappingListTmp[0].ExcelInfoId
 	excelInfo, err := excel.GetExcelInfoById(excelInfoId)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			errMsg = "表格不存在"
 			err = fmt.Errorf(errMsg)
 			return

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

@@ -1125,7 +1125,7 @@ func GetExcelDetailInfoByExcelInfoId(uniqueCode, lang string) (excelDetail excel
 	excelInfo, err := excel.GetExcelInfoByUniqueCode(uniqueCode)
 	if err != nil {
 		err = errors.New("获取ETA表格信息失败,Err:" + err.Error())
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			errMsg = "ETA表格被删除,请刷新页面"
 			err = errors.New("ETA表格被删除,请刷新页面,Err:" + err.Error())
 		}

+ 6 - 6
services/data/range_analysis/chart_info.go

@@ -507,7 +507,7 @@ func GetChartDataByEdbInfoList(chartInfoId int, dateType, startYear int, startDa
 	dataResp = models.ChartRangeAnalysisDataResp{ChartRangeAnalysisExtraConf: req}
 	if req.MultipleGraphConfigId > 0 {
 		multipleGraphConfigEdbMappingList, e := data_manage.GetMultipleGraphConfigEdbMappingListByIdAndSource(req.MultipleGraphConfigId, utils.CHART_SOURCE_RANGE_ANALYSIS)
-		if e != nil && e.Error() != utils.ErrNoRow() {
+		if e != nil && !utils.IsErrNoRow(e) {
 			err = fmt.Errorf("获取区间计算图表, 指标信息失败, Err:" + e.Error())
 			return
 		}
@@ -527,7 +527,7 @@ func GetChartDataByEdbInfoListBySeries(chartInfoId int, dateType, startYear int,
 	chartSeriesOb := new(data_manage.FactorEdbSeriesChartMapping)
 	seriesMappingItem, err := chartSeriesOb.GetItemByChartInfoId(chartInfoId)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			err = fmt.Errorf("图表关联关系不存在")
 			return
 		} else {
@@ -638,7 +638,7 @@ func GetChartDataByEdbInfoListBySeries(chartInfoId int, dateType, startYear int,
 	// 查询配置关联关系
 	if req.MultipleGraphConfigId > 0 {
 		multipleGraphConfigEdbMappingList, e := data_manage.GetMultipleGraphConfigEdbMappingListByIdAndSource(req.MultipleGraphConfigId, utils.CHART_SOURCE_RANGE_ANALYSIS)
-		if e != nil && e.Error() != utils.ErrNoRow() {
+		if e != nil && !utils.IsErrNoRow(e) {
 			err = fmt.Errorf("获取区间计算图表, 指标信息失败, Err:" + e.Error())
 			return
 		}
@@ -855,7 +855,7 @@ func ChartInfoRefresh(chartInfoId int, uniqueCode string) (isAsync bool, err err
 	if chartInfoId > 0 {
 		chartInfo, err = models.GetChartInfoById(chartInfoId)
 		if err != nil {
-			if err.Error() == utils.ErrNoRow() {
+			if utils.IsErrNoRow(err) {
 				errMsg = "图表已被删除,请刷新页面"
 				err = errors.New(errMsg)
 				return
@@ -867,7 +867,7 @@ func ChartInfoRefresh(chartInfoId int, uniqueCode string) (isAsync bool, err err
 	} else {
 		chartInfo, err = models.GetChartInfoByUniqueCode(uniqueCode)
 		if err != nil {
-			if err.Error() == utils.ErrNoRow() {
+			if utils.IsErrNoRow(err) {
 				errMsg = "图表已被删除,请刷新页面"
 				err = errors.New(errMsg)
 				return
@@ -909,7 +909,7 @@ func ChartInfoRefresh(chartInfoId int, uniqueCode string) (isAsync bool, err err
 	chartSeriesOb := new(data_manage.FactorEdbSeriesChartMapping)
 	seriesMappingItem, err := chartSeriesOb.GetItemByChartInfoId(chartInfo.ChartInfoId)
 	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
+		if utils.IsErrNoRow(err) {
 			err = nil
 		} else {
 			err = fmt.Errorf("获取图表关联失败, Err: " + err.Error())

+ 57 - 0
services/eta_forum/chart_collect.go

@@ -0,0 +1,57 @@
+package eta_forum
+
+import (
+	"eta/eta_chart_lib/models"
+	"eta/eta_chart_lib/services/alarm_msg"
+	"eta/eta_chart_lib/utils"
+	"fmt"
+)
+
+type ChartFromUniqueCodeResp struct {
+	Ret         int
+	Msg         string
+	ErrMsg      string
+	ErrCode     string
+	Data        *ChartFromUniqueCodeRespItem
+	Success     bool `description:"true 执行成功,false 执行失败"`
+	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
+	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
+}
+
+type ChartFromUniqueCodeRespItem struct {
+	ChartInfo   *models.ChartInfo
+	EdbInfoList []*models.ChartEdbInfoMapping
+	XEdbIdValue []int          `description:"柱方图的x轴数据,指标id"`
+	YDataList   []models.YData `description:"柱方图的y轴数据"`
+	XDataList   []models.XData `description:"商品价格曲线的X轴数据"`
+	//BarChartInfo BarChartInfoReq `description:"柱方图的配置"`
+	//CorrelationChartInfo *CorrelationInfo `description:"相关性图表信息"`
+	DataResp  interface{} `description:"图表数据,根据图的类型而定的,没有确定的数据格式"`
+	WaterMark string      `description:"水印"`
+}
+
+// GeChartFromUniqueCode 社区中根据唯一编码查询图表
+func GeChartFromUniqueCode(uniqueCode string, isCache bool) (resp ChartFromUniqueCodeRespItem, err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			msg := fmt.Sprintf("查询社区中对用户可见的图表列表 GeChartFromUniqueCode:Err:%v,ErrMsg:%s", err, errMsg)
+			utils.FileLog.Info(msg)
+			go alarm_msg.SendAlarmMsg(msg, 3)
+		}
+	}()
+	urlQuery := fmt.Sprintf("UniqueCode=%s&isCache=%v", uniqueCode, isCache)
+	result, err := getChartFromUniqueCodeLib(urlQuery)
+	if err != nil {
+		errMsg = "查询失败"
+		err = fmt.Errorf("查询失败,Err:" + err.Error())
+		return
+	}
+	if result.Ret != 200 {
+		errMsg = "查询失败"
+		err = fmt.Errorf(result.Msg + result.ErrMsg)
+		return
+	}
+	resp = *result.Data
+
+	return
+}

+ 58 - 0
services/eta_forum/eta_forum_hub_lib.go

@@ -0,0 +1,58 @@
+package eta_forum
+
+import (
+	"encoding/json"
+	"eta/eta_chart_lib/models"
+	"eta/eta_chart_lib/utils"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+)
+
+// getChartFromUniqueCodeLib 根据唯一编码查询图表
+func getChartFromUniqueCodeLib(req string) (resp ChartFromUniqueCodeResp, err error) {
+	_, resultByte, err := get(req, "/v1/chart/common/from_unique_code")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// get
+func get(paramStr string, urlStr string) (resp *models.BaseResponse, result []byte, err error) {
+	if utils.ETA_FORUM_HUB_URL == "" {
+		err = fmt.Errorf("ETA社区桥接服务地址为空")
+		return
+	}
+	urlStr = urlStr + "?" + paramStr
+	getUrl := utils.ETA_FORUM_HUB_URL + urlStr
+	result, err = HttpGet(getUrl)
+	if err != nil {
+		err = fmt.Errorf("调用ETA社区桥接服务接口失败 error:%s", err.Error())
+		return
+	}
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+func HttpGet(url string) ([]byte, error) {
+	client := &http.Client{}
+	req, err := http.NewRequest("GET", url, nil)
+	if err != nil {
+		return nil, err
+	}
+	req.Header.Set("authorization", utils.MD5(utils.ETA_FORUM_HUB_NAME_EN+utils.ETA_FORUM_HUB_MD5_KEY))
+	resp, err := client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	utils.FileLog.Debug("HttpPost:" + string(b))
+	return b, err
+}

+ 3 - 0
services/excel/lucky_sheet.go

@@ -1271,6 +1271,9 @@ func GetTableDataByMixedTableData(config [][]request.MixedTableCellDataReq, hide
 						tmp.HorizontalType = 2
 						tmp.Ht = 2
 					}
+					if styleConfig.FontSize != "" {
+						tmp.Fs = styleConfig.FontSize
+					}
 					tmp.Monitor = cell.ShowFormatValue
 					// 如果没有showValue, 则使用value
 					if cell.ShowValue == "" {

+ 91 - 6
utils/common.go

@@ -11,6 +11,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+	"gorm.io/gorm"
 	"image"
 	"image/png"
 	"io"
@@ -208,7 +209,18 @@ func StrListToString(strList []string) (str string) {
 
 // 数据没有记录
 func ErrNoRow() string {
-	return "<QuerySeter> no row found"
+	return "record not found"
+}
+
+// IsErrNoRow
+// @Description: 判断是否是gorm的查询不到数据的报错
+// @param err
+// @return bool
+func IsErrNoRow(err error) bool {
+	if err == nil {
+		return false
+	}
+	return errors.Is(err, gorm.ErrRecordNotFound)
 }
 
 // 校验邮箱格式
@@ -624,11 +636,12 @@ func StrTimeToTime(strTime string) time.Time {
 
 // GetOrmInReplace 获取orm的in查询替换?的方法
 func GetOrmInReplace(num int) string {
-	template := make([]string, num)
-	for i := 0; i < num; i++ {
-		template[i] = "?"
-	}
-	return strings.Join(template, ",")
+	//template := make([]string, num)
+	//for i := 0; i < num; i++ {
+	//	template[i] = "?"
+	//}
+	//return strings.Join(template, ",")
+	return "?"
 }
 
 // RevSlice 反转切片
@@ -1380,3 +1393,75 @@ func RoundNumber(num string, decimalPlaces int, hasPercent bool) string {
 	}
 	return numStr
 }
+
+// ForwardPars
+// @Description: 向前插入参数
+// @param pars
+// @param values
+// @return []interface{}
+func ForwardPars(pars []interface{}, values ...interface{}) []interface{} {
+	if len(values) <= 0 {
+		return pars
+	}
+	return append(values, pars...)
+}
+
+// GormDateStrToDateTimeStr
+// @Description: gorm日期字符串格式转正常显示的日期时间字符串
+// @param originalString
+// @return formatStr
+func GormDateStrToDateTimeStr(originalString string) (formatStr string) {
+	if originalString == `` {
+		return
+	}
+	if strings.Contains(originalString, "0001-01-01") {
+		return
+	}
+
+	formatStr = originalString
+	if !strings.Contains(originalString, "T") {
+		return
+	}
+
+	// 解析原始字符串
+	t, err := time.Parse(FormatDateWallWithLoc, originalString)
+	if err != nil {
+		fmt.Println("Error parsing time:", err)
+		return
+	}
+
+	// 重新格式化时间
+	formatStr = t.Format(FormatDateTime)
+
+	return
+}
+
+// GormDateStrToDateStr
+// @Description: gorm日期字符串格式转正常显示的日期字符串
+// @param originalString
+// @return formatStr
+func GormDateStrToDateStr(originalString string) (formatStr string) {
+	if originalString == `` {
+		return
+	}
+	if strings.Contains(originalString, "0001-01-01") {
+		return
+	}
+
+	formatStr = originalString
+	if !strings.Contains(originalString, "T") {
+		return
+	}
+
+	// 解析原始字符串
+	t, err := time.Parse(FormatDateWallWithLoc, originalString)
+	if err != nil {
+		fmt.Println("Error parsing time:", err)
+		return
+	}
+
+	// 重新格式化时间
+	formatStr = t.Format(FormatDate)
+
+	return
+}

+ 30 - 0
utils/config.go

@@ -17,6 +17,7 @@ var (
 	MYSQL_URL      string //数据库连接
 	MYSQL_URL_DATA string
 	MYSQL_URL_EDB  string
+	DbDriverName   string // 数据库驱动名称
 	MgoUrlData     string // mongodb数据库连接配置
 
 	REDIS_CACHE string //缓存地址
@@ -66,6 +67,13 @@ var (
 	UseMongo bool // 是否使用mongo
 )
 
+// eta_forum_hub ETA社区桥接服务地址
+var (
+	ETA_FORUM_HUB_URL     string
+	ETA_FORUM_HUB_NAME_EN string
+	ETA_FORUM_HUB_MD5_KEY string
+)
+
 func init() {
 	tmpRunMode, err := web.AppConfig.String("run_mode")
 	if err != nil {
@@ -100,6 +108,12 @@ func init() {
 	MYSQL_URL_DATA = config["mysql_url_data"]
 	MYSQL_URL_EDB = config["mysql_url_edb"]
 
+	// 数据库驱动名称
+	DbDriverName = config["db_driver_name"]
+	if DbDriverName == "" {
+		DbDriverName = "mysql"
+	}
+
 	// mongodb数据库连接配置
 	MgoUrlData = config["mgo_url_data"]
 
@@ -155,6 +169,13 @@ func init() {
 		logMaxDaysStr := config["log_max_day"]
 		LogMaxDays, _ = strconv.Atoi(logMaxDaysStr)
 	}
+
+	// eta_forum_hub ETA社区桥接服务地址
+	{
+		ETA_FORUM_HUB_URL = config["eta_forum_hub_url"]
+		ETA_FORUM_HUB_NAME_EN = config["eta_forum_hub_name_en"]
+		ETA_FORUM_HUB_MD5_KEY = config["eta_forum_hub_md5_key"]
+	}
 }
 
 // FormatMixTableDataShowValue 格式化自定表格显示数据
@@ -231,3 +252,12 @@ func FormatTableDataShowValue(x float64) (res string) {
 	}
 	return
 }
+
+func GetMiniUrl(source string) string {
+	config, err := web.AppConfig.GetSection(RunMode)
+	if err != nil {
+		panic("配置文件读取错误 " + err.Error())
+	}
+	urlName := fmt.Sprintf("mini_url_%s", source)
+	return config[urlName]
+}

+ 25 - 8
utils/constants.go

@@ -2,14 +2,15 @@ package utils
 
 // 常量定义
 const (
-	FormatTime            = "15:04:05"                //时间格式
-	FormatDate            = "2006-01-02"              //日期格式
-	FormatDateUnSpace     = "20060102"                //日期格式
-	FormatDateTime        = "2006-01-02 15:04:05"     //完整时间格式
-	HlbFormatDateTime     = "2006-01-02_15:04:05.999" //完整时间格式
-	FormatDateTimeUnSpace = "20060102150405"          //完整时间格式
-	FormatYearMonthDate   = "2006-01"                 //日期格式
-	PageSize15            = 15                        //列表页每页数据量
+	FormatTime            = "15:04:05"                  //时间格式
+	FormatDate            = "2006-01-02"                //日期格式
+	FormatDateUnSpace     = "20060102"                  //日期格式
+	FormatDateWallWithLoc = "2006-01-02T15:04:05-07:00" //日期格式
+	FormatDateTime        = "2006-01-02 15:04:05"       //完整时间格式
+	HlbFormatDateTime     = "2006-01-02_15:04:05.999"   //完整时间格式
+	FormatDateTimeUnSpace = "20060102150405"            //完整时间格式
+	FormatYearMonthDate   = "2006-01"                   //日期格式
+	PageSize15            = 15                          //列表页每页数据量
 	PageSize5             = 5
 	PageSize10            = 10
 	PageSize20            = 20
@@ -163,6 +164,7 @@ const (
 const (
 	CHART_TYPE_CURVE           = 1  //曲线图
 	CHART_TYPE_SEASON          = 2  //季节性图
+	CHART_TYPE_AREA            = 3  // 面积图
 	CHART_TYPE_BAR             = 7  //柱形图
 	CHART_TYPE_SECTION_SCATTER = 10 //截面散点图样式
 	CHART_TYPE_RADAR           = 11 //雷达图
@@ -233,3 +235,18 @@ const (
 const (
 	CACHE_CHART_AUTH = "chart:auth:" //图表数据
 )
+
+const (
+	DbDriverByMysql = "mysql"
+	DbDriverByDm    = "dm"
+)
+
+const (
+	DbNameMaster      = "eta_master"
+	DbNameReport      = "eta_report"
+	DbNameManualIndex = "eta_manual_index"
+	DbNameIndex       = "eta_index"
+	DbNameGL          = "eta_gl"
+	DbNameAI          = "eta_ai"
+	DbNameWeekly      = "weekly_report"
+)

+ 135 - 0
utils/date_util.go

@@ -0,0 +1,135 @@
+package utils
+
+import (
+	"time"
+)
+
+// 定义时间格式常量
+const (
+	YearMonthDay     = "2006-01-02"                     // yyyy-MM-dd
+	YearMonthDayTime = "2006-01-02 15:04:05"            // yyyy-MM-dd HH:mm:ss
+	MonthDay         = "01-02"                          // MM-dd
+	DayMonthYear     = "02-01-2006"                     // dd-MM-yyyy
+	YearMonth        = "2006-01"                        // yyyy-MM
+	FullDate         = "Monday, 02-Jan-06 15:04:05 PST" // 完整日期:例如:Monday, 02-Jan-06 15:04:05 PST
+)
+
+// GetPreYearTime 获取当前时间 前n年的时间 返回yyyy-MM-dd 格式的时间
+func GetPreYearTime(n int) string {
+	// 获取当前时间
+	now := time.Now()
+	// 计算前n年的时间
+	preYearTime := now.AddDate(-n, 0, 0)
+	// 格式化时间
+	return preYearTime.Format("2006-01-02")
+}
+
+// IsMoreThanOneDay 判断两个yyyy-MM-dd类型的时间,相差是否大于1天
+func IsMoreThanOneDay(startDate, endDate string) bool {
+	startTime, _ := time.Parse("2006-01-02", startDate)
+	endTime, _ := time.Parse("2006-01-02", endDate)
+	diff := endTime.Sub(startTime)
+	days := diff.Hours() / 24
+	return days > 1
+}
+
+// GetNextDay 获取 yyyy-MM-dd类型的时间的下一天
+func GetNextDay(date string) string {
+	t, _ := time.Parse("2006-01-02", date)
+	nextDay := t.AddDate(0, 0, 1)
+	return nextDay.Format("2006-01-02")
+}
+
+// GetNextDayN 获取 yyyy-MM-dd 类型的时间的下n天
+func GetNextDayN(date string, n int) string {
+	t, _ := time.Parse("2006-01-02", date)
+	nextDay := t.AddDate(0, 0, n)
+	return nextDay.Format("2006-01-02")
+}
+
+var daysOfMonth = [...]int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
+
+// AddDate 解决 Go time 包 AddDate() 添加年份/月份溢出到下一个月的问题。
+// 例如:
+//
+//	2024-02-29 AddDate(1, 0, 0) 期望结果: 2025-02-28
+//	2024-08-31 AddDate(0, 1, 1) 期望结果: 2024-09-30
+func AddDate(t time.Time, years, months int) time.Time {
+	month := t.Month()
+
+	// 规范年份和月份
+	years, months = norm(years, months, 12)
+
+	// 计算目标月份
+	targetMonth := int(month) + months
+	if targetMonth <= 0 {
+		// 处理负值月份
+		targetMonth += 12 * ((-targetMonth)/12 + 1)
+	}
+	// 取余计算目标月份
+	targetMonth = (targetMonth-1)%12 + 1
+
+	// 计算目标年份
+	targetYear := t.Year() + years + (int(month)+months-1)/12
+
+	// 计算目标月份最大天数
+	maxDayOfTargetMonth := daysOfMonth[targetMonth-1]
+	if isLeap(targetYear) && targetMonth == 2 {
+		maxDayOfTargetMonth++ // 闰年2月多一天
+	}
+
+	// 计算目标日期
+	targetDay := t.Day()
+	if targetDay > maxDayOfTargetMonth {
+		// 如果目标日期超出该月的天数,设置为该月的最后一天
+		targetDay = maxDayOfTargetMonth
+	}
+
+	// 返回新的日期
+	return time.Date(targetYear, time.Month(targetMonth), targetDay, t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), t.Location())
+}
+
+// norm 规范化年份和月份
+func norm(hi, lo, base int) (nhi, nlo int) {
+	if lo < 0 {
+		n := (-lo-1)/base + 1
+		hi -= n
+		lo += n * base
+	}
+	if lo >= base {
+		n := lo / base
+		hi += n
+		lo -= n * base
+	}
+	return hi, lo
+}
+
+// isLeap 判断是否为闰年
+func isLeap(year int) bool {
+	return year%4 == 0 && (year%100 != 0 || year%400 == 0)
+}
+
+// StringToTime string 类型时间 转换为 time.Time 类型
+func StringToTime(date string) time.Time {
+	t, _ := time.ParseInLocation("2006-01-02", date, time.Local)
+	return t
+}
+
+// StringToFormatTime string 类型时间 转换为指定格式的 time.Time类型
+func StringToFormatTime(data string, format string) time.Time {
+	t, _ := time.ParseInLocation(format, data, time.Local)
+	return t
+}
+
+// TimeToString time.Time 类型时间 转换为 string 类型
+func TimeToString(t time.Time, format string) string {
+	formattedTime := t.Format(format)
+	return formattedTime
+}
+
+// CompareDate 判断传入的两个字符串时间的前后顺序
+func CompareDate(data1, data2 string) bool {
+	t1, _ := time.Parse("2006-01-02", data1)
+	t2, _ := time.Parse("2006-01-02", data2)
+	return !t1.After(t2)
+}

+ 358 - 0
utils/sql.go

@@ -0,0 +1,358 @@
+package utils
+
+import (
+	"bytes"
+	"errors"
+	"fmt"
+	"reflect"
+	"regexp"
+	"text/template"
+)
+
+type Driver string
+type SqlCondition string
+
+const (
+	DM            Driver       = "dm"
+	MySql         Driver       = "mysql"
+	GroupUnit     SqlCondition = "GroupUnit"
+	Distinct      SqlCondition = "Distinct"
+	Order         SqlCondition = "Order"
+	Delimiter     SqlCondition = "Delimiter"
+	ConvertColumn SqlCondition = "ConvertColumn"
+)
+
+var TemplateMap = map[SqlCondition]map[Driver]string{
+	GroupUnit: {
+		MySql: `GROUP_CONCAT({{.Distinct}} {{.Column}} {{.Order}} SEPARATOR '{{.Delimiter}}')`,
+		DM:    `LISTAGG({{.Distinct}} {{.Column}},'{{.Delimiter}}') WITHIN GROUP ({{.Order}})`,
+	},
+	ConvertColumn: {
+		MySql: `CONVERT({{.ConvertColumn}} USING gbk )`,
+		DM:    `{{.ConvertColumn}}`,
+	},
+}
+
+var supportDriverMap = map[string]Driver{
+	"mysql": MySql,
+	"dm":    DM,
+	//"postgres": Postgres,
+}
+
+type QueryParam struct {
+	Driver        string
+	Column        string
+	Order         string
+	Distinct      string
+	Delimiter     string
+	OrderField    string
+	OrderRule     string
+	ConvertColumn string `description:"Convert指令传递的clounm"`
+	HasDistinct   bool
+}
+type SqlParam interface {
+	GetParamName() string
+	GetFormatConditionStr(param *QueryParam) string
+}
+type DistinctParam struct {
+}
+
+func (distinctParam *DistinctParam) GetParamName() string {
+	return "Distinct"
+}
+func (distinctParam *DistinctParam) GetFormatConditionStr(param *QueryParam) string {
+	if param.HasDistinct {
+		return "DISTINCT"
+	}
+	return ""
+}
+
+type ConvertParam struct {
+}
+
+func (convertParam *ConvertParam) GetParamName() string {
+	return "Convert"
+}
+func (convertParam *ConvertParam) GetFormatConditionStr(param *QueryParam) (sqlStr string) {
+	dbDriver, _ := getDriverInstance(param.Driver)
+	if param.ConvertColumn == "" {
+		FileLog.Error("转换字段为空,无法生成聚合sql")
+		return
+	}
+	var templateSqlStr string
+	if _, ok := TemplateMap[ConvertColumn][dbDriver]; !ok {
+		templateSqlStr = TemplateMap[ConvertColumn][MySql]
+	} else {
+		templateSqlStr = TemplateMap[ConvertColumn][dbDriver]
+	}
+	if templateSqlStr == "" {
+		FileLog.Error("转换sql模板不存在,无法生成转换sql")
+		return
+	}
+	templateSql, err := template.New("ConvertColumn").Parse(templateSqlStr)
+	if err != nil {
+		FileLog.Error("failed to parse template: %v", err)
+		return
+	}
+	//反射获取结构体的值
+	value := reflect.ValueOf(param)
+	// 检查是否是指针
+	if value.Kind() != reflect.Ptr {
+		fmt.Println("请求参数必须是一个结构体")
+		return
+	}
+	// 获取结构体的元素
+	elem := value.Elem()
+	// 检查是否是结构体
+	if elem.Kind() != reflect.Struct {
+		fmt.Println("请求参数必须是一个结构体")
+		return
+	}
+	// 获取字段的值
+	fieldValue := elem.FieldByName("ConvertColumn")
+	// 检查字段是否存在
+	if !fieldValue.IsValid() {
+		fmt.Printf("Error: field %s not found\n", "ConvertColumn")
+		return
+	}
+	// 检查字段是否可导出
+	if !fieldValue.CanSet() {
+		fmt.Printf("Error: field %s is not exported and cannot be set\n", "ConvertColumn")
+		return
+	}
+	// 渲染模板
+	var buf bytes.Buffer
+	err = templateSql.Execute(&buf, param)
+	if err != nil {
+		fmt.Sprintf("执行模板填充失败: %v", err)
+		return
+	}
+	sqlStr = buf.String()
+	fmt.Printf("生成的准换编码语句为:%s\n", sqlStr)
+	return sqlStr
+}
+
+var sqlGeneratorFactory = map[SqlCondition]SqlParam{
+	// 添加支持的语法
+	GroupUnit: &GroupUnitParam{
+		supportGrams: []SqlCondition{
+			Distinct,
+			Order,
+			Delimiter,
+		},
+	},
+	Order:         &OrderParam{},
+	Delimiter:     &DelimiterParam{},
+	Distinct:      &DistinctParam{},
+	ConvertColumn: &ConvertParam{},
+}
+
+type DelimiterParam struct {
+}
+
+func (delimiterParam *DelimiterParam) GetParamName() string {
+	return "Delimiter"
+}
+func (delimiterParam *DelimiterParam) GetFormatConditionStr(param *QueryParam) string {
+	if param.Delimiter == "" {
+		return ","
+	}
+	return param.Delimiter
+}
+
+type OrderParam struct {
+	Field string
+	Rule  string
+}
+
+func (orderParam *OrderParam) GetParamName() string {
+	return "Order"
+}
+
+func (orderParam *OrderParam) GetFormatConditionStr(param *QueryParam) string {
+	if param.OrderField == "" {
+		orderParam.Field = param.Column
+	} else {
+		orderParam.Field = param.OrderField
+	}
+	if param.OrderRule != "" {
+		if param.OrderRule == "ASC" || param.OrderRule == "DESC" {
+			orderParam.Rule = param.OrderRule
+		}
+	}
+	return fmt.Sprintf("ORDER BY %s %s", orderParam.Field, orderParam.Rule)
+}
+
+// 高级语法聚合
+type GroupUnitParam struct {
+	supportGrams []SqlCondition
+}
+
+func (groupUnitParam *GroupUnitParam) GetParamName() string {
+	return "GroupUnit"
+}
+
+func (groupUnitParam *GroupUnitParam) GetFormatConditionStr(param *QueryParam) (sqlStr string) {
+	dbDriver, _ := getDriverInstance(param.Driver)
+	if param.Column == "" {
+		FileLog.Error("聚合字段为空,无法生成聚合sql")
+		return
+	}
+	var templateSqlStr string
+	if _, ok := TemplateMap[GroupUnit][dbDriver]; !ok {
+		templateSqlStr = TemplateMap[GroupUnit][MySql]
+	} else {
+		templateSqlStr = TemplateMap[GroupUnit][dbDriver]
+	}
+	if templateSqlStr == "" {
+		FileLog.Error("聚合sql模板不存在,无法生成聚合sql")
+		return
+	}
+	templateSql, err := template.New("GroupUnit").Parse(templateSqlStr)
+	if err != nil {
+		FileLog.Error("failed to parse template: %v", err)
+		return
+	}
+	//反射获取结构体的值
+	value := reflect.ValueOf(param)
+	// 检查是否是指针
+	if value.Kind() != reflect.Ptr {
+		fmt.Println("请求参数必须是一个结构体")
+		return
+	}
+	// 获取结构体的元素
+	elem := value.Elem()
+	// 检查是否是结构体
+	if elem.Kind() != reflect.Struct {
+		fmt.Println("请求参数必须是一个结构体")
+		return
+	}
+	for _, supportGram := range groupUnitParam.supportGrams {
+		// 获取字段的值
+		fieldValue := elem.FieldByName(string(supportGram))
+		// 检查字段是否存在
+		if !fieldValue.IsValid() {
+			fmt.Printf("Error: field %s not found\n", supportGram)
+			continue
+		}
+		// 检查字段是否可导出
+		if !fieldValue.CanSet() {
+			fmt.Printf("Error: field %s is not exported and cannot be set\n", supportGram)
+			continue
+		}
+		newValue := sqlGeneratorFactory[supportGram].GetFormatConditionStr(param)
+		// 检查新值的类型是否匹配
+		newValueValue := reflect.ValueOf(newValue)
+		if fieldValue.Type() != newValueValue.Type() {
+			fmt.Printf("字段%s类型不匹配 : 期望的类型是 %s, 传入的类型为: %s", supportGram, fieldValue.Type(), newValueValue.Type())
+			return
+		}
+		// 设置字段的值
+		fieldValue.Set(newValueValue)
+	}
+	// 渲染模板
+	var buf bytes.Buffer
+	err = templateSql.Execute(&buf, param)
+	if err != nil {
+		fmt.Sprintf("执行模板填充失败: %v", err)
+		return
+	}
+	sqlStr = buf.String()
+	fmt.Printf("生成的聚合语句为:%s\n", sqlStr)
+	return sqlStr
+}
+
+func GroupUnitFunc(driver string, column, delimiter string, columnOrder bool, orderField, orderRule string, hasDistinct bool) (sqlStr string) {
+	dbDriver, _ := getDriverInstance(driver)
+	if delimiter == "" {
+		delimiter = ","
+	}
+	if column == "" {
+		column = "[UNKNOWN COLUMN]"
+	}
+	//if tableAlia != "" {
+	//	column = fmt.Sprintf("%s.%s", tableAlia, column)
+	//}
+	var sqlOrder, strDistinct string
+	if hasDistinct {
+		strDistinct = "DISTINCT"
+	}
+	if columnOrder && orderField == "" {
+		orderField = column
+	}
+	switch dbDriver {
+	case DM:
+		if columnOrder {
+			sqlOrder = fmt.Sprintf("WITHIN GROUP (ORDER BY %s %s)", orderField, orderRule)
+		}
+		sqlStr = fmt.Sprintf("LISTAGG(%s %s, '%s') %s", strDistinct, column, delimiter, sqlOrder)
+	default:
+		// 默认使用MySQL的语法
+		if columnOrder {
+			sqlOrder = fmt.Sprintf("ORDER BY %s %s", orderField, orderRule)
+		}
+		sqlStr = fmt.Sprintf("GROUP_CONCAT(%s %s %s SEPARATOR '%s')", strDistinct, column, sqlOrder, delimiter)
+	}
+	return sqlStr
+}
+
+func getDriverInstance(driver string) (dbDriver Driver, err error) {
+	if driver == "" {
+		dbDriver = supportDriverMap[DbDriverName]
+	}
+	if currentDriver, ok := supportDriverMap[driver]; !ok {
+		err = errors.New("不支持的数据库驱动类型")
+		return
+	} else {
+		dbDriver = currentDriver
+	}
+	return
+}
+
+func NeedDateOrTimeFormat(driver string) bool {
+	var dbDriver Driver
+	if driver == "" {
+		dbDriver = supportDriverMap[DbDriverName]
+	} else {
+		dbDriver, _ = getDriverInstance(driver)
+	}
+	if dbDriver == DM {
+		return true
+	}
+	return false
+}
+
+func ReplaceDriverKeywords(driver string, sql string) string {
+	dbDriver, _ := getDriverInstance(driver)
+	rules := map[Driver]map[string]string{
+		DM: {
+			"admin":    `"admin"`,
+			"value":    `"value"`,
+			"exchange": `"exchange"`,
+			"size":     `"size"`,
+			"a.from":   `a."from"`,
+			"b.from":   `b."from"`,
+		},
+	}
+	replacements, ok := rules[dbDriver]
+	if !ok {
+		return sql
+	}
+	for keyword, replace := range replacements {
+		// 仅替换单独的单词,复合单词含关键词不管
+		pattern := fmt.Sprintf(`\b%s\b`, regexp.QuoteMeta(keyword))
+		re := regexp.MustCompile(pattern)
+		sql = re.ReplaceAllString(sql, replace)
+	}
+	return sql
+}
+
+func GenerateQuerySql(gram SqlCondition, param *QueryParam) (sqlGenerator string) {
+	if exec, ok := sqlGeneratorFactory[gram]; !ok {
+		FileLog.Error("不支持的语法:%s", gram)
+		return
+	} else {
+		sqlGenerator = exec.GetFormatConditionStr(param)
+	}
+	return
+}