add
This commit is contained in:
@@ -95,33 +95,22 @@ BEGIN
|
|||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- 创建或更新视图
|
-- 创建或更新视图
|
||||||
-- 创建新视图(关联所有子表,展示完整品种信息)
|
CREATE OR REPLACE VIEW country_info_view AS
|
||||||
CREATE VIEW variety_info_view AS
|
|
||||||
SELECT
|
SELECT
|
||||||
v.id AS variety_id,
|
u.id AS country_id,
|
||||||
vn.name AS variety_name,
|
n.name AS country_name, -- 国家名称
|
||||||
vc.code AS variety_code,
|
c.code AS country_code, -- 国家代码
|
||||||
vt.tick AS min_tick, -- 最小变动价位
|
f.flag AS country_flag -- 国旗信息
|
||||||
vtp.price AS tick_value, -- 变动价位价值
|
|
||||||
ve.exchange_id, -- 关联的交易所ID
|
|
||||||
-- 关联交易所名称(需确保 exchange_name 表存在,若不需要可删除以下 2 行)
|
|
||||||
en.name AS exchange_name,
|
|
||||||
esn.short_name AS exchange_short_name,
|
|
||||||
v.deleted,
|
|
||||||
v.created_at,
|
|
||||||
v.updated_at
|
|
||||||
FROM
|
FROM
|
||||||
variety v
|
country u
|
||||||
LEFT JOIN variety_name vn ON v.id = vn.variety_id AND vn.deleted = FALSE
|
LEFT JOIN
|
||||||
LEFT JOIN variety_code vc ON v.id = vc.variety_id AND vc.deleted = FALSE
|
country_name n ON u.id = n.country_id AND n.deleted = FALSE -- 过滤已删除名称
|
||||||
LEFT JOIN variety_tick vt ON v.id = vt.variety_id AND vt.deleted = FALSE
|
LEFT JOIN
|
||||||
LEFT JOIN variety_tick_price vtp ON v.id = vtp.variety_id AND vtp.deleted = FALSE
|
country_code c ON u.id = c.country_id AND c.deleted = FALSE -- 过滤已删除代码
|
||||||
LEFT JOIN variety_exchange ve ON v.id = ve.variety_id AND ve.deleted = FALSE
|
LEFT JOIN
|
||||||
-- 关联交易所名称表(可选,根据实际需求决定是否保留)
|
country_flag f ON u.id = f.country_id AND f.deleted = FALSE -- 左连接:允许无国旗数据
|
||||||
LEFT JOIN exchange_name en ON ve.exchange_id = en.exchange_id AND en.deleted = FALSE
|
|
||||||
LEFT JOIN exchange_short_name esn ON ve.exchange_id = esn.exchange_id AND esn.deleted = FALSE
|
|
||||||
WHERE
|
WHERE
|
||||||
v.deleted = FALSE;
|
u.deleted = FALSE; -- 只查询未删除的国家
|
||||||
|
|
||||||
-- 根据视图是否已存在输出不同提示
|
-- 根据视图是否已存在输出不同提示
|
||||||
IF view_exists THEN
|
IF view_exists THEN
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ type ReadRequest struct {
|
|||||||
CountryID string `form:"country_id"` // 国家ID,可选
|
CountryID string `form:"country_id"` // 国家ID,可选
|
||||||
Name string `form:"name"` // 国家名称,可选
|
Name string `form:"name"` // 国家名称,可选
|
||||||
Code string `form:"code"` // 国家代码,可选
|
Code string `form:"code"` // 国家代码,可选
|
||||||
|
Flag string `form:"flag"` // 国旗信息,新增可选参数
|
||||||
Page string `form:"page"` // 页码,可选
|
Page string `form:"page"` // 页码,可选
|
||||||
PageSize string `form:"page_size"` // 每页条数,可选
|
PageSize string `form:"page_size"` // 每页条数,可选
|
||||||
}
|
}
|
||||||
@@ -31,11 +32,12 @@ type ReadData struct {
|
|||||||
Items []CountryInfoViewItem `json:"items"` // 数据列表
|
Items []CountryInfoViewItem `json:"items"` // 数据列表
|
||||||
}
|
}
|
||||||
|
|
||||||
// CountryInfoViewItem 视图数据项结构
|
// CountryInfoViewItem 视图数据项结构,新增国旗字段
|
||||||
type CountryInfoViewItem struct {
|
type CountryInfoViewItem struct {
|
||||||
CountryID string `json:"country_id"` // 国家ID
|
CountryID string `json:"country_id"` // 国家ID
|
||||||
Name string `json:"name"` // 国家名称
|
Name string `json:"name"` // 国家名称
|
||||||
Code string `json:"code"` // 国家代码
|
Code string `json:"code"` // 国家代码
|
||||||
|
Flag string `json:"flag"` // 国旗信息,新增字段
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadResponse 读取响应结构
|
// ReadResponse 读取响应结构
|
||||||
@@ -91,6 +93,7 @@ func ReadHandler(c *gin.Context) {
|
|||||||
zap.String("country_id", req.CountryID),
|
zap.String("country_id", req.CountryID),
|
||||||
zap.String("name", req.Name),
|
zap.String("name", req.Name),
|
||||||
zap.String("code", req.Code),
|
zap.String("code", req.Code),
|
||||||
|
zap.String("flag", req.Flag), // 新增国旗查询参数日志
|
||||||
zap.Int("page", page),
|
zap.Int("page", page),
|
||||||
zap.Int("page_size", pageSize),
|
zap.Int("page_size", pageSize),
|
||||||
)
|
)
|
||||||
@@ -115,9 +118,15 @@ func ReadHandler(c *gin.Context) {
|
|||||||
args = append(args, "%"+req.Code+"%")
|
args = append(args, "%"+req.Code+"%")
|
||||||
paramIndex++
|
paramIndex++
|
||||||
}
|
}
|
||||||
|
// 新增国旗查询条件
|
||||||
|
if req.Flag != "" {
|
||||||
|
whereClauses = append(whereClauses, "flag LIKE $"+strconv.Itoa(paramIndex))
|
||||||
|
args = append(args, "%"+req.Flag+"%")
|
||||||
|
paramIndex++
|
||||||
|
}
|
||||||
|
|
||||||
// 构建基础SQL
|
// 构建基础SQL,新增flag字段查询
|
||||||
baseSQL := "SELECT country_id, name, code FROM country_info_view"
|
baseSQL := "SELECT country_id, name, code, flag FROM country_info_view"
|
||||||
countSQL := "SELECT COUNT(*) FROM country_info_view"
|
countSQL := "SELECT COUNT(*) FROM country_info_view"
|
||||||
if len(whereClauses) > 0 {
|
if len(whereClauses) > 0 {
|
||||||
whereStr := " WHERE " + strings.Join(whereClauses, " AND ")
|
whereStr := " WHERE " + strings.Join(whereClauses, " AND ")
|
||||||
@@ -128,11 +137,11 @@ func ReadHandler(c *gin.Context) {
|
|||||||
// 计算分页偏移量
|
// 计算分页偏移量
|
||||||
offset := (page - 1) * pageSize
|
offset := (page - 1) * pageSize
|
||||||
|
|
||||||
// 拼接分页SQL(使用fmt.Sprintf更清晰)
|
// 拼接分页SQL
|
||||||
querySQL := fmt.Sprintf("%s ORDER BY country_id LIMIT $%d OFFSET $%d", baseSQL, paramIndex, paramIndex+1)
|
querySQL := fmt.Sprintf("%s ORDER BY country_id LIMIT $%d OFFSET $%d", baseSQL, paramIndex, paramIndex+1)
|
||||||
args = append(args, pageSize, offset)
|
args = append(args, pageSize, offset)
|
||||||
|
|
||||||
// 查询总条数(修正参数传递方式)
|
// 查询总条数
|
||||||
var total int64
|
var total int64
|
||||||
countArgs := args[:len(args)-2] // 排除分页参数
|
countArgs := args[:len(args)-2] // 排除分页参数
|
||||||
err = db.DB.QueryRow(countSQL, countArgs...).Scan(&total)
|
err = db.DB.QueryRow(countSQL, countArgs...).Scan(&total)
|
||||||
@@ -163,11 +172,11 @@ func ReadHandler(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
// 处理查询结果
|
// 处理查询结果,新增flag字段扫描
|
||||||
var items []CountryInfoViewItem
|
var items []CountryInfoViewItem
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var item CountryInfoViewItem
|
var item CountryInfoViewItem
|
||||||
if err := rows.Scan(&item.CountryID, &item.Name, &item.Code); err != nil {
|
if err := rows.Scan(&item.CountryID, &item.Name, &item.Code, &item.Flag); err != nil {
|
||||||
zap.L().Error("❌ 解析查询结果失败",
|
zap.L().Error("❌ 解析查询结果失败",
|
||||||
zap.String("req_id", reqID),
|
zap.String("req_id", reqID),
|
||||||
zap.Error(err),
|
zap.Error(err),
|
||||||
|
|||||||
Reference in New Issue
Block a user