浏览代码

增加渠道接口,改造指标列表接口兼容海通需求

kobe6258 2 月之前
父节点
当前提交
ce83ed4110

+ 142 - 25
controllers/business_edb.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_hub/models/data_manage"
 	"eta/eta_hub/services/data"
 	"eta/eta_hub/utils"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"strings"
 )
@@ -110,41 +111,76 @@ func (c *EdbController) BusinessEdbList() {
 	//通过指标ID、指标名称、渠道、单位、频度查询匹配自有数据中已有的指标;
 	indexCode := c.GetString("IndexCode")
 	indexName := c.GetString("IndexName")
+	sysSource := c.GetString("SysSource")
 
 	//if indexName == `` && indexCode == `` {
 	//	br.Msg = "IndexCode与IndexName不能同时为空"
 	//	br.ErrMsg = "IndexCode与IndexName不能同时为空"
 	//	return
 	//}
-
 	cond := ``
 	pars := make([]interface{}, 0)
-	if indexCode != `` {
-		cond += ` AND index_code = ?`
-		pars = append(pars, indexCode)
-	}
-	if indexName != `` {
-		cond += ` AND index_name like ?`
-		pars = utils.GetLikeKeywordPars(pars, indexName, 1)
-	}
-	sourceName := c.GetString("SourceName")
-	if sourceName != `` {
-		cond += ` AND source_name = ?`
-		pars = append(pars, sourceName)
-	}
-	unit := c.GetString("Unit")
-	if unit != `` {
-		cond += ` AND unit = ?`
-		pars = append(pars, unit)
-	}
-	frequency := c.GetString("Frequency")
-	if frequency != `` {
-		cond += ` AND frequency = ?`
-		pars = append(pars, frequency)
-	}
+	var orderRule string
+	var fieldArr []string
+	if sysSource == "ht_mini_crm" {
+		fieldArr = []string{"index_code", "index_name", "frequency", "unit", "source_name", "start_date", "end_date", "create_time"}
+		KeyWord := c.GetString("KeyWord")
+		if KeyWord != "" {
+			cond = `And (index_name like ? or index_code like ?)`
+			pars = utils.GetLikeKeywordPars(pars, KeyWord, 2)
+		}
+		sourceName := c.GetString("SourceName")
+		SortColumn := c.GetString("SortColumn")
+		if SortColumn == "" {
+			SortColumn = "create_time"
+		}
+		SortOrder := c.GetString("SortOrder")
+		if SortOrder == "" {
+			SortOrder = "desc"
+		}
+		if sourceName != "" {
+			cond += ` AND source_name = ?`
+			pars = append(pars, sourceName)
+		} else {
+			cond += ` AND source_name like ?`
+			pars = append(pars, "%")
+		}
 
+		frequency := c.GetString("Frequency")
+		if frequency != `` {
+			cond += ` AND frequency = ?`
+			pars = append(pars, frequency)
+		}
+		orderRule = fmt.Sprintf("%s %s", SortColumn, SortOrder)
+	} else {
+		orderRule = "base_from_business_index_id DESC"
+		fieldArr = []string{"index_code", "index_name", "frequency", "unit", "source_name"}
+		if indexCode != `` {
+			cond += ` AND index_code = ?`
+			pars = append(pars, indexCode)
+		}
+		if indexName != `` {
+			cond += ` AND index_name like ?`
+			pars = utils.GetLikeKeywordPars(pars, indexName, 1)
+		}
+		sourceName := c.GetString("SourceName")
+		if sourceName != `` {
+			cond += ` AND source_name = ?`
+			pars = append(pars, sourceName)
+		}
+		unit := c.GetString("Unit")
+		if unit != `` {
+			cond += ` AND unit = ?`
+			pars = append(pars, unit)
+		}
+		frequency := c.GetString("Frequency")
+		if frequency != `` {
+			cond += ` AND frequency = ?`
+			pars = append(pars, frequency)
+		}
+	}
 	edbOb := new(data_manage.BaseFromBusinessIndex)
-	total, edbList, e := edbOb.GetItemsByCondition(cond, pars, []string{"index_code", "index_name", "frequency", "unit", "source_name"}, "base_from_business_index_id DESC", startSize, pageSize)
+	total, edbList, e := edbOb.GetItemsByCondition(cond, pars, fieldArr, orderRule, startSize, pageSize)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "EdbList GetItemsByCondition err: " + e.Error()
@@ -162,6 +198,87 @@ func (c *EdbController) BusinessEdbList() {
 	br.Msg = "获取成功"
 }
 
+// BusinessSourceList
+// @Title 获取来源列表
+// @Description 获取来源列表
+// @Success 200 {object} data_manage.BaseFromBusinessIndexResp
+// @router /business/edb/source/list [get]
+func (c *EdbController) BusinessSourceList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	obj := new(data_manage.EdbBusinessSource)
+	list, err := obj.GetAllList()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Data = list
+}
+
+// DataList
+// @Title 获取指标数据列表
+// @Description 获取指标数据列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   IndexCode   query   string  true       "频度"
+// @Success 200 {object} models.DataListResp
+// @router /business/edb/data/list [get]
+func (c *EdbController) DataList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	req := new(data_manage.BusinessDataDataListReq)
+	if e := c.ParseForm(req); e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "参数解析失败, Err: " + e.Error()
+		return
+	}
+
+	pageSize := req.PageSize
+	currentIndex := req.CurrentIndex
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	if req.IndexCode == "" {
+		br.Msg = "指标编码为空"
+		br.ErrMsg = "指标编码为空"
+		return
+	}
+
+	// 获取分页数据
+	dataCount, dataList, err := data.GetPageBaseBusinessIndexData(req.IndexCode, startSize, pageSize)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取指标信息失败"
+		br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
+		return
+	}
+	page := paging.GetPaging(currentIndex, pageSize, dataCount)
+	resp := data_manage.BusinessIndexDataListResp{
+		List:   dataList,
+		Paging: page,
+	}
+
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
 // BusinessEdbDel
 // @Title 删除指标数据
 // @Description 删除指标数据

+ 23 - 5
models/data_manage/base_from_business.go

@@ -30,11 +30,14 @@ type BaseFromBusinessIndex struct {
 // BaseFromBusinessIndexItem
 // @Description: 外部指标结构
 type BaseFromBusinessIndexItem struct {
-	IndexCode  string `description:"指标编码"`
-	IndexName  string `description:"指标名称"`
-	Unit       string `description:"单位"`
-	Frequency  string `description:"频度"`
-	SourceName string `description:"数据来源名称"`
+	IndexCode  string    `description:"指标编码"`
+	IndexName  string    `description:"指标名称"`
+	Unit       string    `description:"单位"`
+	Frequency  string    `description:"频度"`
+	SourceName string    `description:"数据来源名称"`
+	StartDate  time.Time `description:"开始日期" json:"StartDate,omitempty"`
+	EndDate    time.Time `description:"结束日期" json:"EndDate,omitempty"`
+	CreateTime time.Time `description:"创建时间" json:"CreateTime,omitempty"`
 }
 
 // BaseFromBusinessIndexResp 联合国商品贸易列表数据返回
@@ -44,6 +47,16 @@ type BaseFromBusinessIndexResp struct {
 	LastUpdateTime string
 }
 
+// BaseFromBusinessIndexDataItem
+// @Description: 外部指标(商家系统)数据结构
+type BaseFromBusinessIndexDataItem struct {
+	ID        string
+	EdbDataId int `orm:"column(edb_data_id);pk"`
+	IndexCode string
+	DataTime  string
+	Value     float64
+}
+
 func (m *BaseFromBusinessIndex) GetItemsByCondition(cond string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (total int, items []*BaseFromBusinessIndexItem, err error) {
 	o := orm.NewOrmUsingDB("data")
 	fields := strings.Join(fieldArr, ",")
@@ -66,3 +79,8 @@ func (m *BaseFromBusinessIndex) GetItemsByCondition(cond string, pars []interfac
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+type BusinessIndexDataListResp struct {
+	List   []*BaseFromBusinessIndexDataItem
+	Paging *paging.PagingItem `description:"分页数据"`
+}

+ 158 - 0
models/data_manage/base_from_business_data.go

@@ -0,0 +1,158 @@
+package data_manage
+
+import (
+	"eta/eta_hub/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// BaseFromBusinessData
+// @Description: 外部指标(商家系统)原始数据表
+type BaseFromBusinessData struct {
+	BusinessDataId          int       `orm:"column(business_data_id);pk" json:"business_data_id"`
+	BaseFromBusinessIndexId int       `json:"base_from_business_index_id"` // 指标id
+	IndexCode               string    `json:"index_code"`                  // 指标编码
+	DataTime                time.Time `json:"data_time"`                   // 数据日期
+	Value                   float64   `json:"value"`                       // 数据值
+	CreateTime              time.Time `json:"create_time"`                 // 创建时间
+	ModifyTime              time.Time `json:"modify_time"`                 // 修改时间
+}
+
+// TableName
+// @Description:  获取表名
+// @author: Roc
+// @receiver m
+// @datetime 2024-04-26 13:41:36
+// @return string
+func (m *BaseFromBusinessData) TableName() string {
+	return "base_from_business_data"
+}
+
+// CollectionName
+// @Description:  获取集合名称
+// @author: Roc
+// @receiver m
+// @datetime 2024-04-26 13:41:36
+// @return string
+func (m *BaseFromBusinessData) CollectionName() string {
+	return "base_from_business_data"
+}
+
+// DataBaseName
+// @Description: 获取数据库名称
+// @author: Roc
+// @receiver m
+// @datetime 2024-04-26 13:41:33
+// @return string
+func (m *BaseFromBusinessData) DataBaseName() string {
+	return utils.MgoDataDbName
+}
+
+type WhereParams struct {
+	Condition string
+	Pars      []interface{}
+	Order     string `description:"排序字段"`
+}
+
+// GetAllDataList
+// @Description: 根据条件获取所有数据
+// @author: Roc
+// @receiver m
+// @datetime 2024-04-26 13:42:19
+// @param sort []string
+// @param whereParams interface{}
+// @return result []BaseFromBusinessData
+// @return err error
+func (m *BaseFromBusinessData) GetAllDataList(condition string, pars []interface{}, order string) (result []*BaseFromBusinessData, err error) {
+	o := orm.NewOrmUsingDB("data")
+
+	sql := `SELECT * FROM base_from_business_data WHERE 1=1 `
+	if condition != `` {
+		sql += ` ` + condition
+	}
+
+	if order != `` {
+		sql += ` ORDER BY ` + order
+	}
+
+	_, err = o.Raw(sql, pars).QueryRows(&result)
+
+	return
+}
+
+// GetLimitDataList
+// @Description: 根据条件获取指定数量数据列表
+// @author: Roc
+// @receiver m
+// @datetime 2024-05-06 17:08:32
+// @param whereParams interface{}
+// @param size int64
+// @return result []*BaseFromBusinessData
+// @return err error
+func (m *BaseFromBusinessData) GetLimitDataList(condition string, pars []interface{}, order string, size int64) (result []*BaseFromBusinessData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_business_data WHERE 1=1 `
+	if condition != `` {
+		sql += ` ` + condition
+	}
+
+	if order != `` {
+		sql += ` ORDER BY ` + order
+	}
+
+	sql += fmt.Sprintf(` LIMIT %d`, size)
+
+	_, err = o.Raw(sql, pars).QueryRows(&result)
+
+	return
+}
+
+// GetPageDataList
+// @Description: 根据条件获取分页数据列表
+// @author: Roc
+// @receiver m
+// @datetime 2024-05-07 10:21:07
+// @param whereParams interface{}
+// @param startSize int64
+// @param size int64
+// @param sort []string
+// @return result []*BaseFromBusinessData
+// @return err error
+func (m *BaseFromBusinessData) GetPageDataList(condition []string, pars []interface{}, order string, startSize, size int64) (result []*BaseFromBusinessData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_business_data `
+	if len(condition) > 0 {
+		sql += ` WHERE ` + strings.Join(condition, " AND ")
+	}
+
+	if order != `` {
+		sql += ` ORDER BY ` + order
+	}
+
+	sql += fmt.Sprintf(` LIMIT %d,%d`, startSize, size)
+
+	_, err = o.Raw(sql, pars).QueryRows(&result)
+
+	return
+}
+
+// GetCountDataList
+// @Description:  根据条件获取数据列表总数
+// @author: Roc
+// @receiver m
+// @datetime 2024-05-07 10:29:00
+// @param whereParams interface{}
+// @return count int64
+// @return err error
+func (m *BaseFromBusinessData) GetCountDataList(condition []string, pars []interface{}) (count int64, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT COUNT(1) FROM base_from_business_data `
+	if len(condition) > 0 {
+		sql += ` WHERE ` + strings.Join(condition, " AND ")
+	}
+	err = o.Raw(sql, pars).QueryRow(&count)
+
+	return
+}

+ 21 - 0
models/data_manage/edb_business_source.go

@@ -0,0 +1,21 @@
+package data_manage
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// EdbBusinessSource
+// @Description: 自有数据(商家)指标来源
+type EdbBusinessSource struct {
+	EdbBusinessSourceId int64     `orm:"column(edb_business_source_id);pk"`
+	SourceName          string    `description:"来源名称"` // 来源名称
+	CreateTime          time.Time `description:"创建时间"` // 创建时间
+}
+
+func (s *EdbBusinessSource) GetAllList() (items []*EdbBusinessSource, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM edb_business_source order by  edb_business_source_id desc `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 5 - 0
models/data_manage/request.go

@@ -32,3 +32,8 @@ type DelBusinessDataReq struct {
 	StartDate string `description:"开始日期"`
 	EndDate   string `description:"结束日期"`
 }
+type BusinessDataDataListReq struct {
+	PageSize     int    `form:"PageSize"`
+	CurrentIndex int    `form:"CurrentIndex"`
+	IndexCode    string `form:"IndexCode" description:"指标编码"`
+}

+ 18 - 0
routers/commentsRouter.go

@@ -52,6 +52,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"],
+        beego.ControllerComments{
+            Method: "DataList",
+            Router: `/business/edb/data/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"],
         beego.ControllerComments{
             Method: "BusinessEdbDel",
@@ -70,6 +79,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"],
+        beego.ControllerComments{
+            Method: "BusinessSourceList",
+            Router: `/business/edb/source/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"] = append(beego.GlobalControllerRouter["eta/eta_hub/controllers:EdbController"],
         beego.ControllerComments{
             Method: "ClassifyList",

+ 112 - 0
services/data/edb_data.go

@@ -3,9 +3,11 @@ package data
 import (
 	"errors"
 	"eta/eta_hub/models/data_manage"
+	"eta/eta_hub/models/mgo"
 	"eta/eta_hub/utils"
 	"fmt"
 	"github.com/shopspring/decimal"
+	"go.mongodb.org/mongo-driver/bson"
 	"time"
 )
 
@@ -287,3 +289,113 @@ func GetEdbDataList(edbInfo *data_manage.EdbInfo, startDate string) (dataList []
 	}
 	return
 }
+
+// GetPageBaseBusinessIndexData
+// @Description: 获取自有数据的分页数据
+// @author: Roc
+// @datetime 2024-05-07 11:02:51
+// @param indexCode int
+// @param startSize int
+// @param pageSize int
+// @return dataCount int
+// @return dataList []*data_manage.BaseFromBusinessIndexDataItem
+// @return err error
+func GetPageBaseBusinessIndexData(indexCode string, startSize, pageSize int) (dataCount int, dataList []*data_manage.BaseFromBusinessIndexDataItem, err error) {
+	if utils.UseMongo {
+		dataCount, dataList, err = getPageBaseBusinessIndexDataByMongo(indexCode, startSize, pageSize)
+	} else {
+		dataCount, dataList, err = getPageBaseBusinessIndexDataByMysql(indexCode, startSize, pageSize)
+	}
+
+	return
+}
+
+// getPageBaseBusinessIndexDataByMongo
+// @Description: 获取自有数据的分页数据(从mongo中获取)
+// @author: Roc
+// @datetime 2024-07-01 14:01:04
+// @param indexCode string
+// @param startSize int
+// @param pageSize int
+// @return dataCount int
+// @return dataList []*data_manage.BaseFromBusinessIndexDataItem
+// @return err error
+func getPageBaseBusinessIndexDataByMongo(indexCode string, startSize, pageSize int) (dataCount int, dataList []*data_manage.BaseFromBusinessIndexDataItem, err error) {
+	dataList = make([]*data_manage.BaseFromBusinessIndexDataItem, 0)
+
+	mogDataObj := mgo.BaseFromBusinessData{}
+	// 构建查询条件
+	queryConditions := bson.M{
+		"index_code": indexCode,
+	}
+
+	// 获取数据总量
+	tmpCount, tmpErr := mogDataObj.GetCountDataList(queryConditions)
+	if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
+		err = tmpErr
+		return
+	}
+	dataCount = int(tmpCount)
+
+	// 获取列表数据
+	tmpDataList, tmpErr := mogDataObj.GetPageDataList(queryConditions, int64(startSize), int64(pageSize), []string{"-data_time"})
+	if tmpErr != nil {
+		err = tmpErr
+		return
+	}
+	for _, v := range tmpDataList {
+		dataList = append(dataList, &data_manage.BaseFromBusinessIndexDataItem{
+			ID:        v.ID.String(),
+			IndexCode: v.IndexCode,
+			DataTime:  v.DataTime.Format(utils.FormatDate),
+			Value:     v.Value,
+		})
+	}
+
+	return
+}
+
+// getPageBaseBusinessIndexDataByMysql
+// @Description: 获取自有数据的分页数据(从mysql中获取)
+// @author: Roc
+// @datetime 2024-07-01 14:00:41
+// @param indexCode string
+// @param startSize int
+// @param pageSize int
+// @return dataCount int
+// @return dataList []*data_manage.BaseFromBusinessIndexDataItem
+// @return err error
+func getPageBaseBusinessIndexDataByMysql(indexCode string, startSize, pageSize int) (dataCount int, dataList []*data_manage.BaseFromBusinessIndexDataItem, err error) {
+	dataList = make([]*data_manage.BaseFromBusinessIndexDataItem, 0)
+
+	businessDataObj := data_manage.BaseFromBusinessData{}
+	var condition []string
+	var pars []interface{}
+
+	condition = append(condition, "index_code = ?")
+	pars = append(pars, indexCode)
+
+	// 获取数据总量
+	tmpCount, tmpErr := businessDataObj.GetCountDataList(condition, pars)
+	if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
+		err = tmpErr
+		return
+	}
+	dataCount = int(tmpCount)
+
+	// 获取列表数据
+	tmpDataList, tmpErr := businessDataObj.GetPageDataList(condition, pars, " data_time desc", int64(startSize), int64(pageSize))
+	if tmpErr != nil {
+		err = tmpErr
+		return
+	}
+	for _, v := range tmpDataList {
+		dataList = append(dataList, &data_manage.BaseFromBusinessIndexDataItem{
+			ID:        fmt.Sprint(v.BusinessDataId),
+			IndexCode: v.IndexCode,
+			DataTime:  v.DataTime.Format(utils.FormatDate),
+			Value:     v.Value,
+		})
+	}
+	return
+}