Bladeren bron

Merge remote-tracking branch 'origin/debug' into debug

# Conflicts:
#	config/config.go
zwxi 10 maanden geleden
bovenliggende
commit
df8cac1128

+ 14 - 7
config/config.go

@@ -3,13 +3,14 @@ package config
 import "time"
 
 type Config struct {
-	Log      Log      `mapstructure:"log" json:"log" yaml:"log"`
-	Serve    Serve    `mapstructure:"serve" json:"serve" yaml:"serve"`
-	Mysql    Mysql    `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
-	Redis    Redis    `mapstructure:"redis" json:"redis" yaml:"redis"`
-	AliOss   AliOss   `mapstructure:"ali-oss" json:"ali-oss" yaml:"ali-oss"`
-	EsClient EsClient `mapstructure:"es_client" json:"es_client" yaml:"es_client"`
-	Mongo    Mongo    `mapstructure:"mongo" json:"mongo" yaml:"mongo"`
+	Log         Log         `mapstructure:"log" json:"log" yaml:"log"`
+	Serve       Serve       `mapstructure:"serve" json:"serve" yaml:"serve"`
+	Mysql       Mysql       `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
+	Redis       Redis       `mapstructure:"redis" json:"redis" yaml:"redis"`
+	AliOss      AliOss      `mapstructure:"ali-oss" json:"ali-oss" yaml:"ali-oss"`
+	EsClient    EsClient    `mapstructure:"es_client" json:"es_client" yaml:"es_client"`
+	Mongo       Mongo       `mapstructure:"mongo" json:"mongo" yaml:"mongo"`
+	EtaChartLib EtaChartLib `mapstructure:"eta_chart_lib" json:"eta_chart_lib" yaml:"eta_chart_lib"`
 	ChromePath string `mapstructure:"chrome-path" json:"chrome-path" yaml:"chrome-path" description:"chrome路径"`
 }
 
@@ -100,3 +101,9 @@ type Mongo struct {
 	Username      string `mapstructure:"username" json:"username" yaml:"username" description:"用户名"`
 	Password      string `mapstructure:"password" json:"password" yaml:"password" description:"密码"`
 }
+
+type EtaChartLib struct {
+	ServerUrl string `mapstructure:"server_url" json:"server_url" yaml:"server_url" description:"项目请求地址"`
+	AppNameEn string `mapstructure:"app_name_en" json:"app_name_en" yaml:"app_name_en" description:"项目名称"`
+	Md5Key    string `mapstructure:"md5_key" json:"md5_key" yaml:"md5_key" description:"项目密钥"`
+}

+ 122 - 89
controller/chart/chart_info.go

@@ -15,6 +15,7 @@ import (
 	"hongze/hongze_yb/models/tables/chart_info_log"
 	edbInfoModel "hongze/hongze_yb/models/tables/edb_info"
 	"hongze/hongze_yb/models/tables/yb_my_chart"
+	"hongze/hongze_yb/services"
 	"hongze/hongze_yb/services/alarm_msg"
 	"hongze/hongze_yb/services/chart"
 	"hongze/hongze_yb/services/chart/cross_variety"
@@ -74,107 +75,150 @@ func GetChartInfoDetail(c *gin.Context) {
 		response.FailMsg("获取失败", "获取图表信息失败, Err:"+err.Error(), c)
 		return
 	}
-	// 获取主题样式
-	chartTheme, err := chart.GetChartThemeConfig(chartInfo.ChartThemeId, chartInfo.Source, chartInfo.ChartType)
-	if err != nil {
-		response.FailMsg("获取失败", "获取主题信息失败, Err:"+err.Error(), c)
-		return
-	}
-	chartInfo.ChartThemeStyle = chartTheme.Config
-	chartInfo.ChartThemeId = chartTheme.ChartThemeID
+	var (
+		edbList     []*chartEdbMappingModel.ChartEdbInfoMappingList
+		xEdbIdValue []int
+		yDataList   []chart_info.YData
+		sourceArr   []string
+		dataResp    interface{}
+	)
+	// todo 特殊处理平衡表
+	if chartInfo.Source == utils.CHART_SOURCE_BALANCE_EXCEL {
+		//调用接口
+		chartData, e := services.GetBalanceChartDetail(chartInfo.UniqueCode)
+		if e != nil {
+			response.FailMsg("获取失败", "获取图表信息失败, Err:"+e.Error(), c)
+			return
+		}
+		chartDataResp := new(chart_info.ChartInfoDetailResp)
+		// 兼容返回值类型
+		chartDataString, _ := json.Marshal(chartData)
+		err = json.Unmarshal(chartDataString, chartDataResp)
+		if err != nil {
+			response.FailMsg("获取失败", "获取图表信息失败, Err:"+err.Error(), c)
+			return
+		}
+		chartInfo = chartDataResp.ChartInfo
+		chartInfo.ChartInfoId = chartInfoId
+		yDataList = chartDataResp.YDataList
+		edbList = chartDataResp.EdbInfoList
+		xEdbIdValue = chartDataResp.XEdbIdValue
+		sourceArr = append(sourceArr, "平衡表")
+		dataResp = chartDataResp.DataResp
 
-	chartType = chartInfo.ChartType
-	startDate := chartInfo.StartDate
-	endDate := chartInfo.EndDate
-	startYear := chartInfo.StartYear
-	calendar := chartInfo.Calendar
-	if reqCalendar != "" {
-		calendar = reqCalendar
-	}
+	} else {
 
-	// 时段筛选
-	reqDateType := c.DefaultQuery("DateType", "")
-	dateType := chartInfo.DateType
-	if reqDateType != "" {
-		dateType, _ = strconv.Atoi(reqDateType)
-	}
-	if dateType <= 0 {
-		dateType = 3 // 默认同后台15年至今
-	}
-	if reqStartDate != "" {
-		startDate = reqStartDate
-	}
-	if reqEndDate != "" {
-		endDate = reqEndDate
-	}
-	// 获取图表指标映射
-	mappingList := make([]*chartEdbMappingModel.ChartEdbInfoMapping, 0)
-	if chartInfoId > 0 {
-		mappingList, err = chartEdbMappingModel.GetMappingListByChartInfoId(chartInfoId)
+		// 获取主题样式
+		chartTheme, err := chart.GetChartThemeConfig(chartInfo.ChartThemeId, chartInfo.Source, chartInfo.ChartType)
 		if err != nil {
-			response.FailMsg("获取失败", "获取图表指标信息失败4001, Err:"+err.Error(), c)
+			response.FailMsg("获取失败", "获取主题信息失败, Err:"+err.Error(), c)
 			return
 		}
-	} else {
-		if edbInfoId != "" {
-			mappingList, err = chartEdbMappingModel.GetMappingListByEdbInfoId(edbInfoId)
+		chartInfo.ChartThemeStyle = chartTheme.Config
+		chartInfo.ChartThemeId = chartTheme.ChartThemeID
+
+		chartType = chartInfo.ChartType
+		startDate := chartInfo.StartDate
+		endDate := chartInfo.EndDate
+		startYear := chartInfo.StartYear
+		calendar := chartInfo.Calendar
+		if reqCalendar != "" {
+			calendar = reqCalendar
+		}
+
+		// 时段筛选
+		reqDateType := c.DefaultQuery("DateType", "")
+		dateType := chartInfo.DateType
+		if reqDateType != "" {
+			dateType, _ = strconv.Atoi(reqDateType)
+		}
+		if dateType <= 0 {
+			dateType = 3 // 默认同后台15年至今
+		}
+		if reqStartDate != "" {
+			startDate = reqStartDate
+		}
+		if reqEndDate != "" {
+			endDate = reqEndDate
+		}
+		// 获取图表指标映射
+		mappingList := make([]*chartEdbMappingModel.ChartEdbInfoMapping, 0)
+		if chartInfoId > 0 {
+			mappingList, err = chartEdbMappingModel.GetMappingListByChartInfoId(chartInfoId)
 			if err != nil {
-				response.FailMsg("获取失败", "获取图表指标信息失败4002, Err:"+err.Error(), c)
+				response.FailMsg("获取失败", "获取图表指标信息失败4001, Err:"+err.Error(), c)
 				return
 			}
+		} else {
+			if edbInfoId != "" {
+				mappingList, err = chartEdbMappingModel.GetMappingListByEdbInfoId(edbInfoId)
+				if err != nil {
+					response.FailMsg("获取失败", "获取图表指标信息失败4002, Err:"+err.Error(), c)
+					return
+				}
+			}
 		}
-	}
 
-	yearMax := 0
-	if dateType == utils.DateTypeNYears {
-		for _, v := range mappingList {
-			if v.LatestDate.Year() > yearMax {
-				yearMax = v.LatestDate.Year()
+		yearMax := 0
+		if dateType == utils.DateTypeNYears {
+			for _, v := range mappingList {
+				if v.LatestDate.Year() > yearMax {
+					yearMax = v.LatestDate.Year()
+				}
 			}
 		}
-	}
-	startDate, endDate = utils.GetDateByDateTypeV2(dateType, startDate, endDate, startYear, yearMax)
-
-	// 图表额外数据参数
-	extraConfigStr := chartInfo.ExtraConfig
-	// 柱方图的一些配置
-	var barConfig request.BarChartInfoReq
-	if chartInfo != nil && chartInfo.ChartType == 7 {
-		if chartInfo.BarConfig == `` {
-			response.FailMsg("柱方图未配置", "柱方图未配置", c)
-			return
+		startDate, endDate = utils.GetDateByDateTypeV2(dateType, startDate, endDate, startYear, yearMax)
+
+		// 图表额外数据参数
+		extraConfigStr := chartInfo.ExtraConfig
+		// 柱方图的一些配置
+		var barConfig request.BarChartInfoReq
+		if chartInfo != nil && chartInfo.ChartType == 7 {
+			if chartInfo.BarConfig == `` {
+				response.FailMsg("柱方图未配置", "柱方图未配置", c)
+				return
+			}
+			err = json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
+			if err != nil {
+				response.FailMsg("柱方图配置异常", "柱方图配置异常", c)
+				return
+			}
+			extraConfigStr = chartInfo.BarConfig
 		}
-		err = json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
+		var errMsg string
+		// 获取图表中的指标数据
+		edbList, xEdbIdValue, yDataList, sourceArr, dataResp, err, errMsg = chart.GetChartEdbData(chartInfoId, chartType, calendar, startDate, endDate, mappingList, extraConfigStr, chartInfo.SeasonExtraConfig)
 		if err != nil {
-			response.FailMsg("柱方图配置异常", "柱方图配置异常", c)
+			msg := `获取失败`
+			if errMsg != `` {
+				msg = errMsg
+			}
+			response.FailMsg(msg, "获取图表,指标信息失败, Err:"+err.Error(), c)
 			return
 		}
-		extraConfigStr = chartInfo.BarConfig
-	}
-
-	// 获取图表中的指标数据
-	edbList, xEdbIdValue, yDataList, sourceArr, dataResp, err, errMsg := chart.GetChartEdbData(chartInfoId, chartType, calendar, startDate, endDate, mappingList, extraConfigStr, chartInfo.SeasonExtraConfig)
-	if err != nil {
-		msg := `获取失败`
-		if errMsg != `` {
-			msg = errMsg
-		}
-		response.FailMsg(msg, "获取图表,指标信息失败, Err:"+err.Error(), c)
-		return
-	}
 
-	for _, v := range edbList {
-		// 指标别名
-		if barConfig.EdbInfoIdList != nil && len(barConfig.EdbInfoIdList) > 0 {
-			for _, reqEdb := range barConfig.EdbInfoIdList {
-				if v.EdbInfoId == reqEdb.EdbInfoId {
-					v.EdbAliasName = reqEdb.Name
+		for _, v := range edbList {
+			// 指标别名
+			if barConfig.EdbInfoIdList != nil && len(barConfig.EdbInfoIdList) > 0 {
+				for _, reqEdb := range barConfig.EdbInfoIdList {
+					if v.EdbInfoId == reqEdb.EdbInfoId {
+						v.EdbAliasName = reqEdb.Name
+					}
 				}
 			}
 		}
+		if chartType == utils.CHART_TYPE_BAR && len(yDataList) > 0 {
+			chartInfo.Unit = yDataList[0].Unit
+			chartInfo.UnitEn = yDataList[0].UnitEn
+		}
+		// 图表的指标来源
+		sourceNameList, sourceNameEnList := chart.GetEdbSourceByEdbInfoIdList(edbList)
+		chartInfo.ChartSource = strings.Join(sourceNameList, ",")
+		chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
 	}
 
 	sourceArr = append(sourceArr, "弘则研究")
+
 	chartInfo.ChartSource = strings.Join(sourceArr, ",")
 
 	// 访问记录-仅普通用户记录
@@ -210,17 +254,6 @@ func GetChartInfoDetail(c *gin.Context) {
 		myChartInfo.CreateTime = utils.TimeTransferString(utils.FormatDateTime, exists.CreateTime)
 	}
 
-	// 单位
-	if chartType == utils.CHART_TYPE_BAR && len(yDataList) > 0 {
-		chartInfo.Unit = yDataList[0].Unit
-		chartInfo.UnitEn = yDataList[0].UnitEn
-	}
-
-	// 图表的指标来源
-	sourceNameList, sourceNameEnList := chart.GetEdbSourceByEdbInfoIdList(edbList)
-	chartInfo.ChartSource = strings.Join(sourceNameList, ",")
-	chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
-
 	resp := new(chart_info.ChartInfoDetailResp)
 	resp.ChartInfo = chartInfo
 	resp.EdbInfoList = edbList

+ 58 - 0
models/mgo/common.go

@@ -0,0 +1,58 @@
+package mgo
+
+import (
+	"go.mongodb.org/mongo-driver/bson"
+	"hongze/hongze_yb/utils"
+	"time"
+)
+
+// BuildDateCondition
+// @Description:  构建日期查询条件
+// @author: Roc
+// @datetime 2024-06-03 09:41:19
+// @param start string
+// @param end string
+// @return condition bson.M
+// @return err error
+func BuildDateCondition(start, end string) (condition bson.M, err error) {
+	var startDateTime, endDateTime time.Time
+	if start != "" {
+		// 使用开始日期条件
+		startDateTime, err = time.ParseInLocation(utils.FormatDate, start, time.Local)
+		if err != nil {
+			return
+		}
+	}
+	if end != "" {
+		// 使用结束日期条件
+		endDateTime, err = time.ParseInLocation(utils.FormatDate, end, time.Local)
+		if err != nil {
+			return
+		}
+	}
+
+	return BuildDateTimeCondition(startDateTime, endDateTime)
+
+}
+
+// BuildDateTimeCondition
+// @Description: 构建日期查询条件
+// @author: Roc
+// @datetime 2024-06-03 09:47:32
+// @param startDateTime time.Time
+// @param endDateTime time.Time
+// @return condition bson.M
+// @return err error
+func BuildDateTimeCondition(startDateTime, endDateTime time.Time) (condition bson.M, err error) {
+	if !startDateTime.IsZero() && !endDateTime.IsZero() {
+		condition = bson.M{utils.DateConvMysqlConvMongo(">="): startDateTime, utils.DateConvMysqlConvMongo("<="): endDateTime}
+	} else if !startDateTime.IsZero() {
+		cond := utils.DateConvMysqlConvMongo(">=")
+		condition = bson.M{cond: startDateTime}
+	} else if !endDateTime.IsZero() {
+		cond := utils.DateConvMysqlConvMongo("<=")
+		condition = bson.M{cond: endDateTime}
+	}
+
+	return
+}

+ 11 - 0
models/response/chart_info/chart_info.go

@@ -19,6 +19,17 @@ type ChartInfoDetailResp struct {
 	DataResp             interface{}      `description:"图表数据,根据图的类型而定的,没有确定的数据格式"`
 }
 
+type ChartLibChartInfoDetailResp struct {
+	ChartInfo            *chart_info.ChartInfoView
+	EdbInfoList          []*chart_edb_mapping.ChartEdbInfoMappingTimeString
+	XEdbIdValue          []int            `description:"柱方图的x轴数据,指标id"`
+	XDataList            []XData          `description:"商品价格曲线的X轴数据"`
+	YDataList            []YData          `description:"柱方图的y轴数据"`
+	CorrelationChartInfo *CorrelationInfo `description:"相关性图表信息"`
+	DataResp             interface{}      `description:"图表数据,根据图的类型而定的,没有确定的数据格式"`
+	WaterMark            string           `description:"水印"`
+}
+
 // XData 商品价格曲线的的x轴数据
 type XData struct {
 	Name   string `description:"别名"`

+ 26 - 0
models/tables/chart_edb_mapping/query.go

@@ -63,6 +63,32 @@ type ChartEdbInfoMappingList struct {
 	IsNullData bool `json:"-" description:"是否空数据"`
 }
 
+type ChartEdbInfoMappingTimeString struct {
+	ChartEdbInfoMapping
+	DataList       interface{}
+	IsNullData     bool                       `json:"-" description:"是否空数据"`
+	LatestDate     ChartLibEdbInfoMappingTime `description:"数据最新日期"`
+	MoveLatestDate ChartLibEdbInfoMappingTime `description:"移动后的数据最新日期"`
+}
+
+type ChartLibEdbInfoMappingTime struct {
+	time.Time
+}
+
+// 自定义时间解析规则
+func (ct *ChartLibEdbInfoMappingTime) UnmarshalJSON(data []byte) error {
+	s := string(data)
+	if s[0] == '"' {
+		s = s[1 : len(s)-1]
+	}
+	t, err := time.ParseInLocation(utils.FormatDate, s, time.Local)
+	if err != nil {
+		return err
+	}
+	ct.Time = t
+	return nil
+}
+
 // GetMappingListByChartInfoId 根据图表ID获取指标映射列表
 func GetMappingListByChartInfoId(chartInfoId int) (list []*ChartEdbInfoMapping, err error) {
 	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`

+ 15 - 15
models/tables/chart_info/query.go

@@ -12,21 +12,21 @@ type ChartInfoView struct {
 	ChartClassifyName string `description:"图表名称"`
 	SysUserId         int
 	SysUserRealName   string
-	UniqueCode        string `description:"图表唯一编码"`
-	CreateTime        time.Time
-	ModifyTime        time.Time
-	DateType          int    `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间"`
-	StartDate         string `description:"自定义开始日期"`
-	EndDate           string `description:"自定义结束日期"`
-	IsSetName         int    `description:"设置名称"`
-	EdbInfoIds        string `description:"指标id"`
-	ChartType         int    `description:"生成样式:1:曲线图,2:季节性图"`
-	Calendar          string `description:"公历/农历"`
-	SeasonStartDate   string `description:"季节性图开始日期"`
-	SeasonEndDate     string `description:"季节性图开始日期"`
-	ChartImage        string `description:"图表图片"`
-	Sort              int    `description:"排序字段,数字越小越排前面"`
-	IsAdd             bool   `description:"true:已加入我的图库,false:未加入我的图库"`
+	UniqueCode        string    `description:"图表唯一编码"`
+	CreateTime        time.Time `json:"-"`
+	ModifyTime        time.Time `json:"-"`
+	DateType          int       `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间"`
+	StartDate         string    `description:"自定义开始日期"`
+	EndDate           string    `description:"自定义结束日期"`
+	IsSetName         int       `description:"设置名称"`
+	EdbInfoIds        string    `description:"指标id"`
+	ChartType         int       `description:"生成样式:1:曲线图,2:季节性图"`
+	Calendar          string    `description:"公历/农历"`
+	SeasonStartDate   string    `description:"季节性图开始日期"`
+	SeasonEndDate     string    `description:"季节性图开始日期"`
+	ChartImage        string    `description:"图表图片"`
+	Sort              int       `description:"排序字段,数字越小越排前面"`
+	IsAdd             bool      `description:"true:已加入我的图库,false:未加入我的图库"`
 	MyChartId         int
 	MyChartClassifyId string `description:"我的图表分类,多个用逗号隔开"`
 	EdbEndDate        string `description:"指标最新更新日期"`

+ 1 - 0
models/tables/chart_permission_search_key_word_mapping/chart_permission_search_key_word_mapping.go

@@ -7,6 +7,7 @@ type ChartPermissionSearchKeyWordMapping struct {
 	From               string `gorm:"column:from;type:varchar(100)" json:"from"`
 	TacticType         string `gorm:"column:tactic_type;type:varchar(100)" json:"tactic_type"`
 	TeleconferenceSort int    `gorm:"column:teleconference_sort;type:int(11)" json:"teleconference_sort"`
+	ClassifyId         int    `gorm:"column:classify_id;type:int(11)" json:"classify_id"`
 }
 
 func (c *ChartPermissionSearchKeyWordMapping) TableName() string {

+ 15 - 11
models/tables/chart_permission_search_key_word_mapping/query.go

@@ -6,9 +6,9 @@ import (
 )
 
 // GetChartPermissionIdsByKeyWord 查询二级分类中的权限
-func GetChartPermissionIdsByKeyWord(keyWord string) (ids []int, err error)  {
+func GetChartPermissionIdsByKeyWord(classifyId int) (ids []int, err error) {
 	var list []*ChartPermissionSearchKeyWordMapping
-	err = global.DEFAULT_MYSQL.Model(ChartPermissionSearchKeyWordMapping{}).Where("key_word = ? and `from` = 'rddp' ", keyWord).Scan(&list).Error
+	err = global.DEFAULT_MYSQL.Model(ChartPermissionSearchKeyWordMapping{}).Where("classify_id = ? and `from` = 'rddp' ", classifyId).Scan(&list).Error
 	if err != nil && err != utils.ErrNoRow {
 		return
 	}
@@ -20,9 +20,8 @@ func GetChartPermissionIdsByKeyWord(keyWord string) (ids []int, err error)  {
 	return
 }
 
-
 // GetChartPermissionByFrom 查询二级分类中的权限
-func GetChartPermissionByFrom(from string) (list []*ChartPermissionSearchKeyWordMapping, err error)  {
+func GetChartPermissionByFrom(from string) (list []*ChartPermissionSearchKeyWordMapping, err error) {
 	err = global.DEFAULT_MYSQL.Model(ChartPermissionSearchKeyWordMapping{}).Where("`from` = ? and chart_permission_id != 33", from).Scan(&list).Error
 	if err == utils.ErrNoRow {
 		err = nil
@@ -30,23 +29,28 @@ func GetChartPermissionByFrom(from string) (list []*ChartPermissionSearchKeyWord
 	return
 }
 
-// GetKeyWordsByChartPermissionId 根据权限ID, 查询二级分类名称
-func GetKeyWordsByChartPermissionId(charPermissionId int, from string) (keyWords []string, err error)  {
+// GetClassifyIdsByChartPermissionId 根据权限ID, 查询二级分类IDs
+func GetClassifyIdsByChartPermissionId(charPermissionId int, from string) (classifyIds []int, err error) {
 	var list []*ChartPermissionSearchKeyWordMapping
 	err = global.DEFAULT_MYSQL.Model(ChartPermissionSearchKeyWordMapping{}).Where("chart_permission_id = ? and `from` = ? ", charPermissionId, from).Scan(&list).Error
 	if err != nil && err != utils.ErrNoRow {
 		return
 	}
 	if len(list) > 0 {
+		exists := make(map[int]bool)
 		for _, item := range list {
-			keyWords = append(keyWords, item.KeyWord)
+			if exists[item.ClassifyId] {
+				continue
+			}
+			classifyIds = append(classifyIds, item.ClassifyId)
+			exists[item.ClassifyId] = true
 		}
 	}
 	return
 }
 
-// GetKeyWordsByChartPermissionId 根据权限ID, 查询二级分类名称
-func GetKeyWordsByChartPermissionIdOnly(charPermissionId int) (keyWords []string, err error)  {
+// GetKeyWordsByChartPermissionIdOnly 根据权限ID, 查询二级分类名称
+func GetKeyWordsByChartPermissionIdOnly(charPermissionId int) (keyWords []string, err error) {
 	var list []*ChartPermissionSearchKeyWordMapping
 	err = global.DEFAULT_MYSQL.Model(ChartPermissionSearchKeyWordMapping{}).Where("chart_permission_id = ? ", charPermissionId).Scan(&list).Error
 	if err != nil && err != utils.ErrNoRow {
@@ -61,7 +65,7 @@ func GetKeyWordsByChartPermissionIdOnly(charPermissionId int) (keyWords []string
 }
 
 // GetKeyWordsByChartPermissionByIds 根据权限ID, 查询二级分类名称
-func GetKeyWordsByChartPermissionByIds(charPermissionIds []int) (keyWords []string, err error)  {
+func GetKeyWordsByChartPermissionByIds(charPermissionIds []int) (keyWords []string, err error) {
 	var list []*ChartPermissionSearchKeyWordMapping
 	err = global.DEFAULT_MYSQL.Model(ChartPermissionSearchKeyWordMapping{}).Where("chart_permission_id IN (?) ", charPermissionIds).Scan(&list).Error
 	if err != nil && err != utils.ErrNoRow {
@@ -73,4 +77,4 @@ func GetKeyWordsByChartPermissionByIds(charPermissionIds []int) (keyWords []stri
 		}
 	}
 	return
-}
+}

+ 7 - 17
models/tables/edb_data/query.go

@@ -310,25 +310,15 @@ func getEdbDataListByMongo(source, subSource, edbInfoId int, startDate, endDate
 	queryConditions := bson.M{
 		"edb_info_id": edbInfoId,
 	}
-
-	// 数据开始日期
-	if startDate != `` {
-		startDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		queryConditions["data_time"] = bson.M{"$gte": startDateTime}
+	// 日期
+	dateCondition, err := mgo.BuildDateCondition(startDate, endDate)
+	if err != nil {
+		return
 	}
-	// 数据结束日期
-	if endDate != "" {
-		endDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		queryConditions["data_time"] = bson.M{"$lte": endDateTime}
+	if len(dateCondition) > 0 {
+		queryConditions["data_time"] = dateCondition
 	}
+
 	// 获取列表数据
 	tmpDataList, tmpErr := mogDataObj.GetAllDataList(queryConditions, []string{"data_time"})
 	if tmpErr != nil {

+ 11 - 0
models/tables/rddp/session/update.go

@@ -1,6 +1,7 @@
 package session
 
 import (
+	"fmt"
 	"time"
 )
 
@@ -18,3 +19,13 @@ func (session *Session) UpdateSession(userId int64, expireTime time.Time) (err e
 	err = session.Update(updateCols)
 	return
 }
+
+// ClearRepeatBindAccountToken 清除重复绑定账号的token
+func ClearRepeatBindAccountToken(openIds []string) (err error) {
+	if len(openIds) == 0 {
+		return
+	}
+	sql := fmt.Sprintf(` DELETE FROM session WHERE open_id IN ? AND expire_time >= NOW() `)
+	err = getDb().Exec(sql, openIds).Error
+	return
+}

+ 3 - 3
models/tables/user_record/query.go

@@ -32,9 +32,9 @@ func GetFirstByUnionID(unionID string) (item *UserRecord, err error) {
 	return
 }
 
-// GetRepeatBindAccountNum 获取重复的绑定账号
-func GetRepeatBindAccountNum(account string, source int) (num int64, err error) {
-	err = global.DEFAULT_MYSQL.Model(UserRecord{}).Where("bind_account = ? AND create_platform = ?", account, source).Count(&num).Error
+// GetRepeatBindAccount 获取重复的绑定账号
+func GetRepeatBindAccount(account string, source int) (items []*UserRecord, err error) {
+	err = global.DEFAULT_MYSQL.Model(UserRecord{}).Where("bind_account = ? AND create_platform = ?", account, source).Find(&items).Error
 	return
 }
 

File diff suppressed because it is too large
+ 43 - 0
services/eta_chart_lib.go


+ 13 - 13
services/pc/report.go

@@ -15,7 +15,7 @@ import (
 	"hongze/hongze_yb/utils"
 )
 
-func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *pc.ClassifyDetail, err error)  {
+func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *pc.ClassifyDetail, err error) {
 	var errMsg string
 	defer func() {
 		if err != nil {
@@ -38,7 +38,7 @@ func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *pc.Cla
 		return
 	}
 	//查询权限, 查询当前分类下的最新的报告,
-	permissionIds, err := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyInfo.ClassifyName)
+	permissionIds, err := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyIdSecond)
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("分类权限查询出错")
@@ -51,7 +51,7 @@ func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *pc.Cla
 		return
 	}
 
-	comments,err := customer_comment.GetCustomerComment()
+	comments, err := customer_comment.GetCustomerComment()
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("客户评价查询出错")
@@ -97,22 +97,22 @@ func GetLatestReportList(user user.UserInfo, chartPermissionId int) (ret []*pc.L
 		return
 	}
 	// 除了晨报和周报以外的其他报告
-	classifyNames, err := chart_permission_search_key_word_mapping.GetKeyWordsByChartPermissionId(chartPermissionId, "rddp")
+	classifySecondIds, err := chart_permission_search_key_word_mapping.GetClassifyIdsByChartPermissionId(chartPermissionId, "rddp")
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("查询权限对应的分类出错")
 		return
 	}
 
-	var classifySecondIds []int
-	if len(classifyNames) > 0 {
-		classifySecondIds, err = classify.GetSecondIdsByClassifyNames(classifyNames)
-		if err != nil {
-			errMsg = err.Error()
-			err = errors.New("查询分类出错")
-			return
-		}
-	}
+	//var classifySecondIds []int
+	//if len(classifyNames) > 0 {
+	//	classifySecondIds, err = classify.GetSecondIdsByClassifyNames(classifyNames)
+	//	if err != nil {
+	//		errMsg = err.Error()
+	//		err = errors.New("查询分类出错")
+	//		return
+	//	}
+	//}
 
 	var reportList []*pc.LatestReport
 	if len(classifySecondIds) > 0 {

+ 2 - 2
services/report/classify.go

@@ -112,7 +112,7 @@ func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *respon
 		return
 	}
 	//查询权限, 查询当前分类下的最新的报告,
-	permissionIds, err := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyInfo.ClassifyName)
+	permissionIds, err := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyIdSecond)
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("分类权限查询出错")
@@ -188,7 +188,7 @@ func GetClassifyReportList(user user.UserInfo, classifyIdSecond int, pageIndex,
 	//查询权限, 查询当前分类下的最新的报告,
 	var permissionIds []int
 	if productAuthOk {
-		permissionIds, err = chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyInfo.ClassifyName)
+		permissionIds, err = chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyIdSecond)
 		if err != nil {
 			errMsg = err.Error()
 			err = errors.New("分类权限查询出错")

+ 37 - 37
services/report/report.go

@@ -56,7 +56,7 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 		return
 	}
 	classifyFirstIconMap := make(map[int]string)
-	classifySecondNameMap := make(map[string]int)
+	//classifySecondNameMap := make(map[int]int)
 	classifyFirstIdMap := make(map[int]bool)
 	classifySecondIdMap := make(map[int]bool)
 	for _, v := range classifys {
@@ -65,7 +65,7 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 			classifyFirstIconMap[v.Id] = v.YbIconUrl
 		} else {
 			classifySecondIdMap[v.Id] = true
-			classifySecondNameMap[v.ClassifyName] = v.Id
+			//classifySecondNameMap[v.Id] = v.Id
 		}
 	}
 	//获取最新的晨报
@@ -105,10 +105,10 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 		for _, v := range chartPermissions {
 			for _, myPerId := range permissionIds {
 				if v.ChartPermissionId == myPerId {
-					if classifyIdSecond, ok := classifySecondNameMap[v.KeyWord]; ok {
-						if _, ok2 := classifyIdSecondMap[classifyIdSecond]; !ok2 {
-							classifyIdSeconds = append(classifyIdSeconds, classifyIdSecond)
-							classifyIdSecondMap[classifyIdSecond] = true
+					if classifySecondIdMap[v.ClassifyId] {
+						if _, ok := classifyIdSecondMap[v.ClassifyId]; !ok {
+							classifyIdSeconds = append(classifyIdSeconds, v.ClassifyId)
+							classifyIdSecondMap[v.ClassifyId] = true
 						}
 					}
 					break
@@ -469,7 +469,7 @@ func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail respons
 	} else {
 		// 音频播放条图片用分类图片
 		reportItem.VideoImg = utils.HZ_DEFAULT_AVATAR
-		permissionIds, tmpErr := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(reportItem.ClassifyNameSecond)
+		permissionIds, tmpErr := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(reportInfo.ClassifyIdSecond)
 		if tmpErr != nil {
 			errMsg = tmpErr.Error()
 			err = errors.New("查询报告权限失败")
@@ -656,9 +656,9 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 		}
 	}
 
-	permissionMap := make(map[string][]int)
-	checkPermissionMap := make(map[string]bool)
-	permissionImageMap := make(map[string]string)
+	permissionMap := make(map[int][]int)
+	checkPermissionMap := make(map[int]bool)
+	//permissionImageMap := make(map[string]string)
 	chartPermissionImageMap := make(map[int]string)
 	var classifyIdSeconds []int
 	//var reportImgUrl string
@@ -691,13 +691,13 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 		condition += " AND classify_id_second = ?"
 		pars = append(pars, classifyIdSecond)
 		//查询二级分类对应的权限
-		permissionIds, tErr := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyInfo.ClassifyName)
+		permissionIds, tErr := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyIdSecond)
 		if tErr != nil {
 			errMsg = tErr.Error()
 			err = errors.New("分类权限查询出错")
 			return
 		}
-		permissionMap[classifyInfo.ClassifyName] = permissionIds
+		permissionMap[classifyInfo.Id] = permissionIds
 		//if len(permissionIds) > 0 {
 		//	for _, v := range permissionIds {
 		//		reportImgUrl = chartPermissionImageMap[v]
@@ -719,8 +719,8 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 
 		if len(chartPermissions) > 0 {
 			for _, v := range chartPermissions {
-				permissionMap[v.KeyWord] = append(permissionMap[v.KeyWord], v.ChartPermissionId)
-				permissionImageMap[v.KeyWord] = chartPermissionImageMap[v.ChartPermissionId]
+				permissionMap[v.ClassifyId] = append(permissionMap[v.ClassifyId], v.ChartPermissionId)
+				//permissionImageMap[v.KeyWord] = chartPermissionImageMap[v.ChartPermissionId]
 			}
 		}
 
@@ -762,12 +762,12 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 	}
 
 	if len(validPermissionIdList) > 0 {
-		for classifyName, perIds := range permissionMap {
+		for cid, perIds := range permissionMap {
 		checkLoop:
 			for _, checkId := range perIds {
 				for _, validPerid := range validPermissionIdList {
 					if checkId == validPerid {
-						checkPermissionMap[classifyName] = true
+						checkPermissionMap[cid] = true
 						break checkLoop
 					}
 				}
@@ -980,7 +980,7 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 						}
 					}
 				}
-			} else if authOk, ok := checkPermissionMap[reportInfo.ClassifyNameSecond]; ok && authOk {
+			} else if authOk, ok := checkPermissionMap[reportInfo.ClassifyIdSecond]; ok && authOk {
 				if reportInfo.VideoUrl != "" {
 					videoTemp := new(response.VideoListItem)
 					videoTemp.VideoUrl = reportInfo.VideoUrl
@@ -1027,22 +1027,22 @@ func GetCollectReportList(user user.UserInfo, chartPermissionId, pageIndex, page
 		return
 	}
 	// 除了晨报和周报以外的其他报告
-	classifyNames, err := chart_permission_search_key_word_mapping.GetKeyWordsByChartPermissionId(chartPermissionId, "rddp")
+	classifySecondIds, err := chart_permission_search_key_word_mapping.GetClassifyIdsByChartPermissionId(chartPermissionId, "rddp")
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("查询权限对应的分类出错")
 		return
 	}
 
-	var classifySecondIds []int
-	if len(classifyNames) > 0 {
-		classifySecondIds, err = classify.GetSecondIdsByClassifyNames(classifyNames)
-		if err != nil {
-			errMsg = err.Error()
-			err = errors.New("查询分类出错")
-			return
-		}
-	}
+	//var classifySecondIds []int
+	//if len(classifyNames) > 0 {
+	//	classifySecondIds, err = classify.GetSecondIdsByClassifyNames(classifyNames)
+	//	if err != nil {
+	//		errMsg = err.Error()
+	//		err = errors.New("查询分类出错")
+	//		return
+	//	}
+	//}
 
 	// 查询晨报和周报相对应的章节ID
 	reportChapterTypeIds, err := report_chapter_type_permission.GetTypeIdsByChartPermissionId(chartPermissionId)
@@ -1360,21 +1360,21 @@ func GetVarietyReportList(user user.UserInfo, classifyId, chartPermissionId, pag
 	var allClassifySecondIds []int
 	var classifySecondIds []int
 
-	classifyNames, err := chart_permission_search_key_word_mapping.GetKeyWordsByChartPermissionId(chartPermissionId, "rddp")
+	allClassifySecondIds, err = chart_permission_search_key_word_mapping.GetClassifyIdsByChartPermissionId(chartPermissionId, "rddp")
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("查询权限对应的分类出错")
 		return
 	}
 
-	if len(classifyNames) > 0 {
-		allClassifySecondIds, err = classify.GetSecondIdsByClassifyNames(classifyNames)
-		if err != nil {
-			errMsg = err.Error()
-			err = errors.New("查询分类出错")
-			return
-		}
-	}
+	//if len(classifyNames) > 0 {
+	//	allClassifySecondIds, err = classify.GetSecondIdsByClassifyNames(classifyNames)
+	//	if err != nil {
+	//		errMsg = err.Error()
+	//		err = errors.New("查询分类出错")
+	//		return
+	//	}
+	//}
 
 	//根据所选一级分类id查询二级分类
 	classifyChild, err := classify.GetChildByPid(classifyId)
@@ -1533,7 +1533,7 @@ func GetVarietyReportList(user user.UserInfo, classifyId, chartPermissionId, pag
 //		return
 //	}
 //	// 除了晨报和周报以外的其他报告
-//	classifyNames, err := chart_permission_search_key_word_mapping.GetKeyWordsByChartPermissionId(chartPermissionId, "two_week")
+//	classifyNames, err := chart_permission_search_key_word_mapping.GetClassifyIdsByChartPermissionId(chartPermissionId, "two_week")
 //	if err != nil {
 //		errMsg = err.Error()
 //		err = errors.New("查询权限对应的分类出错")

+ 13 - 2
services/user/user_bind.go

@@ -222,18 +222,29 @@ func bindWxUser(openid, mobile, email string, areaNum, registerPlatform int) (us
 	// 未绑定
 	if userRecord.UserID == 0 {
 		// 校验该手机号/邮箱是否已绑定过微信, 若已绑定过则所有微信均进行解绑, 仅绑定当前微信
-		count, e := user_record.GetRepeatBindAccountNum(bindAccount, utils.USER_RECORD_CREATE_PLATFORM)
+		repeats, e := user_record.GetRepeatBindAccount(bindAccount, utils.USER_RECORD_CREATE_PLATFORM)
 		if e != nil {
 			err = fmt.Errorf("获取重复的绑定账号数失败, err: %s", e.Error())
 			errMsg = "绑定异常"
 			return
 		}
-		if count > 0 {
+		if len(repeats) > 0 {
+			// 清除绑定关系
 			if e = user_record.ClearRepeatBindAccount(bindAccount, utils.USER_RECORD_CREATE_PLATFORM); e != nil {
 				err = fmt.Errorf("重置重复的绑定账号失败, err: %s", e.Error())
 				errMsg = "绑定异常"
 				return
 			}
+			// 清除重复账号的session
+			repeatOpenIds := make([]string, 0)
+			for _, v := range repeats {
+				repeatOpenIds = append(repeatOpenIds, v.OpenID)
+			}
+			if e = session.ClearRepeatBindAccountToken(repeatOpenIds); e != nil {
+				err = fmt.Errorf("清除重复绑定账号Token失败, err: %v", e)
+				errMsg = "绑定异常"
+				return
+			}
 		}
 
 		userRecord.BindAccount = bindAccount

+ 22 - 0
utils/common.go

@@ -1444,3 +1444,25 @@ func GetColorMap() map[int]string {
 
 	return colorMap
 }
+
+// DateConvMysqlConvMongo
+// @Description: 将mysql中的日期比较符转换成mongo中的日期比较符
+// @author: Roc
+// @datetime 2024-05-08 11:03:26
+// @param dateCon string
+func DateConvMysqlConvMongo(dateCon string) string {
+	cond := ""
+	switch dateCon {
+	case "=":
+		cond = "$eq"
+	case "<":
+		cond = "$lt"
+	case "<=":
+		cond = "$lte"
+	case ">":
+		cond = "$gt"
+	case ">=":
+		cond = "$gte"
+	}
+	return cond
+}

+ 1 - 0
utils/constants.go

@@ -312,6 +312,7 @@ const (
 	CHART_SOURCE_LINE_FEATURE_PERCENTILE         = 8  // 统计特征-百分位图表
 	CHART_SOURCE_LINE_FEATURE_FREQUENCY          = 9  // 统计特征-频率分布图表
 	CHART_SOURCE_CROSS_HEDGING                   = 10 // 跨品种分析图表
+	CHART_SOURCE_BALANCE_EXCEL                   = 11 // 平衡表图表
 )
 
 // 图表类型

Some files were not shown because too many files changed in this diff