创建项目
This commit is contained in:
		
						commit
						32a7e74aed
					
				| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
/.idea
 | 
			
		||||
/.vscode
 | 
			
		||||
/vendor
 | 
			
		||||
/runtime
 | 
			
		||||
*.log
 | 
			
		||||
.env
 | 
			
		||||
app/.DS_Store
 | 
			
		||||
.DS_Store
 | 
			
		||||
composer_test.lock
 | 
			
		||||
.phpunit.result.cache
 | 
			
		||||
config/pem
 | 
			
		||||
config/bale
 | 
			
		||||
config/alipaycash
 | 
			
		||||
config/wechatcash
 | 
			
		||||
config/wechat_cert.pem
 | 
			
		||||
config/wechat_private_key.pem
 | 
			
		||||
/app/api/ForExample.php
 | 
			
		||||
/route/test.php
 | 
			
		||||
/public/data/
 | 
			
		||||
/app/api/Test.php
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
GOHOSTOS:=$(shell go env GOHOSTOS)
 | 
			
		||||
GOPATH:=$(shell go env GOPATH)
 | 
			
		||||
VERSION=$(shell git describe --tags --always)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ifeq ($(GOHOSTOS), windows)
 | 
			
		||||
	#the `find.exe` is different from `find` in bash/shell.
 | 
			
		||||
	#to see https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/find.
 | 
			
		||||
	#changed to use git-bash.exe to run find cli or other cli friendly, caused of every developer has a Git.
 | 
			
		||||
	#Git_Bash= $(subst cmd\,bin\bash.exe,$(dir $(shell where git)))
 | 
			
		||||
	Git_Bash=$(subst \,/,$(subst cmd\,bin\bash.exe,$(dir $(shell where git))))
 | 
			
		||||
	INTERNAL_PROTO_FILES=$(shell $(Git_Bash) -c "find internal -name *.proto")
 | 
			
		||||
	API_PROTO_FILES=$(shell $(Git_Bash) -c "find api -name *.proto")
 | 
			
		||||
else
 | 
			
		||||
	INTERNAL_PROTO_FILES=$(shell find internal -name *.proto)
 | 
			
		||||
	API_PROTO_FILES=$(shell find api -name *.proto)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.PHONY: apigen
 | 
			
		||||
# 根据api创建http文件
 | 
			
		||||
apigen:
 | 
			
		||||
	cd cmd/api/desc && goctl api go -api *.api -dir ../  --style=goZero
 | 
			
		||||
 | 
			
		||||
.PHONY: rpcgen
 | 
			
		||||
# 根据protoc创建rpc文件
 | 
			
		||||
rpcgen:
 | 
			
		||||
	cd cmd/rpc/pb && goctl rpc protoc *.proto --go_out=../pb --go-grpc_out=../pb  --zrpc_out=../ --client=false --style=goZero
 | 
			
		||||
 | 
			
		||||
.PHONY: apiinitrpc
 | 
			
		||||
# api端生成rpc
 | 
			
		||||
apiinitrpc:
 | 
			
		||||
	cd cmd/api/pb && goctl rpc protoc *.proto --go_out=../ --go-grpc_out=../  --zrpc_out=../ --client=false --style=goZero
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY: rpcrun
 | 
			
		||||
# 运行rpc
 | 
			
		||||
rpcrun:
 | 
			
		||||
	cd cmd/rpc && go run transfer.go
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY: apirun
 | 
			
		||||
# 运行rpc
 | 
			
		||||
apirun:
 | 
			
		||||
	cd cmd/api && go run transfer.go
 | 
			
		||||
 | 
			
		||||
.PHONY: apivalidate
 | 
			
		||||
# 运行rpc
 | 
			
		||||
apivalidate:
 | 
			
		||||
	cd cmd/api/desc && goctl api validate --api *.api
 | 
			
		||||
 | 
			
		||||
.PHONY: apiformat
 | 
			
		||||
# 运行rpc
 | 
			
		||||
apiformat:
 | 
			
		||||
	cd cmd/api/desc && goctl api format --dir ./
 | 
			
		||||
 | 
			
		||||
.PHONY: apitodoc
 | 
			
		||||
# 运行rpc
 | 
			
		||||
apitodoc:
 | 
			
		||||
	cd cmd/api/desc && goctl api doc --dir ./
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY: templateUpdate
 | 
			
		||||
# rpcdocker
 | 
			
		||||
templateUpdate:
 | 
			
		||||
	cd template && goctl template update   --home ./
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY: rpcdocker
 | 
			
		||||
# rpcdocker
 | 
			
		||||
rpcdocker:
 | 
			
		||||
	 goctl docker -go ./cmd/rpc/transfer.go
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
package etc
 | 
			
		||||
 | 
			
		||||
type ExtraConfig struct {
 | 
			
		||||
	Nacos NacosConf
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type NacosConf struct {
 | 
			
		||||
	Hosts       []string
 | 
			
		||||
	NameSpace   string
 | 
			
		||||
	TimeOut     uint64
 | 
			
		||||
	ServiceName string
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
package config
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/cache"
 | 
			
		||||
	"github.com/zeromicro/go-zero/zrpc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/etc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/logic/po/zltx/types"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Config struct {
 | 
			
		||||
	zrpc.RpcServerConf
 | 
			
		||||
	etc.ExtraConfig
 | 
			
		||||
	DB struct {
 | 
			
		||||
		Master struct {
 | 
			
		||||
			DataSource string
 | 
			
		||||
		}
 | 
			
		||||
		Slave struct {
 | 
			
		||||
			DataSource string
 | 
			
		||||
		}
 | 
			
		||||
		MarketReseller struct {
 | 
			
		||||
			DataSource string
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Cache cache.CacheConf
 | 
			
		||||
 | 
			
		||||
	ZLTX types.ZLTXConf
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
package logic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"trasfer_middleware/pkg/xerr"
 | 
			
		||||
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type GetResellerByAppIdLogic struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	logx.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewGetResellerByAppIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetResellerByAppIdLogic {
 | 
			
		||||
	return &GetResellerByAppIdLogic{
 | 
			
		||||
		ctx:    ctx,
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
		Logger: logx.WithContext(ctx),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *GetResellerByAppIdLogic) GetResellerByAppId(in *transfer.GetResellerByAppIdReq) (*transfer.GetResellerByAppIdRes, error) {
 | 
			
		||||
	var res transfer.GetResellerByAppIdRes
 | 
			
		||||
	reseller, err := l.svcCtx.DbReseller.ResellerMerchant.FindOneByAppId(l.ctx, in.AppId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrMsg(l.ctx, "未找到分销商信息"), "temp in : %+v", err, in.AppId)
 | 
			
		||||
	}
 | 
			
		||||
	_ = copier.Copy(&res, &reseller)
 | 
			
		||||
	return &res, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
package types
 | 
			
		||||
 | 
			
		||||
type PublicRecharge struct {
 | 
			
		||||
	MerchantId int
 | 
			
		||||
	TimeStamp  int
 | 
			
		||||
	Sign       string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ExtendParameter struct {
 | 
			
		||||
	ExtendParameter string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ZLTXConf struct {
 | 
			
		||||
	Host string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type BaseRes struct {
 | 
			
		||||
	Code    string `json:"code"`
 | 
			
		||||
	Message string `json:"message"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
package types
 | 
			
		||||
 | 
			
		||||
type CardParam struct {
 | 
			
		||||
	OutTradeNo  string
 | 
			
		||||
	ProductId   int
 | 
			
		||||
	Mobile      string
 | 
			
		||||
	AccountType int
 | 
			
		||||
	Number      int
 | 
			
		||||
	NotifyUrl   string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CardRes struct {
 | 
			
		||||
	Code    string `json:"code"`
 | 
			
		||||
	Message string `json:"message"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CardQueryRes struct {
 | 
			
		||||
	Code       string `json:"code"`
 | 
			
		||||
	Message    string `json:"message"`
 | 
			
		||||
	Status     string `json:"status"`
 | 
			
		||||
	OutTradeNo string `json:"outTradeNo"`
 | 
			
		||||
	CardCode   string `json:"cardCode"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
package types
 | 
			
		||||
 | 
			
		||||
type OrderSmsParam struct {
 | 
			
		||||
	OutTradeNo string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type OrderSmsRes struct {
 | 
			
		||||
	Code       string `json:"code"`
 | 
			
		||||
	Message    string `json:"message"`
 | 
			
		||||
	Status     string `json:"status"`
 | 
			
		||||
	OutTradeNo string `json:"outTradeNo"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
package types
 | 
			
		||||
 | 
			
		||||
type RechargeParam struct {
 | 
			
		||||
	OutTradeNo      string
 | 
			
		||||
	ProductId       int
 | 
			
		||||
	RechargeAccount string
 | 
			
		||||
	AccountType     int
 | 
			
		||||
	Number          int
 | 
			
		||||
	NotifyUrl       string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RechargeQueryRes struct {
 | 
			
		||||
	Code       string `json:"code"`
 | 
			
		||||
	Message    string `json:"message"`
 | 
			
		||||
	Status     string `json:"status"`
 | 
			
		||||
	OutTradeNo string `json:"outTradeNo"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
package types
 | 
			
		||||
 | 
			
		||||
type RechargeInfoParam struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RechargeInfoRes struct {
 | 
			
		||||
	Code    string `json:"code"`
 | 
			
		||||
	Balance string `json:"balance"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
package types
 | 
			
		||||
 | 
			
		||||
type RechargeProductParam struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RechargeProductRes struct {
 | 
			
		||||
	Code     string            `json:"code"`
 | 
			
		||||
	Products []RechargeProduct `json:"products"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RechargeProduct struct {
 | 
			
		||||
	ProductId     int    `json:"product_id"`
 | 
			
		||||
	ChannelPrice  string `json:"channel_price"`
 | 
			
		||||
	ItemName      string `json:"item_name"`
 | 
			
		||||
	OriginalPrice string `json:"original_price"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,126 @@
 | 
			
		|||
package zltx
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"time"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/logic/po/zltx/types"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/logic/vo"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
	"trasfer_middleware/pkg/common"
 | 
			
		||||
	"trasfer_middleware/pkg/request"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ZltxOrder struct {
 | 
			
		||||
	Conf        *types.ZLTXConf
 | 
			
		||||
	RequestBody map[string]string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ZltxOrderRequest struct {
 | 
			
		||||
	*ZltxOrder
 | 
			
		||||
	RequestBody map[string]string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewZltxOrder(conf types.ZLTXConf) *ZltxOrder {
 | 
			
		||||
 | 
			
		||||
	return &ZltxOrder{
 | 
			
		||||
		Conf: &conf,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrder) SetData(data map[string]interface{}) *ZltxOrderRequest {
 | 
			
		||||
	data["timeStamp"] = time.Now().Unix()
 | 
			
		||||
	a := data
 | 
			
		||||
	delete(a, "extendParameter")
 | 
			
		||||
	delete(a, "sign")
 | 
			
		||||
	data["sign"] = common.ZltxSign(a, "8db16e8cc8363ed4eb4c14f9520bcc32")
 | 
			
		||||
	//data := common.MergeMaps(common.ToMap(p), common.ToMap(r), common.ToMap(e))*/
 | 
			
		||||
	requestBody := make(map[string]string, len(data))
 | 
			
		||||
	for key, value := range data {
 | 
			
		||||
		requestBody[key] = fmt.Sprintf("%v", value)
 | 
			
		||||
	}
 | 
			
		||||
	return &ZltxOrderRequest{
 | 
			
		||||
		ZltxOrder:   r,
 | 
			
		||||
		RequestBody: requestBody,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrderRequest) request(url string) (*request.Response, error) {
 | 
			
		||||
	req := request.Request{
 | 
			
		||||
		Method: "POST",
 | 
			
		||||
		Url:    fmt.Sprintf("%s%s", r.Conf.Host, url),
 | 
			
		||||
		Data:   r.RequestBody,
 | 
			
		||||
	}
 | 
			
		||||
	resp, _ := req.Send()
 | 
			
		||||
	return &resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrderRequest) RechargeOrder() (*transfer.DefaultRes, error) {
 | 
			
		||||
	var res transfer.DefaultRes
 | 
			
		||||
	req, err := r.request(vo.ZLTX_RECHARGE)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_ = json.Unmarshal([]byte(req.Text), &res)
 | 
			
		||||
	return &res, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrderRequest) RechargeQuery() (*transfer.ZltxOrderCardQueryRes, error) {
 | 
			
		||||
	var res transfer.ZltxOrderCardQueryRes
 | 
			
		||||
	req, err := r.request(vo.ZLTX_RECHARGE_QUERY)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_ = json.Unmarshal([]byte(req.Text), &res)
 | 
			
		||||
	return &res, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrderRequest) CardOrder() (*transfer.DefaultRes, error) {
 | 
			
		||||
	var res transfer.DefaultRes
 | 
			
		||||
	req, err := r.request(vo.ZLTX_CARD)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_ = json.Unmarshal([]byte(req.Text), &res)
 | 
			
		||||
	return &res, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrderRequest) CardQuery() (*transfer.ZltxOrderCardQueryRes, error) {
 | 
			
		||||
	var res transfer.ZltxOrderCardQueryRes
 | 
			
		||||
	req, err := r.request(vo.ZLTX_CARD_QUERY)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_ = json.Unmarshal([]byte(req.Text), &res)
 | 
			
		||||
	return &res, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrderRequest) OrderSendSms() (*transfer.ZltxOrderSmsRes, error) {
 | 
			
		||||
	var res transfer.ZltxOrderSmsRes
 | 
			
		||||
	req, err := r.request(vo.ZLTX_CARD_ISSUE)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_ = json.Unmarshal([]byte(req.Text), &res)
 | 
			
		||||
	return &res, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrderRequest) RechargeProduct() (*types.RechargeProductRes, error) {
 | 
			
		||||
	var res types.RechargeProductRes
 | 
			
		||||
	req, err := r.request(vo.ZLTX_RECHARGE_PRODUCT)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_ = json.Unmarshal([]byte(req.Text), &res)
 | 
			
		||||
	return &res, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *ZltxOrderRequest) RechargeInfo() (*transfer.ZltxRechargeInfoRes, error) {
 | 
			
		||||
	var res transfer.ZltxRechargeInfoRes
 | 
			
		||||
	req, err := r.request(vo.ZLTX_RECHARGE_INFO)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	_ = json.Unmarshal([]byte(req.Text), &res)
 | 
			
		||||
	return &res, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
package vo
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	//券码生成
 | 
			
		||||
	KEY_SEND = "openApi/v1/market/key/send"
 | 
			
		||||
 | 
			
		||||
	//券码作废
 | 
			
		||||
	KEY_DISCARD = "openApi/v1/market/key/discard"
 | 
			
		||||
 | 
			
		||||
	//券码详情
 | 
			
		||||
	KEY_QUERY = "openApi/v1/market/key/query"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
package vo
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// 直充下单
 | 
			
		||||
	ZLTX_RECHARGE = "recharge/order"
 | 
			
		||||
 | 
			
		||||
	// 直充查询
 | 
			
		||||
	ZLTX_RECHARGE_QUERY = "recharge/query"
 | 
			
		||||
 | 
			
		||||
	// 卡密下单
 | 
			
		||||
	ZLTX_CARD = "card/order"
 | 
			
		||||
 | 
			
		||||
	// 卡密查询
 | 
			
		||||
	ZLTX_CARD_QUERY = "card/query"
 | 
			
		||||
 | 
			
		||||
	// 卡密重发短信
 | 
			
		||||
	ZLTX_CARD_ISSUE = "card/issue"
 | 
			
		||||
 | 
			
		||||
	// 获取商品列表
 | 
			
		||||
	ZLTX_RECHARGE_PRODUCT = "recharge/product"
 | 
			
		||||
 | 
			
		||||
	// 余额查询
 | 
			
		||||
	ZLTX_RECHARGE_INFO = "recharge/info"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
package logic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"trasfer_middleware/pkg/common"
 | 
			
		||||
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ZltxOrderCardLogic struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	logx.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewZltxOrderCardLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ZltxOrderCardLogic {
 | 
			
		||||
	return &ZltxOrderCardLogic{
 | 
			
		||||
		ctx:    ctx,
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
		Logger: logx.WithContext(ctx),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *ZltxOrderCardLogic) ZltxOrderCard(in *transfer.ZltxOrderCardReq) (*transfer.DefaultRes, error) {
 | 
			
		||||
 | 
			
		||||
	res, err := l.svcCtx.ZltxOrder.SetData(common.StructToMap(in)).CardOrder()
 | 
			
		||||
	return &transfer.DefaultRes{
 | 
			
		||||
		Code:    res.Code,
 | 
			
		||||
		Message: res.Message,
 | 
			
		||||
	}, err
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
package logic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
	"trasfer_middleware/pkg/common"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ZltxOrderCardQueryLogic struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	logx.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewZltxOrderCardQueryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ZltxOrderCardQueryLogic {
 | 
			
		||||
	return &ZltxOrderCardQueryLogic{
 | 
			
		||||
		ctx:    ctx,
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
		Logger: logx.WithContext(ctx),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *ZltxOrderCardQueryLogic) ZltxOrderCardQuery(in *transfer.ZltxOrderCardQueryReq) (*transfer.ZltxOrderCardQueryRes, error) {
 | 
			
		||||
 | 
			
		||||
	res, err := l.svcCtx.ZltxOrder.SetData(common.StructToMap(in)).CardQuery()
 | 
			
		||||
	return &transfer.ZltxOrderCardQueryRes{
 | 
			
		||||
		Code:       res.Code,
 | 
			
		||||
		Message:    res.Message,
 | 
			
		||||
		Status:     res.Status,
 | 
			
		||||
		OutTradeNo: res.OutTradeNo,
 | 
			
		||||
	}, err
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
package logic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"trasfer_middleware/pkg/common"
 | 
			
		||||
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ZltxOrderRechargeLogic struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	logx.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewZltxOrderRechargeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ZltxOrderRechargeLogic {
 | 
			
		||||
	return &ZltxOrderRechargeLogic{
 | 
			
		||||
		ctx:    ctx,
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
		Logger: logx.WithContext(ctx),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *ZltxOrderRechargeLogic) ZltxOrderRecharge(in *transfer.ZltxOrderRechargeReq) (*transfer.DefaultRes, error) {
 | 
			
		||||
	res, err := l.svcCtx.ZltxOrder.SetData(common.StructToMap(in)).RechargeOrder()
 | 
			
		||||
	return &transfer.DefaultRes{
 | 
			
		||||
		Code:    res.Code,
 | 
			
		||||
		Message: res.Message,
 | 
			
		||||
	}, err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
package logic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
	"trasfer_middleware/pkg/common"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ZltxOrderRechargeQueryLogic struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	logx.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewZltxOrderRechargeQueryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ZltxOrderRechargeQueryLogic {
 | 
			
		||||
	return &ZltxOrderRechargeQueryLogic{
 | 
			
		||||
		ctx:    ctx,
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
		Logger: logx.WithContext(ctx),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *ZltxOrderRechargeQueryLogic) ZltxOrderRechargeQuery(in *transfer.ZltxOrderRechargeQueryReq) (*transfer.ZltxOrderRechargeQueryRes, error) {
 | 
			
		||||
	res, err := l.svcCtx.ZltxOrder.SetData(common.StructToMap(in)).RechargeQuery()
 | 
			
		||||
	return &transfer.ZltxOrderRechargeQueryRes{
 | 
			
		||||
		Code:       res.Code,
 | 
			
		||||
		Message:    res.Message,
 | 
			
		||||
		Status:     res.Status,
 | 
			
		||||
		OutTradeNo: res.OutTradeNo,
 | 
			
		||||
	}, err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
package logic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"trasfer_middleware/pkg/common"
 | 
			
		||||
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ZltxOrderSmsLogic struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	logx.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewZltxOrderSmsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ZltxOrderSmsLogic {
 | 
			
		||||
	return &ZltxOrderSmsLogic{
 | 
			
		||||
		ctx:    ctx,
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
		Logger: logx.WithContext(ctx),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *ZltxOrderSmsLogic) ZltxOrderSms(in *transfer.ZltxOrderSmsReq) (*transfer.ZltxOrderSmsRes, error) {
 | 
			
		||||
	var result = &transfer.ZltxOrderSmsRes{}
 | 
			
		||||
	res, err := l.svcCtx.ZltxOrder.SetData(common.StructToMap(in)).OrderSendSms()
 | 
			
		||||
	_ = copier.Copy(result, &res)
 | 
			
		||||
	return result, err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
package logic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"trasfer_middleware/pkg/common"
 | 
			
		||||
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ZltxRechargeInfoLogic struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	logx.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewZltxRechargeInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ZltxRechargeInfoLogic {
 | 
			
		||||
	return &ZltxRechargeInfoLogic{
 | 
			
		||||
		ctx:    ctx,
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
		Logger: logx.WithContext(ctx),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *ZltxRechargeInfoLogic) ZltxRechargeInfo(in *transfer.DefaultReq) (*transfer.ZltxRechargeInfoRes, error) {
 | 
			
		||||
 | 
			
		||||
	res, err := l.svcCtx.ZltxOrder.SetData(common.StructToMap(in)).RechargeInfo()
 | 
			
		||||
	//_ = copier.Copy(result, &res)
 | 
			
		||||
	return res, err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
package logic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"trasfer_middleware/pkg/common"
 | 
			
		||||
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ZltxRechargeProductLogic struct {
 | 
			
		||||
	ctx    context.Context
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	logx.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewZltxRechargeProductLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ZltxRechargeProductLogic {
 | 
			
		||||
	return &ZltxRechargeProductLogic{
 | 
			
		||||
		ctx:    ctx,
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
		Logger: logx.WithContext(ctx),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *ZltxRechargeProductLogic) ZltxRechargeProduct(in *transfer.DefaultReq) (*transfer.ZltxRechargeProductRes, error) {
 | 
			
		||||
	var result = &transfer.ZltxRechargeProductRes{}
 | 
			
		||||
	res, err := l.svcCtx.ZltxOrder.SetData(common.StructToMap(in)).RechargeProduct()
 | 
			
		||||
	_ = copier.Copy(result, &res)
 | 
			
		||||
	return result, err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,63 @@
 | 
			
		|||
// Code generated by goctl. DO NOT EDIT.
 | 
			
		||||
// Source: transfer.proto
 | 
			
		||||
 | 
			
		||||
package server
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/logic"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TransferServer struct {
 | 
			
		||||
	svcCtx *svc.ServiceContext
 | 
			
		||||
	transfer.UnimplementedTransferServer
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewTransferServer(svcCtx *svc.ServiceContext) *TransferServer {
 | 
			
		||||
	return &TransferServer{
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *TransferServer) GetResellerByAppId(ctx context.Context, in *transfer.GetResellerByAppIdReq) (*transfer.GetResellerByAppIdRes, error) {
 | 
			
		||||
	l := logic.NewGetResellerByAppIdLogic(ctx, s.svcCtx)
 | 
			
		||||
	return l.GetResellerByAppId(in)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *TransferServer) ZltxOrderRecharge(ctx context.Context, in *transfer.ZltxOrderRechargeReq) (*transfer.DefaultRes, error) {
 | 
			
		||||
	l := logic.NewZltxOrderRechargeLogic(ctx, s.svcCtx)
 | 
			
		||||
	return l.ZltxOrderRecharge(in)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *TransferServer) ZltxOrderRechargeQuery(ctx context.Context, in *transfer.ZltxOrderRechargeQueryReq) (*transfer.ZltxOrderRechargeQueryRes, error) {
 | 
			
		||||
	l := logic.NewZltxOrderRechargeQueryLogic(ctx, s.svcCtx)
 | 
			
		||||
	return l.ZltxOrderRechargeQuery(in)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *TransferServer) ZltxOrderCard(ctx context.Context, in *transfer.ZltxOrderCardReq) (*transfer.DefaultRes, error) {
 | 
			
		||||
	l := logic.NewZltxOrderCardLogic(ctx, s.svcCtx)
 | 
			
		||||
	return l.ZltxOrderCard(in)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *TransferServer) ZltxOrderCardQuery(ctx context.Context, in *transfer.ZltxOrderCardQueryReq) (*transfer.ZltxOrderCardQueryRes, error) {
 | 
			
		||||
	l := logic.NewZltxOrderCardQueryLogic(ctx, s.svcCtx)
 | 
			
		||||
	return l.ZltxOrderCardQuery(in)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *TransferServer) ZltxOrderSms(ctx context.Context, in *transfer.ZltxOrderSmsReq) (*transfer.ZltxOrderSmsRes, error) {
 | 
			
		||||
	l := logic.NewZltxOrderSmsLogic(ctx, s.svcCtx)
 | 
			
		||||
	return l.ZltxOrderSms(in)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *TransferServer) ZltxRechargeInfo(ctx context.Context, in *transfer.DefaultReq) (*transfer.ZltxRechargeInfoRes, error) {
 | 
			
		||||
	l := logic.NewZltxRechargeInfoLogic(ctx, s.svcCtx)
 | 
			
		||||
	return l.ZltxRechargeInfo(in)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *TransferServer) ZltxRechargeProduct(ctx context.Context, in *transfer.DefaultReq) (*transfer.ZltxRechargeProductRes, error) {
 | 
			
		||||
	l := logic.NewZltxRechargeProductLogic(ctx, s.svcCtx)
 | 
			
		||||
	return l.ZltxRechargeProduct(in)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
package svc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/redis"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/config"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/logic/po/zltx"
 | 
			
		||||
	"trasfer_middleware/genModel"
 | 
			
		||||
	"trasfer_middleware/genModel/marketReseller"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ServiceContext struct {
 | 
			
		||||
	Config      config.Config
 | 
			
		||||
	RedisClient *redis.Redis
 | 
			
		||||
	DbRead      *Model
 | 
			
		||||
	DbWrite     *Model
 | 
			
		||||
	DbReseller  *MarkerReseller
 | 
			
		||||
 | 
			
		||||
	ZltxOrder *zltx.ZltxOrder
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewServiceContext(c config.Config) *ServiceContext {
 | 
			
		||||
	return &ServiceContext{
 | 
			
		||||
		Config: c,
 | 
			
		||||
		RedisClient: redis.MustNewRedis(redis.RedisConf{
 | 
			
		||||
			Host: c.Redis.Host,
 | 
			
		||||
			Type: c.Redis.Type,
 | 
			
		||||
			Pass: c.Redis.Pass,
 | 
			
		||||
		}),
 | 
			
		||||
		DbRead:     DbModel(c.DB.Master.DataSource, c),
 | 
			
		||||
		DbWrite:    DbModel(c.DB.Slave.DataSource, c),
 | 
			
		||||
		DbReseller: ResellerModel(c.DB.MarketReseller.DataSource, c),
 | 
			
		||||
		ZltxOrder:  zltx.NewZltxOrder(c.ZLTX),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DbModel(datasource string, c config.Config) *Model {
 | 
			
		||||
	sqlConn := sqlx.NewMysql(datasource)
 | 
			
		||||
	return &Model{
 | 
			
		||||
		ClientModel: genModel.NewServerClientModel(sqlConn, c.Cache),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Model struct {
 | 
			
		||||
	ClientModel genModel.ServerClientModel
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ResellerModel(datasource string, c config.Config) *MarkerReseller {
 | 
			
		||||
	sqlConn := sqlx.NewMysql(datasource)
 | 
			
		||||
	return &MarkerReseller{
 | 
			
		||||
		ResellerMerchant: marketReseller.NewResellerMerchantModel(sqlConn, c.Cache),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type MarkerReseller struct {
 | 
			
		||||
	ResellerMerchant marketReseller.ResellerMerchantModel
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,151 @@
 | 
			
		|||
syntax = "proto3";
 | 
			
		||||
 | 
			
		||||
package transfer;
 | 
			
		||||
option go_package="./transfer";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
message DefaultRes {
 | 
			
		||||
  string code=1;
 | 
			
		||||
  string message=2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message DefaultReq {
 | 
			
		||||
  string merchantId = 1;
 | 
			
		||||
  uint64 timeStamp = 2;
 | 
			
		||||
  string sign = 3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
service Zltx {
 | 
			
		||||
  rpc zltxOrderRecharge(ZltxOrderRechargeReq) returns(DefaultRes);
 | 
			
		||||
  rpc zltxOrderRechargeQuery(ZltxOrderRechargeQueryReq) returns(ZltxOrderRechargeQueryRes);
 | 
			
		||||
  rpc zltxOrderCard(ZltxOrderCardReq) returns(DefaultRes);
 | 
			
		||||
  rpc zltxOrderCardQuery(ZltxOrderCardQueryReq) returns(ZltxOrderCardQueryRes);
 | 
			
		||||
  rpc zltxOrderSms(ZltxOrderSmsReq) returns(ZltxOrderSmsRes);
 | 
			
		||||
  rpc zltxRechargeInfo(DefaultReq) returns(ZltxRechargeInfoRes);
 | 
			
		||||
  rpc zltxRechargeProduct(DefaultReq) returns(ZltxRechargeProductRes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
service Market {
 | 
			
		||||
  rpc zltxOrderRecharge(ZltxOrderRechargeReq) returns(DefaultRes);
 | 
			
		||||
  rpc zltxOrderRechargeQuery(ZltxOrderRechargeQueryReq) returns(ZltxOrderRechargeQueryRes);
 | 
			
		||||
  rpc zltxOrderCard(ZltxOrderCardReq) returns(DefaultRes);
 | 
			
		||||
  rpc zltxOrderCardQuery(ZltxOrderCardQueryReq) returns(ZltxOrderCardQueryRes);
 | 
			
		||||
  rpc zltxOrderSms(ZltxOrderSmsReq) returns(ZltxOrderSmsRes);
 | 
			
		||||
  rpc zltxRechargeInfo(DefaultReq) returns(ZltxRechargeInfoRes);
 | 
			
		||||
  rpc zltxRechargeProduct(DefaultReq) returns(ZltxRechargeProductRes);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ZltxRechargeProductRes {
 | 
			
		||||
  string code=1;
 | 
			
		||||
  repeated Product products=2;
 | 
			
		||||
  message Product{
 | 
			
		||||
   int64 productId=1;
 | 
			
		||||
   string channelPrice=2;
 | 
			
		||||
   string itemName=3;
 | 
			
		||||
   string originalPrice=4;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ZltxRechargeInfoRes {
 | 
			
		||||
  string code=1;
 | 
			
		||||
  string balance=2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ZltxOrderSmsRes {
 | 
			
		||||
  string code=1;
 | 
			
		||||
  string message=2;
 | 
			
		||||
  string status = 3;
 | 
			
		||||
  string outTradeNo=4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ZltxOrderSmsReq {
 | 
			
		||||
  string merchantId = 1;
 | 
			
		||||
  uint64 timeStamp = 2;
 | 
			
		||||
  string sign = 3;
 | 
			
		||||
  string outTradeNo = 4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
message ZltxOrderCardQueryRes {
 | 
			
		||||
  string code=1;
 | 
			
		||||
  string message=2;
 | 
			
		||||
  string status = 3;
 | 
			
		||||
  string outTradeNo=4;
 | 
			
		||||
}
 | 
			
		||||
message ZltxOrderCardQueryReq {
 | 
			
		||||
  string merchantId = 1;
 | 
			
		||||
  uint64 timeStamp = 2;
 | 
			
		||||
  string sign = 3;
 | 
			
		||||
  string outTradeNo = 4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ZltxOrderCardReq {
 | 
			
		||||
  string merchantId = 1;
 | 
			
		||||
  string sign = 2;
 | 
			
		||||
  uint64 timeStamp = 3;
 | 
			
		||||
  string outTradeNo = 4;
 | 
			
		||||
  int64 productId=5;
 | 
			
		||||
  string mobile=6;
 | 
			
		||||
  uint32 accountType=7;
 | 
			
		||||
  int32 number=8;
 | 
			
		||||
  string  notifyUrl=9;
 | 
			
		||||
  string extendParameter=10;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
message ZltxOrderRechargeQueryRes {
 | 
			
		||||
  string code=1;
 | 
			
		||||
  string message=2;
 | 
			
		||||
  string status = 3;
 | 
			
		||||
  string outTradeNo=4;
 | 
			
		||||
}
 | 
			
		||||
message ZltxOrderRechargeQueryReq {
 | 
			
		||||
  string merchantId = 1;
 | 
			
		||||
  uint64 timeStamp = 2;
 | 
			
		||||
  string sign = 3;
 | 
			
		||||
  string outTradeNo = 4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ZltxOrderRechargeReq {
 | 
			
		||||
  string merchantId = 1;
 | 
			
		||||
  string sign = 2;
 | 
			
		||||
  uint64 timeStamp = 3;
 | 
			
		||||
  string outTradeNo = 4;
 | 
			
		||||
  int64 productId=5;
 | 
			
		||||
  string mobile=6;
 | 
			
		||||
  uint32 accountType=7;
 | 
			
		||||
  int32 number=8;
 | 
			
		||||
  string  notifyUrl=9;
 | 
			
		||||
  string extendParameter=10;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
message GetResellerByAppIdReq {
 | 
			
		||||
  string appId = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message GetResellerByAppIdRes {
 | 
			
		||||
  int64  id=1;
 | 
			
		||||
  string merchantId=2;
 | 
			
		||||
  string resellerId=3;
 | 
			
		||||
  string appId=4;
 | 
			
		||||
  string posId=5;
 | 
			
		||||
  string storeId=6;
 | 
			
		||||
  int32  apiMod=7;
 | 
			
		||||
  string publicKey=8;
 | 
			
		||||
  string privateKey=9;
 | 
			
		||||
  string merchantPublicKey=10;
 | 
			
		||||
  string secretKey=11;
 | 
			
		||||
  string notifyUrl=12;
 | 
			
		||||
  string subscribeEvent=13;
 | 
			
		||||
  int32  status=14;
 | 
			
		||||
  string createTime=15;
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,368 @@
 | 
			
		|||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// - protoc-gen-go-grpc v1.3.0
 | 
			
		||||
// - protoc             v3.6.1
 | 
			
		||||
// source: transfer.proto
 | 
			
		||||
 | 
			
		||||
package transfer
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	context "context"
 | 
			
		||||
	grpc "google.golang.org/grpc"
 | 
			
		||||
	codes "google.golang.org/grpc/codes"
 | 
			
		||||
	status "google.golang.org/grpc/status"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// This is a compile-time assertion to ensure that this generated file
 | 
			
		||||
// is compatible with the grpc package it is being compiled against.
 | 
			
		||||
// Requires gRPC-Go v1.32.0 or later.
 | 
			
		||||
const _ = grpc.SupportPackageIsVersion7
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	Transfer_GetResellerByAppId_FullMethodName     = "/transfer.Transfer/getResellerByAppId"
 | 
			
		||||
	Transfer_ZltxOrderRecharge_FullMethodName      = "/transfer.Transfer/zltxOrderRecharge"
 | 
			
		||||
	Transfer_ZltxOrderRechargeQuery_FullMethodName = "/transfer.Transfer/zltxOrderRechargeQuery"
 | 
			
		||||
	Transfer_ZltxOrderCard_FullMethodName          = "/transfer.Transfer/zltxOrderCard"
 | 
			
		||||
	Transfer_ZltxOrderCardQuery_FullMethodName     = "/transfer.Transfer/zltxOrderCardQuery"
 | 
			
		||||
	Transfer_ZltxOrderSms_FullMethodName           = "/transfer.Transfer/zltxOrderSms"
 | 
			
		||||
	Transfer_ZltxRechargeInfo_FullMethodName       = "/transfer.Transfer/zltxRechargeInfo"
 | 
			
		||||
	Transfer_ZltxRechargeProduct_FullMethodName    = "/transfer.Transfer/zltxRechargeProduct"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TransferClient is the client API for Transfer service.
 | 
			
		||||
//
 | 
			
		||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 | 
			
		||||
type TransferClient interface {
 | 
			
		||||
	GetResellerByAppId(ctx context.Context, in *GetResellerByAppIdReq, opts ...grpc.CallOption) (*GetResellerByAppIdRes, error)
 | 
			
		||||
	ZltxOrderRecharge(ctx context.Context, in *ZltxOrderRechargeReq, opts ...grpc.CallOption) (*DefaultRes, error)
 | 
			
		||||
	ZltxOrderRechargeQuery(ctx context.Context, in *ZltxOrderRechargeQueryReq, opts ...grpc.CallOption) (*ZltxOrderRechargeQueryRes, error)
 | 
			
		||||
	ZltxOrderCard(ctx context.Context, in *ZltxOrderCardReq, opts ...grpc.CallOption) (*DefaultRes, error)
 | 
			
		||||
	ZltxOrderCardQuery(ctx context.Context, in *ZltxOrderCardQueryReq, opts ...grpc.CallOption) (*ZltxOrderCardQueryRes, error)
 | 
			
		||||
	ZltxOrderSms(ctx context.Context, in *ZltxOrderSmsReq, opts ...grpc.CallOption) (*ZltxOrderSmsRes, error)
 | 
			
		||||
	ZltxRechargeInfo(ctx context.Context, in *DefaultReq, opts ...grpc.CallOption) (*ZltxRechargeInfoRes, error)
 | 
			
		||||
	ZltxRechargeProduct(ctx context.Context, in *DefaultReq, opts ...grpc.CallOption) (*ZltxRechargeProductRes, error)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type transferClient struct {
 | 
			
		||||
	cc grpc.ClientConnInterface
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewTransferClient(cc grpc.ClientConnInterface) TransferClient {
 | 
			
		||||
	return &transferClient{cc}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *transferClient) GetResellerByAppId(ctx context.Context, in *GetResellerByAppIdReq, opts ...grpc.CallOption) (*GetResellerByAppIdRes, error) {
 | 
			
		||||
	out := new(GetResellerByAppIdRes)
 | 
			
		||||
	err := c.cc.Invoke(ctx, Transfer_GetResellerByAppId_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *transferClient) ZltxOrderRecharge(ctx context.Context, in *ZltxOrderRechargeReq, opts ...grpc.CallOption) (*DefaultRes, error) {
 | 
			
		||||
	out := new(DefaultRes)
 | 
			
		||||
	err := c.cc.Invoke(ctx, Transfer_ZltxOrderRecharge_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *transferClient) ZltxOrderRechargeQuery(ctx context.Context, in *ZltxOrderRechargeQueryReq, opts ...grpc.CallOption) (*ZltxOrderRechargeQueryRes, error) {
 | 
			
		||||
	out := new(ZltxOrderRechargeQueryRes)
 | 
			
		||||
	err := c.cc.Invoke(ctx, Transfer_ZltxOrderRechargeQuery_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *transferClient) ZltxOrderCard(ctx context.Context, in *ZltxOrderCardReq, opts ...grpc.CallOption) (*DefaultRes, error) {
 | 
			
		||||
	out := new(DefaultRes)
 | 
			
		||||
	err := c.cc.Invoke(ctx, Transfer_ZltxOrderCard_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *transferClient) ZltxOrderCardQuery(ctx context.Context, in *ZltxOrderCardQueryReq, opts ...grpc.CallOption) (*ZltxOrderCardQueryRes, error) {
 | 
			
		||||
	out := new(ZltxOrderCardQueryRes)
 | 
			
		||||
	err := c.cc.Invoke(ctx, Transfer_ZltxOrderCardQuery_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *transferClient) ZltxOrderSms(ctx context.Context, in *ZltxOrderSmsReq, opts ...grpc.CallOption) (*ZltxOrderSmsRes, error) {
 | 
			
		||||
	out := new(ZltxOrderSmsRes)
 | 
			
		||||
	err := c.cc.Invoke(ctx, Transfer_ZltxOrderSms_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *transferClient) ZltxRechargeInfo(ctx context.Context, in *DefaultReq, opts ...grpc.CallOption) (*ZltxRechargeInfoRes, error) {
 | 
			
		||||
	out := new(ZltxRechargeInfoRes)
 | 
			
		||||
	err := c.cc.Invoke(ctx, Transfer_ZltxRechargeInfo_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *transferClient) ZltxRechargeProduct(ctx context.Context, in *DefaultReq, opts ...grpc.CallOption) (*ZltxRechargeProductRes, error) {
 | 
			
		||||
	out := new(ZltxRechargeProductRes)
 | 
			
		||||
	err := c.cc.Invoke(ctx, Transfer_ZltxRechargeProduct_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TransferServer is the server API for Transfer service.
 | 
			
		||||
// All implementations must embed UnimplementedTransferServer
 | 
			
		||||
// for forward compatibility
 | 
			
		||||
type TransferServer interface {
 | 
			
		||||
	GetResellerByAppId(context.Context, *GetResellerByAppIdReq) (*GetResellerByAppIdRes, error)
 | 
			
		||||
	ZltxOrderRecharge(context.Context, *ZltxOrderRechargeReq) (*DefaultRes, error)
 | 
			
		||||
	ZltxOrderRechargeQuery(context.Context, *ZltxOrderRechargeQueryReq) (*ZltxOrderRechargeQueryRes, error)
 | 
			
		||||
	ZltxOrderCard(context.Context, *ZltxOrderCardReq) (*DefaultRes, error)
 | 
			
		||||
	ZltxOrderCardQuery(context.Context, *ZltxOrderCardQueryReq) (*ZltxOrderCardQueryRes, error)
 | 
			
		||||
	ZltxOrderSms(context.Context, *ZltxOrderSmsReq) (*ZltxOrderSmsRes, error)
 | 
			
		||||
	ZltxRechargeInfo(context.Context, *DefaultReq) (*ZltxRechargeInfoRes, error)
 | 
			
		||||
	ZltxRechargeProduct(context.Context, *DefaultReq) (*ZltxRechargeProductRes, error)
 | 
			
		||||
	mustEmbedUnimplementedTransferServer()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnimplementedTransferServer must be embedded to have forward compatible implementations.
 | 
			
		||||
type UnimplementedTransferServer struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (UnimplementedTransferServer) GetResellerByAppId(context.Context, *GetResellerByAppIdReq) (*GetResellerByAppIdRes, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method GetResellerByAppId not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedTransferServer) ZltxOrderRecharge(context.Context, *ZltxOrderRechargeReq) (*DefaultRes, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method ZltxOrderRecharge not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedTransferServer) ZltxOrderRechargeQuery(context.Context, *ZltxOrderRechargeQueryReq) (*ZltxOrderRechargeQueryRes, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method ZltxOrderRechargeQuery not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedTransferServer) ZltxOrderCard(context.Context, *ZltxOrderCardReq) (*DefaultRes, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method ZltxOrderCard not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedTransferServer) ZltxOrderCardQuery(context.Context, *ZltxOrderCardQueryReq) (*ZltxOrderCardQueryRes, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method ZltxOrderCardQuery not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedTransferServer) ZltxOrderSms(context.Context, *ZltxOrderSmsReq) (*ZltxOrderSmsRes, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method ZltxOrderSms not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedTransferServer) ZltxRechargeInfo(context.Context, *DefaultReq) (*ZltxRechargeInfoRes, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method ZltxRechargeInfo not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedTransferServer) ZltxRechargeProduct(context.Context, *DefaultReq) (*ZltxRechargeProductRes, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method ZltxRechargeProduct not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedTransferServer) mustEmbedUnimplementedTransferServer() {}
 | 
			
		||||
 | 
			
		||||
// UnsafeTransferServer may be embedded to opt out of forward compatibility for this service.
 | 
			
		||||
// Use of this interface is not recommended, as added methods to TransferServer will
 | 
			
		||||
// result in compilation errors.
 | 
			
		||||
type UnsafeTransferServer interface {
 | 
			
		||||
	mustEmbedUnimplementedTransferServer()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RegisterTransferServer(s grpc.ServiceRegistrar, srv TransferServer) {
 | 
			
		||||
	s.RegisterService(&Transfer_ServiceDesc, srv)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _Transfer_GetResellerByAppId_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(GetResellerByAppIdReq)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(TransferServer).GetResellerByAppId(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: Transfer_GetResellerByAppId_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(TransferServer).GetResellerByAppId(ctx, req.(*GetResellerByAppIdReq))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _Transfer_ZltxOrderRecharge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(ZltxOrderRechargeReq)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderRecharge(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: Transfer_ZltxOrderRecharge_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderRecharge(ctx, req.(*ZltxOrderRechargeReq))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _Transfer_ZltxOrderRechargeQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(ZltxOrderRechargeQueryReq)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderRechargeQuery(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: Transfer_ZltxOrderRechargeQuery_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderRechargeQuery(ctx, req.(*ZltxOrderRechargeQueryReq))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _Transfer_ZltxOrderCard_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(ZltxOrderCardReq)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderCard(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: Transfer_ZltxOrderCard_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderCard(ctx, req.(*ZltxOrderCardReq))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _Transfer_ZltxOrderCardQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(ZltxOrderCardQueryReq)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderCardQuery(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: Transfer_ZltxOrderCardQuery_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderCardQuery(ctx, req.(*ZltxOrderCardQueryReq))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _Transfer_ZltxOrderSms_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(ZltxOrderSmsReq)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderSms(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: Transfer_ZltxOrderSms_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(TransferServer).ZltxOrderSms(ctx, req.(*ZltxOrderSmsReq))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _Transfer_ZltxRechargeInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(DefaultReq)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(TransferServer).ZltxRechargeInfo(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: Transfer_ZltxRechargeInfo_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(TransferServer).ZltxRechargeInfo(ctx, req.(*DefaultReq))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _Transfer_ZltxRechargeProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(DefaultReq)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(TransferServer).ZltxRechargeProduct(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: Transfer_ZltxRechargeProduct_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(TransferServer).ZltxRechargeProduct(ctx, req.(*DefaultReq))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Transfer_ServiceDesc is the grpc.ServiceDesc for Transfer service.
 | 
			
		||||
// It's only intended for direct use with grpc.RegisterService,
 | 
			
		||||
// and not to be introspected or modified (even as a copy)
 | 
			
		||||
var Transfer_ServiceDesc = grpc.ServiceDesc{
 | 
			
		||||
	ServiceName: "transfer.Transfer",
 | 
			
		||||
	HandlerType: (*TransferServer)(nil),
 | 
			
		||||
	Methods: []grpc.MethodDesc{
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "getResellerByAppId",
 | 
			
		||||
			Handler:    _Transfer_GetResellerByAppId_Handler,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "zltxOrderRecharge",
 | 
			
		||||
			Handler:    _Transfer_ZltxOrderRecharge_Handler,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "zltxOrderRechargeQuery",
 | 
			
		||||
			Handler:    _Transfer_ZltxOrderRechargeQuery_Handler,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "zltxOrderCard",
 | 
			
		||||
			Handler:    _Transfer_ZltxOrderCard_Handler,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "zltxOrderCardQuery",
 | 
			
		||||
			Handler:    _Transfer_ZltxOrderCardQuery_Handler,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "zltxOrderSms",
 | 
			
		||||
			Handler:    _Transfer_ZltxOrderSms_Handler,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "zltxRechargeInfo",
 | 
			
		||||
			Handler:    _Transfer_ZltxRechargeInfo_Handler,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "zltxRechargeProduct",
 | 
			
		||||
			Handler:    _Transfer_ZltxRechargeProduct_Handler,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	Streams:  []grpc.StreamDesc{},
 | 
			
		||||
	Metadata: "transfer.proto",
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/nacos-group/nacos-sdk-go/v2/common/constant"
 | 
			
		||||
	"github.com/zeromicro/zero-contrib/zrpc/registry/nacos"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/config"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/server"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/internal/svc"
 | 
			
		||||
	"trasfer_middleware/cmd/rpc/pb/transfer"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/conf"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/service"
 | 
			
		||||
	"github.com/zeromicro/go-zero/zrpc"
 | 
			
		||||
	"google.golang.org/grpc"
 | 
			
		||||
	"google.golang.org/grpc/reflection"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var configFile = flag.String("f", "../../config/transfer.yaml", "the config file")
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	var c config.Config
 | 
			
		||||
	conf.MustLoad(*configFile, &c)
 | 
			
		||||
	ctx := svc.NewServiceContext(c)
 | 
			
		||||
 | 
			
		||||
	s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
 | 
			
		||||
		transfer.RegisterTransferServer(grpcServer, server.NewTransferServer(ctx))
 | 
			
		||||
		if c.Mode == service.DevMode || c.Mode == service.TestMode {
 | 
			
		||||
			reflection.Register(grpcServer)
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
	registerNacos(&c)
 | 
			
		||||
	defer s.Stop()
 | 
			
		||||
 | 
			
		||||
	fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
 | 
			
		||||
	s.Start()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func registerNacos(c *config.Config) {
 | 
			
		||||
	sc := []constant.ServerConfig{}
 | 
			
		||||
	for _, v := range c.Nacos.Hosts {
 | 
			
		||||
		splitSlice := strings.Split(v, ":")
 | 
			
		||||
		port, _ := strconv.Atoi(splitSlice[1])
 | 
			
		||||
		sc = append(sc, *constant.NewServerConfig(splitSlice[0], uint64(port)))
 | 
			
		||||
	}
 | 
			
		||||
	cc := &constant.ClientConfig{
 | 
			
		||||
		NamespaceId:         c.Nacos.NameSpace,
 | 
			
		||||
		TimeoutMs:           c.Nacos.TimeOut,
 | 
			
		||||
		NotLoadCacheAtStart: true,
 | 
			
		||||
		LogDir:              "/tmp/nacos/log",
 | 
			
		||||
		CacheDir:            "/tmp/nacos/cache",
 | 
			
		||||
		LogLevel:            "debug",
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	opts := nacos.NewNacosConfig(c.Nacos.ServiceName, c.ListenOn, sc, cc)
 | 
			
		||||
	err := nacos.RegisterService(opts)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
package marketReseller
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/cache"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var _ ResellerMerchantModel = (*customResellerMerchantModel)(nil)
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
	// ResellerMerchantModel is an interface to be customized, add more methods here,
 | 
			
		||||
	// and implement the added methods in customResellerMerchantModel.
 | 
			
		||||
	ResellerMerchantModel interface {
 | 
			
		||||
		resellerMerchantModel
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	customResellerMerchantModel struct {
 | 
			
		||||
		*defaultResellerMerchantModel
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NewResellerMerchantModel returns a model for the database table.
 | 
			
		||||
func NewResellerMerchantModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) ResellerMerchantModel {
 | 
			
		||||
	return &customResellerMerchantModel{
 | 
			
		||||
		defaultResellerMerchantModel: newResellerMerchantModel(conn, c, opts...),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,208 @@
 | 
			
		|||
// Code generated by goctl. DO NOT EDIT.
 | 
			
		||||
 | 
			
		||||
package marketReseller
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/builder"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/cache"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlc"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stringx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	resellerMerchantFieldNames          = builder.RawFieldNames(&ResellerMerchant{})
 | 
			
		||||
	resellerMerchantRows                = strings.Join(resellerMerchantFieldNames, ",")
 | 
			
		||||
	resellerMerchantRowsExpectAutoSet   = strings.Join(stringx.Remove(resellerMerchantFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
 | 
			
		||||
	resellerMerchantRowsWithPlaceHolder = strings.Join(stringx.Remove(resellerMerchantFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
 | 
			
		||||
 | 
			
		||||
	cacheResellerResellerMerchantIdPrefix         = "cache:reseller:resellerMerchant:id:"
 | 
			
		||||
	cacheResellerResellerMerchantAppIdPrefix      = "cache:reseller:resellerMerchant:appId:"
 | 
			
		||||
	cacheResellerResellerMerchantMerchantIdPrefix = "cache:reseller:resellerMerchant:merchantId:"
 | 
			
		||||
	cacheResellerResellerMerchantPosIdPrefix      = "cache:reseller:resellerMerchant:posId:"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
	resellerMerchantModel interface {
 | 
			
		||||
		Insert(ctx context.Context, data *ResellerMerchant) (sql.Result, error)
 | 
			
		||||
		FindOne(ctx context.Context, id uint64) (*ResellerMerchant, error)
 | 
			
		||||
		FindOneByAppId(ctx context.Context, appId string) (*ResellerMerchant, error)
 | 
			
		||||
		FindOneByMerchantId(ctx context.Context, merchantId string) (*ResellerMerchant, error)
 | 
			
		||||
		FindOneByPosId(ctx context.Context, posId string) (*ResellerMerchant, error)
 | 
			
		||||
		Update(ctx context.Context, data *ResellerMerchant) error
 | 
			
		||||
		Delete(ctx context.Context, id uint64) error
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	defaultResellerMerchantModel struct {
 | 
			
		||||
		sqlc.CachedConn
 | 
			
		||||
		table string
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ResellerMerchant struct {
 | 
			
		||||
		Id                uint64         `db:"id"`
 | 
			
		||||
		MerchantId        string         `db:"merchant_id"`         // 商户号
 | 
			
		||||
		ResellerId        uint64         `db:"reseller_id"`         // 分销商id
 | 
			
		||||
		PosId             string         `db:"pos_id"`              // 平台id 目前都是单平台
 | 
			
		||||
		AppId             string         `db:"app_id"`              // appid。目前都是单应用, 通知地址 事件地址都针对于这一个应用配置
 | 
			
		||||
		StoreId           string         `db:"store_id"`            // 没有门店,兴业银行需求。 当作后期的扩展字段
 | 
			
		||||
		ApiMode           int64          `db:"api_mode"`            // 对接类型 1-RSA+标准接口返回【默认】2-兴业银行模式
 | 
			
		||||
		PublicKey         sql.NullString `db:"public_key"`          // 公钥
 | 
			
		||||
		PrivateKey        sql.NullString `db:"private_key"`         // 私钥
 | 
			
		||||
		MerchantPublicKey sql.NullString `db:"merchant_public_key"` // 客户侧公钥
 | 
			
		||||
		SecretKey         string         `db:"secret_key"`          // body加解密密钥
 | 
			
		||||
		NotifyUrl         sql.NullString `db:"notify_url"`          // 通知地址配置
 | 
			
		||||
		SubscribeEvent    sql.NullString `db:"subscribe_event"`     // 订阅事件
 | 
			
		||||
		Status            uint64         `db:"status"`              // 状态 1正常 2禁用
 | 
			
		||||
		UpdateTime        sql.NullTime   `db:"update_time"`         // 编辑时间
 | 
			
		||||
		CreateTime        time.Time      `db:"create_time"`         // 创建时间
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newResellerMerchantModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *defaultResellerMerchantModel {
 | 
			
		||||
	return &defaultResellerMerchantModel{
 | 
			
		||||
		CachedConn: sqlc.NewConn(conn, c, opts...),
 | 
			
		||||
		table:      "`reseller_merchant`",
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) Delete(ctx context.Context, id uint64) error {
 | 
			
		||||
	data, err := m.FindOne(ctx, id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resellerResellerMerchantAppIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantAppIdPrefix, data.AppId)
 | 
			
		||||
	resellerResellerMerchantIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantIdPrefix, id)
 | 
			
		||||
	resellerResellerMerchantMerchantIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantMerchantIdPrefix, data.MerchantId)
 | 
			
		||||
	resellerResellerMerchantPosIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantPosIdPrefix, data.PosId)
 | 
			
		||||
	_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, id)
 | 
			
		||||
	}, resellerResellerMerchantAppIdKey, resellerResellerMerchantIdKey, resellerResellerMerchantMerchantIdKey, resellerResellerMerchantPosIdKey)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) FindOne(ctx context.Context, id uint64) (*ResellerMerchant, error) {
 | 
			
		||||
	resellerResellerMerchantIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantIdPrefix, id)
 | 
			
		||||
	var resp ResellerMerchant
 | 
			
		||||
	err := m.QueryRowCtx(ctx, &resp, resellerResellerMerchantIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
 | 
			
		||||
		query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", resellerMerchantRows, m.table)
 | 
			
		||||
		return conn.QueryRowCtx(ctx, v, query, id)
 | 
			
		||||
	})
 | 
			
		||||
	switch err {
 | 
			
		||||
	case nil:
 | 
			
		||||
		return &resp, nil
 | 
			
		||||
	case sqlc.ErrNotFound:
 | 
			
		||||
		return nil, ErrNotFound
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) FindOneByAppId(ctx context.Context, appId string) (*ResellerMerchant, error) {
 | 
			
		||||
	resellerResellerMerchantAppIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantAppIdPrefix, appId)
 | 
			
		||||
	var resp ResellerMerchant
 | 
			
		||||
	err := m.QueryRowIndexCtx(ctx, &resp, resellerResellerMerchantAppIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
 | 
			
		||||
		query := fmt.Sprintf("select %s from %s where `app_id` = ? limit 1", resellerMerchantRows, m.table)
 | 
			
		||||
		if err := conn.QueryRowCtx(ctx, &resp, query, appId); err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		return resp.Id, nil
 | 
			
		||||
	}, m.queryPrimary)
 | 
			
		||||
	switch err {
 | 
			
		||||
	case nil:
 | 
			
		||||
		return &resp, nil
 | 
			
		||||
	case sqlc.ErrNotFound:
 | 
			
		||||
		return nil, ErrNotFound
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) FindOneByMerchantId(ctx context.Context, merchantId string) (*ResellerMerchant, error) {
 | 
			
		||||
	resellerResellerMerchantMerchantIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantMerchantIdPrefix, merchantId)
 | 
			
		||||
	var resp ResellerMerchant
 | 
			
		||||
	err := m.QueryRowIndexCtx(ctx, &resp, resellerResellerMerchantMerchantIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
 | 
			
		||||
		query := fmt.Sprintf("select %s from %s where `merchant_id` = ? limit 1", resellerMerchantRows, m.table)
 | 
			
		||||
		if err := conn.QueryRowCtx(ctx, &resp, query, merchantId); err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		return resp.Id, nil
 | 
			
		||||
	}, m.queryPrimary)
 | 
			
		||||
	switch err {
 | 
			
		||||
	case nil:
 | 
			
		||||
		return &resp, nil
 | 
			
		||||
	case sqlc.ErrNotFound:
 | 
			
		||||
		return nil, ErrNotFound
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) FindOneByPosId(ctx context.Context, posId string) (*ResellerMerchant, error) {
 | 
			
		||||
	resellerResellerMerchantPosIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantPosIdPrefix, posId)
 | 
			
		||||
	var resp ResellerMerchant
 | 
			
		||||
	err := m.QueryRowIndexCtx(ctx, &resp, resellerResellerMerchantPosIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
 | 
			
		||||
		query := fmt.Sprintf("select %s from %s where `pos_id` = ? limit 1", resellerMerchantRows, m.table)
 | 
			
		||||
		if err := conn.QueryRowCtx(ctx, &resp, query, posId); err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		return resp.Id, nil
 | 
			
		||||
	}, m.queryPrimary)
 | 
			
		||||
	switch err {
 | 
			
		||||
	case nil:
 | 
			
		||||
		return &resp, nil
 | 
			
		||||
	case sqlc.ErrNotFound:
 | 
			
		||||
		return nil, ErrNotFound
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) Insert(ctx context.Context, data *ResellerMerchant) (sql.Result, error) {
 | 
			
		||||
	resellerResellerMerchantAppIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantAppIdPrefix, data.AppId)
 | 
			
		||||
	resellerResellerMerchantIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantIdPrefix, data.Id)
 | 
			
		||||
	resellerResellerMerchantMerchantIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantMerchantIdPrefix, data.MerchantId)
 | 
			
		||||
	resellerResellerMerchantPosIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantPosIdPrefix, data.PosId)
 | 
			
		||||
	ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, resellerMerchantRowsExpectAutoSet)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, data.MerchantId, data.ResellerId, data.PosId, data.AppId, data.StoreId, data.ApiMode, data.PublicKey, data.PrivateKey, data.MerchantPublicKey, data.SecretKey, data.NotifyUrl, data.SubscribeEvent, data.Status)
 | 
			
		||||
	}, resellerResellerMerchantAppIdKey, resellerResellerMerchantIdKey, resellerResellerMerchantMerchantIdKey, resellerResellerMerchantPosIdKey)
 | 
			
		||||
	return ret, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) Update(ctx context.Context, newData *ResellerMerchant) error {
 | 
			
		||||
	data, err := m.FindOne(ctx, newData.Id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resellerResellerMerchantAppIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantAppIdPrefix, data.AppId)
 | 
			
		||||
	resellerResellerMerchantIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantIdPrefix, data.Id)
 | 
			
		||||
	resellerResellerMerchantMerchantIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantMerchantIdPrefix, data.MerchantId)
 | 
			
		||||
	resellerResellerMerchantPosIdKey := fmt.Sprintf("%s%v", cacheResellerResellerMerchantPosIdPrefix, data.PosId)
 | 
			
		||||
	_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, resellerMerchantRowsWithPlaceHolder)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, newData.MerchantId, newData.ResellerId, newData.PosId, newData.AppId, newData.StoreId, newData.ApiMode, newData.PublicKey, newData.PrivateKey, newData.MerchantPublicKey, newData.SecretKey, newData.NotifyUrl, newData.SubscribeEvent, newData.Status, newData.Id)
 | 
			
		||||
	}, resellerResellerMerchantAppIdKey, resellerResellerMerchantIdKey, resellerResellerMerchantMerchantIdKey, resellerResellerMerchantPosIdKey)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) formatPrimary(primary any) string {
 | 
			
		||||
	return fmt.Sprintf("%s%v", cacheResellerResellerMerchantIdPrefix, primary)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error {
 | 
			
		||||
	query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", resellerMerchantRows, m.table)
 | 
			
		||||
	return conn.QueryRowCtx(ctx, v, query, primary)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerMerchantModel) tableName() string {
 | 
			
		||||
	return m.table
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
package marketReseller
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/cache"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var _ ResellerModel = (*customResellerModel)(nil)
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
	// ResellerModel is an interface to be customized, add more methods here,
 | 
			
		||||
	// and implement the added methods in customResellerModel.
 | 
			
		||||
	ResellerModel interface {
 | 
			
		||||
		resellerModel
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	customResellerModel struct {
 | 
			
		||||
		*defaultResellerModel
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NewResellerModel returns a model for the database table.
 | 
			
		||||
func NewResellerModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) ResellerModel {
 | 
			
		||||
	return &customResellerModel{
 | 
			
		||||
		defaultResellerModel: newResellerModel(conn, c, opts...),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,134 @@
 | 
			
		|||
// Code generated by goctl. DO NOT EDIT.
 | 
			
		||||
 | 
			
		||||
package marketReseller
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/builder"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/cache"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlc"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stringx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	resellerFieldNames          = builder.RawFieldNames(&Reseller{})
 | 
			
		||||
	resellerRows                = strings.Join(resellerFieldNames, ",")
 | 
			
		||||
	resellerRowsExpectAutoSet   = strings.Join(stringx.Remove(resellerFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
 | 
			
		||||
	resellerRowsWithPlaceHolder = strings.Join(stringx.Remove(resellerFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
 | 
			
		||||
 | 
			
		||||
	cacheResellerResellerIdPrefix = "cache:reseller:reseller:id:"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
	resellerModel interface {
 | 
			
		||||
		Insert(ctx context.Context, data *Reseller) (sql.Result, error)
 | 
			
		||||
		FindOne(ctx context.Context, id uint64) (*Reseller, error)
 | 
			
		||||
		Update(ctx context.Context, data *Reseller) error
 | 
			
		||||
		Delete(ctx context.Context, id uint64) error
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	defaultResellerModel struct {
 | 
			
		||||
		sqlc.CachedConn
 | 
			
		||||
		table string
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Reseller struct {
 | 
			
		||||
		Id               uint64       `db:"id"`                 // 主键
 | 
			
		||||
		Creator          int64        `db:"creator"`            // 操作人员
 | 
			
		||||
		Code             string       `db:"code"`               // 分销商编号
 | 
			
		||||
		Name             string       `db:"name"`               // 分销商名称
 | 
			
		||||
		Subject          string       `db:"subject"`            // 分销商主体
 | 
			
		||||
		Account          string       `db:"account"`            // 登录账号
 | 
			
		||||
		Password         string       `db:"password"`           // 登录密码
 | 
			
		||||
		Status           uint64       `db:"status"`             // 分销商账号状态
 | 
			
		||||
		HeadImg          string       `db:"head_img"`           // 头像
 | 
			
		||||
		SalesmanId       uint64       `db:"salesman_id"`        // 销售人员ID,后台用户表ID
 | 
			
		||||
		SalesmanName     string       `db:"salesman_name"`      // 销售人员名称
 | 
			
		||||
		CompanyId        uint64       `db:"company_id"`         // 所属公司,公司表ID
 | 
			
		||||
		CompanyName      string       `db:"company_name"`       // 公司名称
 | 
			
		||||
		IdentityType     uint64       `db:"identity_type"`      // 身份类型
 | 
			
		||||
		Balance          float64      `db:"balance"`            // 分销商余额
 | 
			
		||||
		BalanceWarning   float64      `db:"balance_warning"`    // 余额预警
 | 
			
		||||
		FrozenAmount     float64      `db:"frozen_amount"`      // 冻结金额
 | 
			
		||||
		CreditAmount     float64      `db:"credit_amount"`      // 授信金额
 | 
			
		||||
		TotalConsumption float64      `db:"total_consumption"`  // 累计消费
 | 
			
		||||
		ContactName      string       `db:"contact_name"`       // 联系人名称
 | 
			
		||||
		ContactPhone     string       `db:"contact_phone"`      // 联系人电话
 | 
			
		||||
		ContactEmail     string       `db:"contact_email"`      // 联系人Email,多个逗号(,)用逗号分开
 | 
			
		||||
		CreateTime       time.Time    `db:"create_time"`        // 创建时间
 | 
			
		||||
		UpdateTime       sql.NullTime `db:"update_time"`        // 编辑时间
 | 
			
		||||
		DeleteTime       sql.NullTime `db:"delete_time"`        // 删除时间
 | 
			
		||||
		DirectResellerId uint64       `db:"direct_reseller_id"` // 直连天下分销商映射ID
 | 
			
		||||
		MapTime          sql.NullTime `db:"map_time"`           // 映射时间
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newResellerModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *defaultResellerModel {
 | 
			
		||||
	return &defaultResellerModel{
 | 
			
		||||
		CachedConn: sqlc.NewConn(conn, c, opts...),
 | 
			
		||||
		table:      "`reseller`",
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerModel) Delete(ctx context.Context, id uint64) error {
 | 
			
		||||
	resellerResellerIdKey := fmt.Sprintf("%s%v", cacheResellerResellerIdPrefix, id)
 | 
			
		||||
	_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, id)
 | 
			
		||||
	}, resellerResellerIdKey)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerModel) FindOne(ctx context.Context, id uint64) (*Reseller, error) {
 | 
			
		||||
	resellerResellerIdKey := fmt.Sprintf("%s%v", cacheResellerResellerIdPrefix, id)
 | 
			
		||||
	var resp Reseller
 | 
			
		||||
	err := m.QueryRowCtx(ctx, &resp, resellerResellerIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
 | 
			
		||||
		query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", resellerRows, m.table)
 | 
			
		||||
		return conn.QueryRowCtx(ctx, v, query, id)
 | 
			
		||||
	})
 | 
			
		||||
	switch err {
 | 
			
		||||
	case nil:
 | 
			
		||||
		return &resp, nil
 | 
			
		||||
	case sqlc.ErrNotFound:
 | 
			
		||||
		return nil, ErrNotFound
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerModel) Insert(ctx context.Context, data *Reseller) (sql.Result, error) {
 | 
			
		||||
	resellerResellerIdKey := fmt.Sprintf("%s%v", cacheResellerResellerIdPrefix, data.Id)
 | 
			
		||||
	ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, resellerRowsExpectAutoSet)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, data.Creator, data.Code, data.Name, data.Subject, data.Account, data.Password, data.Status, data.HeadImg, data.SalesmanId, data.SalesmanName, data.CompanyId, data.CompanyName, data.IdentityType, data.Balance, data.BalanceWarning, data.FrozenAmount, data.CreditAmount, data.TotalConsumption, data.ContactName, data.ContactPhone, data.ContactEmail, data.DeleteTime, data.DirectResellerId, data.MapTime)
 | 
			
		||||
	}, resellerResellerIdKey)
 | 
			
		||||
	return ret, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerModel) Update(ctx context.Context, data *Reseller) error {
 | 
			
		||||
	resellerResellerIdKey := fmt.Sprintf("%s%v", cacheResellerResellerIdPrefix, data.Id)
 | 
			
		||||
	_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, resellerRowsWithPlaceHolder)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, data.Creator, data.Code, data.Name, data.Subject, data.Account, data.Password, data.Status, data.HeadImg, data.SalesmanId, data.SalesmanName, data.CompanyId, data.CompanyName, data.IdentityType, data.Balance, data.BalanceWarning, data.FrozenAmount, data.CreditAmount, data.TotalConsumption, data.ContactName, data.ContactPhone, data.ContactEmail, data.DeleteTime, data.DirectResellerId, data.MapTime, data.Id)
 | 
			
		||||
	}, resellerResellerIdKey)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerModel) formatPrimary(primary any) string {
 | 
			
		||||
	return fmt.Sprintf("%s%v", cacheResellerResellerIdPrefix, primary)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error {
 | 
			
		||||
	query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", resellerRows, m.table)
 | 
			
		||||
	return conn.QueryRowCtx(ctx, v, query, primary)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultResellerModel) tableName() string {
 | 
			
		||||
	return m.table
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
package marketReseller
 | 
			
		||||
 | 
			
		||||
import "github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
 | 
			
		||||
var ErrNotFound = sqlx.ErrNotFound
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
package genModel
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/cache"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var _ ServerClientModel = (*customServerClientModel)(nil)
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
	// ServerClientModel is an interface to be customized, add more methods here,
 | 
			
		||||
	// and implement the added methods in customServerClientModel.
 | 
			
		||||
	ServerClientModel interface {
 | 
			
		||||
		serverClientModel
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	customServerClientModel struct {
 | 
			
		||||
		*defaultServerClientModel
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NewServerClientModel returns a model for the database table.
 | 
			
		||||
func NewServerClientModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) ServerClientModel {
 | 
			
		||||
	return &customServerClientModel{
 | 
			
		||||
		defaultServerClientModel: newServerClientModel(conn, c, opts...),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,134 @@
 | 
			
		|||
// Code generated by goctl. DO NOT EDIT.
 | 
			
		||||
 | 
			
		||||
package genModel
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/builder"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/cache"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlc"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stringx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	serverClientFieldNames          = builder.RawFieldNames(&ServerClient{})
 | 
			
		||||
	serverClientRows                = strings.Join(serverClientFieldNames, ",")
 | 
			
		||||
	serverClientRowsExpectAutoSet   = strings.Join(stringx.Remove(serverClientFieldNames, "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
 | 
			
		||||
	serverClientRowsWithPlaceHolder = strings.Join(stringx.Remove(serverClientFieldNames, "`client_id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
 | 
			
		||||
 | 
			
		||||
	cacheTransferServerClientClientIdPrefix = "cache:transfer:serverClient:clientId:"
 | 
			
		||||
	cacheTransferServerClientClientIndexPrefix = "cache:transfer:serverClient:clientIndex:"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
	serverClientModel interface {
 | 
			
		||||
		Insert(ctx context.Context, data *ServerClient) (sql.Result, error)
 | 
			
		||||
		FindOne(ctx context.Context, clientId int64) (*ServerClient, error)
 | 
			
		||||
		Update(ctx context.Context, data *ServerClient) error
 | 
			
		||||
		Delete(ctx context.Context, clientId int64) error
 | 
			
		||||
		FindOneByIndex(ctx context.Context, index string) (*ServerClient, error)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	defaultServerClientModel struct {
 | 
			
		||||
		sqlc.CachedConn
 | 
			
		||||
		table string
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ServerClient struct {
 | 
			
		||||
		ClientId       int64     `db:"client_id"`
 | 
			
		||||
		ClientName     string    `db:"client_name"`  // 客户名称
 | 
			
		||||
		ClientIndex    string    `db:"client_index"` // 客户索引
 | 
			
		||||
		ZltxMerchantId int64     `db:"zltx_merchant_id"`
 | 
			
		||||
		ZltxSecret     string    `db:"zltx_secret"`
 | 
			
		||||
		CreateTime     time.Time `db:"create_time"`
 | 
			
		||||
		UpdateTime     time.Time `db:"update_time"`
 | 
			
		||||
		Status         int64     `db:"status"`
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newServerClientModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *defaultServerClientModel {
 | 
			
		||||
	return &defaultServerClientModel{
 | 
			
		||||
		CachedConn: sqlc.NewConn(conn, c, opts...),
 | 
			
		||||
		table:      "`server_client`",
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultServerClientModel) Delete(ctx context.Context, clientId int64) error {
 | 
			
		||||
	transferServerClientClientIdKey := fmt.Sprintf("%s%v", cacheTransferServerClientClientIdPrefix, clientId)
 | 
			
		||||
	_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("delete from %s where `client_id` = ?", m.table)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, clientId)
 | 
			
		||||
	}, transferServerClientClientIdKey)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultServerClientModel) FindOne(ctx context.Context, clientId int64) (*ServerClient, error) {
 | 
			
		||||
	transferServerClientClientIdKey := fmt.Sprintf("%s%v", cacheTransferServerClientClientIdPrefix, clientId)
 | 
			
		||||
	var resp ServerClient
 | 
			
		||||
	err := m.QueryRowCtx(ctx, &resp, transferServerClientClientIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
 | 
			
		||||
		query := fmt.Sprintf("select %s from %s where `client_id` = ? limit 1", serverClientRows, m.table)
 | 
			
		||||
		return conn.QueryRowCtx(ctx, v, query, clientId)
 | 
			
		||||
	})
 | 
			
		||||
	switch err {
 | 
			
		||||
	case nil:
 | 
			
		||||
		return &resp, nil
 | 
			
		||||
	case sqlc.ErrNotFound:
 | 
			
		||||
		return nil, ErrNotFound
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultServerClientModel) FindOneByIndex(ctx context.Context, index string) (*ServerClient, error) {
 | 
			
		||||
	transferServerClientClientIndexKey := fmt.Sprintf("%s%v", cacheTransferServerClientClientIdPrefix, index)
 | 
			
		||||
	var resp ServerClient
 | 
			
		||||
	err := m.QueryRowCtx(ctx, &resp, transferServerClientClientIndexKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
 | 
			
		||||
		query := fmt.Sprintf("select %s from %s where `client_id` = ? limit 1", serverClientRows, m.table)
 | 
			
		||||
		return conn.QueryRowCtx(ctx, v, query, index)
 | 
			
		||||
	})
 | 
			
		||||
	switch err {
 | 
			
		||||
	case nil:
 | 
			
		||||
		return &resp, nil
 | 
			
		||||
	case sqlc.ErrNotFound:
 | 
			
		||||
		return nil, ErrNotFound
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultServerClientModel) Insert(ctx context.Context, data *ServerClient) (sql.Result, error) {
 | 
			
		||||
	transferServerClientClientIdKey := fmt.Sprintf("%s%v", cacheTransferServerClientClientIdPrefix, data.ClientId)
 | 
			
		||||
	ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, serverClientRowsExpectAutoSet)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, data.ClientId, data.ClientName, data.ClientIndex, data.ZltxMerchantId, data.ZltxSecret, data.Status)
 | 
			
		||||
	}, transferServerClientClientIdKey)
 | 
			
		||||
	return ret, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultServerClientModel) Update(ctx context.Context, data *ServerClient) error {
 | 
			
		||||
	transferServerClientClientIdKey := fmt.Sprintf("%s%v", cacheTransferServerClientClientIdPrefix, data.ClientId)
 | 
			
		||||
	_, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
 | 
			
		||||
		query := fmt.Sprintf("update %s set %s where `client_id` = ?", m.table, serverClientRowsWithPlaceHolder)
 | 
			
		||||
		return conn.ExecCtx(ctx, query, data.ClientName, data.ClientIndex, data.ZltxMerchantId, data.ZltxSecret, data.Status, data.ClientId)
 | 
			
		||||
	}, transferServerClientClientIdKey)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultServerClientModel) formatPrimary(primary any) string {
 | 
			
		||||
	return fmt.Sprintf("%s%v", cacheTransferServerClientClientIdPrefix, primary)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultServerClientModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error {
 | 
			
		||||
	query := fmt.Sprintf("select %s from %s where `client_id` = ? limit 1", serverClientRows, m.table)
 | 
			
		||||
	return conn.QueryRowCtx(ctx, v, query, primary)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *defaultServerClientModel) tableName() string {
 | 
			
		||||
	return m.table
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
package genModel
 | 
			
		||||
 | 
			
		||||
import "github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
 | 
			
		||||
var ErrNotFound = sqlx.ErrNotFound
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,103 @@
 | 
			
		|||
module trasfer_middleware
 | 
			
		||||
 | 
			
		||||
go 1.21
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/zeromicro/go-zero v1.6.5
 | 
			
		||||
	github.com/zeromicro/zero-contrib/zrpc/registry/nacos v0.0.0-20231030135404-af9ae855016f
 | 
			
		||||
	google.golang.org/grpc v1.63.2
 | 
			
		||||
	google.golang.org/protobuf v1.34.1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	filippo.io/edwards25519 v1.1.0 // indirect
 | 
			
		||||
	github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 // indirect
 | 
			
		||||
	github.com/beorn7/perks v1.0.1 // indirect
 | 
			
		||||
	github.com/buger/jsonparser v1.1.1 // indirect
 | 
			
		||||
	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 | 
			
		||||
	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 | 
			
		||||
	github.com/coreos/go-semver v0.3.1 // indirect
 | 
			
		||||
	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 | 
			
		||||
	github.com/davecgh/go-spew v1.1.1 // indirect
 | 
			
		||||
	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 | 
			
		||||
	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
 | 
			
		||||
	github.com/fatih/color v1.16.0 // indirect
 | 
			
		||||
	github.com/go-logr/logr v1.3.0 // indirect
 | 
			
		||||
	github.com/go-logr/stdr v1.2.2 // indirect
 | 
			
		||||
	github.com/go-openapi/jsonpointer v0.19.6 // indirect
 | 
			
		||||
	github.com/go-openapi/jsonreference v0.20.2 // indirect
 | 
			
		||||
	github.com/go-openapi/swag v0.22.4 // indirect
 | 
			
		||||
	github.com/go-sql-driver/mysql v1.8.1 // indirect
 | 
			
		||||
	github.com/gogo/protobuf v1.3.2 // indirect
 | 
			
		||||
	github.com/golang/mock v1.6.0 // indirect
 | 
			
		||||
	github.com/golang/protobuf v1.5.4 // indirect
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8 // indirect
 | 
			
		||||
	github.com/google/go-cmp v0.6.0 // indirect
 | 
			
		||||
	github.com/google/gofuzz v1.2.0 // indirect
 | 
			
		||||
	github.com/google/uuid v1.6.0 // indirect
 | 
			
		||||
	github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect
 | 
			
		||||
	github.com/jinzhu/copier v0.4.0 // indirect
 | 
			
		||||
	github.com/jmespath/go-jmespath v0.4.0 // indirect
 | 
			
		||||
	github.com/josharian/intern v1.0.0 // indirect
 | 
			
		||||
	github.com/json-iterator/go v1.1.12 // indirect
 | 
			
		||||
	github.com/mailru/easyjson v0.7.7 // indirect
 | 
			
		||||
	github.com/mattn/go-colorable v0.1.13 // indirect
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.20 // indirect
 | 
			
		||||
	github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
 | 
			
		||||
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 | 
			
		||||
	github.com/modern-go/reflect2 v1.0.2 // indirect
 | 
			
		||||
	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 | 
			
		||||
	github.com/nacos-group/nacos-sdk-go/v2 v2.2.3 // indirect
 | 
			
		||||
	github.com/openzipkin/zipkin-go v0.4.2 // indirect
 | 
			
		||||
	github.com/pelletier/go-toml/v2 v2.2.2 // indirect
 | 
			
		||||
	github.com/pkg/errors v0.9.1 // indirect
 | 
			
		||||
	github.com/prometheus/client_golang v1.18.0 // indirect
 | 
			
		||||
	github.com/prometheus/client_model v0.5.0 // indirect
 | 
			
		||||
	github.com/prometheus/common v0.45.0 // indirect
 | 
			
		||||
	github.com/prometheus/procfs v0.12.0 // indirect
 | 
			
		||||
	github.com/redis/go-redis/v9 v9.4.0 // indirect
 | 
			
		||||
	github.com/spaolacci/murmur3 v1.1.0 // indirect
 | 
			
		||||
	go.etcd.io/etcd/api/v3 v3.5.13 // indirect
 | 
			
		||||
	go.etcd.io/etcd/client/pkg/v3 v3.5.13 // indirect
 | 
			
		||||
	go.etcd.io/etcd/client/v3 v3.5.13 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/exporters/zipkin v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/metric v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/sdk v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/otel/trace v1.19.0 // indirect
 | 
			
		||||
	go.opentelemetry.io/proto/otlp v1.0.0 // indirect
 | 
			
		||||
	go.uber.org/atomic v1.10.0 // indirect
 | 
			
		||||
	go.uber.org/automaxprocs v1.5.3 // indirect
 | 
			
		||||
	go.uber.org/multierr v1.9.0 // indirect
 | 
			
		||||
	go.uber.org/zap v1.24.0 // indirect
 | 
			
		||||
	golang.org/x/net v0.25.0 // indirect
 | 
			
		||||
	golang.org/x/oauth2 v0.17.0 // indirect
 | 
			
		||||
	golang.org/x/sync v0.6.0 // indirect
 | 
			
		||||
	golang.org/x/sys v0.20.0 // indirect
 | 
			
		||||
	golang.org/x/term v0.20.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.15.0 // indirect
 | 
			
		||||
	golang.org/x/time v0.5.0 // indirect
 | 
			
		||||
	google.golang.org/appengine v1.6.8 // indirect
 | 
			
		||||
	google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
 | 
			
		||||
	google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
 | 
			
		||||
	google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
 | 
			
		||||
	gopkg.in/inf.v0 v0.9.1 // indirect
 | 
			
		||||
	gopkg.in/ini.v1 v1.66.2 // indirect
 | 
			
		||||
	gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
 | 
			
		||||
	gopkg.in/yaml.v2 v2.4.0 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
	k8s.io/api v0.29.3 // indirect
 | 
			
		||||
	k8s.io/apimachinery v0.29.4 // indirect
 | 
			
		||||
	k8s.io/client-go v0.29.3 // indirect
 | 
			
		||||
	k8s.io/klog/v2 v2.110.1 // indirect
 | 
			
		||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
			
		||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
			
		||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
			
		||||
	sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
			
		||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,63 @@
 | 
			
		|||
package common
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/md5"
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func GetMD5Hash(input string) string {
 | 
			
		||||
	hash := md5.Sum([]byte(input))
 | 
			
		||||
	return hex.EncodeToString(hash[:])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// toMap 将结构体转换为map[string]interface{}
 | 
			
		||||
// StructToMap 将一个struct转换为map[string]interface{}
 | 
			
		||||
func StructToMap(obj interface{}) map[string]interface{} {
 | 
			
		||||
	// 获取obj的类型
 | 
			
		||||
	val := reflect.ValueOf(obj)
 | 
			
		||||
	if val.Kind() == reflect.Ptr {
 | 
			
		||||
		val = val.Elem()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 确保obj是一个struct
 | 
			
		||||
	if val.Kind() != reflect.Struct {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 创建一个map来保存结果
 | 
			
		||||
	data := make(map[string]interface{})
 | 
			
		||||
 | 
			
		||||
	// 遍历struct的字段
 | 
			
		||||
	for i := 0; i < val.NumField(); i++ {
 | 
			
		||||
		// 获取字段的类型和值
 | 
			
		||||
		valueField := val.Field(i)
 | 
			
		||||
		typeField := val.Type().Field(i)
 | 
			
		||||
		jsonTag := typeField.Tag.Get("json")
 | 
			
		||||
		if idx := strings.Index(jsonTag, ","); idx != -1 {
 | 
			
		||||
			// 如果有逗号,则取逗号之前的部分
 | 
			
		||||
			jsonTag = jsonTag[:idx]
 | 
			
		||||
		}
 | 
			
		||||
		// 忽略未导出的字段(字段名首字母小写)
 | 
			
		||||
		if !typeField.IsExported() {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 将字段名和值添加到map中
 | 
			
		||||
		data[jsonTag] = valueField.Interface()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return data
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// mergeMaps 合并任意数量的map
 | 
			
		||||
func MergeMaps(maps ...map[string]interface{}) map[string]interface{} {
 | 
			
		||||
	merged := make(map[string]interface{})
 | 
			
		||||
	for _, m := range maps {
 | 
			
		||||
		for k, v := range m {
 | 
			
		||||
			merged[k] = v
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return merged
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
package common
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"sort"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func ZltxSign(postData map[string]interface{}, secret string) string {
 | 
			
		||||
	// 第一步:把key升序
 | 
			
		||||
	keys := make([]string, 0, len(postData))
 | 
			
		||||
	for key := range postData {
 | 
			
		||||
		keys = append(keys, key)
 | 
			
		||||
	}
 | 
			
		||||
	sort.Strings(keys)
 | 
			
		||||
 | 
			
		||||
	// 第二步:生成签名
 | 
			
		||||
	// 拼接用于生成签名的原始字符串
 | 
			
		||||
	rawStr := ""
 | 
			
		||||
	for _, key := range keys {
 | 
			
		||||
		value := fmt.Sprintf("%v", postData[key])
 | 
			
		||||
		if rawStr != "" {
 | 
			
		||||
			rawStr += "&"
 | 
			
		||||
		}
 | 
			
		||||
		rawStr += fmt.Sprintf("%s=%s", key, value)
 | 
			
		||||
	}
 | 
			
		||||
	rawStr += "&key=" + secret
 | 
			
		||||
	return strings.ToUpper(GetMD5Hash(rawStr))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,58 @@
 | 
			
		|||
package pkg
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
	"os"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func ErrLog(ctx context.Context, errContent ...any) {
 | 
			
		||||
	path, _ := errLogFile()
 | 
			
		||||
	// 创建一个文件对象
 | 
			
		||||
	file, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logx.Error(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
	// 创建一个日志写入器,将日志写入文件
 | 
			
		||||
	writer := logx.NewWriter(file)
 | 
			
		||||
	// 使用该写入器记录日志
 | 
			
		||||
	logx.SetWriter(writer)
 | 
			
		||||
	logx.WithContext(ctx).WithCallerSkip(2).Errorf("errlog:", errContent)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func errLogFile() (string, error) {
 | 
			
		||||
	logPath, err := runtimePath()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	path := fmt.Sprintf("%s/%s", logPath, "err")
 | 
			
		||||
	err = CheckDir(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	return fmt.Sprintf("%s/%s", path, time.Now().Format(time.DateOnly)), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func runtimePath() (string, error) {
 | 
			
		||||
	path, err := os.Getwd()
 | 
			
		||||
	return fmt.Sprintf("../%s/%s", path, "runtime"), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func CheckDir(path string) error {
 | 
			
		||||
	// 判断目录是否存在
 | 
			
		||||
	if _, err := os.Stat(path); os.IsNotExist(err) {
 | 
			
		||||
		// 如果目录不存在,则创建它
 | 
			
		||||
		err = os.MkdirAll(path, os.ModePerm)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	} else if err != nil {
 | 
			
		||||
		// 如果Stat返回了其他错误(比如权限问题)
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,130 @@
 | 
			
		|||
package request
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 请求结构体
 | 
			
		||||
type Request struct {
 | 
			
		||||
	Method   string            `json:"method"`   // 请求方法
 | 
			
		||||
	Url      string            `json:"url"`      // 请求url
 | 
			
		||||
	Params   map[string]string `json:"params"`   // Query参数
 | 
			
		||||
	Headers  map[string]string `json:"headers"`  // 请求头
 | 
			
		||||
	Cookies  map[string]string `json:"cookies"`  // todo 处理 Cookies
 | 
			
		||||
	Data     map[string]string `json:"data"`     // 表单格式请求数据
 | 
			
		||||
	Json     map[string]string `json:"json"`     // JSON格式请求数据 todo 多层 嵌套
 | 
			
		||||
	Files    map[string]string `json:"files"`    // todo 处理 Files
 | 
			
		||||
	Raw      string            `json:"raw"`      // 原始请求数据
 | 
			
		||||
	JsonByte []byte            `json:"json_raw"` // JSON格式请求数据 todo 多层 嵌套
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 响应结构体
 | 
			
		||||
type Response struct {
 | 
			
		||||
	StatusCode int               `json:"status_code"` // 状态码
 | 
			
		||||
	Reason     string            `json:"reason"`      // 状态码说明
 | 
			
		||||
	Elapsed    float64           `json:"elapsed"`     // 请求耗时(秒)
 | 
			
		||||
	Content    []byte            `json:"content"`     // 响应二进制内容
 | 
			
		||||
	Text       string            `json:"text"`        // 响应文本
 | 
			
		||||
	Headers    map[string]string `json:"headers"`     // 响应头
 | 
			
		||||
	Cookies    map[string]string `json:"cookies"`     // todo 添加响应Cookies
 | 
			
		||||
	Request    *Request          `json:"request"`     // 原始请求
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 处理请求方法
 | 
			
		||||
func (r *Request) getMethod() string {
 | 
			
		||||
	return strings.ToUpper(r.Method) // 必须转为全部大写
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 组装URL
 | 
			
		||||
func (r *Request) getUrl() string {
 | 
			
		||||
	if r.Params != nil {
 | 
			
		||||
		urlValues := url.Values{}
 | 
			
		||||
		Url, _ := url.Parse(r.Url) // todo 处理err
 | 
			
		||||
		for key, value := range r.Params {
 | 
			
		||||
			urlValues.Set(key, value)
 | 
			
		||||
		}
 | 
			
		||||
		Url.RawQuery = urlValues.Encode()
 | 
			
		||||
		return Url.String()
 | 
			
		||||
	}
 | 
			
		||||
	return r.Url
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 组装请求数据
 | 
			
		||||
func (r *Request) getData() io.Reader {
 | 
			
		||||
	var reqBody string
 | 
			
		||||
	if r.Headers == nil {
 | 
			
		||||
		r.Headers = make(map[string]string, 1)
 | 
			
		||||
	}
 | 
			
		||||
	if r.Raw != "" {
 | 
			
		||||
		reqBody = r.Raw
 | 
			
		||||
	} else if r.Data != nil {
 | 
			
		||||
		urlValues := url.Values{}
 | 
			
		||||
		for key, value := range r.Data {
 | 
			
		||||
			urlValues.Add(key, value)
 | 
			
		||||
		}
 | 
			
		||||
		reqBody = urlValues.Encode()
 | 
			
		||||
		r.Headers["Content-Type"] = "application/x-www-form-urlencoded"
 | 
			
		||||
	} else if r.Json != nil {
 | 
			
		||||
		bytesData, _ := json.Marshal(r.Json)
 | 
			
		||||
		reqBody = string(bytesData)
 | 
			
		||||
		r.Headers["Content-Type"] = "application/json"
 | 
			
		||||
	} else if r.JsonByte != nil {
 | 
			
		||||
		reqBody = string(r.JsonByte)
 | 
			
		||||
		r.Headers["Content-Type"] = "application/json"
 | 
			
		||||
	}
 | 
			
		||||
	return strings.NewReader(reqBody)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 添加请求头-需要在getData后使用
 | 
			
		||||
func (r *Request) addHeaders(req *http.Request) {
 | 
			
		||||
	if r.Headers != nil {
 | 
			
		||||
		for key, value := range r.Headers {
 | 
			
		||||
			req.Header.Add(key, value)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 准备请求
 | 
			
		||||
func (r *Request) prepare() *http.Request {
 | 
			
		||||
	Method := r.getMethod()
 | 
			
		||||
	Url := r.getUrl()
 | 
			
		||||
	Data := r.getData()
 | 
			
		||||
	req, _ := http.NewRequest(Method, Url, Data)
 | 
			
		||||
	r.addHeaders(req)
 | 
			
		||||
	return req
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 组装响应对象
 | 
			
		||||
func (r *Request) packResponse(res *http.Response, elapsed float64) Response {
 | 
			
		||||
	var resp Response
 | 
			
		||||
	resBody, _ := io.ReadAll(res.Body)
 | 
			
		||||
	resp.Content = resBody
 | 
			
		||||
	resp.Text = string(resBody)
 | 
			
		||||
	resp.StatusCode = res.StatusCode
 | 
			
		||||
	resp.Reason = strings.Split(res.Status, " ")[1]
 | 
			
		||||
	resp.Elapsed = elapsed
 | 
			
		||||
	resp.Headers = map[string]string{}
 | 
			
		||||
	for key, value := range res.Header {
 | 
			
		||||
		resp.Headers[key] = strings.Join(value, ";")
 | 
			
		||||
	}
 | 
			
		||||
	return resp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 发送请求
 | 
			
		||||
func (r *Request) Send() (Response, error) {
 | 
			
		||||
	req := r.prepare()
 | 
			
		||||
	client := &http.Client{}
 | 
			
		||||
	start := time.Now()
 | 
			
		||||
	res, err := client.Do(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Response{}, err
 | 
			
		||||
	}
 | 
			
		||||
	defer res.Body.Close()
 | 
			
		||||
	elapsed := time.Since(start).Seconds()
 | 
			
		||||
	return r.packResponse(res, elapsed), nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
package test
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"msgc/pkg/request"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 发送GET 请求
 | 
			
		||||
func TestGet(t *testing.T) {
 | 
			
		||||
	r := request.Request{
 | 
			
		||||
		Method:  "GET",
 | 
			
		||||
		Url:     "https://httpbin.org/get?name=张三&age=12",
 | 
			
		||||
		Headers: map[string]string{"Cookie": "abc", "Token": "123"}}
 | 
			
		||||
	resp, _ := r.Send()
 | 
			
		||||
	fmt.Printf("状态码: %d\n", resp.StatusCode)
 | 
			
		||||
	fmt.Printf("原因: %s\n", resp.Reason)
 | 
			
		||||
	fmt.Printf("响应时间: %f秒\n", resp.Elapsed)
 | 
			
		||||
	fmt.Printf("响应文本: %s\n", resp.Text)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 发送GET 带单独Query参数请求
 | 
			
		||||
func TestWAccessToken(t *testing.T) {
 | 
			
		||||
	appid := "wx381e6a04ab7f69b6"
 | 
			
		||||
	secret := "16f6152c216c07fdff4c0ecaf1a173ed"
 | 
			
		||||
	r := request.Request{
 | 
			
		||||
		Method: "GET",
 | 
			
		||||
		Url:    "https://api.weixin.qq.com/cgi-bin/token",
 | 
			
		||||
 | 
			
		||||
		Params: map[string]string{"grant_type": "client_credential", "appid": appid, "secret": secret},
 | 
			
		||||
	}
 | 
			
		||||
	resp, err := r.Send()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Printf("状态码: %d\n", resp.StatusCode)
 | 
			
		||||
	fmt.Printf("原因: %s\n", resp.Reason)
 | 
			
		||||
	fmt.Printf("响应时间: %f秒\n", resp.Elapsed)
 | 
			
		||||
	fmt.Printf("响应文本: %s\n", resp.Text)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDtalkBlackBard(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	r := request.Request{
 | 
			
		||||
		Method:  "POST",
 | 
			
		||||
		Url:     "https://httpbin.org/post",
 | 
			
		||||
		Data:    map[string]string{"name": "张三", "age": "12"},
 | 
			
		||||
		Headers: map[string]string{"Cookie": "abc", "Token": "123"}}
 | 
			
		||||
	resp, _ := r.Send()
 | 
			
		||||
	fmt.Printf("状态码: %d\n", resp.StatusCode)
 | 
			
		||||
	fmt.Printf("原因: %s\n", resp.Reason)
 | 
			
		||||
	fmt.Printf("响应时间: %f秒\n", resp.Elapsed)
 | 
			
		||||
	fmt.Printf("响应文本: %s\n", resp.Text)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 发送POST 表单请求
 | 
			
		||||
func TestPostForm(t *testing.T) {
 | 
			
		||||
	r := request.Request{
 | 
			
		||||
		Method:  "POST",
 | 
			
		||||
		Url:     "https://httpbin.org/post",
 | 
			
		||||
		Data:    map[string]string{"name": "张三", "age": "12"},
 | 
			
		||||
		Headers: map[string]string{"Cookie": "abc", "Token": "123"}}
 | 
			
		||||
	resp, _ := r.Send()
 | 
			
		||||
	fmt.Printf("状态码: %d\n", resp.StatusCode)
 | 
			
		||||
	fmt.Printf("原因: %s\n", resp.Reason)
 | 
			
		||||
	fmt.Printf("响应时间: %f秒\n", resp.Elapsed)
 | 
			
		||||
	fmt.Printf("响应文本: %s\n", resp.Text)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 发送POST JSON请求
 | 
			
		||||
func TestPostJson(t *testing.T) {
 | 
			
		||||
	r := request.Request{
 | 
			
		||||
		Method:  "POST",
 | 
			
		||||
		Url:     "https://httpbin.org/post",
 | 
			
		||||
		Json:    map[string]string{"name": "张三", "age": "12"},
 | 
			
		||||
		Headers: map[string]string{"Cookie": "abc", "Token": "123"}}
 | 
			
		||||
	resp, _ := r.Send()
 | 
			
		||||
	fmt.Printf("状态码: %d\n", resp.StatusCode)
 | 
			
		||||
	fmt.Printf("原因: %s\n", resp.Reason)
 | 
			
		||||
	fmt.Printf("响应时间: %f秒\n", resp.Elapsed)
 | 
			
		||||
	fmt.Printf("响应文本: %s\n", resp.Text)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
package xerr
 | 
			
		||||
 | 
			
		||||
// 成功返回
 | 
			
		||||
const OK uint32 = 200
 | 
			
		||||
 | 
			
		||||
/**(前3位代表业务,后三位代表具体功能)**/
 | 
			
		||||
 | 
			
		||||
// 全局错误码
 | 
			
		||||
const SERVER_AUTH_ERROR uint32 = 100007
 | 
			
		||||
const SERVER_COMMON_ERROR uint32 = 100001
 | 
			
		||||
const REUQEST_PARAM_ERROR uint32 = 100002
 | 
			
		||||
const TOKEN_EXPIRE_ERROR uint32 = 100003
 | 
			
		||||
const TOKEN_GENERATE_ERROR uint32 = 100004
 | 
			
		||||
const DB_ERROR uint32 = 100005
 | 
			
		||||
const DB_UPDATE_AFFECTED_ZERO_ERROR uint32 = 100006
 | 
			
		||||
 | 
			
		||||
//用户模块
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
package xerr
 | 
			
		||||
 | 
			
		||||
var message map[uint32]string
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	message = make(map[uint32]string)
 | 
			
		||||
	message[OK] = "SUCCESS"
 | 
			
		||||
	message[SERVER_AUTH_ERROR] = "鉴权失败"
 | 
			
		||||
	message[SERVER_COMMON_ERROR] = "服务器开小差啦,稍后再来试一试"
 | 
			
		||||
	message[REUQEST_PARAM_ERROR] = "参数错误"
 | 
			
		||||
	message[TOKEN_EXPIRE_ERROR] = "token失效,请重新登陆"
 | 
			
		||||
	message[TOKEN_GENERATE_ERROR] = "生成token失败"
 | 
			
		||||
	message[DB_ERROR] = "数据库繁忙,请稍后再试"
 | 
			
		||||
	message[DB_UPDATE_AFFECTED_ZERO_ERROR] = "更新数据影响行数为0"
 | 
			
		||||
	message[SERVER_AUTH_ERROR] = "身份验证失败"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func MapErrMsg(errcode uint32) string {
 | 
			
		||||
	if msg, ok := message[errcode]; ok {
 | 
			
		||||
		return msg
 | 
			
		||||
	} else {
 | 
			
		||||
		return "服务器开小差啦,稍后再来试一试"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IsCodeErr(errcode uint32) bool {
 | 
			
		||||
	if _, ok := message[errcode]; ok {
 | 
			
		||||
		return true
 | 
			
		||||
	} else {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
package xerr
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	pkg "trasfer_middleware/pkg/log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
常用通用固定错误
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
type CodeError struct {
 | 
			
		||||
	errCode uint32
 | 
			
		||||
	errMsg  string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 返回给前端的错误码
 | 
			
		||||
func (e *CodeError) GetErrCode() uint32 {
 | 
			
		||||
	return e.errCode
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 返回给前端显示端错误信息
 | 
			
		||||
func (e *CodeError) GetErrMsg() string {
 | 
			
		||||
	return e.errMsg
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *CodeError) Error() string {
 | 
			
		||||
	return fmt.Sprintf("ErrCode:%d,ErrMsg:%s", e.errCode, e.errMsg)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewErrCodeMsg(errCode uint32, errMsg string) *CodeError {
 | 
			
		||||
	return &CodeError{errCode: errCode, errMsg: errMsg}
 | 
			
		||||
}
 | 
			
		||||
func NewErrCode(errCode uint32) *CodeError {
 | 
			
		||||
	return &CodeError{errCode: errCode, errMsg: MapErrMsg(errCode)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewErrMsg(ctx context.Context, errMsg string) *CodeError {
 | 
			
		||||
	pkg.ErrLog(ctx, errMsg)
 | 
			
		||||
	return &CodeError{errCode: SERVER_COMMON_ERROR, errMsg: errMsg}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue