| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- package aliasmanagement
-
- import (
- "context"
- "fmt"
- "strings"
-
- "git.x2erp.com/qdy/go-base/ctx"
- "git.x2erp.com/qdy/go-base/logger"
- "git.x2erp.com/qdy/go-base/model/request/queryreq"
- "git.x2erp.com/qdy/go-base/model/response"
- "git.x2erp.com/qdy/go-base/util"
- "git.x2erp.com/qdy/go-db/factory/database"
- "git.x2erp.com/qdy/go-svc-configure/internal/tables"
- )
-
- // ListTableAliasFlow 查询表别名字典流水列表(支持分页、搜索、排序)
- func ListTableAliasFlow(req *TableAliasFlowQueryRequest, ctx context.Context, dbFactory *database.DBFactory, reqCtx *ctx.RequestContext) *response.QueryResult[[]tables.DicTableAliasFlowDB] {
- if logger.IsDebug() {
- logger.Debug("ListTableAliasFlow req: %v", req)
- }
-
- // 检查请求参数是否为nil
- if req == nil {
- logger.ErrorC(reqCtx, "ListTableAliasFlow请求参数为nil,创建默认参数")
- req = &TableAliasFlowQueryRequest{}
- req.Page = 0
- req.PageSize = 10
- }
-
- // 验证和规范化请求参数
- req.Validate()
-
- // 将旧字段转换为新的Filters和Sorts(向后兼容)
- convertLegacyTableAliasFlowFields(req)
-
- logger.Debug(fmt.Sprintf("ListTableAliasFlow-开始查询表别名字典流水,参数: page=%d, pageSize=%d, filters=%d, sorts=%d, legacyFields=[tableID=%s, tableAlias=%s, tenantID=%s, approvalStatus=%d]",
- req.Page, req.PageSize, len(req.Filter), len(req.Filter), req.TableID, req.TableAlias, req.TenantID, req.ApprovalStatus))
-
- // 获取数据库连接
- db := dbFactory.GetDB()
-
- // 定义字段映射函数:前端字段名 -> 数据库列名
- fieldMapper := func(field string) string {
- switch field {
- case "id":
- return "id"
- case "tableID":
- return "table_id"
- case "tableAlias":
- return "table_alias"
- case "tenantID":
- return "tenant_id"
- case "approvalStatus":
- return "approval_status"
- case "approver":
- return "approver"
- case "approvedAt":
- return "approved_at"
- case "createdAt":
- return "created_at"
- case "updatedAt":
- return "updated_at"
- case "deletedAt":
- return "deleted_at"
- default:
- // 未知字段,返回空字符串(将被忽略)
- return ""
- }
- }
-
- // 使用通用查询构建器构建SQL
- whereClause, whereArgs := queryreq.BuildWhereClause(req.Filter, fieldMapper)
- orderByClause := queryreq.BuildOrderByClause(req.Sort, fieldMapper)
-
- // 构建基础查询
- baseQuery := `
- SELECT id, table_id, table_alias, tenant_id, approval_status, approver, approved_at, created_at, updated_at, deleted_at
- FROM dic_table_alias_flow
- WHERE deleted_at IS NULL
- `
-
- // 构建计数查询
- countQuery := "SELECT COUNT(*) FROM dic_table_alias_flow WHERE deleted_at IS NULL"
- if whereClause != "" {
- // 移除"WHERE"前缀并清理空格
- conditions := strings.TrimSpace(strings.TrimPrefix(whereClause, "WHERE"))
- if conditions != "" {
- countQuery += " AND " + conditions
- }
- }
-
- // 构建数据查询
- dataQuery := baseQuery
- if whereClause != "" {
- // 移除"WHERE"前缀并清理空格
- conditions := strings.TrimSpace(strings.TrimPrefix(whereClause, "WHERE"))
- if conditions != "" {
- dataQuery += " AND " + conditions
- }
- }
- if orderByClause != "" {
- dataQuery += " " + orderByClause
- } else {
- // 默认排序
- dataQuery += " ORDER BY created_at DESC"
- }
-
- // 添加分页限制
- dataQuery += " LIMIT ? OFFSET ?"
- queryArgs := append(whereArgs, req.PageSize, req.GetOffset())
-
- // 查询总记录数
- var totalCount int64
- err := db.GetContext(ctx, &totalCount, countQuery, whereArgs...)
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("查询表别名字典流水总数失败: %v", err))
- return util.CreateErrorResult[[]tables.DicTableAliasFlowDB](fmt.Sprintf("查询表别名字典流水总数失败: %v", err), reqCtx)
- }
-
- // 查询分页数据
- var tableAliasFlowList []tables.DicTableAliasFlowDB
- err = db.SelectContext(ctx, &tableAliasFlowList, dataQuery, queryArgs...)
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("查询表别名字典流水失败: %v", err))
- return util.CreateErrorResult[[]tables.DicTableAliasFlowDB](fmt.Sprintf("查询表别名字典流水失败: %v", err), reqCtx)
- }
-
- logger.Debug(fmt.Sprintf("查询到 %d 条表别名字典流水,总记录数: %d", len(tableAliasFlowList), totalCount))
-
- // 创建结果,设置TotalCount
- result := util.CreateSuccessResultData[[]tables.DicTableAliasFlowDB](tableAliasFlowList, reqCtx)
- result.TotalCount = int(totalCount)
-
- // 计算总页数
- pageSize := req.PageSize
- if pageSize <= 0 {
- pageSize = 10 // 默认每页10条
- }
- lastPage := 1
- if pageSize > 0 && totalCount > 0 {
- lastPage = (int(totalCount) + pageSize - 1) / pageSize
- }
- result.LastPage = lastPage
-
- logger.Debug(fmt.Sprintf("设置QueryResult TotalCount: %d, LastPage: %d", result.TotalCount, result.LastPage))
- return result
- }
-
- // convertLegacyTableAliasFlowFields 将旧字段转换为新的Filters和Sorts(向后兼容)
- func convertLegacyTableAliasFlowFields(req *TableAliasFlowQueryRequest) {
- // 转换旧搜索字段为Filters
- if req.TableID != "" {
- req.Filter = append(req.Filter, queryreq.FilterParam{
- Field: "tableID",
- Operator: queryreq.OpLike,
- Value: req.TableID,
- })
- }
- if req.TableAlias != "" {
- req.Filter = append(req.Filter, queryreq.FilterParam{
- Field: "tableAlias",
- Operator: queryreq.OpLike,
- Value: req.TableAlias,
- })
- }
- if req.TenantID != "" {
- req.Filter = append(req.Filter, queryreq.FilterParam{
- Field: "tenantID",
- Operator: "=",
- Value: req.TenantID,
- })
- }
- if req.ApprovalStatus >= 0 && req.ApprovalStatus <= 2 {
- req.Filter = append(req.Filter, queryreq.FilterParam{
- Field: "approvalStatus",
- Operator: "=",
- Value: req.ApprovalStatus,
- })
- }
-
- // 转换旧排序字段为Sorts
- if req.SortField != "" {
- // 映射可能的旧字段名
- sortField := req.SortField
- switch sortField {
- case "table_id":
- sortField = "tableID"
- case "table_alias":
- sortField = "tableAlias"
- case "tenant_id":
- sortField = "tenantID"
- case "approval_status":
- sortField = "approvalStatus"
- case "approver":
- sortField = "approver"
- case "approved_at":
- sortField = "approvedAt"
- case "created_at":
- sortField = "createdAt"
- case "updated_at":
- sortField = "updatedAt"
- }
-
- sortOrder := req.SortOrder
- if sortOrder != "asc" && sortOrder != "desc" {
- sortOrder = "asc"
- }
-
- req.Sort = append(req.Sort, queryreq.SortParam{
- Field: sortField,
- Order: sortOrder,
- })
- }
- }
-
- // SearchTableAliasFlow 搜索表别名字典流水(简单搜索)
- func SearchTableAliasFlow(ctx context.Context, dbFactory *database.DBFactory, tableID, tableAlias, tenantID string, approvalStatus int8, reqCtx *ctx.RequestContext) *response.QueryResult[[]tables.DicTableAliasFlowDB] {
- logger.Debug("SearchTableAliasFlow-开始搜索表别名字典流水")
-
- // 获取数据库连接
- db := dbFactory.GetDB()
-
- // 构建查询条件和参数
- query := `
- SELECT id, table_id, table_alias, tenant_id, approval_status, approver, approved_at, created_at, updated_at, deleted_at
- FROM dic_table_alias_flow
- WHERE deleted_at IS NULL
- `
- var args []interface{}
-
- if tableID != "" {
- query += " AND table_id LIKE ?"
- args = append(args, "%"+tableID+"%")
- }
- if tableAlias != "" {
- query += " AND table_alias LIKE ?"
- args = append(args, "%"+tableAlias+"%")
- }
- if tenantID != "" {
- query += " AND tenant_id = ?"
- args = append(args, tenantID)
- }
- if approvalStatus >= 0 && approvalStatus <= 2 {
- query += " AND approval_status = ?"
- args = append(args, approvalStatus)
- }
-
- query += " ORDER BY created_at DESC"
-
- var tableAliasFlowList []tables.DicTableAliasFlowDB
- err := db.SelectContext(ctx, &tableAliasFlowList, query, args...)
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("搜索表别名字典流水失败: %v", err))
- return util.CreateErrorResult[[]tables.DicTableAliasFlowDB](fmt.Sprintf("搜索表别名字典流水失败: %v", err), reqCtx)
- }
-
- logger.Debug(fmt.Sprintf("搜索到 %d 条表别名字典流水", len(tableAliasFlowList)))
- return util.CreateSuccessResultData(tableAliasFlowList, reqCtx)
- }
|