fix querylist

This commit is contained in:
liangzai 2025-06-09 13:39:21 +08:00
parent 19c82817ba
commit 5a530c4679

View File

@ -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,10 +96,22 @@ 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)
@ -92,6 +121,7 @@ func (l *QueryListLogic) QueryList(req *types.QueryListReq) (resp *types.QueryLi
} else {
query.IsAuthCompleted = false
}
}
list = append(list, query)
}