package query import ( "context" "encoding/hex" "tyc-server/app/user/cmd/api/internal/svc" "tyc-server/app/user/cmd/api/internal/types" "tyc-server/common/xerr" "github.com/jinzhu/copier" "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/logx" ) type QueryExampleLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewQueryExampleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *QueryExampleLogic { return &QueryExampleLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *QueryExampleLogic) QueryExample(req *types.QueryExampleReq) (resp *types.QueryExampleResp, err error) { product, err := l.svcCtx.ProductModel.FindOneByProductEn(l.ctx, req.Feature) if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "示例报告, 获取商品信息失败: %v", err) } exampleModel, err := l.svcCtx.ExampleModel.FindOneByProductId(l.ctx, product.Id) if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "示例报告, 获取示例报告失败: %v", err) } var query types.Query query.CreateTime = exampleModel.CreateTime.Format("2006-01-02 15:04:05") query.UpdateTime = exampleModel.UpdateTime.Format("2006-01-02 15:04:05") // 解密查询数据 secretKey := l.svcCtx.Config.Encrypt.SecretKey key, decodeErr := hex.DecodeString(secretKey) if decodeErr != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "示例报告, 获取AES解密解药失败, %+v", err) } processParamsErr := ProcessQueryParams(exampleModel.QueryParams, &query.QueryParams, key) if processParamsErr != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "示例报告, 报告参数处理失败: %v", processParamsErr) } processErr := ProcessQueryData(exampleModel.QueryData, &query.QueryData, key) if processErr != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "示例报告, 报告结果处理失败: %v", processErr) } // 复制报告数据 err = copier.Copy(&query, exampleModel) if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "示例报告, 报告结构体复制失败, %+v", err) } query.ProductName = product.ProductName return &types.QueryExampleResp{ Query: query, }, nil }