实现用户订单、在线支付接口(商业版可用)

This commit is contained in:
GoEdgeLab
2022-07-31 19:57:28 +08:00
parent e35ea9c56d
commit a3a6ba5df7
13 changed files with 6461 additions and 3060 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,204 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.19.4
// source: models/model_order_method.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 订单支付方式
type OrderMethod struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"`
Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
Url string `protobuf:"bytes,5,opt,name=url,proto3" json:"url,omitempty"`
Secret string `protobuf:"bytes,6,opt,name=secret,proto3" json:"secret,omitempty"`
IsOn bool `protobuf:"varint,7,opt,name=isOn,proto3" json:"isOn,omitempty"`
}
func (x *OrderMethod) Reset() {
*x = OrderMethod{}
if protoimpl.UnsafeEnabled {
mi := &file_models_model_order_method_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *OrderMethod) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*OrderMethod) ProtoMessage() {}
func (x *OrderMethod) ProtoReflect() protoreflect.Message {
mi := &file_models_model_order_method_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use OrderMethod.ProtoReflect.Descriptor instead.
func (*OrderMethod) Descriptor() ([]byte, []int) {
return file_models_model_order_method_proto_rawDescGZIP(), []int{0}
}
func (x *OrderMethod) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
func (x *OrderMethod) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *OrderMethod) GetCode() string {
if x != nil {
return x.Code
}
return ""
}
func (x *OrderMethod) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
func (x *OrderMethod) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
func (x *OrderMethod) GetSecret() string {
if x != nil {
return x.Secret
}
return ""
}
func (x *OrderMethod) GetIsOn() bool {
if x != nil {
return x.IsOn
}
return false
}
var File_models_model_order_method_proto protoreflect.FileDescriptor
var file_models_model_order_method_proto_rawDesc = []byte{
0x0a, 0x1f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6f,
0x72, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0xa5, 0x01, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4d,
0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a,
0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72,
0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4f,
0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x4f, 0x6e, 0x42, 0x06, 0x5a,
0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_models_model_order_method_proto_rawDescOnce sync.Once
file_models_model_order_method_proto_rawDescData = file_models_model_order_method_proto_rawDesc
)
func file_models_model_order_method_proto_rawDescGZIP() []byte {
file_models_model_order_method_proto_rawDescOnce.Do(func() {
file_models_model_order_method_proto_rawDescData = protoimpl.X.CompressGZIP(file_models_model_order_method_proto_rawDescData)
})
return file_models_model_order_method_proto_rawDescData
}
var file_models_model_order_method_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_models_model_order_method_proto_goTypes = []interface{}{
(*OrderMethod)(nil), // 0: pb.OrderMethod
}
var file_models_model_order_method_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_models_model_order_method_proto_init() }
func file_models_model_order_method_proto_init() {
if File_models_model_order_method_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_models_model_order_method_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OrderMethod); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_models_model_order_method_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_models_model_order_method_proto_goTypes,
DependencyIndexes: file_models_model_order_method_proto_depIdxs,
MessageInfos: file_models_model_order_method_proto_msgTypes,
}.Build()
File_models_model_order_method_proto = out.File
file_models_model_order_method_proto_rawDesc = nil
file_models_model_order_method_proto_goTypes = nil
file_models_model_order_method_proto_depIdxs = nil
}

View File

@@ -0,0 +1,295 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.19.4
// source: models/model_user_order.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 用户订单
type UserOrder struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserId int64 `protobuf:"varint,2,opt,name=userId,proto3" json:"userId,omitempty"`
Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"`
Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"`
OrderMethodId int64 `protobuf:"varint,5,opt,name=orderMethodId,proto3" json:"orderMethodId,omitempty"`
Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"`
Amount float32 `protobuf:"fixed32,7,opt,name=amount,proto3" json:"amount,omitempty"`
ParamsJSON []byte `protobuf:"bytes,8,opt,name=paramsJSON,proto3" json:"paramsJSON,omitempty"`
CreatedAt int64 `protobuf:"varint,9,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
CancelledAt int64 `protobuf:"varint,10,opt,name=cancelledAt,proto3" json:"cancelledAt,omitempty"`
FinishedAt int64 `protobuf:"varint,11,opt,name=finishedAt,proto3" json:"finishedAt,omitempty"`
IsExpired bool `protobuf:"varint,12,opt,name=isExpired,proto3" json:"isExpired,omitempty"`
User *User `protobuf:"bytes,30,opt,name=user,proto3" json:"user,omitempty"`
OrderMethod *OrderMethod `protobuf:"bytes,31,opt,name=orderMethod,proto3" json:"orderMethod,omitempty"`
CanPay bool `protobuf:"varint,32,opt,name=canPay,proto3" json:"canPay,omitempty"` // 是否可以支付
PayURL string `protobuf:"bytes,33,opt,name=payURL,proto3" json:"payURL,omitempty"` // 构造后的支付URL
}
func (x *UserOrder) Reset() {
*x = UserOrder{}
if protoimpl.UnsafeEnabled {
mi := &file_models_model_user_order_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UserOrder) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UserOrder) ProtoMessage() {}
func (x *UserOrder) ProtoReflect() protoreflect.Message {
mi := &file_models_model_user_order_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UserOrder.ProtoReflect.Descriptor instead.
func (*UserOrder) Descriptor() ([]byte, []int) {
return file_models_model_user_order_proto_rawDescGZIP(), []int{0}
}
func (x *UserOrder) GetUserId() int64 {
if x != nil {
return x.UserId
}
return 0
}
func (x *UserOrder) GetCode() string {
if x != nil {
return x.Code
}
return ""
}
func (x *UserOrder) GetType() string {
if x != nil {
return x.Type
}
return ""
}
func (x *UserOrder) GetOrderMethodId() int64 {
if x != nil {
return x.OrderMethodId
}
return 0
}
func (x *UserOrder) GetStatus() string {
if x != nil {
return x.Status
}
return ""
}
func (x *UserOrder) GetAmount() float32 {
if x != nil {
return x.Amount
}
return 0
}
func (x *UserOrder) GetParamsJSON() []byte {
if x != nil {
return x.ParamsJSON
}
return nil
}
func (x *UserOrder) GetCreatedAt() int64 {
if x != nil {
return x.CreatedAt
}
return 0
}
func (x *UserOrder) GetCancelledAt() int64 {
if x != nil {
return x.CancelledAt
}
return 0
}
func (x *UserOrder) GetFinishedAt() int64 {
if x != nil {
return x.FinishedAt
}
return 0
}
func (x *UserOrder) GetIsExpired() bool {
if x != nil {
return x.IsExpired
}
return false
}
func (x *UserOrder) GetUser() *User {
if x != nil {
return x.User
}
return nil
}
func (x *UserOrder) GetOrderMethod() *OrderMethod {
if x != nil {
return x.OrderMethod
}
return nil
}
func (x *UserOrder) GetCanPay() bool {
if x != nil {
return x.CanPay
}
return false
}
func (x *UserOrder) GetPayURL() string {
if x != nil {
return x.PayURL
}
return ""
}
var File_models_model_user_order_proto protoreflect.FileDescriptor
var file_models_model_user_order_proto_rawDesc = []byte{
0x0a, 0x1d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x75,
0x73, 0x65, 0x72, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x02, 0x70, 0x62, 0x1a, 0x17, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65,
0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x6d, 0x6f,
0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72,
0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc0, 0x03,
0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x75,
0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65,
0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6f,
0x72, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01,
0x28, 0x03, 0x52, 0x0d, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49,
0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28,
0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f,
0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e,
0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x18,
0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x4a, 0x53, 0x4f,
0x4e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x09,
0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12,
0x20, 0x0a, 0x0b, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0a,
0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x41,
0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x18,
0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41,
0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x0c,
0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x12,
0x1c, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e,
0x70, 0x62, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x31, 0x0a,
0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x1f, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74,
0x68, 0x6f, 0x64, 0x52, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64,
0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x50, 0x61, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x08,
0x52, 0x06, 0x63, 0x61, 0x6e, 0x50, 0x61, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x79, 0x55,
0x52, 0x4c, 0x18, 0x21, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x79, 0x55, 0x52, 0x4c,
0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_models_model_user_order_proto_rawDescOnce sync.Once
file_models_model_user_order_proto_rawDescData = file_models_model_user_order_proto_rawDesc
)
func file_models_model_user_order_proto_rawDescGZIP() []byte {
file_models_model_user_order_proto_rawDescOnce.Do(func() {
file_models_model_user_order_proto_rawDescData = protoimpl.X.CompressGZIP(file_models_model_user_order_proto_rawDescData)
})
return file_models_model_user_order_proto_rawDescData
}
var file_models_model_user_order_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_models_model_user_order_proto_goTypes = []interface{}{
(*UserOrder)(nil), // 0: pb.UserOrder
(*User)(nil), // 1: pb.User
(*OrderMethod)(nil), // 2: pb.OrderMethod
}
var file_models_model_user_order_proto_depIdxs = []int32{
1, // 0: pb.UserOrder.user:type_name -> pb.User
2, // 1: pb.UserOrder.orderMethod:type_name -> pb.OrderMethod
2, // [2:2] is the sub-list for method output_type
2, // [2:2] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name
2, // [2:2] is the sub-list for extension extendee
0, // [0:2] is the sub-list for field type_name
}
func init() { file_models_model_user_order_proto_init() }
func file_models_model_user_order_proto_init() {
if File_models_model_user_order_proto != nil {
return
}
file_models_model_user_proto_init()
file_models_model_order_method_proto_init()
if !protoimpl.UnsafeEnabled {
file_models_model_user_order_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserOrder); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_models_model_user_order_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_models_model_user_order_proto_goTypes,
DependencyIndexes: file_models_model_user_order_proto_depIdxs,
MessageInfos: file_models_model_user_order_proto_msgTypes,
}.Build()
File_models_model_user_order_proto = out.File
file_models_model_user_order_proto_rawDesc = nil
file_models_model_user_order_proto_goTypes = nil
file_models_model_user_order_proto_depIdxs = nil
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
syntax = "proto3";
option go_package = "./pb";
package pb;
// 订单支付方式
message OrderMethod {
int64 id = 1;
string name = 2;
string code = 3;
string description = 4;
string url = 5;
string secret = 6;
bool isOn = 7;
}

View File

@@ -0,0 +1,28 @@
syntax = "proto3";
option go_package = "./pb";
package pb;
import "models/model_user.proto";
import "models/model_order_method.proto";
// 用户订单
message UserOrder {
int64 userId = 2;
string code = 3;
string type = 4;
int64 orderMethodId = 5;
string status = 6;
float amount = 7;
bytes paramsJSON = 8;
int64 createdAt = 9;
int64 cancelledAt = 10;
int64 finishedAt = 11;
bool isExpired = 12;
User user = 30;
OrderMethod orderMethod = 31;
bool canPay = 32; // 是否可以支付
string payURL = 33; // 构造后的支付URL
}

View File

@@ -0,0 +1,94 @@
syntax = "proto3";
option go_package = "./pb";
package pb;
import "models/model_order_method.proto";
import "models/rpc_messages.proto";
// 订单支付方式相关服务
service OrderMethodService {
// 创建支付方式
rpc createOrderMethod(CreateOrderMethodRequest) returns (CreateOrderMethodResponse);
// 修改支付方式
rpc updateOrderMethod(UpdateOrderMethodRequest) returns (RPCSuccess);
// 删除支付方式
rpc deleteOrderMethod(DeleteOrderMethodRequest) returns (RPCSuccess);
// 查找单个支付方式
rpc findEnabledOrderMethod(FindEnabledOrderMethodRequest) returns (FindEnabledOrderMethodResponse);
// 根据代号查找支付方式
rpc findEnabledOrderMethodWithCode(FindEnabledOrderMethodWithCodeRequest) returns (FindEnabledOrderMethodWithCodeResponse);
// 查找所有支付方式
rpc findAllEnabledOrderMethods(FindAllEnabledOrderMethodsRequest) returns (FindAllEnabledOrderMethodsResponse);
// 查找所有已启用的支付方式
rpc findAllEnabledAndOnOrderMethods(FindAllEnabledAndOnOrderMethodsRequest) returns (FindAllEnabledAndOnOrderMethodsResponse);
}
// 创建支付方式
message CreateOrderMethodRequest {
string name = 1;
string code = 2;
string description = 3;
string url = 4;
}
message CreateOrderMethodResponse {
int64 orderMethodId = 1;
}
// 修改支付方式
message UpdateOrderMethodRequest {
int64 orderMethodId = 1;
string name = 2;
string code = 3;
string description = 4;
string url = 5;
bool isOn = 6;
}
// 删除支付方式
message DeleteOrderMethodRequest {
int64 orderMethodId = 1;
}
// 查找单个支付方式
message FindEnabledOrderMethodRequest {
int64 orderMethodId = 1;
}
message FindEnabledOrderMethodResponse {
OrderMethod orderMethod = 1;
}
// 根据代号查找支付方式
message FindEnabledOrderMethodWithCodeRequest {
string code = 1;
}
message FindEnabledOrderMethodWithCodeResponse {
OrderMethod orderMethod = 1;
}
// 查找所有支付方式
message FindAllEnabledOrderMethodsRequest {
}
message FindAllEnabledOrderMethodsResponse {
repeated OrderMethod orderMethods = 1;
}
// 查找所有已启用的支付方式
message FindAllEnabledAndOnOrderMethodsRequest {
}
message FindAllEnabledAndOnOrderMethodsResponse {
repeated OrderMethod orderMethods = 1;
}

View File

@@ -2,6 +2,7 @@ syntax = "proto3";
option go_package = "./pb";
package pb;
import "models/model_user_node.proto";
import "models/rpc_messages.proto";

View File

@@ -0,0 +1,79 @@
syntax = "proto3";
option go_package = "./pb";
package pb;
import "models/model_user_order.proto";
import "models/rpc_messages.proto";
// 用户订单相关服务
service UserOrderService {
// 创建订单
rpc createUserOrder(CreateUserOrderRequest) returns (CreateUserOrderResponse);
// 查看订单
rpc findEnabledUserOrder(FindEnabledUserOrderRequest) returns (FindEnabledUserOrderResponse);
// 取消订单
rpc cancelUserOrder(CancelUserOrderRequest) returns (RPCSuccess);
// 完成订单
rpc finishUserOrder(FinishUserOrderRequest) returns (RPCSuccess);
// 计算订单数量
rpc countEnabledUserOrders(CountEnabledUserOrdersRequest) returns (RPCCountResponse);
// 列出单页订单
rpc listEnabledUserOrders(ListEnabledUserOrdersRequest) returns (ListEnabledUserOrdersResponse);
}
// 创建订单
message CreateUserOrderRequest {
string type = 1;
string orderMethodCode = 2;
float amount = 3;
}
message CreateUserOrderResponse {
string code = 1;
string payURL = 2;
}
// 查看订单
message FindEnabledUserOrderRequest {
string code = 1;
}
message FindEnabledUserOrderResponse {
UserOrder userOrder = 1;
}
// 取消订单
message CancelUserOrderRequest {
string code = 1;
}
// 完成订单
message FinishUserOrderRequest {
string code = 1;
}
// 计算订单数量
message CountEnabledUserOrdersRequest {
int64 userId = 1;
string keyword = 2;
string status = 3;
}
// 列出单页订单
message ListEnabledUserOrdersRequest {
int64 userId = 1;
string keyword = 2;
string status = 3;
int64 offset = 4;
int64 size = 5;
}
message ListEnabledUserOrdersResponse {
repeated UserOrder userOrders = 1;
}

View File

@@ -17,6 +17,7 @@ const (
SettingCodeUserRegisterConfig SettingCode = "userRegisterConfig" // 用户注册配置
SettingCodeUserServerConfig SettingCode = "userServerConfig" // 用户服务设置
SettingCodeUserFinanceConfig SettingCode = "userFinanceConfig" // 用户财务设置
SettingCodeUserOrderConfig SettingCode = "userOrderConfig" // 用户订单设置
SettingCodeNSAccessLogSetting SettingCode = "nsAccessLogSetting" // NS相关全局配置
SettingCodeNSNodeMonitor SettingCode = "nsNodeMonitor" // 监控NS节点状态

View File

@@ -0,0 +1,60 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
package userconfigs
import "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
type OrderType = string
const (
OrderTypeCharge OrderType = "charge"
)
func IsValidOrderType(s string) bool {
return s == OrderTypeCharge
}
func OrderTypeName(orderType OrderType) string {
switch orderType {
case OrderTypeCharge:
return "充值"
}
return ""
}
type OrderStatus = string
const (
OrderStatusNone OrderStatus = "none"
OrderStatusCancelled OrderStatus = "cancelled"
OrderStatusFinished OrderStatus = "finished"
)
func OrderStatusName(orderStatus OrderStatus) string {
switch orderStatus {
case OrderStatusNone:
return "未支付"
case OrderStatusCancelled:
return "已取消"
case OrderStatusFinished:
return "已完成"
}
return ""
}
func FindAllOrderStatusList() []*shared.Definition {
return []*shared.Definition{
{
Name: "已完成",
Code: OrderStatusFinished,
},
{
Name: "未支付",
Code: OrderStatusNone,
},
{
Name: "已取消",
Code: OrderStatusCancelled,
},
}
}

View File

@@ -0,0 +1,23 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
package userconfigs
import "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
// UserOrderConfig 用户订单配置
type UserOrderConfig struct {
EnablePay bool `json:"enablePay"` // 启用支付
DisablePageHTML string `json:"disablePageHTML"` // 禁用支付时的页面提示
OrderLife *shared.TimeDuration `json:"orderLife"` // 过期时间
}
func DefaultUserOrderConfig() *UserOrderConfig {
return &UserOrderConfig{
EnablePay: false,
DisablePageHTML: "暂不提供在线充值功能,请联系管理员充值。",
OrderLife: &shared.TimeDuration{
Count: 1,
Unit: shared.TimeDurationUnitHour,
},
}
}