67 lines
2.1 KiB
Go
67 lines
2.1 KiB
Go
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
|
|
}
|