瀏覽代碼

feat:工作桌面菜单和常用功能调整

wangshan 3 年之前
父節點
當前提交
070e71b0a3

+ 5 - 4
api/internal/logic/workdesktopclearuserinfologic.go

@@ -30,10 +30,11 @@ func NewWorkDesktopClearUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceCo
 
 func (l *WorkDesktopClearUserInfoLogic) WorkDesktopClearUserInfo(req *types.WorkDesktopClearUserInfo) (resp *types.CommonResp, err error) {
 	res, err := entity.UserCenterRpc.WorkDesktopClearUserInfo(l.ctx, &pb.WorkDesktopClearUserInfoReq{
-		UserId:   req.UserId,
-		AppId:    req.AppId,
-		Platform: req.Platform,
-		UserIds:  req.UserIds,
+		UserId:    req.UserId,
+		AppId:     req.AppId,
+		Platform:  req.Platform,
+		UserIds:   req.UserIds,
+		NewUserId: req.NewUserId,
 	})
 	return &types.CommonResp{
 		Error_code: res.ErrorCode,

+ 1 - 1
api/internal/logic/workdesktopcomprehensivelogic.go

@@ -37,8 +37,8 @@ func (l *WorkDesktopComprehensiveLogic) WorkDesktopComprehensive(req *types.Work
 		MenuIds:    req.MenuIds,
 		MenuMode:   req.MenuMode,
 		ActionMode: req.ActionMode,
+		NewUserId:  req.NewUserId,
 	})
-	logx.Info(res.ErrorMsg, "--------------------------", res.ErrorCode)
 	return &types.CommonResp{
 		Error_code: res.ErrorCode,
 		Error_msg:  res.ErrorMsg,

+ 5 - 4
api/internal/logic/workdesktopmenuinfologic.go

@@ -30,10 +30,11 @@ func NewWorkDesktopMenuInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext
 
 func (l *WorkDesktopMenuInfoLogic) WorkDesktopMenuInfo(req *types.WorkDesktopMenuInfoReq) (resp *types.CommonResp, err error) {
 	res, err := entity.UserCenterRpc.WorkDesktopMenuInfo(l.ctx, &pb.WorkDesktopMenuInfoReq{
-		AppId:    req.AppId,
-		UserId:   req.UserId,
-		Phone:    req.Phone,
-		Platform: req.Platform,
+		AppId:     req.AppId,
+		UserId:    req.UserId,
+		Phone:     req.Phone,
+		Platform:  req.Platform,
+		NewUserId: req.NewUserId,
 	})
 	return &types.CommonResp{
 		Error_code: res.ErrorCode,

+ 11 - 8
api/internal/types/types.go

@@ -221,10 +221,11 @@ type UserDelReq struct {
 }
 
 type WorkDesktopMenuInfoReq struct {
-	Platform string `json:"platform,optional"`
-	UserId   string `header:"userId"`
-	AppId    string `header:"appId"`
-	Phone    string `header:"phone,optional"`
+	Platform  string `json:"platform,optional"`
+	UserId    string `header:"userId"`
+	AppId     string `header:"appId"`
+	Phone     string `header:"phone,optional"`
+	NewUserId string `header:"newUserId"`
 }
 
 type WorkDesktopComprehensiveReq struct {
@@ -235,6 +236,7 @@ type WorkDesktopComprehensiveReq struct {
 	MenuMode   string `json:"menuMode,optional"`
 	MenuIds    string `json:"menuIds,optional"`
 	ActionMode string `path:"actionMode,options=commonlyRenew|commonlyList|menuMode"`
+	NewUserId  string `header:"newUserId"`
 }
 
 type CommonResp struct {
@@ -244,8 +246,9 @@ type CommonResp struct {
 }
 
 type WorkDesktopClearUserInfo struct {
-	Platform string `json:"platform,optional"`
-	UserId   string `header:"userId"`
-	AppId    string `header:"appId"`
-	UserIds  string `json:"userIds,optional"`
+	Platform  string `json:"platform,optional"`
+	UserId    string `header:"userId"`
+	AppId     string `header:"appId"`
+	UserIds   string `json:"userIds,optional"`
+	NewUserId string `header:"newUserId"`
 }

+ 274 - 271
api/userCenter.api

@@ -1,307 +1,310 @@
 syntax = "v1"
 
 type (
-	response {
-		Error_code int64  `json:"error_code"` //响应代码
-		Error_msg  string `json:"error_msg"`  //响应消息
-		Data       string `json:"data"`       //响应内容
-	}
-	//
-	resp {
-		Error_code int64       `json:"error_code"` //响应代码
-		Error_msg  string      `json:"error_msg"`  //响应消息
-		Data       interface{} `json:"data"`
-	}
+    response {
+        Error_code int64 `json:"error_code"` //响应代码
+        Error_msg string `json:"error_msg"`  //响应消息
+        Data string `json:"data"`            //响应内容
+    }
+        //
+    resp {
+        Error_code int64 `json:"error_code"` //响应代码
+        Error_msg string `json:"error_msg"`  //响应消息
+        Data interface{} `json:"data"`
+    }
 
-	//机构审核入参
-	examineReq {
-		EntId     int64  `json:"entId"`           //企业id
-		AuthType  string `json:"authType"`        //审核状态  2审核通过  3审核不通过
-		Reason    string `json:"reason,optional"` //不通过原因
-		AuditUser string `json:"auditUser"`       //审核人
-		ExamineId string `json:"examineId"`       //审核id 认证记录表主键id
-	}
+        //机构审核入参
+    examineReq {
+        EntId int64 `json:"entId"`                //企业id
+        AuthType string `json:"authType"`         //审核状态  2审核通过  3审核不通过
+        Reason string `json:"reason,optional"`    //不通过原因
+        AuditUser string `json:"auditUser"`       //审核人
+        ExamineId string `json:"examineId"`       //审核id 认证记录表主键id
+    }
 
-	//查看企业状态入参
-	checkEntReq {
-		EntId int64 `header:"entId"` //企业id
-	}
+        //查看企业状态入参
+    checkEntReq {
+        EntId int64 `header:"entId"` //企业id
+    }
 
-	//认证企业 入参
-	authEntReq {
-		Name             string `json:"name"`
-		CreditCode       string `json:"creditCode"`
-		AreaNumber       string `json:"areaNumber"`
-		Business         string `json:"business"`
-		OfficialLetter   string `json:"officialLetter"`
-		OrganizationType string `json:"organizationType"` //机构类型  1投标企业  2招标采购单位 3厂商 4招标代理机构 5经销商  6服务提供商  7其他
-		ComPanyType      string `json:"comPanyType"`      //机构性质    1企业   2党政机关事业单位及其他
-		AuthName         string `json:"authName"`         //联系人姓名
-		AuthPhone        string `json:"authPhone"`        //联系人手机号
-		Phone            string `header:"phone"`          //注册手机号
-		EntId            int64  `header:"entId,optional"`
-	}
+        //认证企业 入参
+    authEntReq {
+        Name string `json:"name"`
+        CreditCode string `json:"creditCode"`
+        AreaNumber string `json:"areaNumber"`
+        Business string `json:"business"`
+        OfficialLetter string `json:"officialLetter"`
+        OrganizationType string `json:"organizationType"` //机构类型  1投标企业  2招标采购单位 3厂商 4招标代理机构 5经销商  6服务提供商  7其他
+        ComPanyType string `json:"comPanyType"`           //机构性质    1企业   2党政机关事业单位及其他
+        AuthName string `json:"authName"`                 //联系人姓名
+        AuthPhone string `json:"authPhone"`               //联系人手机号
+        Phone string `header:"phone"`                     //注册手机号
+        EntId int64 `header:"entId,optional"`
+    }
 
-	//企业列表
-	entListReq {
-		Name            string `json:"name,optional"`    //企业名称
-		PageNum         string `json:"pageNum,optional"` //页码,不传默认第一页 第一页为0
-		PageSize        string `json:"pageSize,optional"`
-		CreditCode      string `json:"creditCode,optional"`
-		CreateStartTime string `json:"createStartTime,optional"`
-		CreateEndTime   string `json:"createEndTime,optional"`
-		AuthStatus      string `json:"authStatus,optional"`
-		ValidStartTime  string `json:"validStartTime,optional"`
-		ValidEndTime    string `json:"validEndTime,optional"`
-		FrozenStatus    string `json:"frozenStatus,optional"`
-		RegPhone        string `json:"regPhone,optional"`
-		AuthPhone       string `json:"authPhone,optional"`
-	}
+        //企业列表
+    entListReq {
+        Name string `json:"name,optional"`       //企业名称
+        PageNum string `json:"pageNum,optional"` //页码,不传默认第一页 第一页为0
+        PageSize string `json:"pageSize,optional"`
+        CreditCode string `json:"creditCode,optional"`
+        CreateStartTime string `json:"createStartTime,optional"`
+        CreateEndTime string `json:"createEndTime,optional"`
+        AuthStatus string `json:"authStatus,optional"`
+        ValidStartTime string `json:"validStartTime,optional"`
+        ValidEndTime string `json:"validEndTime,optional"`
+        FrozenStatus string `json:"frozenStatus,optional"`
+        RegPhone string `json:"regPhone,optional"`
+        AuthPhone string `json:"authPhone,optional"`
+    }
 
-	//企业列表出参
-	entListResp {
-		Error_code int64       `json:"error_code"` //响应代码
-		Error_msg  string      `json:"error_msg"`  //响应消息
-		Data       EntListData `json:"data"`
-	}
+        //企业列表出参
+    entListResp {
+        Error_code int64 `json:"error_code"` //响应代码
+        Error_msg string `json:"error_msg"`  //响应消息
+        Data EntListData `json:"data"`
+    }
 
-	EntListData {
-		Count    int64      `json:"count"`
-		PageSize int64      `json:"pageSize"`
-		List     []*EntList `json:"list"`
-	}
+    EntListData {
+        Count int64 `json:"count"`
+        PageSize int64 `json:"pageSize"`
+        List []*EntList `json:"list"`
+    }
 
-	EntList {
-		Id               int64  `json:"id"`
-		ComPanyType      int64  `json:"comPanyType"`      // 机构性质    1企业   2党政机关事业单位及其他
-		Name             string `json:"name"`             //机构名称
-		OrganizationType string `json:"organizationType"` //机构类型  1企业   2党政机关事业单位及其他
-		Createtime       string `json:"createTime"`       //创建时间
-		ValidTime        string `json:"validTime"`        //有效截至日期
-		AuthStatus       int64  `json:"authStatus"`       //认证状态
-		FrozenStatus     int64  `json:"frozenStatus"`     //冻结状态  1正常  0冻结
-	}
+    EntList {
+        Id int64 `json:"id"`
+        ComPanyType int64 `json:"comPanyType"`            // 机构性质    1企业   2党政机关事业单位及其他
+        Name string `json:"name"`                         //机构名称
+        OrganizationType string `json:"organizationType"` //机构类型  1企业   2党政机关事业单位及其他
+        Createtime string `json:"createTime"`             //创建时间
+        ValidTime string `json:"validTime"`               //有效截至日期
+        AuthStatus int64 `json:"authStatus"`              //认证状态
+        FrozenStatus int64 `json:"frozenStatus"`          //冻结状态  1正常  0冻结
+    }
 
-	//审核列表入参
-	ExamineListReq {
-		Name          string `json:"name,optional"`          //机构名称
-		AuthPhone     string `json:"authPhone,optional"`     //联系人手机号
-		RegPhone      string `json:"regPhone,optional"`      //注册人手机号
-		AuthType      string `json:"authType,optional"`      //审核状态 1:待审核  2:审核通过 3:审核不通过
-		AuthStartTime string `json:"authStartTime,optional"` //申请开始时间
-		AuthEndTime   string `json:"authEndTime,optional"`   //申请结束时间
-		PageNum       string `json:"pageNum,optional"`       //页码
-		PageSize      string `json:"pageSize,optional"`      //每页展示条数
-	}
+        //审核列表入参
+    ExamineListReq {
+        Name string `json:"name,optional"`                   //机构名称
+        AuthPhone string `json:"authPhone,optional"`         //联系人手机号
+        RegPhone string `json:"regPhone,optional"`           //注册人手机号
+        AuthType string `json:"authType,optional"`           //审核状态 1:待审核  2:审核通过 3:审核不通过
+        AuthStartTime string `json:"authStartTime,optional"` //申请开始时间
+        AuthEndTime string `json:"authEndTime,optional"`     //申请结束时间
+        PageNum string `json:"pageNum,optional"`             //页码
+        PageSize string `json:"pageSize,optional"`           //每页展示条数
+    }
 
-	//审核列表出参
-	ExamineListResp {
-		Error_code int64           `json:"error_code"`
-		Error_msg  string          `json:"error_msg"`
-		Data       ExamineListData `json:"data"`
-	}
+        //审核列表出参
+    ExamineListResp {
+        Error_code int64 `json:"error_code"`
+        Error_msg string `json:"error_msg"`
+        Data ExamineListData `json:"data"`
+    }
 
-	ExamineListData {
-		Count    int64          `json:"count"`
-		PageSize int64          `json:"pageSize"`
-		List     []*ExamineList `json:"list"`
-	}
+    ExamineListData {
+        Count int64 `json:"count"`
+        PageSize int64 `json:"pageSize"`
+        List []*ExamineList `json:"list"`
+    }
 
-	ExamineList {
-		Id          int64  `json:"id"`          //机构id
-		EntId       int64  `json:"entId"`       //企业id
-		ComPanyType int64  `json:"comPanyType"` // 机构性质    1企业   2党政机关事业单位及其他
-		Name        string `json:"name"`        //机构名称
-		CreditCode  string `json:"creditCode"`  //统一社会信用代码
-		AuthPhone   string `json:"authPhone"`   //联系人手机号
-		ApplyTime   string `json:"applyTime"`   //申请时间戳
-		AuthType    int64  `json:"authType"`    //审核状态 1:待审核  2:审核通过 3:审核不通过
-		RegPhone    string `json:"regPhone"`    //注册人手机号
-	}
+    ExamineList {
+        Id int64 `json:"id"`                   //机构id
+        EntId int64 `json:"entId"`             //企业id
+        ComPanyType int64 `json:"comPanyType"` // 机构性质    1企业   2党政机关事业单位及其他
+        Name string `json:"name"`              //机构名称
+        CreditCode string `json:"creditCode"`  //统一社会信用代码
+        AuthPhone string `json:"authPhone"`    //联系人手机号
+        ApplyTime string `json:"applyTime"`    //申请时间戳
+        AuthType int64 `json:"authType"`       //审核状态 1:待审核  2:审核通过 3:审核不通过
+        RegPhone string `json:"regPhone"`      //注册人手机号
+    }
 
-	//企业信息出参
-	EntInfoResp {
-		Error_code int64    `json:"error_code"`
-		Error_msg  string   `json:"error_msg"`
-		Data       *EntInfo `json:"data"`
-	}
+        //企业信息出参
+    EntInfoResp {
+        Error_code int64 `json:"error_code"`
+        Error_msg string `json:"error_msg"`
+        Data *EntInfo `json:"data"`
+    }
 
-	EntInfo {
-		Name             string `json:"name"`
-		OrganizationType string `json:"organizationType"`
-		CreditCode       string `json:"creditCode"`
-		CompanyType      int64  `json:"companyType"`
-		AreaNumber       string `json:"areaNumber"`
-		Business         string `json:"business"`
-		OfficialLetter   string `json:"officialLetter"`
-		AuthStartTime    string `json:"createTime"`
-		AuthEndTime      string `json:"validTime"`
-		ForzenStatus     int64  `json:"forzenStatus"`
-		AuthState        int64  `json:"authStatus"`
-		ContactPerson    string `json:"contactPerson"`
-		ContactPhone     string `json:"contactPhone"`
-		AuthType         int64  `json:"authType"`   //审核状态 1:待审核  2:审核通过 3:审核不通过
-		SubmitTime       string `json:"submitTime"` //提交时间 即库中的createtime
-		AuthReason       string `json:"authReason"`
-	}
+    EntInfo {
+        Name string `json:"name"`
+        OrganizationType string `json:"organizationType"`
+        CreditCode string `json:"creditCode"`
+        CompanyType int64 `json:"companyType"`
+        AreaNumber string `json:"areaNumber"`
+        Business string `json:"business"`
+        OfficialLetter string `json:"officialLetter"`
+        AuthStartTime string `json:"createTime"`
+        AuthEndTime string `json:"validTime"`
+        ForzenStatus int64 `json:"forzenStatus"`
+        AuthState int64 `json:"authStatus"`
+        ContactPerson string `json:"contactPerson"`
+        ContactPhone string `json:"contactPhone"`
+        AuthType int64 `json:"authType"`      //审核状态 1:待审核  2:审核通过 3:审核不通过
+        SubmitTime string `json:"submitTime"` //提交时间 即库中的createtime
+        AuthReason string `json:"authReason"`
+    }
 
-	//审核入参
-	ExamineInfoReq {
-		ExamineId int64 `json:"examineId"`
-	}
+        //审核入参
+    ExamineInfoReq {
+        ExamineId int64 `json:"examineId"`
+    }
 
-	//审核详情出参
-	ExamineInfoResp {
-		Error_code int64        `json:"error_code"`
-		Error_msg  string       `json:"error_msg"`
-		Data       *ExamineInfo `json:"data"`
-	}
+        //审核详情出参
+    ExamineInfoResp {
+        Error_code int64 `json:"error_code"`
+        Error_msg string `json:"error_msg"`
+        Data *ExamineInfo `json:"data"`
+    }
 
-	ExamineInfo {
-		Name             string `json:"name"`
-		OrganizationType string `json:"organizationType"`
-		CreditCode       string `json:"creditCode"`
-		CompanyType      int64  `json:"companyType"`
-		AreaNumber       string `json:"areaNumber"`
-		Business         string `json:"business"`
-		OfficialLetter   string `json:"officialLetter"`
-		AuthState        int64  `json:"authStatus"`
-		ContactPerson    string `json:"contactPerson"`
-		ContactPhone     string `json:"contactPhone"`
-		RegPhone         string `json:"regPhone"`
-		AuthTime         string `json:"authTime"`
-		AuthReason       string `json:"authReason"`
-		AuditUser        string `json:"auditUser"`
-		AuditTime        string `json:"auditTime"`
-	}
+    ExamineInfo {
+        Name string `json:"name"`
+        OrganizationType string `json:"organizationType"`
+        CreditCode string `json:"creditCode"`
+        CompanyType int64 `json:"companyType"`
+        AreaNumber string `json:"areaNumber"`
+        Business string `json:"business"`
+        OfficialLetter string `json:"officialLetter"`
+        AuthState int64 `json:"authStatus"`
+        ContactPerson string `json:"contactPerson"`
+        ContactPhone string `json:"contactPhone"`
+        RegPhone string `json:"regPhone"`
+        AuthTime string `json:"authTime"`
+        AuthReason string `json:"authReason"`
+        AuditUser string `json:"auditUser"`
+        AuditTime string `json:"auditTime"`
+    }
 
-	//冻结解冻入参
-	UpdateEntReq {
-		EntId      int64 `json:"entId"`      //企业id
-		UpdateType int64 `json:"updateType"` //1-冻结  2-解冻
-	}
+        //冻结解冻入参
+    UpdateEntReq {
+        EntId int64 `json:"entId"`           //企业id
+        UpdateType int64 `json:"updateType"` //1-冻结  2-解冻
+    }
 
-	//根据统一社会信用代码查看企业状态入参
-	GetStatusByCodeReq {
-		Code  string `json:"code"`
-		Phone string `header:"phone"`
-	}
+        //根据统一社会信用代码查看企业状态入参
+    GetStatusByCodeReq {
+        Code string `json:"code"`
+        Phone string `header:"phone"`
+    }
 
-	//根据统一社会信用代码查看企业状态出参
-	GetStatusByCodeResp {
-		Error_code int64      `json:"error_code"`
-		Error_msg  string     `json:"error_msg"`
-		Data       *GetStatus `json:"data"`
-	}
+        //根据统一社会信用代码查看企业状态出参
+    GetStatusByCodeResp {
+        Error_code int64 `json:"error_code"`
+        Error_msg string `json:"error_msg"`
+        Data *GetStatus `json:"data"`
+    }
 
-	GetStatus {
-		AuthStatus int64 `json:"authStatus"`
-		IsInEnt    bool  `json:"isInEnt"`
-	}
+    GetStatus {
+        AuthStatus int64 `json:"authStatus"`
+        IsInEnt bool `json:"isInEnt"`
+    }
 
-	UserAddReq {
-		Authorization string `header:"Authorization"`
-		Appid         string `json:"appid"`
-		Phone         string `json:"phone,optional"`
-		Nickname      string `json:"nickname,optional"`
-		Headimg       string `json:"headimg,optional"`
-		Company       string `json:"company,optional"`
-		Position      string `json:"position,optional"`
-		Password      string `json:"password,optional"`
-		SOpenid       string `json:"s_openid,optional"`
-		AOpenid       string `json:"a_openid,optional"`
-		Unionid       string `json:"unionid,optional"`
-	}
+    UserAddReq {
+        Authorization string `header:"Authorization"`
+        Appid string `json:"appid"`
+        Phone string `json:"phone,optional"`
+        Nickname string `json:"nickname,optional"`
+        Headimg string `json:"headimg,optional"`
+        Company string `json:"company,optional"`
+        Position string `json:"position,optional"`
+        Password string `json:"password,optional"`
+        SOpenid string `json:"s_openid,optional"`
+        AOpenid string `json:"a_openid,optional"`
+        Unionid string `json:"unionid,optional"`
+    }
 
-	UserUpdateReq {
-		Authorization string `header:"Authorization"`
-		Appid         string `json:"appid"`
-		Id            int64  `json:"id"`
-		Phone         string `json:"phone,optional"`
-		Nickname      string `json:"nickname,optional"`
-		Headimg       string `json:"headimg,optional"`
-		Company       string `json:"company,optional"`
-		Position      string `json:"position,optional"`
-		Password      string `json:"password,optional"`
-		SOpenid       string `json:"s_openid,optional"`
-		AOpenid       string `json:"a_openid,optional"`
-		Unionid       string `json:"unionid,optional"`
-	}
+    UserUpdateReq {
+        Authorization string `header:"Authorization"`
+        Appid string `json:"appid"`
+        Id int64 `json:"id"`
+        Phone string `json:"phone,optional"`
+        Nickname string `json:"nickname,optional"`
+        Headimg string `json:"headimg,optional"`
+        Company string `json:"company,optional"`
+        Position string `json:"position,optional"`
+        Password string `json:"password,optional"`
+        SOpenid string `json:"s_openid,optional"`
+        AOpenid string `json:"a_openid,optional"`
+        Unionid string `json:"unionid,optional"`
+    }
 
-	UserDelReq {
-		Authorization string `header:"Authorization"`
-		Id            int64  `json:"id"`
-	}
+    UserDelReq {
+        Authorization string `header:"Authorization"`
+        Id int64 `json:"id"`
+    }
 
-	//工作桌面 -- 菜单
-	WorkDesktopMenuInfoReq {
-		Platform string `json:"platform,optional"`
-		UserId   string `header:"userId"`
-		AppId    string `header:"appId"`
-		Phone    string `header:"phone,optional"`
-	}
-	//工作桌面-- 菜单模式:全部/可用选择记录
-	//工作桌面--常用功能更新
-	WorkDesktopComprehensiveReq {
-		Platform   string `json:"platform,optional"`
-		UserId     string `header:"userId"`
-		AppId      string `header:"appId"`
-		Phone      string `header:"phone,optional"`
-		MenuMode   string `json:"menuMode,optional"`
-		MenuIds    string `json:"menuIds,optional"`
-		ActionMode string `path:"actionMode,options=commonlyRenew|commonlyList|menuMode"`
-	}
-	//
-	CommonResp {
-		Error_code int64       `json:"error_code"`
-		Error_msg  string      `json:"error_msg"`
-		Data       interface{} `json:"data"`
-	}
-	//工作桌面清用户内存信息
-	WorkDesktopClearUserInfo {
-		Platform string `json:"platform,optional"`
-		UserId   string `header:"userId"`
-		AppId    string `header:"appId"`
-		UserIds  string `json:"userIds,optional"`
-	}
+        //工作桌面 -- 菜单
+    WorkDesktopMenuInfoReq {
+        Platform string `json:"platform,optional"`
+        UserId string `header:"userId"`
+        AppId string `header:"appId"`
+        Phone string `header:"phone,optional"`
+        NewUserId string `header:"newUserId"`//base_user_id<---base_user
+    }
+        //工作桌面-- 菜单模式:全部/可用选择记录
+        //工作桌面--常用功能更新
+    WorkDesktopComprehensiveReq {
+        Platform string `json:"platform,optional"`
+        UserId string `header:"userId"`
+        AppId string `header:"appId"`
+        Phone string `header:"phone,optional"`
+        MenuMode string `json:"menuMode,optional"`
+        MenuIds string `json:"menuIds,optional"`
+        ActionMode string `path:"actionMode,options=commonlyRenew|commonlyList|menuMode"`
+        NewUserId string `header:"newUserId"`
+    }
+        //
+    CommonResp {
+        Error_code int64 `json:"error_code"`
+        Error_msg string `json:"error_msg"`
+        Data interface{} `json:"data"`
+    }
+        //工作桌面清用户内存信息
+    WorkDesktopClearUserInfo {
+        Platform string `json:"platform,optional"`
+        UserId string `header:"userId"`
+        AppId string `header:"appId"`
+        UserIds string `json:"userIds,optional"`
+        NewUserId string `header:"newUserId"`
+    }
 )
 
 service userCenter-api {
-	@handler Examine
-	post /userCenter/ent/examine (examineReq) returns (resp)
-	@handler CheckEnt
-	post /userCenter/ent/check (checkEntReq) returns (resp)
-	@handler EntAuth
-	post /userCenter/ent/auth (authEntReq) returns (resp)
-	@handler EntList
-	post /userCenter/ent/list (entListReq) returns (entListResp)
-	@handler ExamineList
-	post /userCenter/ent/examineList (ExamineListReq) returns (ExamineListResp)
-	@handler EntInfo
-	post /userCenter/ent/info (checkEntReq) returns (EntInfoResp)
-	@handler ExamineInfo
-	post /userCenter/ent/examineInfo (ExamineInfoReq) returns (ExamineInfoResp)
-	@handler UpdateEnt
-	post /userCenter/ent/update (UpdateEntReq) returns (resp)
-	@handler GetStatusByCode
-	post /userCenter/ent/getStatusByCode (GetStatusByCodeReq) returns (GetStatusByCodeResp)
-	
-	@handler WorkDesktopMenuInfo
-	post /userCenter/workDesktop/menuInfo (WorkDesktopMenuInfoReq) returns (CommonResp)
-	@handler WorkDesktopComprehensive
-	post /userCenter/workDesktop/renew/:actionMode (WorkDesktopComprehensiveReq) returns (CommonResp)
-	@handler WorkDesktopClearUserInfo
-	get /userCenter/workDesktop/clearUserInfo (WorkDesktopClearUserInfo) returns (CommonResp)
+    @handler Examine
+    post /userCenter/ent/examine (examineReq) returns (resp)
+    @handler CheckEnt
+    post /userCenter/ent/check (checkEntReq) returns (resp)
+    @handler EntAuth
+    post /userCenter/ent/auth (authEntReq) returns (resp)
+    @handler EntList
+    post /userCenter/ent/list (entListReq) returns (entListResp)
+    @handler ExamineList
+    post /userCenter/ent/examineList (ExamineListReq) returns (ExamineListResp)
+    @handler EntInfo
+    post /userCenter/ent/info (checkEntReq) returns (EntInfoResp)
+    @handler ExamineInfo
+    post /userCenter/ent/examineInfo (ExamineInfoReq) returns (ExamineInfoResp)
+    @handler UpdateEnt
+    post /userCenter/ent/update (UpdateEntReq) returns (resp)
+    @handler GetStatusByCode
+    post /userCenter/ent/getStatusByCode (GetStatusByCodeReq) returns (GetStatusByCodeResp)
+
+    @handler WorkDesktopMenuInfo
+    post /userCenter/workDesktop/menuInfo (WorkDesktopMenuInfoReq) returns (CommonResp)
+    @handler WorkDesktopComprehensive
+    post /userCenter/workDesktop/renew/:actionMode (WorkDesktopComprehensiveReq) returns (CommonResp)
+    @handler WorkDesktopClearUserInfo
+    get /userCenter/workDesktop/clearUserInfo (WorkDesktopClearUserInfo) returns (CommonResp)
 }
 
 @server(
-	jwt: Auth
+    jwt: Auth
 )
 service userCenter-api {
-	@handler UserAdd
-	post /userCenter/user/add (UserAddReq) returns (resp)
-	@handler UserUpdate
-	post /userCenter/user/updateById (UserUpdateReq) returns (resp)
-	@handler UserDel
-	post /userCenter/user/deleteById (UserDelReq) returns (resp)
+    @handler UserAdd
+    post /userCenter/user/add (UserAddReq) returns (resp)
+    @handler UserUpdate
+    post /userCenter/user/updateById (UserUpdateReq) returns (resp)
+    @handler UserDel
+    post /userCenter/user/deleteById (UserDelReq) returns (resp)
 }

+ 71 - 5
entity/workDesktop.go

@@ -15,6 +15,7 @@ import (
 type WorkDesktopMenu struct {
 	MenuTree     []*JYMenu
 	UserId       string
+	NewUserId    string
 	AppId        string
 	TimeOut      int
 	BigMemberOff bool
@@ -89,7 +90,7 @@ func (m *WorkDesktopMenu) WorkMenuFormat() ([]*pb.MenuList, error) {
 			Icon:     mv.Icon,
 			Url:      mv.Url,
 			Id:       encrypt.SE.EncodeString(strconv.Itoa(mv.Id)), //功能id加密
-			Usable:   MC.If(mv.PowerIds != "", usable && mv.CheckCode == 1, true).(bool),
+			Usable:   usable,                                       //MC.If(mv.PowerIds != "", usable && mv.CheckCode == 1, true).(bool),
 			AppType:  mv.AppType,
 			OpenType: mv.OpenType,
 			Child:    []*pb.SecondLevelMenu{},
@@ -116,7 +117,7 @@ func (m *WorkDesktopMenu) WorkMenuFormat() ([]*pb.MenuList, error) {
 					Icon:     sv.Icon,
 					Url:      sv.Url,
 					Id:       encrypt.SE.EncodeString(strconv.Itoa(sv.Id)), //功能id加密
-					Usable:   MC.If(sv.PowerIds != "", usable && sv.CheckCode == 1, true).(bool),
+					Usable:   usable,                                       //MC.If(sv.PowerIds != "", usable && sv.CheckCode == 1, true).(bool),
 					Child:    []*pb.ThreeLevelMenu{},
 					AppType:  sv.AppType,
 					OpenType: sv.OpenType,
@@ -143,7 +144,7 @@ func (m *WorkDesktopMenu) WorkMenuFormat() ([]*pb.MenuList, error) {
 							Icon:     tv.Icon,
 							Url:      tv.Url,
 							Id:       encrypt.SE.EncodeString(strconv.Itoa(tv.Id)), //功能id加密
-							Usable:   MC.If(tv.PowerIds != "", usable && tv.CheckCode == 1, true).(bool),
+							Usable:   usable,                                       //MC.If(tv.PowerIds != "", usable && tv.CheckCode == 1, true).(bool),
 							AppType:  tv.AppType,
 							OpenType: tv.OpenType,
 							TipInfo: &pb.TipInfo{
@@ -243,7 +244,7 @@ func CommonlyUpdate(in *pb.WorkDesktopComprehensiveReq) (B bool, M string) {
 	if B = BaseMysql.ExecTx("常用功能批量更新", func(tx *sql.Tx) bool {
 		//查询此用户常用功能是否已存在记录
 		var id = 0
-		existingData := BaseMysql.SelectBySqlByTx(tx, `SELECT id  FROM `+WorkCommonly+` WHERE userid = ? AND appid = ? AND field = ? AND platform = ?  ORDER BY id DESC `, in.UserId, in.AppId, in.ActionMode, in.Platform)
+		existingData := BaseMysql.SelectBySqlByTx(tx, `SELECT id  FROM `+WorkCommonly+` WHERE base_userid = ? AND appid = ? AND field = ? AND platform = ?  ORDER BY id DESC `, in.NewUserId, in.AppId, in.ActionMode, in.Platform)
 		if existingData != nil && len(*existingData) > 0 {
 			id = MC.IntAll((*existingData)[0]["id"])
 		}
@@ -254,7 +255,7 @@ func CommonlyUpdate(in *pb.WorkDesktopComprehensiveReq) (B bool, M string) {
 				return false
 			}
 		default: //插入
-			if BaseMysql.InsertBySqlByTx(tx, `INSERT INTO `+WorkCommonly+`  (appid,userid,platform,field,value) VALUES (?,?,?,?,?)`, in.AppId, in.UserId, in.Platform, in.ActionMode, strings.Join(ids, ",")) < 0 {
+			if BaseMysql.InsertBySqlByTx(tx, `INSERT INTO `+WorkCommonly+`  (appid,base_userid,platform,field,value) VALUES (?,?,?,?,?)`, in.AppId, in.NewUserId, in.Platform, in.ActionMode, strings.Join(ids, ",")) < 0 {
 				logx.Info("常用功能-插入数据失败")
 				return false
 			}
@@ -265,3 +266,68 @@ func CommonlyUpdate(in *pb.WorkDesktopComprehensiveReq) (B bool, M string) {
 	}
 	return
 }
+
+// CommonlyFormat 常用功能 格式化
+func (m *WorkDesktopMenu) CommonlyFormat() ([]*pb.ThreeLevelMenu, error) {
+	menuList := make([]*pb.ThreeLevelMenu, 0)
+	subLevel := map[int]bool{}
+	for _, mv := range m.MenuTree {
+		//过滤子级
+		if subLevel[mv.ParentId] {
+			continue
+		}
+		subLevel[mv.Id] = true
+		//0:默认展示;1:需验证权限,有权限展示;2:需验证权限,无权限也可展示(可用服务无权限不展示)
+		usable := m.VerifyPermissions(mv.PowerIds)
+		oneLevel := &pb.ThreeLevelMenu{
+			Name:     mv.Name,
+			Icon:     mv.Icon,
+			Url:      mv.Url,
+			Id:       encrypt.SE.EncodeString(strconv.Itoa(mv.Id)), //功能id加密
+			Usable:   usable,                                       //MC.If(mv.PowerIds != "", usable && mv.CheckCode == 1, true).(bool),
+			AppType:  mv.AppType,
+			OpenType: mv.OpenType,
+			TipInfo: &pb.TipInfo{
+				Title:        mv.AdditionalInfo.Title,
+				Content:      mv.AdditionalInfo.Content,
+				ConfirmUrl:   mv.AdditionalInfo.ConfirmUrl,
+				ConfirmText:  mv.AdditionalInfo.ConfirmText,
+				IsShowCancel: mv.AdditionalInfo.IsShowCancel,
+				AppType:      mv.AppType,
+				OpenType:     mv.OpenType,
+			},
+		}
+	L:
+		for _, fv := range m.MenuTree {
+			//非子级 不处理
+			if fv.Name == "" || fv.ParentId != mv.Id {
+				continue
+			}
+			oneLevel.Url = MC.If(fv.Url != "", fv.Url, mv.Url).(string)
+			oneLevel.Icon = MC.If(fv.Icon != "", fv.Icon, mv.Icon).(string)
+			oneLevel.AppType = fv.AppType
+			oneLevel.OpenType = fv.OpenType
+			if fv.AdditionalInfo.Title != "" {
+				oneLevel.TipInfo = &pb.TipInfo{
+					Title:        fv.AdditionalInfo.Title,
+					Content:      fv.AdditionalInfo.Content,
+					ConfirmUrl:   fv.AdditionalInfo.ConfirmUrl,
+					ConfirmText:  fv.AdditionalInfo.ConfirmText,
+					IsShowCancel: fv.AdditionalInfo.IsShowCancel,
+					AppType:      fv.AppType,
+					OpenType:     fv.OpenType,
+				}
+			}
+			switch {
+			case strings.HasPrefix(fv.Name, "大会员") && m.VerifyPermissions(verification["大会员"]):
+				break L
+			case strings.HasPrefix(fv.Name, "商机管理") && m.VerifyPermissions(verification["商机管理"]):
+				break L
+			case strings.HasPrefix(fv.Name, "超级订阅") && m.VerifyPermissions(verification["超级订阅"]):
+				break L
+			}
+		}
+		menuList = append(menuList, oneLevel)
+	}
+	return menuList, nil
+}

+ 0 - 1
rpc/internal/logic/workdesktopmenuinfologic.go

@@ -46,7 +46,6 @@ func (l *WorkDesktopMenuInfoLogic) WorkDesktopMenuInfo(in *pb.WorkDesktopMenuInf
 	menuList, err := service.GetWordDesktopMenuTree(in)
 	//菜单模式
 	menuMode, err = service.GetWorkDesktopMenuMode(in)
-	logx.Info(err, "+++++:", len(menuList))
 	if err != nil {
 		errorCode = -1
 		errorMsg = err.Error()

+ 179 - 150
rpc/pb/userCenter.pb.go

@@ -2265,6 +2265,7 @@ type WorkDesktopMenuInfoReq struct {
 	BigMemberOff bool   `protobuf:"varint,5,opt,name=bigMemberOff,proto3" json:"bigMemberOff,omitempty"`
 	InternalTime int64  `protobuf:"varint,6,opt,name=internalTime,proto3" json:"internalTime,omitempty"`
 	RedisOutTime int64  `protobuf:"varint,7,opt,name=redisOutTime,proto3" json:"redisOutTime,omitempty"`
+	NewUserId    string `protobuf:"bytes,8,opt,name=newUserId,proto3" json:"newUserId,omitempty"`
 }
 
 func (x *WorkDesktopMenuInfoReq) Reset() {
@@ -2348,6 +2349,13 @@ func (x *WorkDesktopMenuInfoReq) GetRedisOutTime() int64 {
 	return 0
 }
 
+func (x *WorkDesktopMenuInfoReq) GetNewUserId() string {
+	if x != nil {
+		return x.NewUserId
+	}
+	return ""
+}
+
 //工作桌面-返回数据
 type WorkDesktopMenuInfoResp struct {
 	state         protoimpl.MessageState
@@ -2904,6 +2912,7 @@ type WorkDesktopComprehensiveReq struct {
 	BigMemberOff bool   `protobuf:"varint,8,opt,name=bigMemberOff,proto3" json:"bigMemberOff,omitempty"`
 	CommonlySize int64  `protobuf:"varint,9,opt,name=commonlySize,proto3" json:"commonlySize,omitempty"`
 	RedisOutTime int64  `protobuf:"varint,10,opt,name=redisOutTime,proto3" json:"redisOutTime,omitempty"`
+	NewUserId    string `protobuf:"bytes,11,opt,name=newUserId,proto3" json:"newUserId,omitempty"`
 }
 
 func (x *WorkDesktopComprehensiveReq) Reset() {
@@ -3008,6 +3017,13 @@ func (x *WorkDesktopComprehensiveReq) GetRedisOutTime() int64 {
 	return 0
 }
 
+func (x *WorkDesktopComprehensiveReq) GetNewUserId() string {
+	if x != nil {
+		return x.NewUserId
+	}
+	return ""
+}
+
 //工作桌面 综合功能-返回数据
 type WorkDesktopComprehensiveResp struct {
 	state         protoimpl.MessageState
@@ -3078,10 +3094,11 @@ type WorkDesktopClearUserInfoReq struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	UserId   string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`
-	AppId    string `protobuf:"bytes,2,opt,name=appId,proto3" json:"appId,omitempty"`
-	Platform string `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"`
-	UserIds  string `protobuf:"bytes,4,opt,name=userIds,proto3" json:"userIds,omitempty"`
+	UserId    string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`
+	AppId     string `protobuf:"bytes,2,opt,name=appId,proto3" json:"appId,omitempty"`
+	Platform  string `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"`
+	UserIds   string `protobuf:"bytes,4,opt,name=userIds,proto3" json:"userIds,omitempty"`
+	NewUserId string `protobuf:"bytes,5,opt,name=newUserId,proto3" json:"newUserId,omitempty"`
 }
 
 func (x *WorkDesktopClearUserInfoReq) Reset() {
@@ -3144,6 +3161,13 @@ func (x *WorkDesktopClearUserInfoReq) GetUserIds() string {
 	return ""
 }
 
+func (x *WorkDesktopClearUserInfoReq) GetNewUserId() string {
+	if x != nil {
+		return x.NewUserId
+	}
+	return ""
+}
+
 var File_userCenter_proto protoreflect.FileDescriptor
 
 var file_userCenter_proto_rawDesc = []byte{
@@ -3433,7 +3457,7 @@ var file_userCenter_proto_rawDesc = []byte{
 	0x12, 0x19, 0x0a, 0x08, 0x61, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01,
 	0x28, 0x09, 0x52, 0x07, 0x61, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x75,
 	0x6e, 0x69, 0x6f, 0x6e, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x6e,
-	0x69, 0x6f, 0x6e, 0x69, 0x64, 0x22, 0xe4, 0x01, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65,
+	0x69, 0x6f, 0x6e, 0x69, 0x64, 0x22, 0x82, 0x02, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65,
 	0x73, 0x6b, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x6e, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
 	0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
 	0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49,
@@ -3447,51 +3471,22 @@ var file_userCenter_proto_rawDesc = []byte{
 	0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65,
 	0x72, 0x6e, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69,
 	0x73, 0x4f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c,
-	0x72, 0x65, 0x64, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x74, 0x0a, 0x17,
-	0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x6e, 0x75, 0x49,
-	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72,
-	0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72,
-	0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f,
-	0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72,
-	0x4d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x09, 0x2e, 0x4d, 0x65, 0x6e, 0x75, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61,
-	0x74, 0x61, 0x22, 0x4d, 0x0a, 0x08, 0x4d, 0x65, 0x6e, 0x75, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a,
-	0x0a, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x08, 0x6d, 0x65,
-	0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x4d,
-	0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73,
-	0x74, 0x22, 0xee, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12,
-	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
-	0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x61, 0x62,
-	0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65,
-	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
-	0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70,
-	0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70,
-	0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66,
-	0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x54, 0x69, 0x70, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, 0x05, 0x63, 0x68,
-	0x69, 0x6c, 0x64, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x53, 0x65, 0x63, 0x6f,
-	0x6e, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x05, 0x63, 0x68, 0x69,
-	0x6c, 0x64, 0x22, 0xf4, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x4c, 0x65, 0x76,
-	0x65, 0x6c, 0x4d, 0x65, 0x6e, 0x75, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63,
-	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x10,
-	0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c,
-	0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
-	0x52, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54,
-	0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79,
-	0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22,
-	0x0a, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x08, 0x2e, 0x54, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e,
-	0x66, 0x6f, 0x12, 0x25, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x09, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x0f, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4d, 0x65,
-	0x6e, 0x75, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xcc, 0x01, 0x0a, 0x0e, 0x54, 0x68,
-	0x72, 0x65, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4d, 0x65, 0x6e, 0x75, 0x12, 0x12, 0x0a, 0x04,
+	0x72, 0x65, 0x64, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09,
+	0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x17, 0x57, 0x6f,
+	0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x6e, 0x75, 0x49, 0x6e, 0x66,
+	0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63,
+	0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72,
+	0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73,
+	0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73,
+	0x67, 0x12, 0x1d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x09, 0x2e, 0x4d, 0x65, 0x6e, 0x75, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x22, 0x4d, 0x0a, 0x08, 0x4d, 0x65, 0x6e, 0x75, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08,
+	0x6d, 0x65, 0x6e, 0x75, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x6d, 0x65, 0x6e, 0x75, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x08, 0x6d, 0x65, 0x6e, 0x75,
+	0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x4d, 0x65, 0x6e,
+	0x75, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x22,
+	0xee, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x6e, 0x75, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04,
 	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
 	0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
 	0x69, 0x63, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,
@@ -3503,107 +3498,141 @@ var file_userCenter_proto_rawDesc = []byte{
 	0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e,
 	0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18,
 	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x54, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52,
-	0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xd5, 0x01, 0x0a, 0x07, 0x54, 0x69, 0x70,
-	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
-	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
-	0x74, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x55,
-	0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72,
-	0x6d, 0x55, 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54,
-	0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69,
-	0x72, 0x6d, 0x54, 0x65, 0x78, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x53, 0x68, 0x6f, 0x77,
-	0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73,
-	0x53, 0x68, 0x6f, 0x77, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70,
-	0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70,
-	0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65,
-	0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65,
-	0x22, 0xbf, 0x02, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70,
-	0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71,
-	0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49,
-	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1a,
-	0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68,
-	0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65,
-	0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65,
-	0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07,
-	0x6d, 0x65, 0x6e, 0x75, 0x49, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d,
-	0x65, 0x6e, 0x75, 0x49, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x69, 0x67, 0x4d, 0x65, 0x6d,
-	0x62, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x69,
-	0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f,
-	0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22,
-	0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x54, 0x69,
-	0x6d, 0x65, 0x22, 0x7f, 0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f,
-	0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64,
-	0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x23,
-	0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x54,
-	0x68, 0x72, 0x65, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x04, 0x64,
-	0x61, 0x74, 0x61, 0x22, 0x81, 0x01, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b,
+	0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c,
+	0x64, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64,
+	0x22, 0xf4, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c,
+	0x4d, 0x65, 0x6e, 0x75, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03,
+	0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x16,
+	0x0a, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06,
+	0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70,
+	0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65,
+	0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x07,
+	0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e,
+	0x54, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f,
+	0x12, 0x25, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x0f, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4d, 0x65, 0x6e, 0x75,
+	0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xcc, 0x01, 0x0a, 0x0e, 0x54, 0x68, 0x72, 0x65,
+	0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4d, 0x65, 0x6e, 0x75, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63,
+	0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x03, 0x75, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02,
+	0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07,
+	0x61, 0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61,
+	0x70, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79,
+	0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x22, 0x0a, 0x07, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x54, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x74,
+	0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xd5, 0x01, 0x0a, 0x07, 0x54, 0x69, 0x70, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x55, 0x72, 0x6c,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x55,
+	0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x54, 0x65, 0x78,
+	0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+	0x54, 0x65, 0x78, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x61,
+	0x6e, 0x63, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x68,
+	0x6f, 0x77, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x54,
+	0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xdd,
+	0x02, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6f,
+	0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x12, 0x16,
+	0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08,
+	0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x1e,
+	0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a,
+	0x0a, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x6d, 0x65, 0x6e, 0x75, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65,
+	0x6e, 0x75, 0x49, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x6e,
+	0x75, 0x49, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x69, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65,
+	0x72, 0x4f, 0x66, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x69, 0x67, 0x4d,
+	0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x66, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x6c, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c,
+	0x72, 0x65, 0x64, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65,
+	0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0b, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x7f,
+	0x0a, 0x1c, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6d,
+	0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d,
+	0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a,
+	0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x23, 0x0a, 0x04, 0x64, 0x61,
+	0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x65,
+	0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4d, 0x65, 0x6e, 0x75, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22,
+	0x9f, 0x01, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43,
+	0x6c, 0x65, 0x61, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12,
+	0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a,
+	0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65,
+	0x72, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72,
+	0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49,
+	0x64, 0x32, 0x89, 0x06, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72,
+	0x12, 0x24, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x41, 0x75, 0x74, 0x68, 0x12, 0x0b, 0x2e, 0x45, 0x6e,
+	0x74, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x6e, 0x74, 0x41, 0x75,
+	0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x45, 0x78, 0x61,
+	0x6d, 0x69, 0x6e, 0x65, 0x12, 0x0b, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65,
+	0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x24, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0b, 0x2e, 0x45, 0x6e, 0x74,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x6e, 0x74, 0x4c, 0x69, 0x73,
+	0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x12, 0x0f, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b,
+	0x45, 0x6e, 0x74, 0x12, 0x0c, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x52, 0x65,
+	0x71, 0x1a, 0x0d, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x25, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0c, 0x2e, 0x43, 0x68,
+	0x65, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x6e, 0x74, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x09, 0x45, 0x6e, 0x74, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x45, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x12, 0x2d, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x12, 0x10, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52,
+	0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x3c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x13, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42,
+	0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24,
+	0x0a, 0x07, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x0b, 0x2e, 0x55, 0x73, 0x65, 0x72,
+	0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x12, 0x0a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x0c,
+	0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x23, 0x0a, 0x07,
+	0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x12, 0x0a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
+	0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x12, 0x48, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70,
+	0x4d, 0x65, 0x6e, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44,
+	0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x6e, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x71, 0x1a, 0x18, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x4d,
+	0x65, 0x6e, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x18, 0x57,
+	0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65,
+	0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65,
+	0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69,
+	0x76, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b,
+	0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x18, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b,
 	0x74, 0x6f, 0x70, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f,
-	0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61,
-	0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49,
-	0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a,
-	0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
-	0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x32, 0x89, 0x06, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72,
-	0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x41, 0x75, 0x74,
-	0x68, 0x12, 0x0b, 0x2e, 0x45, 0x6e, 0x74, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x0c,
-	0x2e, 0x45, 0x6e, 0x74, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x0a,
-	0x45, 0x6e, 0x74, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x12, 0x0b, 0x2e, 0x45, 0x78, 0x61,
-	0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74,
-	0x12, 0x0b, 0x2e, 0x45, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e,
-	0x45, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, 0x45,
-	0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0f, 0x2e, 0x45, 0x78, 0x61,
-	0x6d, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x45, 0x78,
-	0x61, 0x6d, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a,
-	0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x12, 0x0c, 0x2e, 0x43, 0x68, 0x65, 0x63,
-	0x6b, 0x45, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0d, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45,
-	0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x25, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x49, 0x6e, 0x66,
-	0x6f, 0x12, 0x0c, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a,
-	0x0c, 0x2e, 0x45, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a,
-	0x09, 0x45, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x45, 0x6e, 0x74,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x78, 0x61, 0x6d,
-	0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x69,
-	0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78,
-	0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x6e, 0x74, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61,
-	0x74, 0x75, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x13, 0x2e, 0x47, 0x65, 0x74, 0x53,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x14,
-	0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x07, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12,
-	0x0b, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x55,
-	0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x0a, 0x55, 0x73,
-	0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x0a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x23, 0x0a, 0x07, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x12, 0x0a, 0x2e,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x45, 0x78, 0x61, 0x6d,
-	0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x44,
-	0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x6e, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17,
-	0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x6e, 0x75,
-	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65,
-	0x73, 0x6b, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x6e, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
-	0x70, 0x12, 0x57, 0x0a, 0x18, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70,
-	0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x2e,
-	0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72,
-	0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x57, 0x6f,
-	0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68,
-	0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x18, 0x57, 0x6f,
-	0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73,
-	0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74,
-	0x6f, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x52,
-	0x65, 0x73, 0x70, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x12, 0x1c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c,
+	0x65, 0x61, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1d,
+	0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6d, 0x70,
+	0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x42, 0x06, 0x5a,
+	0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (

+ 3 - 0
rpc/userCenter.proto

@@ -249,6 +249,7 @@ message WorkDesktopMenuInfoReq{
   bool  bigMemberOff = 5;
   int64 internalTime = 6;
   int64 redisOutTime = 7;
+  string newUserId = 8;
 }
 
 //工作桌面-返回数据
@@ -321,6 +322,7 @@ message WorkDesktopComprehensiveReq{
   bool  bigMemberOff = 8;
   int64 commonlySize = 9;
   int64 redisOutTime = 10;
+  string newUserId = 11;
 }
 //工作桌面 综合功能-返回数据
 message WorkDesktopComprehensiveResp{
@@ -334,6 +336,7 @@ message  WorkDesktopClearUserInfoReq{
   string appId = 2;
   string platform = 3;
   string userIds = 4;
+  string newUserId = 5;
 }
 
 service UserCenter {

+ 36 - 28
service/workDesktop.go

@@ -24,9 +24,9 @@ func RenewWorkDesktopMenuModeOrCommonly(in *WorkDesktopComprehensiveReq) (r *Wor
 	case "commonlyRenew": //常用功能更新
 		//in.MenuIds  为空;删除
 		if in.MenuIds == "" {
-			count := entity.BaseMysql.CountBySql(`SELECT COUNT(id)  FROM `+entity.WorkCommonly+` WHERE userid = ? AND appid = ? AND platform = ? AND field = ?`, in.UserId, in.AppId, in.Platform, in.ActionMode)
+			count := entity.BaseMysql.CountBySql(`SELECT COUNT(id)  FROM `+entity.WorkCommonly+` WHERE base_userid = ? AND appid = ? AND platform = ? AND field = ?`, in.NewUserId, in.AppId, in.Platform, in.ActionMode)
 			if count > 0 {
-				if count := entity.BaseMysql.UpdateOrDeleteBySql(`DELETE  FROM `+entity.WorkCommonly+` WHERE userid = ? AND appid = ? AND platform = ? AND field = ?`, in.UserId, in.AppId, in.Platform, in.ActionMode); count <= 0 {
+				if count := entity.BaseMysql.UpdateOrDeleteBySql(`DELETE  FROM `+entity.WorkCommonly+` WHERE base_userid = ? AND appid = ? AND platform = ? AND field = ?`, in.NewUserId, in.AppId, in.Platform, in.ActionMode); count <= 0 {
 					r.ErrorCode = -1
 					r.ErrorMsg = "常用功能-清空常用功能异常"
 				}
@@ -41,37 +41,41 @@ func RenewWorkDesktopMenuModeOrCommonly(in *WorkDesktopComprehensiveReq) (r *Wor
 	case "commonlyList":
 		//查询常用功能列表
 		in.ActionMode = "commonlyRenew"
-		existingData := entity.BaseMysql.SelectBySql(`SELECT value  FROM `+entity.WorkCommonly+` WHERE userid = ? AND appid = ? AND field = ? AND platform = ?  ORDER BY id DESC `, in.UserId, in.AppId, in.ActionMode, in.Platform)
+		existingData := entity.BaseMysql.SelectBySql(`SELECT value  FROM `+entity.WorkCommonly+` WHERE base_userid = ? AND appid = ? AND field = ? AND platform = ?  ORDER BY id DESC `, in.NewUserId, in.AppId, in.ActionMode, in.Platform)
 		if existingData != nil && len(*existingData) > 0 {
 			eData := (*existingData)[0]
 			if MC.ObjToString(eData["value"]) != "" {
 				var (
-					params []string
-					pIds   []interface{}
+					//params []string
+					pIds []string
 				)
 				for _, pv := range strings.Split(MC.ObjToString(eData["value"]), ",") {
-					params = append(params, "?")
+					//params = append(params, "?")
 					pIds = append(pIds, pv)
 				}
-				menuData := entity.BaseMysql.SelectBySql(fmt.Sprintf(`SELECT * from %s WHERE  id IN (%s) AND status = 0`, entity.WorkMenu, strings.Join(params, ",")), pIds...)
+				//常用功能存储是三级菜单id,需要四级菜单信息也查出来
+				//会出现 用户设置常用功能,此功能下线,用户设置依然保存的有此功能  查询不能加 AND status = 0
+				menuData := entity.BaseMysql.SelectBySql(fmt.Sprintf(`SELECT * from %s WHERE  ( id IN (%s)  OR parentid IN (%s))`, entity.WorkMenu, strings.Join(pIds, ","), strings.Join(pIds, ",")))
 				if menuData != nil && len(*menuData) > 0 {
-					var menuList = []*pb.ThreeLevelMenu{}
 					var m = &entity.WorkDesktopMenu{
-						MenuTree:     nil,
+						MenuTree:     []*entity.JYMenu{},
 						UserId:       in.UserId,
+						NewUserId:    in.NewUserId,
 						AppId:        in.AppId,
 						TimeOut:      int(in.RedisOutTime),
 						BigMemberOff: in.BigMemberOff,
 					}
 					for _, mv := range *menuData {
-						//0:默认展示;1:需验证权限,有权限展示;2:需验证权限,无权限也可展示(可用服务无权限不展示)
-						usable := m.VerifyPermissions(MC.ObjToString(mv["powerids"]))
-						menu := &pb.ThreeLevelMenu{
-							Name:     MC.ObjToString(mv["name"]),
-							Icon:     MC.ObjToString(mv["icon"]),
-							AppType:  MC.ObjToString(mv["apptype"]),
-							Usable:   MC.If(MC.ObjToString(mv["powerids"]) != "", usable && MC.IntAll(mv["checkcode"]) == 1, true).(bool),
-							OpenType: MC.ObjToString(mv["opentype"]),
+						menu := &entity.JYMenu{
+							Id:        MC.IntAll(mv["id"]),
+							Name:      MC.ObjToString(mv["name"]),
+							OrderId:   MC.IntAll(mv["orderid"]),
+							ParentId:  MC.IntAll(mv["parentid"]),
+							PowerIds:  MC.ObjToString(mv["powerids"]),
+							CheckCode: MC.IntAll(mv["checkcode"]),
+							Icon:      MC.ObjToString(mv["icon"]),
+							AppType:   MC.ObjToString(mv["apptype"]),
+							OpenType:  MC.ObjToString(mv["opentype"]),
 						}
 						switch in.Platform {
 						case "WX":
@@ -82,14 +86,17 @@ func RenewWorkDesktopMenuModeOrCommonly(in *WorkDesktopComprehensiveReq) (r *Wor
 							menu.Url = MC.ObjToString(mv["pcurl"])
 						}
 						if additionalInfo := MC.ObjToString(mv["additionalinfo"]); additionalInfo != "" {
-							additional := pb.TipInfo{}
+							additional := entity.Additional{}
 							if json.Unmarshal([]byte(additionalInfo), &additional) == nil {
-								menu.TipInfo = &additional
+								menu.AdditionalInfo = additional
 							}
 						}
-						menuList = append(menuList, menu)
+						if menu.Id > 0 {
+							m.MenuTree = append(m.MenuTree, menu)
+						}
 					}
-					r.Data = menuList
+					//常用功能格式化
+					r.Data, _ = m.CommonlyFormat()
 				}
 			}
 
@@ -99,7 +106,7 @@ func RenewWorkDesktopMenuModeOrCommonly(in *WorkDesktopComprehensiveReq) (r *Wor
 			r.ErrorCode = -1
 			r.ErrorMsg = "菜单模式-参数异常"
 		} else {
-			menuModes := entity.BaseMysql.SelectBySql(`SELECT id,value FROM `+entity.WorkCommonly+` WHERE appid=? AND userid=? AND field = ? AND platform = ? LIMIT 1`, in.AppId, in.UserId, in.ActionMode, in.Platform)
+			menuModes := entity.BaseMysql.SelectBySql(`SELECT id,value FROM `+entity.WorkCommonly+` WHERE appid=? AND base_userid =? AND field = ? AND platform = ? LIMIT 1`, in.AppId, in.NewUserId, in.ActionMode, in.Platform)
 			if menuModes != nil && len(*menuModes) > 0 {
 				menuMode := (*menuModes)[0]
 				if MC.ObjToString(menuMode["value"]) != in.MenuMode {
@@ -110,11 +117,11 @@ func RenewWorkDesktopMenuModeOrCommonly(in *WorkDesktopComprehensiveReq) (r *Wor
 				}
 			} else {
 				if entity.BaseMysql.Insert(entity.WorkCommonly, map[string]interface{}{
-					"appid":    in.AppId,
-					"userid":   in.UserId,
-					"field":    in.ActionMode,
-					"platform": in.Platform,
-					"value":    in.MenuMode,
+					"appid":       in.AppId,
+					"base_userid": in.NewUserId,
+					"field":       in.ActionMode,
+					"platform":    in.Platform,
+					"value":       in.MenuMode,
 				}) < 0 {
 					r.ErrorCode = -1
 					r.ErrorMsg = "菜单模式-插入异常"
@@ -131,7 +138,7 @@ func GetWorkDesktopMenuMode(in *WorkDesktopMenuInfoReq) (str string, err error)
 		return "", fmt.Errorf("参数异常")
 	}
 	str = "all"
-	menuModes := entity.BaseMysql.SelectBySql(`SELECT value FROM `+entity.WorkCommonly+` WHERE appid=? AND userid=? AND field = 'menuMode' AND platform = ? LIMIT 1`, in.AppId, in.UserId, in.Platform)
+	menuModes := entity.BaseMysql.SelectBySql(`SELECT value FROM `+entity.WorkCommonly+` WHERE appid=? AND base_userid=? AND field = 'menuMode' AND platform = ? LIMIT 1`, in.AppId, in.NewUserId, in.Platform)
 	if menuModes != nil && len(*menuModes) > 0 {
 		menuMode := (*menuModes)[0]
 		if MC.ObjToString(menuMode["value"]) != "" {
@@ -161,6 +168,7 @@ func GetWordDesktopMenuTree(in *WorkDesktopMenuInfoReq) ([]*pb.MenuList, error)
 	wdm := &entity.WorkDesktopMenu{
 		MenuTree:     []*entity.JYMenu{},
 		UserId:       in.UserId,
+		NewUserId:    in.NewUserId,
 		AppId:        in.AppId,
 		TimeOut:      int(in.RedisOutTime),
 		BigMemberOff: in.BigMemberOff,