From 4dc65eab11ec0e27c33d83a49e5cb24fe9275d4c Mon Sep 17 00:00:00 2001 From: renzhiyuan <465386466@qq.com> Date: Fri, 24 Jul 2026 18:13:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6:=20xy=5Fsh?= =?UTF-8?q?/internal/biz/biz.go?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xy_sh/internal/biz/biz.go | 65 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 xy_sh/internal/biz/biz.go diff --git a/xy_sh/internal/biz/biz.go b/xy_sh/internal/biz/biz.go new file mode 100644 index 0000000..ccfbaaa --- /dev/null +++ b/xy_sh/internal/biz/biz.go @@ -0,0 +1,65 @@ +package biz + +import ( + "encoding/json" + "fmt" + "log" + + "xy_sh/internal/entities" + "xy_sh/pkg/crypto" +) + +// Biz 业务逻辑层 +type Biz struct { + SM4Key []byte +} + +// NewBiz 创建业务逻辑实例 +func NewBiz(sm4Key []byte) *Biz { + return &Biz{SM4Key: sm4Key} +} + +// DecryptRequest 解密请求体中的 encryptedData 并解析为指定结构体 +func (b *Biz) DecryptRequest(encryptedData string, target interface{}) error { + plaintext, err := crypto.SM4CBCDecrypt(encryptedData, b.SM4Key) + if err != nil { + return fmt.Errorf("SM4解密失败: %v", err) + } + if err := json.Unmarshal(plaintext, target); err != nil { + return fmt.Errorf("JSON解析失败: %v", err) + } + log.Printf("[业务] 解密请求数据: %s", string(plaintext)) + return nil +} + +// EncryptResponse 加密响应业务数据 +func (b *Biz) EncryptResponse(data interface{}) (string, error) { + jsonBytes, err := json.Marshal(data) + if err != nil { + return "", fmt.Errorf("JSON序列化失败: %v", err) + } + encrypted, err := crypto.SM4CBCEncrypt(jsonBytes, b.SM4Key) + if err != nil { + return "", fmt.Errorf("SM4加密失败: %v", err) + } + log.Printf("[业务] 加密响应数据: %s", string(jsonBytes)) + return encrypted, nil +} + +// CreateOrder 卡券/直充权益下单业务逻辑 +// TODO: 根据实际业务需求实现 +func (b *Biz) CreateOrder(req *entities.OrderCreateRequest) (*entities.OrderCreateResponse, error) { + log.Printf("[业务] 下单请求: actCode=%s, goodsCode=%s, actOrderNum=%s, account=%s", + req.ActCode, req.GoodsCode, req.ActOrderNum, req.Account) + + // TODO: 调用供应商实际接口或数据库操作 + // 以下为模拟实现 + resp := &entities.OrderCreateResponse{ + OrderNo: fmt.Sprintf("HM%d%s", crypto.GenerateTimestampMillis(), "27073398f3772c00"), + Status: 0, + ExpireTime: "2025-09-12 00:00:00", + } + + log.Printf("[业务] 下单成功: orderNo=%s", resp.OrderNo) + return resp, nil +} \ No newline at end of file