From 55df63985abeeb4d53e8838d48ad6c7ad895a1e6 Mon Sep 17 00:00:00 2001 From: vipg Date: Wed, 19 Nov 2025 16:40:12 +0800 Subject: [PATCH] add --- backend/src/logic4country/04_country.sql | 41 +++++++++--------------- backend/src/logic4country/read.go | 25 ++++++++++----- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/backend/src/logic4country/04_country.sql b/backend/src/logic4country/04_country.sql index 73eb1d3..aa6f0e5 100644 --- a/backend/src/logic4country/04_country.sql +++ b/backend/src/logic4country/04_country.sql @@ -95,33 +95,22 @@ BEGIN END IF; -- 创建或更新视图 - -- 创建新视图(关联所有子表,展示完整品种信息) - CREATE VIEW variety_info_view AS - SELECT - v.id AS variety_id, - vn.name AS variety_name, - vc.code AS variety_code, - vt.tick AS min_tick, -- 最小变动价位 - 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 - variety v - LEFT JOIN variety_name vn ON v.id = vn.variety_id AND vn.deleted = FALSE - LEFT JOIN variety_code vc ON v.id = vc.variety_id AND vc.deleted = FALSE - LEFT JOIN variety_tick vt ON v.id = vt.variety_id AND vt.deleted = FALSE - LEFT JOIN variety_tick_price vtp ON v.id = vtp.variety_id AND vtp.deleted = FALSE - LEFT JOIN variety_exchange ve ON v.id = ve.variety_id AND ve.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 + CREATE OR REPLACE VIEW country_info_view AS + SELECT + u.id AS country_id, + n.name AS country_name, -- 国家名称 + c.code AS country_code, -- 国家代码 + f.flag AS country_flag -- 国旗信息 + FROM + country u + LEFT JOIN + country_name n ON u.id = n.country_id AND n.deleted = FALSE -- 过滤已删除名称 + LEFT JOIN + country_code c ON u.id = c.country_id AND c.deleted = FALSE -- 过滤已删除代码 + LEFT JOIN + country_flag f ON u.id = f.country_id AND f.deleted = FALSE -- 左连接:允许无国旗数据 WHERE - v.deleted = FALSE; + u.deleted = FALSE; -- 只查询未删除的国家 -- 根据视图是否已存在输出不同提示 IF view_exists THEN diff --git a/backend/src/logic4country/read.go b/backend/src/logic4country/read.go index 6f84d11..6166042 100644 --- a/backend/src/logic4country/read.go +++ b/backend/src/logic4country/read.go @@ -19,6 +19,7 @@ type ReadRequest struct { CountryID string `form:"country_id"` // 国家ID,可选 Name string `form:"name"` // 国家名称,可选 Code string `form:"code"` // 国家代码,可选 + Flag string `form:"flag"` // 国旗信息,新增可选参数 Page string `form:"page"` // 页码,可选 PageSize string `form:"page_size"` // 每页条数,可选 } @@ -31,11 +32,12 @@ type ReadData struct { Items []CountryInfoViewItem `json:"items"` // 数据列表 } -// CountryInfoViewItem 视图数据项结构 +// CountryInfoViewItem 视图数据项结构,新增国旗字段 type CountryInfoViewItem struct { CountryID string `json:"country_id"` // 国家ID Name string `json:"name"` // 国家名称 Code string `json:"code"` // 国家代码 + Flag string `json:"flag"` // 国旗信息,新增字段 } // ReadResponse 读取响应结构 @@ -91,6 +93,7 @@ func ReadHandler(c *gin.Context) { zap.String("country_id", req.CountryID), zap.String("name", req.Name), zap.String("code", req.Code), + zap.String("flag", req.Flag), // 新增国旗查询参数日志 zap.Int("page", page), zap.Int("page_size", pageSize), ) @@ -115,9 +118,15 @@ func ReadHandler(c *gin.Context) { args = append(args, "%"+req.Code+"%") paramIndex++ } + // 新增国旗查询条件 + if req.Flag != "" { + whereClauses = append(whereClauses, "flag LIKE $"+strconv.Itoa(paramIndex)) + args = append(args, "%"+req.Flag+"%") + paramIndex++ + } - // 构建基础SQL - baseSQL := "SELECT country_id, name, code FROM country_info_view" + // 构建基础SQL,新增flag字段查询 + baseSQL := "SELECT country_id, name, code, flag FROM country_info_view" countSQL := "SELECT COUNT(*) FROM country_info_view" if len(whereClauses) > 0 { whereStr := " WHERE " + strings.Join(whereClauses, " AND ") @@ -128,11 +137,11 @@ func ReadHandler(c *gin.Context) { // 计算分页偏移量 offset := (page - 1) * pageSize - // 拼接分页SQL(使用fmt.Sprintf更清晰) + // 拼接分页SQL querySQL := fmt.Sprintf("%s ORDER BY country_id LIMIT $%d OFFSET $%d", baseSQL, paramIndex, paramIndex+1) args = append(args, pageSize, offset) - // 查询总条数(修正参数传递方式) + // 查询总条数 var total int64 countArgs := args[:len(args)-2] // 排除分页参数 err = db.DB.QueryRow(countSQL, countArgs...).Scan(&total) @@ -163,11 +172,11 @@ func ReadHandler(c *gin.Context) { } defer rows.Close() - // 处理查询结果 + // 处理查询结果,新增flag字段扫描 var items []CountryInfoViewItem for rows.Next() { 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.String("req_id", reqID), zap.Error(err), @@ -215,4 +224,4 @@ func ReadHandler(c *gin.Context) { Items: items, }, }) -} +} \ No newline at end of file