订单下载。jd下单。。
CI / changes (push) Successful in 37s
CI / ad (push) Successful in 29s
CI / admin (push) Successful in 17s
CI / bff (push) Successful in 13s
CI / chore (push) Successful in 15s
CI / equipment (push) Successful in 14s
CI / express (push) Successful in 14s
CI / product (push) Successful in 13s
CI / record (push) Successful in 13s
CI / sale (push) Successful in 13s
CI / task (push) Successful in 13s
CI / user (push) Successful in 14s
CI / wecom (push) Successful in 13s

This commit is contained in:
2026-09-09 17:52:07 +08:00
parent bcb8743eca
commit 38e040af07
51 changed files with 2572 additions and 350 deletions
+4 -1
View File
@@ -1,7 +1,9 @@
package request
import (
"bytes"
"context"
"encoding/base64"
"io"
"lone-services/pkg/utils"
"net/http"
@@ -132,7 +134,8 @@ func UserReadMiddleware(next http.HandlerFunc) http.HandlerFunc {
newCtx := r.Context()
body, _ := io.ReadAll(r.Body)
newCtx = context.WithValue(newCtx, CtxRawBody, string(body))
r.Body = io.NopCloser(bytes.NewBuffer(body))
newCtx = context.WithValue(newCtx, CtxRawBody, base64.StdEncoding.EncodeToString(body))
newCtx = context.WithValue(newCtx, CtxUserId, r.Header.Get("X-User-Id"))
newCtx = context.WithValue(newCtx, CtxUserName, r.Header.Get("X-User-Name"))
newCtx = context.WithValue(newCtx, CtxRefresh, r.Header.Get("X-Refresh"))
+40 -15
View File
@@ -2,11 +2,13 @@ package response
import (
"bytes"
"encoding/base64"
"lone-services/pkg/utils"
"net/http"
"strings"
jsoniter "github.com/json-iterator/go"
"github.com/zeromicro/go-zero/core/logx"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
@@ -18,8 +20,14 @@ type bodyWriter struct {
}
type responseDataBack struct {
ReturnCode string `json:"returnCode"`
ReturnMsg string `json:"returnMsg"`
ReturnCode string `json:"return_code"`
ReturnMsg string `json:"return_msg"`
}
type responseDataDown struct {
Data string `json:"data"` // excel二进制
Name string `json:"name"`
Msg string `json:"msg"`
}
type responseData struct {
@@ -47,27 +55,44 @@ func Wrap(next http.HandlerFunc) http.HandlerFunc {
}
raw := bytes.TrimSpace(bw.buf.Bytes())
var data responseData
if len(raw) > 0 {
if err := jsoniter.Unmarshal(raw, &data); err != nil {
res := make(map[string]interface{})
if len(raw) > utils.NumberZero {
if err := jsoniter.Unmarshal(raw, &res); err != nil {
ctrl.Fail(w)
return
}
}
if data.Code < utils.NumberOne {
var back responseDataBack
if err := jsoniter.Unmarshal(raw, &back); err != nil {
if _, ok := res["code"]; ok {
var data responseData
if err := jsoniter.Unmarshal(raw, &data); err != nil {
ctrl.Fail(w)
return
}
if len(back.ReturnCode) < utils.NumberOne {
ctrl.Fail(w)
return
}
ctrl.OutPutBack(w, back)
} else {
ctrl.OutPut(w, data.Code, unwrapJSONData(data.Data), data.Msg)
} else if _, ok := res["return_code"]; ok {
var data responseDataBack
if err := jsoniter.Unmarshal(raw, &data); err != nil {
ctrl.Fail(w)
return
}
ctrl.OutPutBack(w, data)
} else if _, ok := res["name"]; ok {
var data responseDataDown
if err := jsoniter.Unmarshal(raw, &data); err != nil {
ctrl.Fail(w)
return
}
excelBin, err := base64.StdEncoding.DecodeString(data.Data)
if err != nil {
logx.Error("excel base64 decode failed", err, data.Data)
ctrl.Fail(w)
return
}
data.Data = string(excelBin)
ctrl.OutPutDown(w, data)
}
}
}
+12 -1
View File
@@ -4,6 +4,7 @@ import (
"fmt"
"lone-services/pkg/utils"
"net/http"
"net/url"
jsoniter "github.com/json-iterator/go"
)
@@ -55,8 +56,18 @@ func (b *BaseController) OutPut(w http.ResponseWriter, code int32, data any, msg
}
func (b *BaseController) OutPutBack(w http.ResponseWriter, back responseDataBack) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusOK)
_ = jsoniter.NewEncoder(w).Encode(back)
}
func (b *BaseController) OutPutDown(w http.ResponseWriter, back responseDataDown) {
// 下载头,二进制流
w.Header().Set("Content-Type", "application/octet-stream")
// 文件名 urlencode,防止中文乱码
w.Header().Set("Content-Disposition", `attachment; filename="`+url.QueryEscape(back.Name)+`"`)
w.Header().Set("Content-Transfer-Encoding", "binary")
w.WriteHeader(http.StatusOK)
// back.Data 是 []byte excel二进制
_, _ = w.Write([]byte(back.Data))
}