暫無描述
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_flow.go 7.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  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. // ListTableAliasFlow 查询表别名字典流水列表(支持分页、搜索、排序)
  15. func ListTableAliasFlow(req *TableAliasFlowQueryRequest, ctx context.Context, dbFactory *database.DBFactory, reqCtx *ctx.RequestContext) *response.QueryResult[[]tables.DicTableAliasFlowDB] {
  16. if logger.IsDebug() {
  17. logger.Debug("ListTableAliasFlow req: %v", req)
  18. }
  19. // 检查请求参数是否为nil
  20. if req == nil {
  21. logger.ErrorC(reqCtx, "ListTableAliasFlow请求参数为nil,创建默认参数")
  22. req = &TableAliasFlowQueryRequest{}
  23. req.Page = 0
  24. req.PageSize = 10
  25. }
  26. // 验证和规范化请求参数
  27. req.Validate()
  28. // 将旧字段转换为新的Filters和Sorts(向后兼容)
  29. convertLegacyTableAliasFlowFields(req)
  30. logger.Debug(fmt.Sprintf("ListTableAliasFlow-开始查询表别名字典流水,参数: page=%d, pageSize=%d, filters=%d, sorts=%d, legacyFields=[tableID=%s, tableAlias=%s, tenantID=%s, approvalStatus=%d]",
  31. req.Page, req.PageSize, len(req.Filter), len(req.Filter), req.TableID, req.TableAlias, req.TenantID, req.ApprovalStatus))
  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 "tenantID":
  44. return "tenant_id"
  45. case "approvalStatus":
  46. return "approval_status"
  47. case "approver":
  48. return "approver"
  49. case "approvedAt":
  50. return "approved_at"
  51. case "createdAt":
  52. return "created_at"
  53. case "updatedAt":
  54. return "updated_at"
  55. case "deletedAt":
  56. return "deleted_at"
  57. default:
  58. // 未知字段,返回空字符串(将被忽略)
  59. return ""
  60. }
  61. }
  62. // 使用通用查询构建器构建SQL
  63. whereClause, whereArgs := queryreq.BuildWhereClause(req.Filter, fieldMapper)
  64. orderByClause := queryreq.BuildOrderByClause(req.Sort, fieldMapper)
  65. // 构建基础查询
  66. baseQuery := `
  67. SELECT id, table_id, table_alias, tenant_id, approval_status, approver, approved_at, created_at, updated_at, deleted_at
  68. FROM dic_table_alias_flow
  69. WHERE deleted_at IS NULL
  70. `
  71. // 构建计数查询
  72. countQuery := "SELECT COUNT(*) FROM dic_table_alias_flow WHERE deleted_at IS NULL"
  73. if whereClause != "" {
  74. // 移除"WHERE"前缀并清理空格
  75. conditions := strings.TrimSpace(strings.TrimPrefix(whereClause, "WHERE"))
  76. if conditions != "" {
  77. countQuery += " AND " + conditions
  78. }
  79. }
  80. // 构建数据查询
  81. dataQuery := baseQuery
  82. if whereClause != "" {
  83. // 移除"WHERE"前缀并清理空格
  84. conditions := strings.TrimSpace(strings.TrimPrefix(whereClause, "WHERE"))
  85. if conditions != "" {
  86. dataQuery += " AND " + conditions
  87. }
  88. }
  89. if orderByClause != "" {
  90. dataQuery += " " + orderByClause
  91. } else {
  92. // 默认排序
  93. dataQuery += " ORDER BY created_at DESC"
  94. }
  95. // 添加分页限制
  96. dataQuery += " LIMIT ? OFFSET ?"
  97. queryArgs := append(whereArgs, req.PageSize, req.GetOffset())
  98. // 查询总记录数
  99. var totalCount int64
  100. err := db.GetContext(ctx, &totalCount, countQuery, whereArgs...)
  101. if err != nil {
  102. logger.ErrorC(reqCtx, fmt.Sprintf("查询表别名字典流水总数失败: %v", err))
  103. return util.CreateErrorResult[[]tables.DicTableAliasFlowDB](fmt.Sprintf("查询表别名字典流水总数失败: %v", err), reqCtx)
  104. }
  105. // 查询分页数据
  106. var tableAliasFlowList []tables.DicTableAliasFlowDB
  107. err = db.SelectContext(ctx, &tableAliasFlowList, dataQuery, queryArgs...)
  108. if err != nil {
  109. logger.ErrorC(reqCtx, fmt.Sprintf("查询表别名字典流水失败: %v", err))
  110. return util.CreateErrorResult[[]tables.DicTableAliasFlowDB](fmt.Sprintf("查询表别名字典流水失败: %v", err), reqCtx)
  111. }
  112. logger.Debug(fmt.Sprintf("查询到 %d 条表别名字典流水,总记录数: %d", len(tableAliasFlowList), totalCount))
  113. // 创建结果,设置TotalCount
  114. result := util.CreateSuccessResultData[[]tables.DicTableAliasFlowDB](tableAliasFlowList, reqCtx)
  115. result.TotalCount = int(totalCount)
  116. // 计算总页数
  117. pageSize := req.PageSize
  118. if pageSize <= 0 {
  119. pageSize = 10 // 默认每页10条
  120. }
  121. lastPage := 1
  122. if pageSize > 0 && totalCount > 0 {
  123. lastPage = (int(totalCount) + pageSize - 1) / pageSize
  124. }
  125. result.LastPage = lastPage
  126. logger.Debug(fmt.Sprintf("设置QueryResult TotalCount: %d, LastPage: %d", result.TotalCount, result.LastPage))
  127. return result
  128. }
  129. // convertLegacyTableAliasFlowFields 将旧字段转换为新的Filters和Sorts(向后兼容)
  130. func convertLegacyTableAliasFlowFields(req *TableAliasFlowQueryRequest) {
  131. // 转换旧搜索字段为Filters
  132. if req.TableID != "" {
  133. req.Filter = append(req.Filter, queryreq.FilterParam{
  134. Field: "tableID",
  135. Operator: queryreq.OpLike,
  136. Value: req.TableID,
  137. })
  138. }
  139. if req.TableAlias != "" {
  140. req.Filter = append(req.Filter, queryreq.FilterParam{
  141. Field: "tableAlias",
  142. Operator: queryreq.OpLike,
  143. Value: req.TableAlias,
  144. })
  145. }
  146. if req.TenantID != "" {
  147. req.Filter = append(req.Filter, queryreq.FilterParam{
  148. Field: "tenantID",
  149. Operator: "=",
  150. Value: req.TenantID,
  151. })
  152. }
  153. if req.ApprovalStatus >= 0 && req.ApprovalStatus <= 2 {
  154. req.Filter = append(req.Filter, queryreq.FilterParam{
  155. Field: "approvalStatus",
  156. Operator: "=",
  157. Value: req.ApprovalStatus,
  158. })
  159. }
  160. // 转换旧排序字段为Sorts
  161. if req.SortField != "" {
  162. // 映射可能的旧字段名
  163. sortField := req.SortField
  164. switch sortField {
  165. case "table_id":
  166. sortField = "tableID"
  167. case "table_alias":
  168. sortField = "tableAlias"
  169. case "tenant_id":
  170. sortField = "tenantID"
  171. case "approval_status":
  172. sortField = "approvalStatus"
  173. case "approver":
  174. sortField = "approver"
  175. case "approved_at":
  176. sortField = "approvedAt"
  177. case "created_at":
  178. sortField = "createdAt"
  179. case "updated_at":
  180. sortField = "updatedAt"
  181. }
  182. sortOrder := req.SortOrder
  183. if sortOrder != "asc" && sortOrder != "desc" {
  184. sortOrder = "asc"
  185. }
  186. req.Sort = append(req.Sort, queryreq.SortParam{
  187. Field: sortField,
  188. Order: sortOrder,
  189. })
  190. }
  191. }
  192. // SearchTableAliasFlow 搜索表别名字典流水(简单搜索)
  193. func SearchTableAliasFlow(ctx context.Context, dbFactory *database.DBFactory, tableID, tableAlias, tenantID string, approvalStatus int8, reqCtx *ctx.RequestContext) *response.QueryResult[[]tables.DicTableAliasFlowDB] {
  194. logger.Debug("SearchTableAliasFlow-开始搜索表别名字典流水")
  195. // 获取数据库连接
  196. db := dbFactory.GetDB()
  197. // 构建查询条件和参数
  198. query := `
  199. SELECT id, table_id, table_alias, tenant_id, approval_status, approver, approved_at, created_at, updated_at, deleted_at
  200. FROM dic_table_alias_flow
  201. WHERE deleted_at IS NULL
  202. `
  203. var args []interface{}
  204. if tableID != "" {
  205. query += " AND table_id LIKE ?"
  206. args = append(args, "%"+tableID+"%")
  207. }
  208. if tableAlias != "" {
  209. query += " AND table_alias LIKE ?"
  210. args = append(args, "%"+tableAlias+"%")
  211. }
  212. if tenantID != "" {
  213. query += " AND tenant_id = ?"
  214. args = append(args, tenantID)
  215. }
  216. if approvalStatus >= 0 && approvalStatus <= 2 {
  217. query += " AND approval_status = ?"
  218. args = append(args, approvalStatus)
  219. }
  220. query += " ORDER BY created_at DESC"
  221. var tableAliasFlowList []tables.DicTableAliasFlowDB
  222. err := db.SelectContext(ctx, &tableAliasFlowList, query, args...)
  223. if err != nil {
  224. logger.ErrorC(reqCtx, fmt.Sprintf("搜索表别名字典流水失败: %v", err))
  225. return util.CreateErrorResult[[]tables.DicTableAliasFlowDB](fmt.Sprintf("搜索表别名字典流水失败: %v", err), reqCtx)
  226. }
  227. logger.Debug(fmt.Sprintf("搜索到 %d 条表别名字典流水", len(tableAliasFlowList)))
  228. return util.CreateSuccessResultData(tableAliasFlowList, reqCtx)
  229. }