订单下载。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
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:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user