浏览代码

feat: 新增线索

2637309949 4 年之前
父节点
当前提交
a9ccf3cf8e

+ 64 - 0
internal/logic/add_mkt_logic.go

@@ -0,0 +1,64 @@
+package logic
+
+import (
+	"context"
+	"database/sql"
+
+	"git.i2edu.net/i2/i2-bill-erp/internal/svc"
+	"git.i2edu.net/i2/i2-bill-erp/internal/utils"
+	"git.i2edu.net/i2/i2-bill-erp/model"
+	"git.i2edu.net/i2/i2-bill-erp/transform"
+
+	"git.i2edu.net/i2/go-zero/core/logx"
+	"git.i2edu.net/i2/go-zero/core/stores/sqlc"
+)
+
+type AddMktLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewAddMktLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddMktLogic {
+	return &AddMktLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+func (l *AddMktLogic) AddMkt(in *transform.MktReq) (*transform.MktRes, error) {
+	old := model.MktResource{}
+	err := l.svcCtx.SqlConn.QueryRowPartial(&old, "select id from mkt_resource where `stu_phone` = ? and del_flag!=1 limit 1", in.StuPhone)
+	if err == sqlc.ErrNotFound {
+		mkt := model.MktResource{}
+		mkt.DelFlag = 0
+		mkt.CreateBy = sql.NullString{String: in.MkId}
+		mkt.CreateTime = sql.NullTime{Time: utils.ParseTime(in.CreateTime)}
+		mkt.LastUpdateTime = sql.NullTime{Time: utils.ParseTime(in.CreateTime)}
+		mkt.LastUpdateBy = sql.NullString{String: in.MkId}
+		mkt.StuName = sql.NullString{String: in.StuName}
+		mkt.StuLinkPerson = sql.NullString{String: in.StuLinkPerson}
+		mkt.StuPhone = sql.NullString{String: in.StuPhone}
+		mkt.SchId = sql.NullInt64{Int64: in.SchId}
+		mkt.StuAddress = sql.NullString{String: in.Address}
+		mkt.AgeGroup = sql.NullInt64{Int64: in.AgeGroup}
+		mkt.StuType = 8
+		mkt.NetworkDetail = sql.NullInt64{Int64: in.NetworkDetailId}
+		mkt.CallType = sql.NullInt64{Int64: in.CallType}
+		mkt.MaType = sql.NullInt64{Int64: in.MaType}
+		mkt.QuaoYji = sql.NullInt64{Int64: in.QuaoYji}
+		mkt.LoadUser = sql.NullString{String: in.MkId}
+		_, err = l.svcCtx.MktResourceModel.Insert(mkt)
+		if err != nil {
+			l.Logger.Error(err)
+			return &transform.MktRes{Status: 500}, nil
+		}
+		return &transform.MktRes{Status: 200}, nil
+	}
+	if old.Id != 0 {
+		// 已经存在不处理
+		return &transform.MktRes{Status: 201}, nil
+	}
+	return &transform.MktRes{Status: 500}, nil
+}

+ 5 - 0
internal/server/transform_server.go

@@ -37,6 +37,11 @@ func (s *TransformServer) GetErpCityTree(ctx context.Context, in *transform.Empt
 	return l.GetErpCityTree(in)
 	return l.GetErpCityTree(in)
 }
 }
 
 
+func (s *TransformServer) AddMkt(ctx context.Context, in *transform.MktReq) (*transform.MktRes, error) {
+	l := logic.NewAddMktLogic(ctx, s.svcCtx)
+	return l.AddMkt(in)
+}
+
 // 获取erp  字典
 // 获取erp  字典
 func (s *TransformServer) LoadOptionset(ctx context.Context, in *transform.OptionsetReq) (*transform.OptionsetRes, error) {
 func (s *TransformServer) LoadOptionset(ctx context.Context, in *transform.OptionsetReq) (*transform.OptionsetRes, error) {
 	l := logic.NewLoadOptionsetLogic(ctx, s.svcCtx)
 	l := logic.NewLoadOptionsetLogic(ctx, s.svcCtx)

+ 10 - 8
internal/svc/service_context.go

@@ -9,14 +9,15 @@ import (
 )
 )
 
 
 type ServiceContext struct {
 type ServiceContext struct {
-	Config          config.Config
-	SqlConn         sqlx.SqlConn
-	ErpUtil         *ErpUtil
-	StudentModel    model.StudentModel
-	SysUserModel    model.SysUserModel
-	MktPartTimeUser model.MktPartTimeUserModel
-	ExcelExportLog  model.ExcelExportLogModel
-	DB              *xorm.Engine
+	Config           config.Config
+	SqlConn          sqlx.SqlConn
+	ErpUtil          *ErpUtil
+	StudentModel     model.StudentModel
+	MktResourceModel model.MktResourceModel
+	SysUserModel     model.SysUserModel
+	MktPartTimeUser  model.MktPartTimeUserModel
+	ExcelExportLog   model.ExcelExportLogModel
+	DB               *xorm.Engine
 }
 }
 
 
 func NewServiceContext(c config.Config) *ServiceContext {
 func NewServiceContext(c config.Config) *ServiceContext {
@@ -39,6 +40,7 @@ func NewServiceContext(c config.Config) *ServiceContext {
 	sc.SysUserModel = model.NewSysUserModel(sc.SqlConn, c.Cache)
 	sc.SysUserModel = model.NewSysUserModel(sc.SqlConn, c.Cache)
 	sc.MktPartTimeUser = model.NewMktPartTimeUserModel(sc.SqlConn, c.Cache)
 	sc.MktPartTimeUser = model.NewMktPartTimeUserModel(sc.SqlConn, c.Cache)
 	sc.ExcelExportLog = model.NewExcelExportLogModel(sc.SqlConn, c.Cache)
 	sc.ExcelExportLog = model.NewExcelExportLogModel(sc.SqlConn, c.Cache)
+	sc.MktResourceModel = model.NewMktResourceModel(sc.SqlConn, c.Cache)
 	sc.ErpUtil.SqlConn = sc.SqlConn
 	sc.ErpUtil.SqlConn = sc.SqlConn
 	sc.ErpUtil.Config = sc.Config
 	sc.ErpUtil.Config = sc.Config
 	return &sc
 	return &sc

+ 45 - 0
internal/utils/time.go

@@ -0,0 +1,45 @@
+package utils
+
+import (
+	"strings"
+	"time"
+)
+
+const (
+	TimeFormat = "2006-01-02 15:04:05"
+	ZeroTime   = "1970-01-01 00:00:00"
+)
+
+func ParseTime(str string) time.Time {
+	data := []byte(str)
+	if data[0] == '"' && data[len(data)-1] == '"' {
+		data = data[1 : len(data)-1]
+	}
+
+	dataStr := strings.TrimSpace(string(data))
+	if dataStr == "" {
+		now, _ := time.ParseInLocation(TimeFormat, ZeroTime, time.Local)
+		return now
+	}
+	var now time.Time
+
+	if strings.Index(dataStr, "T") > 0 {
+		dataStr = strings.Replace(dataStr, "T", " ", 1)
+	}
+
+	if len(dataStr) > 19 {
+		dataStr = dataStr[0:19]
+		if strings.Index(dataStr, "000") == 0 {
+			dataStr = ZeroTime
+		}
+	} else if len(dataStr) == 10 {
+		dataStr += " 00:00:00"
+	} else if len(dataStr) == 13 {
+		dataStr += ":00:00"
+	} else if len(dataStr) == 16 {
+		dataStr += ":00"
+	}
+
+	now, _ = time.ParseInLocation(TimeFormat, dataStr, time.Local)
+	return now
+}

+ 108 - 0
model/mkt_resource.sql

@@ -0,0 +1,108 @@
+CREATE TABLE `mkt_resource` (
+  `stu_link_person` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人1',
+  `age` int DEFAULT NULL COMMENT '年龄',
+  `stu_address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '家庭住址',
+  `stu_remark` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `recommend_stu` int DEFAULT NULL COMMENT '推荐学生ID',
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `stu_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '学员姓名',
+  `stu_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人1电话',
+  `create_time` datetime DEFAULT NULL,
+  `last_update_time` datetime DEFAULT NULL,
+  `stu_type` int NOT NULL DEFAULT '0' COMMENT '学员类型(数据字典)',
+  `ma_type` int DEFAULT NULL COMMENT '来源渠道(活动渠道数据字典)',
+  `stu_sys_state` int NOT NULL DEFAULT '0' COMMENT '学员系统状态(数据字典)',
+  `stu_en_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '学员英文',
+  `stu_bir` datetime DEFAULT NULL COMMENT '学员出生日',
+  `stu_load_school` int DEFAULT NULL COMMENT '资源收集校区',
+  `sch_id` int DEFAULT NULL COMMENT '资源跟进校区ID',
+  `ma_type_remark` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源备注',
+  `load_user` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '资源收集人',
+  `create_by` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '资源录入人ID',
+  `last_update_by` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `stu_sex` int DEFAULT NULL COMMENT '性别(数据字典)',
+  `del_flag` tinyint NOT NULL DEFAULT '0',
+  `stu_zc_money` float(10,2) DEFAULT NULL COMMENT '暂存总金额',
+  `call_type` int DEFAULT NULL COMMENT '咨询类型(数据字典)',
+  `stu_link_person2` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人2',
+  `stu_phone2` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人2电话',
+  `attend_school` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '就读学校',
+  `wechatid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '微信ID',
+  `network_detail` int DEFAULT NULL COMMENT '渠道细分(NETWORK_DETAIL表)',
+  `kh_type` int DEFAULT NULL COMMENT '客户类型(数据字典)',
+  `timer_visit_time` datetime DEFAULT NULL COMMENT '定时回访日期',
+  `stu_dj_money` float(10,2) DEFAULT NULL COMMENT '定金金额',
+  `relation1` int DEFAULT NULL COMMENT '联系人1关系(数据字典)',
+  `relation2` int DEFAULT NULL COMMENT '联系人2关系(数据字典)',
+  `tj_user` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '员工推荐人',
+  `stu_jifen` float(10,2) DEFAULT NULL COMMENT '学员积分',
+  `stu_level` int DEFAULT NULL,
+  `stu_follow_up_monthly` int DEFAULT NULL COMMENT '新生跟进月状态(数据字典)',
+  `ptuser_id` int DEFAULT NULL COMMENT '兼职人员ID',
+  `plfpbz` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `user_login_state` int DEFAULT NULL,
+  `stu_parent_id` int DEFAULT NULL,
+  `age_group` int DEFAULT NULL COMMENT '年龄段(数据字典)',
+  `stu_invalid_date` datetime DEFAULT NULL,
+  `stu_wxdq_date` datetime DEFAULT NULL,
+  `head_image` int DEFAULT NULL,
+  `stu_wxks_date` datetime DEFAULT NULL COMMENT '无效到期日期',
+  `quao_yji` int DEFAULT NULL COMMENT '渠道一级',
+  `idcard` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '身份证号码',
+  `recipient_info` int DEFAULT NULL,
+  `new_visit_date` datetime DEFAULT NULL COMMENT '最近回访时间',
+  `new_allot_date` datetime DEFAULT NULL,
+  `new_plan_date` datetime DEFAULT NULL COMMENT '计划回访日期',
+  `zzxs_date` datetime DEFAULT NULL,
+  `stuschcount` float(10,2) DEFAULT NULL,
+  `hf_cs` float(10,2) DEFAULT NULL COMMENT '回访次数',
+  `pk_current_pay` int DEFAULT NULL,
+  `orther_card` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '其他证件号码',
+  `stu_allot_tmkdate` datetime DEFAULT NULL,
+  `stu_city` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '资源收集城市',
+  `stu_sale` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '销售',
+  `os_name` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '资源收集校区',
+  `employee_referral_area` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `employee_referral_depart` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `tmk_zxs_username` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `tmk_zxs_date` datetime DEFAULT NULL,
+  `useless_remark` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `turn_user_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `stu_myd_type` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `stu_myd_type_mark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `student_customer_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '跟进客服(新增字段)',
+  `stu_city_id` int DEFAULT NULL COMMENT '资源收集城市ID',
+  `degree_deposit_money` float(10,2) DEFAULT NULL COMMENT '学位订金',
+  `is_important` int DEFAULT NULL COMMENT '是否重点(0否,1是)',
+  `idcard_type` int DEFAULT NULL COMMENT '证件号类型',
+  `agreement_id` int DEFAULT NULL,
+  `stu_now_jc` int DEFAULT NULL,
+  `parents_profession` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `tmk_city` int DEFAULT NULL,
+  `remark` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
+  `is_child_of_employee` int DEFAULT NULL,
+  `crm_id` bigint DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `IDX_mkt_resource_age` (`age`),
+  KEY `IDX_mkt_resource_create_by` (`create_by`),
+  KEY `IDX_mkt_resource_create_time` (`create_time`),
+  KEY `IDX_mkt_resource_load_user` (`load_user`),
+  KEY `IDX_mkt_resource_ma_type` (`ma_type`),
+  KEY `IDX_mkt_resource_network_detail` (`network_detail`),
+  KEY `IDX_mkt_resource_new_plan_date` (`new_plan_date`),
+  KEY `IDX_mkt_resource_new_visit_date` (`new_visit_date`),
+  KEY `IDX_mkt_resource_ptuser_id` (`ptuser_id`),
+  KEY `IDX_mkt_resource_quao_yji` (`quao_yji`),
+  KEY `IDX_mkt_resource_recommend_stu` (`recommend_stu`),
+  KEY `IDX_mkt_resource_sch_id` (`sch_id`),
+  KEY `IDX_mkt_resource_stu_load_school` (`stu_load_school`),
+  KEY `IDX_mkt_resource_stu_name` (`stu_name`),
+  KEY `IDX_mkt_resource_stu_parent_id` (`stu_parent_id`),
+  KEY `IDX_mkt_resource_stu_phone` (`stu_phone`),
+  KEY `IDX_mkt_resource_stu_phone2` (`stu_phone2`),
+  KEY `IDX_mkt_resource_stu_sale` (`stu_sale`),
+  KEY `IDX_mkt_resource_stu_type` (`stu_type`),
+  KEY `IDX_mkt_resource_student_customer_id` (`student_customer_id`),
+  KEY `IDX_mkt_resource_tj_user` (`tj_user`),
+  KEY `IDX_mkt_resource_zzxs_date` (`zzxs_date`)
+) ENGINE=InnoDB AUTO_INCREMENT=1211738 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='包含线索, 潜在的学员信息总表';

+ 181 - 0
model/mkt_resource_model.go

@@ -0,0 +1,181 @@
+package model
+
+import (
+	"database/sql"
+	"fmt"
+	"strings"
+
+	"git.i2edu.net/i2/go-zero/core/stores/cache"
+	"git.i2edu.net/i2/go-zero/core/stores/sqlc"
+	"git.i2edu.net/i2/go-zero/core/stores/sqlx"
+	"git.i2edu.net/i2/go-zero/core/stringx"
+	"git.i2edu.net/i2/go-zero/tools/goctl/model/sql/builderx"
+)
+
+var (
+	mktResourceFieldNames          = builderx.RawFieldNames(&MktResource{})
+	mktResourceRows                = strings.Join(mktResourceFieldNames, ",")
+	mktResourceRowsExpectAutoSet   = strings.Join(stringx.Remove(mktResourceFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
+	mktResourceRowsWithPlaceHolder = strings.Join(stringx.Remove(mktResourceFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
+
+	cacheMktResourceIdPrefix = "cache:mktResource:id:"
+)
+
+type (
+	MktResourceModel interface {
+		Insert(data MktResource) (sql.Result, error)
+		FindOne(id int64) (*MktResource, error)
+		Update(data MktResource) error
+		Delete(id int64) error
+	}
+
+	defaultMktResourceModel struct {
+		sqlc.CachedConn
+		table string
+	}
+
+	MktResource struct {
+		HfCs                   sql.NullFloat64 `db:"hf_cs"`       // 回访次数
+		OrtherCard             sql.NullString  `db:"orther_card"` // 其他证件号码
+		StuMydType             sql.NullString  `db:"stu_myd_type"`
+		AgreementId            sql.NullInt64   `db:"agreement_id"`
+		StuPhone2              sql.NullString  `db:"stu_phone2"` // 联系人2电话
+		StuInvalidDate         sql.NullTime    `db:"stu_invalid_date"`
+		OsName                 sql.NullString  `db:"os_name"` // 资源收集校区
+		StuRemark              sql.NullString  `db:"stu_remark"`
+		StuSex                 sql.NullInt64   `db:"stu_sex"` // 性别(数据字典)
+		UserLoginState         sql.NullInt64   `db:"user_login_state"`
+		StuEnName              sql.NullString  `db:"stu_en_name"` // 学员英文
+		StuBir                 sql.NullTime    `db:"stu_bir"`     // 学员出生日
+		SchId                  sql.NullInt64   `db:"sch_id"`      // 资源跟进校区ID
+		LastUpdateBy           sql.NullString  `db:"last_update_by"`
+		PtuserId               sql.NullInt64   `db:"ptuser_id"` // 兼职人员ID
+		PkCurrentPay           sql.NullInt64   `db:"pk_current_pay"`
+		RecipientInfo          sql.NullInt64   `db:"recipient_info"`
+		TmkZxsDate             sql.NullTime    `db:"tmk_zxs_date"`
+		StuLinkPerson          sql.NullString  `db:"stu_link_person"` // 联系人1
+		StuLoadSchool          sql.NullInt64   `db:"stu_load_school"` // 资源收集校区
+		LoadUser               sql.NullString  `db:"load_user"`       // 资源收集人
+		StuDjMoney             sql.NullFloat64 `db:"stu_dj_money"`    // 定金金额
+		Relation1              sql.NullInt64   `db:"relation1"`       // 联系人1关系(数据字典)
+		QuaoYji                sql.NullInt64   `db:"quao_yji"`        // 渠道一级
+		IdcardType             sql.NullInt64   `db:"idcard_type"`     // 证件号类型
+		CrmId                  sql.NullInt64   `db:"crm_id"`
+		MaType                 sql.NullInt64   `db:"ma_type"`          // 来源渠道(活动渠道数据字典)
+		StuLinkPerson2         sql.NullString  `db:"stu_link_person2"` // 联系人2
+		AttendSchool           sql.NullString  `db:"attend_school"`    // 就读学校
+		TimerVisitTime         sql.NullTime    `db:"timer_visit_time"` // 定时回访日期
+		TurnUserType           sql.NullString  `db:"turn_user_type"`
+		StuNowJc               sql.NullInt64   `db:"stu_now_jc"`
+		StuAddress             sql.NullString  `db:"stu_address"`           // 家庭住址
+		RecommendStu           sql.NullInt64   `db:"recommend_stu"`         // 推荐学生ID
+		StuSysState            int64           `db:"stu_sys_state"`         // 学员系统状态(数据字典)
+		KhType                 sql.NullInt64   `db:"kh_type"`               // 客户类型(数据字典)
+		StuFollowUpMonthly     sql.NullInt64   `db:"stu_follow_up_monthly"` // 新生跟进月状态(数据字典)
+		ZzxsDate               sql.NullTime    `db:"zzxs_date"`
+		UselessRemark          sql.NullString  `db:"useless_remark"`
+		StuZcMoney             sql.NullFloat64 `db:"stu_zc_money"` // 暂存总金额
+		Relation2              sql.NullInt64   `db:"relation2"`    // 联系人2关系(数据字典)
+		Plfpbz                 sql.NullString  `db:"plfpbz"`
+		HeadImage              sql.NullInt64   `db:"head_image"`
+		StuAllotTmkdate        sql.NullTime    `db:"stu_allot_tmkdate"`
+		Age                    sql.NullInt64   `db:"age"`           // 年龄
+		StuPhone               sql.NullString  `db:"stu_phone"`     // 联系人1电话
+		TjUser                 sql.NullString  `db:"tj_user"`       // 员工推荐人
+		AgeGroup               sql.NullInt64   `db:"age_group"`     // 年龄段(数据字典)
+		StuWxksDate            sql.NullTime    `db:"stu_wxks_date"` // 无效到期日期
+		EmployeeReferralArea   sql.NullString  `db:"employee_referral_area"`
+		Id                     int64           `db:"id"`
+		CreateBy               sql.NullString  `db:"create_by"` // 资源录入人ID
+		StuJifen               sql.NullFloat64 `db:"stu_jifen"` // 学员积分
+		StuLevel               sql.NullInt64   `db:"stu_level"`
+		TmkZxsUsername         sql.NullString  `db:"tmk_zxs_username"`
+		StuType                int64           `db:"stu_type"`       // 学员类型(数据字典)
+		NewVisitDate           sql.NullTime    `db:"new_visit_date"` // 最近回访时间
+		StuCity                sql.NullString  `db:"stu_city"`       // 资源收集城市
+		IsImportant            sql.NullInt64   `db:"is_important"`   // 是否重点(0否,1是)
+		ParentsProfession      sql.NullString  `db:"parents_profession"`
+		Remark                 sql.NullString  `db:"remark"`
+		CreateTime             sql.NullTime    `db:"create_time"`
+		DelFlag                int64           `db:"del_flag"`
+		StuParentId            sql.NullInt64   `db:"stu_parent_id"`
+		StuMydTypeMark         sql.NullString  `db:"stu_myd_type_mark"`
+		StudentCustomerId      sql.NullString  `db:"student_customer_id"` // 跟进客服(新增字段)
+		IsChildOfEmployee      sql.NullInt64   `db:"is_child_of_employee"`
+		StuName                sql.NullString  `db:"stu_name"` // 学员姓名
+		LastUpdateTime         sql.NullTime    `db:"last_update_time"`
+		MaTypeRemark           sql.NullString  `db:"ma_type_remark"` // 来源备注
+		Idcard                 sql.NullString  `db:"idcard"`         // 身份证号码
+		Stuschcount            sql.NullFloat64 `db:"stuschcount"`
+		DegreeDepositMoney     sql.NullFloat64 `db:"degree_deposit_money"` // 学位订金
+		StuWxdqDate            sql.NullTime    `db:"stu_wxdq_date"`
+		NewPlanDate            sql.NullTime    `db:"new_plan_date"`  // 计划回访日期
+		StuSale                sql.NullString  `db:"stu_sale"`       // 销售
+		StuCityId              sql.NullInt64   `db:"stu_city_id"`    // 资源收集城市ID
+		CallType               sql.NullInt64   `db:"call_type"`      // 咨询类型(数据字典)
+		Wechatid               sql.NullString  `db:"wechatid"`       // 微信ID
+		NetworkDetail          sql.NullInt64   `db:"network_detail"` // 渠道细分(NETWORK_DETAIL表)
+		NewAllotDate           sql.NullTime    `db:"new_allot_date"`
+		EmployeeReferralDepart sql.NullString  `db:"employee_referral_depart"`
+		TmkCity                sql.NullInt64   `db:"tmk_city"`
+	}
+)
+
+func NewMktResourceModel(conn sqlx.SqlConn, c cache.CacheConf) MktResourceModel {
+	return &defaultMktResourceModel{
+		CachedConn: sqlc.NewConn(conn, c),
+		table:      "`mkt_resource`",
+	}
+}
+
+func (m *defaultMktResourceModel) Insert(data MktResource) (sql.Result, error) {
+	query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, mktResourceRowsExpectAutoSet)
+	ret, err := m.ExecNoCache(query, data.HfCs, data.OrtherCard, data.StuMydType, data.AgreementId, data.StuPhone2, data.StuInvalidDate, data.OsName, data.StuRemark, data.StuSex, data.UserLoginState, data.StuEnName, data.StuBir, data.SchId, data.LastUpdateBy, data.PtuserId, data.PkCurrentPay, data.RecipientInfo, data.TmkZxsDate, data.StuLinkPerson, data.StuLoadSchool, data.LoadUser, data.StuDjMoney, data.Relation1, data.QuaoYji, data.IdcardType, data.CrmId, data.MaType, data.StuLinkPerson2, data.AttendSchool, data.TimerVisitTime, data.TurnUserType, data.StuNowJc, data.StuAddress, data.RecommendStu, data.StuSysState, data.KhType, data.StuFollowUpMonthly, data.ZzxsDate, data.UselessRemark, data.StuZcMoney, data.Relation2, data.Plfpbz, data.HeadImage, data.StuAllotTmkdate, data.Age, data.StuPhone, data.TjUser, data.AgeGroup, data.StuWxksDate, data.EmployeeReferralArea, data.CreateBy, data.StuJifen, data.StuLevel, data.TmkZxsUsername, data.StuType, data.NewVisitDate, data.StuCity, data.IsImportant, data.ParentsProfession, data.Remark, data.DelFlag, data.StuParentId, data.StuMydTypeMark, data.StudentCustomerId, data.IsChildOfEmployee, data.StuName, data.LastUpdateTime, data.MaTypeRemark, data.Idcard, data.Stuschcount, data.DegreeDepositMoney, data.StuWxdqDate, data.NewPlanDate, data.StuSale, data.StuCityId, data.CallType, data.Wechatid, data.NetworkDetail, data.NewAllotDate, data.EmployeeReferralDepart, data.TmkCity)
+
+	return ret, err
+}
+
+func (m *defaultMktResourceModel) FindOne(id int64) (*MktResource, error) {
+	mktResourceIdKey := fmt.Sprintf("%s%v", cacheMktResourceIdPrefix, id)
+	var resp MktResource
+	err := m.QueryRow(&resp, mktResourceIdKey, func(conn sqlx.SqlConn, v interface{}) error {
+		query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", mktResourceRows, m.table)
+		return conn.QueryRow(v, query, id)
+	})
+	switch err {
+	case nil:
+		return &resp, nil
+	case sqlc.ErrNotFound:
+		return nil, ErrNotFound
+	default:
+		return nil, err
+	}
+}
+
+func (m *defaultMktResourceModel) Update(data MktResource) error {
+	mktResourceIdKey := fmt.Sprintf("%s%v", cacheMktResourceIdPrefix, data.Id)
+	_, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
+		query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, mktResourceRowsWithPlaceHolder)
+		return conn.Exec(query, data.HfCs, data.OrtherCard, data.StuMydType, data.AgreementId, data.StuPhone2, data.StuInvalidDate, data.OsName, data.StuRemark, data.StuSex, data.UserLoginState, data.StuEnName, data.StuBir, data.SchId, data.LastUpdateBy, data.PtuserId, data.PkCurrentPay, data.RecipientInfo, data.TmkZxsDate, data.StuLinkPerson, data.StuLoadSchool, data.LoadUser, data.StuDjMoney, data.Relation1, data.QuaoYji, data.IdcardType, data.CrmId, data.MaType, data.StuLinkPerson2, data.AttendSchool, data.TimerVisitTime, data.TurnUserType, data.StuNowJc, data.StuAddress, data.RecommendStu, data.StuSysState, data.KhType, data.StuFollowUpMonthly, data.ZzxsDate, data.UselessRemark, data.StuZcMoney, data.Relation2, data.Plfpbz, data.HeadImage, data.StuAllotTmkdate, data.Age, data.StuPhone, data.TjUser, data.AgeGroup, data.StuWxksDate, data.EmployeeReferralArea, data.CreateBy, data.StuJifen, data.StuLevel, data.TmkZxsUsername, data.StuType, data.NewVisitDate, data.StuCity, data.IsImportant, data.ParentsProfession, data.Remark, data.DelFlag, data.StuParentId, data.StuMydTypeMark, data.StudentCustomerId, data.IsChildOfEmployee, data.StuName, data.LastUpdateTime, data.MaTypeRemark, data.Idcard, data.Stuschcount, data.DegreeDepositMoney, data.StuWxdqDate, data.NewPlanDate, data.StuSale, data.StuCityId, data.CallType, data.Wechatid, data.NetworkDetail, data.NewAllotDate, data.EmployeeReferralDepart, data.TmkCity, data.Id)
+	}, mktResourceIdKey)
+	return err
+}
+
+func (m *defaultMktResourceModel) Delete(id int64) error {
+
+	mktResourceIdKey := fmt.Sprintf("%s%v", cacheMktResourceIdPrefix, id)
+	_, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
+		query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
+		return conn.Exec(query, id)
+	}, mktResourceIdKey)
+	return err
+}
+
+func (m *defaultMktResourceModel) formatPrimary(primary interface{}) string {
+	return fmt.Sprintf("%s%v", cacheMktResourceIdPrefix, primary)
+}
+
+func (m *defaultMktResourceModel) queryPrimary(conn sqlx.SqlConn, v, primary interface{}) error {
+	query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", mktResourceRows, m.table)
+	return conn.QueryRow(v, query, primary)
+}

+ 2 - 0
start.sh

@@ -11,6 +11,8 @@ goctl model mysql ddl -c -src model/mkt_part_time_user.sql -dir model
 goctl model mysql ddl -c -src model/excel_export_log.sql -dir model --style go_zero
 goctl model mysql ddl -c -src model/excel_export_log.sql -dir model --style go_zero
 goctl model mysql ddl -c -src model/sys_role_data_permission.sql -dir model --style go_zero
 goctl model mysql ddl -c -src model/sys_role_data_permission.sql -dir model --style go_zero
 goctl model mysql ddl -c -src model/sys_data_permission_detail.sql -dir model --style go_zero
 goctl model mysql ddl -c -src model/sys_data_permission_detail.sql -dir model --style go_zero
+goctl model mysql ddl -c -src model/mkt_resource.sql -dir model --style go_zero
+
 
 
 
 
 ### RUN RPC SRV 
 ### RUN RPC SRV 

+ 31 - 2
transform.proto

@@ -168,21 +168,50 @@ message DataPermissionRes {
   map<string, string> mapList=1;
   map<string, string> mapList=1;
 }
 }
 
 
+message MktReq {
+	int64 Id = 1;
+	string MkId = 2;
+	int64 PartTimeUserId = 3;
+	int64 UserId = 4;
+	string StuName = 5;
+	int64 AgeGroup = 6;
+	string StuLinkPerson = 7;
+	string StuPhone = 8;
+	int64 SchId = 9;
+	string Address = 10;
+	string CreateTime = 11;
+	int64 DelFlag = 12;
+	int64 CheckState = 13;
+	string CheckTime = 14;
+	string CheckBy = 15;
+	int64 NetworkDetailId = 16;
+	int64 ActiveId = 17;
+	int64 CallType = 18;
+	int64 MaType = 19;
+	int64 QuaoYji = 20;
+	int64 MktActivityId = 21;
+	int64 LoadSchId = 22;
+}
+
+message MktRes {
+  int64 Status = 1;
+}
+
+
 service Transform {
 service Transform {
   rpc GetUser(UserRequest) returns(UserResponse);
   rpc GetUser(UserRequest) returns(UserResponse);
   rpc ParseToken(TokenRequest) returns(TokenResponse);
   rpc ParseToken(TokenRequest) returns(TokenResponse);
   //获取erp 省、城市树
   //获取erp 省、城市树
   rpc GetErpCityTree(Empty) returns(TreeNodes);
   rpc GetErpCityTree(Empty) returns(TreeNodes);
+  rpc AddMkt(MktReq) returns(MktRes);
   //获取erp  字典
   //获取erp  字典
   rpc LoadOptionset(OptionsetReq) returns(OptionsetRes);
   rpc LoadOptionset(OptionsetReq) returns(OptionsetRes);
   rpc GetSchoolIds(SchoolIdsReq) returns(SchoolIdsRes);
   rpc GetSchoolIds(SchoolIdsReq) returns(SchoolIdsRes);
   rpc GetCityIds(CityIdsReq) returns(CityIdsRes);
   rpc GetCityIds(CityIdsReq) returns(CityIdsRes);
   rpc PostExcelLog(ExcelLogReq) returns(ExcelLogRes);
   rpc PostExcelLog(ExcelLogReq) returns(ExcelLogRes);
   rpc GetErpOptionset(OptionCode) returns(Options);
   rpc GetErpOptionset(OptionCode) returns(Options);
-
   //获取数据权限
   //获取数据权限
   rpc GetDataPermission(DataPermissionReq) returns(DataPermissionRes);
   rpc GetDataPermission(DataPermissionReq) returns(DataPermissionRes);
-
   //获取erp 渠道细分树
   //获取erp 渠道细分树
   rpc GetErpMktNetWorkDetailTree(Empty) returns(TreeNodes);
   rpc GetErpMktNetWorkDetailTree(Empty) returns(TreeNodes);
   //获取erp 用户校区权限
   //获取erp 用户校区权限

+ 381 - 80
transform/transform.pb.go

@@ -1575,6 +1575,252 @@ func (m *DataPermissionRes) GetMapList() map[string]string {
 	return nil
 	return nil
 }
 }
 
 
+type MktReq struct {
+	Id                   int64    `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
+	MkId                 string   `protobuf:"bytes,2,opt,name=MkId,proto3" json:"MkId,omitempty"`
+	PartTimeUserId       int64    `protobuf:"varint,3,opt,name=PartTimeUserId,proto3" json:"PartTimeUserId,omitempty"`
+	UserId               int64    `protobuf:"varint,4,opt,name=UserId,proto3" json:"UserId,omitempty"`
+	StuName              string   `protobuf:"bytes,5,opt,name=StuName,proto3" json:"StuName,omitempty"`
+	AgeGroup             int64    `protobuf:"varint,6,opt,name=AgeGroup,proto3" json:"AgeGroup,omitempty"`
+	StuLinkPerson        string   `protobuf:"bytes,7,opt,name=StuLinkPerson,proto3" json:"StuLinkPerson,omitempty"`
+	StuPhone             string   `protobuf:"bytes,8,opt,name=StuPhone,proto3" json:"StuPhone,omitempty"`
+	SchId                int64    `protobuf:"varint,9,opt,name=SchId,proto3" json:"SchId,omitempty"`
+	Address              string   `protobuf:"bytes,10,opt,name=Address,proto3" json:"Address,omitempty"`
+	CreateTime           string   `protobuf:"bytes,11,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"`
+	DelFlag              int64    `protobuf:"varint,12,opt,name=DelFlag,proto3" json:"DelFlag,omitempty"`
+	CheckState           int64    `protobuf:"varint,13,opt,name=CheckState,proto3" json:"CheckState,omitempty"`
+	CheckTime            string   `protobuf:"bytes,14,opt,name=CheckTime,proto3" json:"CheckTime,omitempty"`
+	CheckBy              string   `protobuf:"bytes,15,opt,name=CheckBy,proto3" json:"CheckBy,omitempty"`
+	NetworkDetailId      int64    `protobuf:"varint,16,opt,name=NetworkDetailId,proto3" json:"NetworkDetailId,omitempty"`
+	ActiveId             int64    `protobuf:"varint,17,opt,name=ActiveId,proto3" json:"ActiveId,omitempty"`
+	CallType             int64    `protobuf:"varint,18,opt,name=CallType,proto3" json:"CallType,omitempty"`
+	MaType               int64    `protobuf:"varint,19,opt,name=MaType,proto3" json:"MaType,omitempty"`
+	QuaoYji              int64    `protobuf:"varint,20,opt,name=QuaoYji,proto3" json:"QuaoYji,omitempty"`
+	MktActivityId        int64    `protobuf:"varint,21,opt,name=MktActivityId,proto3" json:"MktActivityId,omitempty"`
+	LoadSchId            int64    `protobuf:"varint,22,opt,name=LoadSchId,proto3" json:"LoadSchId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MktReq) Reset()         { *m = MktReq{} }
+func (m *MktReq) String() string { return proto.CompactTextString(m) }
+func (*MktReq) ProtoMessage()    {}
+func (*MktReq) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cb4a498eeb2ba07d, []int{33}
+}
+
+func (m *MktReq) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MktReq.Unmarshal(m, b)
+}
+func (m *MktReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MktReq.Marshal(b, m, deterministic)
+}
+func (m *MktReq) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MktReq.Merge(m, src)
+}
+func (m *MktReq) XXX_Size() int {
+	return xxx_messageInfo_MktReq.Size(m)
+}
+func (m *MktReq) XXX_DiscardUnknown() {
+	xxx_messageInfo_MktReq.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MktReq proto.InternalMessageInfo
+
+func (m *MktReq) GetId() int64 {
+	if m != nil {
+		return m.Id
+	}
+	return 0
+}
+
+func (m *MktReq) GetMkId() string {
+	if m != nil {
+		return m.MkId
+	}
+	return ""
+}
+
+func (m *MktReq) GetPartTimeUserId() int64 {
+	if m != nil {
+		return m.PartTimeUserId
+	}
+	return 0
+}
+
+func (m *MktReq) GetUserId() int64 {
+	if m != nil {
+		return m.UserId
+	}
+	return 0
+}
+
+func (m *MktReq) GetStuName() string {
+	if m != nil {
+		return m.StuName
+	}
+	return ""
+}
+
+func (m *MktReq) GetAgeGroup() int64 {
+	if m != nil {
+		return m.AgeGroup
+	}
+	return 0
+}
+
+func (m *MktReq) GetStuLinkPerson() string {
+	if m != nil {
+		return m.StuLinkPerson
+	}
+	return ""
+}
+
+func (m *MktReq) GetStuPhone() string {
+	if m != nil {
+		return m.StuPhone
+	}
+	return ""
+}
+
+func (m *MktReq) GetSchId() int64 {
+	if m != nil {
+		return m.SchId
+	}
+	return 0
+}
+
+func (m *MktReq) GetAddress() string {
+	if m != nil {
+		return m.Address
+	}
+	return ""
+}
+
+func (m *MktReq) GetCreateTime() string {
+	if m != nil {
+		return m.CreateTime
+	}
+	return ""
+}
+
+func (m *MktReq) GetDelFlag() int64 {
+	if m != nil {
+		return m.DelFlag
+	}
+	return 0
+}
+
+func (m *MktReq) GetCheckState() int64 {
+	if m != nil {
+		return m.CheckState
+	}
+	return 0
+}
+
+func (m *MktReq) GetCheckTime() string {
+	if m != nil {
+		return m.CheckTime
+	}
+	return ""
+}
+
+func (m *MktReq) GetCheckBy() string {
+	if m != nil {
+		return m.CheckBy
+	}
+	return ""
+}
+
+func (m *MktReq) GetNetworkDetailId() int64 {
+	if m != nil {
+		return m.NetworkDetailId
+	}
+	return 0
+}
+
+func (m *MktReq) GetActiveId() int64 {
+	if m != nil {
+		return m.ActiveId
+	}
+	return 0
+}
+
+func (m *MktReq) GetCallType() int64 {
+	if m != nil {
+		return m.CallType
+	}
+	return 0
+}
+
+func (m *MktReq) GetMaType() int64 {
+	if m != nil {
+		return m.MaType
+	}
+	return 0
+}
+
+func (m *MktReq) GetQuaoYji() int64 {
+	if m != nil {
+		return m.QuaoYji
+	}
+	return 0
+}
+
+func (m *MktReq) GetMktActivityId() int64 {
+	if m != nil {
+		return m.MktActivityId
+	}
+	return 0
+}
+
+func (m *MktReq) GetLoadSchId() int64 {
+	if m != nil {
+		return m.LoadSchId
+	}
+	return 0
+}
+
+type MktRes struct {
+	Status               int64    `protobuf:"varint,1,opt,name=Status,proto3" json:"Status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MktRes) Reset()         { *m = MktRes{} }
+func (m *MktRes) String() string { return proto.CompactTextString(m) }
+func (*MktRes) ProtoMessage()    {}
+func (*MktRes) Descriptor() ([]byte, []int) {
+	return fileDescriptor_cb4a498eeb2ba07d, []int{34}
+}
+
+func (m *MktRes) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MktRes.Unmarshal(m, b)
+}
+func (m *MktRes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MktRes.Marshal(b, m, deterministic)
+}
+func (m *MktRes) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MktRes.Merge(m, src)
+}
+func (m *MktRes) XXX_Size() int {
+	return xxx_messageInfo_MktRes.Size(m)
+}
+func (m *MktRes) XXX_DiscardUnknown() {
+	xxx_messageInfo_MktRes.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MktRes proto.InternalMessageInfo
+
+func (m *MktRes) GetStatus() int64 {
+	if m != nil {
+		return m.Status
+	}
+	return 0
+}
+
 func init() {
 func init() {
 	proto.RegisterType((*UserRequest)(nil), "transform.UserRequest")
 	proto.RegisterType((*UserRequest)(nil), "transform.UserRequest")
 	proto.RegisterType((*UserResponse)(nil), "transform.UserResponse")
 	proto.RegisterType((*UserResponse)(nil), "transform.UserResponse")
@@ -1613,91 +1859,110 @@ func init() {
 	proto.RegisterType((*DataPermissionReq)(nil), "transform.DataPermissionReq")
 	proto.RegisterType((*DataPermissionReq)(nil), "transform.DataPermissionReq")
 	proto.RegisterType((*DataPermissionRes)(nil), "transform.DataPermissionRes")
 	proto.RegisterType((*DataPermissionRes)(nil), "transform.DataPermissionRes")
 	proto.RegisterMapType((map[string]string)(nil), "transform.DataPermissionRes.MapListEntry")
 	proto.RegisterMapType((map[string]string)(nil), "transform.DataPermissionRes.MapListEntry")
+	proto.RegisterType((*MktReq)(nil), "transform.MktReq")
+	proto.RegisterType((*MktRes)(nil), "transform.MktRes")
 }
 }
 
 
 func init() { proto.RegisterFile("transform.proto", fileDescriptor_cb4a498eeb2ba07d) }
 func init() { proto.RegisterFile("transform.proto", fileDescriptor_cb4a498eeb2ba07d) }
 
 
 var fileDescriptor_cb4a498eeb2ba07d = []byte{
 var fileDescriptor_cb4a498eeb2ba07d = []byte{
-	// 1262 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcb, 0x6e, 0xdb, 0x46,
-	0x17, 0x06, 0x45, 0xeb, 0x76, 0x24, 0x3b, 0xc9, 0xfc, 0x8e, 0xad, 0xf0, 0x77, 0x5b, 0x61, 0xe0,
-	0xb6, 0xf6, 0xc6, 0x0b, 0x07, 0x68, 0x03, 0xc3, 0x48, 0xe3, 0x5b, 0x04, 0x01, 0xbe, 0x81, 0x76,
-	0xd0, 0xa5, 0xc1, 0x88, 0x13, 0x99, 0x30, 0xc5, 0xa1, 0x39, 0x23, 0x23, 0x7a, 0x81, 0x2e, 0x0a,
-	0x74, 0xd5, 0x6e, 0xfb, 0x56, 0xdd, 0xf5, 0x65, 0x8a, 0x33, 0x33, 0x14, 0x47, 0x96, 0xe4, 0x38,
-	0x45, 0xba, 0x9b, 0x73, 0x3f, 0xf3, 0xf1, 0x5c, 0x86, 0xf0, 0x44, 0x66, 0x41, 0x22, 0x3e, 0xf0,
-	0x6c, 0xb0, 0x95, 0x66, 0x5c, 0x72, 0x52, 0x1f, 0x33, 0xe8, 0x4b, 0x68, 0xbc, 0x13, 0x2c, 0xf3,
-	0xd9, 0xed, 0x90, 0x09, 0x49, 0x96, 0xa0, 0x14, 0x85, 0x2d, 0xa7, 0xed, 0x6c, 0xd4, 0xfd, 0x52,
-	0x14, 0x92, 0x65, 0x28, 0xa7, 0xd7, 0x3c, 0x61, 0xad, 0x92, 0x62, 0x69, 0x82, 0xfe, 0xe5, 0x40,
-	0x53, 0x5b, 0x89, 0x94, 0x27, 0x82, 0x3d, 0xce, 0x0c, 0xb9, 0x19, 0x8f, 0x99, 0x68, 0xb9, 0x9a,
-	0xab, 0x08, 0xb2, 0x02, 0x15, 0x21, 0x03, 0x39, 0x14, 0xad, 0x85, 0xb6, 0xb3, 0xe1, 0xfa, 0x86,
-	0x22, 0x6d, 0x68, 0xb0, 0x2c, 0xf5, 0x79, 0xcc, 0x2e, 0x47, 0x29, 0x6b, 0x95, 0x95, 0xd0, 0x66,
-	0x11, 0x0f, 0x6a, 0x43, 0xc1, 0xb2, 0xd3, 0x60, 0xc0, 0x5a, 0x15, 0xe5, 0x72, 0x4c, 0xa3, 0xac,
-	0x17, 0xc9, 0x91, 0x92, 0x55, 0xb5, 0x2c, 0xa7, 0x31, 0x62, 0x9f, 0x25, 0x21, 0xcb, 0x5a, 0x35,
-	0x1d, 0x51, 0x53, 0x74, 0x1d, 0x9a, 0x97, 0xfc, 0x86, 0x25, 0x39, 0x18, 0xcb, 0x50, 0x96, 0x48,
-	0x9b, 0x8b, 0x69, 0x82, 0xfe, 0x59, 0x82, 0x45, 0xa3, 0x66, 0x6e, 0xbf, 0x02, 0x15, 0x44, 0xa3,
-	0x9b, 0x23, 0x60, 0x28, 0xbc, 0x81, 0x42, 0x89, 0xc7, 0xac, 0x1b, 0x0a, 0x83, 0x85, 0xcd, 0x22,
-	0xeb, 0xb0, 0x88, 0xe4, 0x45, 0xef, 0x9a, 0xf3, 0x18, 0x75, 0x34, 0x32, 0x93, 0x4c, 0xb2, 0x01,
-	0x4f, 0x90, 0x71, 0x9e, 0xf1, 0xbb, 0x28, 0xe9, 0x29, 0x5f, 0x0b, 0x4a, 0xef, 0x3e, 0x9b, 0x50,
-	0xfd, 0x5d, 0xce, 0xb2, 0x7e, 0x90, 0xa0, 0x5a, 0x59, 0xa9, 0x4d, 0xf0, 0x30, 0xab, 0x8b, 0x91,
-	0xc8, 0xbd, 0x1b, 0xe0, 0x6c, 0x16, 0xf9, 0x1a, 0xe0, 0x62, 0x24, 0x8c, 0x81, 0x41, 0xcf, 0xe2,
-	0x90, 0x35, 0xa8, 0xab, 0xc0, 0xea, 0x0b, 0xd7, 0x94, 0xb8, 0x60, 0xd0, 0x2a, 0x94, 0x8f, 0x06,
-	0xa9, 0x1c, 0xd1, 0x1f, 0xa0, 0x7e, 0x99, 0x31, 0x76, 0xca, 0x43, 0x26, 0xc8, 0x26, 0x94, 0x13,
-	0x3c, 0xb4, 0x9c, 0xb6, 0xbb, 0xd1, 0xd8, 0xfe, 0xdf, 0x56, 0x51, 0x93, 0xb9, 0x92, 0xaf, 0x35,
-	0xe8, 0xef, 0x0e, 0xd4, 0x72, 0x9e, 0x55, 0x59, 0xae, 0xaa, 0x2c, 0x02, 0x0b, 0x92, 0x7d, 0x94,
-	0x06, 0x4c, 0x75, 0x46, 0xfc, 0xd3, 0x20, 0x63, 0x89, 0x54, 0xf0, 0xb9, 0xbe, 0xa1, 0x48, 0x1b,
-	0x5c, 0x19, 0xf4, 0x15, 0x56, 0x8d, 0xed, 0x25, 0x3b, 0x62, 0xd0, 0xf7, 0x51, 0x54, 0x64, 0x55,
-	0xfe, 0x64, 0x56, 0x9b, 0xe0, 0x5e, 0x06, 0xfd, 0x59, 0xf9, 0x24, 0x58, 0x63, 0x26, 0x1f, 0x3c,
-	0x53, 0x0a, 0xcd, 0xb3, 0x54, 0x46, 0x58, 0x1b, 0xd2, 0x67, 0xb7, 0xa8, 0xd3, 0xe3, 0x21, 0x33,
-	0xd5, 0xa1, 0xce, 0xf4, 0x57, 0x67, 0x42, 0x49, 0x90, 0xd7, 0x50, 0x1d, 0x04, 0xe9, 0x71, 0x24,
-	0xa4, 0x81, 0x68, 0xdd, 0x4a, 0xc6, 0xd6, 0xdc, 0x3a, 0xd1, 0x6a, 0x47, 0x89, 0xcc, 0x46, 0x7e,
-	0x6e, 0xe4, 0xed, 0x40, 0xd3, 0x16, 0x90, 0xa7, 0xe0, 0xde, 0xb0, 0x91, 0x89, 0x89, 0x47, 0x2c,
-	0xe7, 0xbb, 0x20, 0x1e, 0x8e, 0x9b, 0x52, 0x11, 0x3b, 0xa5, 0x57, 0x0e, 0x6d, 0x03, 0xe8, 0x08,
-	0x07, 0x08, 0xf9, 0xac, 0x74, 0x3b, 0x50, 0x35, 0x39, 0xcc, 0x12, 0xcf, 0x42, 0xa1, 0x08, 0xe7,
-	0x5a, 0xe1, 0x10, 0x9b, 0xbc, 0x6f, 0xf6, 0x47, 0x52, 0x59, 0x86, 0x81, 0x0c, 0x94, 0xb7, 0xa6,
-	0xaf, 0xce, 0xf4, 0x6f, 0x07, 0x1a, 0x47, 0x1f, 0x7b, 0x2c, 0x3e, 0xe6, 0x7d, 0xc4, 0x6f, 0x05,
-	0x2a, 0x27, 0x3c, 0x1c, 0xc6, 0x79, 0x4c, 0x43, 0xa1, 0xed, 0x01, 0x4f, 0xc2, 0x3c, 0x2a, 0x9e,
-	0xb1, 0xef, 0x0f, 0x32, 0x16, 0x48, 0xb6, 0x3f, 0x32, 0x81, 0xc7, 0x34, 0xd6, 0xb5, 0x3e, 0x5f,
-	0x46, 0x03, 0x66, 0x5a, 0xc8, 0xe2, 0x60, 0xf7, 0x1c, 0x07, 0x42, 0xbe, 0x4b, 0x43, 0x6d, 0x6f,
-	0xba, 0xc7, 0xe6, 0x91, 0xef, 0x60, 0xa9, 0xa0, 0x95, 0x1f, 0xdd, 0x40, 0xf7, 0xb8, 0xa4, 0x05,
-	0xd5, 0x43, 0x16, 0xbf, 0x8d, 0x83, 0xbe, 0x69, 0xa0, 0x9c, 0xa4, 0xdf, 0xda, 0x97, 0x53, 0xe3,
-	0xef, 0x42, 0x8f, 0x3f, 0x5d, 0x54, 0x86, 0xc2, 0x61, 0x34, 0x9e, 0x00, 0x08, 0xc2, 0x32, 0x94,
-	0x11, 0x56, 0xdd, 0x40, 0x75, 0x5f, 0x13, 0xf4, 0x2b, 0xa8, 0xe3, 0x27, 0x3f, 0xfb, 0xd0, 0x4d,
-	0x24, 0x7e, 0xf2, 0x28, 0xd4, 0x0a, 0xae, 0x8f, 0x47, 0x55, 0x65, 0x96, 0x97, 0x4f, 0x54, 0x99,
-	0xad, 0xf9, 0x65, 0xaa, 0xcc, 0xb5, 0xab, 0x8c, 0x02, 0x1c, 0x44, 0x72, 0x34, 0x7d, 0x1f, 0xa7,
-	0xb8, 0xcf, 0x2f, 0x8e, 0xa5, 0x24, 0xc8, 0xee, 0xfd, 0x74, 0xa9, 0x95, 0x6e, 0xa1, 0xf7, 0x1f,
-	0x24, 0xbb, 0x06, 0x35, 0xac, 0x4f, 0x95, 0xea, 0x53, 0x70, 0x33, 0x76, 0x6b, 0x4a, 0x14, 0x8f,
-	0xf4, 0x1b, 0xa8, 0x1b, 0xa9, 0x48, 0xb1, 0x0c, 0x33, 0x26, 0xd2, 0xbc, 0x84, 0xf1, 0x4c, 0x77,
-	0x61, 0xb1, 0xc3, 0xe4, 0x91, 0x5e, 0x56, 0x78, 0x93, 0x55, 0xa8, 0xe2, 0x6e, 0xba, 0x1a, 0xaf,
-	0xc9, 0xca, 0x50, 0x2f, 0x09, 0xb4, 0xe6, 0xf1, 0xb8, 0x75, 0xf0, 0x4c, 0xdf, 0x4c, 0x5a, 0xab,
-	0x0e, 0x18, 0xf0, 0xf7, 0x51, 0xd1, 0x01, 0x9a, 0xb2, 0xbd, 0x96, 0x6c, 0xaf, 0xf4, 0x47, 0x58,
-	0xd3, 0x1e, 0xd4, 0xcc, 0xbe, 0xe8, 0x5d, 0x9f, 0xb3, 0x6c, 0x7f, 0xa4, 0xf7, 0x12, 0x3a, 0x9c,
-	0x97, 0x0e, 0x3d, 0x7d, 0xd0, 0x50, 0x90, 0x2d, 0xa8, 0x08, 0x55, 0x26, 0xe6, 0x83, 0xac, 0xd8,
-	0x53, 0xca, 0x98, 0x70, 0x1e, 0xfb, 0x46, 0x8b, 0x1e, 0x43, 0xc3, 0x62, 0x3f, 0x66, 0x7c, 0x92,
-	0x17, 0x50, 0xe3, 0x68, 0x82, 0xc9, 0xe9, 0x81, 0x5e, 0xe5, 0x7a, 0xf3, 0xd0, 0x3d, 0x78, 0xa2,
-	0xb3, 0x33, 0x51, 0xfe, 0x45, 0x42, 0x1b, 0xb9, 0x8b, 0xbd, 0x9e, 0x8c, 0xee, 0x14, 0xba, 0xcf,
-	0x95, 0x8b, 0x1c, 0x8b, 0x05, 0xbf, 0x2c, 0x7a, 0xd7, 0xdd, 0x90, 0xee, 0xde, 0xd7, 0xc4, 0x2d,
-	0x56, 0x09, 0x14, 0x61, 0x82, 0x3d, 0xb3, 0x82, 0x19, 0x2d, 0xa3, 0x40, 0x5f, 0x43, 0x45, 0x73,
-	0xc8, 0xff, 0xa1, 0xae, 0x79, 0x57, 0xe3, 0xab, 0xd7, 0x34, 0xa3, 0x1b, 0xe2, 0x87, 0x18, 0x04,
-	0x57, 0x16, 0x06, 0x95, 0x41, 0x80, 0x8f, 0x14, 0xda, 0x85, 0x67, 0x87, 0x81, 0x0c, 0xce, 0x59,
-	0x36, 0x88, 0x84, 0x88, 0x38, 0xbe, 0x4a, 0xd0, 0x55, 0x36, 0x8c, 0xd9, 0x95, 0x35, 0x80, 0x6b,
-	0xc8, 0x50, 0x73, 0x7b, 0x6e, 0x31, 0xfc, 0xe1, 0x4c, 0xfb, 0x12, 0xe4, 0xe0, 0x7e, 0x6f, 0x6d,
-	0x5a, 0x97, 0x99, 0x52, 0xff, 0xf2, 0x5b, 0x67, 0xfb, 0xb7, 0x1a, 0x3e, 0x10, 0x4c, 0x44, 0xb2,
-	0x03, 0xd5, 0x0e, 0x93, 0x58, 0x68, 0xc4, 0xfe, 0x84, 0xd6, 0xe3, 0xd4, 0x5b, 0x9d, 0xe2, 0x9b,
-	0x07, 0xd8, 0x4f, 0x00, 0xe7, 0x41, 0x26, 0x98, 0x7a, 0x96, 0x11, 0x5b, 0xcd, 0x7e, 0xcf, 0x79,
-	0xad, 0x69, 0x81, 0x71, 0xf0, 0x0a, 0x96, 0xf4, 0xa7, 0xc6, 0x99, 0x82, 0x9b, 0x9f, 0x3c, 0xb5,
-	0x74, 0xd5, 0x73, 0xc6, 0x5b, 0x9e, 0xf1, 0x38, 0x10, 0x64, 0x0f, 0x16, 0x8f, 0x79, 0x10, 0x8e,
-	0x17, 0xf4, 0x44, 0x74, 0xfb, 0x15, 0xe0, 0xcd, 0x11, 0x08, 0xf2, 0x06, 0x9a, 0x1d, 0x26, 0x8b,
-	0xe7, 0xde, 0xea, 0xec, 0x91, 0x3c, 0xe9, 0x61, 0x62, 0xaa, 0xef, 0x00, 0x74, 0x98, 0x34, 0xf3,
-	0x90, 0x3c, 0x9f, 0x35, 0x23, 0x6f, 0xbd, 0x99, 0x6c, 0xdc, 0x08, 0xcd, 0x73, 0x2e, 0x64, 0xbe,
-	0x92, 0x26, 0xc0, 0xb7, 0x96, 0xb0, 0x37, 0x9b, 0x8f, 0x23, 0xda, 0x74, 0x49, 0x01, 0xc1, 0xf3,
-	0xa9, 0x9b, 0x62, 0x7d, 0x7a, 0x64, 0x1a, 0x00, 0x72, 0x06, 0xcf, 0x3a, 0x4c, 0x4e, 0x56, 0x1b,
-	0x59, 0x7b, 0xa0, 0x10, 0x6f, 0xbd, 0x87, 0xa4, 0x82, 0x1c, 0x82, 0xa7, 0xd3, 0x39, 0xb9, 0x91,
-	0xa7, 0x4c, 0xfe, 0xcc, 0xb3, 0x9b, 0x43, 0x26, 0x83, 0x28, 0xfe, 0xac, 0xaf, 0x3a, 0x80, 0x17,
-	0x73, 0xa7, 0x20, 0xf9, 0xde, 0x32, 0x79, 0x68, 0xc8, 0x7a, 0x8f, 0x54, 0xc4, 0x0a, 0x80, 0x62,
-	0xde, 0x93, 0xd6, 0x94, 0x99, 0x59, 0x03, 0xde, 0x3c, 0x09, 0x7e, 0x85, 0xa6, 0x3d, 0x18, 0x67,
-	0x5c, 0xd4, 0x9b, 0xb2, 0x2d, 0x66, 0xe8, 0xdb, 0xdc, 0xda, 0x4c, 0xac, 0x69, 0xdd, 0xf1, 0xb0,
-	0xf4, 0xe6, 0xcb, 0x30, 0x0b, 0x32, 0x79, 0xcf, 0xcf, 0x01, 0xfd, 0x7d, 0x45, 0xfd, 0x9c, 0xbe,
-	0xfc, 0x27, 0x00, 0x00, 0xff, 0xff, 0x7b, 0x28, 0xd9, 0x8c, 0xaf, 0x0e, 0x00, 0x00,
+	// 1532 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4b, 0x6f, 0x1b, 0xb7,
+	0x13, 0x87, 0x2c, 0xeb, 0x35, 0x92, 0x5f, 0x8c, 0xed, 0x6c, 0xf6, 0xef, 0x7f, 0x2b, 0x10, 0x69,
+	0xeb, 0x5c, 0x7c, 0x48, 0x80, 0x36, 0x30, 0x82, 0x34, 0x7e, 0x45, 0x10, 0x60, 0xd9, 0xea, 0xca,
+	0x41, 0xd1, 0x93, 0xb1, 0xd1, 0x32, 0xf2, 0x56, 0xab, 0xa5, 0xbc, 0xa4, 0xd2, 0xe8, 0x0b, 0xf4,
+	0xd0, 0x6b, 0x7b, 0xed, 0x47, 0xe9, 0xb7, 0xe8, 0xad, 0xdf, 0xa5, 0x28, 0x86, 0xe4, 0xae, 0xa8,
+	0x97, 0x93, 0x14, 0xcd, 0x8d, 0xf3, 0x9b, 0x07, 0x87, 0xb3, 0xf3, 0x92, 0x60, 0x43, 0x26, 0x7e,
+	0x2c, 0xde, 0xf0, 0x64, 0x70, 0x30, 0x4c, 0xb8, 0xe4, 0xa4, 0x92, 0x01, 0xf4, 0x09, 0x54, 0x5f,
+	0x09, 0x96, 0x78, 0xec, 0x76, 0xc4, 0x84, 0x24, 0xeb, 0xb0, 0x12, 0x06, 0x4e, 0xae, 0x9e, 0xdb,
+	0xaf, 0x78, 0x2b, 0x61, 0x40, 0xb6, 0xa1, 0x30, 0xbc, 0xe1, 0x31, 0x73, 0x56, 0x14, 0xa4, 0x09,
+	0xfa, 0x67, 0x0e, 0x6a, 0x5a, 0x4b, 0x0c, 0x79, 0x2c, 0xd8, 0x87, 0xa9, 0x21, 0x9a, 0xf0, 0x88,
+	0x09, 0x27, 0xaf, 0x51, 0x45, 0x90, 0x5d, 0x28, 0x0a, 0xe9, 0xcb, 0x91, 0x70, 0x56, 0xeb, 0xb9,
+	0xfd, 0xbc, 0x67, 0x28, 0x52, 0x87, 0x2a, 0x4b, 0x86, 0x1e, 0x8f, 0xd8, 0xd5, 0x78, 0xc8, 0x9c,
+	0x82, 0x62, 0xda, 0x10, 0x71, 0xa1, 0x3c, 0x12, 0x2c, 0xb9, 0xf0, 0x07, 0xcc, 0x29, 0x2a, 0x93,
+	0x19, 0x8d, 0xbc, 0x6e, 0x28, 0xc7, 0x8a, 0x57, 0xd2, 0xbc, 0x94, 0xc6, 0x1b, 0x7b, 0x2c, 0x0e,
+	0x58, 0xe2, 0x94, 0xf5, 0x8d, 0x9a, 0xa2, 0x0f, 0xa1, 0x76, 0xc5, 0xfb, 0x2c, 0x4e, 0x83, 0xb1,
+	0x0d, 0x05, 0x89, 0xb4, 0x79, 0x98, 0x26, 0xe8, 0xef, 0x2b, 0xb0, 0x66, 0xc4, 0xcc, 0xeb, 0x77,
+	0xa1, 0x88, 0xd1, 0x68, 0xa6, 0x11, 0x30, 0x14, 0xbe, 0x40, 0x45, 0x89, 0x47, 0xac, 0x19, 0x08,
+	0x13, 0x0b, 0x1b, 0x22, 0x0f, 0x61, 0x0d, 0xc9, 0x4e, 0xf7, 0x86, 0xf3, 0x08, 0x65, 0x74, 0x64,
+	0xa6, 0x41, 0xb2, 0x0f, 0x1b, 0x08, 0xb4, 0x13, 0xfe, 0x36, 0x8c, 0xbb, 0xca, 0xd6, 0xaa, 0x92,
+	0x9b, 0x85, 0x09, 0xd5, 0xdf, 0xe5, 0x32, 0xe9, 0xf9, 0x31, 0x8a, 0x15, 0x94, 0xd8, 0x14, 0x86,
+	0x5e, 0x75, 0xc6, 0x22, 0xb5, 0x6e, 0x02, 0x67, 0x43, 0xe4, 0x33, 0x80, 0xce, 0x58, 0x18, 0x05,
+	0x13, 0x3d, 0x0b, 0x21, 0x7b, 0x50, 0x51, 0x17, 0xab, 0x2f, 0x5c, 0x56, 0xec, 0x09, 0x40, 0x4b,
+	0x50, 0x38, 0x1b, 0x0c, 0xe5, 0x98, 0x7e, 0x0d, 0x95, 0xab, 0x84, 0xb1, 0x0b, 0x1e, 0x30, 0x41,
+	0x1e, 0x41, 0x21, 0xc6, 0x83, 0x93, 0xab, 0xe7, 0xf7, 0xab, 0x8f, 0xef, 0x1d, 0x4c, 0x72, 0x32,
+	0x15, 0xf2, 0xb4, 0x04, 0xfd, 0x35, 0x07, 0xe5, 0x14, 0xb3, 0x32, 0x2b, 0xaf, 0x32, 0x8b, 0xc0,
+	0xaa, 0x64, 0xef, 0xa4, 0x09, 0xa6, 0x3a, 0x63, 0xfc, 0x87, 0x7e, 0xc2, 0x62, 0xa9, 0xc2, 0x97,
+	0xf7, 0x0c, 0x45, 0xea, 0x90, 0x97, 0x7e, 0x4f, 0xc5, 0xaa, 0xfa, 0x78, 0xdd, 0xbe, 0xd1, 0xef,
+	0x79, 0xc8, 0x9a, 0x78, 0x55, 0x78, 0xaf, 0x57, 0x8f, 0x20, 0x7f, 0xe5, 0xf7, 0x16, 0xf9, 0x13,
+	0x63, 0x8e, 0x19, 0x7f, 0xf0, 0x4c, 0x29, 0xd4, 0x2e, 0x87, 0x32, 0xc4, 0xdc, 0x90, 0x1e, 0xbb,
+	0x45, 0x99, 0x2e, 0x0f, 0x98, 0xc9, 0x0e, 0x75, 0xa6, 0xbf, 0xe4, 0xa6, 0x84, 0x04, 0x79, 0x0e,
+	0xa5, 0x81, 0x3f, 0x3c, 0x0f, 0x85, 0x34, 0x21, 0x7a, 0x68, 0x39, 0x63, 0x4b, 0x1e, 0xb4, 0xb4,
+	0xd8, 0x59, 0x2c, 0x93, 0xb1, 0x97, 0x2a, 0xb9, 0x87, 0x50, 0xb3, 0x19, 0x64, 0x13, 0xf2, 0x7d,
+	0x36, 0x36, 0x77, 0xe2, 0x11, 0xd3, 0xf9, 0xad, 0x1f, 0x8d, 0xb2, 0xa2, 0x54, 0xc4, 0xe1, 0xca,
+	0xd3, 0x1c, 0xad, 0x03, 0xe8, 0x1b, 0x4e, 0x30, 0xe4, 0x8b, 0xdc, 0x6d, 0x40, 0xc9, 0xf8, 0xb0,
+	0x88, 0xbd, 0x28, 0x0a, 0x93, 0xeb, 0xf2, 0xd6, 0x75, 0x18, 0x9b, 0xb4, 0x6e, 0x8e, 0xc7, 0x52,
+	0x69, 0x06, 0xbe, 0xf4, 0x95, 0xb5, 0x9a, 0xa7, 0xce, 0xf4, 0xaf, 0x1c, 0x54, 0xcf, 0xde, 0x75,
+	0x59, 0x74, 0xce, 0x7b, 0x18, 0xbf, 0x5d, 0x28, 0xb6, 0x78, 0x30, 0x8a, 0xd2, 0x3b, 0x0d, 0x85,
+	0xba, 0x27, 0x3c, 0x0e, 0xd2, 0x5b, 0xf1, 0x8c, 0x75, 0x7f, 0x92, 0x30, 0x5f, 0xb2, 0xe3, 0xb1,
+	0xb9, 0x38, 0xa3, 0x31, 0xaf, 0xf5, 0xf9, 0x2a, 0x1c, 0x30, 0x53, 0x42, 0x16, 0x82, 0xd5, 0x73,
+	0xee, 0x0b, 0xf9, 0x6a, 0x18, 0x68, 0x7d, 0x53, 0x3d, 0x36, 0x46, 0xbe, 0x84, 0xf5, 0x09, 0xad,
+	0xec, 0xe8, 0x02, 0x9a, 0x41, 0x89, 0x03, 0xa5, 0x53, 0x16, 0xbd, 0x8c, 0xfc, 0x9e, 0x29, 0xa0,
+	0x94, 0xa4, 0x5f, 0xd8, 0x8f, 0x53, 0xed, 0xaf, 0xa3, 0xdb, 0x9f, 0x4e, 0x2a, 0x43, 0x61, 0x33,
+	0xca, 0x3a, 0x00, 0x06, 0x61, 0x1b, 0x0a, 0x18, 0x56, 0x5d, 0x40, 0x15, 0x4f, 0x13, 0xf4, 0xff,
+	0x50, 0xc1, 0x4f, 0x7e, 0xf9, 0xa6, 0x19, 0x4b, 0xfc, 0xe4, 0x61, 0xa0, 0x05, 0xf2, 0x1e, 0x1e,
+	0x55, 0x96, 0x59, 0x56, 0xde, 0x93, 0x65, 0xb6, 0xe4, 0x7f, 0x93, 0x65, 0x79, 0x3b, 0xcb, 0x28,
+	0xc0, 0x49, 0x28, 0xc7, 0xf3, 0xef, 0xc9, 0x4d, 0xde, 0xf3, 0x73, 0xce, 0x12, 0x12, 0xe4, 0xd9,
+	0xac, 0xbb, 0xd4, 0x72, 0x77, 0x22, 0xf7, 0x09, 0x9c, 0xdd, 0x83, 0x32, 0xe6, 0xa7, 0x72, 0x75,
+	0x13, 0xf2, 0x09, 0xbb, 0x35, 0x29, 0x8a, 0x47, 0xfa, 0x39, 0x54, 0x0c, 0x57, 0x0c, 0x31, 0x0d,
+	0x13, 0x26, 0x86, 0x69, 0x0a, 0xe3, 0x99, 0x3e, 0x83, 0xb5, 0x06, 0x93, 0x67, 0x7a, 0x58, 0xe1,
+	0x4b, 0xee, 0x43, 0x09, 0x67, 0xd3, 0x75, 0x36, 0x26, 0x8b, 0x23, 0x3d, 0x24, 0x50, 0x9b, 0x47,
+	0x59, 0xe9, 0xe0, 0x99, 0xbe, 0x98, 0xd6, 0x56, 0x15, 0x30, 0xe0, 0xaf, 0xc3, 0x49, 0x05, 0x68,
+	0xca, 0xb6, 0xba, 0x62, 0x5b, 0xa5, 0xdf, 0xc0, 0x9e, 0xb6, 0xa0, 0x7a, 0x76, 0xa7, 0x7b, 0xd3,
+	0x66, 0xc9, 0xf1, 0x58, 0xcf, 0x25, 0x34, 0xb8, 0xcc, 0x1d, 0x7a, 0x71, 0xa7, 0xa2, 0x20, 0x07,
+	0x50, 0x14, 0x2a, 0x4d, 0xcc, 0x07, 0xd9, 0xb5, 0xbb, 0x94, 0x51, 0xe1, 0x3c, 0xf2, 0x8c, 0x14,
+	0x3d, 0x87, 0xaa, 0x05, 0x7f, 0x48, 0xfb, 0x24, 0x0f, 0xa0, 0xcc, 0x51, 0x05, 0x9d, 0xd3, 0x0d,
+	0xbd, 0xc4, 0xf5, 0xe4, 0xa1, 0x47, 0xb0, 0xa1, 0xbd, 0x33, 0xb7, 0xfc, 0x0b, 0x87, 0xf6, 0x53,
+	0x13, 0x47, 0x5d, 0x19, 0xbe, 0x55, 0xd1, 0xdd, 0x51, 0x26, 0xd2, 0x58, 0xac, 0x7a, 0x05, 0xd1,
+	0xbd, 0x69, 0x06, 0xf4, 0xd9, 0xac, 0x24, 0x4e, 0xb1, 0xa2, 0xaf, 0x08, 0x73, 0xd9, 0x96, 0x75,
+	0x99, 0x91, 0x32, 0x02, 0xf4, 0x39, 0x14, 0x35, 0x42, 0xfe, 0x07, 0x15, 0x8d, 0x5d, 0x67, 0x4f,
+	0x2f, 0x6b, 0xa0, 0x19, 0xe0, 0x87, 0x18, 0xf8, 0xd7, 0x56, 0x0c, 0x8a, 0x03, 0x1f, 0x97, 0x14,
+	0xda, 0x84, 0xad, 0x53, 0x5f, 0xfa, 0x6d, 0x96, 0x0c, 0x42, 0x21, 0x42, 0x8e, 0x5b, 0x09, 0x9a,
+	0x4a, 0x46, 0x11, 0xbb, 0xb6, 0x1a, 0x70, 0x19, 0x01, 0xd5, 0xb7, 0x97, 0x26, 0xc3, 0x6f, 0xb9,
+	0x79, 0x5b, 0x82, 0x9c, 0xcc, 0xd6, 0xd6, 0x23, 0xeb, 0x31, 0x73, 0xe2, 0x9f, 0x60, 0xea, 0xfc,
+	0xbd, 0x0a, 0xc5, 0x56, 0x5f, 0x4d, 0xc8, 0x75, 0x58, 0x69, 0x66, 0x69, 0xa1, 0x8b, 0xa2, 0xd5,
+	0x6f, 0x66, 0x9d, 0x1d, 0xcf, 0xd8, 0x79, 0xdb, 0x7e, 0x22, 0xb1, 0xbb, 0x9a, 0x6d, 0x4b, 0x27,
+	0xc7, 0x0c, 0x6a, 0x6d, 0x63, 0x66, 0x9f, 0x34, 0xb8, 0x03, 0xa5, 0x8e, 0x1c, 0xa9, 0x85, 0x50,
+	0x37, 0xf6, 0x94, 0xc4, 0x99, 0x71, 0xd4, 0x63, 0x8d, 0x84, 0x8f, 0x86, 0xaa, 0x9b, 0xe7, 0xbd,
+	0x8c, 0xc6, 0x0d, 0xad, 0x23, 0x47, 0xe7, 0x61, 0xdc, 0x6f, 0xb3, 0x44, 0xf0, 0xd8, 0x74, 0xf3,
+	0x69, 0x10, 0x2d, 0x74, 0xe4, 0xc8, 0x5e, 0x88, 0x32, 0x1a, 0x03, 0xd0, 0xc1, 0x7c, 0x72, 0x2a,
+	0xba, 0xc7, 0x28, 0x02, 0xbd, 0x39, 0x0a, 0x82, 0x84, 0x09, 0xe1, 0x80, 0xf6, 0xc6, 0x90, 0x33,
+	0x53, 0xaa, 0x3a, 0x37, 0xa5, 0xac, 0xc9, 0x52, 0xd3, 0xd5, 0x61, 0x48, 0xa5, 0x79, 0xc3, 0xba,
+	0x7d, 0x9c, 0x20, 0xcc, 0x59, 0x53, 0x4c, 0x0b, 0xc1, 0xbd, 0x4d, 0x51, 0xca, 0xf0, 0xba, 0xde,
+	0xdb, 0x32, 0x00, 0xed, 0x2a, 0xe2, 0x78, 0xec, 0x6c, 0x68, 0x8f, 0x0c, 0x89, 0xfb, 0xe7, 0x05,
+	0x93, 0x3f, 0xf1, 0xa4, 0x7f, 0xca, 0xa4, 0x1f, 0xe2, 0xd6, 0xb8, 0xa9, 0x8c, 0xcf, 0xc2, 0x2a,
+	0x92, 0x26, 0xb3, 0x9d, 0x2d, 0x13, 0xc9, 0x34, 0xd3, 0x71, 0x32, 0xfb, 0x51, 0xa4, 0x96, 0x79,
+	0xa2, 0x79, 0x29, 0xad, 0x26, 0xbc, 0xaf, 0x38, 0xf7, 0xf4, 0x37, 0xd3, 0x14, 0xfa, 0xf4, 0xdd,
+	0xc8, 0xe7, 0x3f, 0xfc, 0x18, 0x3a, 0xdb, 0xfa, 0xad, 0x86, 0xc4, 0xef, 0xd2, 0xea, 0x4b, 0x65,
+	0x5c, 0x8d, 0x01, 0x67, 0x47, 0xf1, 0xa7, 0x41, 0x7c, 0xf1, 0x39, 0xf7, 0x03, 0x1d, 0xff, 0x5d,
+	0x25, 0x31, 0x01, 0x68, 0xdd, 0xe4, 0xdf, 0xd2, 0x21, 0xfc, 0xf8, 0x8f, 0x32, 0xee, 0xb0, 0xa6,
+	0x28, 0xc8, 0x21, 0x94, 0x1a, 0x4c, 0x62, 0x3a, 0x11, 0xbb, 0xcb, 0x58, 0xbf, 0x9f, 0xdc, 0xfb,
+	0x73, 0xb8, 0xf9, 0x8d, 0xf0, 0x2d, 0x40, 0xdb, 0x4f, 0x04, 0x53, 0xbf, 0x1c, 0x88, 0x2d, 0x66,
+	0xff, 0xe4, 0x70, 0x9d, 0x79, 0x86, 0x31, 0xf0, 0x14, 0xd6, 0x75, 0x37, 0xc2, 0xb1, 0x87, 0xcb,
+	0x29, 0xd9, 0xb4, 0x64, 0xd5, 0xc6, 0xed, 0x6e, 0x2f, 0xd8, 0x5f, 0x55, 0x87, 0x3c, 0x0a, 0x82,
+	0x56, 0x5f, 0x12, 0xbb, 0x5d, 0xe9, 0xca, 0x73, 0xe7, 0x20, 0x41, 0x8e, 0x60, 0x0d, 0x63, 0x94,
+	0xed, 0x9c, 0x53, 0xde, 0xda, 0x8b, 0xad, 0xbb, 0x84, 0x21, 0xc8, 0x0b, 0xa8, 0x35, 0x98, 0x9c,
+	0xfc, 0x82, 0xb9, 0xbf, 0x78, 0xcb, 0x98, 0xb6, 0x30, 0xb5, 0xa8, 0x1c, 0x02, 0x34, 0x98, 0x34,
+	0x23, 0x9e, 0xec, 0x2c, 0x1a, 0xfb, 0xb7, 0xee, 0x42, 0x18, 0x97, 0x9c, 0x5a, 0x9b, 0x0b, 0x99,
+	0x6e, 0x59, 0x53, 0x1f, 0xcb, 0xda, 0x2b, 0xdd, 0xc5, 0x38, 0x6e, 0x1d, 0xa6, 0xf1, 0x4f, 0x42,
+	0xb0, 0x33, 0xf7, 0x52, 0x6c, 0xb9, 0x2e, 0x99, 0x0f, 0x00, 0xb9, 0x84, 0xad, 0x06, 0x93, 0xd3,
+	0x0d, 0x94, 0xec, 0xdd, 0xd1, 0x5b, 0x6f, 0xdd, 0xbb, 0xb8, 0x82, 0x9c, 0x82, 0xab, 0xdd, 0x69,
+	0xf5, 0xe5, 0x05, 0x93, 0xdf, 0x67, 0x05, 0xf7, 0x51, 0x59, 0x30, 0x80, 0x07, 0x4b, 0x07, 0x3b,
+	0xf9, 0xca, 0x52, 0xb9, 0x6b, 0x6f, 0x70, 0x3f, 0x50, 0x10, 0x33, 0x00, 0x26, 0x2b, 0x0c, 0x71,
+	0xe6, 0xd4, 0xcc, 0x66, 0xe3, 0x2e, 0xe3, 0xe0, 0x57, 0xa8, 0xd9, 0xb3, 0x7e, 0xc1, 0x43, 0xdd,
+	0x39, 0xdd, 0xc9, 0x5a, 0xf0, 0x32, 0xd5, 0x36, 0x43, 0x78, 0x5e, 0x36, 0x9b, 0xff, 0xee, 0x72,
+	0x1e, 0x7a, 0x41, 0xa6, 0xdf, 0xf9, 0x31, 0x41, 0x7f, 0x5d, 0x54, 0xff, 0xb7, 0x3c, 0xf9, 0x27,
+	0x00, 0x00, 0xff, 0xff, 0x49, 0x1d, 0x86, 0xf0, 0x82, 0x11, 0x00, 0x00,
 }
 }
 
 
 // Reference imports to suppress errors if they are not otherwise used.
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1716,6 +1981,7 @@ type TransformClient interface {
 	ParseToken(ctx context.Context, in *TokenRequest, opts ...grpc.CallOption) (*TokenResponse, error)
 	ParseToken(ctx context.Context, in *TokenRequest, opts ...grpc.CallOption) (*TokenResponse, error)
 	//获取erp 省、城市树
 	//获取erp 省、城市树
 	GetErpCityTree(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TreeNodes, error)
 	GetErpCityTree(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TreeNodes, error)
+	AddMkt(ctx context.Context, in *MktReq, opts ...grpc.CallOption) (*MktRes, error)
 	//获取erp  字典
 	//获取erp  字典
 	LoadOptionset(ctx context.Context, in *OptionsetReq, opts ...grpc.CallOption) (*OptionsetRes, error)
 	LoadOptionset(ctx context.Context, in *OptionsetReq, opts ...grpc.CallOption) (*OptionsetRes, error)
 	GetSchoolIds(ctx context.Context, in *SchoolIdsReq, opts ...grpc.CallOption) (*SchoolIdsRes, error)
 	GetSchoolIds(ctx context.Context, in *SchoolIdsReq, opts ...grpc.CallOption) (*SchoolIdsRes, error)
@@ -1773,6 +2039,15 @@ func (c *transformClient) GetErpCityTree(ctx context.Context, in *Empty, opts ..
 	return out, nil
 	return out, nil
 }
 }
 
 
+func (c *transformClient) AddMkt(ctx context.Context, in *MktReq, opts ...grpc.CallOption) (*MktRes, error) {
+	out := new(MktRes)
+	err := c.cc.Invoke(ctx, "/transform.Transform/AddMkt", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *transformClient) LoadOptionset(ctx context.Context, in *OptionsetReq, opts ...grpc.CallOption) (*OptionsetRes, error) {
 func (c *transformClient) LoadOptionset(ctx context.Context, in *OptionsetReq, opts ...grpc.CallOption) (*OptionsetRes, error) {
 	out := new(OptionsetRes)
 	out := new(OptionsetRes)
 	err := c.cc.Invoke(ctx, "/transform.Transform/LoadOptionset", in, out, opts...)
 	err := c.cc.Invoke(ctx, "/transform.Transform/LoadOptionset", in, out, opts...)
@@ -1887,6 +2162,7 @@ type TransformServer interface {
 	ParseToken(context.Context, *TokenRequest) (*TokenResponse, error)
 	ParseToken(context.Context, *TokenRequest) (*TokenResponse, error)
 	//获取erp 省、城市树
 	//获取erp 省、城市树
 	GetErpCityTree(context.Context, *Empty) (*TreeNodes, error)
 	GetErpCityTree(context.Context, *Empty) (*TreeNodes, error)
+	AddMkt(context.Context, *MktReq) (*MktRes, error)
 	//获取erp  字典
 	//获取erp  字典
 	LoadOptionset(context.Context, *OptionsetReq) (*OptionsetRes, error)
 	LoadOptionset(context.Context, *OptionsetReq) (*OptionsetRes, error)
 	GetSchoolIds(context.Context, *SchoolIdsReq) (*SchoolIdsRes, error)
 	GetSchoolIds(context.Context, *SchoolIdsReq) (*SchoolIdsRes, error)
@@ -1922,6 +2198,9 @@ func (*UnimplementedTransformServer) ParseToken(ctx context.Context, req *TokenR
 func (*UnimplementedTransformServer) GetErpCityTree(ctx context.Context, req *Empty) (*TreeNodes, error) {
 func (*UnimplementedTransformServer) GetErpCityTree(ctx context.Context, req *Empty) (*TreeNodes, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetErpCityTree not implemented")
 	return nil, status.Errorf(codes.Unimplemented, "method GetErpCityTree not implemented")
 }
 }
+func (*UnimplementedTransformServer) AddMkt(ctx context.Context, req *MktReq) (*MktRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method AddMkt not implemented")
+}
 func (*UnimplementedTransformServer) LoadOptionset(ctx context.Context, req *OptionsetReq) (*OptionsetRes, error) {
 func (*UnimplementedTransformServer) LoadOptionset(ctx context.Context, req *OptionsetReq) (*OptionsetRes, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method LoadOptionset not implemented")
 	return nil, status.Errorf(codes.Unimplemented, "method LoadOptionset not implemented")
 }
 }
@@ -2017,6 +2296,24 @@ func _Transform_GetErpCityTree_Handler(srv interface{}, ctx context.Context, dec
 	return interceptor(ctx, in, info, handler)
 	return interceptor(ctx, in, info, handler)
 }
 }
 
 
+func _Transform_AddMkt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MktReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransformServer).AddMkt(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/transform.Transform/AddMkt",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransformServer).AddMkt(ctx, req.(*MktReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _Transform_LoadOptionset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 func _Transform_LoadOptionset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(OptionsetReq)
 	in := new(OptionsetReq)
 	if err := dec(in); err != nil {
 	if err := dec(in); err != nil {
@@ -2249,6 +2546,10 @@ var _Transform_serviceDesc = grpc.ServiceDesc{
 			MethodName: "GetErpCityTree",
 			MethodName: "GetErpCityTree",
 			Handler:    _Transform_GetErpCityTree_Handler,
 			Handler:    _Transform_GetErpCityTree_Handler,
 		},
 		},
+		{
+			MethodName: "AddMkt",
+			Handler:    _Transform_AddMkt_Handler,
+		},
 		{
 		{
 			MethodName: "LoadOptionset",
 			MethodName: "LoadOptionset",
 			Handler:    _Transform_LoadOptionset_Handler,
 			Handler:    _Transform_LoadOptionset_Handler,

+ 32 - 24
transformclient/transform.go

@@ -14,45 +14,48 @@ import (
 )
 )
 
 
 type (
 type (
+	ResponseByte                 = transform.ResponseByte
+	SchoolIdsReq                 = transform.SchoolIdsReq
+	OptionsetRes                 = transform.OptionsetRes
+	ExcelLogReq                  = transform.ExcelLogReq
+	ExcelLogRes                  = transform.ExcelLogRes
 	GetErpActiveRes              = transform.GetErpActiveRes
 	GetErpActiveRes              = transform.GetErpActiveRes
-	UserResponse                 = transform.UserResponse
+	Tag                          = transform.Tag
+	ListOfInt                    = transform.ListOfInt
+	GetErpRoleReq                = transform.GetErpRoleReq
+	Active                       = transform.Active
+	MktRes                       = transform.MktRes
+	TreeNodes                    = transform.TreeNodes
+	OptionCode                   = transform.OptionCode
 	BytesResp                    = transform.BytesResp
 	BytesResp                    = transform.BytesResp
-	GetErpSchoolRes              = transform.GetErpSchoolRes
-	OptionsetRes                 = transform.OptionsetRes
-	DataPermissionReq            = transform.DataPermissionReq
-	CityIdsReq                   = transform.CityIdsReq
-	OrganSchool                  = transform.OrganSchool
-	GetErpActiveReq              = transform.GetErpActiveReq
 	DataPermissionRes            = transform.DataPermissionRes
 	DataPermissionRes            = transform.DataPermissionRes
-	Empty                        = transform.Empty
-	TreeNodes                    = transform.TreeNodes
+	UserResponse                 = transform.UserResponse
+	TokenRequest                 = transform.TokenRequest
+	UserRequest                  = transform.UserRequest
+	OptionsetReq                 = transform.OptionsetReq
 	Options                      = transform.Options
 	Options                      = transform.Options
 	CityIdsRes                   = transform.CityIdsRes
 	CityIdsRes                   = transform.CityIdsRes
-	TreeNode                     = transform.TreeNode
-	OptionsetReq                 = transform.OptionsetReq
-	ListOfInt                    = transform.ListOfInt
-	Tag                          = transform.Tag
-	ExcelLogReq                  = transform.ExcelLogReq
-	Active                       = transform.Active
-	TokenResponse                = transform.TokenResponse
-	ResponseByte                 = transform.ResponseByte
+	OrganSchool                  = transform.OrganSchool
+	GetErpActiveReq              = transform.GetErpActiveReq
+	MktReq                       = transform.MktReq
 	SchoolIdsRes                 = transform.SchoolIdsRes
 	SchoolIdsRes                 = transform.SchoolIdsRes
-	GetErpOrganSchPerByUserIdReq = transform.GetErpOrganSchPerByUserIdReq
-	OptionCode                   = transform.OptionCode
-	SchoolIdsReq                 = transform.SchoolIdsReq
-	GetErpRoleReq                = transform.GetErpRoleReq
 	BytesReq                     = transform.BytesReq
 	BytesReq                     = transform.BytesReq
 	GetErpRoleRes                = transform.GetErpRoleRes
 	GetErpRoleRes                = transform.GetErpRoleRes
 	GetErpOrganSchPerByUserIdRes = transform.GetErpOrganSchPerByUserIdRes
 	GetErpOrganSchPerByUserIdRes = transform.GetErpOrganSchPerByUserIdRes
-	UserRequest                  = transform.UserRequest
-	TokenRequest                 = transform.TokenRequest
-	ExcelLogRes                  = transform.ExcelLogRes
+	GetErpSchoolRes              = transform.GetErpSchoolRes
+	TokenResponse                = transform.TokenResponse
+	Empty                        = transform.Empty
+	TreeNode                     = transform.TreeNode
+	CityIdsReq                   = transform.CityIdsReq
+	GetErpOrganSchPerByUserIdReq = transform.GetErpOrganSchPerByUserIdReq
+	DataPermissionReq            = transform.DataPermissionReq
 
 
 	Transform interface {
 	Transform interface {
 		GetUser(ctx context.Context, in *UserRequest) (*UserResponse, error)
 		GetUser(ctx context.Context, in *UserRequest) (*UserResponse, error)
 		ParseToken(ctx context.Context, in *TokenRequest) (*TokenResponse, error)
 		ParseToken(ctx context.Context, in *TokenRequest) (*TokenResponse, error)
 		// 获取erp 省、城市树
 		// 获取erp 省、城市树
 		GetErpCityTree(ctx context.Context, in *Empty) (*TreeNodes, error)
 		GetErpCityTree(ctx context.Context, in *Empty) (*TreeNodes, error)
+		AddMkt(ctx context.Context, in *MktReq) (*MktRes, error)
 		// 获取erp  字典
 		// 获取erp  字典
 		LoadOptionset(ctx context.Context, in *OptionsetReq) (*OptionsetRes, error)
 		LoadOptionset(ctx context.Context, in *OptionsetReq) (*OptionsetRes, error)
 		GetSchoolIds(ctx context.Context, in *SchoolIdsReq) (*SchoolIdsRes, error)
 		GetSchoolIds(ctx context.Context, in *SchoolIdsReq) (*SchoolIdsRes, error)
@@ -102,6 +105,11 @@ func (m *defaultTransform) GetErpCityTree(ctx context.Context, in *Empty) (*Tree
 	return client.GetErpCityTree(ctx, in)
 	return client.GetErpCityTree(ctx, in)
 }
 }
 
 
+func (m *defaultTransform) AddMkt(ctx context.Context, in *MktReq) (*MktRes, error) {
+	client := transform.NewTransformClient(m.cli.Conn())
+	return client.AddMkt(ctx, in)
+}
+
 // 获取erp  字典
 // 获取erp  字典
 func (m *defaultTransform) LoadOptionset(ctx context.Context, in *OptionsetReq) (*OptionsetRes, error) {
 func (m *defaultTransform) LoadOptionset(ctx context.Context, in *OptionsetReq) (*OptionsetRes, error) {
 	client := transform.NewTransformClient(m.cli.Conn())
 	client := transform.NewTransformClient(m.cli.Conn())