// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.11
// 	protoc        v7.35.1
// source: module/ec/mall/proto/product.proto

package mall

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// 商品属性
type AttrItem struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Id            int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`               //属性ID
	Name          string                 `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`            //属性名称
	ParentId      int32                  `protobuf:"varint,3,opt,name=parent_id,proto3" json:"parent_id,omitempty"` //上级ID
	Value         string                 `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"`          //属性值
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *AttrItem) Reset() {
	*x = AttrItem{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *AttrItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AttrItem) ProtoMessage() {}

func (x *AttrItem) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AttrItem.ProtoReflect.Descriptor instead.
func (*AttrItem) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{0}
}

func (x *AttrItem) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *AttrItem) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *AttrItem) GetParentId() int32 {
	if x != nil {
		return x.ParentId
	}
	return 0
}

func (x *AttrItem) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

// 商品评论
type CommentItem struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Id              int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`                             //ID
	Identity        string                 `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"`                  // 评论唯一标识
	CreatedAt       string                 `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"`              //创建时间
	NickName        string                 `protobuf:"bytes,4,opt,name=nick_name,proto3" json:"nick_name,omitempty"`                //用户名称
	Score           int32                  `protobuf:"varint,5,opt,name=score,proto3" json:"score,omitempty"`                       //评分
	Comment         string                 `protobuf:"bytes,6,opt,name=comment,proto3" json:"comment,omitempty"`                    //评论正文
	Reply           string                 `protobuf:"bytes,7,opt,name=reply,proto3" json:"reply,omitempty"`                        //回复正文
	ProductIdentity string                 `protobuf:"bytes,8,opt,name=product_identity,proto3" json:"product_identity,omitempty"`  // 所属商品唯一标识
	StoreIdentity   string                 `protobuf:"bytes,9,opt,name=store_identity,proto3" json:"store_identity,omitempty"`      // 店铺唯一标识
	SpecIdentity    string                 `protobuf:"bytes,10,opt,name=spec_identity,proto3" json:"spec_identity,omitempty"`       // 产品规格唯一标识
	CommentIdentity string                 `protobuf:"bytes,11,opt,name=comment_identity,proto3" json:"comment_identity,omitempty"` // 被回复的评论唯一标识
	Product         string                 `protobuf:"bytes,12,opt,name=product,proto3" json:"product,omitempty"`                   // 所属商品
	ProductSpec     string                 `protobuf:"bytes,13,opt,name=product_spec,proto3" json:"product_spec,omitempty"`         //  产品规格
	IsComment       bool                   `protobuf:"varint,14,opt,name=is_comment,proto3" json:"is_comment,omitempty"`            // 是否是评论
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *CommentItem) Reset() {
	*x = CommentItem{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CommentItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CommentItem) ProtoMessage() {}

func (x *CommentItem) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CommentItem.ProtoReflect.Descriptor instead.
func (*CommentItem) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{1}
}

func (x *CommentItem) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *CommentItem) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *CommentItem) GetCreatedAt() string {
	if x != nil {
		return x.CreatedAt
	}
	return ""
}

func (x *CommentItem) GetNickName() string {
	if x != nil {
		return x.NickName
	}
	return ""
}

func (x *CommentItem) GetScore() int32 {
	if x != nil {
		return x.Score
	}
	return 0
}

func (x *CommentItem) GetComment() string {
	if x != nil {
		return x.Comment
	}
	return ""
}

func (x *CommentItem) GetReply() string {
	if x != nil {
		return x.Reply
	}
	return ""
}

func (x *CommentItem) GetProductIdentity() string {
	if x != nil {
		return x.ProductIdentity
	}
	return ""
}

func (x *CommentItem) GetStoreIdentity() string {
	if x != nil {
		return x.StoreIdentity
	}
	return ""
}

func (x *CommentItem) GetSpecIdentity() string {
	if x != nil {
		return x.SpecIdentity
	}
	return ""
}

func (x *CommentItem) GetCommentIdentity() string {
	if x != nil {
		return x.CommentIdentity
	}
	return ""
}

func (x *CommentItem) GetProduct() string {
	if x != nil {
		return x.Product
	}
	return ""
}

func (x *CommentItem) GetProductSpec() string {
	if x != nil {
		return x.ProductSpec
	}
	return ""
}

func (x *CommentItem) GetIsComment() bool {
	if x != nil {
		return x.IsComment
	}
	return false
}

type CommentItemRep struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Id              int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`                             //ID
	Identity        string                 `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"`                  // 评论唯一标识
	CreatedAt       string                 `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"`              //创建时间
	NickName        string                 `protobuf:"bytes,4,opt,name=nick_name,proto3" json:"nick_name,omitempty"`                //用户名称
	Score           int32                  `protobuf:"varint,5,opt,name=score,proto3" json:"score,omitempty"`                       //评分
	Comment         string                 `protobuf:"bytes,6,opt,name=comment,proto3" json:"comment,omitempty"`                    //评论正文
	Reply           string                 `protobuf:"bytes,7,opt,name=reply,proto3" json:"reply,omitempty"`                        //回复正文
	ProductIdentity string                 `protobuf:"bytes,8,opt,name=product_identity,proto3" json:"product_identity,omitempty"`  // 所属商品唯一标识
	StoreIdentity   string                 `protobuf:"bytes,9,opt,name=store_identity,proto3" json:"store_identity,omitempty"`      // 店铺唯一标识
	SpecIdentity    string                 `protobuf:"bytes,10,opt,name=spec_identity,proto3" json:"spec_identity,omitempty"`       // 产品规格唯一标识
	CommentIdentity string                 `protobuf:"bytes,11,opt,name=comment_identity,proto3" json:"comment_identity,omitempty"` // 被回复的评论唯一标识
	List            []*CommentItem         `protobuf:"bytes,12,rep,name=list,proto3" json:"list,omitempty"`                         // 评论列表
	Product         string                 `protobuf:"bytes,13,opt,name=product,proto3" json:"product,omitempty"`                   // 所属商品
	ProductSpec     string                 `protobuf:"bytes,14,opt,name=product_spec,proto3" json:"product_spec,omitempty"`         // 产品规格
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *CommentItemRep) Reset() {
	*x = CommentItemRep{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CommentItemRep) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CommentItemRep) ProtoMessage() {}

func (x *CommentItemRep) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CommentItemRep.ProtoReflect.Descriptor instead.
func (*CommentItemRep) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{2}
}

func (x *CommentItemRep) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *CommentItemRep) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *CommentItemRep) GetCreatedAt() string {
	if x != nil {
		return x.CreatedAt
	}
	return ""
}

func (x *CommentItemRep) GetNickName() string {
	if x != nil {
		return x.NickName
	}
	return ""
}

func (x *CommentItemRep) GetScore() int32 {
	if x != nil {
		return x.Score
	}
	return 0
}

func (x *CommentItemRep) GetComment() string {
	if x != nil {
		return x.Comment
	}
	return ""
}

func (x *CommentItemRep) GetReply() string {
	if x != nil {
		return x.Reply
	}
	return ""
}

func (x *CommentItemRep) GetProductIdentity() string {
	if x != nil {
		return x.ProductIdentity
	}
	return ""
}

func (x *CommentItemRep) GetStoreIdentity() string {
	if x != nil {
		return x.StoreIdentity
	}
	return ""
}

func (x *CommentItemRep) GetSpecIdentity() string {
	if x != nil {
		return x.SpecIdentity
	}
	return ""
}

func (x *CommentItemRep) GetCommentIdentity() string {
	if x != nil {
		return x.CommentIdentity
	}
	return ""
}

func (x *CommentItemRep) GetList() []*CommentItem {
	if x != nil {
		return x.List
	}
	return nil
}

func (x *CommentItemRep) GetProduct() string {
	if x != nil {
		return x.Product
	}
	return ""
}

func (x *CommentItemRep) GetProductSpec() string {
	if x != nil {
		return x.ProductSpec
	}
	return ""
}

type DetailBySpecRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	SpecNo        string                 `protobuf:"bytes,1,opt,name=spec_no,proto3" json:"spec_no,omitempty"` // 产品规格编号
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DetailBySpecRequest) Reset() {
	*x = DetailBySpecRequest{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DetailBySpecRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DetailBySpecRequest) ProtoMessage() {}

func (x *DetailBySpecRequest) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DetailBySpecRequest.ProtoReflect.Descriptor instead.
func (*DetailBySpecRequest) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{3}
}

func (x *DetailBySpecRequest) GetSpecNo() string {
	if x != nil {
		return x.SpecNo
	}
	return ""
}

type OpRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Identity      []string               `protobuf:"bytes,1,rep,name=identity,proto3" json:"identity,omitempty"` // 需要被禁用的产品唯一标识
	Status        int32                  `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`    // 更新的数据
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *OpRequest) Reset() {
	*x = OpRequest{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *OpRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*OpRequest) ProtoMessage() {}

func (x *OpRequest) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use OpRequest.ProtoReflect.Descriptor instead.
func (*OpRequest) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{4}
}

func (x *OpRequest) GetIdentity() []string {
	if x != nil {
		return x.Identity
	}
	return nil
}

func (x *OpRequest) GetStatus() int32 {
	if x != nil {
		return x.Status
	}
	return 0
}

type ModifyRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Identity      string                 `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` // 产品唯一标识
	Status        int32                  `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`    // 商品状态：1-已上架，2-自动上架等待中（禁止web手动传入），3-禁用 ，4-草稿，5-未上架
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ModifyRequest) Reset() {
	*x = ModifyRequest{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ModifyRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ModifyRequest) ProtoMessage() {}

func (x *ModifyRequest) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ModifyRequest.ProtoReflect.Descriptor instead.
func (*ModifyRequest) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{5}
}

func (x *ModifyRequest) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *ModifyRequest) GetStatus() int32 {
	if x != nil {
		return x.Status
	}
	return 0
}

type ListItem struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	ProductId       int64                  `protobuf:"varint,2,opt,name=product_id,proto3" json:"product_id,omitempty"`             // 产品id
	Product         string                 `protobuf:"bytes,3,opt,name=product,proto3" json:"product,omitempty"`                    // 产品名称
	SpecId          int64                  `protobuf:"varint,4,opt,name=spec_id,proto3" json:"spec_id,omitempty"`                   // 规格id
	Spec            string                 `protobuf:"bytes,5,opt,name=spec,proto3" json:"spec,omitempty"`                          // 规格名称
	SpecNo          string                 `protobuf:"bytes,6,opt,name=spec_no,proto3" json:"spec_no,omitempty"`                    // 规格编号
	Price           int64                  `protobuf:"varint,7,opt,name=price,proto3" json:"price,omitempty"`                       // 单价，单位分
	Count           int64                  `protobuf:"varint,8,opt,name=count,proto3" json:"count,omitempty"`                       // 数量
	Img             string                 `protobuf:"bytes,9,opt,name=img,proto3" json:"img,omitempty"`                            // 产品图片
	ProductIdentity string                 `protobuf:"bytes,10,opt,name=product_identity,proto3" json:"product_identity,omitempty"` // 产品唯一标识
	SerialId        string                 `protobuf:"bytes,11,opt,name=serial_id,proto3" json:"serial_id,omitempty"`               // 产品序号
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *ListItem) Reset() {
	*x = ListItem{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListItem) ProtoMessage() {}

func (x *ListItem) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListItem.ProtoReflect.Descriptor instead.
func (*ListItem) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{6}
}

func (x *ListItem) GetProductId() int64 {
	if x != nil {
		return x.ProductId
	}
	return 0
}

func (x *ListItem) GetProduct() string {
	if x != nil {
		return x.Product
	}
	return ""
}

func (x *ListItem) GetSpecId() int64 {
	if x != nil {
		return x.SpecId
	}
	return 0
}

func (x *ListItem) GetSpec() string {
	if x != nil {
		return x.Spec
	}
	return ""
}

func (x *ListItem) GetSpecNo() string {
	if x != nil {
		return x.SpecNo
	}
	return ""
}

func (x *ListItem) GetPrice() int64 {
	if x != nil {
		return x.Price
	}
	return 0
}

func (x *ListItem) GetCount() int64 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *ListItem) GetImg() string {
	if x != nil {
		return x.Img
	}
	return ""
}

func (x *ListItem) GetProductIdentity() string {
	if x != nil {
		return x.ProductIdentity
	}
	return ""
}

func (x *ListItem) GetSerialId() string {
	if x != nil {
		return x.SerialId
	}
	return ""
}

type ListWithIdRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Id            []int64                `protobuf:"varint,1,rep,packed,name=id,proto3" json:"id,omitempty"` // specId列表
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListWithIdRequest) Reset() {
	*x = ListWithIdRequest{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListWithIdRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListWithIdRequest) ProtoMessage() {}

func (x *ListWithIdRequest) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListWithIdRequest.ProtoReflect.Descriptor instead.
func (*ListWithIdRequest) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{7}
}

func (x *ListWithIdRequest) GetId() []int64 {
	if x != nil {
		return x.Id
	}
	return nil
}

type ListWithIdReply struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Data          []*ListItem            `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListWithIdReply) Reset() {
	*x = ListWithIdReply{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListWithIdReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListWithIdReply) ProtoMessage() {}

func (x *ListWithIdReply) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListWithIdReply.ProtoReflect.Descriptor instead.
func (*ListWithIdReply) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{8}
}

func (x *ListWithIdReply) GetData() []*ListItem {
	if x != nil {
		return x.Data
	}
	return nil
}

// ---- Reply 部分
type PhotoReply struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Count         int64                  `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
	Data          []*PhotoItem           `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` //
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *PhotoReply) Reset() {
	*x = PhotoReply{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *PhotoReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PhotoReply) ProtoMessage() {}

func (x *PhotoReply) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use PhotoReply.ProtoReflect.Descriptor instead.
func (*PhotoReply) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{9}
}

func (x *PhotoReply) GetCount() int64 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *PhotoReply) GetData() []*PhotoItem {
	if x != nil {
		return x.Data
	}
	return nil
}

type SpecReply struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Count         int64                  `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
	Data          []*SpecItem            `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SpecReply) Reset() {
	*x = SpecReply{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SpecReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SpecReply) ProtoMessage() {}

func (x *SpecReply) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SpecReply.ProtoReflect.Descriptor instead.
func (*SpecReply) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{10}
}

func (x *SpecReply) GetCount() int64 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *SpecReply) GetData() []*SpecItem {
	if x != nil {
		return x.Data
	}
	return nil
}

type CommentListReply struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Count         int64                  `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` // 数量
	Data          []*CommentItemRep      `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"`    //评论列表
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CommentListReply) Reset() {
	*x = CommentListReply{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CommentListReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CommentListReply) ProtoMessage() {}

func (x *CommentListReply) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CommentListReply.ProtoReflect.Descriptor instead.
func (*CommentListReply) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{11}
}

func (x *CommentListReply) GetCount() int64 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *CommentListReply) GetData() []*CommentItemRep {
	if x != nil {
		return x.Data
	}
	return nil
}

type StatisticReply struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Total         int64                  `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"`         // 当前产品总数
	Selling       int64                  `protobuf:"varint,2,opt,name=selling,proto3" json:"selling,omitempty"`     // 在售数量
	Forbidden     int64                  `protobuf:"varint,3,opt,name=forbidden,proto3" json:"forbidden,omitempty"` // 禁用数量
	Draft         int64                  `protobuf:"varint,4,opt,name=draft,proto3" json:"draft,omitempty"`         // 草稿数量
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *StatisticReply) Reset() {
	*x = StatisticReply{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *StatisticReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*StatisticReply) ProtoMessage() {}

func (x *StatisticReply) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use StatisticReply.ProtoReflect.Descriptor instead.
func (*StatisticReply) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{12}
}

func (x *StatisticReply) GetTotal() int64 {
	if x != nil {
		return x.Total
	}
	return 0
}

func (x *StatisticReply) GetSelling() int64 {
	if x != nil {
		return x.Selling
	}
	return 0
}

func (x *StatisticReply) GetForbidden() int64 {
	if x != nil {
		return x.Forbidden
	}
	return 0
}

func (x *StatisticReply) GetDraft() int64 {
	if x != nil {
		return x.Draft
	}
	return 0
}

type OrgBySpecIdReply struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Id            int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`            // 机构id
	Identity      string                 `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` // 店铺唯一标识
	Title         string                 `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`       // 机构名称
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *OrgBySpecIdReply) Reset() {
	*x = OrgBySpecIdReply{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[13]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *OrgBySpecIdReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*OrgBySpecIdReply) ProtoMessage() {}

func (x *OrgBySpecIdReply) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[13]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use OrgBySpecIdReply.ProtoReflect.Descriptor instead.
func (*OrgBySpecIdReply) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{13}
}

func (x *OrgBySpecIdReply) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *OrgBySpecIdReply) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *OrgBySpecIdReply) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

// 备用的产品附加信息
type Subjoin struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	CategoryPaths string                 `protobuf:"bytes,1,opt,name=category_paths,proto3" json:"category_paths,omitempty"` //分类路径
	SubTitle      string                 `protobuf:"bytes,2,opt,name=sub_title,proto3" json:"sub_title,omitempty"`           //商品标题
	Keyword       string                 `protobuf:"bytes,3,opt,name=keyword,proto3" json:"keyword,omitempty"`               //商品关键字
	Stock         int32                  `protobuf:"varint,4,opt,name=stock,proto3" json:"stock,omitempty"`                  //库存
	SalesPrice    int64                  `protobuf:"varint,5,opt,name=sales_price,proto3" json:"sales_price,omitempty"`      //销售价
	Args          string                 `protobuf:"bytes,6,opt,name=args,proto3" json:"args,omitempty"`                     //商品相关参数JSON
	CommentTotal  int32                  `protobuf:"varint,7,opt,name=comment_total,proto3" json:"comment_total,omitempty"`  //评论总数
	SaleTotal     int32                  `protobuf:"varint,8,opt,name=sale_total,proto3" json:"sale_total,omitempty"`        //销售总数
	ViewTotal     int32                  `protobuf:"varint,9,opt,name=view_total,proto3" json:"view_total,omitempty"`        //查看总数
	ImageTotal    int32                  `protobuf:"varint,10,opt,name=image_total,proto3" json:"image_total,omitempty"`     //图片总数
	Recommend     int32                  `protobuf:"varint,11,opt,name=recommend,proto3" json:"recommend,omitempty"`         //推荐码：0不推荐，1推荐的状态
	Sort          int32                  `protobuf:"varint,12,opt,name=sort,proto3" json:"sort,omitempty"`                   //排序
	Types         int32                  `protobuf:"varint,13,opt,name=types,proto3" json:"types,omitempty"`                 //商品类型:Product=1 实体商品,Service=2 服务,Membership=3 会员服务,Other=4 其它
	Star          int64                  `protobuf:"varint,14,opt,name=star,proto3" json:"star,omitempty"`                   //商品星级
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Subjoin) Reset() {
	*x = Subjoin{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[14]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Subjoin) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Subjoin) ProtoMessage() {}

func (x *Subjoin) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[14]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Subjoin.ProtoReflect.Descriptor instead.
func (*Subjoin) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{14}
}

func (x *Subjoin) GetCategoryPaths() string {
	if x != nil {
		return x.CategoryPaths
	}
	return ""
}

func (x *Subjoin) GetSubTitle() string {
	if x != nil {
		return x.SubTitle
	}
	return ""
}

func (x *Subjoin) GetKeyword() string {
	if x != nil {
		return x.Keyword
	}
	return ""
}

func (x *Subjoin) GetStock() int32 {
	if x != nil {
		return x.Stock
	}
	return 0
}

func (x *Subjoin) GetSalesPrice() int64 {
	if x != nil {
		return x.SalesPrice
	}
	return 0
}

func (x *Subjoin) GetArgs() string {
	if x != nil {
		return x.Args
	}
	return ""
}

func (x *Subjoin) GetCommentTotal() int32 {
	if x != nil {
		return x.CommentTotal
	}
	return 0
}

func (x *Subjoin) GetSaleTotal() int32 {
	if x != nil {
		return x.SaleTotal
	}
	return 0
}

func (x *Subjoin) GetViewTotal() int32 {
	if x != nil {
		return x.ViewTotal
	}
	return 0
}

func (x *Subjoin) GetImageTotal() int32 {
	if x != nil {
		return x.ImageTotal
	}
	return 0
}

func (x *Subjoin) GetRecommend() int32 {
	if x != nil {
		return x.Recommend
	}
	return 0
}

func (x *Subjoin) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

func (x *Subjoin) GetTypes() int32 {
	if x != nil {
		return x.Types
	}
	return 0
}

func (x *Subjoin) GetStar() int64 {
	if x != nil {
		return x.Star
	}
	return 0
}

type ListReply struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Count         int64                  `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` // 数量
	Data          []*ProductItem         `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"`    // 产品列表
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListReply) Reset() {
	*x = ListReply{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[15]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListReply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListReply) ProtoMessage() {}

func (x *ListReply) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[15]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListReply.ProtoReflect.Descriptor instead.
func (*ListReply) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{15}
}

func (x *ListReply) GetCount() int64 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *ListReply) GetData() []*ProductItem {
	if x != nil {
		return x.Data
	}
	return nil
}

type ProductBase struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	Id             int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`                           //商品ID
	Identity       string                 `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"`                //商品唯一码
	SupplyId       int64                  `protobuf:"varint,4,opt,name=supply_id,proto3" json:"supply_id,omitempty"`             //供应商ID
	CategoryId     int64                  `protobuf:"varint,6,opt,name=category_id,proto3" json:"category_id,omitempty"`         //分类ID
	Title          string                 `protobuf:"bytes,8,opt,name=title,proto3" json:"title,omitempty"`                      //商品标题
	MeasuringName  string                 `protobuf:"bytes,99,opt,name=measuring_name,proto3" json:"measuring_name,omitempty"`   // 测量单位名称
	SellMax        int64                  `protobuf:"varint,97,opt,name=sell_max,proto3" json:"sell_max,omitempty"`              // 最大限购数量
	SellMin        int64                  `protobuf:"varint,96,opt,name=sell_min,proto3" json:"sell_min,omitempty"`              // 最小限购数量
	Wastage        int64                  `protobuf:"varint,95,opt,name=wastage,proto3" json:"wastage,omitempty"`                // 损耗率
	StandardNumber string                 `protobuf:"bytes,94,opt,name=standard_number,proto3" json:"standard_number,omitempty"` // 产品标准号
	Brand          string                 `protobuf:"bytes,93,opt,name=brand,proto3" json:"brand,omitempty"`                     // 品牌名称
	StockType      int64                  `protobuf:"varint,92,opt,name=stock_type,proto3" json:"stock_type,omitempty"`          // 库存计数方式：1-买方下单减库存，2-完成签约减库存
	Status         int32                  `protobuf:"varint,91,opt,name=status,proto3" json:"status,omitempty"`                  // 商品状态：0-未上架，1-已上架，2-自动上架等待中，3-禁用 ，4-草稿
	PutawayTime    string                 `protobuf:"bytes,90,opt,name=putaway_time,proto3" json:"putaway_time,omitempty"`       // 预定的上架时间 YYYY-MM-DD HH:mm:ss
	CoverImage     string                 `protobuf:"bytes,11,opt,name=cover_image,proto3" json:"cover_image,omitempty"`         //商品封面图片
	Images         []string               `protobuf:"bytes,24,rep,name=images,proto3" json:"images,omitempty"`                   // 产品图片
	Content        string                 `protobuf:"bytes,14,opt,name=content,proto3" json:"content,omitempty"`                 //商品详情
	SerialId       string                 `protobuf:"bytes,15,opt,name=serial_id,proto3" json:"serial_id,omitempty"`             // 产品序号
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *ProductBase) Reset() {
	*x = ProductBase{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[16]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ProductBase) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ProductBase) ProtoMessage() {}

func (x *ProductBase) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[16]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ProductBase.ProtoReflect.Descriptor instead.
func (*ProductBase) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{16}
}

func (x *ProductBase) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *ProductBase) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *ProductBase) GetSupplyId() int64 {
	if x != nil {
		return x.SupplyId
	}
	return 0
}

func (x *ProductBase) GetCategoryId() int64 {
	if x != nil {
		return x.CategoryId
	}
	return 0
}

func (x *ProductBase) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *ProductBase) GetMeasuringName() string {
	if x != nil {
		return x.MeasuringName
	}
	return ""
}

func (x *ProductBase) GetSellMax() int64 {
	if x != nil {
		return x.SellMax
	}
	return 0
}

func (x *ProductBase) GetSellMin() int64 {
	if x != nil {
		return x.SellMin
	}
	return 0
}

func (x *ProductBase) GetWastage() int64 {
	if x != nil {
		return x.Wastage
	}
	return 0
}

func (x *ProductBase) GetStandardNumber() string {
	if x != nil {
		return x.StandardNumber
	}
	return ""
}

func (x *ProductBase) GetBrand() string {
	if x != nil {
		return x.Brand
	}
	return ""
}

func (x *ProductBase) GetStockType() int64 {
	if x != nil {
		return x.StockType
	}
	return 0
}

func (x *ProductBase) GetStatus() int32 {
	if x != nil {
		return x.Status
	}
	return 0
}

func (x *ProductBase) GetPutawayTime() string {
	if x != nil {
		return x.PutawayTime
	}
	return ""
}

func (x *ProductBase) GetCoverImage() string {
	if x != nil {
		return x.CoverImage
	}
	return ""
}

func (x *ProductBase) GetImages() []string {
	if x != nil {
		return x.Images
	}
	return nil
}

func (x *ProductBase) GetContent() string {
	if x != nil {
		return x.Content
	}
	return ""
}

func (x *ProductBase) GetSerialId() string {
	if x != nil {
		return x.SerialId
	}
	return ""
}

type SpecItem struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Id              int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`                              //
	Identity        string                 `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"`                   // 唯一标识
	SupplyId        int64                  `protobuf:"varint,3,opt,name=supply_id,proto3" json:"supply_id,omitempty"`                //供应商ID
	ProductIdentity string                 `protobuf:"bytes,4,opt,name=product_identity,proto3" json:"product_identity,omitempty"`   // 产品唯一标识
	StoreIdentity   string                 `protobuf:"bytes,5,opt,name=store_identity,proto3" json:"store_identity,omitempty"`       // 店铺唯一标识
	Title           string                 `protobuf:"bytes,6,opt,name=title,proto3" json:"title,omitempty"`                         // 名称
	StockType       int32                  `protobuf:"varint,7,opt,name=stock_type,proto3" json:"stock_type,omitempty"`              // 库存设置：1-设置库存限制，2-不设置库存限制
	Stock           int64                  `protobuf:"varint,8,opt,name=stock,proto3" json:"stock,omitempty"`                        // 库存数量
	Price           int64                  `protobuf:"varint,9,opt,name=price,proto3" json:"price,omitempty"`                        // 价格,单位：分
	DirectSales     int64                  `protobuf:"varint,10,opt,name=direct_sales,proto3" json:"direct_sales,omitempty"`         // 直营价格,单位:分
	TpType          int32                  `protobuf:"varint,11,opt,name=tp_type,proto3" json:"tp_type,omitempty"`                   // 阶梯价设置:1-启用,2-不启用
	DsTpType        int32                  `protobuf:"varint,12,opt,name=ds_tp_type,proto3" json:"ds_tp_type,omitempty"`             // 直营阶梯价设置:1-启用,2-不启用
	Img             string                 `protobuf:"bytes,13,opt,name=img,proto3" json:"img,omitempty"`                            // 预览图
	SpecNo          string                 `protobuf:"bytes,14,opt,name=spec_no,proto3" json:"spec_no,omitempty"`                    // 规格编号
	Keyword         string                 `protobuf:"bytes,15,opt,name=keyword,proto3" json:"keyword,omitempty"`                    // 关键字
	PurchasingPrice int64                  `protobuf:"varint,16,opt,name=purchasing_price,proto3" json:"purchasing_price,omitempty"` // 进口价格,单位：分
	Wholesale       int64                  `protobuf:"varint,17,opt,name=wholesale,proto3" json:"wholesale,omitempty"`               // 代理价,单位：分
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *SpecItem) Reset() {
	*x = SpecItem{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[17]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SpecItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SpecItem) ProtoMessage() {}

func (x *SpecItem) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[17]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SpecItem.ProtoReflect.Descriptor instead.
func (*SpecItem) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{17}
}

func (x *SpecItem) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *SpecItem) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *SpecItem) GetSupplyId() int64 {
	if x != nil {
		return x.SupplyId
	}
	return 0
}

func (x *SpecItem) GetProductIdentity() string {
	if x != nil {
		return x.ProductIdentity
	}
	return ""
}

func (x *SpecItem) GetStoreIdentity() string {
	if x != nil {
		return x.StoreIdentity
	}
	return ""
}

func (x *SpecItem) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *SpecItem) GetStockType() int32 {
	if x != nil {
		return x.StockType
	}
	return 0
}

func (x *SpecItem) GetStock() int64 {
	if x != nil {
		return x.Stock
	}
	return 0
}

func (x *SpecItem) GetPrice() int64 {
	if x != nil {
		return x.Price
	}
	return 0
}

func (x *SpecItem) GetDirectSales() int64 {
	if x != nil {
		return x.DirectSales
	}
	return 0
}

func (x *SpecItem) GetTpType() int32 {
	if x != nil {
		return x.TpType
	}
	return 0
}

func (x *SpecItem) GetDsTpType() int32 {
	if x != nil {
		return x.DsTpType
	}
	return 0
}

func (x *SpecItem) GetImg() string {
	if x != nil {
		return x.Img
	}
	return ""
}

func (x *SpecItem) GetSpecNo() string {
	if x != nil {
		return x.SpecNo
	}
	return ""
}

func (x *SpecItem) GetKeyword() string {
	if x != nil {
		return x.Keyword
	}
	return ""
}

func (x *SpecItem) GetPurchasingPrice() int64 {
	if x != nil {
		return x.PurchasingPrice
	}
	return 0
}

func (x *SpecItem) GetWholesale() int64 {
	if x != nil {
		return x.Wholesale
	}
	return 0
}

type PhotoItem struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Name            string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`                         // 图片名称
	Identity        string                 `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"`                 // 图片唯一标识
	ProductIdentity string                 `protobuf:"bytes,3,opt,name=product_identity,proto3" json:"product_identity,omitempty"` // 所属产品唯一标识
	Url             string                 `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"`                           // 图片地址
	Sort            int32                  `protobuf:"varint,5,opt,name=sort,proto3" json:"sort,omitempty"`                        // 排序方式
	Types           string                 `protobuf:"bytes,6,opt,name=types,proto3" json:"types,omitempty"`                       // cover封面，img普通图片
	Id              int64                  `protobuf:"varint,7,opt,name=id,proto3" json:"id,omitempty"`                            // 图片id
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *PhotoItem) Reset() {
	*x = PhotoItem{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[18]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *PhotoItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PhotoItem) ProtoMessage() {}

func (x *PhotoItem) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[18]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use PhotoItem.ProtoReflect.Descriptor instead.
func (*PhotoItem) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{18}
}

func (x *PhotoItem) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *PhotoItem) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *PhotoItem) GetProductIdentity() string {
	if x != nil {
		return x.ProductIdentity
	}
	return ""
}

func (x *PhotoItem) GetUrl() string {
	if x != nil {
		return x.Url
	}
	return ""
}

func (x *PhotoItem) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

func (x *PhotoItem) GetTypes() string {
	if x != nil {
		return x.Types
	}
	return ""
}

func (x *PhotoItem) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

type CategoriesItem struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Id            int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` //ID
	Identity      string                 `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"`
	Title         string                 `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`            //名称
	EnTitle       string                 `protobuf:"bytes,4,opt,name=en_title,proto3" json:"en_title,omitempty"`      //英文名称
	ParentId      int64                  `protobuf:"varint,5,opt,name=parent_id,proto3" json:"parent_id,omitempty"`   //上级ID
	Paths         string                 `protobuf:"bytes,6,opt,name=paths,proto3" json:"paths,omitempty"`            //路径
	Intro         string                 `protobuf:"bytes,7,opt,name=intro,proto3" json:"intro,omitempty"`            //简介
	Icon          string                 `protobuf:"bytes,8,opt,name=icon,proto3" json:"icon,omitempty"`              //图标
	Sort          int32                  `protobuf:"varint,9,opt,name=sort,proto3" json:"sort,omitempty"`             //排序
	Status        int32                  `protobuf:"varint,10,opt,name=status,proto3" json:"status,omitempty"`        // 状态：1-正常，2停用
	CreatedAt     string                 `protobuf:"bytes,11,opt,name=created_at,proto3" json:"created_at,omitempty"` // 创建时间
	Categories    []*CategoriesItem      `protobuf:"bytes,12,rep,name=categories,proto3" json:"categories,omitempty"` // 子集
	Keys          string                 `protobuf:"bytes,13,opt,name=keys,proto3" json:"keys,omitempty"`             //关键词
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CategoriesItem) Reset() {
	*x = CategoriesItem{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[19]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CategoriesItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CategoriesItem) ProtoMessage() {}

func (x *CategoriesItem) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[19]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CategoriesItem.ProtoReflect.Descriptor instead.
func (*CategoriesItem) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{19}
}

func (x *CategoriesItem) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *CategoriesItem) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *CategoriesItem) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *CategoriesItem) GetEnTitle() string {
	if x != nil {
		return x.EnTitle
	}
	return ""
}

func (x *CategoriesItem) GetParentId() int64 {
	if x != nil {
		return x.ParentId
	}
	return 0
}

func (x *CategoriesItem) GetPaths() string {
	if x != nil {
		return x.Paths
	}
	return ""
}

func (x *CategoriesItem) GetIntro() string {
	if x != nil {
		return x.Intro
	}
	return ""
}

func (x *CategoriesItem) GetIcon() string {
	if x != nil {
		return x.Icon
	}
	return ""
}

func (x *CategoriesItem) GetSort() int32 {
	if x != nil {
		return x.Sort
	}
	return 0
}

func (x *CategoriesItem) GetStatus() int32 {
	if x != nil {
		return x.Status
	}
	return 0
}

func (x *CategoriesItem) GetCreatedAt() string {
	if x != nil {
		return x.CreatedAt
	}
	return ""
}

func (x *CategoriesItem) GetCategories() []*CategoriesItem {
	if x != nil {
		return x.Categories
	}
	return nil
}

func (x *CategoriesItem) GetKeys() string {
	if x != nil {
		return x.Keys
	}
	return ""
}

type ProductItem struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	Id             int64                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`                           //商品ID
	Identity       string                 `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"`                //商品唯一码
	SupplyId       int64                  `protobuf:"varint,3,opt,name=supply_id,proto3" json:"supply_id,omitempty"`             //供应商ID
	CategoryId     []int64                `protobuf:"varint,4,rep,packed,name=category_id,proto3" json:"category_id,omitempty"`  //分类ID
	Title          string                 `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"`                      //商品标题
	MeasuringName  string                 `protobuf:"bytes,6,opt,name=measuring_name,proto3" json:"measuring_name,omitempty"`    // 测量单位名称
	SellMax        int64                  `protobuf:"varint,7,opt,name=sell_max,proto3" json:"sell_max,omitempty"`               // 最大限购数量
	SellMin        int64                  `protobuf:"varint,8,opt,name=sell_min,proto3" json:"sell_min,omitempty"`               // 最小限购数量
	Wastage        int64                  `protobuf:"varint,9,opt,name=wastage,proto3" json:"wastage,omitempty"`                 // 损耗率
	StandardNumber string                 `protobuf:"bytes,10,opt,name=standard_number,proto3" json:"standard_number,omitempty"` // 产品标准号
	Brand          string                 `protobuf:"bytes,11,opt,name=brand,proto3" json:"brand,omitempty"`                     // 品牌名称
	StockType      int64                  `protobuf:"varint,12,opt,name=stock_type,proto3" json:"stock_type,omitempty"`          // 库存计数方式：1-买方下单减库存，2-完成签约减库存
	Status         int32                  `protobuf:"varint,13,opt,name=status,proto3" json:"status,omitempty"`                  // 商品状态：1-已上架，2-自动上架等待中，3-禁用 ，4-草稿,5-未上架
	PutawayTime    string                 `protobuf:"bytes,14,opt,name=putaway_time,proto3" json:"putaway_time,omitempty"`       // 预定的上架时间 YYYY-MM-DD HH:mm:ss
	CoverImage     string                 `protobuf:"bytes,15,opt,name=cover_image,proto3" json:"cover_image,omitempty"`         //商品封面图片
	Content        string                 `protobuf:"bytes,16,opt,name=content,proto3" json:"content,omitempty"`                 //商品详情
	StoreId        int64                  `protobuf:"varint,17,opt,name=store_id,proto3" json:"store_id,omitempty"`              // 店铺的ID
	StoreIdentity  string                 `protobuf:"bytes,18,opt,name=store_identity,proto3" json:"store_identity,omitempty"`   // 店铺唯一标识
	TemplateId     int32                  `protobuf:"varint,19,opt,name=template_id,proto3" json:"template_id,omitempty"`        // 运费模板id
	Note           string                 `protobuf:"bytes,20,opt,name=note,proto3" json:"note,omitempty"`                       // 备注
	Images         []*PhotoItem           `protobuf:"bytes,21,rep,name=images,proto3" json:"images,omitempty"`                   // 产品图片
	Specification  []*SpecItem            `protobuf:"bytes,22,rep,name=specification,proto3" json:"specification,omitempty"`     // 产品规格信息
	RecentNumber   int64                  `protobuf:"varint,23,opt,name=recent_number,proto3" json:"recent_number,omitempty"`    // 近期销售数量
	SaleTotal      int64                  `protobuf:"varint,24,opt,name=sale_total,proto3" json:"sale_total,omitempty"`          // 销售总数量
	CreatedAt      string                 `protobuf:"bytes,25,opt,name=created_at,proto3" json:"created_at,omitempty"`           // 创建时间
	Limitation     int64                  `protobuf:"varint,26,opt,name=limitation,proto3" json:"limitation,omitempty"`          // 区域限制：1不限制，2限制
	LiTemplateId   int64                  `protobuf:"varint,27,opt,name=liTemplate_id,proto3" json:"liTemplate_id,omitempty"`    // 区域限制的模板id
	Price          int64                  `protobuf:"varint,28,opt,name=price,proto3" json:"price,omitempty"`                    // 售价(选择价格最低的规格数据)
	Stock          int64                  `protobuf:"varint,29,opt,name=stock,proto3" json:"stock,omitempty"`                    // 库存(选择价格最低的规格数据)
	Category       string                 `protobuf:"bytes,30,opt,name=category,proto3" json:"category,omitempty"`               // 分类名称
	SerialId       string                 `protobuf:"bytes,31,opt,name=serial_id,proto3" json:"serial_id,omitempty"`             // 产品序号
	GasTypes       int64                  `protobuf:"varint,32,opt,name=gas_types,proto3" json:"gas_types,omitempty"`            // 产品分类2：1查看非燃气商品；2按瓶计算的产品；3按kg计算的产品
	SpecId         []int64                `protobuf:"varint,33,rep,packed,name=spec_id,proto3" json:"spec_id,omitempty"`         // 规格ID
	Categories     []*CategoriesItem      `protobuf:"bytes,34,rep,name=categories,proto3" json:"categories,omitempty"`           // 分类
	SupplyName     string                 `protobuf:"bytes,35,opt,name=supply_name,proto3" json:"supply_name,omitempty"`         // 供应商名称
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *ProductItem) Reset() {
	*x = ProductItem{}
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[20]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ProductItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ProductItem) ProtoMessage() {}

func (x *ProductItem) ProtoReflect() protoreflect.Message {
	mi := &file_module_ec_mall_proto_product_proto_msgTypes[20]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ProductItem.ProtoReflect.Descriptor instead.
func (*ProductItem) Descriptor() ([]byte, []int) {
	return file_module_ec_mall_proto_product_proto_rawDescGZIP(), []int{20}
}

func (x *ProductItem) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *ProductItem) GetIdentity() string {
	if x != nil {
		return x.Identity
	}
	return ""
}

func (x *ProductItem) GetSupplyId() int64 {
	if x != nil {
		return x.SupplyId
	}
	return 0
}

func (x *ProductItem) GetCategoryId() []int64 {
	if x != nil {
		return x.CategoryId
	}
	return nil
}

func (x *ProductItem) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *ProductItem) GetMeasuringName() string {
	if x != nil {
		return x.MeasuringName
	}
	return ""
}

func (x *ProductItem) GetSellMax() int64 {
	if x != nil {
		return x.SellMax
	}
	return 0
}

func (x *ProductItem) GetSellMin() int64 {
	if x != nil {
		return x.SellMin
	}
	return 0
}

func (x *ProductItem) GetWastage() int64 {
	if x != nil {
		return x.Wastage
	}
	return 0
}

func (x *ProductItem) GetStandardNumber() string {
	if x != nil {
		return x.StandardNumber
	}
	return ""
}

func (x *ProductItem) GetBrand() string {
	if x != nil {
		return x.Brand
	}
	return ""
}

func (x *ProductItem) GetStockType() int64 {
	if x != nil {
		return x.StockType
	}
	return 0
}

func (x *ProductItem) GetStatus() int32 {
	if x != nil {
		return x.Status
	}
	return 0
}

func (x *ProductItem) GetPutawayTime() string {
	if x != nil {
		return x.PutawayTime
	}
	return ""
}

func (x *ProductItem) GetCoverImage() string {
	if x != nil {
		return x.CoverImage
	}
	return ""
}

func (x *ProductItem) GetContent() string {
	if x != nil {
		return x.Content
	}
	return ""
}

func (x *ProductItem) GetStoreId() int64 {
	if x != nil {
		return x.StoreId
	}
	return 0
}

func (x *ProductItem) GetStoreIdentity() string {
	if x != nil {
		return x.StoreIdentity
	}
	return ""
}

func (x *ProductItem) GetTemplateId() int32 {
	if x != nil {
		return x.TemplateId
	}
	return 0
}

func (x *ProductItem) GetNote() string {
	if x != nil {
		return x.Note
	}
	return ""
}

func (x *ProductItem) GetImages() []*PhotoItem {
	if x != nil {
		return x.Images
	}
	return nil
}

func (x *ProductItem) GetSpecification() []*SpecItem {
	if x != nil {
		return x.Specification
	}
	return nil
}

func (x *ProductItem) GetRecentNumber() int64 {
	if x != nil {
		return x.RecentNumber
	}
	return 0
}

func (x *ProductItem) GetSaleTotal() int64 {
	if x != nil {
		return x.SaleTotal
	}
	return 0
}

func (x *ProductItem) GetCreatedAt() string {
	if x != nil {
		return x.CreatedAt
	}
	return ""
}

func (x *ProductItem) GetLimitation() int64 {
	if x != nil {
		return x.Limitation
	}
	return 0
}

func (x *ProductItem) GetLiTemplateId() int64 {
	if x != nil {
		return x.LiTemplateId
	}
	return 0
}

func (x *ProductItem) GetPrice() int64 {
	if x != nil {
		return x.Price
	}
	return 0
}

func (x *ProductItem) GetStock() int64 {
	if x != nil {
		return x.Stock
	}
	return 0
}

func (x *ProductItem) GetCategory() string {
	if x != nil {
		return x.Category
	}
	return ""
}

func (x *ProductItem) GetSerialId() string {
	if x != nil {
		return x.SerialId
	}
	return ""
}

func (x *ProductItem) GetGasTypes() int64 {
	if x != nil {
		return x.GasTypes
	}
	return 0
}

func (x *ProductItem) GetSpecId() []int64 {
	if x != nil {
		return x.SpecId
	}
	return nil
}

func (x *ProductItem) GetCategories() []*CategoriesItem {
	if x != nil {
		return x.Categories
	}
	return nil
}

func (x *ProductItem) GetSupplyName() string {
	if x != nil {
		return x.SupplyName
	}
	return ""
}

var File_module_ec_mall_proto_product_proto protoreflect.FileDescriptor

const file_module_ec_mall_proto_product_proto_rawDesc = "" +
	"\n" +
	"\"module/ec/mall/proto/product.proto\x12\x04mall\x1a module/ec/mall/proto/const.proto\"b\n" +
	"\bAttrItem\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n" +
	"\x04name\x18\x02 \x01(\tR\x04name\x12\x1c\n" +
	"\tparent_id\x18\x03 \x01(\x05R\tparent_id\x12\x14\n" +
	"\x05value\x18\x04 \x01(\tR\x05value\"\xc1\x03\n" +
	"\vCommentItem\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
	"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x1e\n" +
	"\n" +
	"created_at\x18\x03 \x01(\tR\n" +
	"created_at\x12\x1c\n" +
	"\tnick_name\x18\x04 \x01(\tR\tnick_name\x12\x14\n" +
	"\x05score\x18\x05 \x01(\x05R\x05score\x12\x18\n" +
	"\acomment\x18\x06 \x01(\tR\acomment\x12\x14\n" +
	"\x05reply\x18\a \x01(\tR\x05reply\x12*\n" +
	"\x10product_identity\x18\b \x01(\tR\x10product_identity\x12&\n" +
	"\x0estore_identity\x18\t \x01(\tR\x0estore_identity\x12$\n" +
	"\rspec_identity\x18\n" +
	" \x01(\tR\rspec_identity\x12*\n" +
	"\x10comment_identity\x18\v \x01(\tR\x10comment_identity\x12\x18\n" +
	"\aproduct\x18\f \x01(\tR\aproduct\x12\"\n" +
	"\fproduct_spec\x18\r \x01(\tR\fproduct_spec\x12\x1e\n" +
	"\n" +
	"is_comment\x18\x0e \x01(\bR\n" +
	"is_comment\"\xcb\x03\n" +
	"\x0eCommentItemRep\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
	"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x1e\n" +
	"\n" +
	"created_at\x18\x03 \x01(\tR\n" +
	"created_at\x12\x1c\n" +
	"\tnick_name\x18\x04 \x01(\tR\tnick_name\x12\x14\n" +
	"\x05score\x18\x05 \x01(\x05R\x05score\x12\x18\n" +
	"\acomment\x18\x06 \x01(\tR\acomment\x12\x14\n" +
	"\x05reply\x18\a \x01(\tR\x05reply\x12*\n" +
	"\x10product_identity\x18\b \x01(\tR\x10product_identity\x12&\n" +
	"\x0estore_identity\x18\t \x01(\tR\x0estore_identity\x12$\n" +
	"\rspec_identity\x18\n" +
	" \x01(\tR\rspec_identity\x12*\n" +
	"\x10comment_identity\x18\v \x01(\tR\x10comment_identity\x12%\n" +
	"\x04list\x18\f \x03(\v2\x11.mall.CommentItemR\x04list\x12\x18\n" +
	"\aproduct\x18\r \x01(\tR\aproduct\x12\"\n" +
	"\fproduct_spec\x18\x0e \x01(\tR\fproduct_spec\"/\n" +
	"\x13DetailBySpecRequest\x12\x18\n" +
	"\aspec_no\x18\x01 \x01(\tR\aspec_no\"?\n" +
	"\tOpRequest\x12\x1a\n" +
	"\bidentity\x18\x01 \x03(\tR\bidentity\x12\x16\n" +
	"\x06status\x18\x02 \x01(\x05R\x06status\"C\n" +
	"\rModifyRequest\x12\x1a\n" +
	"\bidentity\x18\x01 \x01(\tR\bidentity\x12\x16\n" +
	"\x06status\x18\x02 \x01(\x05R\x06status\"\x94\x02\n" +
	"\bListItem\x12\x1e\n" +
	"\n" +
	"product_id\x18\x02 \x01(\x03R\n" +
	"product_id\x12\x18\n" +
	"\aproduct\x18\x03 \x01(\tR\aproduct\x12\x18\n" +
	"\aspec_id\x18\x04 \x01(\x03R\aspec_id\x12\x12\n" +
	"\x04spec\x18\x05 \x01(\tR\x04spec\x12\x18\n" +
	"\aspec_no\x18\x06 \x01(\tR\aspec_no\x12\x14\n" +
	"\x05price\x18\a \x01(\x03R\x05price\x12\x14\n" +
	"\x05count\x18\b \x01(\x03R\x05count\x12\x10\n" +
	"\x03img\x18\t \x01(\tR\x03img\x12*\n" +
	"\x10product_identity\x18\n" +
	" \x01(\tR\x10product_identity\x12\x1c\n" +
	"\tserial_id\x18\v \x01(\tR\tserial_id\"#\n" +
	"\x11ListWithIdRequest\x12\x0e\n" +
	"\x02id\x18\x01 \x03(\x03R\x02id\"5\n" +
	"\x0fListWithIdReply\x12\"\n" +
	"\x04data\x18\x01 \x03(\v2\x0e.mall.ListItemR\x04data\"G\n" +
	"\n" +
	"PhotoReply\x12\x14\n" +
	"\x05count\x18\x01 \x01(\x03R\x05count\x12#\n" +
	"\x04data\x18\x02 \x03(\v2\x0f.mall.PhotoItemR\x04data\"E\n" +
	"\tSpecReply\x12\x14\n" +
	"\x05count\x18\x01 \x01(\x03R\x05count\x12\"\n" +
	"\x04data\x18\x02 \x03(\v2\x0e.mall.SpecItemR\x04data\"R\n" +
	"\x10CommentListReply\x12\x14\n" +
	"\x05count\x18\x01 \x01(\x03R\x05count\x12(\n" +
	"\x04data\x18\x02 \x03(\v2\x14.mall.CommentItemRepR\x04data\"t\n" +
	"\x0eStatisticReply\x12\x14\n" +
	"\x05total\x18\x01 \x01(\x03R\x05total\x12\x18\n" +
	"\aselling\x18\x02 \x01(\x03R\aselling\x12\x1c\n" +
	"\tforbidden\x18\x03 \x01(\x03R\tforbidden\x12\x14\n" +
	"\x05draft\x18\x04 \x01(\x03R\x05draft\"T\n" +
	"\x10OrgBySpecIdReply\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
	"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x14\n" +
	"\x05title\x18\x03 \x01(\tR\x05title\"\x99\x03\n" +
	"\aSubjoin\x12&\n" +
	"\x0ecategory_paths\x18\x01 \x01(\tR\x0ecategory_paths\x12\x1c\n" +
	"\tsub_title\x18\x02 \x01(\tR\tsub_title\x12\x18\n" +
	"\akeyword\x18\x03 \x01(\tR\akeyword\x12\x14\n" +
	"\x05stock\x18\x04 \x01(\x05R\x05stock\x12 \n" +
	"\vsales_price\x18\x05 \x01(\x03R\vsales_price\x12\x12\n" +
	"\x04args\x18\x06 \x01(\tR\x04args\x12$\n" +
	"\rcomment_total\x18\a \x01(\x05R\rcomment_total\x12\x1e\n" +
	"\n" +
	"sale_total\x18\b \x01(\x05R\n" +
	"sale_total\x12\x1e\n" +
	"\n" +
	"view_total\x18\t \x01(\x05R\n" +
	"view_total\x12 \n" +
	"\vimage_total\x18\n" +
	" \x01(\x05R\vimage_total\x12\x1c\n" +
	"\trecommend\x18\v \x01(\x05R\trecommend\x12\x12\n" +
	"\x04sort\x18\f \x01(\x05R\x04sort\x12\x14\n" +
	"\x05types\x18\r \x01(\x05R\x05types\x12\x12\n" +
	"\x04star\x18\x0e \x01(\x03R\x04star\"H\n" +
	"\tListReply\x12\x14\n" +
	"\x05count\x18\x01 \x01(\x03R\x05count\x12%\n" +
	"\x04data\x18\x02 \x03(\v2\x11.mall.ProductItemR\x04data\"\x97\x04\n" +
	"\vProductBase\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
	"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x1c\n" +
	"\tsupply_id\x18\x04 \x01(\x03R\tsupply_id\x12 \n" +
	"\vcategory_id\x18\x06 \x01(\x03R\vcategory_id\x12\x14\n" +
	"\x05title\x18\b \x01(\tR\x05title\x12&\n" +
	"\x0emeasuring_name\x18c \x01(\tR\x0emeasuring_name\x12\x1a\n" +
	"\bsell_max\x18a \x01(\x03R\bsell_max\x12\x1a\n" +
	"\bsell_min\x18` \x01(\x03R\bsell_min\x12\x18\n" +
	"\awastage\x18_ \x01(\x03R\awastage\x12(\n" +
	"\x0fstandard_number\x18^ \x01(\tR\x0fstandard_number\x12\x14\n" +
	"\x05brand\x18] \x01(\tR\x05brand\x12\x1e\n" +
	"\n" +
	"stock_type\x18\\ \x01(\x03R\n" +
	"stock_type\x12\x16\n" +
	"\x06status\x18[ \x01(\x05R\x06status\x12\"\n" +
	"\fputaway_time\x18Z \x01(\tR\fputaway_time\x12 \n" +
	"\vcover_image\x18\v \x01(\tR\vcover_image\x12\x16\n" +
	"\x06images\x18\x18 \x03(\tR\x06images\x12\x18\n" +
	"\acontent\x18\x0e \x01(\tR\acontent\x12\x1c\n" +
	"\tserial_id\x18\x0f \x01(\tR\tserial_id\"\xf8\x03\n" +
	"\bSpecItem\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
	"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x1c\n" +
	"\tsupply_id\x18\x03 \x01(\x03R\tsupply_id\x12*\n" +
	"\x10product_identity\x18\x04 \x01(\tR\x10product_identity\x12&\n" +
	"\x0estore_identity\x18\x05 \x01(\tR\x0estore_identity\x12\x14\n" +
	"\x05title\x18\x06 \x01(\tR\x05title\x12\x1e\n" +
	"\n" +
	"stock_type\x18\a \x01(\x05R\n" +
	"stock_type\x12\x14\n" +
	"\x05stock\x18\b \x01(\x03R\x05stock\x12\x14\n" +
	"\x05price\x18\t \x01(\x03R\x05price\x12\"\n" +
	"\fdirect_sales\x18\n" +
	" \x01(\x03R\fdirect_sales\x12\x18\n" +
	"\atp_type\x18\v \x01(\x05R\atp_type\x12\x1e\n" +
	"\n" +
	"ds_tp_type\x18\f \x01(\x05R\n" +
	"ds_tp_type\x12\x10\n" +
	"\x03img\x18\r \x01(\tR\x03img\x12\x18\n" +
	"\aspec_no\x18\x0e \x01(\tR\aspec_no\x12\x18\n" +
	"\akeyword\x18\x0f \x01(\tR\akeyword\x12*\n" +
	"\x10purchasing_price\x18\x10 \x01(\x03R\x10purchasing_price\x12\x1c\n" +
	"\twholesale\x18\x11 \x01(\x03R\twholesale\"\xb3\x01\n" +
	"\tPhotoItem\x12\x12\n" +
	"\x04name\x18\x01 \x01(\tR\x04name\x12\x1a\n" +
	"\bidentity\x18\x02 \x01(\tR\bidentity\x12*\n" +
	"\x10product_identity\x18\x03 \x01(\tR\x10product_identity\x12\x10\n" +
	"\x03url\x18\x04 \x01(\tR\x03url\x12\x12\n" +
	"\x04sort\x18\x05 \x01(\x05R\x04sort\x12\x14\n" +
	"\x05types\x18\x06 \x01(\tR\x05types\x12\x0e\n" +
	"\x02id\x18\a \x01(\x03R\x02id\"\xe2\x02\n" +
	"\x0eCategoriesItem\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
	"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x14\n" +
	"\x05title\x18\x03 \x01(\tR\x05title\x12\x1a\n" +
	"\ben_title\x18\x04 \x01(\tR\ben_title\x12\x1c\n" +
	"\tparent_id\x18\x05 \x01(\x03R\tparent_id\x12\x14\n" +
	"\x05paths\x18\x06 \x01(\tR\x05paths\x12\x14\n" +
	"\x05intro\x18\a \x01(\tR\x05intro\x12\x12\n" +
	"\x04icon\x18\b \x01(\tR\x04icon\x12\x12\n" +
	"\x04sort\x18\t \x01(\x05R\x04sort\x12\x16\n" +
	"\x06status\x18\n" +
	" \x01(\x05R\x06status\x12\x1e\n" +
	"\n" +
	"created_at\x18\v \x01(\tR\n" +
	"created_at\x124\n" +
	"\n" +
	"categories\x18\f \x03(\v2\x14.mall.CategoriesItemR\n" +
	"categories\x12\x12\n" +
	"\x04keys\x18\r \x01(\tR\x04keys\"\xdc\b\n" +
	"\vProductItem\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
	"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x1c\n" +
	"\tsupply_id\x18\x03 \x01(\x03R\tsupply_id\x12 \n" +
	"\vcategory_id\x18\x04 \x03(\x03R\vcategory_id\x12\x14\n" +
	"\x05title\x18\x05 \x01(\tR\x05title\x12&\n" +
	"\x0emeasuring_name\x18\x06 \x01(\tR\x0emeasuring_name\x12\x1a\n" +
	"\bsell_max\x18\a \x01(\x03R\bsell_max\x12\x1a\n" +
	"\bsell_min\x18\b \x01(\x03R\bsell_min\x12\x18\n" +
	"\awastage\x18\t \x01(\x03R\awastage\x12(\n" +
	"\x0fstandard_number\x18\n" +
	" \x01(\tR\x0fstandard_number\x12\x14\n" +
	"\x05brand\x18\v \x01(\tR\x05brand\x12\x1e\n" +
	"\n" +
	"stock_type\x18\f \x01(\x03R\n" +
	"stock_type\x12\x16\n" +
	"\x06status\x18\r \x01(\x05R\x06status\x12\"\n" +
	"\fputaway_time\x18\x0e \x01(\tR\fputaway_time\x12 \n" +
	"\vcover_image\x18\x0f \x01(\tR\vcover_image\x12\x18\n" +
	"\acontent\x18\x10 \x01(\tR\acontent\x12\x1a\n" +
	"\bstore_id\x18\x11 \x01(\x03R\bstore_id\x12&\n" +
	"\x0estore_identity\x18\x12 \x01(\tR\x0estore_identity\x12 \n" +
	"\vtemplate_id\x18\x13 \x01(\x05R\vtemplate_id\x12\x12\n" +
	"\x04note\x18\x14 \x01(\tR\x04note\x12'\n" +
	"\x06images\x18\x15 \x03(\v2\x0f.mall.PhotoItemR\x06images\x124\n" +
	"\rspecification\x18\x16 \x03(\v2\x0e.mall.SpecItemR\rspecification\x12$\n" +
	"\rrecent_number\x18\x17 \x01(\x03R\rrecent_number\x12\x1e\n" +
	"\n" +
	"sale_total\x18\x18 \x01(\x03R\n" +
	"sale_total\x12\x1e\n" +
	"\n" +
	"created_at\x18\x19 \x01(\tR\n" +
	"created_at\x12\x1e\n" +
	"\n" +
	"limitation\x18\x1a \x01(\x03R\n" +
	"limitation\x12$\n" +
	"\rliTemplate_id\x18\x1b \x01(\x03R\rliTemplate_id\x12\x14\n" +
	"\x05price\x18\x1c \x01(\x03R\x05price\x12\x14\n" +
	"\x05stock\x18\x1d \x01(\x03R\x05stock\x12\x1a\n" +
	"\bcategory\x18\x1e \x01(\tR\bcategory\x12\x1c\n" +
	"\tserial_id\x18\x1f \x01(\tR\tserial_id\x12\x1c\n" +
	"\tgas_types\x18  \x01(\x03R\tgas_types\x12\x18\n" +
	"\aspec_id\x18! \x03(\x03R\aspec_id\x124\n" +
	"\n" +
	"categories\x18\" \x03(\v2\x14.mall.CategoriesItemR\n" +
	"categories\x12 \n" +
	"\vsupply_name\x18# \x01(\tR\vsupply_name2\xef\v\n" +
	"\aProduct\x12@\n" +
	"\tItemFetch\x12 .ec_mall_blocks.MallFetchRequest\x1a\x0f.mall.ListReply\"\x00\x12?\n" +
	"\n" +
	"ItemDetail\x12\x1c.ec_mall_blocks.IdentRequest\x1a\x11.mall.ProductItem\"\x00\x12K\n" +
	"\x12ItemDetailBySerial\x12\".ec_mall_blocks.StoreSerialRequest\x1a\x0f.mall.ListReply\"\x00\x12?\n" +
	"\x10ItemDetailBySpec\x12\x19.mall.DetailBySpecRequest\x1a\x0e.mall.ListItem\"\x00\x12F\n" +
	"\n" +
	"ItemCreate\x12\x11.mall.ProductItem\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12Q\n" +
	"\n" +
	"ItemDelete\x12\x1c.ec_mall_blocks.IdentRequest\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12H\n" +
	"\n" +
	"ItemModify\x12\x13.mall.ModifyRequest\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12E\n" +
	"\vItemBatchOp\x12\x0f.mall.OpRequest\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12@\n" +
	"\tSpecFetch\x12 .ec_mall_blocks.MallFetchRequest\x1a\x0f.mall.SpecReply\"\x00\x12C\n" +
	"\n" +
	"SpecCreate\x12\x0e.mall.SpecItem\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12C\n" +
	"\n" +
	"SpecModify\x12\x0e.mall.SpecItem\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12Q\n" +
	"\n" +
	"SpecDelete\x12\x1c.ec_mall_blocks.IdentRequest\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12<\n" +
	"\n" +
	"SpecDetail\x12\x1c.ec_mall_blocks.IdentRequest\x1a\x0e.mall.SpecItem\"\x00\x12E\n" +
	"\vPhotoCreate\x12\x0f.mall.PhotoItem\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12R\n" +
	"\vPhotoDelete\x12\x1c.ec_mall_blocks.IdentRequest\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x120\n" +
	"\tPhotoList\x12\x0f.mall.PhotoItem\x1a\x10.mall.PhotoReply\"\x00\x12J\n" +
	"\fCommentFetch\x12 .ec_mall_blocks.MallFetchRequest\x1a\x16.mall.CommentListReply\"\x00\x12I\n" +
	"\rCommentCreate\x12\x11.mall.CommentItem\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12E\n" +
	"\tCommentRe\x12\x11.mall.CommentItem\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12T\n" +
	"\rCommentDelete\x12\x1c.ec_mall_blocks.IdentRequest\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00\x12I\n" +
	"\rCommentModify\x12\x11.mall.CommentItem\x1a#.ec_mall_blocks.IdentityStatusReply\"\x00B!Z\x1fbsm/full/module/ec/mall/pb;mallb\x06proto3"

var (
	file_module_ec_mall_proto_product_proto_rawDescOnce sync.Once
	file_module_ec_mall_proto_product_proto_rawDescData []byte
)

func file_module_ec_mall_proto_product_proto_rawDescGZIP() []byte {
	file_module_ec_mall_proto_product_proto_rawDescOnce.Do(func() {
		file_module_ec_mall_proto_product_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_module_ec_mall_proto_product_proto_rawDesc), len(file_module_ec_mall_proto_product_proto_rawDesc)))
	})
	return file_module_ec_mall_proto_product_proto_rawDescData
}

var file_module_ec_mall_proto_product_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
var file_module_ec_mall_proto_product_proto_goTypes = []any{
	(*AttrItem)(nil),            // 0: mall.AttrItem
	(*CommentItem)(nil),         // 1: mall.CommentItem
	(*CommentItemRep)(nil),      // 2: mall.CommentItemRep
	(*DetailBySpecRequest)(nil), // 3: mall.DetailBySpecRequest
	(*OpRequest)(nil),           // 4: mall.OpRequest
	(*ModifyRequest)(nil),       // 5: mall.ModifyRequest
	(*ListItem)(nil),            // 6: mall.ListItem
	(*ListWithIdRequest)(nil),   // 7: mall.ListWithIdRequest
	(*ListWithIdReply)(nil),     // 8: mall.ListWithIdReply
	(*PhotoReply)(nil),          // 9: mall.PhotoReply
	(*SpecReply)(nil),           // 10: mall.SpecReply
	(*CommentListReply)(nil),    // 11: mall.CommentListReply
	(*StatisticReply)(nil),      // 12: mall.StatisticReply
	(*OrgBySpecIdReply)(nil),    // 13: mall.OrgBySpecIdReply
	(*Subjoin)(nil),             // 14: mall.Subjoin
	(*ListReply)(nil),           // 15: mall.ListReply
	(*ProductBase)(nil),         // 16: mall.ProductBase
	(*SpecItem)(nil),            // 17: mall.SpecItem
	(*PhotoItem)(nil),           // 18: mall.PhotoItem
	(*CategoriesItem)(nil),      // 19: mall.CategoriesItem
	(*ProductItem)(nil),         // 20: mall.ProductItem
	(*MallFetchRequest)(nil),    // 21: ec_mall_blocks.MallFetchRequest
	(*IdentRequest)(nil),        // 22: ec_mall_blocks.IdentRequest
	(*StoreSerialRequest)(nil),  // 23: ec_mall_blocks.StoreSerialRequest
	(*IdentityStatusReply)(nil), // 24: ec_mall_blocks.IdentityStatusReply
}
var file_module_ec_mall_proto_product_proto_depIdxs = []int32{
	1,  // 0: mall.CommentItemRep.list:type_name -> mall.CommentItem
	6,  // 1: mall.ListWithIdReply.data:type_name -> mall.ListItem
	18, // 2: mall.PhotoReply.data:type_name -> mall.PhotoItem
	17, // 3: mall.SpecReply.data:type_name -> mall.SpecItem
	2,  // 4: mall.CommentListReply.data:type_name -> mall.CommentItemRep
	20, // 5: mall.ListReply.data:type_name -> mall.ProductItem
	19, // 6: mall.CategoriesItem.categories:type_name -> mall.CategoriesItem
	18, // 7: mall.ProductItem.images:type_name -> mall.PhotoItem
	17, // 8: mall.ProductItem.specification:type_name -> mall.SpecItem
	19, // 9: mall.ProductItem.categories:type_name -> mall.CategoriesItem
	21, // 10: mall.Product.ItemFetch:input_type -> ec_mall_blocks.MallFetchRequest
	22, // 11: mall.Product.ItemDetail:input_type -> ec_mall_blocks.IdentRequest
	23, // 12: mall.Product.ItemDetailBySerial:input_type -> ec_mall_blocks.StoreSerialRequest
	3,  // 13: mall.Product.ItemDetailBySpec:input_type -> mall.DetailBySpecRequest
	20, // 14: mall.Product.ItemCreate:input_type -> mall.ProductItem
	22, // 15: mall.Product.ItemDelete:input_type -> ec_mall_blocks.IdentRequest
	5,  // 16: mall.Product.ItemModify:input_type -> mall.ModifyRequest
	4,  // 17: mall.Product.ItemBatchOp:input_type -> mall.OpRequest
	21, // 18: mall.Product.SpecFetch:input_type -> ec_mall_blocks.MallFetchRequest
	17, // 19: mall.Product.SpecCreate:input_type -> mall.SpecItem
	17, // 20: mall.Product.SpecModify:input_type -> mall.SpecItem
	22, // 21: mall.Product.SpecDelete:input_type -> ec_mall_blocks.IdentRequest
	22, // 22: mall.Product.SpecDetail:input_type -> ec_mall_blocks.IdentRequest
	18, // 23: mall.Product.PhotoCreate:input_type -> mall.PhotoItem
	22, // 24: mall.Product.PhotoDelete:input_type -> ec_mall_blocks.IdentRequest
	18, // 25: mall.Product.PhotoList:input_type -> mall.PhotoItem
	21, // 26: mall.Product.CommentFetch:input_type -> ec_mall_blocks.MallFetchRequest
	1,  // 27: mall.Product.CommentCreate:input_type -> mall.CommentItem
	1,  // 28: mall.Product.CommentRe:input_type -> mall.CommentItem
	22, // 29: mall.Product.CommentDelete:input_type -> ec_mall_blocks.IdentRequest
	1,  // 30: mall.Product.CommentModify:input_type -> mall.CommentItem
	15, // 31: mall.Product.ItemFetch:output_type -> mall.ListReply
	20, // 32: mall.Product.ItemDetail:output_type -> mall.ProductItem
	15, // 33: mall.Product.ItemDetailBySerial:output_type -> mall.ListReply
	6,  // 34: mall.Product.ItemDetailBySpec:output_type -> mall.ListItem
	24, // 35: mall.Product.ItemCreate:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 36: mall.Product.ItemDelete:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 37: mall.Product.ItemModify:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 38: mall.Product.ItemBatchOp:output_type -> ec_mall_blocks.IdentityStatusReply
	10, // 39: mall.Product.SpecFetch:output_type -> mall.SpecReply
	24, // 40: mall.Product.SpecCreate:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 41: mall.Product.SpecModify:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 42: mall.Product.SpecDelete:output_type -> ec_mall_blocks.IdentityStatusReply
	17, // 43: mall.Product.SpecDetail:output_type -> mall.SpecItem
	24, // 44: mall.Product.PhotoCreate:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 45: mall.Product.PhotoDelete:output_type -> ec_mall_blocks.IdentityStatusReply
	9,  // 46: mall.Product.PhotoList:output_type -> mall.PhotoReply
	11, // 47: mall.Product.CommentFetch:output_type -> mall.CommentListReply
	24, // 48: mall.Product.CommentCreate:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 49: mall.Product.CommentRe:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 50: mall.Product.CommentDelete:output_type -> ec_mall_blocks.IdentityStatusReply
	24, // 51: mall.Product.CommentModify:output_type -> ec_mall_blocks.IdentityStatusReply
	31, // [31:52] is the sub-list for method output_type
	10, // [10:31] is the sub-list for method input_type
	10, // [10:10] is the sub-list for extension type_name
	10, // [10:10] is the sub-list for extension extendee
	0,  // [0:10] is the sub-list for field type_name
}

func init() { file_module_ec_mall_proto_product_proto_init() }
func file_module_ec_mall_proto_product_proto_init() {
	if File_module_ec_mall_proto_product_proto != nil {
		return
	}
	file_module_ec_mall_proto_const_proto_init()
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_module_ec_mall_proto_product_proto_rawDesc), len(file_module_ec_mall_proto_product_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   21,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_module_ec_mall_proto_product_proto_goTypes,
		DependencyIndexes: file_module_ec_mall_proto_product_proto_depIdxs,
		MessageInfos:      file_module_ec_mall_proto_product_proto_msgTypes,
	}.Build()
	File_module_ec_mall_proto_product_proto = out.File
	file_module_ec_mall_proto_product_proto_goTypes = nil
	file_module_ec_mall_proto_product_proto_depIdxs = nil
}
