zhangqian
2023-12-27 5e1aa408c1b8bd36fefd0b5ea380a2fde6d57810
Merge branch 'master' of http://192.168.5.5:10010/r/aps/SRM
8个文件已添加
16个文件已修改
1248 ■■■■ 已修改文件
api/v1/purchase/purchase.go 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/test/code.go 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/test/enter.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
constvar/const.go 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
global/model.go 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
initialize/router.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/purchase/purchase.go 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/purchase/purchase_type.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/purchase/request/purchase.go 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/purchase/response/purchase.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/test/request/code.go 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/test/request/common.go 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/test/supplier.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pkg/contextx/contextx.go 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proto/code.proto 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proto/code/code.pb.go 584 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proto/code/code_grpc.pb.go 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proto/purchase_wms.proto 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proto/purchase_wms/purchase_wms.pb.go 213 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
router/test/code.go 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
router/test/enter.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/purchase/purchase.go 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/test/supplier.go 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/code.go 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/purchase/purchase.go
@@ -2,7 +2,6 @@
import (
    "context"
    "fmt"
    "github.com/gin-gonic/gin"
    "go.uber.org/zap"
    "gorm.io/gorm"
@@ -13,8 +12,6 @@
    "srm/proto/purchase_wms"
    "strconv"
    "strings"
    "time"
    //"srm/model/purchase"
    //"srm/model/purchase"
@@ -54,7 +51,6 @@
    purchaseRecord.Status = purchase.OrderStatusConfirmed
    purchaseRecord.HandledBy = "admin"
    purchaseRecord.Creator = "admin"
    purchaseRecord.Number = fmt.Sprintf("CG%v", time.Now().Unix())
    purchaseRecord.Principal = "admin"
    purchaseRecord.OrderType = "采购订单"
@@ -267,6 +263,7 @@
            Number:       data.Number,
            SupplierName: data.Supplier.Name,
            Product:      product,
            Source:       "SRM_PURCHASE",
        })
        if err != nil {
            global.GVA_LOG.Error("grpc调用失败!", zap.Error(err))
api/v1/test/code.go
New file
@@ -0,0 +1,101 @@
package test
import (
    "github.com/gin-gonic/gin"
    "github.com/spf13/cast"
    "srm/constvar"
    "srm/model/common/response"
    "srm/model/test/request"
    "srm/pkg/contextx"
    "srm/pkg/logx"
    "srm/proto/code"
    "srm/service"
    purchaseService "srm/service/purchase"
    "srm/utils"
)
type CodeApi struct {
}
var (
    supplierService = service.ServiceGroupApp.TestServiceGroup.SupplierService
)
// GetCodeList
//
// @Tags        编码
// @Summary    获取编码列表
// @Produce    application/json
// @Param        object    query        request.GetCodeList    true    "参数"
// @Success    200    {object}    util.ResponseList{data=[]code.CodeStandard}
//
//    @Router /code/getCodeList [get]
func (ca *CodeApi) GetCodeList(c *gin.Context) {
    var params request.GetCodeList
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    params.CodeStandID = c.Query("codeStandID")
    params.Name = c.Query("name")
    params.Type = c.Query("type")
    client := code.NewCodeServiceClient(productServiceConn)
    list, err := client.GetCodeList(ctx.GetCtx(), &code.GetCodeListRequest{
        Page:        cast.ToInt32(params.Page),
        PageSize:    cast.ToInt32(params.PageSize),
        CodeStandID: params.CodeStandID,
        Name:        params.Name,
        Type:        params.Type,
    })
    if err != nil {
        logx.Errorf("GetCodeList err: %v", err.Error())
        response.FailWithMessage("产品名称不能为空", c)
        return
    }
    response.OkWithDetailed(response.PageResult{
        List:     list.List,
        Total:    list.Total,
        Page:     params.Page,
        PageSize: params.PageSize,
    }, "获取成功", c)
}
// GetAutoCode
//
// @Tags        编码
// @Summary    获取自动编码
// @Produce    application/json
// @Param        object    body        code.CodeStandard    true    "参数"
// @Success    200    {object}    util.ResponseList{data=map[string]interface{}}
//
//    @Router    /code/getAutoCode [post]
func (ca *CodeApi) GetAutoCode(c *gin.Context) {
    var params code.CodeStandard
    ctx, ok := contextx.NewContext(c, &params)
    if !ok {
        return
    }
    var (
        id  = 0
        err error
    )
    switch constvar.CodeStandardType(params.Type) {
    case constvar.CodeStandardType_PurchaseOrder:
        id, err = purchaseService.NewPurchaseService().MaxAutoIncr()
    case constvar.CodeStandardType_Supplier:
        id, err = supplierService.MaxAutoIncr()
    default:
        response.FailWithMessage("编码规则不存在", c)
        return
    }
    if err != nil {
        response.FailWithMessage("获取最大值失败", c)
        return
    }
    m := make(map[string]interface{})
    autoCode := utils.GetAutoCode(id, &params)
    m["id"] = autoCode
    m["codeStandardID"] = params.ID
    m["maxAutoIncr"] = id + 1
    ctx.OkWithDetailed(m)
}
api/v1/test/enter.go
@@ -7,4 +7,5 @@
    ContractApi
    ProductApi
    MemberApi
    CodeApi
}
constvar/const.go
@@ -9,3 +9,10 @@
)
const SystemTypeSrm = 4 //srm账号
type CodeStandardType string
const (
    CodeStandardType_PurchaseOrder CodeStandardType = "采购单编码"
    CodeStandardType_Supplier      CodeStandardType = "供应商编码"
)
global/model.go
@@ -7,10 +7,10 @@
)
type GVA_MODEL struct {
    ID        uint           `gorm:"primarykey"`     // 主键ID
    CreatedAt *time.Time     `json:"-"`              // 创建时间
    UpdatedAt *time.Time     `json:"-"`              // 更新时间
    DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` // 删除时间
    ID        uint           `json:"id" gorm:"primarykey"` // 主键ID
    CreatedAt *time.Time     `json:"-"`                    // 创建时间
    UpdatedAt *time.Time     `json:"-"`                    // 更新时间
    DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`       // 删除时间
    FormattedCreatedAt string `gorm:"-" json:"created_at"`
    FormattedUpdatedAt string `gorm:"-" json:"updated_at"`
@@ -21,3 +21,13 @@
    m.FormattedUpdatedAt = m.UpdatedAt.Format("2006-01-02 15:04:05")
    return
}
type GVA_MODEL_INT struct {
    ID        uint           `json:"id,string" gorm:"primarykey"` // 主键ID
    CreatedAt *time.Time     `json:"-"`                           // 创建时间
    UpdatedAt *time.Time     `json:"-"`                           // 更新时间
    DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`              // 删除时间
    FormattedCreatedAt string `gorm:"-" json:"created_at"`
    FormattedUpdatedAt string `gorm:"-" json:"updated_at"`
}
initialize/router.go
@@ -54,6 +54,7 @@
        testRouter.InitContractRouter(PrivateGroup)
        testRouter.InitProductRouter(PrivateGroup)
        testRouter.InitMemberRouter(PrivateGroup)
        testRouter.InitCodeRouter(PrivateGroup)
    }
    global.GVA_LOG.Info("router register success")
model/purchase/purchase.go
@@ -7,11 +7,11 @@
)
type Purchase struct {
    global.GVA_MODEL
    PurchaseTypeId      int                 `json:"purchaseTypeId" form:"purchaseType" gorm:"type:int(11);not null;default 0;comment:采购类型id"` // 采购类型id
    global.GVA_MODEL_INT
    PurchaseTypeId      int                 `json:"purchaseTypeId,string" form:"purchaseType" gorm:"type:int(11);not null;default 0;comment:采购类型id"` // 采购类型id
    PurchaseType        PurchaseType        `json:"purchaseType" gorm:"foreignKey:PurchaseTypeId"`
    OrderSource         string              `json:"orderSource" gorm:"type:varchar(255);not null;default '';comment:单据来源"`             // 单据来源
    SupplierId          int                 `json:"supplierId" form:"supplierId" gorm:"type:int(11);not null;default 0;comment:供应商id"` // 供应商id
    OrderSource         string              `json:"orderSource" gorm:"type:varchar(255);not null;default '';comment:单据来源"`                    // 单据来源
    SupplierId          int                 `json:"supplierId,string" form:"supplierId" gorm:"type:int(11);not null;default 0;comment:供应商id"` // 供应商id
    Supplier            test.Supplier       `json:"supplier" gorm:"foreignKey:SupplierId"`
    Number              string              `json:"number" form:"number" gorm:"unique;type:varchar(255);not null;default '';comment:采购编号"`                  // 采购编号
    Name                string              `json:"name" form:"name" gorm:"type:varchar(255);not null;default '';comment:采购名称"`                             // 采购名称
model/purchase/purchase_type.go
@@ -6,7 +6,7 @@
type PurchaseType struct {
    global.GVA_MODEL
    ID   uint   `gorm:"primarykey"`                                                                 // 主键ID
    ID   uint   `json:"id,string" gorm:"primarykey"`                                                // 主键ID
    Name string `json:"name" form:"name" gorm:"type:varchar(255);not null;default '';comment:采购类型"` // 采购类型
    Sort int    `json:"sort" form:"sort" gorm:"type:int(11);not null;default 0;comment:排序"`         // 排序
    Pin  bool   `json:"pin" form:"pin" gorm:"type:tinyint(1);not null;default 0;comment:采购名称"`      // 是否置顶
model/purchase/request/purchase.go
@@ -27,9 +27,9 @@
}
type Purchase struct {
    ID                  uint                         `gorm:"primarykey"`                                                                                                 // 主键ID
    PurchaseTypeId      int                          `json:"purchaseTypeId" form:"purchaseType" gorm:"type:int(11);not null;default 0;comment:采购类型id"`                   // 采购类型id
    SupplierId          int                          `json:"supplierId" form:"supplierId" gorm:"type:int(11);not null;default 0;comment:供应商id"`                          // 供应商id
    ID                  uint                         `json:"id,string" gorm:"primarykey"`                                                                                // 主键ID
    PurchaseTypeId      int                          `json:"purchaseTypeId,string" form:"purchaseType" gorm:"type:int(11);not null;default 0;comment:采购类型id"`            // 采购类型id
    SupplierId          int                          `json:"supplierId,string" form:"supplierId" gorm:"type:int(11);not null;default 0;comment:供应商id"`                   // 供应商id
    OrderSource         string                       `json:"orderSource" gorm:"type:varchar(255);not null;default '';comment:单据来源"`                                      // 单据来源
    Number              string                       `json:"number" form:"number" gorm:"unique;type:varchar(255);not null;default '';comment:采购编号"`                      // 采购编号
    Name                string                       `json:"name" form:"name" gorm:"type:varchar(255);not null;default '';comment:采购名称"`                                 // 采购名称
model/purchase/response/purchase.go
@@ -26,6 +26,7 @@
    Specifications   string          `json:"specifications" form:"specifications" gorm:"column:specifications;comment:规格;size:255;"`
    ModelNumber      string          `json:"modelNumber" form:"modelNumber" gorm:"column:model_number;comment:型号;size:255;"`
    ProductType      string          `json:"productType" form:"productType" gorm:"column:product_type;comment:产品类别;size:255;"`
    Remark           string          `json:"remark" form:"remark" gorm:"type:varchar(1000);not null; default '';comment:描述"` //描述
}
type QualityInspectList struct {
model/test/request/code.go
New file
@@ -0,0 +1,32 @@
package request
type GetCodeList struct {
    PageInfo
    CodeStandID string `json:"codeStandID"`
    Name        string `json:"name"`
    Type        string `json:"type"`
}
type CodeStandard struct {
    ID       string      `json:"id"`
    Name     string      `json:"name"`
    Type     string      `json:"type"`
    Method   int32       `json:"method"`
    Status   string      `json:"status"`
    List     []*CodeRule `json:"list"`
    AutoRule *CodeAuto   `json:"autoRule"`
}
type CodeRule struct {
    Name   string `json:"name"`
    Length int32  `json:"length"`
    Desc   string `json:"desc"`
}
type CodeAuto struct {
    PrefixMethod int32  `json:"prefixMethod"`
    PrefixValue  string `json:"prefixValue"`
    SuffixMethod int32  `json:"suffixMethod"`
    AutoLength   int32  `json:"autoLength"`
    Desc         string `json:"desc"`
}
model/test/request/common.go
New file
@@ -0,0 +1,24 @@
package request
type PageInfo struct {
    Page     int `json:"page" form:"page"`         // 页码
    PageSize int `json:"pageSize" form:"pageSize"` // 每页大小
}
func (p PageInfo) Check() bool {
    if p.Page <= 0 {
        return false
    }
    if p.PageSize <= 0 || p.PageSize > 500 {
        return false
    }
    return true
}
type GetById struct {
    ID string `json:"id"`
}
type GetByIdInt struct {
    ID uint `json:"id"`
}
model/test/supplier.go
@@ -7,7 +7,7 @@
// Supplier 结构体
type Supplier struct {
    global.GVA_MODEL
    global.GVA_MODEL_INT
    Number                string   `json:"number" form:"number" gorm:"column:number;comment:供应商编号;size:255;"`
    Name                  string   `json:"name" form:"name" gorm:"column:name;comment:名称;size:255;"`
    SupplierType          string   `json:"supplierType" form:"supplierType" gorm:"column:supplier_type;comment:供应商类型;size:255;"`
pkg/contextx/contextx.go
@@ -4,7 +4,6 @@
    "github.com/gin-gonic/gin"
    "net/http"
    "srm/pkg/ecode"
    "srm/pkg/logx"
)
type (
@@ -29,14 +28,14 @@
        return
    }
    defer func() {
        query := r.ctx.Request.URL.RawQuery
        if query != "" {
            query = "?" + query
        }
        urlPath := r.ctx.Request.URL.Path
        logx.Infof("%s | %s %s | uid: %s | %+v", ctx.ClientIP(), r.ctx.Request.Method, urlPath+query, r.GetUserId(), params)
    }()
    //defer func() {
    //    query := r.ctx.Request.URL.RawQuery
    //    if query != "" {
    //        query = "?" + query
    //    }
    //    urlPath := r.ctx.Request.URL.Path
    //    logx.Infof("%s | %s %s | uid: %s | %+v", ctx.ClientIP(), r.ctx.Request.Method, urlPath+query, r.GetUserId(), params)
    //}()
    // validate params
    if params != nil {
proto/code.proto
New file
@@ -0,0 +1,48 @@
syntax = "proto3";
option go_package = "./code";
service codeService {
  rpc GetCodeList(GetCodeListRequest) returns(GetCodeListResponse) {}
}
message CodeStandard {
  string ID = 1;
  string Name = 2;
  string Type = 3;
  int32  Method = 4;
  string Status = 5;
  repeated CodeRule List = 6;
  CodeAuto AutoRule = 7;
}
message CodeRule {
  string Name = 1;
  int32 Length = 2;
  string Desc = 3;
}
message CodeAuto {
  int32 PrefixMethod = 1;
  string PrefixValue = 2;
  int32 SuffixMethod = 3;
  int32 AutoLength = 4;
  string Desc = 5;
}
message GetCodeListRequest{
  int32 page = 1;
  int32 pageSize = 2;
  string CodeStandID = 3;
  string Name = 4;
  string Type = 5;
}
message GetCodeListResponse{
  int32   Code = 1;
  string  Msg = 2;
  repeated CodeStandard List = 3;
  int64 Total = 4;
}
proto/code/code.pb.go
New file
@@ -0,0 +1,584 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
//     protoc-gen-go v1.30.0
//     protoc        v3.8.0
// source: code.proto
package code
import (
    protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    reflect "reflect"
    sync "sync"
)
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 CodeStandard struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields
    ID       string      `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
    Name     string      `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"`
    Type     string      `protobuf:"bytes,3,opt,name=Type,proto3" json:"Type,omitempty"`
    Method   int32       `protobuf:"varint,4,opt,name=Method,proto3" json:"Method,omitempty"`
    Status   string      `protobuf:"bytes,5,opt,name=Status,proto3" json:"Status,omitempty"`
    List     []*CodeRule `protobuf:"bytes,6,rep,name=List,proto3" json:"List,omitempty"`
    AutoRule *CodeAuto   `protobuf:"bytes,7,opt,name=AutoRule,proto3" json:"AutoRule,omitempty"`
}
func (x *CodeStandard) Reset() {
    *x = CodeStandard{}
    if protoimpl.UnsafeEnabled {
        mi := &file_code_proto_msgTypes[0]
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        ms.StoreMessageInfo(mi)
    }
}
func (x *CodeStandard) String() string {
    return protoimpl.X.MessageStringOf(x)
}
func (*CodeStandard) ProtoMessage() {}
func (x *CodeStandard) ProtoReflect() protoreflect.Message {
    mi := &file_code_proto_msgTypes[0]
    if protoimpl.UnsafeEnabled && x != nil {
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        if ms.LoadMessageInfo() == nil {
            ms.StoreMessageInfo(mi)
        }
        return ms
    }
    return mi.MessageOf(x)
}
// Deprecated: Use CodeStandard.ProtoReflect.Descriptor instead.
func (*CodeStandard) Descriptor() ([]byte, []int) {
    return file_code_proto_rawDescGZIP(), []int{0}
}
func (x *CodeStandard) GetID() string {
    if x != nil {
        return x.ID
    }
    return ""
}
func (x *CodeStandard) GetName() string {
    if x != nil {
        return x.Name
    }
    return ""
}
func (x *CodeStandard) GetType() string {
    if x != nil {
        return x.Type
    }
    return ""
}
func (x *CodeStandard) GetMethod() int32 {
    if x != nil {
        return x.Method
    }
    return 0
}
func (x *CodeStandard) GetStatus() string {
    if x != nil {
        return x.Status
    }
    return ""
}
func (x *CodeStandard) GetList() []*CodeRule {
    if x != nil {
        return x.List
    }
    return nil
}
func (x *CodeStandard) GetAutoRule() *CodeAuto {
    if x != nil {
        return x.AutoRule
    }
    return nil
}
type CodeRule struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields
    Name   string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
    Length int32  `protobuf:"varint,2,opt,name=Length,proto3" json:"Length,omitempty"`
    Desc   string `protobuf:"bytes,3,opt,name=Desc,proto3" json:"Desc,omitempty"`
}
func (x *CodeRule) Reset() {
    *x = CodeRule{}
    if protoimpl.UnsafeEnabled {
        mi := &file_code_proto_msgTypes[1]
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        ms.StoreMessageInfo(mi)
    }
}
func (x *CodeRule) String() string {
    return protoimpl.X.MessageStringOf(x)
}
func (*CodeRule) ProtoMessage() {}
func (x *CodeRule) ProtoReflect() protoreflect.Message {
    mi := &file_code_proto_msgTypes[1]
    if protoimpl.UnsafeEnabled && x != nil {
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        if ms.LoadMessageInfo() == nil {
            ms.StoreMessageInfo(mi)
        }
        return ms
    }
    return mi.MessageOf(x)
}
// Deprecated: Use CodeRule.ProtoReflect.Descriptor instead.
func (*CodeRule) Descriptor() ([]byte, []int) {
    return file_code_proto_rawDescGZIP(), []int{1}
}
func (x *CodeRule) GetName() string {
    if x != nil {
        return x.Name
    }
    return ""
}
func (x *CodeRule) GetLength() int32 {
    if x != nil {
        return x.Length
    }
    return 0
}
func (x *CodeRule) GetDesc() string {
    if x != nil {
        return x.Desc
    }
    return ""
}
type CodeAuto struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields
    PrefixMethod int32  `protobuf:"varint,1,opt,name=PrefixMethod,proto3" json:"PrefixMethod,omitempty"`
    PrefixValue  string `protobuf:"bytes,2,opt,name=PrefixValue,proto3" json:"PrefixValue,omitempty"`
    SuffixMethod int32  `protobuf:"varint,3,opt,name=SuffixMethod,proto3" json:"SuffixMethod,omitempty"`
    AutoLength   int32  `protobuf:"varint,4,opt,name=AutoLength,proto3" json:"AutoLength,omitempty"`
    Desc         string `protobuf:"bytes,5,opt,name=Desc,proto3" json:"Desc,omitempty"`
}
func (x *CodeAuto) Reset() {
    *x = CodeAuto{}
    if protoimpl.UnsafeEnabled {
        mi := &file_code_proto_msgTypes[2]
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        ms.StoreMessageInfo(mi)
    }
}
func (x *CodeAuto) String() string {
    return protoimpl.X.MessageStringOf(x)
}
func (*CodeAuto) ProtoMessage() {}
func (x *CodeAuto) ProtoReflect() protoreflect.Message {
    mi := &file_code_proto_msgTypes[2]
    if protoimpl.UnsafeEnabled && x != nil {
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        if ms.LoadMessageInfo() == nil {
            ms.StoreMessageInfo(mi)
        }
        return ms
    }
    return mi.MessageOf(x)
}
// Deprecated: Use CodeAuto.ProtoReflect.Descriptor instead.
func (*CodeAuto) Descriptor() ([]byte, []int) {
    return file_code_proto_rawDescGZIP(), []int{2}
}
func (x *CodeAuto) GetPrefixMethod() int32 {
    if x != nil {
        return x.PrefixMethod
    }
    return 0
}
func (x *CodeAuto) GetPrefixValue() string {
    if x != nil {
        return x.PrefixValue
    }
    return ""
}
func (x *CodeAuto) GetSuffixMethod() int32 {
    if x != nil {
        return x.SuffixMethod
    }
    return 0
}
func (x *CodeAuto) GetAutoLength() int32 {
    if x != nil {
        return x.AutoLength
    }
    return 0
}
func (x *CodeAuto) GetDesc() string {
    if x != nil {
        return x.Desc
    }
    return ""
}
type GetCodeListRequest struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields
    Page        int32  `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"`
    PageSize    int32  `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
    CodeStandID string `protobuf:"bytes,3,opt,name=CodeStandID,proto3" json:"CodeStandID,omitempty"`
    Name        string `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"`
    Type        string `protobuf:"bytes,5,opt,name=Type,proto3" json:"Type,omitempty"`
}
func (x *GetCodeListRequest) Reset() {
    *x = GetCodeListRequest{}
    if protoimpl.UnsafeEnabled {
        mi := &file_code_proto_msgTypes[3]
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        ms.StoreMessageInfo(mi)
    }
}
func (x *GetCodeListRequest) String() string {
    return protoimpl.X.MessageStringOf(x)
}
func (*GetCodeListRequest) ProtoMessage() {}
func (x *GetCodeListRequest) ProtoReflect() protoreflect.Message {
    mi := &file_code_proto_msgTypes[3]
    if protoimpl.UnsafeEnabled && x != nil {
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        if ms.LoadMessageInfo() == nil {
            ms.StoreMessageInfo(mi)
        }
        return ms
    }
    return mi.MessageOf(x)
}
// Deprecated: Use GetCodeListRequest.ProtoReflect.Descriptor instead.
func (*GetCodeListRequest) Descriptor() ([]byte, []int) {
    return file_code_proto_rawDescGZIP(), []int{3}
}
func (x *GetCodeListRequest) GetPage() int32 {
    if x != nil {
        return x.Page
    }
    return 0
}
func (x *GetCodeListRequest) GetPageSize() int32 {
    if x != nil {
        return x.PageSize
    }
    return 0
}
func (x *GetCodeListRequest) GetCodeStandID() string {
    if x != nil {
        return x.CodeStandID
    }
    return ""
}
func (x *GetCodeListRequest) GetName() string {
    if x != nil {
        return x.Name
    }
    return ""
}
func (x *GetCodeListRequest) GetType() string {
    if x != nil {
        return x.Type
    }
    return ""
}
type GetCodeListResponse struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields
    Code  int32           `protobuf:"varint,1,opt,name=Code,proto3" json:"Code,omitempty"`
    Msg   string          `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"`
    List  []*CodeStandard `protobuf:"bytes,3,rep,name=List,proto3" json:"List,omitempty"`
    Total int64           `protobuf:"varint,4,opt,name=Total,proto3" json:"Total,omitempty"`
}
func (x *GetCodeListResponse) Reset() {
    *x = GetCodeListResponse{}
    if protoimpl.UnsafeEnabled {
        mi := &file_code_proto_msgTypes[4]
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        ms.StoreMessageInfo(mi)
    }
}
func (x *GetCodeListResponse) String() string {
    return protoimpl.X.MessageStringOf(x)
}
func (*GetCodeListResponse) ProtoMessage() {}
func (x *GetCodeListResponse) ProtoReflect() protoreflect.Message {
    mi := &file_code_proto_msgTypes[4]
    if protoimpl.UnsafeEnabled && x != nil {
        ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
        if ms.LoadMessageInfo() == nil {
            ms.StoreMessageInfo(mi)
        }
        return ms
    }
    return mi.MessageOf(x)
}
// Deprecated: Use GetCodeListResponse.ProtoReflect.Descriptor instead.
func (*GetCodeListResponse) Descriptor() ([]byte, []int) {
    return file_code_proto_rawDescGZIP(), []int{4}
}
func (x *GetCodeListResponse) GetCode() int32 {
    if x != nil {
        return x.Code
    }
    return 0
}
func (x *GetCodeListResponse) GetMsg() string {
    if x != nil {
        return x.Msg
    }
    return ""
}
func (x *GetCodeListResponse) GetList() []*CodeStandard {
    if x != nil {
        return x.List
    }
    return nil
}
func (x *GetCodeListResponse) GetTotal() int64 {
    if x != nil {
        return x.Total
    }
    return 0
}
var File_code_proto protoreflect.FileDescriptor
var file_code_proto_rawDesc = []byte{
    0x0a, 0x0a, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbc, 0x01, 0x0a,
    0x0c, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a,
    0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a,
    0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d,
    0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
    0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18,
    0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x16, 0x0a,
    0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53,
    0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20,
    0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04,
    0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x75, 0x6c, 0x65,
    0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x75, 0x74,
    0x6f, 0x52, 0x08, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x4a, 0x0a, 0x08, 0x43,
    0x6f, 0x64, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18,
    0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4c,
    0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x65, 0x6e,
    0x67, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x65, 0x73, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28,
    0x09, 0x52, 0x04, 0x44, 0x65, 0x73, 0x63, 0x22, 0xa8, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65,
    0x41, 0x75, 0x74, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4d, 0x65,
    0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x50, 0x72, 0x65, 0x66,
    0x69, 0x78, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x66,
    0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x50,
    0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x75,
    0x66, 0x66, 0x69, 0x78, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
    0x52, 0x0c, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e,
    0x0a, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01,
    0x28, 0x05, 0x52, 0x0a, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x12,
    0x0a, 0x04, 0x44, 0x65, 0x73, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x65,
    0x73, 0x63, 0x22, 0x8e, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x69,
    0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
    0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a,
    0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
    0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x64,
    0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
    0x43, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e,
    0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12,
    0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54,
    0x79, 0x70, 0x65, 0x22, 0x74, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x69,
    0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f,
    0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10,
    0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67,
    0x12, 0x21, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d,
    0x2e, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x52, 0x04, 0x4c,
    0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01,
    0x28, 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x32, 0x49, 0x0a, 0x0b, 0x63, 0x6f, 0x64,
    0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43,
    0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x13, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64,
    0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x47,
    0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
    0x73, 0x65, 0x22, 0x00, 0x42, 0x08, 0x5a, 0x06, 0x2e, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x06,
    0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
    file_code_proto_rawDescOnce sync.Once
    file_code_proto_rawDescData = file_code_proto_rawDesc
)
func file_code_proto_rawDescGZIP() []byte {
    file_code_proto_rawDescOnce.Do(func() {
        file_code_proto_rawDescData = protoimpl.X.CompressGZIP(file_code_proto_rawDescData)
    })
    return file_code_proto_rawDescData
}
var file_code_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
var file_code_proto_goTypes = []interface{}{
    (*CodeStandard)(nil),        // 0: CodeStandard
    (*CodeRule)(nil),            // 1: CodeRule
    (*CodeAuto)(nil),            // 2: CodeAuto
    (*GetCodeListRequest)(nil),  // 3: GetCodeListRequest
    (*GetCodeListResponse)(nil), // 4: GetCodeListResponse
}
var file_code_proto_depIdxs = []int32{
    1, // 0: CodeStandard.List:type_name -> CodeRule
    2, // 1: CodeStandard.AutoRule:type_name -> CodeAuto
    0, // 2: GetCodeListResponse.List:type_name -> CodeStandard
    3, // 3: codeService.GetCodeList:input_type -> GetCodeListRequest
    4, // 4: codeService.GetCodeList:output_type -> GetCodeListResponse
    4, // [4:5] is the sub-list for method output_type
    3, // [3:4] is the sub-list for method input_type
    3, // [3:3] is the sub-list for extension type_name
    3, // [3:3] is the sub-list for extension extendee
    0, // [0:3] is the sub-list for field type_name
}
func init() { file_code_proto_init() }
func file_code_proto_init() {
    if File_code_proto != nil {
        return
    }
    if !protoimpl.UnsafeEnabled {
        file_code_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
            switch v := v.(*CodeStandard); i {
            case 0:
                return &v.state
            case 1:
                return &v.sizeCache
            case 2:
                return &v.unknownFields
            default:
                return nil
            }
        }
        file_code_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
            switch v := v.(*CodeRule); i {
            case 0:
                return &v.state
            case 1:
                return &v.sizeCache
            case 2:
                return &v.unknownFields
            default:
                return nil
            }
        }
        file_code_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
            switch v := v.(*CodeAuto); i {
            case 0:
                return &v.state
            case 1:
                return &v.sizeCache
            case 2:
                return &v.unknownFields
            default:
                return nil
            }
        }
        file_code_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
            switch v := v.(*GetCodeListRequest); i {
            case 0:
                return &v.state
            case 1:
                return &v.sizeCache
            case 2:
                return &v.unknownFields
            default:
                return nil
            }
        }
        file_code_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
            switch v := v.(*GetCodeListResponse); i {
            case 0:
                return &v.state
            case 1:
                return &v.sizeCache
            case 2:
                return &v.unknownFields
            default:
                return nil
            }
        }
    }
    type x struct{}
    out := protoimpl.TypeBuilder{
        File: protoimpl.DescBuilder{
            GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
            RawDescriptor: file_code_proto_rawDesc,
            NumEnums:      0,
            NumMessages:   5,
            NumExtensions: 0,
            NumServices:   1,
        },
        GoTypes:           file_code_proto_goTypes,
        DependencyIndexes: file_code_proto_depIdxs,
        MessageInfos:      file_code_proto_msgTypes,
    }.Build()
    File_code_proto = out.File
    file_code_proto_rawDesc = nil
    file_code_proto_goTypes = nil
    file_code_proto_depIdxs = nil
}
proto/code/code_grpc.pb.go
New file
@@ -0,0 +1,109 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.3.0
// - protoc             v3.8.0
// source: code.proto
package code
import (
    context "context"
    grpc "google.golang.org/grpc"
    codes "google.golang.org/grpc/codes"
    status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
const (
    CodeService_GetCodeList_FullMethodName = "/codeService/GetCodeList"
)
// CodeServiceClient is the client API for CodeService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type CodeServiceClient interface {
    GetCodeList(ctx context.Context, in *GetCodeListRequest, opts ...grpc.CallOption) (*GetCodeListResponse, error)
}
type codeServiceClient struct {
    cc grpc.ClientConnInterface
}
func NewCodeServiceClient(cc grpc.ClientConnInterface) CodeServiceClient {
    return &codeServiceClient{cc}
}
func (c *codeServiceClient) GetCodeList(ctx context.Context, in *GetCodeListRequest, opts ...grpc.CallOption) (*GetCodeListResponse, error) {
    out := new(GetCodeListResponse)
    err := c.cc.Invoke(ctx, CodeService_GetCodeList_FullMethodName, in, out, opts...)
    if err != nil {
        return nil, err
    }
    return out, nil
}
// CodeServiceServer is the server API for CodeService service.
// All implementations must embed UnimplementedCodeServiceServer
// for forward compatibility
type CodeServiceServer interface {
    GetCodeList(context.Context, *GetCodeListRequest) (*GetCodeListResponse, error)
    mustEmbedUnimplementedCodeServiceServer()
}
// UnimplementedCodeServiceServer must be embedded to have forward compatible implementations.
type UnimplementedCodeServiceServer struct {
}
func (UnimplementedCodeServiceServer) GetCodeList(context.Context, *GetCodeListRequest) (*GetCodeListResponse, error) {
    return nil, status.Errorf(codes.Unimplemented, "method GetCodeList not implemented")
}
func (UnimplementedCodeServiceServer) mustEmbedUnimplementedCodeServiceServer() {}
// UnsafeCodeServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to CodeServiceServer will
// result in compilation errors.
type UnsafeCodeServiceServer interface {
    mustEmbedUnimplementedCodeServiceServer()
}
func RegisterCodeServiceServer(s grpc.ServiceRegistrar, srv CodeServiceServer) {
    s.RegisterService(&CodeService_ServiceDesc, srv)
}
func _CodeService_GetCodeList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
    in := new(GetCodeListRequest)
    if err := dec(in); err != nil {
        return nil, err
    }
    if interceptor == nil {
        return srv.(CodeServiceServer).GetCodeList(ctx, in)
    }
    info := &grpc.UnaryServerInfo{
        Server:     srv,
        FullMethod: CodeService_GetCodeList_FullMethodName,
    }
    handler := func(ctx context.Context, req interface{}) (interface{}, error) {
        return srv.(CodeServiceServer).GetCodeList(ctx, req.(*GetCodeListRequest))
    }
    return interceptor(ctx, in, info, handler)
}
// CodeService_ServiceDesc is the grpc.ServiceDesc for CodeService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var CodeService_ServiceDesc = grpc.ServiceDesc{
    ServiceName: "codeService",
    HandlerType: (*CodeServiceServer)(nil),
    Methods: []grpc.MethodDesc{
        {
            MethodName: "GetCodeList",
            Handler:    _CodeService_GetCodeList_Handler,
        },
    },
    Streams:  []grpc.StreamDesc{},
    Metadata: "code.proto",
}
proto/purchase_wms.proto
@@ -20,7 +20,8 @@
message PurchaseToWmsRequest {
  string Number = 1; //采购编号
  string SupplierName = 2; //供应商
  repeated PurchaseProduct Product = 3;
  string Source = 3;//来源
  repeated PurchaseProduct Product = 4;
}
message PurchaseToWmsResponse {
proto/purchase_wms/purchase_wms.pb.go
@@ -82,7 +82,8 @@
    Number       string             `protobuf:"bytes,1,opt,name=Number,proto3" json:"Number,omitempty"`             //采购编号
    SupplierName string             `protobuf:"bytes,2,opt,name=SupplierName,proto3" json:"SupplierName,omitempty"` //供应商
    Product      []*PurchaseProduct `protobuf:"bytes,3,rep,name=Product,proto3" json:"Product,omitempty"`
    Source       string             `protobuf:"bytes,3,opt,name=Source,proto3" json:"Source,omitempty"`             //来源
    Product      []*PurchaseProduct `protobuf:"bytes,4,rep,name=Product,proto3" json:"Product,omitempty"`
}
func (x *PurchaseToWmsRequest) Reset() {
@@ -127,6 +128,13 @@
func (x *PurchaseToWmsRequest) GetSupplierName() string {
    if x != nil {
        return x.SupplierName
    }
    return ""
}
func (x *PurchaseToWmsRequest) GetSource() string {
    if x != nil {
        return x.Source
    }
    return ""
}
@@ -791,111 +799,112 @@
    0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20,
    0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e,
    0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22,
    0x7e, 0x0a, 0x14, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d, 0x73,
    0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65,
    0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12,
    0x22, 0x0a, 0x0c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18,
    0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4e,
    0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03,
    0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x50,
    0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22,
    0x63, 0x0a, 0x15, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d, 0x73,
    0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65,
    0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07,
    0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d,
    0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f,
    0x75, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x57, 0x61, 0x72, 0x65, 0x68,
    0x6f, 0x75, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75,
    0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75,
    0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20,
    0x01, 0x28, 0x09, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x44, 0x0a, 0x1c, 0x55,
    0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x53, 0x74, 0x61,
    0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43,
    0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12,
    0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73,
    0x67, 0x22, 0x41, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72,
    0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x52,
    0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
    0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75,
    0x63, 0x74, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x0c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72,
    0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72,
    0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69,
    0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72,
    0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70,
    0x6c, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x75, 0x72, 0x63,
    0x68, 0x61, 0x73, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52,
    0x0d, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x6d,
    0x0a, 0x22, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4c, 0x69, 0x73,
    0x74, 0x42, 0x79, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70,
    0x96, 0x01, 0x0a, 0x14, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d,
    0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x75, 0x6d, 0x62,
    0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72,
    0x12, 0x22, 0x0a, 0x0c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65,
    0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72,
    0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03,
    0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x07,
    0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e,
    0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52,
    0x07, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x63, 0x0a, 0x15, 0x50, 0x75, 0x72, 0x63,
    0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
    0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
    0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
    0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
    0x1c, 0x0a, 0x09, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01,
    0x28, 0x09, 0x52, 0x09, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x22, 0x35, 0x0a,
    0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x53,
    0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06,
    0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4e, 0x75,
    0x6d, 0x62, 0x65, 0x72, 0x22, 0x44, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75,
    0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70,
    0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01,
    0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18,
    0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x21, 0x0a, 0x04, 0x4c, 0x69,
    0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6c,
    0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x8a, 0x01,
    0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65,
    0x42, 0x79, 0x57, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a,
    0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
    0x52, 0x0a, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09,
    0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
    0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d,
    0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75,
    0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01,
    0x28, 0x09, 0x52, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6b, 0x0a, 0x1b, 0x43, 0x72,
    0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x42, 0x79, 0x57, 0x6d,
    0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64,
    0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a,
    0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12,
    0x26, 0x0a, 0x0e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65,
    0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73,
    0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x42, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x75,
    0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
    0x74, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d,
    0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x75, 0x72, 0x63,
    0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xae, 0x01, 0x0a, 0x0c,
    0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, 0x0e,
    0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01,
    0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x75,
    0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65,
    0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x75, 0x72, 0x63,
    0x68, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x70, 0x70,
    0x6c, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
    0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
    0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d,
    0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05,
    0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3e, 0x0a, 0x17,
    0x47, 0x65, 0x74, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
    0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73,
    0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73,
    0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x32, 0xad, 0x03, 0x0a,
    0x0f, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
    0x12, 0x3e, 0x0a, 0x0d, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d,
    0x73, 0x12, 0x15, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d,
    0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68,
    0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
    0x12, 0x55, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61,
    0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
    0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
    0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50,
    0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73,
    0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x75,
    0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x41, 0x0a, 0x21, 0x47, 0x65,
    0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x50,
    0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
    0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
    0x28, 0x09, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, 0x78, 0x0a,
    0x0c, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x0a,
    0x0a, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
    0x03, 0x52, 0x0a, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a,
    0x0c, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
    0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d,
    0x65, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x50, 0x72, 0x69,
    0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61,
    0x73, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x6d, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x53, 0x75,
    0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x50, 0x72, 0x6f, 0x64,
    0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c,
    0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
    0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x47, 0x65, 0x74, 0x53,
    0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x50, 0x72, 0x6f,
    0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
    0x12, 0x52, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61,
    0x73, 0x65, 0x42, 0x79, 0x57, 0x6d, 0x73, 0x12, 0x1b, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
    0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x42, 0x79, 0x57, 0x6d, 0x73, 0x52, 0x65, 0x71,
    0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72,
    0x75, 0x63, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a,
    0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64,
    0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
    0x4d, 0x73, 0x67, 0x12, 0x21, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28,
    0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74,
    0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x8a, 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74,
    0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x42, 0x79, 0x57, 0x6d, 0x73, 0x52, 0x65,
    0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65,
    0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x75, 0x70, 0x70, 0x6c,
    0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
    0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
    0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20,
    0x01, 0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53,
    0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x6f, 0x75,
    0x72, 0x63, 0x65, 0x22, 0x6b, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72,
    0x63, 0x68, 0x61, 0x73, 0x65, 0x42, 0x79, 0x57, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
    0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x75, 0x72, 0x63, 0x68,
    0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x72,
    0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
    0x1a, 0x18, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e,
    0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x10, 0x5a, 0x0e,
    0x2e, 0x2f, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x77, 0x6d, 0x73, 0x62, 0x06,
    0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
    0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
    0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20,
    0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x75, 0x72, 0x63,
    0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
    0x52, 0x0e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72,
    0x22, 0x42, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49,
    0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x75,
    0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
    0x03, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d,
    0x62, 0x65, 0x72, 0x73, 0x22, 0xae, 0x01, 0x0a, 0x0c, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73,
    0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73,
    0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70,
    0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a,
    0x0c, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
    0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d,
    0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4e, 0x61, 0x6d,
    0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65,
    0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18,
    0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a,
    0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73,
    0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x50, 0x75, 0x72, 0x63,
    0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
    0x12, 0x23, 0x0a, 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
    0x0d, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05,
    0x49, 0x6e, 0x66, 0x6f, 0x73, 0x32, 0xad, 0x03, 0x0a, 0x0f, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61,
    0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x50, 0x75, 0x72,
    0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d, 0x73, 0x12, 0x15, 0x2e, 0x50, 0x75, 0x72,
    0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
    0x74, 0x1a, 0x16, 0x2e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d,
    0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x14, 0x55, 0x70, 0x64,
    0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75,
    0x73, 0x12, 0x1c, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61,
    0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
    0x1d, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65,
    0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
    0x12, 0x67, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4c,
    0x69, 0x73, 0x74, 0x42, 0x79, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22,
    0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74,
    0x42, 0x79, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
    0x73, 0x74, 0x1a, 0x23, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72,
    0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x52,
    0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x13, 0x43, 0x72, 0x65,
    0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x42, 0x79, 0x57, 0x6d, 0x73,
    0x12, 0x1b, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73,
    0x65, 0x42, 0x79, 0x57, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e,
    0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x42, 0x79,
    0x57, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a,
    0x0f, 0x47, 0x65, 0x74, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f,
    0x12, 0x17, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e,
    0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x47, 0x65, 0x74, 0x50,
    0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
    0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x10, 0x5a, 0x0e, 0x2e, 0x2f, 0x70, 0x75, 0x72, 0x63, 0x68,
    0x61, 0x73, 0x65, 0x5f, 0x77, 0x6d, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
router/test/code.go
New file
@@ -0,0 +1,20 @@
package test
import (
    "github.com/gin-gonic/gin"
    v1 "srm/api/v1"
)
type CodeRouter struct {
}
// InitCodeRouter 初始化 Code 路由信息
func (s *CodeRouter) InitCodeRouter(Router *gin.RouterGroup) {
    codeRouter := Router.Group("code")
    var codeApi = v1.ApiGroupApp.TestApiGroup.CodeApi
    {
        codeRouter.GET("getCodeList", codeApi.GetCodeList)  // 获取编码列表
        codeRouter.POST("getAutoCode", codeApi.GetAutoCode) //获取自动编码
    }
}
router/test/enter.go
@@ -7,4 +7,5 @@
    ContractRouter
    ProductRouter
    MemberRouter
    CodeRouter
}
service/purchase/purchase.go
@@ -297,3 +297,9 @@
    err = db.Order("pin desc, sort desc, id asc").Find(&list).Error
    return list, err
}
func (slf *PurchaseService) MaxAutoIncr() (int, error) {
    var total int64
    err := global.GVA_DB.Model(&purchase.Purchase{}).Count(&total).Error
    return int(total), err
}
service/test/supplier.go
@@ -95,3 +95,9 @@
    err = global.GVA_DB.Model(&test.Supplier{}).Where("id = ?", id).Update("status", status).Error
    return err
}
func (sService *SupplierService) MaxAutoIncr() (int, error) {
    var total int64
    err := global.GVA_DB.Model(&test.Supplier{}).Count(&total).Error
    return int(total), err
}
utils/code.go
New file
@@ -0,0 +1,33 @@
package utils
import (
    "fmt"
    "srm/proto/code"
    "strconv"
    "time"
)
func GetAutoCode(id int, codeStandard *code.CodeStandard) string {
    autoCode := ""
    var prefixValue string
    if codeStandard.AutoRule.PrefixMethod == 2 { // 来源单据
        prefixValue = ""
    } else { // 固定值
        prefixValue = codeStandard.AutoRule.PrefixValue
    }
    strMaxAutoIncr := strconv.Itoa(id + 1)
    count := int(codeStandard.AutoRule.AutoLength) - len(strMaxAutoIncr)
    for i := 0; i < count; i++ {
        strMaxAutoIncr = "0" + strMaxAutoIncr
    }
    var suffixValue string
    if codeStandard.AutoRule.SuffixMethod == 2 { // 年月日+自增长
        suffixValue = fmt.Sprintf("%v%v", time.Now().Format("20060102"), strMaxAutoIncr)
    } else { // 自增长
        suffixValue = strMaxAutoIncr
    }
    autoCode = prefixValue + suffixValue
    return autoCode
}