From 7ee8759e8ea008dcbb1bebce1c9fe5b7c1eda6e9 Mon Sep 17 00:00:00 2001
From: lzh <1625167628@qq.com>
Date: Mon, 9 Jun 2025 13:58:27 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=8B=E5=8A=A8=E6=89=A9?=
 =?UTF-8?q?=E5=B1=95=E3=80=81=E6=89=A9=E5=B1=95=E8=AE=B0=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cmd/app.go                       |   13 +
 internal/controller/bundleV2.go  |    8 +
 internal/dao/bundleDao.go        |   41 +
 internal/logic/bundleLogic.go    |   19 +
 internal/model/bundle.go         |   54 +
 pb/bundle.proto                  |   72 +-
 pb/bundle/bundle.pb.go           | 1888 +++++++++++++++++++++++++-----
 pb/bundle/bundle.validator.pb.go |   28 +
 pb/bundle/bundle_triple.pb.go    |  147 ++-
 pkg/db/mysql.go                  |    2 +
 pkg/utils/str.go                 |   20 +
 11 files changed, 1972 insertions(+), 320 deletions(-)
 create mode 100644 pkg/utils/str.go

diff --git a/cmd/app.go b/cmd/app.go
index 6aef535..9c0ef6d 100644
--- a/cmd/app.go
+++ b/cmd/app.go
@@ -47,4 +47,17 @@ func main() {
 		panic(err)
 	}
 	select {}
+	// dao.AddBundleExtendRecord(model.BundleExtensionRecords{
+	// 	UserId:                      57,
+	// 	OperatorId:                  87,
+	// 	AccountAdditional:           1,
+	// 	VideoAdditional:             1,
+	// 	AvailableDurationAdditional: 1,
+	// 	ImagesAdditional:            1,
+	// 	DataAdditional:              1,
+	// 	AssociatedOrderNumber:       "asda",
+	// 	Type:                        1,
+	// 	Remark:                      "test",
+	// 	CreatedAt:                   time.Now(),
+	// })
 }
diff --git a/internal/controller/bundleV2.go b/internal/controller/bundleV2.go
index 4ce0e0a..3222bb8 100644
--- a/internal/controller/bundleV2.go
+++ b/internal/controller/bundleV2.go
@@ -33,3 +33,11 @@ func (b *BundleProvider) ValueAddServiceList(_ context.Context, req *bundle.Valu
 func (b *BundleProvider) ValueAddServiceDetail(_ context.Context, req *bundle.ValueAddServiceDetailRequest) (res *bundle.ValueAddServiceDetailResponse, err error) {
 	return logic.ValueAddServiceDetail(req)
 }
+
+func (b *BundleProvider) BundleExtend(_ context.Context, req *bundle.BundleExtendRequest) (*bundle.BundleExtendResponse, error) {
+	return logic.BundleExtend(req)
+}
+
+func (b *BundleProvider) BundleExtendRecordsList(_ context.Context, req *bundle.BundleExtendRecordsListRequest) (*bundle.BundleExtendRecordsListResponse, error) {
+	return logic.BundleExtendRecordsList(req)
+}
diff --git a/internal/dao/bundleDao.go b/internal/dao/bundleDao.go
index 2cfb36a..410c18d 100644
--- a/internal/dao/bundleDao.go
+++ b/internal/dao/bundleDao.go
@@ -8,6 +8,7 @@ import (
 	"micro-bundle/pkg/app"
 	commonErr "micro-bundle/pkg/err"
 	"micro-bundle/pkg/msg"
+	"micro-bundle/pkg/utils"
 	"time"
 
 	"gorm.io/gorm"
@@ -385,3 +386,43 @@ func GetBundleLangsByUuid(uuid string) ([]*model.BundleProfileLang, error) {
 		Find(&result).Error
 	return result, err
 }
+
+func AddBundleExtendRecord(data model.BundleExtensionRecords) error {
+	return app.ModuleClients.BundleDB.Create(&data).Error
+}
+
+func GetBundleExtendRecordList(req *bundle.BundleExtendRecordsListRequest) ([]model.BundleExtendRecordItemPo, int64, error) {
+	session := app.ModuleClients.BundleDB.Select("*,mu.nickname as user_name,mu.tel_num as user_phone_number,fu.tel_num as operator_phone_number,fu.nickname as operator_name").
+		Model(&model.BundleExtensionRecords{}).
+		Joins("left join `fontree-account`.`user` fu on operator_id  = fu.id left join `micro-account`.`user` mu on user_id = mu.id ")
+	if req.EndTime != 0 {
+		session.Where("bundle_extension_records.created_at < ?", time.Unix(int64(req.EndTime), 0))
+	}
+	if req.StartTime != 0 {
+		session.Where("bundle_extension_records.created_at > ?", time.Unix(int64(req.StartTime), 0))
+	}
+	if req.Operator != "" {
+		if utils.IsPhoneNumber(req.Operator) {
+			session.Where("fu.tel_num = ?", req.Operator)
+		} else {
+			session.Where("fu.nickname = ?", req.Operator)
+		}
+	}
+	if req.User != "" {
+		if utils.IsPhoneNumber(req.User) {
+			session.Where("mu.tel_num = ?", req.User)
+		} else {
+			session.Where("mu.nickname = ?", req.User)
+		}
+	}
+	if req.AssociatedOrderNumber != "" {
+		session.Where("associated_order_number = ?", req.AssociatedOrderNumber)
+	}
+	if req.Type != 0 {
+		session.Where("`type` = ?", req.Type)
+	}
+	var total int64
+	res := []model.BundleExtendRecordItemPo{}
+	session.Limit(int(req.PageSize)).Offset(int(req.Page-1) * int(req.PageSize)).Find(&res).Count(&total)
+	return res, total, session.Error
+}
diff --git a/internal/logic/bundleLogic.go b/internal/logic/bundleLogic.go
index a75df87..1d7e136 100644
--- a/internal/logic/bundleLogic.go
+++ b/internal/logic/bundleLogic.go
@@ -362,3 +362,22 @@ func diffUpdateBundleToValueAddService(tx *gorm.DB, bundleUuid string, selectSer
 	}
 	return nil
 }
+
+func BundleExtend(req *bundle.BundleExtendRequest) (*bundle.BundleExtendResponse, error) {
+	data := model.BundleExtensionRecords{}
+	if err := copier.CopyWithOption(&data, req, copier.Option{DeepCopy: true}); err != nil {
+		return nil, err
+	}
+	return nil, dao.AddBundleExtendRecord(data)
+}
+
+func BundleExtendRecordsList(req *bundle.BundleExtendRecordsListRequest) (*bundle.BundleExtendRecordsListResponse, error) {
+	data, total, err := dao.GetBundleExtendRecordList(req)
+	if err != nil {
+		return nil, err
+	}
+	result := new(bundle.BundleExtendRecordsListResponse)
+	result.Total = total
+	err = copier.Copy(result.Data, &data)
+	return result, err
+}
diff --git a/internal/model/bundle.go b/internal/model/bundle.go
index 99807bb..fb9608d 100644
--- a/internal/model/bundle.go
+++ b/internal/model/bundle.go
@@ -1,6 +1,8 @@
 package model
 
 import (
+	"time"
+
 	"gorm.io/gorm"
 	"gorm.io/plugin/soft_delete"
 )
@@ -79,3 +81,55 @@ func (m *BundleProfileLang) TableName() string {
 func (m *BundleToValueAddService) TableName() string {
 	return "bundle_to_value_add_service"
 }
+
+// 套餐扩容记录表
+type BundleExtensionRecords struct {
+	gorm.Model
+	UserId                      int    `gorm:"column:user_id;type:int(11);comment:艺人id;NOT NULL" json:"user_id"`
+	AccountAdditional           uint   `gorm:"column:account_additional;type:int(11) unsigned;comment:账号额外增加" json:"account_additional"`
+	VideoAdditional             uint   `gorm:"column:video_additional;type:int(11) unsigned;comment:图文额外增加" json:"video_additional"`
+	ImagesAdditional            uint   `gorm:"column:images_additional;type:int(11) unsigned;comment:图文额外增加" json:"images_additional"`
+	DataAdditional              uint   `gorm:"column:data_additional;type:int(11) unsigned;comment:数据额外增加" json:"data_additional"`
+	AvailableDurationAdditional uint   `gorm:"column:available_duration_additional;type:int(11) unsigned;comment:可用时长增加" json:"available_duration_additional"`
+	Type                        int    `gorm:"column:type;type:tinyint(4);comment:类型 0:手动操作" json:"type"`
+	Remark                      string `gorm:"column:remark;type:text;comment:备注" json:"remark"`
+	AssociatedOrderNumber       string `gorm:"column:associated_order_number;type:varchar(1024);comment:关联增值服务订单号" json:"associated_order_number"`
+	OperatorId                  int    `gorm:"column:operator_id;type:int(11);comment:操作人id" json:"operator_id"`
+}
+
+// TableName 表名称
+func (*BundleExtensionRecords) TableName() string {
+	return "bundle_extension_records"
+}
+
+type BundleExtendRecordItemPo struct {
+	UserName                    string    `json:"userName" gorm:"column:user_name"`
+	UserPhoneNumber             int64     `json:"userPhoneNumber" gorm:"column:user_phone_number"`
+	AccountAdditional           uint32    `json:"accountAdditional" gorm:"column:account_additional"`
+	VideoAdditional             uint32    `json:"videoAdditional" gorm:"column:video_additional"`
+	ImagesAdditional            uint32    `json:"imagesAdditional" gorm:"column:images_additional"`
+	DataAdditional              uint32    `json:"dataAdditional" gorm:"column:data_additional"`
+	AvailableDurationAdditional uint32    `json:"availableDurationAdditional" gorm:"column:available_duration_additional"`
+	Type                        int32     `json:"type" gorm:"column:type"`
+	CreatedAt                   time.Time `json:"createdAt" gorm:"column:created_at"`
+	Remark                      string    `json:"remark" gorm:"column:remark"`
+	AssociatedOrderNumber       string    `json:"associatedOrderNumber" gorm:"column:associated_order_number"`
+	OperatorName                string    `json:"operatorName" gorm:"column:operator_name"`
+	OperatorPhoneNumber         string    `json:"operatorPhoneNumber" gorm:"column:operator_phone_number"`
+}
+
+type BundleBalanceManagement struct {
+	gorm.Model
+	UserId               int       `gorm:"column:user_id;type:int(11);NOT NULL" json:"user_id"`
+	ExpirationTime       time.Time `gorm:"column:expiration_time;type:timestamp;default:CURRENT_TIMESTAMP;NOT NULL" json:"expiration_time"`
+	BundleName           string    `gorm:"column:bundle_name;type:varchar(1024);NOT NULL" json:"bundle_name"`
+	AccountNumber        int       `gorm:"column:account_number;type:int(11);NOT NULL" json:"account_number"`
+	VideoNumber          int       `gorm:"column:video_number;type:int(11);NOT NULL" json:"video_number"`
+	ImageNumber          int       `gorm:"column:image_number;type:int(11);NOT NULL" json:"image_number"`
+	DataAnalysisNumber   int       `gorm:"column:data_analysis_number;type:int(11);NOT NULL" json:"data_analysis_number"`
+	ExpansionPacksNumber int       `gorm:"column:expansion_packs_number;type:int(11);default:0" json:"expansion_packs_number"`
+}
+
+func (m *BundleBalanceManagement) TableName() string {
+	return "bundle_balance_management"
+}
diff --git a/pb/bundle.proto b/pb/bundle.proto
index 1529eb0..ee889ff 100644
--- a/pb/bundle.proto
+++ b/pb/bundle.proto
@@ -29,7 +29,7 @@ service Bundle {
   rpc  OrderRecordsDetail(OrderRecordsDetailRequest) returns (OrderRecordsDetailResponse) {}
   rpc  UpdateFinancialConfirmationStatus(FinancialConfirmationRequest) returns (CommonResponse) {}
 
-  //增值套餐
+  //增值套餐 
   rpc CreateValueAddBundle(CreateValueAddBundleRequest) returns (CreateValueAddBundleResponse) {}
   rpc ValueAddBundleList(ValueAddBundleListRequest) returns (ValueAddBundleListResponse) {}
   rpc ValueAddBundleDetail(ValueAddBundleDetailRequest) returns (ValueAddBundleDetailResponse) {}
@@ -38,6 +38,11 @@ service Bundle {
   rpc SaveValueAddService(ValueAddServiceLang) returns (SaveResponse) {}
   rpc ValueAddServiceList(ValueAddServiceListRequest) returns (ValueAddServiceListResponse) {}
   rpc ValueAddServiceDetail(ValueAddServiceDetailRequest) returns (ValueAddServiceDetailResponse) {}  
+
+  // 余量管理
+  rpc BundleExtend(BundleExtendRequest) returns (BundleExtendResponse) {} // 套餐扩展
+  rpc BundleExtendRecordsList(BundleExtendRecordsListRequest) returns (BundleExtendRecordsListResponse) {} // 套餐扩展记录查询
+
 }
 
 message CommonResponse {
@@ -304,4 +309,67 @@ message ValueAddServiceDetailResponse {
   string msg = 1 [json_name = "msg"];
   ValueAddServiceLang valueAddServiceLang = 2 [json_name = "valueAddServiceLang"];
 }
-//*********************************新增值服务-over******************************************
\ No newline at end of file
+//*********************************新增值服务-over******************************************
+
+
+message BundleExtendRequest{
+  int64 userId = 1;
+  uint32 accountAdditional = 2; 
+  uint32 videoAdditional = 3; 
+  uint32 imagesAdditional = 4; 
+  uint32 dataAdditional = 5;
+  uint32 availableDurationAdditional = 6; 
+  string remark = 7; 
+  string associatedorderNumber = 8; 
+  int64 operatorId = 9;
+}
+
+message BundleExtendResponse{
+}
+
+message BundleExtendRecordsListRequest{
+  int32 page = 1;
+  int32 pageSize = 2;
+  string user = 3; 
+  string operator = 4;
+  uint64 startTime = 5;
+  uint64 endTime = 6;
+  uint32 type = 7;
+  string associatedOrderNumber = 8;
+}
+
+message BundleExtendRecordsListResponse{
+  int64 total = 1;
+  repeated BundleExtendRecordItem data = 2;
+}
+
+message BundleExtendRecordItem{
+  string userName = 1; 
+  string userPhoneNumber = 2; 
+  uint32 accountAdditional = 3;
+  uint32 videoAdditional = 4; 
+  uint32 imagesAdditional = 5; 
+  uint32 dataAdditional = 6; 
+  uint32 availableDurationAdditional = 7;
+  int32 type = 8;
+  uint64 createdAt = 9; 
+  string remark = 10; 
+  string associatedOrderNumber = 11;
+  string operatorName = 12; 
+  string operatorPhoneNumber = 13; 
+}
+
+message SetBundleBalanceRequest {
+  int32 userId = 1;
+  int64 expirationTime = 2;
+  string bundleName = 3;
+  int32 accountNumber = 4;
+  int32 videoNumber = 5;
+  int32 imageNumber = 6;
+  int32 dataAnalysisNumber = 7;
+  int32 expansionPacksNumber = 8;
+}
+
+message SetBundleBalanceResponse {
+
+}
\ No newline at end of file
diff --git a/pb/bundle/bundle.pb.go b/pb/bundle/bundle.pb.go
index f077758..913c457 100644
--- a/pb/bundle/bundle.pb.go
+++ b/pb/bundle/bundle.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.35.1
-// 	protoc        v5.29.2
+// 	protoc-gen-go v1.29.1
+// 	protoc        v3.20.3
 // source: pb/bundle.proto
 
 package bundle
@@ -34,9 +34,11 @@ type CommonResponse struct {
 
 func (x *CommonResponse) Reset() {
 	*x = CommonResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[0]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *CommonResponse) String() string {
@@ -47,7 +49,7 @@ func (*CommonResponse) ProtoMessage() {}
 
 func (x *CommonResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[0]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -110,9 +112,11 @@ type BundleProfile struct {
 
 func (x *BundleProfile) Reset() {
 	*x = BundleProfile{}
-	mi := &file_pb_bundle_proto_msgTypes[1]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BundleProfile) String() string {
@@ -123,7 +127,7 @@ func (*BundleProfile) ProtoMessage() {}
 
 func (x *BundleProfile) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[1]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -285,9 +289,11 @@ type BundleProfileLang struct {
 
 func (x *BundleProfileLang) Reset() {
 	*x = BundleProfileLang{}
-	mi := &file_pb_bundle_proto_msgTypes[2]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BundleProfileLang) String() string {
@@ -298,7 +304,7 @@ func (*BundleProfileLang) ProtoMessage() {}
 
 func (x *BundleProfileLang) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[2]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -409,9 +415,11 @@ type SaveResponse struct {
 
 func (x *SaveResponse) Reset() {
 	*x = SaveResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[3]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *SaveResponse) String() string {
@@ -422,7 +430,7 @@ func (*SaveResponse) ProtoMessage() {}
 
 func (x *SaveResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[3]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -470,9 +478,11 @@ type SelectValueAddService struct {
 
 func (x *SelectValueAddService) Reset() {
 	*x = SelectValueAddService{}
-	mi := &file_pb_bundle_proto_msgTypes[4]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *SelectValueAddService) String() string {
@@ -483,7 +493,7 @@ func (*SelectValueAddService) ProtoMessage() {}
 
 func (x *SelectValueAddService) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[4]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -529,9 +539,11 @@ type DelBundleRequest struct {
 
 func (x *DelBundleRequest) Reset() {
 	*x = DelBundleRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[5]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *DelBundleRequest) String() string {
@@ -542,7 +554,7 @@ func (*DelBundleRequest) ProtoMessage() {}
 
 func (x *DelBundleRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[5]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -578,9 +590,11 @@ type BundleListRequest struct {
 
 func (x *BundleListRequest) Reset() {
 	*x = BundleListRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[6]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BundleListRequest) String() string {
@@ -591,7 +605,7 @@ func (*BundleListRequest) ProtoMessage() {}
 
 func (x *BundleListRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[6]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -652,9 +666,11 @@ type BundleListResponse struct {
 
 func (x *BundleListResponse) Reset() {
 	*x = BundleListResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[7]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BundleListResponse) String() string {
@@ -665,7 +681,7 @@ func (*BundleListResponse) ProtoMessage() {}
 
 func (x *BundleListResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[7]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -705,9 +721,11 @@ type BundleDetailRequest struct {
 
 func (x *BundleDetailRequest) Reset() {
 	*x = BundleDetailRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[8]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BundleDetailRequest) String() string {
@@ -718,7 +736,7 @@ func (*BundleDetailRequest) ProtoMessage() {}
 
 func (x *BundleDetailRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[8]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -758,9 +776,11 @@ type HandShelfRequest struct {
 
 func (x *HandShelfRequest) Reset() {
 	*x = HandShelfRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[9]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *HandShelfRequest) String() string {
@@ -771,7 +791,7 @@ func (*HandShelfRequest) ProtoMessage() {}
 
 func (x *HandShelfRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[9]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -811,9 +831,11 @@ type BundleDetailResponse struct {
 
 func (x *BundleDetailResponse) Reset() {
 	*x = BundleDetailResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[10]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BundleDetailResponse) String() string {
@@ -824,7 +846,7 @@ func (*BundleDetailResponse) ProtoMessage() {}
 
 func (x *BundleDetailResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[10]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -865,9 +887,11 @@ type BundleDetailResponseV2 struct {
 
 func (x *BundleDetailResponseV2) Reset() {
 	*x = BundleDetailResponseV2{}
-	mi := &file_pb_bundle_proto_msgTypes[11]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *BundleDetailResponseV2) String() string {
@@ -878,7 +902,7 @@ func (*BundleDetailResponseV2) ProtoMessage() {}
 
 func (x *BundleDetailResponseV2) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[11]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -957,9 +981,11 @@ type OrderRecord struct {
 
 func (x *OrderRecord) Reset() {
 	*x = OrderRecord{}
-	mi := &file_pb_bundle_proto_msgTypes[12]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *OrderRecord) String() string {
@@ -970,7 +996,7 @@ func (*OrderRecord) ProtoMessage() {}
 
 func (x *OrderRecord) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[12]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1248,9 +1274,11 @@ type OrderRecordsRequest struct {
 
 func (x *OrderRecordsRequest) Reset() {
 	*x = OrderRecordsRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[13]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *OrderRecordsRequest) String() string {
@@ -1261,7 +1289,7 @@ func (*OrderRecordsRequest) ProtoMessage() {}
 
 func (x *OrderRecordsRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[13]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1399,9 +1427,11 @@ type OrderRecordsResponse struct {
 
 func (x *OrderRecordsResponse) Reset() {
 	*x = OrderRecordsResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[14]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *OrderRecordsResponse) String() string {
@@ -1412,7 +1442,7 @@ func (*OrderRecordsResponse) ProtoMessage() {}
 
 func (x *OrderRecordsResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[14]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1453,9 +1483,11 @@ type OrderRecordsDetailRequest struct {
 
 func (x *OrderRecordsDetailRequest) Reset() {
 	*x = OrderRecordsDetailRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[15]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *OrderRecordsDetailRequest) String() string {
@@ -1466,7 +1498,7 @@ func (*OrderRecordsDetailRequest) ProtoMessage() {}
 
 func (x *OrderRecordsDetailRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[15]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1513,9 +1545,11 @@ type OrderRecordsDetailResponse struct {
 
 func (x *OrderRecordsDetailResponse) Reset() {
 	*x = OrderRecordsDetailResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[16]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *OrderRecordsDetailResponse) String() string {
@@ -1526,7 +1560,7 @@ func (*OrderRecordsDetailResponse) ProtoMessage() {}
 
 func (x *OrderRecordsDetailResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[16]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1575,9 +1609,11 @@ type ValueAddBundleProfile struct {
 
 func (x *ValueAddBundleProfile) Reset() {
 	*x = ValueAddBundleProfile{}
-	mi := &file_pb_bundle_proto_msgTypes[17]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddBundleProfile) String() string {
@@ -1588,7 +1624,7 @@ func (*ValueAddBundleProfile) ProtoMessage() {}
 
 func (x *ValueAddBundleProfile) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[17]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1683,9 +1719,11 @@ type CreateValueAddBundleRequest struct {
 
 func (x *CreateValueAddBundleRequest) Reset() {
 	*x = CreateValueAddBundleRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[18]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *CreateValueAddBundleRequest) String() string {
@@ -1696,7 +1734,7 @@ func (*CreateValueAddBundleRequest) ProtoMessage() {}
 
 func (x *CreateValueAddBundleRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[18]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1731,9 +1769,11 @@ type CreateValueAddBundleResponse struct {
 
 func (x *CreateValueAddBundleResponse) Reset() {
 	*x = CreateValueAddBundleResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[19]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *CreateValueAddBundleResponse) String() string {
@@ -1744,7 +1784,7 @@ func (*CreateValueAddBundleResponse) ProtoMessage() {}
 
 func (x *CreateValueAddBundleResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[19]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1800,9 +1840,11 @@ type ValueAddBundleListRequest struct {
 
 func (x *ValueAddBundleListRequest) Reset() {
 	*x = ValueAddBundleListRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[20]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddBundleListRequest) String() string {
@@ -1813,7 +1855,7 @@ func (*ValueAddBundleListRequest) ProtoMessage() {}
 
 func (x *ValueAddBundleListRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[20]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1866,9 +1908,11 @@ type ValueAddBundleListResponse struct {
 
 func (x *ValueAddBundleListResponse) Reset() {
 	*x = ValueAddBundleListResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[21]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddBundleListResponse) String() string {
@@ -1879,7 +1923,7 @@ func (*ValueAddBundleListResponse) ProtoMessage() {}
 
 func (x *ValueAddBundleListResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[21]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -1960,9 +2004,11 @@ type ValueAddBundleDetailRequest struct {
 
 func (x *ValueAddBundleDetailRequest) Reset() {
 	*x = ValueAddBundleDetailRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[22]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddBundleDetailRequest) String() string {
@@ -1973,7 +2019,7 @@ func (*ValueAddBundleDetailRequest) ProtoMessage() {}
 
 func (x *ValueAddBundleDetailRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[22]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2007,9 +2053,11 @@ type ValueAddBundleDetailResponse struct {
 
 func (x *ValueAddBundleDetailResponse) Reset() {
 	*x = ValueAddBundleDetailResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[23]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddBundleDetailResponse) String() string {
@@ -2020,7 +2068,7 @@ func (*ValueAddBundleDetailResponse) ProtoMessage() {}
 
 func (x *ValueAddBundleDetailResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[23]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2066,9 +2114,11 @@ type FinancialConfirmationRequest struct {
 
 func (x *FinancialConfirmationRequest) Reset() {
 	*x = FinancialConfirmationRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[24]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *FinancialConfirmationRequest) String() string {
@@ -2079,7 +2129,7 @@ func (*FinancialConfirmationRequest) ProtoMessage() {}
 
 func (x *FinancialConfirmationRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[24]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2116,9 +2166,11 @@ type ValueAddService struct {
 
 func (x *ValueAddService) Reset() {
 	*x = ValueAddService{}
-	mi := &file_pb_bundle_proto_msgTypes[25]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddService) String() string {
@@ -2129,7 +2181,7 @@ func (*ValueAddService) ProtoMessage() {}
 
 func (x *ValueAddService) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[25]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2192,9 +2244,11 @@ type ValueAddServiceLang struct {
 
 func (x *ValueAddServiceLang) Reset() {
 	*x = ValueAddServiceLang{}
-	mi := &file_pb_bundle_proto_msgTypes[26]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddServiceLang) String() string {
@@ -2205,7 +2259,7 @@ func (*ValueAddServiceLang) ProtoMessage() {}
 
 func (x *ValueAddServiceLang) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[26]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2311,9 +2365,11 @@ type ValueAddPriceOptions struct {
 
 func (x *ValueAddPriceOptions) Reset() {
 	*x = ValueAddPriceOptions{}
-	mi := &file_pb_bundle_proto_msgTypes[27]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddPriceOptions) String() string {
@@ -2324,7 +2380,7 @@ func (*ValueAddPriceOptions) ProtoMessage() {}
 
 func (x *ValueAddPriceOptions) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[27]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2381,9 +2437,11 @@ type ValueAddServiceListRequest struct {
 
 func (x *ValueAddServiceListRequest) Reset() {
 	*x = ValueAddServiceListRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[28]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddServiceListRequest) String() string {
@@ -2394,7 +2452,7 @@ func (*ValueAddServiceListRequest) ProtoMessage() {}
 
 func (x *ValueAddServiceListRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[28]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2449,9 +2507,11 @@ type ValueAddServiceListResponse struct {
 
 func (x *ValueAddServiceListResponse) Reset() {
 	*x = ValueAddServiceListResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[29]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddServiceListResponse) String() string {
@@ -2462,7 +2522,7 @@ func (*ValueAddServiceListResponse) ProtoMessage() {}
 
 func (x *ValueAddServiceListResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[29]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2510,9 +2570,11 @@ type ValueAddServiceDetailRequest struct {
 
 func (x *ValueAddServiceDetailRequest) Reset() {
 	*x = ValueAddServiceDetailRequest{}
-	mi := &file_pb_bundle_proto_msgTypes[30]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddServiceDetailRequest) String() string {
@@ -2523,7 +2585,7 @@ func (*ValueAddServiceDetailRequest) ProtoMessage() {}
 
 func (x *ValueAddServiceDetailRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[30]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2563,9 +2625,11 @@ type ValueAddServiceDetailResponse struct {
 
 func (x *ValueAddServiceDetailResponse) Reset() {
 	*x = ValueAddServiceDetailResponse{}
-	mi := &file_pb_bundle_proto_msgTypes[31]
-	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-	ms.StoreMessageInfo(mi)
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
 func (x *ValueAddServiceDetailResponse) String() string {
@@ -2576,7 +2640,7 @@ func (*ValueAddServiceDetailResponse) ProtoMessage() {}
 
 func (x *ValueAddServiceDetailResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[31]
-	if x != nil {
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2605,6 +2669,597 @@ func (x *ValueAddServiceDetailResponse) GetValueAddServiceLang() *ValueAddServic
 	return nil
 }
 
+type BundleExtendRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId                      int64  `protobuf:"varint,1,opt,name=userId,proto3" json:"userId,omitempty"`
+	AccountAdditional           uint32 `protobuf:"varint,2,opt,name=accountAdditional,proto3" json:"accountAdditional,omitempty"`
+	VideoAdditional             uint32 `protobuf:"varint,3,opt,name=videoAdditional,proto3" json:"videoAdditional,omitempty"`
+	ImagesAdditional            uint32 `protobuf:"varint,4,opt,name=imagesAdditional,proto3" json:"imagesAdditional,omitempty"`
+	DataAdditional              uint32 `protobuf:"varint,5,opt,name=dataAdditional,proto3" json:"dataAdditional,omitempty"`
+	AvailableDurationAdditional uint32 `protobuf:"varint,6,opt,name=availableDurationAdditional,proto3" json:"availableDurationAdditional,omitempty"`
+	Remark                      string `protobuf:"bytes,7,opt,name=remark,proto3" json:"remark,omitempty"`
+	AssociatedorderNumber       string `protobuf:"bytes,8,opt,name=associatedorderNumber,proto3" json:"associatedorderNumber,omitempty"`
+	OperatorId                  int64  `protobuf:"varint,9,opt,name=operatorId,proto3" json:"operatorId,omitempty"`
+}
+
+func (x *BundleExtendRequest) Reset() {
+	*x = BundleExtendRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *BundleExtendRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BundleExtendRequest) ProtoMessage() {}
+
+func (x *BundleExtendRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[32]
+	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 BundleExtendRequest.ProtoReflect.Descriptor instead.
+func (*BundleExtendRequest) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *BundleExtendRequest) GetUserId() int64 {
+	if x != nil {
+		return x.UserId
+	}
+	return 0
+}
+
+func (x *BundleExtendRequest) GetAccountAdditional() uint32 {
+	if x != nil {
+		return x.AccountAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRequest) GetVideoAdditional() uint32 {
+	if x != nil {
+		return x.VideoAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRequest) GetImagesAdditional() uint32 {
+	if x != nil {
+		return x.ImagesAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRequest) GetDataAdditional() uint32 {
+	if x != nil {
+		return x.DataAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRequest) GetAvailableDurationAdditional() uint32 {
+	if x != nil {
+		return x.AvailableDurationAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRequest) GetRemark() string {
+	if x != nil {
+		return x.Remark
+	}
+	return ""
+}
+
+func (x *BundleExtendRequest) GetAssociatedorderNumber() string {
+	if x != nil {
+		return x.AssociatedorderNumber
+	}
+	return ""
+}
+
+func (x *BundleExtendRequest) GetOperatorId() int64 {
+	if x != nil {
+		return x.OperatorId
+	}
+	return 0
+}
+
+type BundleExtendResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *BundleExtendResponse) Reset() {
+	*x = BundleExtendResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *BundleExtendResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BundleExtendResponse) ProtoMessage() {}
+
+func (x *BundleExtendResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[33]
+	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 BundleExtendResponse.ProtoReflect.Descriptor instead.
+func (*BundleExtendResponse) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{33}
+}
+
+type BundleExtendRecordsListRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Page                  int32  `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"`
+	PageSize              int32  `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
+	User                  string `protobuf:"bytes,3,opt,name=user,proto3" json:"user,omitempty"`
+	Operator              string `protobuf:"bytes,4,opt,name=operator,proto3" json:"operator,omitempty"`
+	StartTime             uint64 `protobuf:"varint,5,opt,name=startTime,proto3" json:"startTime,omitempty"`
+	EndTime               uint64 `protobuf:"varint,6,opt,name=endTime,proto3" json:"endTime,omitempty"`
+	Type                  uint32 `protobuf:"varint,7,opt,name=type,proto3" json:"type,omitempty"`
+	AssociatedOrderNumber string `protobuf:"bytes,8,opt,name=associatedOrderNumber,proto3" json:"associatedOrderNumber,omitempty"`
+}
+
+func (x *BundleExtendRecordsListRequest) Reset() {
+	*x = BundleExtendRecordsListRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *BundleExtendRecordsListRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BundleExtendRecordsListRequest) ProtoMessage() {}
+
+func (x *BundleExtendRecordsListRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[34]
+	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 BundleExtendRecordsListRequest.ProtoReflect.Descriptor instead.
+func (*BundleExtendRecordsListRequest) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{34}
+}
+
+func (x *BundleExtendRecordsListRequest) GetPage() int32 {
+	if x != nil {
+		return x.Page
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordsListRequest) GetPageSize() int32 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordsListRequest) GetUser() string {
+	if x != nil {
+		return x.User
+	}
+	return ""
+}
+
+func (x *BundleExtendRecordsListRequest) GetOperator() string {
+	if x != nil {
+		return x.Operator
+	}
+	return ""
+}
+
+func (x *BundleExtendRecordsListRequest) GetStartTime() uint64 {
+	if x != nil {
+		return x.StartTime
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordsListRequest) GetEndTime() uint64 {
+	if x != nil {
+		return x.EndTime
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordsListRequest) GetType() uint32 {
+	if x != nil {
+		return x.Type
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordsListRequest) GetAssociatedOrderNumber() string {
+	if x != nil {
+		return x.AssociatedOrderNumber
+	}
+	return ""
+}
+
+type BundleExtendRecordsListResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Total int64                     `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"`
+	Data  []*BundleExtendRecordItem `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *BundleExtendRecordsListResponse) Reset() {
+	*x = BundleExtendRecordsListResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *BundleExtendRecordsListResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BundleExtendRecordsListResponse) ProtoMessage() {}
+
+func (x *BundleExtendRecordsListResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[35]
+	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 BundleExtendRecordsListResponse.ProtoReflect.Descriptor instead.
+func (*BundleExtendRecordsListResponse) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{35}
+}
+
+func (x *BundleExtendRecordsListResponse) GetTotal() int64 {
+	if x != nil {
+		return x.Total
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordsListResponse) GetData() []*BundleExtendRecordItem {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type BundleExtendRecordItem struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserName                    string `protobuf:"bytes,1,opt,name=userName,proto3" json:"userName,omitempty"`
+	UserPhoneNumber             string `protobuf:"bytes,2,opt,name=userPhoneNumber,proto3" json:"userPhoneNumber,omitempty"`
+	AccountAdditional           uint32 `protobuf:"varint,3,opt,name=accountAdditional,proto3" json:"accountAdditional,omitempty"`
+	VideoAdditional             uint32 `protobuf:"varint,4,opt,name=videoAdditional,proto3" json:"videoAdditional,omitempty"`
+	ImagesAdditional            uint32 `protobuf:"varint,5,opt,name=imagesAdditional,proto3" json:"imagesAdditional,omitempty"`
+	DataAdditional              uint32 `protobuf:"varint,6,opt,name=dataAdditional,proto3" json:"dataAdditional,omitempty"`
+	AvailableDurationAdditional uint32 `protobuf:"varint,7,opt,name=availableDurationAdditional,proto3" json:"availableDurationAdditional,omitempty"`
+	Type                        int32  `protobuf:"varint,8,opt,name=type,proto3" json:"type,omitempty"`
+	CreatedAt                   uint64 `protobuf:"varint,9,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
+	Remark                      string `protobuf:"bytes,10,opt,name=remark,proto3" json:"remark,omitempty"`
+	AssociatedOrderNumber       string `protobuf:"bytes,11,opt,name=associatedOrderNumber,proto3" json:"associatedOrderNumber,omitempty"`
+	OperatorName                string `protobuf:"bytes,12,opt,name=operatorName,proto3" json:"operatorName,omitempty"`
+	OperatorPhoneNumber         string `protobuf:"bytes,13,opt,name=operatorPhoneNumber,proto3" json:"operatorPhoneNumber,omitempty"`
+}
+
+func (x *BundleExtendRecordItem) Reset() {
+	*x = BundleExtendRecordItem{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *BundleExtendRecordItem) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BundleExtendRecordItem) ProtoMessage() {}
+
+func (x *BundleExtendRecordItem) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[36]
+	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 BundleExtendRecordItem.ProtoReflect.Descriptor instead.
+func (*BundleExtendRecordItem) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{36}
+}
+
+func (x *BundleExtendRecordItem) GetUserName() string {
+	if x != nil {
+		return x.UserName
+	}
+	return ""
+}
+
+func (x *BundleExtendRecordItem) GetUserPhoneNumber() string {
+	if x != nil {
+		return x.UserPhoneNumber
+	}
+	return ""
+}
+
+func (x *BundleExtendRecordItem) GetAccountAdditional() uint32 {
+	if x != nil {
+		return x.AccountAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordItem) GetVideoAdditional() uint32 {
+	if x != nil {
+		return x.VideoAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordItem) GetImagesAdditional() uint32 {
+	if x != nil {
+		return x.ImagesAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordItem) GetDataAdditional() uint32 {
+	if x != nil {
+		return x.DataAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordItem) GetAvailableDurationAdditional() uint32 {
+	if x != nil {
+		return x.AvailableDurationAdditional
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordItem) GetType() int32 {
+	if x != nil {
+		return x.Type
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordItem) GetCreatedAt() uint64 {
+	if x != nil {
+		return x.CreatedAt
+	}
+	return 0
+}
+
+func (x *BundleExtendRecordItem) GetRemark() string {
+	if x != nil {
+		return x.Remark
+	}
+	return ""
+}
+
+func (x *BundleExtendRecordItem) GetAssociatedOrderNumber() string {
+	if x != nil {
+		return x.AssociatedOrderNumber
+	}
+	return ""
+}
+
+func (x *BundleExtendRecordItem) GetOperatorName() string {
+	if x != nil {
+		return x.OperatorName
+	}
+	return ""
+}
+
+func (x *BundleExtendRecordItem) GetOperatorPhoneNumber() string {
+	if x != nil {
+		return x.OperatorPhoneNumber
+	}
+	return ""
+}
+
+type SetBundleBalanceRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId               int32  `protobuf:"varint,1,opt,name=userId,proto3" json:"userId,omitempty"`
+	ExpirationTime       int64  `protobuf:"varint,2,opt,name=expirationTime,proto3" json:"expirationTime,omitempty"`
+	BundleName           string `protobuf:"bytes,3,opt,name=bundleName,proto3" json:"bundleName,omitempty"`
+	AccountNumber        int32  `protobuf:"varint,4,opt,name=accountNumber,proto3" json:"accountNumber,omitempty"`
+	VideoNumber          int32  `protobuf:"varint,5,opt,name=videoNumber,proto3" json:"videoNumber,omitempty"`
+	ImageNumber          int32  `protobuf:"varint,6,opt,name=imageNumber,proto3" json:"imageNumber,omitempty"`
+	DataAnalysisNumber   int32  `protobuf:"varint,7,opt,name=dataAnalysisNumber,proto3" json:"dataAnalysisNumber,omitempty"`
+	ExpansionPacksNumber int32  `protobuf:"varint,8,opt,name=expansionPacksNumber,proto3" json:"expansionPacksNumber,omitempty"`
+}
+
+func (x *SetBundleBalanceRequest) Reset() {
+	*x = SetBundleBalanceRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SetBundleBalanceRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetBundleBalanceRequest) ProtoMessage() {}
+
+func (x *SetBundleBalanceRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[37]
+	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 SetBundleBalanceRequest.ProtoReflect.Descriptor instead.
+func (*SetBundleBalanceRequest) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{37}
+}
+
+func (x *SetBundleBalanceRequest) GetUserId() int32 {
+	if x != nil {
+		return x.UserId
+	}
+	return 0
+}
+
+func (x *SetBundleBalanceRequest) GetExpirationTime() int64 {
+	if x != nil {
+		return x.ExpirationTime
+	}
+	return 0
+}
+
+func (x *SetBundleBalanceRequest) GetBundleName() string {
+	if x != nil {
+		return x.BundleName
+	}
+	return ""
+}
+
+func (x *SetBundleBalanceRequest) GetAccountNumber() int32 {
+	if x != nil {
+		return x.AccountNumber
+	}
+	return 0
+}
+
+func (x *SetBundleBalanceRequest) GetVideoNumber() int32 {
+	if x != nil {
+		return x.VideoNumber
+	}
+	return 0
+}
+
+func (x *SetBundleBalanceRequest) GetImageNumber() int32 {
+	if x != nil {
+		return x.ImageNumber
+	}
+	return 0
+}
+
+func (x *SetBundleBalanceRequest) GetDataAnalysisNumber() int32 {
+	if x != nil {
+		return x.DataAnalysisNumber
+	}
+	return 0
+}
+
+func (x *SetBundleBalanceRequest) GetExpansionPacksNumber() int32 {
+	if x != nil {
+		return x.ExpansionPacksNumber
+	}
+	return 0
+}
+
+type SetBundleBalanceResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *SetBundleBalanceResponse) Reset() {
+	*x = SetBundleBalanceResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_bundle_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SetBundleBalanceResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetBundleBalanceResponse) ProtoMessage() {}
+
+func (x *SetBundleBalanceResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[38]
+	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 SetBundleBalanceResponse.ProtoReflect.Descriptor instead.
+func (*SetBundleBalanceResponse) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{38}
+}
+
 var File_pb_bundle_proto protoreflect.FileDescriptor
 
 var file_pb_bundle_proto_rawDesc = []byte{
@@ -3012,115 +3667,238 @@ var file_pb_bundle_proto_rawDesc = []byte{
 	0x61, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64,
 	0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69,
 	0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x32, 0xa3, 0x0d, 0x0a, 0x06,
-	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
-	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x16, 0x2e,
-	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x22, 0x89, 0x03, 0x0a, 0x13,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x61,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41,
+	0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x64,
+	0x65, 0x6f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x0f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x41, 0x64, 0x64,
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69,
+	0x6d, 0x61, 0x67, 0x65, 0x73, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12,
+	0x26, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+	0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x41, 0x64, 0x64,
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x40, 0x0a, 0x1b, 0x61, 0x76, 0x61, 0x69, 0x6c,
+	0x61, 0x62, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1b, 0x61, 0x76,
+	0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41,
+	0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d,
+	0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72,
+	0x6b, 0x12, 0x34, 0x0a, 0x15, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x6f,
+	0x72, 0x64, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x15, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x6f, 0x72, 0x64, 0x65,
+	0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61,
+	0x74, 0x6f, 0x72, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6f, 0x70, 0x65,
+	0x72, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x42, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x82, 0x02, 0x0a, 0x1e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64,
+	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69,
+	0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69,
+	0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
+	0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
+	0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65,
+	0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x04, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79,
+	0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34,
+	0x0a, 0x15, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x64, 0x65,
+	0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x61,
+	0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x75,
+	0x6d, 0x62, 0x65, 0x72, 0x22, 0x6b, 0x0a, 0x1f, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78,
+	0x74, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x32, 0x0a,
+	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x62, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x64, 0x61, 0x74,
+	0x61, 0x22, 0xa2, 0x04, 0x0a, 0x16, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08,
+	0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72,
+	0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62,
+	0x65, 0x72, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64,
+	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x61,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x76, 0x69, 0x64, 0x65, 0x6f,
+	0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6d,
+	0x61, 0x67, 0x65, 0x73, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x41, 0x64, 0x64, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x41, 0x64,
+	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e,
+	0x64, 0x61, 0x74, 0x61, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x40,
+	0x0a, 0x1b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x1b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x75,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+	0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
+	0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41,
+	0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
+	0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x34, 0x0a, 0x15, 0x61, 0x73,
+	0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x75, 0x6d,
+	0x62, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x61, 0x73, 0x73, 0x6f, 0x63,
+	0x69, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72,
+	0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
+	0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x13, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65,
+	0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xc7, 0x02, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x42, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x65, 0x78,
+	0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d,
+	0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75,
+	0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x69, 0x64, 0x65,
+	0x6f, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x76,
+	0x69, 0x64, 0x65, 0x6f, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6d,
+	0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x12,
+	0x64, 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4e, 0x75, 0x6d, 0x62,
+	0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6e,
+	0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x14,
+	0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x73, 0x4e, 0x75,
+	0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x65, 0x78, 0x70, 0x61,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72,
+	0x22, 0x1a, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x42, 0x61, 0x6c,
+	0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb7, 0x0f, 0x0a,
+	0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74,
 	0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
 	0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x16,
 	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65,
-	0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x18, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
-	0x65, 0x2e, 0x44, 0x65, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
-	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x09,
-	0x48, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x65, 0x6c, 0x66, 0x12, 0x18, 0x2e, 0x62, 0x75, 0x6e, 0x64,
-	0x6c, 0x65, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x71, 0x75,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a,
+	0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0c, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x18, 0x2e, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75,
 	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a,
-	0x0a, 0x53, 0x61, 0x76, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x62, 0x75,
-	0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
-	0x6c, 0x65, 0x1a, 0x14, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x53, 0x61, 0x76, 0x65,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0c, 0x42, 0x75,
-	0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x32, 0x12, 0x19, 0x2e, 0x62, 0x75, 0x6e,
-	0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42,
-	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74,
-	0x61, 0x69, 0x6c, 0x56, 0x32, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42,
-	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64,
-	0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x56, 0x32, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69,
-	0x73, 0x74, 0x12, 0x19, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64,
-	0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e,
-	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x42,
-	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1b, 0x2e, 0x62, 0x75,
-	0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69,
-	0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
-	0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x13, 0x2e,
-	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f,
-	0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
-	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x11,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72,
-	0x64, 0x12, 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72,
-	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
-	0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x12, 0x4b, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52,
-	0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x13,
+	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a,
+	0x09, 0x48, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x65, 0x6c, 0x66, 0x12, 0x18, 0x2e, 0x62, 0x75, 0x6e,
+	0x64, 0x6c, 0x65, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b,
+	0x0a, 0x0a, 0x53, 0x61, 0x76, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x62,
+	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66,
+	0x69, 0x6c, 0x65, 0x1a, 0x14, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x53, 0x61, 0x76,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0c, 0x42,
+	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x32, 0x12, 0x19, 0x2e, 0x62, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65,
+	0x74, 0x61, 0x69, 0x6c, 0x56, 0x32, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e,
+	0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x56, 0x32, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c,
+	0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e,
+	0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a,
+	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1b, 0x2e, 0x62,
+	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x11, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x13,
 	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63,
 	0x6f, 0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d,
-	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a,
-	0x10, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c, 0x69, 0x73,
-	0x74, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72,
-	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c,
-	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63,
-	0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d,
-	0x0a, 0x12, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65,
-	0x74, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72,
-	0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
-	0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74,
-	0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a,
-	0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c,
-	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x12, 0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61,
-	0x6e, 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
-	0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x00, 0x12, 0x63, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x23, 0x2e, 0x62, 0x75, 0x6e,
-	0x64, 0x6c, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41,
-	0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56,
-	0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x75, 0x65,
-	0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21, 0x2e,
-	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42,
-	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x22, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41,
-	0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41,
-	0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x23,
+	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a,
+	0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f,
+	0x72, 0x64, 0x12, 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65,
+	0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
+	0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x12, 0x4b, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72,
+	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12,
+	0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65,
+	0x63, 0x6f, 0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f,
+	0x0a, 0x10, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c, 0x69,
+	0x73, 0x74, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65,
+	0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x1c, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65,
+	0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+	0x5d, 0x0a, 0x12, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44,
+	0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f,
+	0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69,
+	0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65,
+	0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63,
+	0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61,
+	0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x46, 0x69, 0x6e,
+	0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x23, 0x2e, 0x62, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21,
 	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64,
-	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c,
-	0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69,
-	0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x13, 0x53,
-	0x61, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x1a,
-	0x14, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x75, 0x65,
-	0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22,
-	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x23, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x15, 0x56, 0x61, 0x6c,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12,
+	0x23, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64,
+	0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x13,
+	0x53, 0x61, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67,
+	0x1a, 0x14, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12,
+	0x22, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64,
+	0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x15, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x12, 0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c,
 	0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61,
-	0x69, 0x6c, 0x12, 0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69,
-	0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
-	0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x62, 0x06, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65,
+	0x6e, 0x64, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x1c, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45,
+	0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+	0x6c, 0x0a, 0x17, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52,
+	0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x2e, 0x62, 0x75, 0x6e,
+	0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64,
+	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a,
+	0x10, 0x53, 0x65, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
+	0x65, 0x12, 0x1f, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x42, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x42,
+	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -3135,40 +3913,47 @@ func file_pb_bundle_proto_rawDescGZIP() []byte {
 	return file_pb_bundle_proto_rawDescData
 }
 
-var file_pb_bundle_proto_msgTypes = make([]protoimpl.MessageInfo, 32)
-var file_pb_bundle_proto_goTypes = []any{
-	(*CommonResponse)(nil),                // 0: bundle.CommonResponse
-	(*BundleProfile)(nil),                 // 1: bundle.BundleProfile
-	(*BundleProfileLang)(nil),             // 2: bundle.BundleProfileLang
-	(*SaveResponse)(nil),                  // 3: bundle.SaveResponse
-	(*SelectValueAddService)(nil),         // 4: bundle.SelectValueAddService
-	(*DelBundleRequest)(nil),              // 5: bundle.DelBundleRequest
-	(*BundleListRequest)(nil),             // 6: bundle.BundleListRequest
-	(*BundleListResponse)(nil),            // 7: bundle.BundleListResponse
-	(*BundleDetailRequest)(nil),           // 8: bundle.BundleDetailRequest
-	(*HandShelfRequest)(nil),              // 9: bundle.HandShelfRequest
-	(*BundleDetailResponse)(nil),          // 10: bundle.BundleDetailResponse
-	(*BundleDetailResponseV2)(nil),        // 11: bundle.BundleDetailResponseV2
-	(*OrderRecord)(nil),                   // 12: bundle.OrderRecord
-	(*OrderRecordsRequest)(nil),           // 13: bundle.OrderRecordsRequest
-	(*OrderRecordsResponse)(nil),          // 14: bundle.OrderRecordsResponse
-	(*OrderRecordsDetailRequest)(nil),     // 15: bundle.OrderRecordsDetailRequest
-	(*OrderRecordsDetailResponse)(nil),    // 16: bundle.OrderRecordsDetailResponse
-	(*ValueAddBundleProfile)(nil),         // 17: bundle.ValueAddBundleProfile
-	(*CreateValueAddBundleRequest)(nil),   // 18: bundle.CreateValueAddBundleRequest
-	(*CreateValueAddBundleResponse)(nil),  // 19: bundle.CreateValueAddBundleResponse
-	(*ValueAddBundleListRequest)(nil),     // 20: bundle.ValueAddBundleListRequest
-	(*ValueAddBundleListResponse)(nil),    // 21: bundle.ValueAddBundleListResponse
-	(*ValueAddBundleDetailRequest)(nil),   // 22: bundle.ValueAddBundleDetailRequest
-	(*ValueAddBundleDetailResponse)(nil),  // 23: bundle.ValueAddBundleDetailResponse
-	(*FinancialConfirmationRequest)(nil),  // 24: bundle.FinancialConfirmationRequest
-	(*ValueAddService)(nil),               // 25: bundle.ValueAddService
-	(*ValueAddServiceLang)(nil),           // 26: bundle.ValueAddServiceLang
-	(*ValueAddPriceOptions)(nil),          // 27: bundle.ValueAddPriceOptions
-	(*ValueAddServiceListRequest)(nil),    // 28: bundle.ValueAddServiceListRequest
-	(*ValueAddServiceListResponse)(nil),   // 29: bundle.ValueAddServiceListResponse
-	(*ValueAddServiceDetailRequest)(nil),  // 30: bundle.ValueAddServiceDetailRequest
-	(*ValueAddServiceDetailResponse)(nil), // 31: bundle.ValueAddServiceDetailResponse
+var file_pb_bundle_proto_msgTypes = make([]protoimpl.MessageInfo, 39)
+var file_pb_bundle_proto_goTypes = []interface{}{
+	(*CommonResponse)(nil),                  // 0: bundle.CommonResponse
+	(*BundleProfile)(nil),                   // 1: bundle.BundleProfile
+	(*BundleProfileLang)(nil),               // 2: bundle.BundleProfileLang
+	(*SaveResponse)(nil),                    // 3: bundle.SaveResponse
+	(*SelectValueAddService)(nil),           // 4: bundle.SelectValueAddService
+	(*DelBundleRequest)(nil),                // 5: bundle.DelBundleRequest
+	(*BundleListRequest)(nil),               // 6: bundle.BundleListRequest
+	(*BundleListResponse)(nil),              // 7: bundle.BundleListResponse
+	(*BundleDetailRequest)(nil),             // 8: bundle.BundleDetailRequest
+	(*HandShelfRequest)(nil),                // 9: bundle.HandShelfRequest
+	(*BundleDetailResponse)(nil),            // 10: bundle.BundleDetailResponse
+	(*BundleDetailResponseV2)(nil),          // 11: bundle.BundleDetailResponseV2
+	(*OrderRecord)(nil),                     // 12: bundle.OrderRecord
+	(*OrderRecordsRequest)(nil),             // 13: bundle.OrderRecordsRequest
+	(*OrderRecordsResponse)(nil),            // 14: bundle.OrderRecordsResponse
+	(*OrderRecordsDetailRequest)(nil),       // 15: bundle.OrderRecordsDetailRequest
+	(*OrderRecordsDetailResponse)(nil),      // 16: bundle.OrderRecordsDetailResponse
+	(*ValueAddBundleProfile)(nil),           // 17: bundle.ValueAddBundleProfile
+	(*CreateValueAddBundleRequest)(nil),     // 18: bundle.CreateValueAddBundleRequest
+	(*CreateValueAddBundleResponse)(nil),    // 19: bundle.CreateValueAddBundleResponse
+	(*ValueAddBundleListRequest)(nil),       // 20: bundle.ValueAddBundleListRequest
+	(*ValueAddBundleListResponse)(nil),      // 21: bundle.ValueAddBundleListResponse
+	(*ValueAddBundleDetailRequest)(nil),     // 22: bundle.ValueAddBundleDetailRequest
+	(*ValueAddBundleDetailResponse)(nil),    // 23: bundle.ValueAddBundleDetailResponse
+	(*FinancialConfirmationRequest)(nil),    // 24: bundle.FinancialConfirmationRequest
+	(*ValueAddService)(nil),                 // 25: bundle.ValueAddService
+	(*ValueAddServiceLang)(nil),             // 26: bundle.ValueAddServiceLang
+	(*ValueAddPriceOptions)(nil),            // 27: bundle.ValueAddPriceOptions
+	(*ValueAddServiceListRequest)(nil),      // 28: bundle.ValueAddServiceListRequest
+	(*ValueAddServiceListResponse)(nil),     // 29: bundle.ValueAddServiceListResponse
+	(*ValueAddServiceDetailRequest)(nil),    // 30: bundle.ValueAddServiceDetailRequest
+	(*ValueAddServiceDetailResponse)(nil),   // 31: bundle.ValueAddServiceDetailResponse
+	(*BundleExtendRequest)(nil),             // 32: bundle.BundleExtendRequest
+	(*BundleExtendResponse)(nil),            // 33: bundle.BundleExtendResponse
+	(*BundleExtendRecordsListRequest)(nil),  // 34: bundle.BundleExtendRecordsListRequest
+	(*BundleExtendRecordsListResponse)(nil), // 35: bundle.BundleExtendRecordsListResponse
+	(*BundleExtendRecordItem)(nil),          // 36: bundle.BundleExtendRecordItem
+	(*SetBundleBalanceRequest)(nil),         // 37: bundle.SetBundleBalanceRequest
+	(*SetBundleBalanceResponse)(nil),        // 38: bundle.SetBundleBalanceResponse
 }
 var file_pb_bundle_proto_depIdxs = []int32{
 	4,  // 0: bundle.BundleProfile.selectValueAddService:type_name -> bundle.SelectValueAddService
@@ -3186,53 +3971,60 @@ var file_pb_bundle_proto_depIdxs = []int32{
 	27, // 12: bundle.ValueAddServiceLang.options:type_name -> bundle.ValueAddPriceOptions
 	25, // 13: bundle.ValueAddServiceListResponse.valueAddServiceList:type_name -> bundle.ValueAddService
 	26, // 14: bundle.ValueAddServiceDetailResponse.valueAddServiceLang:type_name -> bundle.ValueAddServiceLang
-	1,  // 15: bundle.Bundle.CreateBundle:input_type -> bundle.BundleProfile
-	1,  // 16: bundle.Bundle.UpdateBundle:input_type -> bundle.BundleProfile
-	5,  // 17: bundle.Bundle.DeleteBundle:input_type -> bundle.DelBundleRequest
-	9,  // 18: bundle.Bundle.HandShelf:input_type -> bundle.HandShelfRequest
-	1,  // 19: bundle.Bundle.SaveBundle:input_type -> bundle.BundleProfile
-	6,  // 20: bundle.Bundle.BundleListV2:input_type -> bundle.BundleListRequest
-	8,  // 21: bundle.Bundle.BundleDetailV2:input_type -> bundle.BundleDetailRequest
-	6,  // 22: bundle.Bundle.BundleList:input_type -> bundle.BundleListRequest
-	8,  // 23: bundle.Bundle.BundleDetail:input_type -> bundle.BundleDetailRequest
-	12, // 24: bundle.Bundle.CreateOrderRecord:input_type -> bundle.OrderRecord
-	12, // 25: bundle.Bundle.UpdateOrderRecord:input_type -> bundle.OrderRecord
-	12, // 26: bundle.Bundle.UpdateOrderRecordByOrderNo:input_type -> bundle.OrderRecord
-	13, // 27: bundle.Bundle.OrderRecordsList:input_type -> bundle.OrderRecordsRequest
-	15, // 28: bundle.Bundle.OrderRecordsDetail:input_type -> bundle.OrderRecordsDetailRequest
-	24, // 29: bundle.Bundle.UpdateFinancialConfirmationStatus:input_type -> bundle.FinancialConfirmationRequest
-	18, // 30: bundle.Bundle.CreateValueAddBundle:input_type -> bundle.CreateValueAddBundleRequest
-	20, // 31: bundle.Bundle.ValueAddBundleList:input_type -> bundle.ValueAddBundleListRequest
-	22, // 32: bundle.Bundle.ValueAddBundleDetail:input_type -> bundle.ValueAddBundleDetailRequest
-	26, // 33: bundle.Bundle.SaveValueAddService:input_type -> bundle.ValueAddServiceLang
-	28, // 34: bundle.Bundle.ValueAddServiceList:input_type -> bundle.ValueAddServiceListRequest
-	30, // 35: bundle.Bundle.ValueAddServiceDetail:input_type -> bundle.ValueAddServiceDetailRequest
-	0,  // 36: bundle.Bundle.CreateBundle:output_type -> bundle.CommonResponse
-	0,  // 37: bundle.Bundle.UpdateBundle:output_type -> bundle.CommonResponse
-	0,  // 38: bundle.Bundle.DeleteBundle:output_type -> bundle.CommonResponse
-	0,  // 39: bundle.Bundle.HandShelf:output_type -> bundle.CommonResponse
-	3,  // 40: bundle.Bundle.SaveBundle:output_type -> bundle.SaveResponse
-	7,  // 41: bundle.Bundle.BundleListV2:output_type -> bundle.BundleListResponse
-	11, // 42: bundle.Bundle.BundleDetailV2:output_type -> bundle.BundleDetailResponseV2
-	7,  // 43: bundle.Bundle.BundleList:output_type -> bundle.BundleListResponse
-	10, // 44: bundle.Bundle.BundleDetail:output_type -> bundle.BundleDetailResponse
-	0,  // 45: bundle.Bundle.CreateOrderRecord:output_type -> bundle.CommonResponse
-	0,  // 46: bundle.Bundle.UpdateOrderRecord:output_type -> bundle.CommonResponse
-	0,  // 47: bundle.Bundle.UpdateOrderRecordByOrderNo:output_type -> bundle.CommonResponse
-	14, // 48: bundle.Bundle.OrderRecordsList:output_type -> bundle.OrderRecordsResponse
-	16, // 49: bundle.Bundle.OrderRecordsDetail:output_type -> bundle.OrderRecordsDetailResponse
-	0,  // 50: bundle.Bundle.UpdateFinancialConfirmationStatus:output_type -> bundle.CommonResponse
-	19, // 51: bundle.Bundle.CreateValueAddBundle:output_type -> bundle.CreateValueAddBundleResponse
-	21, // 52: bundle.Bundle.ValueAddBundleList:output_type -> bundle.ValueAddBundleListResponse
-	23, // 53: bundle.Bundle.ValueAddBundleDetail:output_type -> bundle.ValueAddBundleDetailResponse
-	3,  // 54: bundle.Bundle.SaveValueAddService:output_type -> bundle.SaveResponse
-	29, // 55: bundle.Bundle.ValueAddServiceList:output_type -> bundle.ValueAddServiceListResponse
-	31, // 56: bundle.Bundle.ValueAddServiceDetail:output_type -> bundle.ValueAddServiceDetailResponse
-	36, // [36:57] is the sub-list for method output_type
-	15, // [15:36] is the sub-list for method input_type
-	15, // [15:15] is the sub-list for extension type_name
-	15, // [15:15] is the sub-list for extension extendee
-	0,  // [0:15] is the sub-list for field type_name
+	36, // 15: bundle.BundleExtendRecordsListResponse.data:type_name -> bundle.BundleExtendRecordItem
+	1,  // 16: bundle.Bundle.CreateBundle:input_type -> bundle.BundleProfile
+	1,  // 17: bundle.Bundle.UpdateBundle:input_type -> bundle.BundleProfile
+	5,  // 18: bundle.Bundle.DeleteBundle:input_type -> bundle.DelBundleRequest
+	9,  // 19: bundle.Bundle.HandShelf:input_type -> bundle.HandShelfRequest
+	1,  // 20: bundle.Bundle.SaveBundle:input_type -> bundle.BundleProfile
+	6,  // 21: bundle.Bundle.BundleListV2:input_type -> bundle.BundleListRequest
+	8,  // 22: bundle.Bundle.BundleDetailV2:input_type -> bundle.BundleDetailRequest
+	6,  // 23: bundle.Bundle.BundleList:input_type -> bundle.BundleListRequest
+	8,  // 24: bundle.Bundle.BundleDetail:input_type -> bundle.BundleDetailRequest
+	12, // 25: bundle.Bundle.CreateOrderRecord:input_type -> bundle.OrderRecord
+	12, // 26: bundle.Bundle.UpdateOrderRecord:input_type -> bundle.OrderRecord
+	12, // 27: bundle.Bundle.UpdateOrderRecordByOrderNo:input_type -> bundle.OrderRecord
+	13, // 28: bundle.Bundle.OrderRecordsList:input_type -> bundle.OrderRecordsRequest
+	15, // 29: bundle.Bundle.OrderRecordsDetail:input_type -> bundle.OrderRecordsDetailRequest
+	24, // 30: bundle.Bundle.UpdateFinancialConfirmationStatus:input_type -> bundle.FinancialConfirmationRequest
+	18, // 31: bundle.Bundle.CreateValueAddBundle:input_type -> bundle.CreateValueAddBundleRequest
+	20, // 32: bundle.Bundle.ValueAddBundleList:input_type -> bundle.ValueAddBundleListRequest
+	22, // 33: bundle.Bundle.ValueAddBundleDetail:input_type -> bundle.ValueAddBundleDetailRequest
+	26, // 34: bundle.Bundle.SaveValueAddService:input_type -> bundle.ValueAddServiceLang
+	28, // 35: bundle.Bundle.ValueAddServiceList:input_type -> bundle.ValueAddServiceListRequest
+	30, // 36: bundle.Bundle.ValueAddServiceDetail:input_type -> bundle.ValueAddServiceDetailRequest
+	32, // 37: bundle.Bundle.BundleExtend:input_type -> bundle.BundleExtendRequest
+	34, // 38: bundle.Bundle.BundleExtendRecordsList:input_type -> bundle.BundleExtendRecordsListRequest
+	37, // 39: bundle.Bundle.SetBundleBalance:input_type -> bundle.SetBundleBalanceRequest
+	0,  // 40: bundle.Bundle.CreateBundle:output_type -> bundle.CommonResponse
+	0,  // 41: bundle.Bundle.UpdateBundle:output_type -> bundle.CommonResponse
+	0,  // 42: bundle.Bundle.DeleteBundle:output_type -> bundle.CommonResponse
+	0,  // 43: bundle.Bundle.HandShelf:output_type -> bundle.CommonResponse
+	3,  // 44: bundle.Bundle.SaveBundle:output_type -> bundle.SaveResponse
+	7,  // 45: bundle.Bundle.BundleListV2:output_type -> bundle.BundleListResponse
+	11, // 46: bundle.Bundle.BundleDetailV2:output_type -> bundle.BundleDetailResponseV2
+	7,  // 47: bundle.Bundle.BundleList:output_type -> bundle.BundleListResponse
+	10, // 48: bundle.Bundle.BundleDetail:output_type -> bundle.BundleDetailResponse
+	0,  // 49: bundle.Bundle.CreateOrderRecord:output_type -> bundle.CommonResponse
+	0,  // 50: bundle.Bundle.UpdateOrderRecord:output_type -> bundle.CommonResponse
+	0,  // 51: bundle.Bundle.UpdateOrderRecordByOrderNo:output_type -> bundle.CommonResponse
+	14, // 52: bundle.Bundle.OrderRecordsList:output_type -> bundle.OrderRecordsResponse
+	16, // 53: bundle.Bundle.OrderRecordsDetail:output_type -> bundle.OrderRecordsDetailResponse
+	0,  // 54: bundle.Bundle.UpdateFinancialConfirmationStatus:output_type -> bundle.CommonResponse
+	19, // 55: bundle.Bundle.CreateValueAddBundle:output_type -> bundle.CreateValueAddBundleResponse
+	21, // 56: bundle.Bundle.ValueAddBundleList:output_type -> bundle.ValueAddBundleListResponse
+	23, // 57: bundle.Bundle.ValueAddBundleDetail:output_type -> bundle.ValueAddBundleDetailResponse
+	3,  // 58: bundle.Bundle.SaveValueAddService:output_type -> bundle.SaveResponse
+	29, // 59: bundle.Bundle.ValueAddServiceList:output_type -> bundle.ValueAddServiceListResponse
+	31, // 60: bundle.Bundle.ValueAddServiceDetail:output_type -> bundle.ValueAddServiceDetailResponse
+	33, // 61: bundle.Bundle.BundleExtend:output_type -> bundle.BundleExtendResponse
+	35, // 62: bundle.Bundle.BundleExtendRecordsList:output_type -> bundle.BundleExtendRecordsListResponse
+	38, // 63: bundle.Bundle.SetBundleBalance:output_type -> bundle.SetBundleBalanceResponse
+	40, // [40:64] is the sub-list for method output_type
+	16, // [16:40] is the sub-list for method input_type
+	16, // [16:16] is the sub-list for extension type_name
+	16, // [16:16] is the sub-list for extension extendee
+	0,  // [0:16] is the sub-list for field type_name
 }
 
 func init() { file_pb_bundle_proto_init() }
@@ -3240,13 +4032,483 @@ func file_pb_bundle_proto_init() {
 	if File_pb_bundle_proto != nil {
 		return
 	}
+	if !protoimpl.UnsafeEnabled {
+		file_pb_bundle_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CommonResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleProfile); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleProfileLang); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SaveResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SelectValueAddService); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DelBundleRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleListRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleListResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleDetailRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*HandShelfRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleDetailResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleDetailResponseV2); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*OrderRecord); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*OrderRecordsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*OrderRecordsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*OrderRecordsDetailRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*OrderRecordsDetailResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddBundleProfile); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CreateValueAddBundleRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CreateValueAddBundleResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddBundleListRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddBundleListResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddBundleDetailRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddBundleDetailResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FinancialConfirmationRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddService); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddServiceLang); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddPriceOptions); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddServiceListRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddServiceListResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddServiceDetailRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValueAddServiceDetailResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleExtendRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleExtendResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleExtendRecordsListRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleExtendRecordsListResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*BundleExtendRecordItem); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetBundleBalanceRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_bundle_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetBundleBalanceResponse); 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_pb_bundle_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   32,
+			NumMessages:   39,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/pb/bundle/bundle.validator.pb.go b/pb/bundle/bundle.validator.pb.go
index 7e4a09a..8e8c1a7 100644
--- a/pb/bundle/bundle.validator.pb.go
+++ b/pb/bundle/bundle.validator.pb.go
@@ -214,3 +214,31 @@ func (this *ValueAddServiceDetailResponse) Validate() error {
 	}
 	return nil
 }
+func (this *BundleExtendRequest) Validate() error {
+	return nil
+}
+func (this *BundleExtendResponse) Validate() error {
+	return nil
+}
+func (this *BundleExtendRecordsListRequest) Validate() error {
+	return nil
+}
+func (this *BundleExtendRecordsListResponse) Validate() error {
+	for _, item := range this.Data {
+		if item != nil {
+			if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
+				return github_com_mwitkow_go_proto_validators.FieldError("Data", err)
+			}
+		}
+	}
+	return nil
+}
+func (this *BundleExtendRecordItem) Validate() error {
+	return nil
+}
+func (this *SetBundleBalanceRequest) Validate() error {
+	return nil
+}
+func (this *SetBundleBalanceResponse) Validate() error {
+	return nil
+}
diff --git a/pb/bundle/bundle_triple.pb.go b/pb/bundle/bundle_triple.pb.go
index e21ada3..5ac480a 100644
--- a/pb/bundle/bundle_triple.pb.go
+++ b/pb/bundle/bundle_triple.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go-triple. DO NOT EDIT.
 // versions:
 // - protoc-gen-go-triple v1.0.8
-// - protoc             v5.29.2
+// - protoc             v3.20.3
 // source: pb/bundle.proto
 
 package bundle
@@ -43,14 +43,18 @@ type BundleClient interface {
 	OrderRecordsList(ctx context.Context, in *OrderRecordsRequest, opts ...grpc_go.CallOption) (*OrderRecordsResponse, common.ErrorWithAttachment)
 	OrderRecordsDetail(ctx context.Context, in *OrderRecordsDetailRequest, opts ...grpc_go.CallOption) (*OrderRecordsDetailResponse, common.ErrorWithAttachment)
 	UpdateFinancialConfirmationStatus(ctx context.Context, in *FinancialConfirmationRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
-	//增值套餐
+	// 增值套餐
 	CreateValueAddBundle(ctx context.Context, in *CreateValueAddBundleRequest, opts ...grpc_go.CallOption) (*CreateValueAddBundleResponse, common.ErrorWithAttachment)
 	ValueAddBundleList(ctx context.Context, in *ValueAddBundleListRequest, opts ...grpc_go.CallOption) (*ValueAddBundleListResponse, common.ErrorWithAttachment)
 	ValueAddBundleDetail(ctx context.Context, in *ValueAddBundleDetailRequest, opts ...grpc_go.CallOption) (*ValueAddBundleDetailResponse, common.ErrorWithAttachment)
-	//新增值服务
+	// 新增值服务
 	SaveValueAddService(ctx context.Context, in *ValueAddServiceLang, opts ...grpc_go.CallOption) (*SaveResponse, common.ErrorWithAttachment)
 	ValueAddServiceList(ctx context.Context, in *ValueAddServiceListRequest, opts ...grpc_go.CallOption) (*ValueAddServiceListResponse, common.ErrorWithAttachment)
 	ValueAddServiceDetail(ctx context.Context, in *ValueAddServiceDetailRequest, opts ...grpc_go.CallOption) (*ValueAddServiceDetailResponse, common.ErrorWithAttachment)
+	// 余量管理
+	BundleExtend(ctx context.Context, in *BundleExtendRequest, opts ...grpc_go.CallOption) (*BundleExtendResponse, common.ErrorWithAttachment)
+	BundleExtendRecordsList(ctx context.Context, in *BundleExtendRecordsListRequest, opts ...grpc_go.CallOption) (*BundleExtendRecordsListResponse, common.ErrorWithAttachment)
+	SetBundleBalance(ctx context.Context, in *SetBundleBalanceRequest, opts ...grpc_go.CallOption) (*SetBundleBalanceResponse, common.ErrorWithAttachment)
 }
 
 type bundleClient struct {
@@ -79,6 +83,9 @@ type BundleClientImpl struct {
 	SaveValueAddService               func(ctx context.Context, in *ValueAddServiceLang) (*SaveResponse, error)
 	ValueAddServiceList               func(ctx context.Context, in *ValueAddServiceListRequest) (*ValueAddServiceListResponse, error)
 	ValueAddServiceDetail             func(ctx context.Context, in *ValueAddServiceDetailRequest) (*ValueAddServiceDetailResponse, error)
+	BundleExtend                      func(ctx context.Context, in *BundleExtendRequest) (*BundleExtendResponse, error)
+	BundleExtendRecordsList           func(ctx context.Context, in *BundleExtendRecordsListRequest) (*BundleExtendRecordsListResponse, error)
+	SetBundleBalance                  func(ctx context.Context, in *SetBundleBalanceRequest) (*SetBundleBalanceResponse, error)
 }
 
 func (c *BundleClientImpl) GetDubboStub(cc *triple.TripleConn) BundleClient {
@@ -219,6 +226,24 @@ func (c *bundleClient) ValueAddServiceDetail(ctx context.Context, in *ValueAddSe
 	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ValueAddServiceDetail", in, out)
 }
 
+func (c *bundleClient) BundleExtend(ctx context.Context, in *BundleExtendRequest, opts ...grpc_go.CallOption) (*BundleExtendResponse, common.ErrorWithAttachment) {
+	out := new(BundleExtendResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/BundleExtend", in, out)
+}
+
+func (c *bundleClient) BundleExtendRecordsList(ctx context.Context, in *BundleExtendRecordsListRequest, opts ...grpc_go.CallOption) (*BundleExtendRecordsListResponse, common.ErrorWithAttachment) {
+	out := new(BundleExtendRecordsListResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/BundleExtendRecordsList", in, out)
+}
+
+func (c *bundleClient) SetBundleBalance(ctx context.Context, in *SetBundleBalanceRequest, opts ...grpc_go.CallOption) (*SetBundleBalanceResponse, common.ErrorWithAttachment) {
+	out := new(SetBundleBalanceResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SetBundleBalance", in, out)
+}
+
 // BundleServer is the server API for Bundle service.
 // All implementations must embed UnimplementedBundleServer
 // for forward compatibility
@@ -238,14 +263,18 @@ type BundleServer interface {
 	OrderRecordsList(context.Context, *OrderRecordsRequest) (*OrderRecordsResponse, error)
 	OrderRecordsDetail(context.Context, *OrderRecordsDetailRequest) (*OrderRecordsDetailResponse, error)
 	UpdateFinancialConfirmationStatus(context.Context, *FinancialConfirmationRequest) (*CommonResponse, error)
-	//增值套餐
+	// 增值套餐
 	CreateValueAddBundle(context.Context, *CreateValueAddBundleRequest) (*CreateValueAddBundleResponse, error)
 	ValueAddBundleList(context.Context, *ValueAddBundleListRequest) (*ValueAddBundleListResponse, error)
 	ValueAddBundleDetail(context.Context, *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error)
-	//新增值服务
+	// 新增值服务
 	SaveValueAddService(context.Context, *ValueAddServiceLang) (*SaveResponse, error)
 	ValueAddServiceList(context.Context, *ValueAddServiceListRequest) (*ValueAddServiceListResponse, error)
 	ValueAddServiceDetail(context.Context, *ValueAddServiceDetailRequest) (*ValueAddServiceDetailResponse, error)
+	// 余量管理
+	BundleExtend(context.Context, *BundleExtendRequest) (*BundleExtendResponse, error)
+	BundleExtendRecordsList(context.Context, *BundleExtendRecordsListRequest) (*BundleExtendRecordsListResponse, error)
+	SetBundleBalance(context.Context, *SetBundleBalanceRequest) (*SetBundleBalanceResponse, error)
 	mustEmbedUnimplementedBundleServer()
 }
 
@@ -317,6 +346,15 @@ func (UnimplementedBundleServer) ValueAddServiceList(context.Context, *ValueAddS
 func (UnimplementedBundleServer) ValueAddServiceDetail(context.Context, *ValueAddServiceDetailRequest) (*ValueAddServiceDetailResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ValueAddServiceDetail not implemented")
 }
+func (UnimplementedBundleServer) BundleExtend(context.Context, *BundleExtendRequest) (*BundleExtendResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method BundleExtend not implemented")
+}
+func (UnimplementedBundleServer) BundleExtendRecordsList(context.Context, *BundleExtendRecordsListRequest) (*BundleExtendRecordsListResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method BundleExtendRecordsList not implemented")
+}
+func (UnimplementedBundleServer) SetBundleBalance(context.Context, *SetBundleBalanceRequest) (*SetBundleBalanceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetBundleBalance not implemented")
+}
 func (s *UnimplementedBundleServer) XXX_SetProxyImpl(impl protocol.Invoker) {
 	s.proxyImpl = impl
 }
@@ -954,6 +992,93 @@ func _Bundle_ValueAddServiceDetail_Handler(srv interface{}, ctx context.Context,
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Bundle_BundleExtend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(BundleExtendRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("BundleExtend", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bundle_BundleExtendRecordsList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(BundleExtendRecordsListRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("BundleExtendRecordsList", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bundle_SetBundleBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetBundleBalanceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("SetBundleBalance", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Bundle_ServiceDesc is the grpc_go.ServiceDesc for Bundle service.
 // It's only intended for direct use with grpc_go.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -1045,6 +1170,18 @@ var Bundle_ServiceDesc = grpc_go.ServiceDesc{
 			MethodName: "ValueAddServiceDetail",
 			Handler:    _Bundle_ValueAddServiceDetail_Handler,
 		},
+		{
+			MethodName: "BundleExtend",
+			Handler:    _Bundle_BundleExtend_Handler,
+		},
+		{
+			MethodName: "BundleExtendRecordsList",
+			Handler:    _Bundle_BundleExtendRecordsList_Handler,
+		},
+		{
+			MethodName: "SetBundleBalance",
+			Handler:    _Bundle_SetBundleBalance_Handler,
+		},
 	},
 	Streams:  []grpc_go.StreamDesc{},
 	Metadata: "pb/bundle.proto",
diff --git a/pkg/db/mysql.go b/pkg/db/mysql.go
index 0d5ee77..908c4da 100644
--- a/pkg/db/mysql.go
+++ b/pkg/db/mysql.go
@@ -49,6 +49,8 @@ func loadMysqlConn(conn string) *gorm.DB {
 		&model.ValueAddService{},
 		&model.ValueAddServiceLang{},
 		&model.BundleToValueAddService{},
+		&model.BundleExtensionRecords{},
+		&model.BundleBalanceManagement{},
 	)
 
 	if err != nil {
diff --git a/pkg/utils/str.go b/pkg/utils/str.go
new file mode 100644
index 0000000..49cb8f2
--- /dev/null
+++ b/pkg/utils/str.go
@@ -0,0 +1,20 @@
+package utils
+
+import "regexp"
+
+func IsPhoneNumber(phone string) bool {
+	// 正则表达式匹配常见的电话号码格式
+	// 1. 11位手机号(13x, 14x, 15x, 16x, 17x, 18x, 19x开头)
+	// 2. 3-4位区号+7-8位号码(可含-或空格分隔)
+	// 3. 国际号码(+开头)
+	pattern := `^(?:\+?[0-9]{1,4}[- ]?)?` + // 国际前缀
+		`(?:\([0-9]{1,4}\)[- ]?)?` + // 可能有括号的区号
+		`(?:[0-9]{7,15}|` + // 7-15位数字或
+		`1[3-9][0-9]{9})$` // 11位手机号
+
+	matched, err := regexp.MatchString(pattern, phone)
+	if err != nil {
+		return false
+	}
+	return matched
+}