From 768da1fe477d6b7ca171d7e16cd9cd6430ce6728 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Sat, 7 Jun 2025 15:53:54 +0800 Subject: [PATCH] add queryRecheck --- app/user/cmd/api/desc/query.api | 12 ++++ .../handler/query/queryrecheckhandler.go | 29 ++++++++ app/user/cmd/api/internal/handler/routes.go | 6 ++ .../internal/logic/query/queryrechecklogic.go | 66 +++++++++++++++++++ app/user/cmd/api/internal/types/types.go | 8 +++ common/jwt/jwtx_test.go | 2 +- 6 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 app/user/cmd/api/internal/handler/query/queryrecheckhandler.go create mode 100644 app/user/cmd/api/internal/logic/query/queryrechecklogic.go diff --git a/app/user/cmd/api/desc/query.api b/app/user/cmd/api/desc/query.api index 62b4f27..ceca631 100644 --- a/app/user/cmd/api/desc/query.api +++ b/app/user/cmd/api/desc/query.api @@ -120,6 +120,10 @@ service main { @doc "生成分享链接" @handler QueryGenerateShareLink post /query/generate_share_link (QueryGenerateShareLinkReq) returns (QueryGenerateShareLinkResp) + + @doc "补查" + @handler queryRecheck + post /query/recheck/:query_id (QueryRecheckReq) returns (QueryRecheckResp) } type ( @@ -261,3 +265,11 @@ type ( } ) +type ( + QueryRecheckReq { + QueryId int64 `path:"query_id"` + } + QueryRecheckResp { + Success bool `json:"success"` + } +) \ No newline at end of file diff --git a/app/user/cmd/api/internal/handler/query/queryrecheckhandler.go b/app/user/cmd/api/internal/handler/query/queryrecheckhandler.go new file mode 100644 index 0000000..3a085f6 --- /dev/null +++ b/app/user/cmd/api/internal/handler/query/queryrecheckhandler.go @@ -0,0 +1,29 @@ +package query + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "qnc-server/app/user/cmd/api/internal/logic/query" + "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/common/result" + "qnc-server/pkg/lzkit/validator" +) + +func QueryRecheckHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.QueryRecheckReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + if err := validator.Validate(req); err != nil { + result.ParamValidateErrorResult(r, w, err) + return + } + l := query.NewQueryRecheckLogic(r.Context(), svcCtx) + resp, err := l.QueryRecheck(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/app/user/cmd/api/internal/handler/routes.go b/app/user/cmd/api/internal/handler/routes.go index 82fb746..9d7eff8 100644 --- a/app/user/cmd/api/internal/handler/routes.go +++ b/app/user/cmd/api/internal/handler/routes.go @@ -345,6 +345,12 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/query/provisional_order/:id", Handler: query.QueryProvisionalOrderHandler(serverCtx), }, + { + // 补查 + Method: http.MethodPost, + Path: "/query/recheck/:query_id", + Handler: query.QueryRecheckHandler(serverCtx), + }, { // 重试查询 Method: http.MethodPost, diff --git a/app/user/cmd/api/internal/logic/query/queryrechecklogic.go b/app/user/cmd/api/internal/logic/query/queryrechecklogic.go new file mode 100644 index 0000000..890e358 --- /dev/null +++ b/app/user/cmd/api/internal/logic/query/queryrechecklogic.go @@ -0,0 +1,66 @@ +package query + +import ( + "context" + "database/sql" + "encoding/hex" + + "qnc-server/app/user/cmd/api/internal/svc" + "qnc-server/app/user/cmd/api/internal/types" + "qnc-server/app/user/model" + "qnc-server/common/xerr" + "qnc-server/pkg/lzkit/crypto" + + "github.com/pkg/errors" + "github.com/zeromicro/go-zero/core/logx" +) + +type QueryRecheckLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewQueryRecheckLogic(ctx context.Context, svcCtx *svc.ServiceContext) *QueryRecheckLogic { + return &QueryRecheckLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *QueryRecheckLogic) QueryRecheck(req *types.QueryRecheckReq) (resp *types.QueryRecheckResp, err error) { + query, err := l.svcCtx.QueryModel.FindOne(l.ctx, req.QueryId) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "补查, 获取query失败, %v", err) + } + secretKey := l.svcCtx.Config.Encrypt.SecretKey + key, decodeErr := hex.DecodeString(secretKey) + if decodeErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "补查, 获取密钥失败, %v", err) + } + decryptData, aesdecryptErr := crypto.AesDecrypt(query.QueryParams, key) + if aesdecryptErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "补查, 解密参数失败: %+v", aesdecryptErr) + } + combinedResponse, err := l.svcCtx.ApiRequestService.ProcessRequests(decryptData, query.ProductId) + if err != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "补查, 处理请求失败: %v", err) + } + encryptData, aesEncryptErr := crypto.AesEncrypt(combinedResponse, key) + if aesEncryptErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "补查, 加密响应信息失败: %v", aesEncryptErr) + } + query.QueryData = sql.NullString{ + String: encryptData, + Valid: true, + } + query.QueryState = model.QueryStateSuccess + updateErr := l.svcCtx.QueryModel.UpdateWithVersion(l.ctx, nil, query) + if updateErr != nil { + return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "补查, 保存响应数据失败: %v", updateErr) + } + return &types.QueryRecheckResp{ + Success: true, + }, nil +} diff --git a/app/user/cmd/api/internal/types/types.go b/app/user/cmd/api/internal/types/types.go index d9ca433..cee1bba 100644 --- a/app/user/cmd/api/internal/types/types.go +++ b/app/user/cmd/api/internal/types/types.go @@ -471,6 +471,14 @@ type QueryProvisionalOrderResp struct { Product Product `json:"product"` } +type QueryRecheckReq struct { + QueryId int64 `path:"query_id"` +} + +type QueryRecheckResp struct { + Success bool `json:"success"` +} + type QueryReq struct { Data string `json:"data" validate:"required"` } diff --git a/common/jwt/jwtx_test.go b/common/jwt/jwtx_test.go index c31ebb4..49c506c 100644 --- a/common/jwt/jwtx_test.go +++ b/common/jwt/jwtx_test.go @@ -8,7 +8,7 @@ import ( func TestGenerateAndParseJwtToken(t *testing.T) { // 测试参数 - userId := int64(2043) + userId := int64(39) secret := "WUvoIwL-FK0qnlxhvxR9tV6SjfOpeJMpKmY2QvT99lA" expireTime := int64(2592000) // 1小时过期