From 7a065f487d872bfd346f3a0b7ef67f6759e05d58 Mon Sep 17 00:00:00 2001 From: sxy <3187870250@qq.com> Date: Wed, 28 May 2025 09:34:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?"=E4=BF=AE=E6=94=B9=E5=A5=97=E9=A4=90"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/controller/bundleV2.go | 35 + internal/dao/bundleDao.go | 261 ++- internal/dao/valueAddBundleDao.go | 84 + internal/logic/bundleLogic.go | 317 ++- internal/logic/valueAddBundleLogic.go | 250 +++ internal/model/bundle.go | 79 +- internal/model/valueAdd_bundle.go | 116 +- pb/bundle.proto | 108 +- pb/bundle/bundle.pb.go | 2606 ++++++++++++++++--------- pb/bundle/bundle.validator.pb.go | 95 + pb/bundle/bundle_triple.pb.go | 319 ++- pkg/db/bundleDB.go | 5 +- pkg/db/mysql.go | 6 +- pkg/msg/msg.go | 24 + 14 files changed, 3401 insertions(+), 904 deletions(-) create mode 100644 internal/controller/bundleV2.go diff --git a/internal/controller/bundleV2.go b/internal/controller/bundleV2.go new file mode 100644 index 0000000..4ce0e0a --- /dev/null +++ b/internal/controller/bundleV2.go @@ -0,0 +1,35 @@ +package controller + +import ( + "context" + "micro-bundle/internal/logic" + "micro-bundle/pb/bundle" +) + +func (b *BundleProvider) SaveBundle(_ context.Context, req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) { + return logic.SaveBundle(req) +} + +// 上下架状态更新 +func (b *BundleProvider) HandShelf(_ context.Context, req *bundle.HandShelfRequest) (res *bundle.CommonResponse, err error) { + // shelfStatus: 1-上架,2-下架 + return logic.HandShelf(req) +} +func (b *BundleProvider) BundleListV2(_ context.Context, req *bundle.BundleListRequest) (res *bundle.BundleListResponse, err error) { + return logic.BundleListV2(req) +} + +func (b *BundleProvider) BundleDetailV2(_ context.Context, req *bundle.BundleDetailRequest) (res *bundle.BundleDetailResponseV2, err error) { + return logic.BundleDetailV2(req) +} + +// ***************************************************新增值服务*********************** +func (b *BundleProvider) SaveValueAddService(_ context.Context, req *bundle.ValueAddServiceLang) (res *bundle.SaveResponse, err error) { + return logic.SaveValueAddService(req) +} +func (b *BundleProvider) ValueAddServiceList(_ context.Context, req *bundle.ValueAddServiceListRequest) (res *bundle.ValueAddServiceListResponse, err error) { + return logic.ValueAddServiceList(req) +} +func (b *BundleProvider) ValueAddServiceDetail(_ context.Context, req *bundle.ValueAddServiceDetailRequest) (res *bundle.ValueAddServiceDetailResponse, err error) { + return logic.ValueAddServiceDetail(req) +} diff --git a/internal/dao/bundleDao.go b/internal/dao/bundleDao.go index 52f7a96..2cfb36a 100644 --- a/internal/dao/bundleDao.go +++ b/internal/dao/bundleDao.go @@ -1,11 +1,16 @@ package dao import ( + "errors" + "fmt" "micro-bundle/internal/model" "micro-bundle/pb/bundle" "micro-bundle/pkg/app" commonErr "micro-bundle/pkg/err" "micro-bundle/pkg/msg" + "time" + + "gorm.io/gorm" ) func CreateBundle(req *model.BundleProfile) (res *bundle.CommonResponse, err error) { @@ -21,7 +26,7 @@ func CreateBundle(req *model.BundleProfile) (res *bundle.CommonResponse, err err func UpdateBundle(req *model.BundleProfile) (res *bundle.CommonResponse, err error) { res = new(bundle.CommonResponse) - err = app.ModuleClients.BundleDB.Model(&model.BundleProfile{}).Where("uuid = ?", req.UUID).Updates(req).Error + err = app.ModuleClients.BundleDB.Model(&model.BundleProfile{}).Where("uuid = ? and language= ?", req.UUID, req.Language).Updates(req).Error if err != nil { res.Msg = msg.ErrorUpdateBundleInfo return res, commonErr.ReturnError(err, msg.ErrorUpdateBundleInfo, "更新套餐信息失败: ") @@ -126,3 +131,257 @@ func BundleDetail(uuid string) (res *bundle.BundleProfile, err error) { } return } + +func BundleListV2(req *bundle.BundleListRequest) (res *bundle.BundleListResponse, err error) { + res = new(bundle.BundleListResponse) + res.Bundles = make([]*bundle.BundleProfile, 0) + bundles := make([]*model.BundleProfile, 0) + + query := app.ModuleClients.BundleDB.Model(&model.BundleProfile{}).Preload("BundleProfileLang") + //query = query.Where("shelf_status = ?", 1) //上架的 + + if req.Name != "" { + query = query.Where("name like ?", "%"+req.Name+"%") + } + + if req.Content != "" { + query = query.Where("content like ?", "%"+req.Content+"%") + } + + if req.Language != "" { + query = query.Where("language like ?", req.Language) + } + + count := *query + + // 排序:sort 升序,相同 sort 按 created_at 倒序 + query = query.Order("sort ASC").Order("created_at DESC") + if req.PageSize != 0 && req.Page != 0 { + query = query.Limit(int(req.PageSize)).Offset(int(req.Page-1) * int(req.PageSize)) + } + + if err = query.Find(&bundles).Error; err != nil { + return res, commonErr.ReturnError(err, msg.ErrorGetBundleList, "获取套餐列表失败: ") + } + if bundles != nil && len(bundles) > 0 { + for _, bundleProfile := range bundles { + selectValueAddService := make([]*bundle.SelectValueAddService, 0) + // 通过中间表拼接增值服务数据 + if bundleProfile.UUID != "" { + bundleToValueAddServices, err := GetBundleToValueAddServiceByBundleUuid(bundleProfile.UUID) + if err != nil { + return res, commonErr.ReturnError(err, msg.ErrorGetBundleInfo, "获取增值服务信息失败: ") + } + for _, v := range bundleToValueAddServices { + valueAddDetail, _ := ValueAddServiceDetail(v.ValueUid, "") + selectValueAddService = append(selectValueAddService, &bundle.SelectValueAddService{ + ValueAddUuid: v.ValueUid, + IsDisplay: v.IsDisplay, + ServiceName: valueAddDetail.ServiceName, + }) + } + } + bundleProfileLang := []*bundle.BundleProfileLang{} + if bundleProfile.BundleProfileLang != nil && len(bundleProfile.BundleProfileLang) > 0 { + for _, lang := range bundleProfile.BundleProfileLang { + bpl := &bundle.BundleProfileLang{ + Uuid: lang.UUID, + Name: lang.Name, + Price: lang.Price, + PriceType: lang.PriceType, + Content: lang.Content, + Language: lang.Language, + CreatedAt: time.Unix(lang.CreatedAt, 0).Format("2006-01-02 15:04:05"), + UpdatedAt: time.Unix(int64(lang.UpdatedAt), 0).Format("2006-01-02 15:04:05"), + } + bundleProfileLang = append(bundleProfileLang, bpl) + } + } + res.Bundles = append(res.Bundles, &bundle.BundleProfile{ + Uuid: bundleProfile.UUID, + Name: bundleProfile.Name, + Content: bundleProfile.Content, + Price: bundleProfile.Price, + PriceType: bundleProfile.PriceType, + Contract: bundleProfile.Contract, + Language: bundleProfile.Language, + CreatedAt: bundleProfile.CreatedAt.Format("2006-01-02 15:04:05"), + UpdatedAt: bundleProfile.UpdatedAt.Format("2006-01-02 15:04:05"), + CompanySign: bundleProfile.CompanySign, + ContractDuration: int64(bundleProfile.ContractDuration), + Sort: bundleProfile.Sort, + BgImg1: bundleProfile.BgImg1, + BgImg2: bundleProfile.BgImg2, + SelectValueAddService: selectValueAddService, + BundleProfileLang: bundleProfileLang, + ShelfStatus: int64(bundleProfile.ShelfStatus), + }) + } + } + + var total int64 + + count.Count(&total) + + res.Total = int32(total) + + return + +} + +func BundleDetailV2(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailResponseV2, err error) { + if req.Uuid == "" { + return res, errors.New("uuid不能为空") + } + if req.Language == "" { + return res, errors.New("language不能为空") + } + res = new(bundle.BundleDetailResponseV2) + bundleProfile := new(model.BundleProfile) + err = app.ModuleClients.BundleDB.Model(&model.BundleProfile{}).Where("uuid = ?", req.Uuid).Preload("BundleProfileLang").First(&bundleProfile).Error + if err != nil { + return res, commonErr.ReturnError(err, msg.ErrorGetBundleInfo, "获取套餐信息失败: ") + } + bundleProfileLang := &bundle.BundleProfileLang{ + BgImg1: bundleProfile.BgImg1, + BgImg2: bundleProfile.BgImg2, + Sort: bundleProfile.Sort, + } + if bundleProfile != nil && bundleProfile.BundleProfileLang != nil && len(bundleProfile.BundleProfileLang) > 0 { + for _, lang := range bundleProfile.BundleProfileLang { + if lang.Language == req.Language { + bundleProfileLang = &bundle.BundleProfileLang{ + Uuid: lang.UUID, + Name: lang.Name, + Price: lang.Price, + PriceType: lang.PriceType, + Content: lang.Content, + Language: lang.Language, + CreatedAt: time.Unix(lang.CreatedAt, 0).Format("2006-01-02 15:04:05"), + UpdatedAt: time.Unix(int64(lang.UpdatedAt), 0).Format("2006-01-02 15:04:05"), + } + } + } + } + + selectValueAddService := make([]*bundle.SelectValueAddService, 0) //已选增值服务 + // 通过中间表拼接增值服务数据 + if bundleProfile.UUID != "" { + bundleToValueAddServices, err := GetBundleToValueAddServiceByBundleUuid(bundleProfile.UUID) + if err != nil { + return res, commonErr.ReturnError(err, msg.ErrorGetBundleInfo, "获取增值服务信息失败: ") + } + for _, valueAddService := range bundleToValueAddServices { + valueAddDeatilData, err := ValueAddServiceDetailByUuidAndLanguage(valueAddService.ValueUid, req.Language) + if err != nil { + return res, commonErr.ReturnError(err, msg.ErrorGetBundleInfo, "获取增值服务信息失败: ") + } + ValueAddServiceLang := &bundle.ValueAddServiceLang{ + Uuid: valueAddDeatilData.UUID, + ServiceName: valueAddDeatilData.ServiceName, + ServiceType: int32(valueAddDeatilData.ServiceType), + PriceMode: int32(valueAddDeatilData.PriceMode), + PriceType: int64(valueAddDeatilData.PriceType), + OriginalPrice: fmt.Sprintf("%.2f", float32(valueAddDeatilData.OriginalPrice)), + Unit: string(valueAddDeatilData.Unit), + Language: valueAddDeatilData.Language, + CreatedAt: time.Unix(valueAddDeatilData.CreatedAt, 0).Format("2006-01-02 15:04:05"), + UpdatedAt: time.Unix(valueAddDeatilData.UpdatedAt, 0).Format("2006-01-02 15:04:05"), + } + bundleProfileLang.ValueAddServiceLang = append(bundleProfileLang.ValueAddServiceLang, ValueAddServiceLang) + selectValueAddService = append(selectValueAddService, &bundle.SelectValueAddService{ + ValueAddUuid: valueAddService.ValueUid, + ServiceName: valueAddDeatilData.ServiceName, + IsDisplay: valueAddService.IsDisplay, + }) + } + } + + if selectValueAddService != nil && len(selectValueAddService) > 0 { + res.SelectValueAddService = selectValueAddService + } + res.Bundle = bundleProfileLang + return +} + +// 套餐上下架 +func HandShelf(uuid string, shelfStatus int64) (res *bundle.CommonResponse, err error) { + res = new(bundle.CommonResponse) + err = app.ModuleClients.BundleDB.Model(&model.BundleProfile{}).Where("uuid = ?", uuid).Update("shelf_status", shelfStatus).Error + if err != nil { + res.Msg = "套餐上下架操作失败" + return res, err + } + res.Msg = "套餐上下架操作成功" + return res, nil +} + +// 通过uuid和language查询套餐语言表 +func BundleDetailByUuidAndLanguage(uuid string, language string) (bundleProfileLang *model.BundleProfileLang, err error) { + err = app.ModuleClients.BundleDB.Where("uuid = ? AND language = ?", uuid, language).First(&bundleProfileLang).Error + if err != nil { + return nil, err + } + return +} + +// 套餐主表创建 +func TxCreateBundle(tx *gorm.DB, req *model.BundleProfile) (err error) { + err = tx.Model(&model.BundleProfile{}).Create(&req).Error + if err != nil { + return commonErr.ReturnError(err, msg.ErrorCreateBundleInfo, "创建套餐信息失败: ") + } + return +} + +// 套餐语言表创建 +func TxCreateBundleLang(tx *gorm.DB, req *model.BundleProfileLang) (err error) { + err = tx.Model(&model.BundleProfileLang{}).Create(&req).Error + if err != nil { + return commonErr.ReturnError(err, msg.ErrorCreateBundleInfo, "创建套餐信息失败: ") + } + return +} +func TxUpdateBundle(tx *gorm.DB, uuid string, columns map[string]interface{}) (err error) { + err = tx.Model(&model.BundleProfile{}).Where("uuid =?", uuid).Updates(columns).Error + if err != nil { + return commonErr.ReturnError(err, msg.ErrorUpdateBundleInfo, "更新套餐信息失败: ") + } + return +} +func TxUpdateBundleLang(tx *gorm.DB, uuid string, language string, columns map[string]interface{}) (err error) { + err = tx.Model(&model.BundleProfileLang{}).Where("uuid =? and language=?", uuid, language).Updates(columns).Error + if err != nil { + return commonErr.ReturnError(err, msg.ErrorUpdateBundleInfo, "更新套餐信息失败: ") + } + return +} +func CreateBundleToValueAddService(tx *gorm.DB, records []*model.BundleToValueAddService) error { + return tx.Model(&model.BundleToValueAddService{}).Create(&records).Error +} + +func DeleteBundleToValueAddService(tx *gorm.DB, bundleUuid, valueUid string) error { + return tx.Where("bundle_uuid = ? AND value_uid = ?", bundleUuid, valueUid).Delete(&model.BundleToValueAddService{}).Error +} +func GetValueAddServiceUuidsByBundleUuid(bundleUuid string) ([]string, error) { + var uuids []string + err := app.ModuleClients.BundleDB.Model(&model.BundleToValueAddService{}).Where("bundle_uuid = ?", bundleUuid).Pluck("value_uid", &uuids).Error + return uuids, err +} + +// GetBundleToValueAddServiceByBundleUuid 根据套餐UUID获取所有关联的增值服务uuid +func GetBundleToValueAddServiceByBundleUuid(bundleUuid string) ([]*model.BundleToValueAddService, error) { + var result []*model.BundleToValueAddService + err := app.ModuleClients.BundleDB.Model(&model.BundleToValueAddService{}). + Where("bundle_uuid = ?", bundleUuid). + Find(&result).Error + return result, err +} + +func GetBundleLangsByUuid(uuid string) ([]*model.BundleProfileLang, error) { + var result []*model.BundleProfileLang + err := app.ModuleClients.BundleDB.Model(&model.BundleProfileLang{}). + Where("uuid =?", uuid). + Find(&result).Error + return result, err +} diff --git a/internal/dao/valueAddBundleDao.go b/internal/dao/valueAddBundleDao.go index fe78357..0046382 100644 --- a/internal/dao/valueAddBundleDao.go +++ b/internal/dao/valueAddBundleDao.go @@ -2,7 +2,10 @@ package dao import ( "micro-bundle/internal/model" + "micro-bundle/pb/bundle" "micro-bundle/pkg/app" + + "gorm.io/gorm" ) // 增值套餐创建 @@ -73,3 +76,84 @@ func GetBundleOrderRecordsByCommonUidAndUserId(commonUid string, userId int32) ( return } + +// ***************************************新增值服务***************************** +// 增值套餐主表创建 +func CreateValueAddService(tx *gorm.DB, req *model.ValueAddService) (err error) { + if err := tx.Model(&model.ValueAddService{}).Create(req).Error; err != nil { + return err + } + return +} + +// 增值套餐语言表创建 +func CreateValueAddServiceLang(tx *gorm.DB, req *model.ValueAddServiceLang) (err error) { + if err := tx.Model(&model.ValueAddServiceLang{}).Create(req).Error; err != nil { + return err + } + return +} + +// 增值套餐主表更新 +func UpdateValueAddService(tx *gorm.DB, columns map[string]interface{}) (err error) { + err = tx.Model(&model.ValueAddService{}).Where("uuid = ?", columns["uuid"]).Updates(columns).Error + if err != nil { + return + } + return +} +func UpdateValueAddServiceLang(tx *gorm.DB, columns map[string]interface{}) (err error) { + err = tx.Model(&model.ValueAddServiceLang{}).Where("uuid =?", columns["uuid"]). + Where("language", columns["language"]).Updates(columns).Error + if err != nil { + return + } + return +} + +// 增值套餐列表 +func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res []*model.ValueAddService, total int64, err error) { + query := app.ModuleClients.BundleDB.Model(&model.ValueAddService{}).Preload("ValueAddServiceLang") + // Preload("ValueAddServiceLang", func(db *gorm.DB) *gorm.DB { + // return db.Select("uuid,service_name,service_type,price_mode,original_price,unit,language,price_type.options,created_at,updated_at") + // }) + + count := *query + if req.PageSize != 0 && req.Page != 0 { + query = query.Limit(int(req.PageSize)).Offset(int(req.Page-1) * int(req.PageSize)) + } + if err = query.Find(&res).Error; err != nil { + return + } + // 统计不同uuid的数量 + err = count.Select("uuid").Group("uuid").Count(&total).Error + return +} + +// 增值套餐详情 +func ValueAddServiceDetail(uuid string, language string) (valueAddServiceDetail *model.ValueAddService, err error) { + var data model.ValueAddService + err = app.ModuleClients.BundleDB.Where("uuid = ?", uuid).Preload("ValueAddServiceLang").First(&data).Error + if err != nil { + return nil, err + } + return &data, nil +} + +// 通过uuid和language查询增值套餐 +func ValueAddServiceDetailByUuidAndLanguage(uuid string, language string) (valueAddServiceLang *model.ValueAddServiceLang, err error) { + err = app.ModuleClients.BundleDB.Where("uuid = ? AND language = ?", uuid, language).First(&valueAddServiceLang).Error + if err != nil { + return nil, err + } + return +} + +// 通过增值服务UUID查询所有关联套餐 +func GetBundleToValueAddServiceByValueUid(valueUid string) ([]model.BundleToValueAddService, error) { + var rels []model.BundleToValueAddService + err := app.ModuleClients.BundleDB.Model(&model.BundleToValueAddService{}). + Where("value_uid = ?", valueUid). + Find(&rels).Error + return rels, err +} diff --git a/internal/logic/bundleLogic.go b/internal/logic/bundleLogic.go index 62c872b..a75df87 100644 --- a/internal/logic/bundleLogic.go +++ b/internal/logic/bundleLogic.go @@ -1,9 +1,15 @@ package logic import ( + "errors" + "fmt" + "micro-bundle/internal/dao" + "micro-bundle/pkg/app" + "micro-bundle/pkg/msg" + "github.com/aliyun/alibaba-cloud-sdk-go/sdk/utils" "github.com/jinzhu/copier" - "micro-bundle/internal/dao" + "gorm.io/gorm" "micro-bundle/internal/model" "micro-bundle/pb/bundle" @@ -47,3 +53,312 @@ func BundleDetail(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailResp } return } + +func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) { + res = &bundle.SaveResponse{} + if req.Language == "" { + return res, errors.New("语言参数不能为空") + } + if req.Sort <= 0 { + return res, errors.New("排序参数需为正整数") + } + bundleProfile := &model.BundleProfile{ + Name: req.Name, + Sort: req.Sort, + Content: req.Content, + Price: req.Price, + PriceType: req.PriceType, + BgImg1: req.BgImg1, + BgImg2: req.BgImg2, + ShelfStatus: 2, //默认初始状态为2-下架 + } + bundleLang := &model.BundleProfileLang{ + Name: req.Name, + Content: req.Content, + Price: req.Price, + PriceType: req.PriceType, + Language: req.Language, + } + if req.Uuid == "" && req.Language != msg.ZH_CN { + res.Msg = "请先创建中文版本套餐" + return res, errors.New("请先创建中文版本套餐") + } + var existValueService = make(map[string]string) + if req.Uuid != "" { + valueService, existErr := dao.GetValueAddServiceUuidsByBundleUuid(req.Uuid) + if existErr != nil { + return res, existErr + } + if valueService != nil && len(valueService) > 0 { + for _, v := range valueService { + existValueService[v] = v + } + } + } + var cancelValueAddService = make(map[string]string) + selectService := make([]*model.BundleToValueAddService, 0) + if req.Language == msg.ZH_CN && req.SelectValueAddService != nil && len(req.SelectValueAddService) > 0 { + for _, v := range req.SelectValueAddService { + detail, checkErr := dao.ValueAddServiceDetailByUuidAndLanguage(v.ValueAddUuid, req.Language) + fmt.Println("detail", detail) + if checkErr != nil { + if checkErr == gorm.ErrRecordNotFound { + return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s版不存在,请先创建对应增值套餐", v.ServiceName, req.Language)) + } else { + return res, checkErr + } + } + if detail.PriceType != req.PriceType { + if req.Uuid == "" { + return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s币种与套餐币种不一致", detail.ServiceName, req.Language)) + } else { + _, ok := existValueService[v.ValueAddUuid] + if ok { + cancelValueAddService[v.ValueAddUuid] = detail.ServiceName + continue + } else { + return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s币种与套餐币种不一致", detail.ServiceName, req.Language)) + + } + } + } + selectService = append(selectService, &model.BundleToValueAddService{ + ValueUid: v.ValueAddUuid, + IsDisplay: v.IsDisplay, + }) + } + } + tx := app.ModuleClients.BundleDB.Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + _, err = dao.BundleDetailByUuidAndLanguage(req.Uuid, req.Language) + if err != nil { + if err == gorm.ErrRecordNotFound { + if req.Language != msg.ZH_CN { + _, err = dao.BundleDetailByUuidAndLanguage(req.Uuid, msg.ZH_CN) + if err != nil { + if err == gorm.ErrRecordNotFound { + res.Msg = "请先创建中文版本套餐" + return res, errors.New("请先创建中文版本套餐") + } else { + return res, err + } + } + } + if req.Language == msg.ZH_CN { + if len(cancelValueAddService) > 0 { + cancel := "以下增值服务:" + for _, v := range cancelValueAddService { + cancel += fmt.Sprintf("[%s]%s", v, req.Language) + } + cancel += "版币种与套餐币种不一致" + return res, errors.New(cancel) + } + bundleProfile.UUID = utils.GetUUID() + if err = dao.TxCreateBundle(tx, bundleProfile); err != nil { + return res, errors.New("保存中文语言套餐失败: " + err.Error()) + } + bundleLang.UUID = bundleProfile.UUID + res.Uuid = bundleProfile.UUID + // 新建套餐时插入中间表 + for _, s := range selectService { + s.BundleUuid = bundleProfile.UUID + } + if len(selectService) > 0 { + if err = dao.CreateBundleToValueAddService(tx, selectService); err != nil { + return res, errors.New("保存套餐与增值服务关联失败: " + err.Error()) + } + } + } else { + bundleLang.UUID = req.Uuid + res.Uuid = req.Uuid + valueUuid, err1 := dao.GetValueAddServiceUuidsByBundleUuid(bundleLang.UUID) + if err1 != nil { + return res, err1 + } + count := 0 + if valueUuid != nil && len(valueUuid) > 0 { + for _, v := range valueUuid { + valueDetail, err2 := dao.ValueAddServiceDetailByUuidAndLanguage(v, req.Language) + if err2 != nil { + return res, err2 + } + if valueDetail.PriceType != req.PriceType { + if err = tx.Where("bundle_uuid =? AND value_uid =?", bundleLang.UUID, v).Delete(&model.BundleToValueAddService{}).Error; err != nil { + return res, errors.New("删除套餐与增值服务关联失败: " + err.Error()) + } + count++ + } + } + } + res.CancelNum = int64(count) + } + if err = dao.TxCreateBundleLang(tx, bundleLang); err != nil { + return res, errors.New("保存语言套餐失败: " + err.Error()) + } + res.Msg = "保存成功" + return res, nil + } else { + return + } + } else { + // 已存在,进行更新 + if req.Language == msg.ZH_CN { + if len(cancelValueAddService) > 0 { + cancel := "以下增值服务:" + for _, v := range cancelValueAddService { + cancel += fmt.Sprintf("[%s]%s", v, req.Language) + if err = tx.Where("bundle_uuid = ? AND value_uid = ?", req.Uuid, v).Delete(&model.BundleToValueAddService{}).Error; err != nil { + return res, errors.New("删除套餐与增值服务关联失败: " + err.Error()) + } + } + cancel += "版币种与套餐币种不一致" + res.Msg = "保存cn成功 " + cancel + } + res.CancelNum = int64(len(cancelValueAddService)) + updateBundle := map[string]interface{}{ + "name": req.Name, + "sort": req.Sort, + "content": req.Content, + "price": req.Price, + "price_type": req.PriceType, + "bg_img1": req.BgImg1, + "bg_img2": req.BgImg2, + } + if err = dao.TxUpdateBundle(tx, req.Uuid, updateBundle); err != nil { + return res, err + } + // 更新中间表函数 + if err = diffUpdateBundleToValueAddService(tx, req.Uuid, selectService); err != nil { + tx.Rollback() + return res, err + } + } + updateBundleLang := map[string]interface{}{ + "name": req.Name, + "content": req.Content, + "price": req.Price, + "price_type": req.PriceType, + } + if err = dao.TxUpdateBundleLang(tx, req.Uuid, req.Language, updateBundleLang); err != nil { + return res, err + } + //更新时 先获取所有关联增值服务,判断币种是否一致,不一致则取消关联 + valueAddService, err := dao.GetBundleToValueAddServiceByBundleUuid(req.Uuid) + if err != nil { + return res, err + } + cancelValueService := make(map[string]string) + for _, v := range valueAddService { + detail, checkErr := dao.ValueAddServiceDetailByUuidAndLanguage(v.ValueUid, req.Language) + if checkErr != nil { + if checkErr == gorm.ErrRecordNotFound { + continue + } else { + return res, checkErr + } + } + if detail.PriceType != req.PriceType { + cancelValueService[v.ValueUid] = detail.ServiceName + continue + } + } + if int64(len(cancelValueService)) > 0 { + cancel := "以下增值服务:" + for k, v := range cancelValueService { + cancel += fmt.Sprintf("[%s]%s", v, req.Language) + if err = tx.Where("bundle_uuid = ? AND value_uid = ?", req.Uuid, k).Delete(&model.BundleToValueAddService{}).Error; err != nil { + return res, errors.New("删除套餐与增值服务关联失败: " + err.Error()) + } + } + cancel += "版币种与套餐币种不一致,已取消相关关联" + res.Msg = "保存成功 " + cancel + res.CancelNum = int64(len(cancelValueService)) + + } + res.Uuid = req.Uuid + if res.Msg == "" { + res.Msg = "保存成功" + } + } + return res, nil +} + +func BundleListV2(req *bundle.BundleListRequest) (res *bundle.BundleListResponse, err error) { + res = new(bundle.BundleListResponse) + res, err = dao.BundleListV2(req) + return +} +func BundleDetailV2(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailResponseV2, err error) { + res = new(bundle.BundleDetailResponseV2) + if req.Uuid == "" { + res.Msg = "uuid不能为空" + return res, errors.New("uuid不能为空") + } + if req.Language == "" { + res.Msg = "language不能为空" + return res, errors.New("language不能为空") + } + res, err = dao.BundleDetailV2(req) + if err != nil { + res.Msg = err.Error() + } + return +} + +func HandShelf(req *bundle.HandShelfRequest) (res *bundle.CommonResponse, err error) { + res = new(bundle.CommonResponse) + if req.ShelfStatus != 1 && req.ShelfStatus != 2 { + res.Msg = "非法的上下架状态" + return res, errors.New("非法的上下架状态") + } + res, err = dao.HandShelf(req.Uuid, req.ShelfStatus) + return +} + +// 差异更新套餐与增值服务中间表 +func diffUpdateBundleToValueAddService(tx *gorm.DB, bundleUuid string, selectService []*model.BundleToValueAddService) error { + oldUuids, err := dao.GetValueAddServiceUuidsByBundleUuid(bundleUuid) + if err != nil { + return errors.New("查询旧套餐与增值服务关联失败: " + err.Error()) + } + newUuids := make(map[string]*model.BundleToValueAddService) + for _, s := range selectService { + newUuids[s.ValueUid] = s + } + oldSet := make(map[string]struct{}) + for _, uid := range oldUuids { + oldSet[uid] = struct{}{} + } + // 需要新增的 + toAdd := make([]*model.BundleToValueAddService, 0) + for uid, s := range newUuids { + if _, exist := oldSet[uid]; !exist { + s.BundleUuid = bundleUuid + toAdd = append(toAdd, s) + } + } + // 需要删除的 + toDel := make([]string, 0) + for _, uid := range oldUuids { + if _, exist := newUuids[uid]; !exist { + toDel = append(toDel, uid) + } + } + if len(toDel) > 0 { + if err = tx.Where("bundle_uuid = ? AND value_uid IN ?", bundleUuid, toDel).Delete(&model.BundleToValueAddService{}).Error; err != nil { + return errors.New("删除套餐与增值服务关联失败: " + err.Error()) + } + } + if len(toAdd) > 0 { + if err = dao.CreateBundleToValueAddService(tx, toAdd); err != nil { + return errors.New("保存套餐与增值服务关联失败: " + err.Error()) + } + } + return nil +} diff --git a/internal/logic/valueAddBundleLogic.go b/internal/logic/valueAddBundleLogic.go index a5a5ddc..7013ab3 100644 --- a/internal/logic/valueAddBundleLogic.go +++ b/internal/logic/valueAddBundleLogic.go @@ -1,12 +1,18 @@ package logic import ( + "errors" + "fmt" "micro-bundle/internal/dao" "micro-bundle/internal/model" "micro-bundle/pb/bundle" + "micro-bundle/pkg/app" "micro-bundle/pkg/msg" + "strconv" + "time" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/utils" + "gorm.io/gorm" ) // 增值套餐创建 @@ -131,3 +137,247 @@ func ValueAddBundleDetail(req *bundle.ValueAddBundleDetailRequest) (res *bundle. res.Msg = "SUCCESS" return } + +//*******************************************************************新增值服务*********************** + +// 增值套餐保存(无则新增,有则更新) +func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveResponse, err error) { + res = &bundle.SaveResponse{} + if in.Language == "" { + return res, errors.New("语言参数不能为空") + } + var options model.PriceOptions + for _, option := range in.Options { + price, parseErr := strconv.ParseFloat(option.Price, 32) + if parseErr != nil { + return res, parseErr + } + options = append(options, &model.PriceOption{ + Id: int32(option.Id), + Num: option.Num, + Symbol: option.Symbol, + Price: float32(price), + }) + } + ok, err := model.ValidateOptions(options) + if !ok { + return res, err + } + valueAddService := &model.ValueAddService{ + ServiceName: in.ServiceName, + ServiceType: in.ServiceType, + } + originalPrice, err := strconv.ParseFloat(in.OriginalPrice, 32) + if err != nil { + return res, err + } + valueAddServiceLang := &model.ValueAddServiceLang{ + ServiceName: in.ServiceName, + ServiceType: in.ServiceType, + PriceMode: int32(in.PriceMode), + OriginalPrice: float32(originalPrice), + Unit: in.Unit, + Language: in.Language, + PriceType: in.PriceType, + Options: options, + } + if in.Uuid == "" && in.Language != msg.ZH_CN { + return res, errors.New("请先新增简体中文套餐,再添加其他语言版本") + } + tx := app.ModuleClients.BundleDB.Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + // 检查当前语言套餐是否存在 + _, err = dao.ValueAddServiceDetailByUuidAndLanguage(in.Uuid, in.Language) + if err != nil { + if err == gorm.ErrRecordNotFound { // 当前语言套餐不存在 + if in.Language != msg.ZH_CN { + _, err = dao.ValueAddServiceDetailByUuidAndLanguage(in.Uuid, msg.ZH_CN) + if err != nil { + if err != gorm.ErrRecordNotFound { + return res, errors.New("请先创建中文套餐") + } else { + // // 新语言补充:只要UUID存在即可直接插入新语言 + // if in.Uuid != "" { + // valueAddServiceLang.UUID = in.Uuid + // if err = dao.CreateValueAddServiceLang(tx, valueAddServiceLang); err != nil { + // return res, errors.New("补充新语言套餐失败: " + err.Error()) + // } + // res.Uuid = in.Uuid + // res.Msg = "补充新语言套餐成功" + // return + // } + return + } + } + } + if in.Language == msg.ZH_CN { + valueAddService.UUID = utils.GetUUID() + err = dao.CreateValueAddService(tx, valueAddService) + if err != nil { + return res, errors.New("保存中文语言套餐失败: " + err.Error()) + } + valueAddServiceLang.UUID = valueAddService.UUID + res.Uuid = valueAddService.UUID + if err = dao.CreateValueAddServiceLang(tx, valueAddServiceLang); err != nil { + return res, errors.New("保存语言套餐失败: " + err.Error()) + } + } + langList := []string{msg.ZH_TW, msg.EN, msg.DE_DE, msg.JS_JP} + for _, lang := range langList { + otherLang := *valueAddServiceLang + otherLang.Language = lang + if err = dao.CreateValueAddServiceLang(tx, &otherLang); err != nil { + return res, errors.New(fmt.Sprintf("保存%s语言套餐失败: ", lang) + err.Error()) + } + } + res.Msg = "保存成功" + return + } else { + return + } + } else { + // 已存在,进行更新 + //中文状态下,更新主表和语言表 + if in.Language == msg.ZH_CN { + updateService := map[string]interface{}{ + "uuid": in.Uuid, + "service_name": in.ServiceName, + "service_type": in.ServiceType, + } + if err = dao.UpdateValueAddService(tx, updateService); err != nil { + return res, err + } + } + // 查找所有与该增值服务关联的套餐,若币种不一致则取消关联并统计 + var cancelNum int64 = 0 + bundleToValueAddList, _ := dao.GetBundleToValueAddServiceByValueUid(in.Uuid) + for _, rel := range bundleToValueAddList { + bundleProfile, _ := dao.BundleDetailByUuidAndLanguage(rel.BundleUuid, in.Language) + if bundleProfile != nil && bundleProfile.PriceType != in.PriceType { + dao.DeleteBundleToValueAddService(tx, rel.BundleUuid, in.Uuid) + cancelNum++ + } + } + //更新语言表 + updateLangService := map[string]interface{}{ + "uuid": in.Uuid, + "service_name": in.ServiceName, + "service_type": in.ServiceType, + "price_mode": in.PriceMode, + "original_price": in.OriginalPrice, + "unit": in.Unit, + "price_type": in.PriceType, + "options": options, + "language": in.Language, + } + if err = dao.UpdateValueAddServiceLang(tx, updateLangService); err != nil { + return res, err + } + res.Uuid = in.Uuid + res.Msg = "保存成功" + res.CancelNum = cancelNum + } + return +} + +// 增值套餐列表 +func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res *bundle.ValueAddServiceListResponse, err error) { + res = &bundle.ValueAddServiceListResponse{} + list, total, err := dao.ValueAddServiceList(req) + if err != nil { + res.Msg = msg.ErrorValueAddServiceList + return res, err + } + for _, valueAddService := range list { + serviceInfo := &bundle.ValueAddService{ + Uuid: valueAddService.UUID, + ServiceName: valueAddService.ServiceName, + ServiceType: valueAddService.ServiceType, + } + for _, serviceLang := range valueAddService.ValueAddServiceLang { + serviceLangInfo := &bundle.ValueAddServiceLang{ + Uuid: valueAddService.UUID, + ServiceName: serviceLang.ServiceName, + ServiceType: serviceLang.ServiceType, + PriceMode: serviceLang.PriceMode, + OriginalPrice: fmt.Sprintf("%.2f", serviceLang.OriginalPrice), + Unit: serviceLang.Unit, + PriceType: int64(serviceLang.PriceType), + Language: serviceLang.Language, + CreatedAt: time.Unix(serviceLang.CreatedAt, 0).Format("2006-01-02 15:04:05"), + UpdatedAt: time.Unix(serviceLang.UpdatedAt, 0).Format("2006-01-02 15:04:05"), + } + if serviceLang.Options != nil && len(serviceLang.Options) > 0 { + var options []*bundle.ValueAddPriceOptions + for _, option := range serviceLang.Options { + options = append(options, &bundle.ValueAddPriceOptions{ + Id: int64(option.Id), + Num: option.Num, + Symbol: option.Symbol, + Price: fmt.Sprintf("%.2f", option.Price), + }) + } + serviceLangInfo.Options = options + } + serviceInfo.ServiceLang = append(serviceInfo.ServiceLang, serviceLangInfo) + } + res.ValueAddServiceList = append(res.ValueAddServiceList, serviceInfo) + } + res.Total = int32(total) + res.Msg = msg.SuccessValueAddServiceList + return + +} + +// 增值套餐详情 +func ValueAddServiceDetail(req *bundle.ValueAddServiceDetailRequest) (res *bundle.ValueAddServiceDetailResponse, err error) { + res = &bundle.ValueAddServiceDetailResponse{} + if req.Uuid == "" { + res.Msg = msg.ErrorValueAddServiceInfo + return res, errors.New("uuid不能为空") + } + if req.Language == "" { + res.Msg = msg.ErrorValueAddServiceInfo + return res, errors.New("语言选项不能为空") + } + detail, err := dao.ValueAddServiceDetailByUuidAndLanguage(req.Uuid, req.Language) + if err != nil { + res.Msg = msg.ErrorValueAddServiceInfo + return res, err + } + langOptions := []*bundle.ValueAddPriceOptions{} + if detail.Options != nil && len(detail.Options) > 0 { + for _, opt := range detail.Options { + langOptions = append(langOptions, &bundle.ValueAddPriceOptions{ + Id: int64(opt.Id), + Num: opt.Num, + Symbol: opt.Symbol, + Price: fmt.Sprintf("%.2f", opt.Price), + }) + } + } + + serviceLang := &bundle.ValueAddServiceLang{ + Uuid: detail.UUID, + ServiceName: detail.ServiceName, + ServiceType: detail.ServiceType, + Language: detail.Language, + PriceMode: detail.PriceMode, + OriginalPrice: fmt.Sprintf("%.2f", detail.OriginalPrice), + Unit: detail.Unit, + PriceType: int64(detail.PriceType), + Options: langOptions, + CreatedAt: time.Unix(detail.CreatedAt, 0).Format("2006-01-02 15:04:05"), + UpdatedAt: time.Unix(detail.UpdatedAt, 0).Format("2006-01-02 15:04:05"), + } + + res.ValueAddServiceLang = serviceLang + res.Msg = msg.SuccessValueAddServiceInfo + return +} diff --git a/internal/model/bundle.go b/internal/model/bundle.go index 3fe9c88..99807bb 100644 --- a/internal/model/bundle.go +++ b/internal/model/bundle.go @@ -1,18 +1,81 @@ package model -import "gorm.io/gorm" +import ( + "gorm.io/gorm" + "gorm.io/plugin/soft_delete" +) type BundleProfile struct { gorm.Model + UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:套餐UUID"` + Name string `json:"name" gorm:"column:name;type:varchar(2048);comment:套餐名称"` + Price float32 `json:"price" gorm:"column:price;type:decimal(12,2);comment:套餐价格"` + PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐价格类型 1:人民币 2:美元"` + Contract string `json:"contract" gorm:"type:varchar(1024);comment:合同"` + ContractDuration int `json:"contractDuration" gorm:"column:contract_duration;type:int;comment:合同有效时长"` + Content string `json:"content" gorm:"column:content;type:text;comment:套餐内容"` + CompanySign string `json:"companySign" gorm:"column:company_sign;type:varchar(1024);comment:公司签名"` + Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN EN"` + BundleCommonUid string `json:"bundleCommonUid" gorm:"column:bundle_common_uid;type:varchar(1024);comment:套餐公共ID"` + + Sort int64 `json:"sort" gorm:"column:sort;type:int;comment:套餐排序"` //数字越小越靠前,同大小后创建优先 + ShelfStatus int64 `json:"shelfStatus" gorm:"column:shelf_status;type:int;default:2;comment:上架状态 1:上架 2:下架"` + BgImg1 string `json:"bgImg1" gorm:"column:bg_img1;type:varchar(1024);comment:背景图-首页"` + BgImg2 string `json:"bgImg2" gorm:"column:bg_img2;type:varchar(1024);comment:背景图-我的"` + //SelectAddService BundleSelectAddServicess `json:"selectAddService" gorm:"column:select_add_service;type:json;comment:已选增值服务"` + BundleProfileLang []BundleProfileLang `gorm:"foreignKey:UUID;references:UUID" json:"bundleProfileLang"` +} +type BundleProfileLang struct { + Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:套餐UUID"` Name string `json:"name" gorm:"column:name;type:varchar(2048);comment:套餐名称"` Price float32 `json:"price" gorm:"column:price;type:decimal(12,2);comment:套餐价格"` PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐价格类型 1:人民币 2:美元"` - Contract string `json:"contract" gorm:"type:varchar(1024);comment:合同"` - // 合同有效时长 - ContractDuration int `json:"contractDuration" gorm:"column:contract_duration;type:int;comment:合同有效时长"` - Content string `json:"content" gorm:"column:content;type:text;comment:套餐内容"` - CompanySign string `json:"companySign" gorm:"column:company_sign;type:varchar(1024);comment:公司签名"` - Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN EN"` - BundleCommonUid string `json:"bundleCommonUid" gorm:"column:bundle_common_uid;type:varchar(1024);comment:套餐公共ID"` + Content string `json:"content" gorm:"column:content;type:text;comment:套餐内容"` + Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE js-JP(中繁英德日)"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt +} +type BundleToValueAddService struct { + Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` + BundleUuid string `json:"bundleUuid" gorm:"column:bundle_uuid;type:varchar(1024);comment:套餐UUID"` + BundleProfile BundleProfile `gorm:"foreignKey:BundleUuid;references:UUID" json:"bundleProfile"` + ValueUid string `json:"valueUid" gorm:"column:value_uid;type:varchar(1024);comment:增值服务UUID"` + ValueAddService ValueAddService `gorm:"foreignKey:ValueUid;references:UUID" json:"valueAddService"` + IsDisplay bool `json:"isDisplay" gorm:"column:is_display;type:tinyint(1);comment:是否显示"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt +} + +// type BundleSelectAddServicess []*BundleSelectAddService +// type BundleSelectAddService struct { +// ValueUid string `json:"valueUid" gorm:"column:value_uid;type:varchar(1024);comment:增值服务UUID"` +// ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` +// IsDisplay bool `json:"isDisplay" gorm:"column:is_display;type:tinyint(1);comment:是否显示 0:不显示 1:显示"` +// } + +// // 实现 driver.Valuer 接口 +// func (o BundleSelectAddServicess) Value() (driver.Value, error) { +// return json.Marshal(o) +// } + +// // 实现 sql.Scanner 接口 +// +// func (o *BundleSelectAddServicess) Scan(value interface{}) error { +// bytes, ok := value.([]byte) +// if !ok { +// return errors.New("type assertion to []byte failed") +// } +// return json.Unmarshal(bytes, o) +// } +func (m *BundleProfile) TableName() string { + return "bundle_profile" +} +func (m *BundleProfileLang) TableName() string { + return "bundle_profile_lang" +} +func (m *BundleToValueAddService) TableName() string { + return "bundle_to_value_add_service" } diff --git a/internal/model/valueAdd_bundle.go b/internal/model/valueAdd_bundle.go index 09b930f..e21286e 100644 --- a/internal/model/valueAdd_bundle.go +++ b/internal/model/valueAdd_bundle.go @@ -1,6 +1,10 @@ package model import ( + "database/sql/driver" + "encoding/json" + "errors" + "gorm.io/plugin/soft_delete" ) @@ -24,16 +28,104 @@ type ValueAddBundleProfile struct { DeletedAt soft_delete.DeletedAt } -//func (ValueAddBundleProfile) TableName() string { -// return "value_add_bundle_profile2" -//} +// 新增值套餐主表 +type ValueAddService struct { + Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` + UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:增值套餐UUID"` + ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` + ServiceType int32 `json:"serviceType" gorm:"column:service_type;type:int;comment:服务类型 1:视频 2:图文 3:数据报表 4:账号数 5:可用时长"` + ValueAddServiceLang []ValueAddServiceLang `gorm:"foreignKey:UUID;references:UUID"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt +} -//type ValueAddBundleRecord struct { -// gorm.Model -// UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:增值套餐UUID"` -// OriginalPrice float32 `json:"originalPrice" gorm:"column:original_price;type:decimal(12,2);comment:原单价"` -// ValueAddBundleNum int `json:"valueAddBundleNum" gorm:"column:value_add_bundle_num;type:int;comment:增值套餐数量"` -// DiscountPrice float32 `json:"discountPrice" gorm:"column:discount_price;type:decimal(12,2);comment:优惠单价"` -// SavedAmount float32 `json:"savedAmount" gorm:"column:saved_amount;type:decimal(12,2);comment:节省金额"` -// TotalPrice float32 `json:"totalPrice" gorm:"column:total_price;type:decimal(12,2);comment:增值套餐总价"` -//} +// 新增值套餐语言表 +type ValueAddServiceLang struct { + Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` + UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:增值套餐UUID"` + ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` + ServiceType int32 `json:"serviceType" gorm:"column:service_type;type:int;comment:服务类型 1:视频 2:图文 3:数据报表 4:账号数 5:可用时长"` + PriceMode int32 `json:"priceMode" gorm:"column:price_mode;type:int;comment:套餐价格类型 1:单价 2:总价"` + OriginalPrice float32 `json:"originalPrice" gorm:"column:original_price;type:decimal(12,2);comment:原单价"` + TotalPrice float32 `json:"totalPrice" gorm:"column:total_price;type:decimal(12,2);comment:增值服务总价"` + Unit string `json:"unit" gorm:"column:unit;type:varchar(50);comment:单位 1:个 2:条 3:天 4:月 5:年"` + Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE js-JP(中繁英德日)"` + PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:币种 1:人民币 2:美元 3:日元 4:欧元"` + Options PriceOptions `gorm:"column:options;type:json" json:"options"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt +} +type PriceOptions []*PriceOption +type PriceOption struct { + Id int32 `json:"id"` + Num int32 `json:"num"` + Symbol string `json:"symbol"` // 符号> < = <= => + Price float32 `json:"price"` // 价格(根据priceMode决定是单价还是总价) +} + +// 实现 driver.Valuer 接口 +func (o PriceOptions) Value() (driver.Value, error) { + return json.Marshal(o) +} + +// 实现 sql.Scanner 接口 +func (o *PriceOptions) Scan(value interface{}) error { + bytes, ok := value.([]byte) + if !ok { + return errors.New("实现 sql.Scanner 接口 failed: type assertion to []byte failed") + } + return json.Unmarshal(bytes, o) +} + +// 校验Options是否合法,避免同一数字被多个规则覆盖 +func ValidateOptions(options PriceOptions) (bool, error) { + symbolSet := map[string]struct{}{">": {}, "<": {}, ">=": {}, "<=": {}, "=": {}} + cover := make(map[int]struct{}) + for _, opt := range options { + if opt.Num < 0 || opt.Num > 100 { + return false, errors.New("数字范围错误") + + } + if _, ok := symbolSet[opt.Symbol]; !ok { + return false, errors.New("符号错误") + + } + var nums []int + switch opt.Symbol { + case "=": + nums = []int{int(opt.Num)} + case ">": + for i := int(opt.Num) + 1; i <= 100; i++ { + nums = append(nums, i) + } + case ">=": + for i := int(opt.Num); i <= 100; i++ { + nums = append(nums, i) + } + case "<": + for i := 1; i < int(opt.Num); i++ { + nums = append(nums, i) + } + case "<=": + for i := 1; i <= int(opt.Num); i++ { + nums = append(nums, i) + } + } + for _, n := range nums { + if _, exist := cover[n]; exist { + return false, errors.New("逻辑存在冲突,请重新设置") + + } + cover[n] = struct{}{} + } + } + return true, nil +} +func (m *ValueAddService) TableName() string { + return "value_add_service" +} +func (m *ValueAddServiceLang) TableName() string { + return "value_add_service_lang" +} diff --git a/pb/bundle.proto b/pb/bundle.proto index dbea511..1529eb0 100644 --- a/pb/bundle.proto +++ b/pb/bundle.proto @@ -11,6 +11,13 @@ service Bundle { rpc CreateBundle(BundleProfile) returns (CommonResponse) {} rpc UpdateBundle(BundleProfile) returns (CommonResponse) {} rpc DeleteBundle(DelBundleRequest) returns (CommonResponse) {} + rpc HandShelf(HandShelfRequest) returns(CommonResponse) {} //更新套餐上下架状态 + rpc SaveBundle(BundleProfile)returns (SaveResponse) {} + + + rpc BundleListV2(BundleListRequest) returns(BundleListResponse) {} + rpc BundleDetailV2(BundleDetailRequest) returns(BundleDetailResponseV2) {} + rpc BundleList(BundleListRequest) returns (BundleListResponse) {} rpc BundleDetail(BundleDetailRequest) returns (BundleDetailResponse) {} @@ -26,6 +33,11 @@ service Bundle { rpc CreateValueAddBundle(CreateValueAddBundleRequest) returns (CreateValueAddBundleResponse) {} rpc ValueAddBundleList(ValueAddBundleListRequest) returns (ValueAddBundleListResponse) {} rpc ValueAddBundleDetail(ValueAddBundleDetailRequest) returns (ValueAddBundleDetailResponse) {} + + //新增值服务 + rpc SaveValueAddService(ValueAddServiceLang) returns (SaveResponse) {} + rpc ValueAddServiceList(ValueAddServiceListRequest) returns (ValueAddServiceListResponse) {} + rpc ValueAddServiceDetail(ValueAddServiceDetailRequest) returns (ValueAddServiceDetailResponse) {} } message CommonResponse { @@ -47,8 +59,37 @@ message BundleProfile { string companySign = 10 [json_name = "companySign"]; int64 contractDuration = 11 [json_name = "contractDuration"]; string bundleCommonUid = 12 [json_name = "bundleCommonUid"]; + int64 sort = 13 [json_name = "sort"]; + string bgImg1 = 14 [json_name = "bgImg1"]; + string bgImg2 = 15 [json_name = "bgImg2"]; + int64 shelfStatus = 16 [json_name = "shelfStatus"]; // 1 上架 2 下架 + repeated SelectValueAddService selectValueAddService = 17 [json_name = "SelectValueAddService"]; + repeated BundleProfileLang bundleProfileLang = 18 [json_name = "bundleProfileLang"]; +} +message BundleProfileLang { + string uuid = 1 [json_name = "uuid"]; + string name = 2 [json_name = "name"]; + float price = 3 [json_name = "price"]; + int64 priceType = 4 [json_name = "priceType"]; + string content = 5 [json_name = "content"]; + string language = 6 [json_name = "language"]; + string createdAt = 7 [json_name = "createdAt"]; + string updatedAt = 8 [json_name = "updatedAt"]; + string bgImg1 = 9 [json_name = "bgImg1"]; + string bgImg2 = 10 [json_name = "bgImg2"]; + int64 sort = 11 [json_name = "sort"]; + repeated ValueAddServiceLang valueAddServiceLang = 12 [json_name = "ValueAddServiceLang"]; +} +message SaveResponse { + string msg = 1 [json_name = "msg"]; + string uuid = 2 [json_name = "uuid"]; + int64 cancelNum = 3 [json_name = "cancelNum"]; +} +message SelectValueAddService { + string valueAddUuid = 1 [json_name = "valueAddUuid"]; + string serviceName= 2 [json_name = "serviceName"]; + bool isDisplay = 3 [json_name = "isDisplay"]; } - message DelBundleRequest { string uuid = 1 [json_name = "uuid"]; } @@ -68,13 +109,21 @@ message BundleListResponse { message BundleDetailRequest { string uuid = 1 [json_name = "uuid"]; + string language = 2 [json_name = "language"]; //语言 默认zh-CN, zh-CN zh-TW EN de-DE js-JP +} +message HandShelfRequest { + string uuid = 1 [json_name = "uuid"]; + int64 shelfStatus = 2 [json_name = "shelfStatus"]; // 1 上架 2 下架 } - message BundleDetailResponse { BundleProfile bundle = 1 [json_name = "bundle"]; string msg = 2 [json_name = "msg"]; } - +message BundleDetailResponseV2{ + BundleProfileLang bundle = 1 [json_name = "bundle"]; + repeated SelectValueAddService selectValueAddService = 2 [json_name = "SelectValueAddService"]; + string msg =3 [json_name = "msg"]; +} message OrderRecord { string uuid = 1 [json_name = "uuid"]; string bundleUuid = 2 [json_name = "bundleUuid"]; @@ -204,4 +253,55 @@ message ValueAddBundleDetailResponse { message FinancialConfirmationRequest { string orderNo = 1 [json_name = "orderNo"]; -} \ No newline at end of file +} + +// ****************************************************新增值服务*********************** +//增值服务 +message ValueAddService { + string uuid = 1 [json_name = "uuid"]; + string serviceName = 2 [json_name = "serviceName"]; //服务名称 + int32 serviceType = 3 [json_name = "serviceType"]; + repeated ValueAddServiceLang serviceLang = 4 [json_name = "serviceLang"]; +} +message ValueAddServiceLang { + string uuid = 1 [json_name = "uuid"]; + string serviceName = 2 [json_name = "serviceName"]; //服务名称 + int32 serviceType = 3 [json_name = "serviceType"]; + int32 priceMode = 4 [json_name = "priceMode"]; + string originalPrice = 5 [json_name = "originalPrice"]; + string unit = 6 [json_name = "unit"]; + int64 priceType = 7 [json_name = "priceType"]; + string language = 8 [json_name = "language"]; + string createdAt = 9 [json_name = "createdAt"]; + string updatedAt = 10 [json_name = "updatedAt"]; + repeated ValueAddPriceOptions options = 12 [json_name = "options"]; +} +//增值服务价格选项 +message ValueAddPriceOptions { + int64 id = 1 [json_name = "id"]; + int32 num = 2 [json_name = "num"]; + string symbol = 3 [json_name = "symbol"]; + string price = 4 [json_name = "price"]; +} +//增值服务列表 +message ValueAddServiceListRequest { + int32 page = 1 [json_name = "page"]; + int32 pageSize = 2 [json_name = "pageSize"]; + string name = 3 [json_name = "name"]; + string language = 4 [json_name = "language"]; +} +message ValueAddServiceListResponse { +int32 total = 1 [json_name = "total"]; +string msg = 2 [json_name = "msg"]; +repeated ValueAddService valueAddServiceList = 3 [json_name = "valueAddServiceList"]; +} +//增值服务详情 +message ValueAddServiceDetailRequest { + string uuid = 1 [json_name = "uuid"]; + string language = 2 [json_name = "language"]; //语言 默认zh-CN, zh-CN zh-TW EN de-DE js-JP +} +message ValueAddServiceDetailResponse { + string msg = 1 [json_name = "msg"]; + ValueAddServiceLang valueAddServiceLang = 2 [json_name = "valueAddServiceLang"]; +} +//*********************************新增值服务-over****************************************** \ No newline at end of file diff --git a/pb/bundle/bundle.pb.go b/pb/bundle/bundle.pb.go index ac58c27..f077758 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.26.0 -// protoc v3.10.1 +// protoc-gen-go v1.35.1 +// protoc v5.29.2 // source: pb/bundle.proto package bundle @@ -27,18 +27,16 @@ type CommonResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg"` - Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid"` - OrderNo string `protobuf:"bytes,3,opt,name=orderNo,proto3" json:"orderNo"` + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` + OrderNo string `protobuf:"bytes,3,opt,name=orderNo,proto3" json:"orderNo,omitempty"` } func (x *CommonResponse) Reset() { *x = CommonResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CommonResponse) String() string { @@ -49,7 +47,7 @@ func (*CommonResponse) ProtoMessage() {} func (x *CommonResponse) ProtoReflect() protoreflect.Message { mi := &file_pb_bundle_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -90,27 +88,31 @@ type BundleProfile struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name"` - Price float32 `protobuf:"fixed32,3,opt,name=price,proto3" json:"price"` - PriceType int64 `protobuf:"varint,4,opt,name=priceType,proto3" json:"priceType"` - Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content"` - Contract string `protobuf:"bytes,6,opt,name=contract,proto3" json:"contract"` - Language string `protobuf:"bytes,7,opt,name=language,proto3" json:"language"` - CreatedAt string `protobuf:"bytes,8,opt,name=createdAt,proto3" json:"createdAt"` - UpdatedAt string `protobuf:"bytes,9,opt,name=updatedAt,proto3" json:"updatedAt"` - CompanySign string `protobuf:"bytes,10,opt,name=companySign,proto3" json:"companySign"` - ContractDuration int64 `protobuf:"varint,11,opt,name=contractDuration,proto3" json:"contractDuration"` - BundleCommonUid string `protobuf:"bytes,12,opt,name=bundleCommonUid,proto3" json:"bundleCommonUid"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Price float32 `protobuf:"fixed32,3,opt,name=price,proto3" json:"price,omitempty"` + PriceType int64 `protobuf:"varint,4,opt,name=priceType,proto3" json:"priceType,omitempty"` + Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"` + Contract string `protobuf:"bytes,6,opt,name=contract,proto3" json:"contract,omitempty"` + Language string `protobuf:"bytes,7,opt,name=language,proto3" json:"language,omitempty"` + CreatedAt string `protobuf:"bytes,8,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + UpdatedAt string `protobuf:"bytes,9,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` + CompanySign string `protobuf:"bytes,10,opt,name=companySign,proto3" json:"companySign,omitempty"` + ContractDuration int64 `protobuf:"varint,11,opt,name=contractDuration,proto3" json:"contractDuration,omitempty"` + BundleCommonUid string `protobuf:"bytes,12,opt,name=bundleCommonUid,proto3" json:"bundleCommonUid,omitempty"` + Sort int64 `protobuf:"varint,13,opt,name=sort,proto3" json:"sort,omitempty"` + BgImg1 string `protobuf:"bytes,14,opt,name=bgImg1,proto3" json:"bgImg1,omitempty"` + BgImg2 string `protobuf:"bytes,15,opt,name=bgImg2,proto3" json:"bgImg2,omitempty"` + ShelfStatus int64 `protobuf:"varint,16,opt,name=shelfStatus,proto3" json:"shelfStatus,omitempty"` // 1 上架 2 下架 + SelectValueAddService []*SelectValueAddService `protobuf:"bytes,17,rep,name=selectValueAddService,json=SelectValueAddService,proto3" json:"selectValueAddService,omitempty"` + BundleProfileLang []*BundleProfileLang `protobuf:"bytes,18,rep,name=bundleProfileLang,proto3" json:"bundleProfileLang,omitempty"` } func (x *BundleProfile) Reset() { *x = BundleProfile{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BundleProfile) String() string { @@ -121,7 +123,7 @@ func (*BundleProfile) ProtoMessage() {} func (x *BundleProfile) ProtoReflect() protoreflect.Message { mi := &file_pb_bundle_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -220,21 +222,316 @@ func (x *BundleProfile) GetBundleCommonUid() string { return "" } +func (x *BundleProfile) GetSort() int64 { + if x != nil { + return x.Sort + } + return 0 +} + +func (x *BundleProfile) GetBgImg1() string { + if x != nil { + return x.BgImg1 + } + return "" +} + +func (x *BundleProfile) GetBgImg2() string { + if x != nil { + return x.BgImg2 + } + return "" +} + +func (x *BundleProfile) GetShelfStatus() int64 { + if x != nil { + return x.ShelfStatus + } + return 0 +} + +func (x *BundleProfile) GetSelectValueAddService() []*SelectValueAddService { + if x != nil { + return x.SelectValueAddService + } + return nil +} + +func (x *BundleProfile) GetBundleProfileLang() []*BundleProfileLang { + if x != nil { + return x.BundleProfileLang + } + return nil +} + +type BundleProfileLang struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Price float32 `protobuf:"fixed32,3,opt,name=price,proto3" json:"price,omitempty"` + PriceType int64 `protobuf:"varint,4,opt,name=priceType,proto3" json:"priceType,omitempty"` + Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"` + Language string `protobuf:"bytes,6,opt,name=language,proto3" json:"language,omitempty"` + CreatedAt string `protobuf:"bytes,7,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + UpdatedAt string `protobuf:"bytes,8,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` + BgImg1 string `protobuf:"bytes,9,opt,name=bgImg1,proto3" json:"bgImg1,omitempty"` + BgImg2 string `protobuf:"bytes,10,opt,name=bgImg2,proto3" json:"bgImg2,omitempty"` + Sort int64 `protobuf:"varint,11,opt,name=sort,proto3" json:"sort,omitempty"` + ValueAddServiceLang []*ValueAddServiceLang `protobuf:"bytes,12,rep,name=valueAddServiceLang,json=ValueAddServiceLang,proto3" json:"valueAddServiceLang,omitempty"` +} + +func (x *BundleProfileLang) Reset() { + *x = BundleProfileLang{} + mi := &file_pb_bundle_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BundleProfileLang) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BundleProfileLang) ProtoMessage() {} + +func (x *BundleProfileLang) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BundleProfileLang.ProtoReflect.Descriptor instead. +func (*BundleProfileLang) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{2} +} + +func (x *BundleProfileLang) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *BundleProfileLang) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *BundleProfileLang) GetPrice() float32 { + if x != nil { + return x.Price + } + return 0 +} + +func (x *BundleProfileLang) GetPriceType() int64 { + if x != nil { + return x.PriceType + } + return 0 +} + +func (x *BundleProfileLang) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *BundleProfileLang) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +func (x *BundleProfileLang) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *BundleProfileLang) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +func (x *BundleProfileLang) GetBgImg1() string { + if x != nil { + return x.BgImg1 + } + return "" +} + +func (x *BundleProfileLang) GetBgImg2() string { + if x != nil { + return x.BgImg2 + } + return "" +} + +func (x *BundleProfileLang) GetSort() int64 { + if x != nil { + return x.Sort + } + return 0 +} + +func (x *BundleProfileLang) GetValueAddServiceLang() []*ValueAddServiceLang { + if x != nil { + return x.ValueAddServiceLang + } + return nil +} + +type SaveResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` + CancelNum int64 `protobuf:"varint,3,opt,name=cancelNum,proto3" json:"cancelNum,omitempty"` +} + +func (x *SaveResponse) Reset() { + *x = SaveResponse{} + mi := &file_pb_bundle_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SaveResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SaveResponse) ProtoMessage() {} + +func (x *SaveResponse) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SaveResponse.ProtoReflect.Descriptor instead. +func (*SaveResponse) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{3} +} + +func (x *SaveResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *SaveResponse) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *SaveResponse) GetCancelNum() int64 { + if x != nil { + return x.CancelNum + } + return 0 +} + +type SelectValueAddService struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ValueAddUuid string `protobuf:"bytes,1,opt,name=valueAddUuid,proto3" json:"valueAddUuid,omitempty"` + ServiceName string `protobuf:"bytes,2,opt,name=serviceName,proto3" json:"serviceName,omitempty"` + IsDisplay bool `protobuf:"varint,3,opt,name=isDisplay,proto3" json:"isDisplay,omitempty"` +} + +func (x *SelectValueAddService) Reset() { + *x = SelectValueAddService{} + mi := &file_pb_bundle_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SelectValueAddService) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SelectValueAddService) ProtoMessage() {} + +func (x *SelectValueAddService) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SelectValueAddService.ProtoReflect.Descriptor instead. +func (*SelectValueAddService) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{4} +} + +func (x *SelectValueAddService) GetValueAddUuid() string { + if x != nil { + return x.ValueAddUuid + } + return "" +} + +func (x *SelectValueAddService) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +func (x *SelectValueAddService) GetIsDisplay() bool { + if x != nil { + return x.IsDisplay + } + return false +} + type DelBundleRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` } func (x *DelBundleRequest) Reset() { *x = DelBundleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DelBundleRequest) String() string { @@ -244,8 +541,8 @@ func (x *DelBundleRequest) String() string { func (*DelBundleRequest) ProtoMessage() {} func (x *DelBundleRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[5] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -257,7 +554,7 @@ func (x *DelBundleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DelBundleRequest.ProtoReflect.Descriptor instead. func (*DelBundleRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{2} + return file_pb_bundle_proto_rawDescGZIP(), []int{5} } func (x *DelBundleRequest) GetUuid() string { @@ -272,20 +569,18 @@ type BundleListRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page"` - PageSize int32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name"` - Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content"` - Language string `protobuf:"bytes,5,opt,name=language,proto3" json:"language"` + Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"` + Language string `protobuf:"bytes,5,opt,name=language,proto3" json:"language,omitempty"` } func (x *BundleListRequest) Reset() { *x = BundleListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BundleListRequest) String() string { @@ -295,8 +590,8 @@ func (x *BundleListRequest) String() string { func (*BundleListRequest) ProtoMessage() {} func (x *BundleListRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[6] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -308,7 +603,7 @@ func (x *BundleListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleListRequest.ProtoReflect.Descriptor instead. func (*BundleListRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{3} + return file_pb_bundle_proto_rawDescGZIP(), []int{6} } func (x *BundleListRequest) GetPage() int32 { @@ -351,17 +646,15 @@ type BundleListResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Bundles []*BundleProfile `protobuf:"bytes,1,rep,name=bundles,proto3" json:"bundles"` - Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total"` + Bundles []*BundleProfile `protobuf:"bytes,1,rep,name=bundles,proto3" json:"bundles,omitempty"` + Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` } func (x *BundleListResponse) Reset() { *x = BundleListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BundleListResponse) String() string { @@ -371,8 +664,8 @@ func (x *BundleListResponse) String() string { func (*BundleListResponse) ProtoMessage() {} func (x *BundleListResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[7] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -384,7 +677,7 @@ func (x *BundleListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleListResponse.ProtoReflect.Descriptor instead. func (*BundleListResponse) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{4} + return file_pb_bundle_proto_rawDescGZIP(), []int{7} } func (x *BundleListResponse) GetBundles() []*BundleProfile { @@ -406,16 +699,15 @@ type BundleDetailRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` //语言 默认zh-CN, zh-CN zh-TW EN de-DE js-JP } func (x *BundleDetailRequest) Reset() { *x = BundleDetailRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BundleDetailRequest) String() string { @@ -425,8 +717,8 @@ func (x *BundleDetailRequest) String() string { func (*BundleDetailRequest) ProtoMessage() {} func (x *BundleDetailRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[8] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -438,7 +730,7 @@ func (x *BundleDetailRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleDetailRequest.ProtoReflect.Descriptor instead. func (*BundleDetailRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{5} + return file_pb_bundle_proto_rawDescGZIP(), []int{8} } func (x *BundleDetailRequest) GetUuid() string { @@ -448,22 +740,80 @@ func (x *BundleDetailRequest) GetUuid() string { return "" } +func (x *BundleDetailRequest) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +type HandShelfRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + ShelfStatus int64 `protobuf:"varint,2,opt,name=shelfStatus,proto3" json:"shelfStatus,omitempty"` // 1 上架 2 下架 +} + +func (x *HandShelfRequest) Reset() { + *x = HandShelfRequest{} + mi := &file_pb_bundle_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HandShelfRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HandShelfRequest) ProtoMessage() {} + +func (x *HandShelfRequest) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HandShelfRequest.ProtoReflect.Descriptor instead. +func (*HandShelfRequest) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{9} +} + +func (x *HandShelfRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *HandShelfRequest) GetShelfStatus() int64 { + if x != nil { + return x.ShelfStatus + } + return 0 +} + type BundleDetailResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Bundle *BundleProfile `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg"` + Bundle *BundleProfile `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` } func (x *BundleDetailResponse) Reset() { *x = BundleDetailResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BundleDetailResponse) String() string { @@ -473,8 +823,8 @@ func (x *BundleDetailResponse) String() string { func (*BundleDetailResponse) ProtoMessage() {} func (x *BundleDetailResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[10] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -486,7 +836,7 @@ func (x *BundleDetailResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleDetailResponse.ProtoReflect.Descriptor instead. func (*BundleDetailResponse) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{6} + return file_pb_bundle_proto_rawDescGZIP(), []int{10} } func (x *BundleDetailResponse) GetBundle() *BundleProfile { @@ -503,54 +853,113 @@ func (x *BundleDetailResponse) GetMsg() string { return "" } +type BundleDetailResponseV2 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Bundle *BundleProfileLang `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` + SelectValueAddService []*SelectValueAddService `protobuf:"bytes,2,rep,name=selectValueAddService,json=SelectValueAddService,proto3" json:"selectValueAddService,omitempty"` + Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` +} + +func (x *BundleDetailResponseV2) Reset() { + *x = BundleDetailResponseV2{} + mi := &file_pb_bundle_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BundleDetailResponseV2) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BundleDetailResponseV2) ProtoMessage() {} + +func (x *BundleDetailResponseV2) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BundleDetailResponseV2.ProtoReflect.Descriptor instead. +func (*BundleDetailResponseV2) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{11} +} + +func (x *BundleDetailResponseV2) GetBundle() *BundleProfileLang { + if x != nil { + return x.Bundle + } + return nil +} + +func (x *BundleDetailResponseV2) GetSelectValueAddService() []*SelectValueAddService { + if x != nil { + return x.SelectValueAddService + } + return nil +} + +func (x *BundleDetailResponseV2) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + type OrderRecord struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid"` - BundleUuid string `protobuf:"bytes,2,opt,name=bundleUuid,proto3" json:"bundleUuid"` - CustomerID string `protobuf:"bytes,3,opt,name=customerID,proto3" json:"customerID"` - CustomerNum string `protobuf:"bytes,4,opt,name=customerNum,proto3" json:"customerNum"` - CustomerName string `protobuf:"bytes,5,opt,name=customerName,proto3" json:"customerName"` - Amount float32 `protobuf:"fixed32,6,opt,name=amount,proto3" json:"amount"` - AmountType int64 `protobuf:"varint,7,opt,name=amountType,proto3" json:"amountType"` - SignContract string `protobuf:"bytes,8,opt,name=signContract,proto3" json:"signContract"` - Signature string `protobuf:"bytes,9,opt,name=signature,proto3" json:"signature"` - SignedTime string `protobuf:"bytes,10,opt,name=signedTime,proto3" json:"signedTime"` - PayType int64 `protobuf:"varint,11,opt,name=payType,proto3" json:"payType"` - PayTime string `protobuf:"bytes,12,opt,name=payTime,proto3" json:"payTime"` - CheckoutSessionId string `protobuf:"bytes,13,opt,name=checkoutSessionId,proto3" json:"checkoutSessionId"` - CheckoutSessionUrl string `protobuf:"bytes,14,opt,name=checkoutSessionUrl,proto3" json:"checkoutSessionUrl"` - Status int64 `protobuf:"varint,15,opt,name=status,proto3" json:"status"` - OrderNo string `protobuf:"bytes,16,opt,name=orderNo,proto3" json:"orderNo"` - BundleName string `protobuf:"bytes,17,opt,name=bundleName,proto3" json:"bundleName"` - ContractNo string `protobuf:"bytes,18,opt,name=contractNo,proto3" json:"contractNo"` - ValueAddBundleUuid string `protobuf:"bytes,19,opt,name=valueAddBundleUuid,proto3" json:"valueAddBundleUuid"` //增值套餐UUID - ValueAddBundleAmount float32 `protobuf:"fixed32,20,opt,name=valueAddBundleAmount,proto3" json:"valueAddBundleAmount"` //增值套餐金额 - ValueAddOriginalPrice float32 `protobuf:"fixed32,21,opt,name=valueAddOriginalPrice,proto3" json:"valueAddOriginalPrice"` //原单价 - ValueAddDiscountPrice float32 `protobuf:"fixed32,22,opt,name=valueAddDiscountPrice,proto3" json:"valueAddDiscountPrice"` //优惠单价 - ValueAddSavedAmount float32 `protobuf:"fixed32,23,opt,name=valueAddSavedAmount,proto3" json:"valueAddSavedAmount"` //节省金额 - Num int32 `protobuf:"varint,24,opt,name=num,proto3" json:"num"` - TotalAmount float32 `protobuf:"fixed32,25,opt,name=totalAmount,proto3" json:"totalAmount"` //总金额 - Sex string `protobuf:"bytes,26,opt,name=sex,proto3" json:"sex"` - Nationality string `protobuf:"bytes,27,opt,name=nationality,proto3" json:"nationality"` - CertificatePicture string `protobuf:"bytes,28,opt,name=certificatePicture,proto3" json:"certificatePicture"` - PlaceOfResidence string `protobuf:"bytes,29,opt,name=placeOfResidence,proto3" json:"placeOfResidence"` - GroupPhoto string `protobuf:"bytes,30,opt,name=groupPhoto,proto3" json:"groupPhoto"` - BundleCommonUid string `protobuf:"bytes,31,opt,name=bundleCommonUid,proto3" json:"bundleCommonUid"` - AddBundleCommonUid string `protobuf:"bytes,32,opt,name=addBundleCommonUid,proto3" json:"addBundleCommonUid"` - FinancialConfirmation int32 `protobuf:"varint,33,opt,name=financialConfirmation,proto3" json:"financialConfirmation"` - TelNum string `protobuf:"bytes,34,opt,name=telNum,proto3" json:"telNum"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + BundleUuid string `protobuf:"bytes,2,opt,name=bundleUuid,proto3" json:"bundleUuid,omitempty"` + CustomerID string `protobuf:"bytes,3,opt,name=customerID,proto3" json:"customerID,omitempty"` + CustomerNum string `protobuf:"bytes,4,opt,name=customerNum,proto3" json:"customerNum,omitempty"` + CustomerName string `protobuf:"bytes,5,opt,name=customerName,proto3" json:"customerName,omitempty"` + Amount float32 `protobuf:"fixed32,6,opt,name=amount,proto3" json:"amount,omitempty"` + AmountType int64 `protobuf:"varint,7,opt,name=amountType,proto3" json:"amountType,omitempty"` + SignContract string `protobuf:"bytes,8,opt,name=signContract,proto3" json:"signContract,omitempty"` + Signature string `protobuf:"bytes,9,opt,name=signature,proto3" json:"signature,omitempty"` + SignedTime string `protobuf:"bytes,10,opt,name=signedTime,proto3" json:"signedTime,omitempty"` + PayType int64 `protobuf:"varint,11,opt,name=payType,proto3" json:"payType,omitempty"` + PayTime string `protobuf:"bytes,12,opt,name=payTime,proto3" json:"payTime,omitempty"` + CheckoutSessionId string `protobuf:"bytes,13,opt,name=checkoutSessionId,proto3" json:"checkoutSessionId,omitempty"` + CheckoutSessionUrl string `protobuf:"bytes,14,opt,name=checkoutSessionUrl,proto3" json:"checkoutSessionUrl,omitempty"` + Status int64 `protobuf:"varint,15,opt,name=status,proto3" json:"status,omitempty"` + OrderNo string `protobuf:"bytes,16,opt,name=orderNo,proto3" json:"orderNo,omitempty"` + BundleName string `protobuf:"bytes,17,opt,name=bundleName,proto3" json:"bundleName,omitempty"` + ContractNo string `protobuf:"bytes,18,opt,name=contractNo,proto3" json:"contractNo,omitempty"` + ValueAddBundleUuid string `protobuf:"bytes,19,opt,name=valueAddBundleUuid,proto3" json:"valueAddBundleUuid,omitempty"` //增值套餐UUID + ValueAddBundleAmount float32 `protobuf:"fixed32,20,opt,name=valueAddBundleAmount,proto3" json:"valueAddBundleAmount,omitempty"` //增值套餐金额 + ValueAddOriginalPrice float32 `protobuf:"fixed32,21,opt,name=valueAddOriginalPrice,proto3" json:"valueAddOriginalPrice,omitempty"` //原单价 + ValueAddDiscountPrice float32 `protobuf:"fixed32,22,opt,name=valueAddDiscountPrice,proto3" json:"valueAddDiscountPrice,omitempty"` //优惠单价 + ValueAddSavedAmount float32 `protobuf:"fixed32,23,opt,name=valueAddSavedAmount,proto3" json:"valueAddSavedAmount,omitempty"` //节省金额 + Num int32 `protobuf:"varint,24,opt,name=num,proto3" json:"num,omitempty"` + TotalAmount float32 `protobuf:"fixed32,25,opt,name=totalAmount,proto3" json:"totalAmount,omitempty"` //总金额 + Sex string `protobuf:"bytes,26,opt,name=sex,proto3" json:"sex,omitempty"` + Nationality string `protobuf:"bytes,27,opt,name=nationality,proto3" json:"nationality,omitempty"` + CertificatePicture string `protobuf:"bytes,28,opt,name=certificatePicture,proto3" json:"certificatePicture,omitempty"` + PlaceOfResidence string `protobuf:"bytes,29,opt,name=placeOfResidence,proto3" json:"placeOfResidence,omitempty"` + GroupPhoto string `protobuf:"bytes,30,opt,name=groupPhoto,proto3" json:"groupPhoto,omitempty"` + BundleCommonUid string `protobuf:"bytes,31,opt,name=bundleCommonUid,proto3" json:"bundleCommonUid,omitempty"` + AddBundleCommonUid string `protobuf:"bytes,32,opt,name=addBundleCommonUid,proto3" json:"addBundleCommonUid,omitempty"` + FinancialConfirmation int32 `protobuf:"varint,33,opt,name=financialConfirmation,proto3" json:"financialConfirmation,omitempty"` + TelNum string `protobuf:"bytes,34,opt,name=telNum,proto3" json:"telNum,omitempty"` } func (x *OrderRecord) Reset() { *x = OrderRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OrderRecord) String() string { @@ -560,8 +969,8 @@ func (x *OrderRecord) String() string { func (*OrderRecord) ProtoMessage() {} func (x *OrderRecord) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[12] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -573,7 +982,7 @@ func (x *OrderRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use OrderRecord.ProtoReflect.Descriptor instead. func (*OrderRecord) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{7} + return file_pb_bundle_proto_rawDescGZIP(), []int{12} } func (x *OrderRecord) GetUuid() string { @@ -819,31 +1228,29 @@ type OrderRecordsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page"` - PageSize int32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize"` - CustomerNum string `protobuf:"bytes,3,opt,name=customerNum,proto3" json:"customerNum"` - CustomerName string `protobuf:"bytes,4,opt,name=customerName,proto3" json:"customerName"` - BundleUUID string `protobuf:"bytes,5,opt,name=bundleUUID,proto3" json:"bundleUUID"` - OrderNo string `protobuf:"bytes,6,opt,name=orderNo,proto3" json:"orderNo"` - Status int64 `protobuf:"varint,7,opt,name=status,proto3" json:"status"` - BundleName string `protobuf:"bytes,8,opt,name=bundleName,proto3" json:"bundleName"` - StartSignedTime string `protobuf:"bytes,9,opt,name=startSignedTime,proto3" json:"startSignedTime"` - EndSignedTime string `protobuf:"bytes,10,opt,name=endSignedTime,proto3" json:"endSignedTime"` - StartPayTime string `protobuf:"bytes,11,opt,name=startPayTime,proto3" json:"startPayTime"` - EndPayTime string `protobuf:"bytes,12,opt,name=endPayTime,proto3" json:"endPayTime"` - CustomerID string `protobuf:"bytes,13,opt,name=customerID,proto3" json:"customerID"` - IsHaveValueAdd int64 `protobuf:"varint,14,opt,name=isHaveValueAdd,proto3" json:"isHaveValueAdd"` //有无增值选项 - FinancialConfirmation int32 `protobuf:"varint,15,opt,name=financialConfirmation,proto3" json:"financialConfirmation"` - TelNum string `protobuf:"bytes,16,opt,name=telNum,proto3" json:"telNum"` + Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"` + CustomerNum string `protobuf:"bytes,3,opt,name=customerNum,proto3" json:"customerNum,omitempty"` + CustomerName string `protobuf:"bytes,4,opt,name=customerName,proto3" json:"customerName,omitempty"` + BundleUUID string `protobuf:"bytes,5,opt,name=bundleUUID,proto3" json:"bundleUUID,omitempty"` + OrderNo string `protobuf:"bytes,6,opt,name=orderNo,proto3" json:"orderNo,omitempty"` + Status int64 `protobuf:"varint,7,opt,name=status,proto3" json:"status,omitempty"` + BundleName string `protobuf:"bytes,8,opt,name=bundleName,proto3" json:"bundleName,omitempty"` + StartSignedTime string `protobuf:"bytes,9,opt,name=startSignedTime,proto3" json:"startSignedTime,omitempty"` + EndSignedTime string `protobuf:"bytes,10,opt,name=endSignedTime,proto3" json:"endSignedTime,omitempty"` + StartPayTime string `protobuf:"bytes,11,opt,name=startPayTime,proto3" json:"startPayTime,omitempty"` + EndPayTime string `protobuf:"bytes,12,opt,name=endPayTime,proto3" json:"endPayTime,omitempty"` + CustomerID string `protobuf:"bytes,13,opt,name=customerID,proto3" json:"customerID,omitempty"` + IsHaveValueAdd int64 `protobuf:"varint,14,opt,name=isHaveValueAdd,proto3" json:"isHaveValueAdd,omitempty"` //有无增值选项 + FinancialConfirmation int32 `protobuf:"varint,15,opt,name=financialConfirmation,proto3" json:"financialConfirmation,omitempty"` + TelNum string `protobuf:"bytes,16,opt,name=telNum,proto3" json:"telNum,omitempty"` } func (x *OrderRecordsRequest) Reset() { *x = OrderRecordsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OrderRecordsRequest) String() string { @@ -853,8 +1260,8 @@ func (x *OrderRecordsRequest) String() string { func (*OrderRecordsRequest) ProtoMessage() {} func (x *OrderRecordsRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[13] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -866,7 +1273,7 @@ func (x *OrderRecordsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OrderRecordsRequest.ProtoReflect.Descriptor instead. func (*OrderRecordsRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{8} + return file_pb_bundle_proto_rawDescGZIP(), []int{13} } func (x *OrderRecordsRequest) GetPage() int32 { @@ -986,17 +1393,15 @@ type OrderRecordsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OrderRecords []*OrderRecord `protobuf:"bytes,1,rep,name=orderRecords,proto3" json:"orderRecords"` - Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total"` + OrderRecords []*OrderRecord `protobuf:"bytes,1,rep,name=orderRecords,proto3" json:"orderRecords,omitempty"` + Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` } func (x *OrderRecordsResponse) Reset() { *x = OrderRecordsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OrderRecordsResponse) String() string { @@ -1006,8 +1411,8 @@ func (x *OrderRecordsResponse) String() string { func (*OrderRecordsResponse) ProtoMessage() {} func (x *OrderRecordsResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[14] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1019,7 +1424,7 @@ func (x *OrderRecordsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OrderRecordsResponse.ProtoReflect.Descriptor instead. func (*OrderRecordsResponse) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{9} + return file_pb_bundle_proto_rawDescGZIP(), []int{14} } func (x *OrderRecordsResponse) GetOrderRecords() []*OrderRecord { @@ -1041,18 +1446,16 @@ type OrderRecordsDetailRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid"` - OrderNo string `protobuf:"bytes,2,opt,name=orderNo,proto3" json:"orderNo"` - CustomerID string `protobuf:"bytes,3,opt,name=customerID,proto3" json:"customerID"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + OrderNo string `protobuf:"bytes,2,opt,name=orderNo,proto3" json:"orderNo,omitempty"` + CustomerID string `protobuf:"bytes,3,opt,name=customerID,proto3" json:"customerID,omitempty"` } func (x *OrderRecordsDetailRequest) Reset() { *x = OrderRecordsDetailRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OrderRecordsDetailRequest) String() string { @@ -1062,8 +1465,8 @@ func (x *OrderRecordsDetailRequest) String() string { func (*OrderRecordsDetailRequest) ProtoMessage() {} func (x *OrderRecordsDetailRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[15] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1075,7 +1478,7 @@ func (x *OrderRecordsDetailRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OrderRecordsDetailRequest.ProtoReflect.Descriptor instead. func (*OrderRecordsDetailRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{10} + return file_pb_bundle_proto_rawDescGZIP(), []int{15} } func (x *OrderRecordsDetailRequest) GetUuid() string { @@ -1104,17 +1507,15 @@ type OrderRecordsDetailResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OrderRecord *OrderRecord `protobuf:"bytes,1,opt,name=orderRecord,proto3" json:"orderRecord"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg"` + OrderRecord *OrderRecord `protobuf:"bytes,1,opt,name=orderRecord,proto3" json:"orderRecord,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` } func (x *OrderRecordsDetailResponse) Reset() { *x = OrderRecordsDetailResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OrderRecordsDetailResponse) String() string { @@ -1124,8 +1525,8 @@ func (x *OrderRecordsDetailResponse) String() string { func (*OrderRecordsDetailResponse) ProtoMessage() {} func (x *OrderRecordsDetailResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[16] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1137,7 +1538,7 @@ func (x *OrderRecordsDetailResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OrderRecordsDetailResponse.ProtoReflect.Descriptor instead. func (*OrderRecordsDetailResponse) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{11} + return file_pb_bundle_proto_rawDescGZIP(), []int{16} } func (x *OrderRecordsDetailResponse) GetOrderRecord() *OrderRecord { @@ -1160,25 +1561,23 @@ type ValueAddBundleProfile struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid"` - Num int32 `protobuf:"varint,2,opt,name=num,proto3" json:"num"` - OriginalPrice float32 `protobuf:"fixed32,3,opt,name=originalPrice,proto3" json:"originalPrice"` - DiscountPrice float32 `protobuf:"fixed32,4,opt,name=discountPrice,proto3" json:"discountPrice"` - TotalPrice float32 `protobuf:"fixed32,6,opt,name=totalPrice,proto3" json:"totalPrice"` - SavedAmount float32 `protobuf:"fixed32,7,opt,name=savedAmount,proto3" json:"savedAmount"` - DiscountPriceStatus bool `protobuf:"varint,8,opt,name=discountPriceStatus,proto3" json:"discountPriceStatus"` - Choose bool `protobuf:"varint,9,opt,name=choose,proto3" json:"choose"` - Status bool `protobuf:"varint,10,opt,name=status,proto3" json:"status"` - AddBundleCommonUid string `protobuf:"bytes,11,opt,name=addBundleCommonUid,proto3" json:"addBundleCommonUid"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Num int32 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + OriginalPrice float32 `protobuf:"fixed32,3,opt,name=originalPrice,proto3" json:"originalPrice,omitempty"` + DiscountPrice float32 `protobuf:"fixed32,4,opt,name=discountPrice,proto3" json:"discountPrice,omitempty"` + TotalPrice float32 `protobuf:"fixed32,6,opt,name=totalPrice,proto3" json:"totalPrice,omitempty"` + SavedAmount float32 `protobuf:"fixed32,7,opt,name=savedAmount,proto3" json:"savedAmount,omitempty"` + DiscountPriceStatus bool `protobuf:"varint,8,opt,name=discountPriceStatus,proto3" json:"discountPriceStatus,omitempty"` + Choose bool `protobuf:"varint,9,opt,name=choose,proto3" json:"choose,omitempty"` + Status bool `protobuf:"varint,10,opt,name=status,proto3" json:"status,omitempty"` + AddBundleCommonUid string `protobuf:"bytes,11,opt,name=addBundleCommonUid,proto3" json:"addBundleCommonUid,omitempty"` } func (x *ValueAddBundleProfile) Reset() { *x = ValueAddBundleProfile{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValueAddBundleProfile) String() string { @@ -1188,8 +1587,8 @@ func (x *ValueAddBundleProfile) String() string { func (*ValueAddBundleProfile) ProtoMessage() {} func (x *ValueAddBundleProfile) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[17] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1201,7 +1600,7 @@ func (x *ValueAddBundleProfile) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueAddBundleProfile.ProtoReflect.Descriptor instead. func (*ValueAddBundleProfile) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{12} + return file_pb_bundle_proto_rawDescGZIP(), []int{17} } func (x *ValueAddBundleProfile) GetUuid() string { @@ -1279,16 +1678,14 @@ type CreateValueAddBundleRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Num int32 `protobuf:"varint,1,opt,name=num,proto3" json:"num"` + Num int32 `protobuf:"varint,1,opt,name=num,proto3" json:"num,omitempty"` } func (x *CreateValueAddBundleRequest) Reset() { *x = CreateValueAddBundleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateValueAddBundleRequest) String() string { @@ -1298,8 +1695,8 @@ func (x *CreateValueAddBundleRequest) String() string { func (*CreateValueAddBundleRequest) ProtoMessage() {} func (x *CreateValueAddBundleRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[18] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1311,7 +1708,7 @@ func (x *CreateValueAddBundleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateValueAddBundleRequest.ProtoReflect.Descriptor instead. func (*CreateValueAddBundleRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{13} + return file_pb_bundle_proto_rawDescGZIP(), []int{18} } func (x *CreateValueAddBundleRequest) GetNum() int32 { @@ -1326,19 +1723,17 @@ type CreateValueAddBundleResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid"` - TotalPrice float32 `protobuf:"fixed32,2,opt,name=totalPrice,proto3" json:"totalPrice"` - SavedAmount float32 `protobuf:"fixed32,3,opt,name=savedAmount,proto3" json:"savedAmount"` - Msg string `protobuf:"bytes,4,opt,name=msg,proto3" json:"msg"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + TotalPrice float32 `protobuf:"fixed32,2,opt,name=totalPrice,proto3" json:"totalPrice,omitempty"` + SavedAmount float32 `protobuf:"fixed32,3,opt,name=savedAmount,proto3" json:"savedAmount,omitempty"` + Msg string `protobuf:"bytes,4,opt,name=msg,proto3" json:"msg,omitempty"` } func (x *CreateValueAddBundleResponse) Reset() { *x = CreateValueAddBundleResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateValueAddBundleResponse) String() string { @@ -1348,8 +1743,8 @@ func (x *CreateValueAddBundleResponse) String() string { func (*CreateValueAddBundleResponse) ProtoMessage() {} func (x *CreateValueAddBundleResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[19] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1361,7 +1756,7 @@ func (x *CreateValueAddBundleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateValueAddBundleResponse.ProtoReflect.Descriptor instead. func (*CreateValueAddBundleResponse) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{14} + return file_pb_bundle_proto_rawDescGZIP(), []int{19} } func (x *CreateValueAddBundleResponse) GetUuid() string { @@ -1398,18 +1793,16 @@ type ValueAddBundleListRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - UserId int32 `protobuf:"varint,1,opt,name=userId,proto3" json:"userId"` - BundleUuid string `protobuf:"bytes,2,opt,name=bundleUuid,proto3" json:"bundleUuid"` - PriceType int32 `protobuf:"varint,3,opt,name=priceType,proto3" json:"priceType"` + UserId int32 `protobuf:"varint,1,opt,name=userId,proto3" json:"userId,omitempty"` + BundleUuid string `protobuf:"bytes,2,opt,name=bundleUuid,proto3" json:"bundleUuid,omitempty"` + PriceType int32 `protobuf:"varint,3,opt,name=priceType,proto3" json:"priceType,omitempty"` } func (x *ValueAddBundleListRequest) Reset() { *x = ValueAddBundleListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValueAddBundleListRequest) String() string { @@ -1419,8 +1812,8 @@ func (x *ValueAddBundleListRequest) String() string { func (*ValueAddBundleListRequest) ProtoMessage() {} func (x *ValueAddBundleListRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[20] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1432,7 +1825,7 @@ func (x *ValueAddBundleListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueAddBundleListRequest.ProtoReflect.Descriptor instead. func (*ValueAddBundleListRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{15} + return file_pb_bundle_proto_rawDescGZIP(), []int{20} } func (x *ValueAddBundleListRequest) GetUserId() int32 { @@ -1461,23 +1854,21 @@ type ValueAddBundleListResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OriginalPrice float32 `protobuf:"fixed32,1,opt,name=originalPrice,proto3" json:"originalPrice"` - Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total"` - Data []*ValueAddBundleProfile `protobuf:"bytes,3,rep,name=data,proto3" json:"data"` - Status bool `protobuf:"varint,4,opt,name=status,proto3" json:"status"` - Num int32 `protobuf:"varint,5,opt,name=num,proto3" json:"num"` - Price float32 `protobuf:"fixed32,6,opt,name=price,proto3" json:"price"` - OrderNo bool `protobuf:"varint,7,opt,name=orderNo,proto3" json:"orderNo"` - Msg string `protobuf:"bytes,8,opt,name=msg,proto3" json:"msg"` + OriginalPrice float32 `protobuf:"fixed32,1,opt,name=originalPrice,proto3" json:"originalPrice,omitempty"` + Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + Data []*ValueAddBundleProfile `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"` + Status bool `protobuf:"varint,4,opt,name=status,proto3" json:"status,omitempty"` + Num int32 `protobuf:"varint,5,opt,name=num,proto3" json:"num,omitempty"` + Price float32 `protobuf:"fixed32,6,opt,name=price,proto3" json:"price,omitempty"` + OrderNo bool `protobuf:"varint,7,opt,name=orderNo,proto3" json:"orderNo,omitempty"` + Msg string `protobuf:"bytes,8,opt,name=msg,proto3" json:"msg,omitempty"` } func (x *ValueAddBundleListResponse) Reset() { *x = ValueAddBundleListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValueAddBundleListResponse) String() string { @@ -1487,8 +1878,8 @@ func (x *ValueAddBundleListResponse) String() string { func (*ValueAddBundleListResponse) ProtoMessage() {} func (x *ValueAddBundleListResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[21] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1500,7 +1891,7 @@ func (x *ValueAddBundleListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueAddBundleListResponse.ProtoReflect.Descriptor instead. func (*ValueAddBundleListResponse) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{16} + return file_pb_bundle_proto_rawDescGZIP(), []int{21} } func (x *ValueAddBundleListResponse) GetOriginalPrice() float32 { @@ -1564,16 +1955,14 @@ type ValueAddBundleDetailRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` } func (x *ValueAddBundleDetailRequest) Reset() { *x = ValueAddBundleDetailRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValueAddBundleDetailRequest) String() string { @@ -1583,8 +1972,8 @@ func (x *ValueAddBundleDetailRequest) String() string { func (*ValueAddBundleDetailRequest) ProtoMessage() {} func (x *ValueAddBundleDetailRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[22] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1596,7 +1985,7 @@ func (x *ValueAddBundleDetailRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueAddBundleDetailRequest.ProtoReflect.Descriptor instead. func (*ValueAddBundleDetailRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{17} + return file_pb_bundle_proto_rawDescGZIP(), []int{22} } func (x *ValueAddBundleDetailRequest) GetUuid() string { @@ -1611,18 +2000,16 @@ type ValueAddBundleDetailResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Data *ValueAddBundleProfile `protobuf:"bytes,1,opt,name=data,proto3" json:"data"` - PayTime string `protobuf:"bytes,2,opt,name=payTime,proto3" json:"payTime"` - Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg"` + Data *ValueAddBundleProfile `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + PayTime string `protobuf:"bytes,2,opt,name=payTime,proto3" json:"payTime,omitempty"` + Msg string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"` } func (x *ValueAddBundleDetailResponse) Reset() { *x = ValueAddBundleDetailResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValueAddBundleDetailResponse) String() string { @@ -1632,8 +2019,8 @@ func (x *ValueAddBundleDetailResponse) String() string { func (*ValueAddBundleDetailResponse) ProtoMessage() {} func (x *ValueAddBundleDetailResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[23] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1645,7 +2032,7 @@ func (x *ValueAddBundleDetailResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueAddBundleDetailResponse.ProtoReflect.Descriptor instead. func (*ValueAddBundleDetailResponse) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{18} + return file_pb_bundle_proto_rawDescGZIP(), []int{23} } func (x *ValueAddBundleDetailResponse) GetData() *ValueAddBundleProfile { @@ -1674,16 +2061,14 @@ type FinancialConfirmationRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OrderNo string `protobuf:"bytes,1,opt,name=orderNo,proto3" json:"orderNo"` + OrderNo string `protobuf:"bytes,1,opt,name=orderNo,proto3" json:"orderNo,omitempty"` } func (x *FinancialConfirmationRequest) Reset() { *x = FinancialConfirmationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_bundle_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_bundle_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FinancialConfirmationRequest) String() string { @@ -1693,8 +2078,8 @@ func (x *FinancialConfirmationRequest) String() string { func (*FinancialConfirmationRequest) ProtoMessage() {} func (x *FinancialConfirmationRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_bundle_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_bundle_proto_msgTypes[24] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1706,7 +2091,7 @@ func (x *FinancialConfirmationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FinancialConfirmationRequest.ProtoReflect.Descriptor instead. func (*FinancialConfirmationRequest) Descriptor() ([]byte, []int) { - return file_pb_bundle_proto_rawDescGZIP(), []int{19} + return file_pb_bundle_proto_rawDescGZIP(), []int{24} } func (x *FinancialConfirmationRequest) GetOrderNo() string { @@ -1716,6 +2101,510 @@ func (x *FinancialConfirmationRequest) GetOrderNo() string { return "" } +// ****************************************************新增值服务*********************** +// 增值服务 +type ValueAddService struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + ServiceName string `protobuf:"bytes,2,opt,name=serviceName,proto3" json:"serviceName,omitempty"` //服务名称 + ServiceType int32 `protobuf:"varint,3,opt,name=serviceType,proto3" json:"serviceType,omitempty"` + ServiceLang []*ValueAddServiceLang `protobuf:"bytes,4,rep,name=serviceLang,proto3" json:"serviceLang,omitempty"` +} + +func (x *ValueAddService) Reset() { + *x = ValueAddService{} + mi := &file_pb_bundle_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValueAddService) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueAddService) ProtoMessage() {} + +func (x *ValueAddService) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueAddService.ProtoReflect.Descriptor instead. +func (*ValueAddService) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{25} +} + +func (x *ValueAddService) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *ValueAddService) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +func (x *ValueAddService) GetServiceType() int32 { + if x != nil { + return x.ServiceType + } + return 0 +} + +func (x *ValueAddService) GetServiceLang() []*ValueAddServiceLang { + if x != nil { + return x.ServiceLang + } + return nil +} + +type ValueAddServiceLang struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + ServiceName string `protobuf:"bytes,2,opt,name=serviceName,proto3" json:"serviceName,omitempty"` //服务名称 + ServiceType int32 `protobuf:"varint,3,opt,name=serviceType,proto3" json:"serviceType,omitempty"` + PriceMode int32 `protobuf:"varint,4,opt,name=priceMode,proto3" json:"priceMode,omitempty"` + OriginalPrice string `protobuf:"bytes,5,opt,name=originalPrice,proto3" json:"originalPrice,omitempty"` + Unit string `protobuf:"bytes,6,opt,name=unit,proto3" json:"unit,omitempty"` + PriceType int64 `protobuf:"varint,7,opt,name=priceType,proto3" json:"priceType,omitempty"` + Language string `protobuf:"bytes,8,opt,name=language,proto3" json:"language,omitempty"` + CreatedAt string `protobuf:"bytes,9,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + UpdatedAt string `protobuf:"bytes,10,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` + Options []*ValueAddPriceOptions `protobuf:"bytes,12,rep,name=options,proto3" json:"options,omitempty"` +} + +func (x *ValueAddServiceLang) Reset() { + *x = ValueAddServiceLang{} + mi := &file_pb_bundle_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValueAddServiceLang) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueAddServiceLang) ProtoMessage() {} + +func (x *ValueAddServiceLang) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueAddServiceLang.ProtoReflect.Descriptor instead. +func (*ValueAddServiceLang) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{26} +} + +func (x *ValueAddServiceLang) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *ValueAddServiceLang) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +func (x *ValueAddServiceLang) GetServiceType() int32 { + if x != nil { + return x.ServiceType + } + return 0 +} + +func (x *ValueAddServiceLang) GetPriceMode() int32 { + if x != nil { + return x.PriceMode + } + return 0 +} + +func (x *ValueAddServiceLang) GetOriginalPrice() string { + if x != nil { + return x.OriginalPrice + } + return "" +} + +func (x *ValueAddServiceLang) GetUnit() string { + if x != nil { + return x.Unit + } + return "" +} + +func (x *ValueAddServiceLang) GetPriceType() int64 { + if x != nil { + return x.PriceType + } + return 0 +} + +func (x *ValueAddServiceLang) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +func (x *ValueAddServiceLang) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *ValueAddServiceLang) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +func (x *ValueAddServiceLang) GetOptions() []*ValueAddPriceOptions { + if x != nil { + return x.Options + } + return nil +} + +// 增值服务价格选项 +type ValueAddPriceOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Num int32 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + Symbol string `protobuf:"bytes,3,opt,name=symbol,proto3" json:"symbol,omitempty"` + Price string `protobuf:"bytes,4,opt,name=price,proto3" json:"price,omitempty"` +} + +func (x *ValueAddPriceOptions) Reset() { + *x = ValueAddPriceOptions{} + mi := &file_pb_bundle_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValueAddPriceOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueAddPriceOptions) ProtoMessage() {} + +func (x *ValueAddPriceOptions) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueAddPriceOptions.ProtoReflect.Descriptor instead. +func (*ValueAddPriceOptions) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{27} +} + +func (x *ValueAddPriceOptions) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ValueAddPriceOptions) GetNum() int32 { + if x != nil { + return x.Num + } + return 0 +} + +func (x *ValueAddPriceOptions) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +func (x *ValueAddPriceOptions) GetPrice() string { + if x != nil { + return x.Price + } + return "" +} + +// 增值服务列表 +type ValueAddServiceListRequest 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"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Language string `protobuf:"bytes,4,opt,name=language,proto3" json:"language,omitempty"` +} + +func (x *ValueAddServiceListRequest) Reset() { + *x = ValueAddServiceListRequest{} + mi := &file_pb_bundle_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValueAddServiceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueAddServiceListRequest) ProtoMessage() {} + +func (x *ValueAddServiceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueAddServiceListRequest.ProtoReflect.Descriptor instead. +func (*ValueAddServiceListRequest) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{28} +} + +func (x *ValueAddServiceListRequest) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ValueAddServiceListRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ValueAddServiceListRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ValueAddServiceListRequest) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +type ValueAddServiceListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Total int32 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + ValueAddServiceList []*ValueAddService `protobuf:"bytes,3,rep,name=valueAddServiceList,proto3" json:"valueAddServiceList,omitempty"` +} + +func (x *ValueAddServiceListResponse) Reset() { + *x = ValueAddServiceListResponse{} + mi := &file_pb_bundle_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValueAddServiceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueAddServiceListResponse) ProtoMessage() {} + +func (x *ValueAddServiceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueAddServiceListResponse.ProtoReflect.Descriptor instead. +func (*ValueAddServiceListResponse) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{29} +} + +func (x *ValueAddServiceListResponse) GetTotal() int32 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *ValueAddServiceListResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *ValueAddServiceListResponse) GetValueAddServiceList() []*ValueAddService { + if x != nil { + return x.ValueAddServiceList + } + return nil +} + +// 增值服务详情 +type ValueAddServiceDetailRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` //语言 默认zh-CN, zh-CN zh-TW EN de-DE js-JP +} + +func (x *ValueAddServiceDetailRequest) Reset() { + *x = ValueAddServiceDetailRequest{} + mi := &file_pb_bundle_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValueAddServiceDetailRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueAddServiceDetailRequest) ProtoMessage() {} + +func (x *ValueAddServiceDetailRequest) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueAddServiceDetailRequest.ProtoReflect.Descriptor instead. +func (*ValueAddServiceDetailRequest) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{30} +} + +func (x *ValueAddServiceDetailRequest) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *ValueAddServiceDetailRequest) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +type ValueAddServiceDetailResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + ValueAddServiceLang *ValueAddServiceLang `protobuf:"bytes,2,opt,name=valueAddServiceLang,proto3" json:"valueAddServiceLang,omitempty"` +} + +func (x *ValueAddServiceDetailResponse) Reset() { + *x = ValueAddServiceDetailResponse{} + mi := &file_pb_bundle_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ValueAddServiceDetailResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueAddServiceDetailResponse) ProtoMessage() {} + +func (x *ValueAddServiceDetailResponse) ProtoReflect() protoreflect.Message { + mi := &file_pb_bundle_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueAddServiceDetailResponse.ProtoReflect.Descriptor instead. +func (*ValueAddServiceDetailResponse) Descriptor() ([]byte, []int) { + return file_pb_bundle_proto_rawDescGZIP(), []int{31} +} + +func (x *ValueAddServiceDetailResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *ValueAddServiceDetailResponse) GetValueAddServiceLang() *ValueAddServiceLang { + if x != nil { + return x.ValueAddServiceLang + } + return nil +} + var File_pb_bundle_proto protoreflect.FileDescriptor var file_pb_bundle_proto_rawDesc = []byte{ @@ -1728,7 +2617,7 @@ var file_pb_bundle_proto_rawDesc = []byte{ 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x4e, 0x6f, 0x22, 0xf1, 0x02, 0x0a, 0x0d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, + 0x65, 0x72, 0x4e, 0x6f, 0x22, 0xf5, 0x04, 0x0a, 0x0d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, @@ -1751,311 +2640,487 @@ var file_pb_bundle_proto_rawDesc = []byte{ 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x22, 0x26, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, - 0x22, 0x8d, 0x01, 0x0a, 0x11, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x62, 0x67, 0x49, 0x6d, 0x67, 0x31, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x67, + 0x49, 0x6d, 0x67, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x67, 0x49, 0x6d, 0x67, 0x32, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x67, 0x49, 0x6d, 0x67, 0x32, 0x12, 0x20, 0x0a, 0x0b, + 0x73, 0x68, 0x65, 0x6c, 0x66, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x73, 0x68, 0x65, 0x6c, 0x66, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x53, + 0x0a, 0x15, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x15, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x52, 0x11, 0x62, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x22, 0xf4, 0x02, 0x0a, + 0x11, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x61, + 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x62, 0x67, 0x49, 0x6d, 0x67, 0x31, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x62, 0x67, 0x49, 0x6d, 0x67, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x67, 0x49, 0x6d, + 0x67, 0x32, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x67, 0x49, 0x6d, 0x67, 0x32, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x73, 0x6f, 0x72, 0x74, 0x12, 0x4d, 0x0a, 0x13, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x03, 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, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, + 0x61, 0x6e, 0x67, 0x22, 0x52, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x22, 0x7b, 0x0a, 0x15, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x55, 0x75, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, + 0x55, 0x75, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x44, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x22, 0x26, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x8d, 0x01, 0x0a, + 0x11, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 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, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x5b, 0x0a, 0x12, + 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x45, 0x0a, 0x13, 0x42, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, + 0x22, 0x48, 0x0a, 0x10, 0x48, 0x61, 0x6e, 0x64, 0x53, 0x68, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x68, 0x65, 0x6c, + 0x66, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, + 0x68, 0x65, 0x6c, 0x66, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x57, 0x0a, 0x14, 0x42, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6d, 0x73, 0x67, 0x22, 0xb2, 0x01, 0x0a, 0x16, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x32, 0x12, 0x31, + 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x12, 0x53, 0x0a, 0x15, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x15, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xd3, 0x09, 0x0a, 0x0b, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, + 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x69, + 0x67, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x70, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x70, + 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, + 0x0a, 0x12, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x55, 0x72, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, + 0x6f, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, + 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x4e, 0x6f, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x4e, 0x6f, + 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, + 0x12, 0x32, 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x41, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, + 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x15, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x4f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x41, 0x64, 0x64, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x12, 0x30, 0x0a, 0x13, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x61, 0x76, 0x65, + 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x1a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x1d, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x52, 0x65, 0x73, + 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, + 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, + 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x64, + 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, + 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x15, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, + 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x22, 0xa7, + 0x04, 0x0a, 0x13, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 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, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x22, 0x5b, 0x0a, 0x12, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x07, - 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x29, 0x0a, - 0x13, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x57, 0x0a, 0x14, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2d, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x55, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, + 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, + 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x6e, 0x64, 0x53, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x65, 0x6e, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, + 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, + 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x73, 0x48, 0x61, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x41, 0x64, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x69, 0x73, 0x48, 0x61, + 0x76, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, + 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x66, 0x69, 0x6e, 0x61, 0x6e, + 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x22, 0x65, 0x0a, 0x14, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x37, 0x0a, 0x0c, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0c, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, + 0x69, 0x0a, 0x19, 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, 0x12, 0x12, 0x0a, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x22, 0x65, 0x0a, 0x1a, 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, 0x12, 0x35, 0x0a, 0x0b, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, - 0x67, 0x22, 0xd3, 0x09, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, - 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, - 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x65, 0x72, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, - 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x70, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x70, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x6f, 0x75, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x4e, 0x6f, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x4e, 0x6f, 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, - 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, - 0x15, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, - 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x15, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, - 0x53, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6e, - 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x20, 0x0a, - 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x65, - 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x69, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x52, 0x65, - 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x1e, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x1e, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x12, - 0x28, 0x0a, 0x0f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, - 0x69, 0x64, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x64, 0x64, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x18, - 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6e, - 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, - 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x22, 0xa7, 0x04, 0x0a, 0x13, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 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, - 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x75, - 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, - 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x55, 0x55, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x6e, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x64, 0x53, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, - 0x6e, 0x64, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x69, - 0x73, 0x48, 0x61, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0e, 0x69, 0x73, 0x48, 0x61, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x41, 0x64, 0x64, 0x12, 0x34, 0x0a, 0x15, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x15, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, - 0x4e, 0x75, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, - 0x6d, 0x22, 0x65, 0x0a, 0x14, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0c, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x69, 0x0a, 0x19, 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, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x4e, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, - 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, - 0x72, 0x49, 0x44, 0x22, 0x65, 0x0a, 0x1a, 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, 0x12, 0x35, 0x0a, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xdd, 0x02, 0x0a, 0x15, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x73, 0x61, 0x76, - 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, - 0x6f, 0x6f, 0x73, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x68, 0x6f, 0x6f, - 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x64, - 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x22, 0x59, 0x0a, 0x1b, 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, 0x12, 0x3a, 0x0a, 0x03, 0x6e, 0x75, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x28, 0xe2, 0xdf, 0x1f, 0x24, 0x10, 0x1d, 0x18, 0x65, - 0x2a, 0x1e, 0xe8, 0x87, 0xb3, 0xe5, 0xb0, 0x91, 0xe6, 0x95, 0xb0, 0xe4, 0xb8, 0xba, 0x33, 0x30, - 0x2c, 0xe6, 0x9c, 0x80, 0xe5, 0xa4, 0x9a, 0xe6, 0x95, 0xb0, 0xe4, 0xb8, 0xba, 0x31, 0x30, 0x30, - 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x22, 0x86, 0x01, 0x0a, 0x1c, 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, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x61, - 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x71, - 0x0a, 0x19, 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, 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, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, - 0x75, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x1a, 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, - 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, - 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x31, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x31, 0x0a, 0x1b, 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, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x7d, - 0x0a, 0x1c, 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, 0x12, 0x31, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x38, 0x0a, - 0x1c, 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, 0x12, 0x18, 0x0a, - 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x32, 0xf5, 0x08, 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, 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, + 0x67, 0x22, 0xdd, 0x02, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, + 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x30, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, + 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x69, + 0x64, 0x22, 0x59, 0x0a, 0x1b, 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, + 0x12, 0x3a, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x28, 0xe2, + 0xdf, 0x1f, 0x24, 0x10, 0x1d, 0x18, 0x65, 0x2a, 0x1e, 0xe8, 0x87, 0xb3, 0xe5, 0xb0, 0x91, 0xe6, + 0x95, 0xb0, 0xe4, 0xb8, 0xba, 0x33, 0x30, 0x2c, 0xe6, 0x9c, 0x80, 0xe5, 0xa4, 0x9a, 0xe6, 0x95, + 0xb0, 0xe4, 0xb8, 0xba, 0x31, 0x30, 0x30, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x22, 0x86, 0x01, 0x0a, + 0x1c, 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, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x71, 0x0a, 0x19, 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, 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, 0x1e, 0x0a, 0x0a, 0x62, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x1a, 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, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, + 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, 0x6d, + 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, + 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x73, 0x67, 0x22, 0x31, 0x0a, 0x1b, 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, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x7d, 0x0a, 0x1c, 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, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6d, 0x73, 0x67, 0x22, 0x38, 0x0a, 0x1c, 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, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x22, 0xa8, + 0x01, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x03, 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, 0x0b, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, 0x67, 0x22, 0xf3, 0x02, 0x0a, 0x13, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x61, 0x6e, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, + 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, + 0x69, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x6e, 0x69, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x66, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x22, 0x7c, 0x0a, 0x1a, 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, 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, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, + 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, + 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x1b, 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, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x49, 0x0a, + 0x13, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x4e, 0x0a, 0x1c, 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, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x1d, 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, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4d, 0x0a, 0x13, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, + 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, + 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, 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, + 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, + 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, 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, 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, 0x42, - 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 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, 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, 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, } var ( @@ -2070,69 +3135,104 @@ func file_pb_bundle_proto_rawDescGZIP() []byte { return file_pb_bundle_proto_rawDescData } -var file_pb_bundle_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_pb_bundle_proto_goTypes = []interface{}{ - (*CommonResponse)(nil), // 0: bundle.CommonResponse - (*BundleProfile)(nil), // 1: bundle.BundleProfile - (*DelBundleRequest)(nil), // 2: bundle.DelBundleRequest - (*BundleListRequest)(nil), // 3: bundle.BundleListRequest - (*BundleListResponse)(nil), // 4: bundle.BundleListResponse - (*BundleDetailRequest)(nil), // 5: bundle.BundleDetailRequest - (*BundleDetailResponse)(nil), // 6: bundle.BundleDetailResponse - (*OrderRecord)(nil), // 7: bundle.OrderRecord - (*OrderRecordsRequest)(nil), // 8: bundle.OrderRecordsRequest - (*OrderRecordsResponse)(nil), // 9: bundle.OrderRecordsResponse - (*OrderRecordsDetailRequest)(nil), // 10: bundle.OrderRecordsDetailRequest - (*OrderRecordsDetailResponse)(nil), // 11: bundle.OrderRecordsDetailResponse - (*ValueAddBundleProfile)(nil), // 12: bundle.ValueAddBundleProfile - (*CreateValueAddBundleRequest)(nil), // 13: bundle.CreateValueAddBundleRequest - (*CreateValueAddBundleResponse)(nil), // 14: bundle.CreateValueAddBundleResponse - (*ValueAddBundleListRequest)(nil), // 15: bundle.ValueAddBundleListRequest - (*ValueAddBundleListResponse)(nil), // 16: bundle.ValueAddBundleListResponse - (*ValueAddBundleDetailRequest)(nil), // 17: bundle.ValueAddBundleDetailRequest - (*ValueAddBundleDetailResponse)(nil), // 18: bundle.ValueAddBundleDetailResponse - (*FinancialConfirmationRequest)(nil), // 19: bundle.FinancialConfirmationRequest +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_depIdxs = []int32{ - 1, // 0: bundle.BundleListResponse.bundles:type_name -> bundle.BundleProfile - 1, // 1: bundle.BundleDetailResponse.bundle:type_name -> bundle.BundleProfile - 7, // 2: bundle.OrderRecordsResponse.orderRecords:type_name -> bundle.OrderRecord - 7, // 3: bundle.OrderRecordsDetailResponse.orderRecord:type_name -> bundle.OrderRecord - 12, // 4: bundle.ValueAddBundleListResponse.data:type_name -> bundle.ValueAddBundleProfile - 12, // 5: bundle.ValueAddBundleDetailResponse.data:type_name -> bundle.ValueAddBundleProfile - 1, // 6: bundle.Bundle.CreateBundle:input_type -> bundle.BundleProfile - 1, // 7: bundle.Bundle.UpdateBundle:input_type -> bundle.BundleProfile - 2, // 8: bundle.Bundle.DeleteBundle:input_type -> bundle.DelBundleRequest - 3, // 9: bundle.Bundle.BundleList:input_type -> bundle.BundleListRequest - 5, // 10: bundle.Bundle.BundleDetail:input_type -> bundle.BundleDetailRequest - 7, // 11: bundle.Bundle.CreateOrderRecord:input_type -> bundle.OrderRecord - 7, // 12: bundle.Bundle.UpdateOrderRecord:input_type -> bundle.OrderRecord - 7, // 13: bundle.Bundle.UpdateOrderRecordByOrderNo:input_type -> bundle.OrderRecord - 8, // 14: bundle.Bundle.OrderRecordsList:input_type -> bundle.OrderRecordsRequest - 10, // 15: bundle.Bundle.OrderRecordsDetail:input_type -> bundle.OrderRecordsDetailRequest - 19, // 16: bundle.Bundle.UpdateFinancialConfirmationStatus:input_type -> bundle.FinancialConfirmationRequest - 13, // 17: bundle.Bundle.CreateValueAddBundle:input_type -> bundle.CreateValueAddBundleRequest - 15, // 18: bundle.Bundle.ValueAddBundleList:input_type -> bundle.ValueAddBundleListRequest - 17, // 19: bundle.Bundle.ValueAddBundleDetail:input_type -> bundle.ValueAddBundleDetailRequest - 0, // 20: bundle.Bundle.CreateBundle:output_type -> bundle.CommonResponse - 0, // 21: bundle.Bundle.UpdateBundle:output_type -> bundle.CommonResponse - 0, // 22: bundle.Bundle.DeleteBundle:output_type -> bundle.CommonResponse - 4, // 23: bundle.Bundle.BundleList:output_type -> bundle.BundleListResponse - 6, // 24: bundle.Bundle.BundleDetail:output_type -> bundle.BundleDetailResponse - 0, // 25: bundle.Bundle.CreateOrderRecord:output_type -> bundle.CommonResponse - 0, // 26: bundle.Bundle.UpdateOrderRecord:output_type -> bundle.CommonResponse - 0, // 27: bundle.Bundle.UpdateOrderRecordByOrderNo:output_type -> bundle.CommonResponse - 9, // 28: bundle.Bundle.OrderRecordsList:output_type -> bundle.OrderRecordsResponse - 11, // 29: bundle.Bundle.OrderRecordsDetail:output_type -> bundle.OrderRecordsDetailResponse - 0, // 30: bundle.Bundle.UpdateFinancialConfirmationStatus:output_type -> bundle.CommonResponse - 14, // 31: bundle.Bundle.CreateValueAddBundle:output_type -> bundle.CreateValueAddBundleResponse - 16, // 32: bundle.Bundle.ValueAddBundleList:output_type -> bundle.ValueAddBundleListResponse - 18, // 33: bundle.Bundle.ValueAddBundleDetail:output_type -> bundle.ValueAddBundleDetailResponse - 20, // [20:34] is the sub-list for method output_type - 6, // [6:20] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 4, // 0: bundle.BundleProfile.selectValueAddService:type_name -> bundle.SelectValueAddService + 2, // 1: bundle.BundleProfile.bundleProfileLang:type_name -> bundle.BundleProfileLang + 26, // 2: bundle.BundleProfileLang.valueAddServiceLang:type_name -> bundle.ValueAddServiceLang + 1, // 3: bundle.BundleListResponse.bundles:type_name -> bundle.BundleProfile + 1, // 4: bundle.BundleDetailResponse.bundle:type_name -> bundle.BundleProfile + 2, // 5: bundle.BundleDetailResponseV2.bundle:type_name -> bundle.BundleProfileLang + 4, // 6: bundle.BundleDetailResponseV2.selectValueAddService:type_name -> bundle.SelectValueAddService + 12, // 7: bundle.OrderRecordsResponse.orderRecords:type_name -> bundle.OrderRecord + 12, // 8: bundle.OrderRecordsDetailResponse.orderRecord:type_name -> bundle.OrderRecord + 17, // 9: bundle.ValueAddBundleListResponse.data:type_name -> bundle.ValueAddBundleProfile + 17, // 10: bundle.ValueAddBundleDetailResponse.data:type_name -> bundle.ValueAddBundleProfile + 26, // 11: bundle.ValueAddService.serviceLang:type_name -> bundle.ValueAddServiceLang + 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 } func init() { file_pb_bundle_proto_init() } @@ -2140,255 +3240,13 @@ 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.(*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[3].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[4].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[5].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[6].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[7].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[8].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[9].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[10].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[11].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[12].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[13].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[14].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[15].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[16].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[17].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[18].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[19].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 - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pb_bundle_proto_rawDesc, NumEnums: 0, - NumMessages: 20, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/pb/bundle/bundle.validator.pb.go b/pb/bundle/bundle.validator.pb.go index 8d39d91..7e4a09a 100644 --- a/pb/bundle/bundle.validator.pb.go +++ b/pb/bundle/bundle.validator.pb.go @@ -21,6 +21,36 @@ func (this *CommonResponse) Validate() error { return nil } func (this *BundleProfile) Validate() error { + for _, item := range this.SelectValueAddService { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("SelectValueAddService", err) + } + } + } + for _, item := range this.BundleProfileLang { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("BundleProfileLang", err) + } + } + } + return nil +} +func (this *BundleProfileLang) Validate() error { + for _, item := range this.ValueAddServiceLang { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ValueAddServiceLang", err) + } + } + } + return nil +} +func (this *SaveResponse) Validate() error { + return nil +} +func (this *SelectValueAddService) Validate() error { return nil } func (this *DelBundleRequest) Validate() error { @@ -42,6 +72,9 @@ func (this *BundleListResponse) Validate() error { func (this *BundleDetailRequest) Validate() error { return nil } +func (this *HandShelfRequest) Validate() error { + return nil +} func (this *BundleDetailResponse) Validate() error { if this.Bundle != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Bundle); err != nil { @@ -50,6 +83,21 @@ func (this *BundleDetailResponse) Validate() error { } return nil } +func (this *BundleDetailResponseV2) Validate() error { + if this.Bundle != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Bundle); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Bundle", err) + } + } + for _, item := range this.SelectValueAddService { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("SelectValueAddService", err) + } + } + } + return nil +} func (this *OrderRecord) Validate() error { return nil } @@ -119,3 +167,50 @@ func (this *ValueAddBundleDetailResponse) Validate() error { func (this *FinancialConfirmationRequest) Validate() error { return nil } +func (this *ValueAddService) Validate() error { + for _, item := range this.ServiceLang { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ServiceLang", err) + } + } + } + return nil +} +func (this *ValueAddServiceLang) Validate() error { + for _, item := range this.Options { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Options", err) + } + } + } + return nil +} +func (this *ValueAddPriceOptions) Validate() error { + return nil +} +func (this *ValueAddServiceListRequest) Validate() error { + return nil +} +func (this *ValueAddServiceListResponse) Validate() error { + for _, item := range this.ValueAddServiceList { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ValueAddServiceList", err) + } + } + } + return nil +} +func (this *ValueAddServiceDetailRequest) Validate() error { + return nil +} +func (this *ValueAddServiceDetailResponse) Validate() error { + if this.ValueAddServiceLang != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.ValueAddServiceLang); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ValueAddServiceLang", err) + } + } + return nil +} diff --git a/pb/bundle/bundle_triple.pb.go b/pb/bundle/bundle_triple.pb.go index 41076da..e21ada3 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 v3.10.1 +// - protoc v5.29.2 // source: pb/bundle.proto package bundle @@ -31,6 +31,10 @@ type BundleClient interface { CreateBundle(ctx context.Context, in *BundleProfile, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) UpdateBundle(ctx context.Context, in *BundleProfile, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) DeleteBundle(ctx context.Context, in *DelBundleRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) + HandShelf(ctx context.Context, in *HandShelfRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) + SaveBundle(ctx context.Context, in *BundleProfile, opts ...grpc_go.CallOption) (*SaveResponse, common.ErrorWithAttachment) + BundleListV2(ctx context.Context, in *BundleListRequest, opts ...grpc_go.CallOption) (*BundleListResponse, common.ErrorWithAttachment) + BundleDetailV2(ctx context.Context, in *BundleDetailRequest, opts ...grpc_go.CallOption) (*BundleDetailResponseV2, common.ErrorWithAttachment) BundleList(ctx context.Context, in *BundleListRequest, opts ...grpc_go.CallOption) (*BundleListResponse, common.ErrorWithAttachment) BundleDetail(ctx context.Context, in *BundleDetailRequest, opts ...grpc_go.CallOption) (*BundleDetailResponse, common.ErrorWithAttachment) CreateOrderRecord(ctx context.Context, in *OrderRecord, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) @@ -43,6 +47,10 @@ type BundleClient interface { 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) } type bundleClient struct { @@ -53,6 +61,10 @@ type BundleClientImpl struct { CreateBundle func(ctx context.Context, in *BundleProfile) (*CommonResponse, error) UpdateBundle func(ctx context.Context, in *BundleProfile) (*CommonResponse, error) DeleteBundle func(ctx context.Context, in *DelBundleRequest) (*CommonResponse, error) + HandShelf func(ctx context.Context, in *HandShelfRequest) (*CommonResponse, error) + SaveBundle func(ctx context.Context, in *BundleProfile) (*SaveResponse, error) + BundleListV2 func(ctx context.Context, in *BundleListRequest) (*BundleListResponse, error) + BundleDetailV2 func(ctx context.Context, in *BundleDetailRequest) (*BundleDetailResponseV2, error) BundleList func(ctx context.Context, in *BundleListRequest) (*BundleListResponse, error) BundleDetail func(ctx context.Context, in *BundleDetailRequest) (*BundleDetailResponse, error) CreateOrderRecord func(ctx context.Context, in *OrderRecord) (*CommonResponse, error) @@ -64,6 +76,9 @@ type BundleClientImpl struct { 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) + 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) } func (c *BundleClientImpl) GetDubboStub(cc *triple.TripleConn) BundleClient { @@ -96,6 +111,30 @@ func (c *bundleClient) DeleteBundle(ctx context.Context, in *DelBundleRequest, o return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/DeleteBundle", in, out) } +func (c *bundleClient) HandShelf(ctx context.Context, in *HandShelfRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) { + out := new(CommonResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/HandShelf", in, out) +} + +func (c *bundleClient) SaveBundle(ctx context.Context, in *BundleProfile, opts ...grpc_go.CallOption) (*SaveResponse, common.ErrorWithAttachment) { + out := new(SaveResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SaveBundle", in, out) +} + +func (c *bundleClient) BundleListV2(ctx context.Context, in *BundleListRequest, opts ...grpc_go.CallOption) (*BundleListResponse, common.ErrorWithAttachment) { + out := new(BundleListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/BundleListV2", in, out) +} + +func (c *bundleClient) BundleDetailV2(ctx context.Context, in *BundleDetailRequest, opts ...grpc_go.CallOption) (*BundleDetailResponseV2, common.ErrorWithAttachment) { + out := new(BundleDetailResponseV2) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/BundleDetailV2", in, out) +} + func (c *bundleClient) BundleList(ctx context.Context, in *BundleListRequest, opts ...grpc_go.CallOption) (*BundleListResponse, common.ErrorWithAttachment) { out := new(BundleListResponse) interfaceKey := ctx.Value(constant.InterfaceKey).(string) @@ -162,6 +201,24 @@ func (c *bundleClient) ValueAddBundleDetail(ctx context.Context, in *ValueAddBun return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ValueAddBundleDetail", in, out) } +func (c *bundleClient) SaveValueAddService(ctx context.Context, in *ValueAddServiceLang, opts ...grpc_go.CallOption) (*SaveResponse, common.ErrorWithAttachment) { + out := new(SaveResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SaveValueAddService", in, out) +} + +func (c *bundleClient) ValueAddServiceList(ctx context.Context, in *ValueAddServiceListRequest, opts ...grpc_go.CallOption) (*ValueAddServiceListResponse, common.ErrorWithAttachment) { + out := new(ValueAddServiceListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ValueAddServiceList", in, out) +} + +func (c *bundleClient) ValueAddServiceDetail(ctx context.Context, in *ValueAddServiceDetailRequest, opts ...grpc_go.CallOption) (*ValueAddServiceDetailResponse, common.ErrorWithAttachment) { + out := new(ValueAddServiceDetailResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ValueAddServiceDetail", in, out) +} + // BundleServer is the server API for Bundle service. // All implementations must embed UnimplementedBundleServer // for forward compatibility @@ -169,6 +226,10 @@ type BundleServer interface { CreateBundle(context.Context, *BundleProfile) (*CommonResponse, error) UpdateBundle(context.Context, *BundleProfile) (*CommonResponse, error) DeleteBundle(context.Context, *DelBundleRequest) (*CommonResponse, error) + HandShelf(context.Context, *HandShelfRequest) (*CommonResponse, error) + SaveBundle(context.Context, *BundleProfile) (*SaveResponse, error) + BundleListV2(context.Context, *BundleListRequest) (*BundleListResponse, error) + BundleDetailV2(context.Context, *BundleDetailRequest) (*BundleDetailResponseV2, error) BundleList(context.Context, *BundleListRequest) (*BundleListResponse, error) BundleDetail(context.Context, *BundleDetailRequest) (*BundleDetailResponse, error) CreateOrderRecord(context.Context, *OrderRecord) (*CommonResponse, error) @@ -181,6 +242,10 @@ type BundleServer interface { 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) mustEmbedUnimplementedBundleServer() } @@ -198,6 +263,18 @@ func (UnimplementedBundleServer) UpdateBundle(context.Context, *BundleProfile) ( func (UnimplementedBundleServer) DeleteBundle(context.Context, *DelBundleRequest) (*CommonResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteBundle not implemented") } +func (UnimplementedBundleServer) HandShelf(context.Context, *HandShelfRequest) (*CommonResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HandShelf not implemented") +} +func (UnimplementedBundleServer) SaveBundle(context.Context, *BundleProfile) (*SaveResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SaveBundle not implemented") +} +func (UnimplementedBundleServer) BundleListV2(context.Context, *BundleListRequest) (*BundleListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BundleListV2 not implemented") +} +func (UnimplementedBundleServer) BundleDetailV2(context.Context, *BundleDetailRequest) (*BundleDetailResponseV2, error) { + return nil, status.Errorf(codes.Unimplemented, "method BundleDetailV2 not implemented") +} func (UnimplementedBundleServer) BundleList(context.Context, *BundleListRequest) (*BundleListResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BundleList not implemented") } @@ -231,6 +308,15 @@ func (UnimplementedBundleServer) ValueAddBundleList(context.Context, *ValueAddBu func (UnimplementedBundleServer) ValueAddBundleDetail(context.Context, *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ValueAddBundleDetail not implemented") } +func (UnimplementedBundleServer) SaveValueAddService(context.Context, *ValueAddServiceLang) (*SaveResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SaveValueAddService not implemented") +} +func (UnimplementedBundleServer) ValueAddServiceList(context.Context, *ValueAddServiceListRequest) (*ValueAddServiceListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValueAddServiceList not implemented") +} +func (UnimplementedBundleServer) ValueAddServiceDetail(context.Context, *ValueAddServiceDetailRequest) (*ValueAddServiceDetailResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValueAddServiceDetail not implemented") +} func (s *UnimplementedBundleServer) XXX_SetProxyImpl(impl protocol.Invoker) { s.proxyImpl = impl } @@ -346,6 +432,122 @@ func _Bundle_DeleteBundle_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Bundle_HandShelf_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(HandShelfRequest) + 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("HandShelf", 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_SaveBundle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(BundleProfile) + 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("SaveBundle", 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_BundleListV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(BundleListRequest) + 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("BundleListV2", 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_BundleDetailV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(BundleDetailRequest) + 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("BundleDetailV2", 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_BundleList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { in := new(BundleListRequest) if err := dec(in); err != nil { @@ -665,6 +867,93 @@ func _Bundle_ValueAddBundleDetail_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _Bundle_SaveValueAddService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ValueAddServiceLang) + 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("SaveValueAddService", 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_ValueAddServiceList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ValueAddServiceListRequest) + 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("ValueAddServiceList", 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_ValueAddServiceDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ValueAddServiceDetailRequest) + 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("ValueAddServiceDetail", 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) @@ -684,6 +973,22 @@ var Bundle_ServiceDesc = grpc_go.ServiceDesc{ MethodName: "DeleteBundle", Handler: _Bundle_DeleteBundle_Handler, }, + { + MethodName: "HandShelf", + Handler: _Bundle_HandShelf_Handler, + }, + { + MethodName: "SaveBundle", + Handler: _Bundle_SaveBundle_Handler, + }, + { + MethodName: "BundleListV2", + Handler: _Bundle_BundleListV2_Handler, + }, + { + MethodName: "BundleDetailV2", + Handler: _Bundle_BundleDetailV2_Handler, + }, { MethodName: "BundleList", Handler: _Bundle_BundleList_Handler, @@ -728,6 +1033,18 @@ var Bundle_ServiceDesc = grpc_go.ServiceDesc{ MethodName: "ValueAddBundleDetail", Handler: _Bundle_ValueAddBundleDetail_Handler, }, + { + MethodName: "SaveValueAddService", + Handler: _Bundle_SaveValueAddService_Handler, + }, + { + MethodName: "ValueAddServiceList", + Handler: _Bundle_ValueAddServiceList_Handler, + }, + { + MethodName: "ValueAddServiceDetail", + Handler: _Bundle_ValueAddServiceDetail_Handler, + }, }, Streams: []grpc_go.StreamDesc{}, Metadata: "pb/bundle.proto", diff --git a/pkg/db/bundleDB.go b/pkg/db/bundleDB.go index 988e99e..a7f0dc6 100644 --- a/pkg/db/bundleDB.go +++ b/pkg/db/bundleDB.go @@ -1,10 +1,11 @@ package db import ( - "github.com/google/wire" - "gorm.io/gorm" bundleConfig "micro-bundle/config" "strings" + + "github.com/google/wire" + "gorm.io/gorm" ) var Provider = wire.NewSet(NewBundleDB) diff --git a/pkg/db/mysql.go b/pkg/db/mysql.go index fbed55c..0d5ee77 100644 --- a/pkg/db/mysql.go +++ b/pkg/db/mysql.go @@ -45,8 +45,12 @@ func loadMysqlConn(conn string) *gorm.DB { &model.BundleOrderRecords{}, &model.ValueAddBundleProfile{}, //&model.ValueAddBundleRecord{} + &model.BundleProfileLang{}, + &model.ValueAddService{}, + &model.ValueAddServiceLang{}, + &model.BundleToValueAddService{}, ) - + if err != nil { return nil } diff --git a/pkg/msg/msg.go b/pkg/msg/msg.go index 4ac5289..0980870 100644 --- a/pkg/msg/msg.go +++ b/pkg/msg/msg.go @@ -10,6 +10,13 @@ const ( Success = "操作成功" Failed = "操作失败" ) +const ( + ZH_CN = "zh-CN" //简体中文 + ZH_TW = "zh-TW" //繁体中文 + EN = "EN" //英文 + DE_DE = "de-DE" //德语 + JS_JP = "js-JP" //日语 +) const ( Http = 200 @@ -72,3 +79,20 @@ const ( ErrorTransaction = "事务失败" ErrorCommitTransaction = "提交事务失败" ) + +// 增值服务信息 +const ( + ErrorCreateValueAddServiceInfo = "创建增值服务信息失败" + SuccessCreateValueAddServiceInfo = "创建增值服务信息成功" + ErrorUpdateValueAddServiceInfo = "更新增值服务信息失败" + SuccessUpdateValueAddServiceInfo = "更新增值服务信息成功" + ErrorValueAddServiceList = "获取增值服务列表失败" + SuccessValueAddServiceList = "获取增值服务列表成功" + ErrorValueAddServiceInfo = "获取增值服务详情失败" + SuccessValueAddServiceInfo = "获取增值服务详情成功" + //校验 + ErrorValueServiceNameEmpty = "增值服务名称不能为空" + ErrorValueServiceTypeEmpty = "增值服务类型不能为空" + ErrorValueServicePriceModeEmpty = "增值服务价格模式不能为空" + ErrorValueServiceOptionsEmpty = "增值服务选项不能为空" +) From e8dd695efd6a5f7edfdba8c49b2e1418d31e678f Mon Sep 17 00:00:00 2001 From: sxy <3187870250@qq.com> Date: Fri, 6 Jun 2025 15:27:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A5=97=E9=A4=90?= =?UTF-8?q?=E4=B8=8E=E6=9C=8D=E5=8A=A1=E5=8F=96=E6=B6=88=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/dao/bundleDao.go | 1 + internal/logic/bundleLogic.go | 96 +++++++++++++++---------------- internal/model/bundle.go | 48 +++++++--------- internal/model/valueAdd_bundle.go | 17 +++--- 4 files changed, 78 insertions(+), 84 deletions(-) diff --git a/internal/dao/bundleDao.go b/internal/dao/bundleDao.go index 2cfb36a..b47146d 100644 --- a/internal/dao/bundleDao.go +++ b/internal/dao/bundleDao.go @@ -276,6 +276,7 @@ func BundleDetailV2(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailRe if err != nil { return res, commonErr.ReturnError(err, msg.ErrorGetBundleInfo, "获取增值服务信息失败: ") } + //if valueAddService.IsDisplay{} ValueAddServiceLang := &bundle.ValueAddServiceLang{ Uuid: valueAddDeatilData.UUID, ServiceName: valueAddDeatilData.ServiceName, diff --git a/internal/logic/bundleLogic.go b/internal/logic/bundleLogic.go index a75df87..0fb18ca 100644 --- a/internal/logic/bundleLogic.go +++ b/internal/logic/bundleLogic.go @@ -80,7 +80,6 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) Language: req.Language, } if req.Uuid == "" && req.Language != msg.ZH_CN { - res.Msg = "请先创建中文版本套餐" return res, errors.New("请先创建中文版本套餐") } var existValueService = make(map[string]string) @@ -100,7 +99,6 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) if req.Language == msg.ZH_CN && req.SelectValueAddService != nil && len(req.SelectValueAddService) > 0 { for _, v := range req.SelectValueAddService { detail, checkErr := dao.ValueAddServiceDetailByUuidAndLanguage(v.ValueAddUuid, req.Language) - fmt.Println("detail", detail) if checkErr != nil { if checkErr == gorm.ErrRecordNotFound { return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s版不存在,请先创建对应增值套餐", v.ServiceName, req.Language)) @@ -110,13 +108,16 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) } if detail.PriceType != req.PriceType { if req.Uuid == "" { + //中文套餐创建时,币种不一致直接返回错误 return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s币种与套餐币种不一致", detail.ServiceName, req.Language)) } else { + //更新时,判断是否已存在,存在则取消关联 _, ok := existValueService[v.ValueAddUuid] if ok { cancelValueAddService[v.ValueAddUuid] = detail.ServiceName continue } else { + //币种不一致,新加币种时返回错误 return res, errors.New(fmt.Sprintf("所选增值服务[%s]%s币种与套餐币种不一致", detail.ServiceName, req.Language)) } @@ -151,14 +152,6 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) } } if req.Language == msg.ZH_CN { - if len(cancelValueAddService) > 0 { - cancel := "以下增值服务:" - for _, v := range cancelValueAddService { - cancel += fmt.Sprintf("[%s]%s", v, req.Language) - } - cancel += "版币种与套餐币种不一致" - return res, errors.New(cancel) - } bundleProfile.UUID = utils.GetUUID() if err = dao.TxCreateBundle(tx, bundleProfile); err != nil { return res, errors.New("保存中文语言套餐失败: " + err.Error()) @@ -184,6 +177,7 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) count := 0 if valueUuid != nil && len(valueUuid) > 0 { for _, v := range valueUuid { + //可以改成批量获取 valueDetail, err2 := dao.ValueAddServiceDetailByUuidAndLanguage(v, req.Language) if err2 != nil { return res, err2 @@ -206,8 +200,13 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) } else { return } - } else { - // 已存在,进行更新 + } else { // 已存在,进行更新 + + // 更新前保存历史记录 + // if err = dao.CreateBundleProfileHistory(tx,req.Uuid); err != nil { + // return res, errors.New("保存套餐历史记录失败: " + err.Error()) + // } + if req.Language == msg.ZH_CN { if len(cancelValueAddService) > 0 { cancel := "以下增值服务:" @@ -238,6 +237,39 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) tx.Rollback() return res, err } + } else { + //更新其他语言时 先获取所有关联增值服务,判断币种是否一致,不一致则取消关联 + valueAddService, err := dao.GetBundleToValueAddServiceByBundleUuid(req.Uuid) + if err != nil { + return res, err + } + cancelValueService := make(map[string]string) + for _, v := range valueAddService { + detail, checkErr := dao.ValueAddServiceDetailByUuidAndLanguage(v.ValueUid, req.Language) + if checkErr != nil { + if checkErr == gorm.ErrRecordNotFound { + continue + } else { + return res, checkErr + } + } + if detail.PriceType != req.PriceType { + cancelValueService[v.ValueUid] = detail.ServiceName + continue + } + } + if int64(len(cancelValueService)) > 0 { + cancel := "以下增值服务:" + for k, v := range cancelValueService { + cancel += fmt.Sprintf("[%s]%s", v, req.Language) + if err = tx.Where("bundle_uuid = ? AND value_uid = ?", req.Uuid, k).Delete(&model.BundleToValueAddService{}).Error; err != nil { + return res, errors.New("删除套餐与增值服务关联失败: " + err.Error()) + } + } + cancel += "版币种与套餐币种不一致,已取消相关关联" + res.Msg = "保存成功 " + cancel + res.CancelNum = int64(len(cancelValueService)) + } } updateBundleLang := map[string]interface{}{ "name": req.Name, @@ -248,39 +280,7 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) if err = dao.TxUpdateBundleLang(tx, req.Uuid, req.Language, updateBundleLang); err != nil { return res, err } - //更新时 先获取所有关联增值服务,判断币种是否一致,不一致则取消关联 - valueAddService, err := dao.GetBundleToValueAddServiceByBundleUuid(req.Uuid) - if err != nil { - return res, err - } - cancelValueService := make(map[string]string) - for _, v := range valueAddService { - detail, checkErr := dao.ValueAddServiceDetailByUuidAndLanguage(v.ValueUid, req.Language) - if checkErr != nil { - if checkErr == gorm.ErrRecordNotFound { - continue - } else { - return res, checkErr - } - } - if detail.PriceType != req.PriceType { - cancelValueService[v.ValueUid] = detail.ServiceName - continue - } - } - if int64(len(cancelValueService)) > 0 { - cancel := "以下增值服务:" - for k, v := range cancelValueService { - cancel += fmt.Sprintf("[%s]%s", v, req.Language) - if err = tx.Where("bundle_uuid = ? AND value_uid = ?", req.Uuid, k).Delete(&model.BundleToValueAddService{}).Error; err != nil { - return res, errors.New("删除套餐与增值服务关联失败: " + err.Error()) - } - } - cancel += "版币种与套餐币种不一致,已取消相关关联" - res.Msg = "保存成功 " + cancel - res.CancelNum = int64(len(cancelValueService)) - } res.Uuid = req.Uuid if res.Msg == "" { res.Msg = "保存成功" @@ -297,11 +297,11 @@ func BundleListV2(req *bundle.BundleListRequest) (res *bundle.BundleListResponse func BundleDetailV2(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailResponseV2, err error) { res = new(bundle.BundleDetailResponseV2) if req.Uuid == "" { - res.Msg = "uuid不能为空" + res.Msg = "" return res, errors.New("uuid不能为空") } if req.Language == "" { - res.Msg = "language不能为空" + res.Msg = "" return res, errors.New("language不能为空") } res, err = dao.BundleDetailV2(req) @@ -314,8 +314,8 @@ func BundleDetailV2(req *bundle.BundleDetailRequest) (res *bundle.BundleDetailRe func HandShelf(req *bundle.HandShelfRequest) (res *bundle.CommonResponse, err error) { res = new(bundle.CommonResponse) if req.ShelfStatus != 1 && req.ShelfStatus != 2 { - res.Msg = "非法的上下架状态" - return res, errors.New("非法的上下架状态") + res.Msg = "" + return res, errors.New("无效的上下架状态") } res, err = dao.HandShelf(req.Uuid, req.ShelfStatus) return diff --git a/internal/model/bundle.go b/internal/model/bundle.go index 99807bb..7b04afc 100644 --- a/internal/model/bundle.go +++ b/internal/model/bundle.go @@ -10,7 +10,7 @@ type BundleProfile struct { UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:套餐UUID"` Name string `json:"name" gorm:"column:name;type:varchar(2048);comment:套餐名称"` Price float32 `json:"price" gorm:"column:price;type:decimal(12,2);comment:套餐价格"` - PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐价格类型 1:人民币 2:美元"` + PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐类型 1:人民币 2:美元"` Contract string `json:"contract" gorm:"type:varchar(1024);comment:合同"` ContractDuration int `json:"contractDuration" gorm:"column:contract_duration;type:int;comment:合同有效时长"` Content string `json:"content" gorm:"column:content;type:text;comment:套餐内容"` @@ -18,19 +18,19 @@ type BundleProfile struct { Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN EN"` BundleCommonUid string `json:"bundleCommonUid" gorm:"column:bundle_common_uid;type:varchar(1024);comment:套餐公共ID"` - Sort int64 `json:"sort" gorm:"column:sort;type:int;comment:套餐排序"` //数字越小越靠前,同大小后创建优先 - ShelfStatus int64 `json:"shelfStatus" gorm:"column:shelf_status;type:int;default:2;comment:上架状态 1:上架 2:下架"` - BgImg1 string `json:"bgImg1" gorm:"column:bg_img1;type:varchar(1024);comment:背景图-首页"` - BgImg2 string `json:"bgImg2" gorm:"column:bg_img2;type:varchar(1024);comment:背景图-我的"` - //SelectAddService BundleSelectAddServicess `json:"selectAddService" gorm:"column:select_add_service;type:json;comment:已选增值服务"` - BundleProfileLang []BundleProfileLang `gorm:"foreignKey:UUID;references:UUID" json:"bundleProfileLang"` + Sort int64 `json:"sort" gorm:"column:sort;type:int;comment:套餐排序"` //数字越小越靠前,同大小后创建优先 + ShelfStatus int64 `json:"shelfStatus" gorm:"column:shelf_status;type:int;default:2;comment:上架状态 1:上架 2:下架"` + BgImg1 string `json:"bgImg1" gorm:"column:bg_img1;type:varchar(1024);comment:背景图-首页"` + BgImg2 string `json:"bgImg2" gorm:"column:bg_img2;type:varchar(1024);comment:背景图-我的"` + BundleToValueAddService []BundleToValueAddService `gorm:"foreignKey:BundleUuid;references:UUID" json:"bundleToValueAddService"` + BundleProfileLang []BundleProfileLang `gorm:"foreignKey:UUID;references:UUID" json:"bundleProfileLang"` } type BundleProfileLang struct { Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:套餐UUID"` Name string `json:"name" gorm:"column:name;type:varchar(2048);comment:套餐名称"` Price float32 `json:"price" gorm:"column:price;type:decimal(12,2);comment:套餐价格"` - PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐价格类型 1:人民币 2:美元"` + PriceType int64 `json:"priceType" gorm:"column:price_type;type:int;comment:套餐类型 1:人民币 2:美元"` Content string `json:"content" gorm:"column:content;type:text;comment:套餐内容"` Language string `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE js-JP(中繁英德日)"` CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` @@ -49,27 +49,16 @@ type BundleToValueAddService struct { DeletedAt soft_delete.DeletedAt } -// type BundleSelectAddServicess []*BundleSelectAddService -// type BundleSelectAddService struct { -// ValueUid string `json:"valueUid" gorm:"column:value_uid;type:varchar(1024);comment:增值服务UUID"` -// ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` -// IsDisplay bool `json:"isDisplay" gorm:"column:is_display;type:tinyint(1);comment:是否显示 0:不显示 1:显示"` -// } +// todo套餐修改历史 +type BundleProfileHistory struct { + Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` + Uuid string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:UUID"` + BundleProfile BundleProfile `gorm:"foreignKey:Uuid;references:UUID" json:"bundleProfile"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt +} -// // 实现 driver.Valuer 接口 -// func (o BundleSelectAddServicess) Value() (driver.Value, error) { -// return json.Marshal(o) -// } - -// // 实现 sql.Scanner 接口 -// -// func (o *BundleSelectAddServicess) Scan(value interface{}) error { -// bytes, ok := value.([]byte) -// if !ok { -// return errors.New("type assertion to []byte failed") -// } -// return json.Unmarshal(bytes, o) -// } func (m *BundleProfile) TableName() string { return "bundle_profile" } @@ -79,3 +68,6 @@ func (m *BundleProfileLang) TableName() string { func (m *BundleToValueAddService) TableName() string { return "bundle_to_value_add_service" } +func (m *BundleProfileHistory) TableName() string { + return "bundle_profile_history" +} diff --git a/internal/model/valueAdd_bundle.go b/internal/model/valueAdd_bundle.go index e21286e..7fc496f 100644 --- a/internal/model/valueAdd_bundle.go +++ b/internal/model/valueAdd_bundle.go @@ -30,14 +30,15 @@ type ValueAddBundleProfile struct { // 新增值套餐主表 type ValueAddService struct { - Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` - UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:增值套餐UUID"` - ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` - ServiceType int32 `json:"serviceType" gorm:"column:service_type;type:int;comment:服务类型 1:视频 2:图文 3:数据报表 4:账号数 5:可用时长"` - ValueAddServiceLang []ValueAddServiceLang `gorm:"foreignKey:UUID;references:UUID"` - CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` - UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` - DeletedAt soft_delete.DeletedAt + Id int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` + UUID string `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:增值套餐UUID"` + ServiceName string `json:"serviceName" gorm:"column:service_name;type:varchar(1024);comment:增值服务名称"` + ServiceType int32 `json:"serviceType" gorm:"column:service_type;type:int;comment:服务类型 1:视频 2:图文 3:数据报表 4:账号数 5:可用时长"` + ValueAddServiceLang []ValueAddServiceLang `gorm:"foreignKey:UUID;references:UUID"` + BundleToValueAddService []BundleToValueAddService `gorm:"foreignKey:ValueUid;references:UUID"` + CreatedAt int64 `gorm:"column:created_at;autoCreateTime"` + UpdatedAt int64 `gorm:"column:updated_at;autoCreateTime"` + DeletedAt soft_delete.DeletedAt } // 新增值套餐语言表