暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

list_table_alias.go 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package aliasmanagement
  2. import (
  3. "context"
  4. "fmt"
  5. "strings"
  6. "git.x2erp.com/qdy/go-base/ctx"
  7. "git.x2erp.com/qdy/go-base/logger"
  8. "git.x2erp.com/qdy/go-base/model/request/queryreq"
  9. "git.x2erp.com/qdy/go-base/model/response"
  10. "git.x2erp.com/qdy/go-base/util"
  11. "git.x2erp.com/qdy/go-db/factory/database"
  12. "git.x2erp.com/qdy/go-svc-configure/internal/tables"
  13. )
  14. // ListTableAlias 查询表别名字典列表(支持分页、搜索、排序)
  15. func ListTableAlias(req *TableAliasQueryRequest, ctx context.Context, dbFactory *database.DBFactory, reqCtx *ctx.RequestContext) *response.QueryResult[[]tables.DicTableAliasDB] {
  16. if logger.IsDebug() {
  17. logger.Debug("ListTableAlias req: %v", req)
  18. }
  19. // 检查请求参数是否为nil
  20. if req == nil {
  21. logger.ErrorC(reqCtx, "ListTableAlias请求参数为nil,创建默认参数")
  22. req = &TableAliasQueryRequest{}
  23. req.Page = 0
  24. req.PageSize = 10
  25. }
  26. // 验证和规范化请求参数
  27. req.Validate()
  28. // 将旧字段转换为新的Filters和Sorts(向后兼容)
  29. convertLegacyTableAliasFields(req)
  30. logger.Debug(fmt.Sprintf("ListTableAlias-开始查询表别名字典,参数: page=%d, pageSize=%d, filters=%d, sorts=%d, legacyFields=[tableID=%s, tableAlias=%s]",
  31. req.Page, req.PageSize, len(req.Filter), len(req.Filter), req.TableID, req.TableAlias))
  32. // 获取数据库连接
  33. db := dbFactory.GetDB()
  34. // 定义字段映射函数:前端字段名 -> 数据库列名
  35. fieldMapper := func(field string) string {
  36. switch field {
  37. case "id":
  38. return "id"
  39. case "tableID":
  40. return "table_id"
  41. case "tableAlias":
  42. return "table_alias"
  43. case "createdAt":
  44. return "created_at"
  45. case "updatedAt":
  46. return "updated_at"
  47. case "deletedAt":
  48. return "deleted_at"
  49. default:
  50. // 未知字段,返回空字符串(将被忽略)
  51. return ""
  52. }
  53. }
  54. // 使用通用查询构建器构建SQL
  55. whereClause, whereArgs := queryreq.BuildWhereClause(req.Filter, fieldMapper)
  56. orderByClause := queryreq.BuildOrderByClause(req.Sort, fieldMapper)
  57. // 构建基础查询
  58. baseQuery := `
  59. SELECT id, table_id, table_alias, created_at, updated_at, deleted_at
  60. FROM dic_table_alias
  61. WHERE deleted_at IS NULL
  62. `
  63. // 构建计数查询
  64. countQuery := "SELECT COUNT(*) FROM dic_table_alias WHERE deleted_at IS NULL"
  65. if whereClause != "" {
  66. // 移除"WHERE"前缀并清理空格
  67. conditions := strings.TrimSpace(strings.TrimPrefix(whereClause, "WHERE"))
  68. if conditions != "" {
  69. countQuery += " AND " + conditions
  70. }
  71. }
  72. // 构建数据查询
  73. dataQuery := baseQuery
  74. if whereClause != "" {
  75. // 移除"WHERE"前缀并清理空格
  76. conditions := strings.TrimSpace(strings.TrimPrefix(whereClause, "WHERE"))
  77. if conditions != "" {
  78. dataQuery += " AND " + conditions
  79. }
  80. }
  81. if orderByClause != "" {
  82. dataQuery += " " + orderByClause
  83. } else {
  84. // 默认排序
  85. dataQuery += " ORDER BY table_id, table_alias"
  86. }
  87. // 添加分页限制
  88. dataQuery += " LIMIT ? OFFSET ?"
  89. queryArgs := append(whereArgs, req.PageSize, req.GetOffset())
  90. // 查询总记录数
  91. var totalCount int64
  92. err := db.GetContext(ctx, &totalCount, countQuery, whereArgs...)
  93. if err != nil {
  94. logger.ErrorC(reqCtx, fmt.Sprintf("查询表别名字典总数失败: %v", err))
  95. return util.CreateErrorResult[[]tables.DicTableAliasDB](fmt.Sprintf("查询表别名字典总数失败: %v", err), reqCtx)
  96. }
  97. // 查询分页数据
  98. var tableAliasList []tables.DicTableAliasDB
  99. err = db.SelectContext(ctx, &tableAliasList, dataQuery, queryArgs...)
  100. if err != nil {
  101. logger.ErrorC(reqCtx, fmt.Sprintf("查询表别名字典失败: %v", err))
  102. return util.CreateErrorResult[[]tables.DicTableAliasDB](fmt.Sprintf("查询表别名字典失败: %v", err), reqCtx)
  103. }
  104. logger.Debug(fmt.Sprintf("查询到 %d 条表别名字典,总记录数: %d", len(tableAliasList), totalCount))
  105. // 创建结果,设置TotalCount
  106. result := util.CreateSuccessResultData[[]tables.DicTableAliasDB](tableAliasList, reqCtx)
  107. result.TotalCount = int(totalCount)
  108. // 计算总页数
  109. pageSize := req.PageSize
  110. if pageSize <= 0 {
  111. pageSize = 10 // 默认每页10条
  112. }
  113. lastPage := 1
  114. if pageSize > 0 && totalCount > 0 {
  115. lastPage = (int(totalCount) + pageSize - 1) / pageSize
  116. }
  117. result.LastPage = lastPage
  118. logger.Debug(fmt.Sprintf("设置QueryResult TotalCount: %d, LastPage: %d", result.TotalCount, result.LastPage))
  119. return result
  120. }
  121. // convertLegacyTableAliasFields 将旧字段转换为新的Filters和Sorts(向后兼容)
  122. func convertLegacyTableAliasFields(req *TableAliasQueryRequest) {
  123. // 转换旧搜索字段为Filters
  124. if req.TableID != "" {
  125. req.Filter = append(req.Filter, queryreq.FilterParam{
  126. Field: "tableID",
  127. Operator: queryreq.OpLike,
  128. Value: req.TableID,
  129. })
  130. }
  131. if req.TableAlias != "" {
  132. req.Filter = append(req.Filter, queryreq.FilterParam{
  133. Field: "tableAlias",
  134. Operator: queryreq.OpLike,
  135. Value: req.TableAlias,
  136. })
  137. }
  138. // 转换旧排序字段为Sorts
  139. if req.SortField != "" {
  140. // 映射可能的旧字段名
  141. sortField := req.SortField
  142. switch sortField {
  143. case "table_id":
  144. sortField = "tableID"
  145. case "table_alias":
  146. sortField = "tableAlias"
  147. case "created_at":
  148. sortField = "createdAt"
  149. case "updated_at":
  150. sortField = "updatedAt"
  151. }
  152. sortOrder := req.SortOrder
  153. if sortOrder != "asc" && sortOrder != "desc" {
  154. sortOrder = "asc"
  155. }
  156. req.Sort = append(req.Sort, queryreq.SortParam{
  157. Field: sortField,
  158. Order: sortOrder,
  159. })
  160. }
  161. }
  162. // SearchTableAlias 搜索表别名字典(简单搜索)
  163. func SearchTableAlias(ctx context.Context, dbFactory *database.DBFactory, tableID, tableAlias string, reqCtx *ctx.RequestContext) *response.QueryResult[[]tables.DicTableAliasDB] {
  164. logger.Debug("SearchTableAlias-开始搜索表别名字典")
  165. // 获取数据库连接
  166. db := dbFactory.GetDB()
  167. // 构建查询条件和参数
  168. query := `
  169. SELECT id, table_id, table_alias, created_at, updated_at, deleted_at
  170. FROM dic_table_alias
  171. WHERE deleted_at IS NULL
  172. `
  173. var args []interface{}
  174. if tableID != "" {
  175. query += " AND table_id LIKE ?"
  176. args = append(args, "%"+tableID+"%")
  177. }
  178. if tableAlias != "" {
  179. query += " AND table_alias LIKE ?"
  180. args = append(args, "%"+tableAlias+"%")
  181. }
  182. query += " ORDER BY table_id, table_alias"
  183. var tableAliasList []tables.DicTableAliasDB
  184. err := db.SelectContext(ctx, &tableAliasList, query, args...)
  185. if err != nil {
  186. logger.ErrorC(reqCtx, fmt.Sprintf("搜索表别名字典失败: %v", err))
  187. return util.CreateErrorResult[[]tables.DicTableAliasDB](fmt.Sprintf("搜索表别名字典失败: %v", err), reqCtx)
  188. }
  189. logger.Debug(fmt.Sprintf("搜索到 %d 条表别名字典", len(tableAliasList)))
  190. return util.CreateSuccessResultData(tableAliasList, reqCtx)
  191. }