feat: product number
This commit is contained in:
@@ -106,6 +106,7 @@ var (
|
||||
|
||||
// ErrorNotFund 数据类
|
||||
ErrorFormatDataError = Status{Code: 11010, Msg: "格式化数据出错"}
|
||||
ErrorStockNotEnough = Status{Code: 11014, Msg: "库存不足"}
|
||||
|
||||
// ——————————————————————————————————————————————————————————————————————————————————————
|
||||
|
||||
|
||||
+178
-49
@@ -1,7 +1,7 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.36.11
|
||||
// protoc v4.25.8
|
||||
// protoc v3.19.4
|
||||
// source: product/product.proto
|
||||
|
||||
package product
|
||||
@@ -1069,6 +1069,119 @@ func (x *EditSusceptibleReq) GetType() uint32 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// type: 1 增加, 2 减少;number 为变更数量
|
||||
type NumberReq struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||
Type uint32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"`
|
||||
Number uint32 `protobuf:"varint,3,opt,name=number,proto3" json:"number,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *NumberReq) Reset() {
|
||||
*x = NumberReq{}
|
||||
mi := &file_product_product_proto_msgTypes[13]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *NumberReq) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*NumberReq) ProtoMessage() {}
|
||||
|
||||
func (x *NumberReq) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_product_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 NumberReq.ProtoReflect.Descriptor instead.
|
||||
func (*NumberReq) Descriptor() ([]byte, []int) {
|
||||
return file_product_product_proto_rawDescGZIP(), []int{13}
|
||||
}
|
||||
|
||||
func (x *NumberReq) GetId() int64 {
|
||||
if x != nil {
|
||||
return x.Id
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *NumberReq) GetType() uint32 {
|
||||
if x != nil {
|
||||
return x.Type
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *NumberReq) GetNumber() uint32 {
|
||||
if x != nil {
|
||||
return x.Number
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type NumberAddReq struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||
Number uint32 `protobuf:"varint,2,opt,name=number,proto3" json:"number,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *NumberAddReq) Reset() {
|
||||
*x = NumberAddReq{}
|
||||
mi := &file_product_product_proto_msgTypes[14]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *NumberAddReq) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*NumberAddReq) ProtoMessage() {}
|
||||
|
||||
func (x *NumberAddReq) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_product_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 NumberAddReq.ProtoReflect.Descriptor instead.
|
||||
func (*NumberAddReq) Descriptor() ([]byte, []int) {
|
||||
return file_product_product_proto_rawDescGZIP(), []int{14}
|
||||
}
|
||||
|
||||
func (x *NumberAddReq) GetId() int64 {
|
||||
if x != nil {
|
||||
return x.Id
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *NumberAddReq) GetNumber() uint32 {
|
||||
if x != nil {
|
||||
return x.Number
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type ItemsData struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
|
||||
@@ -1079,7 +1192,7 @@ type ItemsData struct {
|
||||
|
||||
func (x *ItemsData) Reset() {
|
||||
*x = ItemsData{}
|
||||
mi := &file_product_product_proto_msgTypes[13]
|
||||
mi := &file_product_product_proto_msgTypes[15]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1091,7 +1204,7 @@ func (x *ItemsData) String() string {
|
||||
func (*ItemsData) ProtoMessage() {}
|
||||
|
||||
func (x *ItemsData) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_product_product_proto_msgTypes[13]
|
||||
mi := &file_product_product_proto_msgTypes[15]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -1104,7 +1217,7 @@ func (x *ItemsData) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use ItemsData.ProtoReflect.Descriptor instead.
|
||||
func (*ItemsData) Descriptor() ([]byte, []int) {
|
||||
return file_product_product_proto_rawDescGZIP(), []int{13}
|
||||
return file_product_product_proto_rawDescGZIP(), []int{15}
|
||||
}
|
||||
|
||||
func (x *ItemsData) GetCount() int64 {
|
||||
@@ -1131,7 +1244,7 @@ type VerifyItemsData struct {
|
||||
|
||||
func (x *VerifyItemsData) Reset() {
|
||||
*x = VerifyItemsData{}
|
||||
mi := &file_product_product_proto_msgTypes[14]
|
||||
mi := &file_product_product_proto_msgTypes[16]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1143,7 +1256,7 @@ func (x *VerifyItemsData) String() string {
|
||||
func (*VerifyItemsData) ProtoMessage() {}
|
||||
|
||||
func (x *VerifyItemsData) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_product_product_proto_msgTypes[14]
|
||||
mi := &file_product_product_proto_msgTypes[16]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -1156,7 +1269,7 @@ func (x *VerifyItemsData) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use VerifyItemsData.ProtoReflect.Descriptor instead.
|
||||
func (*VerifyItemsData) Descriptor() ([]byte, []int) {
|
||||
return file_product_product_proto_rawDescGZIP(), []int{14}
|
||||
return file_product_product_proto_rawDescGZIP(), []int{16}
|
||||
}
|
||||
|
||||
func (x *VerifyItemsData) GetCount() int64 {
|
||||
@@ -1193,7 +1306,7 @@ type VerifyParams struct {
|
||||
|
||||
func (x *VerifyParams) Reset() {
|
||||
*x = VerifyParams{}
|
||||
mi := &file_product_product_proto_msgTypes[15]
|
||||
mi := &file_product_product_proto_msgTypes[17]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1205,7 +1318,7 @@ func (x *VerifyParams) String() string {
|
||||
func (*VerifyParams) ProtoMessage() {}
|
||||
|
||||
func (x *VerifyParams) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_product_product_proto_msgTypes[15]
|
||||
mi := &file_product_product_proto_msgTypes[17]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -1218,7 +1331,7 @@ func (x *VerifyParams) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use VerifyParams.ProtoReflect.Descriptor instead.
|
||||
func (*VerifyParams) Descriptor() ([]byte, []int) {
|
||||
return file_product_product_proto_rawDescGZIP(), []int{15}
|
||||
return file_product_product_proto_rawDescGZIP(), []int{17}
|
||||
}
|
||||
|
||||
func (x *VerifyParams) GetId() int64 {
|
||||
@@ -1317,7 +1430,7 @@ type VerifyItem struct {
|
||||
|
||||
func (x *VerifyItem) Reset() {
|
||||
*x = VerifyItem{}
|
||||
mi := &file_product_product_proto_msgTypes[16]
|
||||
mi := &file_product_product_proto_msgTypes[18]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1329,7 +1442,7 @@ func (x *VerifyItem) String() string {
|
||||
func (*VerifyItem) ProtoMessage() {}
|
||||
|
||||
func (x *VerifyItem) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_product_product_proto_msgTypes[16]
|
||||
mi := &file_product_product_proto_msgTypes[18]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -1342,7 +1455,7 @@ func (x *VerifyItem) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use VerifyItem.ProtoReflect.Descriptor instead.
|
||||
func (*VerifyItem) Descriptor() ([]byte, []int) {
|
||||
return file_product_product_proto_rawDescGZIP(), []int{16}
|
||||
return file_product_product_proto_rawDescGZIP(), []int{18}
|
||||
}
|
||||
|
||||
func (x *VerifyItem) GetName() string {
|
||||
@@ -1383,7 +1496,7 @@ type NameItem struct {
|
||||
|
||||
func (x *NameItem) Reset() {
|
||||
*x = NameItem{}
|
||||
mi := &file_product_product_proto_msgTypes[17]
|
||||
mi := &file_product_product_proto_msgTypes[19]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1395,7 +1508,7 @@ func (x *NameItem) String() string {
|
||||
func (*NameItem) ProtoMessage() {}
|
||||
|
||||
func (x *NameItem) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_product_product_proto_msgTypes[17]
|
||||
mi := &file_product_product_proto_msgTypes[19]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -1408,7 +1521,7 @@ func (x *NameItem) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use NameItem.ProtoReflect.Descriptor instead.
|
||||
func (*NameItem) Descriptor() ([]byte, []int) {
|
||||
return file_product_product_proto_rawDescGZIP(), []int{17}
|
||||
return file_product_product_proto_rawDescGZIP(), []int{19}
|
||||
}
|
||||
|
||||
func (x *NameItem) GetId() int64 {
|
||||
@@ -1469,7 +1582,7 @@ type Item struct {
|
||||
|
||||
func (x *Item) Reset() {
|
||||
*x = Item{}
|
||||
mi := &file_product_product_proto_msgTypes[18]
|
||||
mi := &file_product_product_proto_msgTypes[20]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -1481,7 +1594,7 @@ func (x *Item) String() string {
|
||||
func (*Item) ProtoMessage() {}
|
||||
|
||||
func (x *Item) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_product_product_proto_msgTypes[18]
|
||||
mi := &file_product_product_proto_msgTypes[20]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -1494,7 +1607,7 @@ func (x *Item) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use Item.ProtoReflect.Descriptor instead.
|
||||
func (*Item) Descriptor() ([]byte, []int) {
|
||||
return file_product_product_proto_rawDescGZIP(), []int{18}
|
||||
return file_product_product_proto_rawDescGZIP(), []int{20}
|
||||
}
|
||||
|
||||
func (x *Item) GetId() int64 {
|
||||
@@ -1860,7 +1973,14 @@ const file_product_product_proto_rawDesc = "" +
|
||||
"\n" +
|
||||
"box_number\x18\n" +
|
||||
" \x01(\x01R\tboxNumber\x12\x12\n" +
|
||||
"\x04type\x18\v \x01(\rR\x04type\"F\n" +
|
||||
"\x04type\x18\v \x01(\rR\x04type\"G\n" +
|
||||
"\tNumberReq\x12\x0e\n" +
|
||||
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n" +
|
||||
"\x04type\x18\x02 \x01(\rR\x04type\x12\x16\n" +
|
||||
"\x06number\x18\x03 \x01(\rR\x06number\"6\n" +
|
||||
"\fNumberAddReq\x12\x0e\n" +
|
||||
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x16\n" +
|
||||
"\x06number\x18\x02 \x01(\rR\x06number\"F\n" +
|
||||
"\tItemsData\x12\x14\n" +
|
||||
"\x05count\x18\x01 \x01(\x03R\x05count\x12#\n" +
|
||||
"\x05items\x18\x02 \x03(\v2\r.product.ItemR\x05items\"R\n" +
|
||||
@@ -1946,7 +2066,8 @@ const file_product_product_proto_rawDesc = "" +
|
||||
"\x06reason\x18\" \x01(\tR\x06reason\x12\x1d\n" +
|
||||
"\n" +
|
||||
"admin_name\x18# \x01(\tR\tadminName\x12\x12\n" +
|
||||
"\x04edit\x18$ \x01(\rR\x04edit2\xa6\t\n" +
|
||||
"\x04edit\x18$ \x01(\rR\x04edit2\xb3\n" +
|
||||
"\n" +
|
||||
"\aProduct\x12M\n" +
|
||||
"\x06Create\x12\x12.product.CreateReq\x1a\x11.product.Response\"\x1c\x82\xd3\xe4\x93\x02\x16:\x01*\"\x11/admin/v3/product\x12N\n" +
|
||||
"\x04Info\x12\x10.product.InfoReq\x1a\x11.product.Response\"!\x82\xd3\xe4\x93\x02\x1b:\x01*\x12\x16/admin/v3/product/info\x12K\n" +
|
||||
@@ -1960,7 +2081,9 @@ const file_product_product_proto_rawDesc = "" +
|
||||
"\tEditApply\x12\x15.product.EditApplyReq\x1a\x11.product.Response\"'\x82\xd3\xe4\x93\x02!:\x01*\"\x1c/admin/v3/product/edit/apply\x12V\n" +
|
||||
"\bEditBase\x12\x14.product.EditBaseReq\x1a\x11.product.Response\"!\x82\xd3\xe4\x93\x02\x1b:\x01*\x1a\x16/admin/v3/product/base\x12k\n" +
|
||||
"\x0fEditSusceptible\x12\x1b.product.EditSusceptibleReq\x1a\x11.product.Response\"(\x82\xd3\xe4\x93\x02\":\x01*\x1a\x1d/admin/v3/product/susceptible\x12k\n" +
|
||||
"\rEditApplyPass\x12\x19.product.EditApplyPassReq\x1a\x11.product.Response\",\x82\xd3\xe4\x93\x02&:\x01*\x1a!/admin/v3/product/edit/apply/passB\x1bZ\x19lone-services/rpc/productb\x06proto3"
|
||||
"\rEditApplyPass\x12\x19.product.EditApplyPassReq\x1a\x11.product.Response\",\x82\xd3\xe4\x93\x02&:\x01*\x1a!/admin/v3/product/edit/apply/pass\x12/\n" +
|
||||
"\x06Number\x12\x12.product.NumberReq\x1a\x11.product.Response\x12Z\n" +
|
||||
"\tNumberAdd\x12\x15.product.NumberAddReq\x1a\x11.product.Response\"#\x82\xd3\xe4\x93\x02\x1d:\x01*\x1a\x18/admin/v3/product/numberB\x1bZ\x19lone-services/rpc/productb\x06proto3"
|
||||
|
||||
var (
|
||||
file_product_product_proto_rawDescOnce sync.Once
|
||||
@@ -1974,7 +2097,7 @@ func file_product_product_proto_rawDescGZIP() []byte {
|
||||
return file_product_product_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_product_product_proto_msgTypes = make([]protoimpl.MessageInfo, 19)
|
||||
var file_product_product_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
|
||||
var file_product_product_proto_goTypes = []any{
|
||||
(*Response)(nil), // 0: product.Response
|
||||
(*CreateReq)(nil), // 1: product.CreateReq
|
||||
@@ -1989,18 +2112,20 @@ var file_product_product_proto_goTypes = []any{
|
||||
(*EditApplyPassReq)(nil), // 10: product.EditApplyPassReq
|
||||
(*EditBaseReq)(nil), // 11: product.EditBaseReq
|
||||
(*EditSusceptibleReq)(nil), // 12: product.EditSusceptibleReq
|
||||
(*ItemsData)(nil), // 13: product.ItemsData
|
||||
(*VerifyItemsData)(nil), // 14: product.VerifyItemsData
|
||||
(*VerifyParams)(nil), // 15: product.VerifyParams
|
||||
(*VerifyItem)(nil), // 16: product.VerifyItem
|
||||
(*NameItem)(nil), // 17: product.NameItem
|
||||
(*Item)(nil), // 18: product.Item
|
||||
(*NumberReq)(nil), // 13: product.NumberReq
|
||||
(*NumberAddReq)(nil), // 14: product.NumberAddReq
|
||||
(*ItemsData)(nil), // 15: product.ItemsData
|
||||
(*VerifyItemsData)(nil), // 16: product.VerifyItemsData
|
||||
(*VerifyParams)(nil), // 17: product.VerifyParams
|
||||
(*VerifyItem)(nil), // 18: product.VerifyItem
|
||||
(*NameItem)(nil), // 19: product.NameItem
|
||||
(*Item)(nil), // 20: product.Item
|
||||
}
|
||||
var file_product_product_proto_depIdxs = []int32{
|
||||
18, // 0: product.ItemsData.items:type_name -> product.Item
|
||||
16, // 1: product.VerifyItemsData.items:type_name -> product.VerifyItem
|
||||
15, // 2: product.VerifyItem.new:type_name -> product.VerifyParams
|
||||
15, // 3: product.VerifyItem.old:type_name -> product.VerifyParams
|
||||
20, // 0: product.ItemsData.items:type_name -> product.Item
|
||||
18, // 1: product.VerifyItemsData.items:type_name -> product.VerifyItem
|
||||
17, // 2: product.VerifyItem.new:type_name -> product.VerifyParams
|
||||
17, // 3: product.VerifyItem.old:type_name -> product.VerifyParams
|
||||
1, // 4: product.Product.Create:input_type -> product.CreateReq
|
||||
2, // 5: product.Product.Info:input_type -> product.InfoReq
|
||||
3, // 6: product.Product.Items:input_type -> product.ItemsReq
|
||||
@@ -2014,21 +2139,25 @@ var file_product_product_proto_depIdxs = []int32{
|
||||
11, // 14: product.Product.EditBase:input_type -> product.EditBaseReq
|
||||
12, // 15: product.Product.EditSusceptible:input_type -> product.EditSusceptibleReq
|
||||
10, // 16: product.Product.EditApplyPass:input_type -> product.EditApplyPassReq
|
||||
0, // 17: product.Product.Create:output_type -> product.Response
|
||||
0, // 18: product.Product.Info:output_type -> product.Response
|
||||
0, // 19: product.Product.Items:output_type -> product.Response
|
||||
0, // 20: product.Product.Names:output_type -> product.Response
|
||||
0, // 21: product.Product.Status:output_type -> product.Response
|
||||
0, // 22: product.Product.Sort:output_type -> product.Response
|
||||
0, // 23: product.Product.Verify:output_type -> product.Response
|
||||
0, // 24: product.Product.VerifyFirst:output_type -> product.Response
|
||||
0, // 25: product.Product.VerifySecond:output_type -> product.Response
|
||||
0, // 26: product.Product.EditApply:output_type -> product.Response
|
||||
0, // 27: product.Product.EditBase:output_type -> product.Response
|
||||
0, // 28: product.Product.EditSusceptible:output_type -> product.Response
|
||||
0, // 29: product.Product.EditApplyPass:output_type -> product.Response
|
||||
17, // [17:30] is the sub-list for method output_type
|
||||
4, // [4:17] is the sub-list for method input_type
|
||||
13, // 17: product.Product.Number:input_type -> product.NumberReq
|
||||
14, // 18: product.Product.NumberAdd:input_type -> product.NumberAddReq
|
||||
0, // 19: product.Product.Create:output_type -> product.Response
|
||||
0, // 20: product.Product.Info:output_type -> product.Response
|
||||
0, // 21: product.Product.Items:output_type -> product.Response
|
||||
0, // 22: product.Product.Names:output_type -> product.Response
|
||||
0, // 23: product.Product.Status:output_type -> product.Response
|
||||
0, // 24: product.Product.Sort:output_type -> product.Response
|
||||
0, // 25: product.Product.Verify:output_type -> product.Response
|
||||
0, // 26: product.Product.VerifyFirst:output_type -> product.Response
|
||||
0, // 27: product.Product.VerifySecond:output_type -> product.Response
|
||||
0, // 28: product.Product.EditApply:output_type -> product.Response
|
||||
0, // 29: product.Product.EditBase:output_type -> product.Response
|
||||
0, // 30: product.Product.EditSusceptible:output_type -> product.Response
|
||||
0, // 31: product.Product.EditApplyPass:output_type -> product.Response
|
||||
0, // 32: product.Product.Number:output_type -> product.Response
|
||||
0, // 33: product.Product.NumberAdd:output_type -> product.Response
|
||||
19, // [19:34] is the sub-list for method output_type
|
||||
4, // [4:19] is the sub-list for method input_type
|
||||
4, // [4:4] is the sub-list for extension type_name
|
||||
4, // [4:4] is the sub-list for extension extendee
|
||||
0, // [0:4] is the sub-list for field type_name
|
||||
@@ -2045,7 +2174,7 @@ func file_product_product_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: unsafe.Slice(unsafe.StringData(file_product_product_proto_rawDesc), len(file_product_product_proto_rawDesc)),
|
||||
NumEnums: 0,
|
||||
NumMessages: 19,
|
||||
NumMessages: 21,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
||||
// versions:
|
||||
// - protoc-gen-go-grpc v1.6.2
|
||||
// - protoc v4.25.8
|
||||
// - protoc v3.19.4
|
||||
// source: product/product.proto
|
||||
|
||||
package product
|
||||
@@ -32,6 +32,8 @@ const (
|
||||
Product_EditBase_FullMethodName = "/product.Product/EditBase"
|
||||
Product_EditSusceptible_FullMethodName = "/product.Product/EditSusceptible"
|
||||
Product_EditApplyPass_FullMethodName = "/product.Product/EditApplyPass"
|
||||
Product_Number_FullMethodName = "/product.Product/Number"
|
||||
Product_NumberAdd_FullMethodName = "/product.Product/NumberAdd"
|
||||
)
|
||||
|
||||
// ProductClient is the client API for Product service.
|
||||
@@ -58,6 +60,11 @@ type ProductClient interface {
|
||||
EditSusceptible(ctx context.Context, in *EditSusceptibleReq, opts ...grpc.CallOption) (*Response, error)
|
||||
// TODO: 临时接口,企微编辑申请审批对接后删除
|
||||
EditApplyPass(ctx context.Context, in *EditApplyPassReq, opts ...grpc.CallOption) (*Response, error)
|
||||
// 增减库存
|
||||
// type: 1 增加, 2 减少
|
||||
Number(ctx context.Context, in *NumberReq, opts ...grpc.CallOption) (*Response, error)
|
||||
// 增加库存
|
||||
NumberAdd(ctx context.Context, in *NumberAddReq, opts ...grpc.CallOption) (*Response, error)
|
||||
}
|
||||
|
||||
type productClient struct {
|
||||
@@ -198,6 +205,26 @@ func (c *productClient) EditApplyPass(ctx context.Context, in *EditApplyPassReq,
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *productClient) Number(ctx context.Context, in *NumberReq, opts ...grpc.CallOption) (*Response, error) {
|
||||
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||
out := new(Response)
|
||||
err := c.cc.Invoke(ctx, Product_Number_FullMethodName, in, out, cOpts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *productClient) NumberAdd(ctx context.Context, in *NumberAddReq, opts ...grpc.CallOption) (*Response, error) {
|
||||
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||
out := new(Response)
|
||||
err := c.cc.Invoke(ctx, Product_NumberAdd_FullMethodName, in, out, cOpts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// ProductServer is the server API for Product service.
|
||||
// All implementations must embed UnimplementedProductServer
|
||||
// for forward compatibility.
|
||||
@@ -222,6 +249,11 @@ type ProductServer interface {
|
||||
EditSusceptible(context.Context, *EditSusceptibleReq) (*Response, error)
|
||||
// TODO: 临时接口,企微编辑申请审批对接后删除
|
||||
EditApplyPass(context.Context, *EditApplyPassReq) (*Response, error)
|
||||
// 增减库存
|
||||
// type: 1 增加, 2 减少
|
||||
Number(context.Context, *NumberReq) (*Response, error)
|
||||
// 增加库存
|
||||
NumberAdd(context.Context, *NumberAddReq) (*Response, error)
|
||||
mustEmbedUnimplementedProductServer()
|
||||
}
|
||||
|
||||
@@ -271,6 +303,12 @@ func (UnimplementedProductServer) EditSusceptible(context.Context, *EditSuscepti
|
||||
func (UnimplementedProductServer) EditApplyPass(context.Context, *EditApplyPassReq) (*Response, error) {
|
||||
return nil, status.Error(codes.Unimplemented, "method EditApplyPass not implemented")
|
||||
}
|
||||
func (UnimplementedProductServer) Number(context.Context, *NumberReq) (*Response, error) {
|
||||
return nil, status.Error(codes.Unimplemented, "method Number not implemented")
|
||||
}
|
||||
func (UnimplementedProductServer) NumberAdd(context.Context, *NumberAddReq) (*Response, error) {
|
||||
return nil, status.Error(codes.Unimplemented, "method NumberAdd not implemented")
|
||||
}
|
||||
func (UnimplementedProductServer) mustEmbedUnimplementedProductServer() {}
|
||||
func (UnimplementedProductServer) testEmbeddedByValue() {}
|
||||
|
||||
@@ -526,6 +564,42 @@ func _Product_EditApplyPass_Handler(srv interface{}, ctx context.Context, dec fu
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Product_Number_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(NumberReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(ProductServer).Number(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: Product_Number_FullMethodName,
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(ProductServer).Number(ctx, req.(*NumberReq))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Product_NumberAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(NumberAddReq)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(ProductServer).NumberAdd(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: Product_NumberAdd_FullMethodName,
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(ProductServer).NumberAdd(ctx, req.(*NumberAddReq))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
// Product_ServiceDesc is the grpc.ServiceDesc for Product service.
|
||||
// It's only intended for direct use with grpc.RegisterService,
|
||||
// and not to be introspected or modified (even as a copy)
|
||||
@@ -585,6 +659,14 @@ var Product_ServiceDesc = grpc.ServiceDesc{
|
||||
MethodName: "EditApplyPass",
|
||||
Handler: _Product_EditApplyPass_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Number",
|
||||
Handler: _Product_Number_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "NumberAdd",
|
||||
Handler: _Product_NumberAdd_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "product/product.proto",
|
||||
|
||||
Binary file not shown.
@@ -92,6 +92,18 @@ service Product {
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
|
||||
// 增减库存
|
||||
// type: 1 增加, 2 减少
|
||||
rpc Number(NumberReq) returns (Response);
|
||||
|
||||
// 增加库存
|
||||
rpc NumberAdd(NumberAddReq) returns (Response) {
|
||||
option (google.api.http) = {
|
||||
put: "/admin/v3/product/number"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
message Response {
|
||||
@@ -207,6 +219,18 @@ message EditSusceptibleReq {
|
||||
uint32 type = 11;
|
||||
}
|
||||
|
||||
// type: 1 增加, 2 减少;number 为变更数量
|
||||
message NumberReq {
|
||||
int64 id = 1;
|
||||
uint32 type = 2;
|
||||
uint32 number = 3;
|
||||
}
|
||||
|
||||
message NumberAddReq {
|
||||
int64 id = 1;
|
||||
uint32 number = 2;
|
||||
}
|
||||
|
||||
message ItemsData {
|
||||
int64 count = 1;
|
||||
repeated Item items = 2;
|
||||
|
||||
@@ -101,7 +101,7 @@ func (l *PolicyLogic) Policy(in *chore.PolicyReq) (*chore.Response, error) {
|
||||
region = "oss-cn-hangzhou"
|
||||
}
|
||||
if endpoint == utils.StringEmpty {
|
||||
endpoint = "https://lone-images.oss-accelerate.aliyuncs.com"
|
||||
endpoint = "https://oss-accelerate.aliyuncs.com"
|
||||
}
|
||||
if host == utils.StringEmpty {
|
||||
host = "https://images.ailuowan.com"
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
roleSessionName = "oss-upload"
|
||||
region = "oss-cn-hangzhou"
|
||||
bucketName = "lone-images"
|
||||
endpoint = "https://lone-images.oss-accelerate.aliyuncs.com"
|
||||
# SDK 会拼成 {bucket}.{endpoint},这里不要再带 bucket 名
|
||||
# 错误示例: lone-images.oss-accelerate... → 实际请求 lone-images.lone-images.oss-accelerate...
|
||||
endpoint = "https://oss-accelerate.aliyuncs.com"
|
||||
host = "https://images.ailuowan.com"
|
||||
dir = "upload/"
|
||||
expireSeconds = 3600
|
||||
|
||||
@@ -11,6 +11,12 @@ const (
|
||||
ProductTryName = "多次试用"
|
||||
)
|
||||
|
||||
// 库存变更类型(服务间 Number 接口)
|
||||
const (
|
||||
NumberTypeAdd uint32 = 1 // 增加
|
||||
NumberTypeSub uint32 = 2 // 减少
|
||||
)
|
||||
|
||||
// 销售模式
|
||||
const (
|
||||
ProductSalesModelOffline = 1 // 线下
|
||||
@@ -109,6 +115,11 @@ type ProductCheckExist struct {
|
||||
Status uint8 `gorm:"column:status"`
|
||||
}
|
||||
|
||||
type ProductNumberInfo struct {
|
||||
Id int `gorm:"column:id"`
|
||||
Number uint `gorm:"column:number"`
|
||||
}
|
||||
|
||||
type ProductVerify struct {
|
||||
Id int `json:"id"`
|
||||
Name string `json:"name,omitempty"`
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package logic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"lone-services/pkg/utils"
|
||||
"lone-services/pkg/validate"
|
||||
product "lone-services/rpc/product/pb"
|
||||
"lone-services/services/product/internal/dao"
|
||||
"lone-services/services/product/internal/svc"
|
||||
"lone-services/services/product/validator"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type NumberAddLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewNumberAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *NumberAddLogic {
|
||||
return &NumberAddLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
func (l *NumberAddLogic) NumberAdd(in *product.NumberAddReq) (*product.Response, error) {
|
||||
var req validator.ProductNumberAddValidator
|
||||
if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty {
|
||||
return outResponse(utils.ErrorParams, msg), nil
|
||||
}
|
||||
|
||||
adminInfo := utils.GetUserFromCtx(l.ctx)
|
||||
if adminInfo.ID < utils.NumberOne {
|
||||
return failResponse(utils.ErrorNoLoginInfo), nil
|
||||
}
|
||||
|
||||
return changeProductNumber(l.Logger, req.Id, dao.NumberTypeAdd, req.Number)
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package logic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"lone-services/pkg/modelbase"
|
||||
"lone-services/pkg/utils"
|
||||
"lone-services/pkg/validate"
|
||||
product "lone-services/rpc/product/pb"
|
||||
"lone-services/services/product/internal/dao"
|
||||
"lone-services/services/product/internal/model"
|
||||
"lone-services/services/product/internal/svc"
|
||||
"lone-services/services/product/validator"
|
||||
"strconv"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type NumberLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewNumberLogic(ctx context.Context, svcCtx *svc.ServiceContext) *NumberLogic {
|
||||
return &NumberLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
// Number 服务间增减库存:type=1 增加,type=2 减少
|
||||
func (l *NumberLogic) Number(in *product.NumberReq) (*product.Response, error) {
|
||||
var req validator.ProductNumberValidator
|
||||
if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty {
|
||||
return outResponse(utils.ErrorParams, msg), nil
|
||||
}
|
||||
|
||||
return changeProductNumber(l.Logger, req.Id, req.Type, req.Number)
|
||||
}
|
||||
|
||||
func changeProductNumber(logger logx.Logger, id int64, typ uint32, number uint32) (*product.Response, error) {
|
||||
var info dao.ProductNumberInfo
|
||||
w := modelbase.Params{
|
||||
Eq: map[string]string{"id": strconv.FormatInt(id, 10)},
|
||||
}
|
||||
m := model.ProductModel{}.Init()
|
||||
if err := m.GetOne(w, &info); err != nil {
|
||||
logger.Errorf("product number get: %v", err)
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
if info.Id < 1 {
|
||||
return failResponse(utils.ErrorNotFund), nil
|
||||
}
|
||||
|
||||
var (
|
||||
rows int64
|
||||
err error
|
||||
)
|
||||
switch typ {
|
||||
case dao.NumberTypeAdd:
|
||||
rows, err = m.IncrNumber(id, number)
|
||||
case dao.NumberTypeSub:
|
||||
rows, err = m.DecrNumber(id, number)
|
||||
default:
|
||||
return failResponse(utils.ErrorParams), nil
|
||||
}
|
||||
if err != nil {
|
||||
logger.Errorf("product number change: %v", err)
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
if rows < 1 {
|
||||
if typ == dao.NumberTypeSub {
|
||||
return failResponse(utils.ErrorStockNotEnough), nil
|
||||
}
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
|
||||
return okResponse(utils.StringEmpty), nil
|
||||
}
|
||||
@@ -3,6 +3,8 @@ package model
|
||||
import (
|
||||
"lone-services/pkg/modelbase"
|
||||
"lone-services/services/product/internal/dao"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type ProductModel struct {
|
||||
@@ -21,3 +23,19 @@ func (m ProductModel) Init() ProductModel {
|
||||
func (m ProductModel) Create(data *dao.ProductCreate) error {
|
||||
return m.Base.Create(data)
|
||||
}
|
||||
|
||||
// IncrNumber 原子增加库存
|
||||
func (m ProductModel) IncrNumber(id int64, n uint32) (int64, error) {
|
||||
ret := modelbase.DB().Table(m.TableName()).
|
||||
Where("id = ?", id).
|
||||
Update("number", gorm.Expr("number + ?", n))
|
||||
return ret.RowsAffected, ret.Error
|
||||
}
|
||||
|
||||
// DecrNumber 原子减少库存(库存不足时 RowsAffected=0)
|
||||
func (m ProductModel) DecrNumber(id int64, n uint32) (int64, error) {
|
||||
ret := modelbase.DB().Table(m.TableName()).
|
||||
Where("id = ? AND number >= ?", id, n).
|
||||
Update("number", gorm.Expr("number - ?", n))
|
||||
return ret.RowsAffected, ret.Error
|
||||
}
|
||||
|
||||
@@ -85,3 +85,13 @@ func (s *ProductServer) EditSusceptible(ctx context.Context, in *product.EditSus
|
||||
l := logic.NewEditSusceptibleLogic(ctx, s.svcCtx)
|
||||
return l.EditSusceptible(in)
|
||||
}
|
||||
|
||||
func (s *ProductServer) Number(ctx context.Context, in *product.NumberReq) (*product.Response, error) {
|
||||
l := logic.NewNumberLogic(ctx, s.svcCtx)
|
||||
return l.Number(in)
|
||||
}
|
||||
|
||||
func (s *ProductServer) NumberAdd(ctx context.Context, in *product.NumberAddReq) (*product.Response, error) {
|
||||
l := logic.NewNumberAddLogic(ctx, s.svcCtx)
|
||||
return l.NumberAdd(in)
|
||||
}
|
||||
|
||||
@@ -218,3 +218,34 @@ func (p ProductEditSusceptibleValidator) GetMessage() validate.ValidatorMessages
|
||||
"Type.oneof": "类型不对",
|
||||
}
|
||||
}
|
||||
|
||||
type ProductNumberValidator struct {
|
||||
Id int64 `validate:"required,gt=0"`
|
||||
Type uint32 `validate:"required,oneof=1 2"`
|
||||
Number uint32 `validate:"required,gt=0"`
|
||||
}
|
||||
|
||||
func (p ProductNumberValidator) GetMessage() validate.ValidatorMessages {
|
||||
return validate.ValidatorMessages{
|
||||
"Id.required": "ID不能为空",
|
||||
"Id.gt": "ID必须大于0",
|
||||
"Type.required": "类型不能为空",
|
||||
"Type.oneof": "类型不对",
|
||||
"Number.required": "数量不能为空",
|
||||
"Number.gt": "数量必须大于0",
|
||||
}
|
||||
}
|
||||
|
||||
type ProductNumberAddValidator struct {
|
||||
Id int64 `validate:"required,gt=0"`
|
||||
Number uint32 `validate:"required,gt=0"`
|
||||
}
|
||||
|
||||
func (p ProductNumberAddValidator) GetMessage() validate.ValidatorMessages {
|
||||
return validate.ValidatorMessages{
|
||||
"Id.required": "ID不能为空",
|
||||
"Id.gt": "ID必须大于0",
|
||||
"Number.required": "数量不能为空",
|
||||
"Number.gt": "数量必须大于0",
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user