diff --git a/app/main/api/internal/logic/query/querylistlogic.go b/app/main/api/internal/logic/query/querylistlogic.go index 2b02fd3..40e2c3c 100644 --- a/app/main/api/internal/logic/query/querylistlogic.go +++ b/app/main/api/internal/logic/query/querylistlogic.go @@ -33,7 +33,15 @@ func (l *QueryListLogic) QueryList(req *types.QueryListReq) (resp *types.QueryLi return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "订单列表查询, 获取用户信息失败, %+v", getUidErr) } - // 构建查询订单表的条件,排除未支付的订单 + // 构建子查询:查找在query表中有记录的order_id + querySubQuery := squirrel.Select("order_id").From("query") + + // 构建子查询:查找在authorization表中状态为pending的order_id + authSubQuery := squirrel.Select("order_id"). + From("authorization"). + Where(squirrel.Eq{"status": model.AuthorizationStatusPending}) + + // 构建主查询条件 build := l.svcCtx.OrderModel.SelectBuilder().Where(squirrel.And{ squirrel.Eq{ "user_id": userID, @@ -41,6 +49,15 @@ func (l *QueryListLogic) QueryList(req *types.QueryListReq) (resp *types.QueryLi squirrel.NotEq{ "status": model.OrderStatusPending, }, + squirrel.Or{ + // 在query表中有记录 + squirrel.Expr("id IN (?)", querySubQuery), + // 或者在query表中没有记录,但在authorization表中状态为pending + squirrel.And{ + squirrel.Expr("id NOT IN (?)", querySubQuery), + squirrel.Expr("id IN (?)", authSubQuery), + }, + }, }) // 从订单表分页查询 @@ -79,18 +96,31 @@ func (l *QueryListLogic) QueryList(req *types.QueryListReq) (resp *types.QueryLi query.Id = queryInfo.Id query.QueryState = queryInfo.QueryState query.IsQueryCompleted = queryInfo.QueryState == model.QueryStateSuccess + + // 获取授权状态 + authInfo, findAuthErr := l.svcCtx.AuthorizationModel.FindOneByOrderId(l.ctx, orderModel.Id) + if findAuthErr != nil && !errors.Is(findAuthErr, model.ErrNotFound) { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "订单列表查询, 获取授权信息失败, %+v", findAuthErr) + } + if errors.Is(findAuthErr, model.ErrNotFound) { + // 如果query存在但authorization不存在,说明已经授权完成 + query.IsAuthCompleted = true + } + // 授权存在 + query.IsAuthCompleted = authInfo.Status == model.AuthorizationStatusSuccess + } else { query.QueryState = "未创建" query.IsQueryCompleted = false - } - // 获取授权状态 - authInfo, findAuthErr := l.svcCtx.AuthorizationModel.FindOneByOrderId(l.ctx, orderModel.Id) - if findAuthErr == nil { - // 授权存在 - query.IsAuthCompleted = authInfo.Status == model.AuthorizationStatusSuccess - } else { - query.IsAuthCompleted = false + // 获取授权状态 + authInfo, findAuthErr := l.svcCtx.AuthorizationModel.FindOneByOrderId(l.ctx, orderModel.Id) + if findAuthErr == nil { + // 授权存在 + query.IsAuthCompleted = authInfo.Status == model.AuthorizationStatusSuccess + } else { + query.IsAuthCompleted = false + } } list = append(list, query)