This commit is contained in:
桀尼龟 2025-06-12 16:37:22 +08:00
parent af14bcf74b
commit 8694d6b52d
8 changed files with 1575 additions and 933 deletions

View File

@ -77,3 +77,11 @@ func (b *BundleProvider) ValueAddBundleDetail(_ context.Context, req *bundle.Val
func (b *BundleProvider) UpdateFinancialConfirmationStatus(_ context.Context, req *bundle.FinancialConfirmationRequest) (res *bundle.CommonResponse, err error) {
return logic.UpdateFinancialConfirmationStatus(req)
}
func (b *BundleProvider) PackagePriceAndTime(_ context.Context, req *bundle.OrderRecord) (res *bundle.PackagePriceAndTimeResponse, err error) {
return logic.PackagePriceAndTime(req)
}
// 创建增值服务订单
func (b *BundleProvider) CreateOrderAddRecord(_ context.Context, req *bundle.OrderAddRecord) (res *bundle.CommonResponse, err error) {
return logic.CreateOrderAddRecord(req)
}

View File

@ -60,7 +60,7 @@ func CreateOrderRecord(orderRecord *model.BundleOrderRecords, req *bundle.OrderR
expirationTime = "9999-12-31"
)
for _, service := range bundleInfo.BundleToValueAddService {
amount, info, num, day, e := calculateAmount(service.ValueUid, req, req.Language)
amount, info, num, day, e := calculateAmount(service.ValueUid, req)
if e != nil {
tx.Rollback()
res.Msg = msg.ErrorDataConvert
@ -79,11 +79,15 @@ func CreateOrderRecord(orderRecord *model.BundleOrderRecords, req *bundle.OrderR
ServiceType: info.ServiceType,
CurrencyType: info.PriceType,
Amount: amount,
OrderNo: orderRecord.OrderNo,
Num: num,
Unit: info.Unit,
ValueAddUUID: service.ValueUid,
Source: 1,
PaymentStatus: 1,
SignContract: orderRecord.SignContract,
Signature: orderRecord.Signature,
SignedTime: orderRecord.SignedTime,
}
childOrders = append(childOrders, childOrder)
}
@ -117,24 +121,25 @@ func CreateOrderRecord(orderRecord *model.BundleOrderRecords, req *bundle.OrderR
}
// calculateAmount 计算子订单金额
func calculateAmount(valueUid string, req *bundle.OrderRecord, language string) (amount float64, valueAddServiceLang *model.ValueAddServiceLang, num int32, expirationDay string, err error) {
func calculateAmount(valueUid string, req *bundle.OrderRecord) (amount float64, valueAddServiceLang *model.ValueAddServiceLang, num int32, expirationDay string, err error) {
err = app.ModuleClients.BundleDB.
Where("uuid = ? AND language = ?", valueUid, language).
Where("uuid = ? AND language = ?", valueUid, req.Language).
First(&valueAddServiceLang).Error
if err != nil {
return
}
for _, opt := range valueAddServiceLang.Options {
if valueAddServiceLang.PriceMode == 1 {
for _, p := range req.PriceOptionsInfo {
if p.ValueUid == valueUid && opt.Id == p.Id {
for _, p := range req.PriceOptionsInfo {
if p.ValueUid == valueUid && opt.Id == p.Id {
num = opt.Num
if valueAddServiceLang.PriceMode == 1 {
amount = float64(float32(opt.Num) * opt.Price)
num = opt.Num
} else if valueAddServiceLang.PriceMode == 2 {
amount = float64(opt.Price)
}
}
} else if valueAddServiceLang.PriceMode == 2 {
amount = float64(opt.Price)
}
// 计算过期时间
if valueAddServiceLang.ServiceType == 5 {
expirationDay = calculateExpirationDay(opt.Num, valueAddServiceLang.Unit)
@ -171,24 +176,26 @@ func UpdateOrderRecord(orderRecord *model.BundleOrderRecords) (res *bundle.Commo
func UpdateOrderRecordByOrderNO(orderRecord *model.BundleOrderRecords) (res *bundle.CommonResponse, err error) {
res = new(bundle.CommonResponse)
err = app.ModuleClients.BundleDB.Model(&model.BundleOrderRecords{}).Where("order_no = ?", orderRecord.OrderNo).Updates(orderRecord).Error
if err != nil {
res.Msg = msg.ErrorUpdateOrderInfo
return res, commonErr.ReturnError(err, msg.ErrorUpdateOrderInfo, "更新订单信息失败: ")
}
// Step 1: 先更新子订单(增值服务)的支付状态
valueAdd := &model.BundleOrderValueAdd{
PaymentStatus: int(orderRecord.Status),
PaymentTime: orderRecord.PayTime,
}
//更新子订单支付状态
err = app.ModuleClients.BundleDB.Model(&model.BundleOrderValueAdd{}).Where("order_uuid = ?", orderRecord.UUID).Updates(valueAdd).Error
err = app.ModuleClients.BundleDB.Model(&model.BundleOrderValueAdd{}).
Where("order_no = ?", orderRecord.OrderNo).
Updates(valueAdd).Error
if err != nil {
res.Msg = msg.ErrorUpdateOrderInfo
return res, commonErr.ReturnError(err, msg.ErrorUpdateOrderInfo, "更新订单信息失败: ")
return res, commonErr.ReturnError(err, msg.ErrorUpdateOrderInfo, "更新增值服务支付状态失败: ")
}
// Step 2: 再更新主订单信息(如果存在)
err = app.ModuleClients.BundleDB.Model(&model.BundleOrderRecords{}).
Where("order_no = ?", orderRecord.OrderNo).
Updates(orderRecord).Error
// Step 3: 返回结果(即使主订单更新失败,也视为成功)
res.Uuid = orderRecord.UUID
res.Msg = msg.SuccessUpdateOrderInfo
return
return res, nil
}
func OrderRecordsList(req *bundle.OrderRecordsRequest) (res *bundle.OrderRecordsResponse, err error) {
@ -302,6 +309,7 @@ func OrderRecordsList(req *bundle.OrderRecordsRequest) (res *bundle.OrderRecords
BundleCommonUid: record.BundleCommonUid,
AddBundleCommonUid: record.AddBundleCommonUid,
FinancialConfirmation: record.FinancialConfirmation,
ExpirationTime: record.ExpirationTime,
})
}
@ -363,3 +371,94 @@ func OrderRecordDetail(req *bundle.OrderRecordsDetailRequest) (res *bundle.Order
}
return
}
func PackagePriceAndTime(orderRecord *bundle.OrderRecord) (res *bundle.PackagePriceAndTimeResponse, err error) {
res = new(bundle.PackagePriceAndTimeResponse)
bundleInfo := new(model.BundleProfile)
// 查询套餐主表并预加载
err = app.ModuleClients.BundleDB.Model(&model.BundleProfile{}).
Where("uuid = ?", orderRecord.BundleUuid).
Preload("BundleToValueAddService").
Preload("BundleProfileLang", "language = ?", orderRecord.Language).
First(&bundleInfo).Error
if err != nil {
return res, commonErr.ReturnError(err, msg.ErrorBundleNotFound, "查询Bundle信息失败: ")
}
var (
valueAddAmount float64
expirationTime = "9999-12-31"
)
for _, service := range bundleInfo.BundleToValueAddService {
amount, _, _, day, e := calculateAmount(service.ValueUid, orderRecord)
if e != nil {
return res, commonErr.ReturnError(e, msg.ErrorDataConvert, "子订单金额计算失败: ")
}
if day != "" {
expirationTime = day
}
valueAddAmount = valueAddAmount + amount
}
res = &bundle.PackagePriceAndTimeResponse{
Price: float32(valueAddAmount),
Time: expirationTime,
}
return
}
func CreateOrderAddRecord(req *bundle.OrderAddRecord) (res *bundle.CommonResponse, err error) {
tx := app.ModuleClients.BundleDB.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
orderNo := utils.GetOrderNo()
var childOrders []*model.BundleOrderValueAdd
for _, i := range req.AddPriceOptionsList {
childOrder := &model.BundleOrderValueAdd{
UUID: app.ModuleClients.SfNode.Generate().Base64(),
OrderUUID: req.BundleUuid, // 修正: 这里应使用主订单UUID
CustomerID: req.CustomerID,
CustomerNum: req.CustomerNum,
CustomerName: req.CustomerName,
ServiceType: i.ServiceType,
CurrencyType: i.CurrencyType,
Amount: float64(i.Amount),
OrderNo: orderNo,
Num: i.Num,
Unit: i.Unit,
ValueAddUUID: i.ValueUid,
Source: 1,
PaymentStatus: 1,
SignContract: req.SignContract,
Signature: req.Signature,
SignedTime: req.SignedTime,
}
childOrders = append(childOrders, childOrder)
// 如果是类型5服务更新主订单的过期时间
if i.ServiceType == 5 && req.ExpirationDate != "" {
if err := tx.Model(&model.BundleOrderRecords{}).
Where("uuid = ?", req.BundleUuid).
Update("expiration_time", req.ExpirationDate).Error; err != nil {
tx.Rollback()
return nil, commonErr.ReturnError(err, msg.ErrorCreateOrderInfo, "更新主订单过期时间失败: ")
}
}
}
// 批量创建子订单(提高性能)
if err = tx.Model(&model.BundleOrderValueAdd{}).Create(childOrders).Error; err != nil {
tx.Rollback()
return res, commonErr.ReturnError(err, msg.ErrorCreateOrderInfo, "批量创建子订单失败")
}
// 提交事务
if err := tx.Commit().Error; err != nil {
tx.Rollback()
return nil, commonErr.ReturnError(err, msg.ErrorCreateOrderInfo, "提交事务失败: ")
}
return &bundle.CommonResponse{
Uuid: req.BundleUuid,
OrderNo: orderNo,
Msg: msg.SuccessCreateOrderInfo,
}, nil
}

View File

@ -1,13 +1,12 @@
package logic
import (
"github.com/jinzhu/copier"
"micro-bundle/internal/dao"
"micro-bundle/internal/model"
"micro-bundle/pb/bundle"
"micro-bundle/pkg/app"
"micro-bundle/pkg/utils"
"github.com/jinzhu/copier"
)
func CreateOrderRecord(req *bundle.OrderRecord) (res *bundle.CommonResponse, err error) {
@ -70,3 +69,14 @@ func UpdateFinancialConfirmationStatus(req *bundle.FinancialConfirmationRequest)
res.Msg = "更新财务确认状态成功"
return
}
func PackagePriceAndTime(req *bundle.OrderRecord) (res *bundle.PackagePriceAndTimeResponse, err error) {
res = new(bundle.PackagePriceAndTimeResponse)
res, err = dao.PackagePriceAndTime(req)
return
}
func CreateOrderAddRecord(req *bundle.OrderAddRecord) (res *bundle.CommonResponse, err error) {
res = new(bundle.CommonResponse)
res, err = dao.CreateOrderAddRecord(req)
return
}

View File

@ -43,6 +43,7 @@ type BundleOrderRecords struct {
type BundleOrderValueAdd struct {
gorm.Model
UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:UUID"`
OrderNo string `json:"orderNo" gorm:"column:order_no;type:varchar(1024);comment:交易编号"`
OrderUUID string `json:"orderUUID" gorm:"column:order_uuid;type:varchar(1024);comment:套餐UUID"`
CustomerID string `json:"customerID" gorm:"column:customer_id;type:varchar(1024);comment:客户ID"`
CustomerNum string `json:"customerNum" gorm:"column:customer_num;type:varchar(1024);comment:客户编号"`
@ -57,6 +58,9 @@ type BundleOrderValueAdd struct {
Remark string `json:"remark" gorm:"column:remark;comment:备注"`
PaymentStatus int `json:"paymentStatus" gorm:"column:payment_status;comment:支付状态 1未支付 2已支付"`
PaymentTime string `gorm:"column:payment_time;comment:支付时间" json:"paymentTime"`
SignContract string `json:"signContract" gorm:"column:sign_contract;type:varchar(1024);comment:签约合同"`
Signature string `json:"signature" gorm:"column:signature;type:text;comment:签字"`
SignedTime string `json:"signedTime" gorm:"column:signed_time;type:varchar(1024);comment:签约时间(北京时间)"`
}
// 财务确认状态

View File

@ -28,6 +28,8 @@ service Bundle {
rpc OrderRecordsList(OrderRecordsRequest) returns (OrderRecordsResponse) {}
rpc OrderRecordsDetail(OrderRecordsDetailRequest) returns (OrderRecordsDetailResponse) {}
rpc UpdateFinancialConfirmationStatus(FinancialConfirmationRequest) returns (CommonResponse) {}
rpc CreateOrderAddRecord(OrderAddRecord) returns (CommonResponse) {}
rpc PackagePriceAndTime(OrderRecord) returns (PackagePriceAndTimeResponse) {}//
//
rpc CreateValueAddBundle(CreateValueAddBundleRequest) returns (CreateValueAddBundleResponse) {}
@ -39,7 +41,10 @@ service Bundle {
rpc ValueAddServiceList(ValueAddServiceListRequest) returns (ValueAddServiceListResponse) {}
rpc ValueAddServiceDetail(ValueAddServiceDetailRequest) returns (ValueAddServiceDetailResponse) {}
}
message PackagePriceAndTimeResponse{
float price = 1 [json_name = "price"];
string time = 2 [json_name = "time"];
}
message CommonResponse {
string msg = 1 [json_name = "msg"];
string uuid = 2 [json_name = "uuid"];
@ -161,6 +166,30 @@ message OrderRecord {
string telNum = 34 [json_name = "telNum"];
string language = 35 [json_name = "language"];
repeated PriceOptionsInfo priceOptionsInfo = 36 [json_name = "priceOptionsInfo"];
string expirationTime = 37 [json_name = "expirationTime"];
}
message OrderAddRecord{
string bundleUuid = 1 [json_name = "bundleUuid"];
repeated AddPriceOptionsInfo addPriceOptionsList = 2 [json_name = "addPriceOptionsList"];
string language = 3 [json_name = "language"];
string customerID = 4 [json_name = "customerID"];
string customerNum = 5 [json_name = "customerNum"];
string customerName = 6 [json_name = "customerName"];
// string valueAddUUID = 12 [json_name = "valueAddUUID"];
int32 source = 7 [json_name = "source"];
string signContract = 8 [json_name = "signContract"];
string signature = 9 [json_name = "signature"];
string signedTime = 10 [json_name = "signedTime"];
string expirationDate = 11 [json_name = "expirationDate"];
}
message AddPriceOptionsInfo {
int32 id = 1 [json_name = "id"];
string valueUid = 2 [json_name = "valueUid"];
int32 serviceType = 3 [json_name = "serviceType"];
int64 currencyType = 4 [json_name = "currencyType"];
float amount = 5 [json_name = "amount"];
int32 num = 6 [json_name = "num"];
string unit = 7 [json_name = "unit"];
}
message PriceOptionsInfo {
int32 id = 1 [json_name = "id"];

File diff suppressed because it is too large Load Diff

View File

@ -17,6 +17,9 @@ var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
func (this *PackagePriceAndTimeResponse) Validate() error {
return nil
}
func (this *CommonResponse) Validate() error {
return nil
}
@ -108,6 +111,19 @@ func (this *OrderRecord) Validate() error {
}
return nil
}
func (this *OrderAddRecord) Validate() error {
for _, item := range this.AddPriceOptionsList {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("AddPriceOptionsList", err)
}
}
}
return nil
}
func (this *AddPriceOptionsInfo) Validate() error {
return nil
}
func (this *PriceOptionsInfo) Validate() error {
return nil
}

View File

@ -43,6 +43,8 @@ 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)
CreateOrderAddRecord(ctx context.Context, in *OrderAddRecord, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
PackagePriceAndTime(ctx context.Context, in *OrderRecord, opts ...grpc_go.CallOption) (*PackagePriceAndTimeResponse, 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)
@ -73,6 +75,8 @@ type BundleClientImpl struct {
OrderRecordsList func(ctx context.Context, in *OrderRecordsRequest) (*OrderRecordsResponse, error)
OrderRecordsDetail func(ctx context.Context, in *OrderRecordsDetailRequest) (*OrderRecordsDetailResponse, error)
UpdateFinancialConfirmationStatus func(ctx context.Context, in *FinancialConfirmationRequest) (*CommonResponse, error)
CreateOrderAddRecord func(ctx context.Context, in *OrderAddRecord) (*CommonResponse, error)
PackagePriceAndTime func(ctx context.Context, in *OrderRecord) (*PackagePriceAndTimeResponse, error)
CreateValueAddBundle func(ctx context.Context, in *CreateValueAddBundleRequest) (*CreateValueAddBundleResponse, error)
ValueAddBundleList func(ctx context.Context, in *ValueAddBundleListRequest) (*ValueAddBundleListResponse, error)
ValueAddBundleDetail func(ctx context.Context, in *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error)
@ -183,6 +187,18 @@ func (c *bundleClient) UpdateFinancialConfirmationStatus(ctx context.Context, in
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateFinancialConfirmationStatus", in, out)
}
func (c *bundleClient) CreateOrderAddRecord(ctx context.Context, in *OrderAddRecord, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) {
out := new(CommonResponse)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateOrderAddRecord", in, out)
}
func (c *bundleClient) PackagePriceAndTime(ctx context.Context, in *OrderRecord, opts ...grpc_go.CallOption) (*PackagePriceAndTimeResponse, common.ErrorWithAttachment) {
out := new(PackagePriceAndTimeResponse)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/PackagePriceAndTime", in, out)
}
func (c *bundleClient) CreateValueAddBundle(ctx context.Context, in *CreateValueAddBundleRequest, opts ...grpc_go.CallOption) (*CreateValueAddBundleResponse, common.ErrorWithAttachment) {
out := new(CreateValueAddBundleResponse)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
@ -238,6 +254,8 @@ type BundleServer interface {
OrderRecordsList(context.Context, *OrderRecordsRequest) (*OrderRecordsResponse, error)
OrderRecordsDetail(context.Context, *OrderRecordsDetailRequest) (*OrderRecordsDetailResponse, error)
UpdateFinancialConfirmationStatus(context.Context, *FinancialConfirmationRequest) (*CommonResponse, error)
CreateOrderAddRecord(context.Context, *OrderAddRecord) (*CommonResponse, error)
PackagePriceAndTime(context.Context, *OrderRecord) (*PackagePriceAndTimeResponse, error)
//增值套餐
CreateValueAddBundle(context.Context, *CreateValueAddBundleRequest) (*CreateValueAddBundleResponse, error)
ValueAddBundleList(context.Context, *ValueAddBundleListRequest) (*ValueAddBundleListResponse, error)
@ -299,6 +317,12 @@ func (UnimplementedBundleServer) OrderRecordsDetail(context.Context, *OrderRecor
func (UnimplementedBundleServer) UpdateFinancialConfirmationStatus(context.Context, *FinancialConfirmationRequest) (*CommonResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateFinancialConfirmationStatus not implemented")
}
func (UnimplementedBundleServer) CreateOrderAddRecord(context.Context, *OrderAddRecord) (*CommonResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateOrderAddRecord not implemented")
}
func (UnimplementedBundleServer) PackagePriceAndTime(context.Context, *OrderRecord) (*PackagePriceAndTimeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method PackagePriceAndTime not implemented")
}
func (UnimplementedBundleServer) CreateValueAddBundle(context.Context, *CreateValueAddBundleRequest) (*CreateValueAddBundleResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateValueAddBundle not implemented")
}
@ -780,6 +804,64 @@ func _Bundle_UpdateFinancialConfirmationStatus_Handler(srv interface{}, ctx cont
return interceptor(ctx, in, info, handler)
}
func _Bundle_CreateOrderAddRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(OrderAddRecord)
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("CreateOrderAddRecord", 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_PackagePriceAndTime_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(OrderRecord)
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("PackagePriceAndTime", 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_CreateValueAddBundle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateValueAddBundleRequest)
if err := dec(in); err != nil {
@ -1021,6 +1103,14 @@ var Bundle_ServiceDesc = grpc_go.ServiceDesc{
MethodName: "UpdateFinancialConfirmationStatus",
Handler: _Bundle_UpdateFinancialConfirmationStatus_Handler,
},
{
MethodName: "CreateOrderAddRecord",
Handler: _Bundle_CreateOrderAddRecord_Handler,
},
{
MethodName: "PackagePriceAndTime",
Handler: _Bundle_PackagePriceAndTime_Handler,
},
{
MethodName: "CreateValueAddBundle",
Handler: _Bundle_CreateValueAddBundle_Handler,