Forráskód Böngészése

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

Roc 1 hónapja
szülő
commit
9edfd524ec
34 módosított fájl, 558 hozzáadás és 142 törlés
  1. 7 0
      models/cloud_disk_resource.go
  2. 3 0
      models/data_manage/base_from_changes_visitors_covid.go
  3. 2 2
      models/data_manage/base_from_clarksons_classify.go
  4. 13 0
      models/data_manage/base_from_clarksons_data.go
  5. 16 2
      models/data_manage/base_from_clarksons_index.go
  6. 40 0
      models/data_manage/base_from_gpr_risk.go
  7. 5 1
      models/data_manage/base_from_hisugar.go
  8. 21 0
      models/data_manage/base_from_rzd_data.go
  9. 14 0
      models/data_manage/base_from_rzd_index.go
  10. 1 1
      models/data_manage/base_from_sci_hq_classify.go
  11. 3 0
      models/data_manage/base_from_trade_index.go
  12. 15 17
      models/data_manage/chart_classify.go
  13. 3 3
      models/data_manage/chart_info.go
  14. 0 2
      models/data_manage/chart_theme/chart_theme_default_data.go
  15. 12 1
      models/data_manage/edb_info.go
  16. 19 0
      models/data_manage/future_good/future_good_edb_info.go
  17. 12 12
      models/data_manage/my_chart.go
  18. 20 6
      models/data_manage/supply_analysis/variety.go
  19. 16 0
      models/data_source/guagnzhouqihuo.go
  20. 6 6
      models/document_manage_model/outside_report.go
  21. 2 1
      models/permission.go
  22. 16 16
      models/report.go
  23. 5 3
      models/roadshow/calendar.go
  24. 6 4
      models/system/research_group.go
  25. 34 17
      models/system/sys_admin.go
  26. 2 1
      models/system/sys_department.go
  27. 4 2
      models/system/sys_group.go
  28. 12 6
      models/system/sys_role_admin.go
  29. 4 2
      models/system/sys_team.go
  30. 20 10
      models/system/sys_user.go
  31. 17 2
      models/target.go
  32. 2 1
      models/variety_tag.go
  33. 8 1
      utils/common.go
  34. 198 23
      utils/sql.go

+ 7 - 0
models/cloud_disk_resource.go

@@ -4,6 +4,7 @@ import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"fmt"
+	"gorm.io/gorm"
 	"strings"
 	"time"
 )
@@ -124,6 +125,11 @@ type CloudDiskListItem struct {
 	ButtonAuth  *CloudDiskListButton `description:"按钮权限" gorm:"-"`
 }
 
+func (m *CloudDiskListItem) AfterFind(db *gorm.DB) (err error) {
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
+	return
+}
+
 // CloudDiskListButton 云盘列表按钮权限
 type CloudDiskListButton struct {
 	RenameAuth bool `description:"重命名文件夹的权限"`
@@ -153,6 +159,7 @@ func GetCloudDiskMenuAndResourceList(menuCond, resourceCond string, menuPars, re
 	sql := fmt.Sprintf(base, menuCond, resourceCond, order)
 	pars := make([]interface{}, 0)
 	pars = append(pars, menuPars, resourcePars)
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error
 	return
 }

+ 3 - 0
models/data_manage/base_from_changes_visitors_covid.go

@@ -15,6 +15,9 @@ func GetVisitorsCovidLastDate() (last_date string, err error) {
 	} else {
 		last_date = lastDateNull.String
 	}
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		last_date = utils.GormDateStrToDateStr(last_date)
+	}
 	return
 }
 

+ 2 - 2
models/data_manage/base_from_clarksons_classify.go

@@ -76,10 +76,10 @@ func GetChildClarksonsClassifyIdsById(classifyId int) (items []int, err error) {
 
 // GetChildClarksonsClassifyMaxSortById 获取子分类最大排序
 func GetChildClarksonsClassifyMaxSortById(classifyId int) (sort int, err error) {
-	sqlStr := ` SELECT MAX(sort) AS sort FROM base_from_clarksons_classify WHERE parent_id=? `
+	sqlStr := ` SELECT COALESCE(MAX(sort),0) AS sort FROM base_from_clarksons_classify WHERE parent_id=? `
 
 	var totalNull sql.NullInt64
-	err = global.DbMap[utils.DbNameIndex].Raw(sqlStr, classifyId).Scan(&sort).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sqlStr, classifyId).Scan(&totalNull).Error
 	if !totalNull.Valid {
 		sort = 0
 	} else {

+ 13 - 0
models/data_manage/base_from_clarksons_data.go

@@ -4,6 +4,7 @@ import (
 	"database/sql"
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
+	"gorm.io/gorm"
 	"time"
 )
 
@@ -18,6 +19,13 @@ type BaseFromClarksonsData struct {
 	DataTimestamp            int64     `description:"数据时间戳"`
 }
 
+func (baseFromClarksonsData *BaseFromClarksonsData) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		baseFromClarksonsData.DataTime = utils.GormDateStrToDateStr(baseFromClarksonsData.DataTime)
+	}
+	return
+}
+
 // GetClarksonsDataByIndexId 根据指标id获取指标数据
 func GetClarksonsDataByIndexId(indexId int) (items []*BaseFromClarksonsData, err error) {
 	sql := ` SELECT * FROM base_from_clarksons_data WHERE base_from_clarksons_index_id=? ORDER BY data_time DESC`
@@ -32,6 +40,11 @@ func GetClarksonsDataDataTimeByIndexId(indexIdList []int) (items []string, err e
 	}
 	sql := ` SELECT DISTINCT data_time FROM base_from_clarksons_data WHERE base_from_clarksons_index_id IN (` + utils.GetOrmInReplace(len(indexIdList)) + `) ORDER BY data_time DESC`
 	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexIdList).Find(&items).Error
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		for i, item := range items {
+			items[i] = utils.GormDateStrToDateStr(item)
+		}
+	}
 	return
 }
 

+ 16 - 2
models/data_manage/base_from_clarksons_index.go

@@ -5,11 +5,13 @@ import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"gorm.io/gorm"
 	"time"
 )
 
 type BaseFromClarksonsIndex struct {
-	BaseFromClarksonsIndexId int    `orm:"pk"`
+	//BaseFromClarksonsIndexId int    `orm:"pk"`
+	BaseFromClarksonsIndexId int    `gorm:"primaryKey"`
 	ClassifyId               int    `description:"指标分类id"`
 	IndexCode                string `description:"指标编码"`
 	IndexName                string `description:"指标名称"`
@@ -22,6 +24,18 @@ type BaseFromClarksonsIndex struct {
 	ModifyTime               time.Time
 }
 
+func (baseFromClarksonsIndex *BaseFromClarksonsIndex) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		if baseFromClarksonsIndex.StartDate != "" {
+			baseFromClarksonsIndex.StartDate = utils.GormDateStrToDateStr(baseFromClarksonsIndex.StartDate)
+		}
+		if baseFromClarksonsIndex.EndDate != "" {
+			baseFromClarksonsIndex.EndDate = utils.GormDateStrToDateStr(baseFromClarksonsIndex.EndDate)
+		}
+	}
+	return
+}
+
 type BaseFromClarksonsIndexView struct {
 	BaseFromClarksonsIndexId int    `orm:"pk"`
 	EdbInfoId                int    `description:"指标库id"`
@@ -54,7 +68,7 @@ type BaseFromClarksonsIndexList struct {
 }
 
 func (b *BaseFromClarksonsIndex) Update(cols []string) (err error) {
-	err = global.DbMap[utils.DbNameIndex].Select(cols).Updates(b).Error
+	err = global.DbMap[utils.DbNameIndex].Model(&b).Select(cols).Updates(b).Error
 	return
 }
 

+ 40 - 0
models/data_manage/base_from_gpr_risk.go

@@ -2,6 +2,7 @@ package data_manage
 
 import (
 	"eta/eta_api/utils"
+	"gorm.io/gorm"
 	"time"
 
 	"database/sql"
@@ -45,6 +46,25 @@ type BaseFromGprRiskIndexList struct {
 	DataList               []*BaseFromGprRiskData `gorm:"-"`
 	Paging                 *paging.PagingItem     `description:"分页数据" gorm:"-"`
 }
+
+func (baseFromGprRiskIndexList *BaseFromGprRiskIndexList) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		if baseFromGprRiskIndexList.CreateTime != "" {
+			baseFromGprRiskIndexList.CreateTime = utils.GormDateStrToDateTimeStr(baseFromGprRiskIndexList.CreateTime)
+		}
+		if baseFromGprRiskIndexList.ModifyTime != "" {
+			baseFromGprRiskIndexList.ModifyTime = utils.GormDateStrToDateTimeStr(baseFromGprRiskIndexList.ModifyTime)
+		}
+		if baseFromGprRiskIndexList.StartDate != "" {
+			baseFromGprRiskIndexList.StartDate = utils.GormDateStrToDateStr(baseFromGprRiskIndexList.StartDate)
+		}
+		if baseFromGprRiskIndexList.EndDate != "" {
+			baseFromGprRiskIndexList.EndDate = utils.GormDateStrToDateStr(baseFromGprRiskIndexList.EndDate)
+		}
+	}
+	return
+}
+
 type BaseFromGprRiskIndexSearchList struct {
 	List   []*BaseFromGprRiskIndexList
 	Paging *paging.PagingItem `description:"分页数据"`
@@ -170,6 +190,11 @@ func GetGprRiskDataDataTimeByIndexId(indexIdList []int) (items []string, err err
 	}
 	sql := ` SELECT DISTINCT data_time FROM base_from_gpr_risk_data WHERE base_from_gpr_risk_index_id IN (` + utils.GetOrmInReplace(len(indexIdList)) + `) ORDER BY data_time DESC`
 	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexIdList).Find(&items).Error
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		for i, item := range items {
+			items[i] = utils.GormDateStrToDateStr(item)
+		}
+	}
 	return
 }
 
@@ -184,6 +209,21 @@ type BaseFromGprRiskData struct {
 	DataTimestamp          int64
 }
 
+func (baseFromGprRiskData *BaseFromGprRiskData) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		if baseFromGprRiskData.ModifyTime != "" {
+			baseFromGprRiskData.ModifyTime = utils.GormDateStrToDateTimeStr(baseFromGprRiskData.ModifyTime)
+		}
+		if baseFromGprRiskData.CreateTime != "" {
+			baseFromGprRiskData.CreateTime = utils.GormDateStrToDateTimeStr(baseFromGprRiskData.CreateTime)
+		}
+		if baseFromGprRiskData.DataTime != "" {
+			baseFromGprRiskData.DataTime = utils.GormDateStrToDateStr(baseFromGprRiskData.DataTime)
+		}
+	}
+	return
+}
+
 type BaseFromGprRiskIndexSearchItem struct {
 	BaseFromGprRiskIndexId int `orm:"column(base_from_gpr_risk_index_id);pk"`
 	ClassifyId             int

+ 5 - 1
models/data_manage/base_from_hisugar.go

@@ -423,7 +423,11 @@ func GetHisugarIndexInfoPage(condition string, pars []interface{}, size int, pag
 // 获取所有分类
 func GetHisugarClassifyById(classifyId int) (ClassifyIds string, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := fmt.Sprintf("SELECT %s AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?", utils.GroupUnitFunc(utils.DbDriverName, "base_from_hisugar_classify_id", ","))
+	//sql := fmt.Sprintf("SELECT %s AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?", utils.GroupUnitFunc(utils.DbDriverName, "base_from_hisugar_classify_id", ",", false, "", "", false))
+
+	sql := fmt.Sprintf("SELECT %s AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?", utils.GenerateQuerySql(utils.GroupUnit, &utils.QueryParam{Column: "base_from_hisugar_classify_id",
+		HasDistinct: false,
+	}))
 	//sql := ` SELECT GROUP_CONCAT(base_from_hisugar_classify_id) AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?`
 	//sql := ` SELECT AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?`
 	err = o.Raw(sql, classifyId, classifyId).Scan(&ClassifyIds).Error

+ 21 - 0
models/data_manage/base_from_rzd_data.go

@@ -4,6 +4,7 @@ package data_manage
 import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
+	"gorm.io/gorm"
 
 	"github.com/beego/beego/v2/client/orm"
 )
@@ -18,6 +19,21 @@ type BaseFromRzdData struct {
 	Value              float64 `orm:"column(value)"`
 }
 
+func (baseFromRzdData *BaseFromRzdData) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		if baseFromRzdData.ModifyTime != "" {
+			baseFromRzdData.ModifyTime = utils.GormDateStrToDateTimeStr(baseFromRzdData.ModifyTime)
+		}
+		if baseFromRzdData.CreateTime != "" {
+			baseFromRzdData.CreateTime = utils.GormDateStrToDateTimeStr(baseFromRzdData.CreateTime)
+		}
+		if baseFromRzdData.DataTime != "" {
+			baseFromRzdData.DataTime = utils.GormDateStrToDateStr(baseFromRzdData.DataTime)
+		}
+	}
+	return
+}
+
 // RzdIndexAddReq 指标添加vo
 type RzdIndexAddReq struct {
 	EdbCode       string `description:"指标编码"`
@@ -91,6 +107,11 @@ func GetRzdDataListByIndexCodes(IndexCodes string) (items []string, err error) {
 	sql := ` SELECT data_time FROM base_from_rzd_data WHERE index_code IN(` + IndexCodes + `)  GROUP BY data_time DESC `
 	o := global.DbMap[utils.DbNameIndex]
 	err = o.Raw(sql).Find(&items).Error
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		for i := 0; i < len(items); i++ {
+			items[i] = utils.GormDateStrToDateStr(items[i])
+		}
+	}
 	return
 }
 

+ 14 - 0
models/data_manage/base_from_rzd_index.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"fmt"
+	"gorm.io/gorm"
 
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -54,6 +55,19 @@ type BaseFromRzdIndexList struct {
 	EdbInfoId             int                `description:"指标库主键id"`
 }
 
+func (baseFromRzdIndexList *BaseFromRzdIndexList) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		if baseFromRzdIndexList.ModifyTime != "" {
+			baseFromRzdIndexList.ModifyTime = utils.GormDateStrToDateTimeStr(baseFromRzdIndexList.ModifyTime)
+		}
+		if baseFromRzdIndexList.CreateTime != "" {
+			baseFromRzdIndexList.CreateTime = utils.GormDateStrToDateTimeStr(baseFromRzdIndexList.CreateTime)
+		}
+
+	}
+	return
+}
+
 // RzdNameCheckResult 校验名称是否存在
 type RzdNameCheckResult struct {
 	IndexCode string `from:"EdbCode" description:"edb编码"`

+ 1 - 1
models/data_manage/base_from_sci_hq_classify.go

@@ -28,7 +28,7 @@ type BaseFromSciHqClassifyItem struct {
 	ModifyTime     time.Time                    `description:"修改时间"`
 	CreateTime     time.Time                    `description:"创建时间"`
 	ClassifyNameEn string                       `description:"英文分类名称"`
-	Children       []*BaseFromSciHqClassifyItem `description:"子分类"`
+	Children       []*BaseFromSciHqClassifyItem `description:"子分类" gorm:"-"`
 }
 
 type BaseFromSciHqClassifyMaxSort struct {

+ 3 - 0
models/data_manage/base_from_trade_index.go

@@ -144,6 +144,9 @@ func GetLatestDate(exchange string) (dataTime string, err error) {
 	o := global.DbMap[utils.DbNameIndex]
 	sql := "SELECT data_time FROM base_from_trade_" + exchange + "_index ORDER BY data_time desc limit 1"
 	err = o.Raw(sql).Scan(&dataTime).Error
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		dataTime = utils.GormDateStrToDateStr(dataTime)
+	}
 	return
 }
 

+ 15 - 17
models/data_manage/chart_classify.go

@@ -10,23 +10,21 @@ import (
 )
 
 type ChartClassify struct {
-	ChartClassifyId       int       `orm:"column(chart_classify_id);pk" gorm:"primaryKey" `
-	ChartClassifyName     string    `description:"分类名称"`
-	ParentId              int       `description:"父级id"`
-	HasData               int       `description:"是否含有指标数据"`
-	CreateTime            time.Time `description:"创建时间"`
-	ModifyTime            time.Time `description:"修改时间"`
-	SysUserId             int       `description:"创建人id"`
-	SysUserRealName       string    `description:"创建人姓名"`
-	Level                 int       `description:"层级"`
-	UniqueCode            string    `description:"唯一编码"`
-	Sort                  int       `description:"排序字段,越小越靠前,默认值:10"`
-	Source                int       `description:"1:ETA图库;2:商品价格曲线"`
-	IsJoinPermission      int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
-	ChartClassifyNameEn   string    `description:"英文分类名称"`
-	RootId                int       `description:"顶级ID"`
-	ChartClassifyNamePath string    `description:"分类名称的完整路径,格式为:父级分类名称|当前分类名称"`
-	ChartClassifyIdPath   string    `description:"分类的完整路径,格式为:父级ID,当前ID"`
+	ChartClassifyId     int       `orm:"column(chart_classify_id);pk" gorm:"primaryKey" `
+	ChartClassifyName   string    `description:"分类名称"`
+	ParentId            int       `description:"父级id"`
+	HasData             int       `description:"是否含有指标数据"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"修改时间"`
+	SysUserId           int       `description:"创建人id"`
+	SysUserRealName     string    `description:"创建人姓名"`
+	Level               int       `description:"层级"`
+	UniqueCode          string    `description:"唯一编码"`
+	Sort                int       `description:"排序字段,越小越靠前,默认值:10"`
+	Source              int       `description:"1:ETA图库;2:商品价格曲线"`
+	IsJoinPermission    int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	ChartClassifyNameEn string    `description:"英文分类名称"`
+	RootId              int       `description:"顶级ID"`
 }
 
 func AddChartClassify(item *ChartClassify) (lastId int64, err error) {

+ 3 - 3
models/data_manage/chart_info.go

@@ -1711,10 +1711,10 @@ type BalanceSeasonChartLegendPreviewResp struct {
 
 // 判断图表指标是否已经存在
 func ChartInfoExist(condition, edbInfoIdStr string) (count int, err error) {
-	sql := `SELECT COUNT(1) AS count FROM (
-		SELECT GROUP_CONCAT(edb_info_id ORDER BY edb_info_id ASC  SEPARATOR ',') AS edb_info_id_str 
+	sql := fmt.Sprintf(`SELECT COUNT(1) AS count FROM (
+		SELECT %s AS edb_info_id_str 
 		 FROM chart_edb_mapping AS a
-         WHERE 1=1`
+         WHERE 1=1`, utils.GroupUnitFunc(utils.DbDriverName, "edb_info_id", ",", true, "edb_info_id", "ASC", false))
 	if condition != "" {
 		sql += condition
 	}

+ 0 - 2
models/data_manage/chart_theme/chart_theme_default_data.go

@@ -58,7 +58,6 @@ func (m *ChartThemeDefaultData) Update(cols []string) (err error) {
 // @return err error
 func GetChartThemeDefaultDataItemList(endInfoId int, startDate string) (list []*data_manage.EdbDataList, err error) {
 	sql := `SELECT edb_data_id,edb_info_id,data_time,value,data_timestamp FROM chart_theme_default_data WHERE edb_info_id=? `
-	sql = utils.ReplaceDriverKeywords("", sql)
 	var pars []interface{}
 	if startDate != "" {
 		sql += ` AND data_time>=? `
@@ -67,7 +66,6 @@ func GetChartThemeDefaultDataItemList(endInfoId int, startDate string) (list []*
 
 	sql += ` ORDER BY data_time ASC `
 	sql = utils.ReplaceDriverKeywords("", sql)
-
 	err = global.DbMap[utils.DbNameIndex].Raw(sql, utils.ForwardPars(pars, endInfoId)...).Find(&list).Error
 	return
 }

+ 12 - 1
models/data_manage/edb_info.go

@@ -760,6 +760,18 @@ type EdbInfoMaxAndMinInfo struct {
 	LatestValue float64 `description:"最新值"`
 }
 
+func (edbInfoMaxAndMinInfo *EdbInfoMaxAndMinInfo) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		if edbInfoMaxAndMinInfo.MinDate != "" {
+			edbInfoMaxAndMinInfo.MinDate = utils.GormDateStrToDateStr(edbInfoMaxAndMinInfo.MinDate)
+		}
+		if edbInfoMaxAndMinInfo.MaxDate != "" {
+			edbInfoMaxAndMinInfo.MaxDate = utils.GormDateStrToDateStr(edbInfoMaxAndMinInfo.MaxDate)
+		}
+	}
+	return
+}
+
 // GetEdbInfoMaxAndMinInfo
 // @Description: 获取指标最大最小值
 // @author: Roc
@@ -801,7 +813,6 @@ func GetEdbInfoMaxAndMinInfoByMysql(source, subSource int, edbCode string) (item
 	if err != nil {
 		return
 	}
-
 	var latest_value float64
 	sql = ` SELECT value AS latest_value FROM %s WHERE edb_code=? ORDER BY data_time DESC LIMIT 1 `
 	sql = fmt.Sprintf(sql, tableName)

+ 19 - 0
models/data_manage/future_good/future_good_edb_info.go

@@ -4,6 +4,7 @@ import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"github.com/beego/beego/v2/client/orm"
+	"gorm.io/gorm"
 	"time"
 )
 
@@ -32,11 +33,29 @@ type FutureGoodEdbInfo struct {
 	ModifyTime          time.Time
 }
 
+func (m *FutureGoodEdbInfo) AfterFind(db *gorm.DB) (err error) {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+	return
+}
+
+func (m *FutureGoodEdbInfo) ConvertTimeStr() {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+	return
+}
+
 // GetFutureGoodEdbInfo 期货指标
 func GetFutureGoodEdbInfo(edbInfoId int) (item *FutureGoodEdbInfo, err error) {
 	sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_info_id = ? `
 	sql += ` ORDER BY future_good_edb_info_id DESC `
 	err = global.DbMap[utils.DbNameIndex].Raw(sql, edbInfoId).First(&item).Error
+	if err != nil {
+		return
+	}
+	if item != nil {
+		item.ConvertTimeStr()
+	}
 	return
 }
 

+ 12 - 12
models/data_manage/my_chart.go

@@ -452,7 +452,7 @@ func GetChartClassify(chartClassifyId int) (chart_classify_id string, err error)
 		chart_classify 
 WHERE
 	parent_id IN ( SELECT chart_classify_id FROM chart_classify WHERE parent_id = ? )
-			)AS t`, utils.GroupUnitFunc(utils.DbDriverName, "t.chart_classify_id", ","))
+			)AS t`, utils.GroupUnitFunc(utils.DbDriverName, "t.chart_classify_id", ",", false, "", "", false))
 	err = o.Raw(sql, chartClassifyId, chartClassifyId, chartClassifyId).Scan(&chart_classify_id).Error
 	return
 }
@@ -484,19 +484,19 @@ func GetMyChartListByAdminId(adminId int) (item []*MyChartView, err error) {
 			LEFT JOIN  my_chart_classify_mapping AS b ON a.my_chart_id=b.my_chart_id AND a.admin_id=b.admin_id
 			LEFT JOIN my_chart_classify AS c ON b.my_chart_classify_id=c.my_chart_classify_id AND b.admin_id=c.admin_id
 			WHERE 1=1 AND a.admin_id=?
-			GROUP BY a.chart_info_id `, utils.GroupUnitFunc(utils.DbDriverName, "c.my_chart_classify_id", ","))
+			GROUP BY a.chart_info_id `, utils.GroupUnitFunc(utils.DbDriverName, "c.my_chart_classify_id", ",", false, "", "", false))
 	err = o.Raw(sql, adminId).Find(&item).Error
 	return
 }
 
 func GetMyChartSearchByCondition(condition string, pars []interface{}) (item []*MyChartList, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := ` SELECT a.my_chart_id,c.sort,b.*,GROUP_CONCAT(DISTINCT d.my_chart_classify_name) AS my_chart_classify_name,GROUP_CONCAT(DISTINCT d.my_chart_classify_id) AS my_chart_classify_id
+	sql := fmt.Sprintf(` SELECT a.my_chart_id,c.sort,b.*,%s AS my_chart_classify_name,%s AS my_chart_classify_id
 			FROM  my_chart AS a
 			INNER JOIN chart_info AS b ON a.chart_info_id=b.chart_info_id
 			INNER JOIN my_chart_classify_mapping AS c ON a.my_chart_id=c.my_chart_id
 			INNER JOIN my_chart_classify AS d ON c.my_chart_classify_id=d.my_chart_classify_id
-			WHERE 1=1 `
+			WHERE 1=1 `, utils.GroupUnitFunc(utils.DbDriverName, "d.my_chart_classify_name", ",", false, "", "", true), utils.GroupUnitFunc(utils.DbDriverName, "d.my_chart_classify_id", ",", false, "", "", true))
 
 	if condition != "" {
 		sql += condition
@@ -549,11 +549,11 @@ func GetMyChartSort(adminId, myChartClassifyId, sort int) (item *MyChartClassify
 func GetMyChartByCondition(condition string, pars []interface{}) (item []*MyChartView, err error) {
 	o := global.DbMap[utils.DbNameIndex]
 	//sql := ` SELECT * FROM my_chart WHERE 1=1 `
-	sql := `SELECT a.*,GROUP_CONCAT(c.my_chart_classify_id SEPARATOR ',') AS my_chart_classify_id FROM my_chart AS a
+	sql := fmt.Sprintf(`SELECT a.*,%s AS my_chart_classify_id FROM my_chart AS a
 			LEFT JOIN  my_chart_classify_mapping AS b ON a.my_chart_id=b.my_chart_id AND a.admin_id=b.admin_id
 			LEFT JOIN my_chart_classify AS c ON b.my_chart_classify_id=c.my_chart_classify_id AND b.admin_id=c.admin_id
 			WHERE 1=1 
-			`
+			`, utils.GroupUnitFunc(utils.DbDriverName, "c.my_chart_classify_id", ",", false, "", "", false))
 	if condition != "" {
 		sql += condition
 	}
@@ -879,12 +879,12 @@ func AddMyChartToMyChartClassify(adminId, myChartId int, myChartClassifyId []int
 // GetMyChartListGroupByCharyInfoIdAndAdminIdByCondition 获取MY ETA 图表数据,根据图表id和操作员id
 func GetMyChartListGroupByCharyInfoIdAndAdminIdByCondition(condition string, pars []interface{}) (item []*MyChartList, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := ` SELECT a.admin_id,a.my_chart_id,c.sort,b.*,GROUP_CONCAT(DISTINCT d.my_chart_classify_name) AS my_chart_classify_name,GROUP_CONCAT(DISTINCT d.my_chart_classify_id) AS my_chart_classify_id
+	sql := fmt.Sprintf(` SELECT a.admin_id,a.my_chart_id,c.sort,b.*,%s AS my_chart_classify_name,%s AS my_chart_classify_id
 			FROM  my_chart AS a
 			INNER JOIN chart_info AS b ON a.chart_info_id=b.chart_info_id
 			INNER JOIN my_chart_classify_mapping AS c ON a.my_chart_id=c.my_chart_id
 			INNER JOIN my_chart_classify AS d ON c.my_chart_classify_id=d.my_chart_classify_id
-			WHERE 1=1 `
+			WHERE 1=1 `, utils.GroupUnitFunc(utils.DbDriverName, "d.my_chart_classify_name", ",", false, "", "", true), utils.GroupUnitFunc(utils.DbDriverName, "d.my_chart_classify_id", ",", false, "", "", true))
 
 	if condition != "" {
 		sql += condition
@@ -1002,7 +1002,7 @@ func GetMyChartClassifyIdAndNum(cond string, pars []interface{}) (items []*MyCha
 
 func GetChartClassifyByIds(chartClassifyIds []string) (chart_classify_ids string, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := `SELECT GROUP_CONCAT(DISTINCT t.chart_classify_id) AS chart_classify_ids
+	sql := fmt.Sprintf(`SELECT %s AS chart_classify_ids
 FROM (
     SELECT chart_classify_id
     FROM chart_classify
@@ -1013,19 +1013,19 @@ FROM (
         FROM chart_classify
         WHERE parent_id IN (` + utils.GetOrmInReplace(len(chartClassifyIds)) + `)
     )
-) AS t;`
+) AS t;`, utils.GroupUnitFunc(utils.DbDriverName, "chart_classify_id", ",", false, "", "", true))
 	err = o.Raw(sql, chartClassifyIds, chartClassifyIds, chartClassifyIds).Scan(&chart_classify_ids).Error
 	return
 }
 
 func GetChartClassifyByIdsNoSubClassify(chartClassifyIds []string) (chart_classify_ids string, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := `SELECT GROUP_CONCAT(DISTINCT t.chart_classify_id) AS chart_classify_ids
+	sql := fmt.Sprintf(`SELECT %s AS chart_classify_ids
 FROM (
     SELECT chart_classify_id
     FROM chart_classify
     WHERE chart_classify_id IN (` + utils.GetOrmInReplace(len(chartClassifyIds)) + `)
-) AS t;`
+) AS t;`, utils.GroupUnitFunc(utils.DbDriverName, "chart_classify_id", ",", false, "", "", true))
 	err = o.Raw(sql, chartClassifyIds).Scan(&chart_classify_ids).Error
 	return
 }

+ 20 - 6
models/data_manage/supply_analysis/variety.go

@@ -4,6 +4,7 @@ import (
 	"database/sql"
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
+	"fmt"
 	"time"
 )
 
@@ -135,9 +136,15 @@ type VarietyButton struct {
 
 // GetListBySuperAdminPage 不区分是否有分析权限的获取分页数据
 func (item Variety) GetListBySuperAdminPage(condition string, pars []interface{}, startSize, pageSize int) (total int, items []*VarietyItem, err error) {
-	baseSql := ` FROM ( SELECT a.*, GROUP_CONCAT(DISTINCT b.sys_user_id ORDER BY b.sys_user_id ASC SEPARATOR ',') AS permission_user_id FROM variety a 
+	//baseSql := ` FROM ( SELECT a.*, GROUP_CONCAT(DISTINCT b.sys_user_id ORDER BY b.sys_user_id ASC SEPARATOR ',') AS permission_user_id FROM variety a
+	//			LEFT JOIN variety_admin_permission b on a.variety_id=b.variety_id
+	//			LEFT JOIN variety_edb_info c on a.variety_id=c.variety_id WHERE 1=1 `
+
+	baseSql := fmt.Sprintf(` FROM ( SELECT a.*, 
+%s AS permission_user_id FROM variety a 
 				LEFT JOIN variety_admin_permission b on a.variety_id=b.variety_id 
-				LEFT JOIN variety_edb_info c on a.variety_id=c.variety_id WHERE 1=1 `
+				LEFT JOIN variety_edb_info c on a.variety_id=c.variety_id WHERE 1=1 `, utils.GroupUnitFunc(utils.DbDriverName, "b.sys_user_id", ",", true, "b.sys_user_id", "ASC", true))
+
 	if condition != "" {
 		baseSql += condition
 	}
@@ -158,15 +165,21 @@ func (item Variety) GetListBySuperAdminPage(condition string, pars []interface{}
 
 	// 列表页数据
 	listSql := `SELECT * ` + baseSql + ` ORDER BY modify_time DESC,variety_id DESC LIMIT ?,?`
-	err = global.DbMap[utils.DbNameIndex].Raw(listSql, pars, startSize, pageSize).Find(&items).Error
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(listSql, pars...).Find(&items).Error
 	return
 }
 
 // GetListByPage 获取分页数据
 func (item Variety) GetListByPage(condition string, pars []interface{}, startSize, pageSize int) (total int, items []*VarietyItem, err error) {
-	baseSql := ` FROM ( SELECT a.*, GROUP_CONCAT(DISTINCT b.sys_user_id ORDER BY b.sys_user_id ASC SEPARATOR ',') AS permission_user_id FROM variety a 
+	//baseSql := ` FROM ( SELECT a.*, GROUP_CONCAT(DISTINCT b.sys_user_id ORDER BY b.sys_user_id ASC SEPARATOR ',') AS permission_user_id FROM variety a
+	//			JOIN variety_admin_permission b on a.variety_id=b.variety_id
+	//			JOIN variety_edb_info c on a.variety_id=c.variety_id WHERE 1=1 `
+
+	baseSql := fmt.Sprintf(` FROM ( SELECT a.*, %s AS permission_user_id FROM variety a 
 				JOIN variety_admin_permission b on a.variety_id=b.variety_id 
-				JOIN variety_edb_info c on a.variety_id=c.variety_id WHERE 1=1 `
+				JOIN variety_edb_info c on a.variety_id=c.variety_id WHERE 1=1 `, utils.GroupUnitFunc(utils.DbDriverName, "b.sys_user_id", ",", true, "b.sys_user_id", "ASC", true))
+
 	if condition != "" {
 		baseSql += condition
 	}
@@ -185,7 +198,8 @@ func (item Variety) GetListByPage(condition string, pars []interface{}, startSiz
 	}
 	// 列表页数据
 	listSql := `SELECT * ` + baseSql + ` ORDER BY modify_time DESC,variety_id DESC LIMIT ?,?`
-	err = global.DbMap[utils.DbNameIndex].Raw(listSql, pars, startSize, pageSize).Find(&items).Error
+	pars = append(pars, startSize, pageSize)
+	err = global.DbMap[utils.DbNameIndex].Raw(listSql, pars...).Find(&items).Error
 	return
 }
 

+ 16 - 0
models/data_source/guagnzhouqihuo.go

@@ -3,6 +3,7 @@ package data_source
 import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
+	"gorm.io/gorm"
 	"time"
 )
 
@@ -66,6 +67,9 @@ func (obj *BaseFromTradeGuangzhouIndex) GetBaseFromTradeGuangzhouMaxDate() (max_
 	o := global.DbMap[utils.DbNameIndex]
 	sql := ` SELECT MAX(a.end_date) AS max_date FROM base_from_trade_guangzhou_index AS a `
 	err = o.Raw(sql).Scan(&max_date).Error
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		max_date = utils.GormDateStrToDateStr(max_date)
+	}
 	return max_date, err
 }
 
@@ -88,6 +92,18 @@ type BaseFromTradeGuangzhouIndexView struct {
 	Value                            float64 `description:"数据"`
 }
 
+func (obj *BaseFromTradeGuangzhouIndexView) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		if obj.StartDate != "" {
+			obj.StartDate = utils.GormDateStrToDateStr(obj.StartDate)
+		}
+		if obj.EndDate != "" {
+			obj.EndDate = utils.GormDateStrToDateStr(obj.EndDate)
+		}
+	}
+	return
+}
+
 func (obj *BaseFromTradeGuangzhouIndex) GetBaseFromTradeGuangzhouIndex(condition string, pars []interface{}, baseFromTradeGuangzhouContractId int) (list []*BaseFromTradeGuangzhouIndexView, err error) {
 	o := global.DbMap[utils.DbNameIndex]
 	if baseFromTradeGuangzhouContractId <= 0 {

+ 6 - 6
models/document_manage_model/outside_report.go

@@ -29,9 +29,9 @@ type OutsideReport struct {
 // @Description: 转成需要输出的格式
 // @receiver m
 func (m *OutsideReport) AfterFind(db *gorm.DB) (err error) {
-	m.ReportUpdateTime = utils.GormDateStrToDateStr(m.ReportUpdateTime)
-	m.ModifyTime = utils.GormDateStrToDateStr(m.ModifyTime)
-	m.CreateTime = utils.GormDateStrToDateStr(m.CreateTime)
+	m.ReportUpdateTime = utils.GormDateStrToDateTimeStr(m.ReportUpdateTime)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
 
 	return
 }
@@ -40,9 +40,9 @@ func (m *OutsideReport) AfterFind(db *gorm.DB) (err error) {
 // @Description: 转成需要输出的格式
 // @receiver m
 func (m *OutsideReport) ConvertTimeStr() {
-	m.ReportUpdateTime = utils.GormDateStrToDateStr(m.ReportUpdateTime)
-	m.ModifyTime = utils.GormDateStrToDateStr(m.ModifyTime)
-	m.CreateTime = utils.GormDateStrToDateStr(m.CreateTime)
+	m.ReportUpdateTime = utils.GormDateStrToDateTimeStr(m.ReportUpdateTime)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
 
 	return
 }

+ 2 - 1
models/permission.go

@@ -120,7 +120,8 @@ type ChartPermissionSearchKeyWordMappingAndPermissionName struct {
 func GetPermissionByClassifyId(classifyId int) (items []*ChartPermissionSearchKeyWordMappingAndPermissionName, err error) {
 	o := global.DbMap[utils.DbNameReport]
 	sql := `SELECT a.chart_permission_name,a.permission_name,b.chart_permission_id,b.key_word,b.classify_id FROM chart_permission AS a 
- join chart_permission_search_key_word_mapping AS b ON a.chart_permission_id=b.chart_permission_id WHERE b.from='rddp' AND b.classify_id = ? `
+ join chart_permission_search_key_word_mapping AS b ON a.chart_permission_id=b.chart_permission_id WHERE b.from ='rddp' AND b.classify_id = ? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, classifyId).Find(&items).Error
 	return
 }

+ 16 - 16
models/report.go

@@ -93,7 +93,7 @@ type Report struct {
 }
 
 func (m *Report) AfterFind(db *gorm.DB) (err error) {
-	m.CreateTime = utils.GormDateStrToDateStr(m.CreateTime)
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
 	return
 }
 
@@ -101,7 +101,7 @@ func (m *Report) AfterFind(db *gorm.DB) (err error) {
 // @Description: 转成需要输出的格式
 // @receiver m
 func (m *Report) ConvertTimeStr() {
-	m.CreateTime = utils.GormDateStrToDateStr(m.CreateTime)
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
 	return
 }
 
@@ -167,12 +167,12 @@ type ReportList struct {
 	InheritReportId     int       `description:"待继承的报告ID"`
 }
 func (m *ReportList) AfterFind(db *gorm.DB) (err error) {
-	m.ModifyTime = utils.GormDateStrToDateStr(m.ModifyTime)
-	m.PublishTime = utils.GormDateStrToDateStr(m.PublishTime)
-	m.CreateTime = utils.GormDateStrToDateStr(m.CreateTime)
-	m.ApproveTime = utils.GormDateStrToDateStr(m.ApproveTime)
-	m.MsgSendTime = utils.GormDateStrToDateStr(m.MsgSendTime)
-	m.PrePublishTime = utils.GormDateStrToDateStr(m.PrePublishTime)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+	m.PublishTime = utils.GormDateStrToDateTimeStr(m.PublishTime)
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
+	m.ApproveTime = utils.GormDateStrToDateTimeStr(m.ApproveTime)
+	m.MsgSendTime = utils.GormDateStrToDateTimeStr(m.MsgSendTime)
+	m.PrePublishTime = utils.GormDateStrToDateTimeStr(m.PrePublishTime)
 	return
 }
 type ReportListResp struct {
@@ -443,18 +443,18 @@ type ReportDetail struct {
 }
 
 func (m *ReportDetail) AfterFind(db *gorm.DB) (err error) {
-	m.CreateTime = utils.GormDateStrToDateStr(m.CreateTime)
-	m.ModifyTime = utils.GormDateStrToDateStr(m.ModifyTime)
-	m.PublishTime = utils.GormDateStrToDateStr(m.PublishTime)
-	m.PrePublishTime = utils.GormDateStrToDateStr(m.PrePublishTime)
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+	m.PublishTime = utils.GormDateStrToDateTimeStr(m.PublishTime)
+	m.PrePublishTime = utils.GormDateStrToDateTimeStr(m.PrePublishTime)
 
 	return
 }
 func (m *ReportDetail) ConvertTimeStr() {
-	m.CreateTime = utils.GormDateStrToDateStr(m.CreateTime)
-	m.ModifyTime = utils.GormDateStrToDateStr(m.ModifyTime)
-	m.PublishTime = utils.GormDateStrToDateStr(m.PublishTime)
-	m.PrePublishTime = utils.GormDateStrToDateStr(m.PrePublishTime)
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+	m.PublishTime = utils.GormDateStrToDateTimeStr(m.PublishTime)
+	m.PrePublishTime = utils.GormDateStrToDateTimeStr(m.PrePublishTime)
 
 	return
 }

+ 5 - 3
models/roadshow/calendar.go

@@ -21,23 +21,25 @@ type ResearcherGroup struct {
 
 func GetResearcherGroup() (list []*ResearcherGroup, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := ` SELECT group_id,group_name FROM "admin" AS a
+	sql := ` SELECT group_id,group_name FROM admin AS a
 			WHERE a.role_type_code IN('researcher','ficc_researcher','ficc_admin')
 			AND a.enabled=1
 			AND a.group_id>0
 			AND a.group_name<>'无'
 			GROUP BY a.group_id 
             ORDER BY a.group_id ASC `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql).Find(&list).Error
 	return
 }
 
 func GetResearcher() (list []*Researcher, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	//sql := ` SELECT * FROM "admin" AS a
+	//sql := ` SELECT * FROM admin AS a
 	//		WHERE a.role_type_code IN('researcher','rai_researcher','ficc_researcher','ficc_admin')
 	//		AND a.enabled=1 AND a.real_name<>'于菲' `
-	sql := ` SELECT * FROM "admin" AS a WHERE a.enabled=1 `
+	sql := ` SELECT * FROM admin AS a WHERE a.enabled=1 `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql).Find(&list).Error
 	return
 }

+ 6 - 4
models/system/research_group.go

@@ -3,6 +3,7 @@ package system
 import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
+	"fmt"
 	"time"
 )
 
@@ -70,11 +71,12 @@ func GetResearchGroupRelationList(include int) (list []*ResearchGroupRelationIte
 				b.real_name AS admin_name
 			FROM
 				research_group_relation AS a
-			INNER JOIN "admin" AS b ON a.admin_id = b.admin_id `
+			INNER JOIN admin AS b ON a.admin_id = b.admin_id `
 	sql += condition
 	sql += ` ORDER BY
 				a.research_group_id ASC,
 				a.admin_id ASC`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql).Find(&list).Error
 	return
 }
@@ -113,16 +115,16 @@ func GetAdminResearchGroupListByAdminId(adminIds []int) (list []*AdminResearchGr
 		return
 	}
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT
+	sql := fmt.Sprintf(`SELECT
 				a.admin_id,
-				GROUP_CONCAT(b.research_group_name) AS group_name_str
+				%s AS group_name_str
 			FROM
 				research_group_relation AS a
 			INNER JOIN research_group AS b ON a.research_group_id = b.research_group_id
 			WHERE
 				a.admin_id IN (` + utils.GetOrmInReplace(len(adminIds)) + `)
 			GROUP BY
-				a.admin_id`
+				a.admin_id`, utils.GroupUnitFunc(utils.DbDriverName, "b.research_group_name", ",", false, "", "", false))
 	err = o.Raw(sql, adminIds).Find(&list).Error
 	return
 }

+ 34 - 17
models/system/sys_admin.go

@@ -51,18 +51,20 @@ func GetAdminItemByIdList(adminId []int) (items []*AdminItem, err error) {
 		return
 	}
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT * FROM "admin" WHERE admin_id IN (` + utils.GetOrmInReplace(len(adminId)) + `) ORDER BY created_time DESC`
+	sql := `SELECT * FROM admin WHERE admin_id IN (` + utils.GetOrmInReplace(len(adminId)) + `) ORDER BY created_time DESC`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, adminId).Find(&items).Error
 	return
 }
 
 func GetSysuserList(condition string, pars []interface{}, startSize, pageSize int) (items []*AdminItem, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT * FROM "admin" WHERE 1=1 `
+	sql := `SELECT * FROM admin WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += `ORDER BY enabled DESC, last_updated_time DESC, created_time DESC LIMIT ?,?`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	pars = append(pars, startSize, pageSize)
 	err = o.Raw(sql, pars...).Find(&items).Error
 	return
@@ -70,10 +72,11 @@ func GetSysuserList(condition string, pars []interface{}, startSize, pageSize in
 
 func GetSysuserListCount(condition string, pars []interface{}) (count int, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT COUNT(1) AS count FROM "admin" WHERE 1=1 `
+	sql := `SELECT COUNT(1) AS count FROM admin WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, pars...).Scan(&count).Error
 	return
 }
@@ -135,21 +138,24 @@ type SysuserAddReq struct {
 }
 
 func GetSysAdminCount(adminName string) (count int, err error) {
-	sql := `SELECT COUNT(1) AS count FROM "admin" WHERE admin_name=? `
+	sql := `SELECT COUNT(1) AS count FROM admin WHERE admin_name=? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, adminName).Scan(&count).Error
 	return
 }
 
 func GetSysAdminByName(adminName string) (item *Admin, err error) {
-	sql := `SELECT * FROM "admin" WHERE admin_name=? `
+	sql := `SELECT * FROM admin WHERE admin_name=? `
 	o := global.DbMap[utils.DbNameMaster]
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, adminName).First(&item).Error
 	return
 }
 
 func GetSysAdminById(adminId int) (item *Admin, err error) {
-	sql := `SELECT * FROM "admin" WHERE admin_id=? `
+	sql := `SELECT * FROM admin WHERE admin_id=? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, adminId).First(&item).Error
 	return
@@ -224,18 +230,20 @@ type SysuserDeleteReq struct {
 }
 
 func DeleteSysuser(adminId int) (err error) {
-	sql := `DELETE FROM "admin" WHERE admin_id=? `
+	sql := `DELETE FROM admin WHERE admin_id=? `
 	o := global.DbMap[utils.DbNameMaster]
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Exec(sql, adminId).Error
 	return
 }
 
 // GetSysAdminCountByMobile 查询系统中是否存在该手机号(如果有传入用户id,那么排除该用户)
 func GetSysAdminCountByMobile(mobile string, adminId int) (count int, err error) {
-	sql := `SELECT COUNT(1) AS count FROM "admin" WHERE mobile=? `
+	sql := `SELECT COUNT(1) AS count FROM admin WHERE mobile=? `
 	if adminId > 0 {
 		sql += ` AND admin_id != ` + fmt.Sprint(adminId)
 	}
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, mobile).Scan(&count).Error
 	return
@@ -243,11 +251,12 @@ func GetSysAdminCountByMobile(mobile string, adminId int) (count int, err error)
 
 func GetSysUserItems(condition string, pars []interface{}) (items []*AdminItem, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT * FROM "admin" WHERE 1=1 `
+	sql := `SELECT * FROM admin WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += `ORDER BY last_updated_time DESC `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, pars...).Find(&items).Error
 	return
 }
@@ -255,7 +264,8 @@ func GetSysUserItems(condition string, pars []interface{}) (items []*AdminItem,
 // GetGroupSysUserList 根据分组id获取系统用户列表
 func GetGroupSysUserList(groupId int) (items []*AdminItem, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT * FROM "admin" WHERE group_id=? ORDER BY created_time DESC `
+	sql := `SELECT * FROM admin WHERE group_id=? ORDER BY created_time DESC `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, groupId).Find(&items).Error
 	return
 }
@@ -263,11 +273,12 @@ func GetGroupSysUserList(groupId int) (items []*AdminItem, err error) {
 // GetDepartmentGroupSysUserList 根据部门id和分组id获取系统用户列表
 func GetDepartmentGroupSysUserList(departmentId, groupId int, roleTypeCodes string) (items []*AdminItem, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT * FROM "admin" WHERE department_id = ? and group_id=? and enabled=1 `
+	sql := `SELECT * FROM admin WHERE department_id = ? and group_id=? and enabled=1 `
 	if roleTypeCodes != "" {
 		sql += ` and role_type_code in (` + roleTypeCodes + `) `
 	}
 	sql += ` ORDER BY created_time asc `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, departmentId, groupId).Find(&items).Error
 	return
 }
@@ -275,7 +286,7 @@ func GetDepartmentGroupSysUserList(departmentId, groupId int, roleTypeCodes stri
 // GetGrooupsysUserList 根据大组id和小组id获取系统用户列表
 func GetGrooupsysUserList(groupId int, roleTypeCodes string, enabled int) (items []*AdminItem, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT * FROM "admin" WHERE group_id = ? `
+	sql := `SELECT * FROM admin WHERE group_id = ? `
 	if roleTypeCodes != "" {
 		sql += ` and role_type_code in (` + roleTypeCodes + `) `
 	}
@@ -283,6 +294,7 @@ func GetGrooupsysUserList(groupId int, roleTypeCodes string, enabled int) (items
 		sql += fmt.Sprint(` AND enabled=`, enabled, ` `)
 	}
 	sql += ` ORDER BY created_time asc `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, groupId).Find(&items).Error
 	return
 }
@@ -292,7 +304,8 @@ func GetSysAdminByIdSlice(adminIdList []string) (items []*Admin, err error) {
 	if len(adminIdList) <= 0 {
 		return
 	}
-	sql := `SELECT * FROM "admin" WHERE admin_id in (` + strings.Join(adminIdList, ",") + `) `
+	sql := `SELECT * FROM admin WHERE admin_id in (` + strings.Join(adminIdList, ",") + `) `
+	sql = utils.ReplaceDriverKeywords("", sql)	
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql).Find(&items).Error
 	return
@@ -301,11 +314,12 @@ func GetSysAdminByIdSlice(adminIdList []string) (items []*Admin, err error) {
 // GetTeamSysUserList 根据小组id获取系统用户列表
 func GetTeamSysUserList(teamId, enabled int) (items []*AdminItem, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT * FROM "admin" WHERE group_id=? `
+	sql := `SELECT * FROM admin WHERE group_id=? `
 	if enabled >= 0 {
 		sql += fmt.Sprint(` AND enabled=`, enabled, ` `)
 	}
 	sql += ` ORDER BY created_time DESC `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, teamId).Find(&items).Error
 	return
 }
@@ -319,7 +333,8 @@ func GetGroupIdByParentId(groupId int) (items []*string, err error) {
 
 func GetAdminByGroupId(groupId int) (items []*AdminItem, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := `SELECT * FROM "admin" WHERE group_id=? ORDER BY created_time DESC`
+	sql := `SELECT * FROM admin WHERE group_id=? ORDER BY created_time DESC`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, groupId).Find(&items).Error
 	return
 }
@@ -384,7 +399,8 @@ func GetSysAdminList(condition string, pars []interface{}, fieldArr []string, or
 	if orderRule != "" {
 		order = orderRule
 	}
-	sql := fmt.Sprintf(`SELECT %s FROM "admin" WHERE 1=1 %s ORDER BY %s`, fields, condition, order)
+	sql := fmt.Sprintf(`SELECT %s FROM admin WHERE 1=1 %s ORDER BY %s`, fields, condition, order)
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, pars...).Find(&items).Error
 	return
@@ -402,7 +418,8 @@ func GetSysAdminByIdList(adminIdList []int) (items []*Admin, err error) {
 	if num <= 0 {
 		return
 	}
-	sql := `SELECT * FROM "admin" WHERE admin_id in (` + utils.GetOrmInReplace(num) + `) `
+	sql := `SELECT * FROM admin WHERE admin_id in (` + utils.GetOrmInReplace(num) + `) `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, adminIdList).Find(&items).Error
 	return

+ 2 - 1
models/system/sys_department.go

@@ -68,7 +68,8 @@ func ModifySysDepartment(departmentName string, departmentId int) (err error) {
 	if err != nil {
 		return
 	}
-	sql = `UPDATE "admin" SET department_name=? WHERE department_id=? `
+	sql = `UPDATE admin SET department_name=? WHERE department_id=? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = to.Exec(sql, departmentName, departmentId).Error
 	return
 }

+ 4 - 2
models/system/sys_group.go

@@ -68,7 +68,8 @@ func ModifySysGroup(groupName string, groupId int) (err error) {
 	}()
 	sql := `UPDATE sys_group SET group_name=? WHERE group_id=? `
 	err = to.Exec(sql, groupName, groupId).Error
-	sql = `UPDATE "admin" SET group_name=? WHERE group_id=? `
+	sql = `UPDATE admin SET group_name=? WHERE group_id=? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = to.Exec(sql, groupName, groupId).Error
 	return
 }
@@ -111,7 +112,8 @@ func GetSysGroupListByDepartmentId(departmentId int) (items []*SysGroupList, err
 }
 
 func ClearSysUserGroup(groupId int) (err error) {
-	sql := `UPDATE "admin" SET group_id=0,group_name='' WHERE group_id=? `
+	sql := `UPDATE admin SET group_id=0,group_name='' WHERE group_id=? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Exec(sql, groupId).Error
 	return

+ 12 - 6
models/system/sys_role_admin.go

@@ -68,12 +68,13 @@ func GetRoleAdminList(condition string, pars []interface{}, startSize, pageSize
 	a.group_name
 FROM
 	sys_role_admin s
-	INNER JOIN "admin" a ON s.admin_id = a.admin_id 
+	INNER JOIN admin a ON s.admin_id = a.admin_id 
 where 1=1`
 	if condition != "" {
 		sql += condition
 	}
 	sql += ` ORDER BY s.id DESC limit ?, ?`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	pars = append(pars, startSize, pageSize)
 	err = global.DbMap[utils.DbNameMaster].Raw(sql, pars...).Find(&list).Error
 	return
@@ -85,11 +86,12 @@ func GetRoleAdminListTotal(condition string, pars []interface{}) (total int64, e
 	count(*)
 FROM
 	sys_role_admin s
-	INNER JOIN "admin" a ON s.admin_id = a.admin_id 
+	INNER JOIN admin a ON s.admin_id = a.admin_id 
 where 1=1`
 	if condition != "" {
 		sql += condition
 	}
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = global.DbMap[utils.DbNameMaster].Raw(sql, pars...).Scan(&total).Error
 	return
 }
@@ -100,8 +102,9 @@ func CheckRoleAdminByAdminIds(adminIds string, roleId int) (list []*SysRoleAdmin
 	s.*
 FROM
 	sys_role_admin s
-	LEFT JOIN "admin" a ON s.admin_id = a.admin_id 
+	LEFT JOIN admin a ON s.admin_id = a.admin_id 
 where s.role_id=? and s.admin_id in (` + adminIds + `)`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = global.DbMap[utils.DbNameMaster].Raw(sql, roleId).Find(&list).Error
 	return
 }
@@ -152,9 +155,10 @@ func GetEnglishAuthRoleAdminList(condition string, pars []interface{}, startSize
 			FROM
 				sys_role_admin AS s
 			JOIN sys_role AS r ON s.role_id = r.role_id
-			JOIN "admin" AS a ON s.admin_id = a.admin_id
+			JOIN admin AS a ON s.admin_id = a.admin_id
 			WHERE
 				1 = 1 `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	sql += condition
 	sql += ` GROUP BY s.admin_id `
 
@@ -191,11 +195,12 @@ func CheckEnglishAuthRoleAdminByAdminIds(adminIds []int, roleCodes []string) (li
 			FROM
 				sys_role_admin AS s
 			JOIN sys_role AS r ON s.role_id = r.role_id
-			JOIN "admin" AS a ON s.admin_id = a.admin_id
+			JOIN admin AS a ON s.admin_id = a.admin_id
 			WHERE
 				s.admin_id IN (` + utils.GetOrmInReplace(len(adminIds)) + `) AND r.role_type_code IN (` + utils.GetOrmInReplace(len(roleCodes)) + `)
 			GROUP BY
 				s.admin_id`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, adminIds, roleCodes).Find(&list).Error
 	return
 }
@@ -217,9 +222,10 @@ func GetAdminEnglishAuthRoleDetail(adminId int, roleCodes []string) (list []*Eng
 			FROM
 				sys_role_admin AS s
 			JOIN sys_role AS r ON s.role_id = r.role_id
-			JOIN "admin" AS a ON s.admin_id = a.admin_id
+			JOIN admin AS a ON s.admin_id = a.admin_id
 			WHERE
 				s.admin_id = ? AND r.role_type_code IN (` + utils.GetOrmInReplace(len(roleCodes)) + `)`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, adminId, roleCodes).Find(&list).Error
 	return
 }

+ 4 - 2
models/system/sys_team.go

@@ -51,7 +51,8 @@ func ModifySysTeam(teamName string, teamId int) (err error) {
 	}()
 	sql := `UPDATE sys_group SET group_name=? WHERE group_id=? `
 	err = to.Exec(sql, teamName, teamId).Error
-	sql = `UPDATE "admin" SET group_name=? WHERE group_id=? `
+	sql = `UPDATE admin SET group_name=? WHERE group_id=? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = to.Exec(sql, teamName, teamId).Error
 	return
 }
@@ -75,7 +76,8 @@ func GetSysTeamByDepartmentId(groupId int) (items []*SysTeamList, err error) {
 }
 
 func ClearSysUserTeam(groupId int) (err error) {
-	sql := `UPDATE "admin" SET group_id=0,group_name='' WHERE group_id=? `
+	sql := `UPDATE admin SET group_id=0,group_name='' WHERE group_id=? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Exec(sql, groupId).Error
 	return

+ 20 - 10
models/system/sys_user.go

@@ -74,22 +74,25 @@ func (item *Admin) Update(cols []string) (err error) {
 }
 
 func CheckSysUser(userName, password string) (item *Admin, err error) {
-	sql := ` SELECT a.*,b.role_type_code FROM "admin" AS a
+	sql := ` SELECT a.*,b.role_type_code FROM admin AS a
 			 INNER JOIN sys_role AS b ON a.role_id=b.role_id WHERE a.admin_name=? AND a.password=? LIMIT 1`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, userName, password).First(&item).Error
 	return
 }
 
 func GetSysUserById(sysUserId int) (item *Admin, err error) {
-	sql := `SELECT * FROM "admin" WHERE admin_id=?`
+	sql := `SELECT * FROM admin WHERE admin_id=?`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, sysUserId).First(&item).Error
 	return
 }
 
 func ModifyPwd(sysUserId int, newPwd string) (err error) {
-	sql := `UPDATE "admin" SET password=?,last_updated_time=NOW() WHERE admin_id=? `
+	sql := `UPDATE admin SET password=?,last_updated_time=NOW() WHERE admin_id=? `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Exec(sql, newPwd, sysUserId).Error
 	return
@@ -114,7 +117,8 @@ func GetAdminListByIdList(idList []int) (items []*Admin, err error) {
 	if lenNum <= 0 {
 		return
 	}
-	sql := `SELECT * FROM "admin" WHERE admin_id in (` + utils.GetOrmInReplace(lenNum) + `) and enabled=1 `
+	sql := `SELECT * FROM admin WHERE admin_id in (` + utils.GetOrmInReplace(lenNum) + `) and enabled=1 `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, idList).Find(&items).Error
 	return
@@ -126,7 +130,8 @@ func GetAdminListByIdListWithoutEnable(idList []int) (items []*Admin, err error)
 	if lenNum <= 0 {
 		return
 	}
-	sql := `SELECT * FROM "admin" WHERE admin_id in (` + utils.GetOrmInReplace(lenNum) + `) `
+	sql := `SELECT * FROM admin WHERE admin_id in (` + utils.GetOrmInReplace(lenNum) + `) `
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DbMap[utils.DbNameMaster]
 	err = o.Raw(sql, idList).Find(&items).Error
 	return
@@ -134,7 +139,8 @@ func GetAdminListByIdListWithoutEnable(idList []int) (items []*Admin, err error)
 
 func (item *Admin) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := fmt.Sprintf(`SELECT COUNT(1) FROM "admin" WHERE 1=1 %s`, condition)
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM admin WHERE 1=1 %s`, condition)
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, pars...).Scan(&count).Error
 	return
 }
@@ -149,7 +155,8 @@ func (item *Admin) GetItemsByCondition(condition string, pars []interface{}, fie
 	if orderRule != "" {
 		order = ` ORDER BY ` + orderRule
 	}
-	sql := fmt.Sprintf(`SELECT %s FROM "admin" WHERE 1=1 %s %s`, fields, condition, order)
+	sql := fmt.Sprintf(`SELECT %s FROM admin WHERE 1=1 %s %s`, fields, condition, order)
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, pars...).Find(&items).Error
 	return
 }
@@ -160,11 +167,12 @@ func GetSysUserByMobile(mobile string) (item *Admin, err error) {
 	sql := `SELECT
 				a.*, b.role_type_code
 			FROM
-				"admin" AS a
+				admin AS a
 			INNER JOIN sys_role AS b ON a.role_id = b.role_id
 			WHERE
 				a.mobile = ?
 			LIMIT 1`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, mobile).First(&item).Error
 	return
 }
@@ -175,11 +183,12 @@ func GetSysUserByEmail(email string) (item *Admin, err error) {
 	sql := `SELECT
 				a.*, b.role_type_code
 			FROM
-				"admin" AS a
+				admin AS a
 			INNER JOIN sys_role AS b ON a.role_id = b.role_id
 			WHERE
 				a.email = ?
 			LIMIT 1`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, email).First(&item).Error
 	return
 }
@@ -190,11 +199,12 @@ func GetSysUserByAdminName(adminName string) (item *Admin, err error) {
 	sql := `SELECT
 				a.*, b.role_type_code
 			FROM
-				"admin" AS a
+				admin AS a
 			INNER JOIN sys_role AS b ON a.role_id = b.role_id
 			WHERE
 				a.admin_name = ?
 			LIMIT 1`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql, adminName).First(&item).Error
 	return
 }

+ 17 - 2
models/target.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"fmt"
+	"gorm.io/gorm"
 	"sort"
 	"strconv"
 	"strings"
@@ -701,8 +702,9 @@ type ResearcherListResp struct {
 }
 
 func GetResearcherEntry() (items []*Researcher, err error) {
-	sql := ` SELECT admin_id,admin_name,real_name,mobile,0 as target_count FROM "admin" WHERE role_type=1 `
+	sql := ` SELECT admin_id,admin_name,real_name,mobile,0 as target_count FROM admin WHERE role_type=1 `
 	o := global.DEFAULT_DB
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql).Find(&items).Error
 	researchLen := len(items)
 	edbO := global.DbMap[utils.DbNameManualIndex]
@@ -727,10 +729,11 @@ func GetResearcherEntry() (items []*Researcher, err error) {
 }
 
 func GetResearcherEntryByMobile(mobile string) (items []*Researcher, err error) {
-	sql := ` SELECT admin_id,admin_name,real_name,mobile,0 as target_count FROM "admin" WHERE  role_type=1 `
+	sql := ` SELECT admin_id,admin_name,real_name,mobile,0 as target_count FROM admin WHERE  role_type=1 `
 	if mobile != "" {
 		sql += ` AND mobile IN(` + mobile + `)`
 	}
+	sql = utils.ReplaceDriverKeywords("", sql)
 	o := global.DEFAULT_DB
 	err = o.Raw(sql).Find(&items).Error
 	researchLen := len(items)
@@ -1722,6 +1725,18 @@ type EdbinfoMaxMinDate struct {
 	MaxDate string
 }
 
+func (mmDate *EdbinfoMaxMinDate) AfterFind(tx *gorm.DB) (err error) {
+	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
+		if mmDate.MinDate != "" {
+			mmDate.MinDate = utils.GormDateStrToDateStr(mmDate.MinDate)
+		}
+		if mmDate.MaxDate != "" {
+			mmDate.MaxDate = utils.GormDateStrToDateStr(mmDate.MaxDate)
+		}
+	}
+	return
+}
+
 // GetEdbdataMaxMinDate
 // @Description: 获取手工指标的最小最大日期
 // @author: Roc

+ 2 - 1
models/variety_tag.go

@@ -131,11 +131,12 @@ func GetResearchVarietyTagRelationList(include int) (list []*ResearchVarietyTagR
 				b.real_name AS admin_name
 			FROM
 				research_variety_tag_relation AS a
-			INNER JOIN "admin" AS b ON a.admin_id = b.admin_id `
+			INNER JOIN admin AS b ON a.admin_id = b.admin_id `
 	sql += condition
 	sql += ` ORDER BY
 				a.variety_tag_id ASC,
 				a.admin_id ASC`
+	sql = utils.ReplaceDriverKeywords("", sql)
 	err = o.Raw(sql).Find(&list).Error
 	return
 }

+ 8 - 1
utils/common.go

@@ -2896,7 +2896,10 @@ func GormDateStrToDateStr(originalString string) (formatStr string) {
 		fmt.Println("Error parsing time:", err)
 		return
 	}
-
+	if t.IsZero() {
+		formatStr = ""
+		return
+	}
 	// 重新格式化时间
 	formatStr = t.Format(FormatDate)
 
@@ -2919,6 +2922,10 @@ func GormDateStrToDateTimeStr(originalString string) (formatStr string) {
 		fmt.Println("Error parsing time:", err)
 		return
 	}
+	if t.IsZero() {
+		formatStr = ""
+		return
+	}
 
 	// 重新格式化时间
 	formatStr = t.Format(FormatDateTime)

+ 198 - 23
utils/sql.go

@@ -1,46 +1,196 @@
 package utils
 
 import (
+	"bytes"
 	"errors"
 	"fmt"
+	"reflect"
 	"regexp"
+	"text/template"
 )
 
 type Driver string
+type SqlCondition string
 
 const (
-	DM    Driver = "dm"
-	MySql Driver = "mysql"
+	DM        Driver       = "dm"
+	MySql     Driver       = "mysql"
+	GroupUnit SqlCondition = "GroupUnit"
+	Distinct  SqlCondition = "Distinct"
+	Order     SqlCondition = "Order"
+	Delimiter SqlCondition = "Delimiter"
 )
 
+var TemplateMap = map[SqlCondition]map[Driver]string{
+	GroupUnit: {
+		MySql: `GROUP_CONCAT({{.Distinct}} {{.Column}} {{.Order}} SEPARATOR '{{.Delimiter}}')`,
+		DM:    `LISTAGG({{.Distinct}} {{.Column}},'{{.Delimiter}}') WITHIN GROUP ({{.Order}})`,
+	},
+}
+
 var supportDriverMap = map[string]Driver{
 	"mysql": MySql,
 	"dm":    DM,
+	//"postgres": Postgres,
 }
 
-func GroupUnitFunc(driver string, column, delimiter string) (sqlStr string) {
-	dbDriver, _ := getDriverInstance(driver)
-	if delimiter == "" {
-		delimiter = ","
+type QueryParam struct {
+	Driver      string
+	Column      string
+	Order       string
+	Distinct    string
+	Delimiter   string
+	OrderField  string
+	OrderRule   string
+	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"
 	}
-	if column == "" {
-		column = "[UNKNOWN COLUMN]"
+	return ""
+}
+
+var sqlGeneratorFactory = map[SqlCondition]SqlParam{
+	// 添加支持的语法
+	GroupUnit: &GroupUnitParam{
+		supportGrams: []SqlCondition{
+			Distinct,
+			Order,
+			Delimiter,
+		},
+	},
+	Order:     &OrderParam{},
+	Delimiter: &DelimiterParam{},
+	Distinct:  &DistinctParam{},
+}
+
+type DelimiterParam struct {
+}
+
+func (delimiterParam *DelimiterParam) GetParamName() string {
+	return "Delimiter"
+}
+func (delimiterParam *DelimiterParam) GetFormatConditionStr(param *QueryParam) string {
+	if param.Delimiter == "" {
+		return ","
 	}
-	//if tableAlia != "" {
-	//	column = fmt.Sprintf("%s.%s", tableAlia, column)
-	//}
-	switch dbDriver {
-	case MySql:
-		sqlStr = fmt.Sprintf("GROUP_CONCAT(%s SEPARATOR '%s')", column, delimiter)
-	case DM:
-		sqlStr = fmt.Sprintf("LISTAGG(%s, '%s') WITHIN GROUP (ORDER BY %s)", column, delimiter, column)
-	default:
-		sqlStr = fmt.Sprintf("GROUP_CONCAT(%s SEPARATOR '%s')", column, delimiter) // 默认使用 MySQL 的语法
+	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 GroupUnitDistinctFunc(driver string, column, delimiter string) (sqlStr string) {
+func GroupUnitFunc(driver string, column, delimiter string, columnOrder bool, orderField, orderRule string, hasDistinct bool) (sqlStr string) {
 	dbDriver, _ := getDriverInstance(driver)
 	if delimiter == "" {
 		delimiter = ","
@@ -51,16 +201,29 @@ func GroupUnitDistinctFunc(driver string, column, delimiter string) (sqlStr stri
 	//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 MySql:
-		sqlStr = fmt.Sprintf("GROUP_CONCAT(DISTINCT %s SEPARATOR '%s')", column, delimiter)
 	case DM:
-		sqlStr = fmt.Sprintf("LISTAGG(DISTINCT %s, '%s') WITHIN GROUP (ORDER BY %s)", column, delimiter, column)
+		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:
-		sqlStr = fmt.Sprintf("GROUP_CONCAT(DISTINCT  %s SEPARATOR '%s')", column, delimiter) // 默认使用 MySQL 的语法
+		// 默认使用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]
@@ -94,6 +257,8 @@ func ReplaceDriverKeywords(driver string, sql string) string {
 			"admin":    `"admin"`,
 			"value":    `"value"`,
 			"exchange": `"exchange"`,
+			"b.from":   `b."from"`,
+			"size":     `"size"`,
 		},
 	}
 	replacements, ok := rules[dbDriver]
@@ -108,3 +273,13 @@ func ReplaceDriverKeywords(driver string, sql string) string {
 	}
 	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
+}