From 0fd3231799d9185af352dcbc4f8e14df5e0f0233 Mon Sep 17 00:00:00 2001 From: liujiandao <274878379@qq.com> Date: 星期五, 22 三月 2024 10:53:38 +0800 Subject: [PATCH] 采购单到货与质检信息操作 --- model/purchase/purchase.go | 13 model/purchase/request/purchase.go | 27 docs/swagger.yaml | 201 ++++++ proto/purchase_wms.proto | 6 docs/docs.go | 334 +++++++++++ docs/swagger.json | 334 +++++++++++ api/v1/purchase/purchase.go | 221 +++++++ router/purchase/purchase.go | 25 utils/timex.go | 91 +++ proto/purchase_wms/purchase_wms.pb.go | 375 ++++++----- model/purchase/purchase_quality_inspection.go | 31 + service/purchase/purchase.go | 110 +++ initialize/gorm.go | 2 model/purchase/purchase_product_confirm.go | 27 14 files changed, 1,597 insertions(+), 200 deletions(-) diff --git a/api/v1/purchase/purchase.go b/api/v1/purchase/purchase.go index c847f43..316a704 100644 --- a/api/v1/purchase/purchase.go +++ b/api/v1/purchase/purchase.go @@ -3,6 +3,7 @@ import ( "context" "github.com/gin-gonic/gin" + "github.com/shopspring/decimal" "go.uber.org/zap" "gorm.io/gorm" "srm/global" @@ -415,3 +416,223 @@ } response.OkWithData(operationInfos, c) } + +// NewSubmit +// @Tags Purchase +// @Summary 鏂扮増鎻愪氦 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param id path int true "閲囪喘鍗旾D" true "閲囪喘鍗旾D" +// @Success 200 {object} response.Response{msg=string} "鏂扮増鎻愪氦" +// @Router /purchase/newSubmit/{id} [get] +func (e *PurchaseApi) NewSubmit(c *gin.Context) { + id, _ := strconv.Atoi(c.Param("id")) + if id == 0 { + response.FailWithMessage("鍙傛暟缂哄け", c) + return + } + data, err := service.NewPurchaseService().GetPurchase(uint(id)) + if err != nil { + global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err)) + response.FailWithMessage("鑾峰彇澶辫触", c) + return + } + productList, err := service.NewPurchaseService().GetPurchaseProductList(uint(id)) + if err != nil { + global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err)) + response.FailWithMessage("鑾峰彇澶辫触", c) + return + } + list := make([]*purchase.PurchaseProductConfirm, 0) + for _, products := range productList { + var ppc purchase.PurchaseProductConfirm + ppc.PurchaseNumber = data.Number + ppc.Principal = data.Principal + ppc.ProductId = products.Product.Number + ppc.ProductName = products.Product.Name + ppc.Unit = products.Product.Unit + ppc.Specs = products.Product.Specifications + ppc.Type = products.Product.ModelNumber + ppc.Amount = products.Amount + ppc.OverReceiveAmount = decimal.NewFromInt(0) + ppc.NotReceiveAmount = products.Amount + ppc.NowReceiveAmount = decimal.NewFromInt(0) + ppc.SurplusReceiveAmount = products.Amount + list = append(list, &ppc) + } + err = service.NewPurchaseService().SavePurchaseProductConfirm(list) + + if err != nil { + global.GVA_LOG.Error("鎻愪氦澶辫触!", zap.Error(err)) + response.FailWithMessage("鎻愪氦澶辫触", c) + return + } + response.OkWithMessage("鎻愪氦鎴愬姛", c) +} + +// GetPurchaseProductConfirmInfo +// @Tags Purchase +// @Summary 鑾峰彇纭淇℃伅 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param number path string true "閲囪喘鍗曠紪鐮�" +// @Success 200 {object} response.Response{data=[]purchase.PurchaseProductConfirm} "鑾峰彇纭淇℃伅" +// @Router /purchase/getPurchaseProductConfirmInfo/{number} [get] +func (e *PurchaseApi) GetPurchaseProductConfirmInfo(c *gin.Context) { + number := c.Param("number") + if number == "" { + response.FailWithMessage("鍙傛暟缂哄け", c) + return + } + info, err := service.NewPurchaseService().GetPurchaseProductConfirmInfo(number) + if err != nil { + global.GVA_LOG.Error("鑾峰彇纭淇℃伅澶辫触!", zap.Error(err)) + response.FailWithMessage("鑾峰彇纭淇℃伅澶辫触", c) + return + } + response.OkWithData(info, c) +} + +// SavePurchaseProductConfirm +// @Tags Purchase +// @Summary 纭鏀惰揣 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body []purchaserequest.PurchaseProductConfirmInfo true "list" +// @Success 200 {object} response.Response{msg=string} "纭鏀惰揣" +// @Router /purchase/savePurchaseProductConfirm [post] +func (e *PurchaseApi) SavePurchaseProductConfirm(c *gin.Context) { + var params []*purchaserequest.PurchaseProductConfirmInfo + err := c.ShouldBindJSON(¶ms) + if err != nil { + response.FailWithMessage(err.Error(), c) + return + } + + list := make([]*purchase.PurchaseProductConfirm, 0, len(params)) + if err := utils.AssignTo(params, &list); err != nil { + response.FailWithMessage(err.Error(), c) + return + } + + server := service.NewPurchaseService() + err = server.SavePurchaseProductConfirm(list) + + if err != nil { + global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err)) + response.FailWithMessage("淇濆瓨澶辫触", c) + return + } + err = server.SavePurchaseQualityInspection(list) + if err != nil { + global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err)) + response.FailWithMessage("淇濆瓨澶辫触", c) + return + } + response.OkWithMessage("淇濆瓨鎴愬姛", c) +} + +// GetPurchaseQualityInspectionInfo +// @Tags Purchase +// @Summary 鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body purchaserequest.GetQualityInspectionInfo true "鍙傛暟" +// @Success 200 {object} response.Response{data=[]purchase.PurchaseProductConfirm} "鑾峰彇纭淇℃伅" +// @Router /purchase/getPurchaseQualityInspectionInfo [post] +func (e *PurchaseApi) GetPurchaseQualityInspectionInfo(c *gin.Context) { + var params purchaserequest.GetQualityInspectionInfo + err := c.ShouldBindJSON(¶ms) + if err != nil { + response.FailWithMessage(err.Error(), c) + return + } + if params.PurchaseNumber == "" { + response.FailWithMessage("閲囪喘鍗曠紪鐮佷笉鑳戒负绌�", c) + return + } + infos, err := service.NewPurchaseService().GetPurchaseQualityInspection(params) + if err != nil { + global.GVA_LOG.Error("鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅!", zap.Error(err)) + response.FailWithMessage("鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅", c) + return + } + response.OkWithData(infos, c) +} + +// SavePurchaseQualityInspectionInfo +// @Tags Purchase +// @Summary 淇濆瓨閲囪喘璐ㄦ淇℃伅淇℃伅 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body purchaserequest.GetQualityInspectionInfo true "鍙傛暟" +// @Success 200 {object} response.Response{data=[]purchase.PurchaseProductConfirm} "鑾峰彇纭淇℃伅" +// @Router /purchase/savePurchaseQualityInspectionInfo [post] +func (e *PurchaseApi) SavePurchaseQualityInspectionInfo(c *gin.Context) { + var params purchaserequest.SaveQualityInspectionInfo + err := c.ShouldBindJSON(¶ms) + if err != nil { + response.FailWithMessage(err.Error(), c) + return + } + if params.PurchaseId == 0 || len(params.Ids) == 0 { + response.FailWithMessage("閲囪喘鍗曠紪鐮佸拰id涓嶈兘涓虹┖", c) + return + } + server := service.PurchaseService{} + if params.Status == purchase.Unqualified { + err := server.UpdatePurchaseQualityInspection(params.Ids, params.Status) + if err != nil { + global.GVA_LOG.Error("璐ㄦ澶辫触!", zap.Error(err)) + response.FailWithMessage("璐ㄦ澶辫触", c) + return + } + } else if params.Status == purchase.InWarehouse { + purchaseData, err := server.GetPurchase(params.PurchaseId) + if err != nil { + global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err)) + response.FailWithMessage("鑾峰彇澶辫触", c) + return + } + inspectionList, err := server.GetPurchaseQualityInspectionList(params.Ids) + if err != nil { + global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err)) + response.FailWithMessage("鑾峰彇澶辫触", c) + return + } + product := make([]*purchase_wms.PurchaseProduct, 0) + for _, inspection := range inspectionList { + var p purchase_wms.PurchaseProduct + p.Id = inspection.ProductId + p.Amount = inspection.Amount.IntPart() + product = append(product, &p) + } + client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn) + _, err = client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{ + Number: purchaseData.Number, + SupplierName: purchaseData.Supplier.Name, + SupplierId: int64(purchaseData.SupplierId), + Product: product, + Source: "SRM_PURCHASE", + WarehouseName: purchaseData.Warehouse, + }) + if err != nil { + global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err)) + response.FailWithMessage("grpc璋冪敤澶辫触", c) + return + } + err = server.UpdatePurchaseQualityInspection(params.Ids, params.Status) + if err != nil { + global.GVA_LOG.Error("璐ㄦ澶辫触!", zap.Error(err)) + response.FailWithMessage("璐ㄦ澶辫触", c) + return + } + } + + response.OkWithMessage("璐ㄦ鎴愬姛", c) +} diff --git a/docs/docs.go b/docs/docs.go index a683fef..5dc2a02 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1648,6 +1648,110 @@ } } }, + "/purchase/getPurchaseProductConfirmInfo/{number}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Purchase" + ], + "summary": "鑾峰彇纭淇℃伅", + "parameters": [ + { + "type": "string", + "description": "閲囪喘鍗曠紪鐮�", + "name": "number", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "鑾峰彇纭淇℃伅", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/response.Response" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/purchase.PurchaseProductConfirm" + } + } + } + } + ] + } + } + } + } + }, + "/purchase/getPurchaseQualityInspectionInfo": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Purchase" + ], + "summary": "鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅", + "parameters": [ + { + "description": "鍙傛暟", + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/purchaserequest.GetQualityInspectionInfo" + } + } + ], + "responses": { + "200": { + "description": "鑾峰彇纭淇℃伅", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/response.Response" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/purchase.PurchaseProductConfirm" + } + } + } + } + ] + } + } + } + } + }, "/purchase/getWarehouseInfo": { "get": { "security": [ @@ -1681,6 +1785,54 @@ "items": { "$ref": "#/definitions/purchase_wms.SrmGetWarehouseInfoResponse" } + } + } + } + ] + } + } + } + } + }, + "/purchase/newSubmit/{id}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Purchase" + ], + "summary": "鏂扮増鎻愪氦", + "parameters": [ + { + "type": "integer", + "description": "閲囪喘鍗旾D", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "鏂扮増鎻愪氦", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/response.Response" + }, + { + "type": "object", + "properties": { + "msg": { + "type": "string" } } } @@ -2108,6 +2260,59 @@ "data": { "$ref": "#/definitions/response.PageResult" }, + "msg": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/purchase/savePurchaseProductConfirm": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Purchase" + ], + "summary": "纭鏀惰揣", + "parameters": [ + { + "description": "list", + "name": "data", + "in": "body", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/purchaserequest.PurchaseProductConfirmInfo" + } + } + } + ], + "responses": { + "200": { + "description": "纭鏀惰揣", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/response.Response" + }, + { + "type": "object", + "properties": { "msg": { "type": "string" } @@ -3677,21 +3882,30 @@ 2, 3, 4, - 5 + 5, + 6, + 7, + 8 ], "x-enum-comments": { "OrderStatusCanceled": "宸插彇娑�", "OrderStatusCompleted": "宸插畬鎴�", "OrderStatusConfirmed": "寰呯‘璁�", + "OrderStatusPartReceive": "閮ㄥ垎鏀惰揣", "OrderStatusReceived": "寰呭叆搴�", - "OrderStatusStored": "宸插叆搴�" + "OrderStatusStored": "宸插叆搴�", + "OrderStatusWaitQuality": "寰呰川妫�", + "OrderStatusWaitReceive": "寰呮敹璐�" }, "x-enum-varnames": [ "OrderStatusConfirmed", "OrderStatusReceived", "OrderStatusStored", "OrderStatusCompleted", - "OrderStatusCanceled" + "OrderStatusCanceled", + "OrderStatusWaitReceive", + "OrderStatusPartReceive", + "OrderStatusWaitQuality" ] }, "purchase.PriceAdjustmentType": { @@ -3861,6 +4075,59 @@ } } }, + "purchase.PurchaseProductConfirm": { + "type": "object", + "properties": { + "amount": { + "type": "number" + }, + "created_at": { + "type": "string" + }, + "id": { + "description": "涓婚敭ID", + "type": "string", + "example": "0" + }, + "notReceiveAmount": { + "type": "number" + }, + "nowReceiveAmount": { + "description": "鏈鏀惰揣鏁伴噺", + "type": "number" + }, + "overReceiveAmount": { + "type": "number" + }, + "principal": { + "type": "string" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "purchaseNumber": { + "type": "string" + }, + "specs": { + "type": "string" + }, + "surplusReceiveAmount": { + "type": "number" + }, + "type": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, "purchase.PurchaseProducts": { "type": "object", "properties": { @@ -3985,6 +4252,26 @@ } } }, + "purchaserequest.GetQualityInspectionInfo": { + "type": "object", + "properties": { + "purchaseNumber": { + "type": "string" + }, + "status": { + "type": "array", + "items": { + "type": "integer" + } + }, + "times": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "purchaserequest.Purchase": { "type": "object", "properties": { @@ -4097,6 +4384,47 @@ } } }, + "purchaserequest.PurchaseProductConfirmInfo": { + "type": "object", + "properties": { + "amount": { + "type": "number" + }, + "notReceiveAmount": { + "type": "number" + }, + "nowReceiveAmount": { + "type": "number" + }, + "overReceiveAmount": { + "type": "number" + }, + "principal": { + "type": "string" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "purchaseNumber": { + "type": "string" + }, + "specs": { + "type": "string" + }, + "surplusReceiveAmount": { + "type": "number" + }, + "type": { + "type": "string" + }, + "unit": { + "type": "string" + } + } + }, "purchaserequest.PurchaseType": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index 4c8c5ad..2cc58b6 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -1639,6 +1639,110 @@ } } }, + "/purchase/getPurchaseProductConfirmInfo/{number}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Purchase" + ], + "summary": "鑾峰彇纭淇℃伅", + "parameters": [ + { + "type": "string", + "description": "閲囪喘鍗曠紪鐮�", + "name": "number", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "鑾峰彇纭淇℃伅", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/response.Response" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/purchase.PurchaseProductConfirm" + } + } + } + } + ] + } + } + } + } + }, + "/purchase/getPurchaseQualityInspectionInfo": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Purchase" + ], + "summary": "鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅", + "parameters": [ + { + "description": "鍙傛暟", + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/purchaserequest.GetQualityInspectionInfo" + } + } + ], + "responses": { + "200": { + "description": "鑾峰彇纭淇℃伅", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/response.Response" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/purchase.PurchaseProductConfirm" + } + } + } + } + ] + } + } + } + } + }, "/purchase/getWarehouseInfo": { "get": { "security": [ @@ -1672,6 +1776,54 @@ "items": { "$ref": "#/definitions/purchase_wms.SrmGetWarehouseInfoResponse" } + } + } + } + ] + } + } + } + } + }, + "/purchase/newSubmit/{id}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Purchase" + ], + "summary": "鏂扮増鎻愪氦", + "parameters": [ + { + "type": "integer", + "description": "閲囪喘鍗旾D", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "鏂扮増鎻愪氦", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/response.Response" + }, + { + "type": "object", + "properties": { + "msg": { + "type": "string" } } } @@ -2099,6 +2251,59 @@ "data": { "$ref": "#/definitions/response.PageResult" }, + "msg": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/purchase/savePurchaseProductConfirm": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Purchase" + ], + "summary": "纭鏀惰揣", + "parameters": [ + { + "description": "list", + "name": "data", + "in": "body", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/purchaserequest.PurchaseProductConfirmInfo" + } + } + } + ], + "responses": { + "200": { + "description": "纭鏀惰揣", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/response.Response" + }, + { + "type": "object", + "properties": { "msg": { "type": "string" } @@ -3668,21 +3873,30 @@ 2, 3, 4, - 5 + 5, + 6, + 7, + 8 ], "x-enum-comments": { "OrderStatusCanceled": "宸插彇娑�", "OrderStatusCompleted": "宸插畬鎴�", "OrderStatusConfirmed": "寰呯‘璁�", + "OrderStatusPartReceive": "閮ㄥ垎鏀惰揣", "OrderStatusReceived": "寰呭叆搴�", - "OrderStatusStored": "宸插叆搴�" + "OrderStatusStored": "宸插叆搴�", + "OrderStatusWaitQuality": "寰呰川妫�", + "OrderStatusWaitReceive": "寰呮敹璐�" }, "x-enum-varnames": [ "OrderStatusConfirmed", "OrderStatusReceived", "OrderStatusStored", "OrderStatusCompleted", - "OrderStatusCanceled" + "OrderStatusCanceled", + "OrderStatusWaitReceive", + "OrderStatusPartReceive", + "OrderStatusWaitQuality" ] }, "purchase.PriceAdjustmentType": { @@ -3852,6 +4066,59 @@ } } }, + "purchase.PurchaseProductConfirm": { + "type": "object", + "properties": { + "amount": { + "type": "number" + }, + "created_at": { + "type": "string" + }, + "id": { + "description": "涓婚敭ID", + "type": "string", + "example": "0" + }, + "notReceiveAmount": { + "type": "number" + }, + "nowReceiveAmount": { + "description": "鏈鏀惰揣鏁伴噺", + "type": "number" + }, + "overReceiveAmount": { + "type": "number" + }, + "principal": { + "type": "string" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "purchaseNumber": { + "type": "string" + }, + "specs": { + "type": "string" + }, + "surplusReceiveAmount": { + "type": "number" + }, + "type": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, "purchase.PurchaseProducts": { "type": "object", "properties": { @@ -3976,6 +4243,26 @@ } } }, + "purchaserequest.GetQualityInspectionInfo": { + "type": "object", + "properties": { + "purchaseNumber": { + "type": "string" + }, + "status": { + "type": "array", + "items": { + "type": "integer" + } + }, + "times": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "purchaserequest.Purchase": { "type": "object", "properties": { @@ -4088,6 +4375,47 @@ } } }, + "purchaserequest.PurchaseProductConfirmInfo": { + "type": "object", + "properties": { + "amount": { + "type": "number" + }, + "notReceiveAmount": { + "type": "number" + }, + "nowReceiveAmount": { + "type": "number" + }, + "overReceiveAmount": { + "type": "number" + }, + "principal": { + "type": "string" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "purchaseNumber": { + "type": "string" + }, + "specs": { + "type": "string" + }, + "surplusReceiveAmount": { + "type": "number" + }, + "type": { + "type": "string" + }, + "unit": { + "type": "string" + } + } + }, "purchaserequest.PurchaseType": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index bdcf9a0..b8e9d72 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -400,19 +400,28 @@ - 3 - 4 - 5 + - 6 + - 7 + - 8 type: integer x-enum-comments: OrderStatusCanceled: 宸插彇娑� OrderStatusCompleted: 宸插畬鎴� OrderStatusConfirmed: 寰呯‘璁� + OrderStatusPartReceive: 閮ㄥ垎鏀惰揣 OrderStatusReceived: 寰呭叆搴� OrderStatusStored: 宸插叆搴� + OrderStatusWaitQuality: 寰呰川妫� + OrderStatusWaitReceive: 寰呮敹璐� x-enum-varnames: - OrderStatusConfirmed - OrderStatusReceived - OrderStatusStored - OrderStatusCompleted - OrderStatusCanceled + - OrderStatusWaitReceive + - OrderStatusPartReceive + - OrderStatusWaitQuality purchase.PriceAdjustmentType: enum: - 1 @@ -531,6 +540,42 @@ - $ref: '#/definitions/purchase.WholeDiscountType' description: 鏁村崟鎶樻墸绫诲瀷 type: object + purchase.PurchaseProductConfirm: + properties: + amount: + type: number + created_at: + type: string + id: + description: 涓婚敭ID + example: "0" + type: string + notReceiveAmount: + type: number + nowReceiveAmount: + description: 鏈鏀惰揣鏁伴噺 + type: number + overReceiveAmount: + type: number + principal: + type: string + productId: + type: string + productName: + type: string + purchaseNumber: + type: string + specs: + type: string + surplusReceiveAmount: + type: number + type: + type: string + unit: + type: string + updated_at: + type: string + type: object purchase.PurchaseProducts: properties: amount: @@ -618,6 +663,19 @@ purchase: $ref: '#/definitions/purchaserequest.Purchase' type: object + purchaserequest.GetQualityInspectionInfo: + properties: + purchaseNumber: + type: string + status: + items: + type: integer + type: array + times: + items: + type: string + type: array + type: object purchaserequest.Purchase: properties: contact: @@ -695,6 +753,33 @@ allOf: - $ref: '#/definitions/purchase.WholeDiscountType' description: 鏁村崟鎶樻墸绫诲瀷 + type: object + purchaserequest.PurchaseProductConfirmInfo: + properties: + amount: + type: number + notReceiveAmount: + type: number + nowReceiveAmount: + type: number + overReceiveAmount: + type: number + principal: + type: string + productId: + type: string + productName: + type: string + purchaseNumber: + type: string + specs: + type: string + surplusReceiveAmount: + type: number + type: + type: string + unit: + type: string type: object purchaserequest.PurchaseType: properties: @@ -2037,6 +2122,65 @@ summary: 鑾峰彇鎿嶄綔淇℃伅 tags: - Purchase + /purchase/getPurchaseProductConfirmInfo/{number}: + get: + consumes: + - application/json + parameters: + - description: 閲囪喘鍗曠紪鐮� + in: path + name: number + required: true + type: string + produces: + - application/json + responses: + "200": + description: 鑾峰彇纭淇℃伅 + schema: + allOf: + - $ref: '#/definitions/response.Response' + - properties: + data: + items: + $ref: '#/definitions/purchase.PurchaseProductConfirm' + type: array + type: object + security: + - ApiKeyAuth: [] + summary: 鑾峰彇纭淇℃伅 + tags: + - Purchase + /purchase/getPurchaseQualityInspectionInfo: + post: + consumes: + - application/json + parameters: + - description: 鍙傛暟 + in: body + name: data + required: true + schema: + $ref: '#/definitions/purchaserequest.GetQualityInspectionInfo' + produces: + - application/json + responses: + "200": + description: 鑾峰彇纭淇℃伅 + schema: + allOf: + - $ref: '#/definitions/response.Response' + - properties: + data: + items: + $ref: '#/definitions/purchase.PurchaseProductConfirm' + type: array + type: object + security: + - ApiKeyAuth: [] + summary: 鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅 + tags: + - Purchase /purchase/getWarehouseInfo: get: consumes: @@ -2058,6 +2202,33 @@ security: - ApiKeyAuth: [] summary: 鑾峰彇浠撳簱鍒楄〃 + tags: + - Purchase + /purchase/newSubmit/{id}: + get: + consumes: + - application/json + parameters: + - description: 閲囪喘鍗旾D + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: 鏂扮増鎻愪氦 + schema: + allOf: + - $ref: '#/definitions/response.Response' + - properties: + msg: + type: string + type: object + security: + - ApiKeyAuth: [] + summary: 鏂扮増鎻愪氦 tags: - Purchase /purchase/purchase: @@ -2305,6 +2476,36 @@ summary: 鍒嗛〉鑾峰彇璐ㄦ鍗曞垪琛� tags: - QualityInspect + /purchase/savePurchaseProductConfirm: + post: + consumes: + - application/json + parameters: + - description: list + in: body + name: data + required: true + schema: + items: + $ref: '#/definitions/purchaserequest.PurchaseProductConfirmInfo' + type: array + produces: + - application/json + responses: + "200": + description: 纭鏀惰揣 + schema: + allOf: + - $ref: '#/definitions/response.Response' + - properties: + msg: + type: string + type: object + security: + - ApiKeyAuth: [] + summary: 纭鏀惰揣 + tags: + - Purchase /purchase/submit: post: consumes: diff --git a/initialize/gorm.go b/initialize/gorm.go index 42ae347..d0ef90c 100644 --- a/initialize/gorm.go +++ b/initialize/gorm.go @@ -37,6 +37,8 @@ test.SupplierMaterial{}, purchase.Purchase{}, purchase.PurchaseProducts{}, + purchase.PurchaseProductConfirm{}, + purchase.PurchaseQualityInspection{}, ) if err != nil { global.GVA_LOG.Error("register table failed", zap.Error(err)) diff --git a/model/purchase/purchase.go b/model/purchase/purchase.go index 79d8203..634202a 100644 --- a/model/purchase/purchase.go +++ b/model/purchase/purchase.go @@ -48,11 +48,14 @@ type OrderStatus int const ( - OrderStatusConfirmed OrderStatus = 1 //寰呯‘璁� - OrderStatusReceived OrderStatus = 2 //寰呭叆搴� - OrderStatusStored OrderStatus = 3 //宸插叆搴� - OrderStatusCompleted OrderStatus = 4 //宸插畬鎴� - OrderStatusCanceled OrderStatus = 5 //宸插彇娑� + OrderStatusConfirmed OrderStatus = 1 //寰呯‘璁� + OrderStatusReceived OrderStatus = 2 //寰呭叆搴� + OrderStatusStored OrderStatus = 3 //宸插叆搴� + OrderStatusCompleted OrderStatus = 4 //宸插畬鎴� + OrderStatusCanceled OrderStatus = 5 //宸插彇娑� + OrderStatusWaitReceive OrderStatus = 6 //寰呮敹璐� + OrderStatusPartReceive OrderStatus = 7 //閮ㄥ垎鏀惰揣 + OrderStatusWaitQuality OrderStatus = 8 //寰呰川妫� ) type WholeDiscountType int diff --git a/model/purchase/purchase_product_confirm.go b/model/purchase/purchase_product_confirm.go new file mode 100644 index 0000000..6c07f45 --- /dev/null +++ b/model/purchase/purchase_product_confirm.go @@ -0,0 +1,27 @@ +package purchase + +import ( + "github.com/shopspring/decimal" + "srm/global" +) + +// PurchaseProductConfirm 閲囪喘鍗曚骇鍝佺‘璁よ〃 +type PurchaseProductConfirm struct { + global.GVA_MODEL_INT + PurchaseNumber string `json:"purchaseNumber" gorm:"type:varchar(255);comment:閲囪喘鍗曠紪鍙�"` + ProductId string `json:"productId" gorm:"type:varchar(255);comment:浜у搧缂栫爜"` + ProductName string `json:"productName" gorm:"type:varchar(255);comment:浜у搧鍚�"` + Principal string `json:"principal" gorm:"type:varchar(255);comment:鏀惰揣浜�"` + Unit string `json:"unit" gorm:"type:varchar(255);comment:璁¢噺鍗曚綅"` + Specs string `json:"specs" gorm:"type:varchar(255);comment:瑙勬牸"` + Type string `json:"type" gorm:"type:varchar(255);comment:鍨嬪彿"` + Amount decimal.Decimal `json:"amount" gorm:"type:decimal(12,4);not null;comment:閲囪喘鏁伴噺"` + OverReceiveAmount decimal.Decimal `json:"overReceiveAmount" gorm:"type:decimal(12,4);comment:宸叉敹璐ф暟閲�"` + NotReceiveAmount decimal.Decimal `json:"notReceiveAmount" gorm:"type:decimal(12,4);comment:鏈敹璐ф暟閲�"` + NowReceiveAmount decimal.Decimal `json:"nowReceiveAmount" gorm:"-"` //鏈鏀惰揣鏁伴噺 + SurplusReceiveAmount decimal.Decimal `json:"surplusReceiveAmount" gorm:"type:decimal(12,4);comment:鍓╀綑鏀惰揣鏁伴噺"` +} + +func (PurchaseProductConfirm) TableName() string { + return "srm_purchase_product_confirm" +} diff --git a/model/purchase/purchase_quality_inspection.go b/model/purchase/purchase_quality_inspection.go new file mode 100644 index 0000000..78e9ab6 --- /dev/null +++ b/model/purchase/purchase_quality_inspection.go @@ -0,0 +1,31 @@ +package purchase + +import ( + "github.com/shopspring/decimal" + "srm/global" +) + +// PurchaseQualityInspection 閲囪喘浜у搧璐ㄦ琛� +type PurchaseQualityInspection struct { + global.GVA_MODEL_INT + PurchaseNumber string `json:"purchaseNumber" gorm:"type:varchar(255);comment:閲囪喘鍗曠紪鍙�"` + ProductId string `json:"productId" gorm:"type:varchar(255);comment:浜у搧缂栫爜"` + ProductName string `json:"productName" gorm:"type:varchar(255);comment:浜у搧鍚�"` + Principal string `json:"principal" gorm:"type:varchar(255);comment:鏀惰揣浜�"` + Unit string `json:"unit" gorm:"type:varchar(255);comment:璁¢噺鍗曚綅"` + Specs string `json:"specs" gorm:"type:varchar(255);comment:瑙勬牸"` + Type string `json:"type" gorm:"type:varchar(255);comment:鍨嬪彿"` + Amount decimal.Decimal `json:"amount" gorm:"type:decimal(12,4);not null;comment:閲囪喘鏁伴噺"` + Status int `json:"status" gorm:"type:int;comment:鐘舵��,1寰呰川妫�,2宸插叆搴�,3涓嶅悎鏍�"` + CreateTime string `json:"createTime" gorm:"type:varchar(255);comment:鍒涘缓鏃堕棿"` +} + +func (PurchaseQualityInspection) TableName() string { + return "srm_purchase_quality_inspection" +} + +const ( + WaitInspection = iota + 1 //寰呰川妫� + InWarehouse //宸插叆搴� + Unqualified //涓嶅悎鏍� +) diff --git a/model/purchase/request/purchase.go b/model/purchase/request/purchase.go index 3315919..1612ce1 100644 --- a/model/purchase/request/purchase.go +++ b/model/purchase/request/purchase.go @@ -51,3 +51,30 @@ Principal string `json:"principal" form:"principal" gorm:"type:varchar(255);not null;default '';comment:浠撳簱璐熻矗浜�"` //浠撳簱璐熻矗浜� SourceOrder string `json:"sourceOrder" gorm:"type:varchar(255);comment:鏉ユ簮鍗曟嵁"` //鏉ユ簮鍗曟嵁 } + +type PurchaseProductConfirmInfo struct { + PurchaseNumber string `json:"purchaseNumber" gorm:"type:varchar(255);comment:閲囪喘鍗曠紪鍙�"` + ProductId string `json:"productId" gorm:"type:varchar(255);comment:浜у搧缂栫爜"` + ProductName string `json:"productName" gorm:"type:varchar(255);comment:浜у搧鍚�"` + Principal string `json:"principal" gorm:"type:varchar(255);comment:鏀惰揣浜�"` + Unit string `json:"unit" gorm:"type:varchar(255);comment:璁¢噺鍗曚綅"` + Specs string `json:"specs" gorm:"type:varchar(255);comment:瑙勬牸"` + Type string `json:"type" gorm:"type:varchar(255);comment:鍨嬪彿"` + Amount decimal.Decimal `json:"amount" gorm:"type:decimal(12,4);not null;comment:閲囪喘鏁伴噺"` + OverReceiveAmount decimal.Decimal `json:"overReceiveAmount" gorm:"type:decimal(12,4);comment:宸叉敹璐ф暟閲�"` + NotReceiveAmount decimal.Decimal `json:"notReceiveAmount" gorm:"type:decimal(12,4);comment:鏈敹璐ф暟閲�"` + NowReceiveAmount decimal.Decimal `json:"nowReceiveAmount" gorm:"type:decimal(12,4);comment:鏈鏀惰揣鏁伴噺"` + SurplusReceiveAmount decimal.Decimal `json:"surplusReceiveAmount" gorm:"type:decimal(12,4);comment:鍓╀綑鏀惰揣鏁伴噺"` +} + +type GetQualityInspectionInfo struct { + PurchaseNumber string `json:"purchaseNumber"` + Status []int `json:"status"` + Times []string `json:"times"` +} + +type SaveQualityInspectionInfo struct { + PurchaseId uint `json:"purchaseId"` + Ids []int `json:"ids"` + Status int `json:"status"` +} diff --git a/proto/purchase_wms.proto b/proto/purchase_wms.proto index 5c9c5cf..0ac4a1b 100644 --- a/proto/purchase_wms.proto +++ b/proto/purchase_wms.proto @@ -23,9 +23,11 @@ message PurchaseToWmsRequest { string Number = 1; //閲囪喘缂栧彿 - string SupplierName = 2; //渚涘簲鍟� + string SupplierName = 2; //渚涘簲鍟嗗悕绉� string Source = 3;//鏉ユ簮 - repeated PurchaseProduct Product = 4; + int64 SupplierId = 4;//渚涘簲鍟唅d + string WarehouseName = 5;//浠撳簱鍚嶇О + repeated PurchaseProduct Product = 6; } message PurchaseToWmsResponse { diff --git a/proto/purchase_wms/purchase_wms.pb.go b/proto/purchase_wms/purchase_wms.pb.go index 0c09b8c..1c15413 100644 --- a/proto/purchase_wms/purchase_wms.pb.go +++ b/proto/purchase_wms/purchase_wms.pb.go @@ -80,10 +80,12 @@ sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Number string `protobuf:"bytes,1,opt,name=Number,proto3" json:"Number,omitempty"` //閲囪喘缂栧彿 - SupplierName string `protobuf:"bytes,2,opt,name=SupplierName,proto3" json:"SupplierName,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"` + Number string `protobuf:"bytes,1,opt,name=Number,proto3" json:"Number,omitempty"` //閲囪喘缂栧彿 + SupplierName string `protobuf:"bytes,2,opt,name=SupplierName,proto3" json:"SupplierName,omitempty"` //渚涘簲鍟嗗悕绉� + Source string `protobuf:"bytes,3,opt,name=Source,proto3" json:"Source,omitempty"` //鏉ユ簮 + SupplierId int64 `protobuf:"varint,4,opt,name=SupplierId,proto3" json:"SupplierId,omitempty"` //渚涘簲鍟唅d + WarehouseName string `protobuf:"bytes,5,opt,name=WarehouseName,proto3" json:"WarehouseName,omitempty"` //浠撳簱鍚嶇О + Product []*PurchaseProduct `protobuf:"bytes,6,rep,name=Product,proto3" json:"Product,omitempty"` } func (x *PurchaseToWmsRequest) Reset() { @@ -135,6 +137,20 @@ func (x *PurchaseToWmsRequest) GetSource() string { if x != nil { return x.Source + } + return "" +} + +func (x *PurchaseToWmsRequest) GetSupplierId() int64 { + if x != nil { + return x.SupplierId + } + return 0 +} + +func (x *PurchaseToWmsRequest) GetWarehouseName() string { + if x != nil { + return x.WarehouseName } return "" } @@ -1335,190 +1351,195 @@ 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, - 0x96, 0x01, 0x0a, 0x14, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x57, 0x6d, + 0xdc, 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, 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, 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, 0xbc, 0x02, 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, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x6e, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x12, - 0x22, 0x0a, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 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, 0x22, 0x34, 0x0a, 0x14, 0x45, 0x78, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, - 0x6c, 0x69, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, 0x2d, 0x0a, 0x15, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x45, 0x78, 0x69, 0x73, 0x74, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x72, 0x6d, 0x47, - 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5e, 0x0a, 0x10, 0x53, 0x72, 0x6d, 0x57, 0x61, 0x72, - 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6e, - 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, - 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x22, 0x44, 0x0a, 0x1b, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, - 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x72, 0x6d, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, - 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x34, 0x0a, 0x1a, - 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x22, 0xf6, 0x01, 0x0a, 0x0c, 0x53, 0x72, 0x6d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x77, - 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x76, 0x65, - 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x76, 0x65, - 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4c, 0x0a, 0x1b, 0x53, - 0x72, 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x0a, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x53, 0x72, 0x6d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6d, 0x0a, 0x1a, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x42, 0x79, 0x41, 0x70, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x71, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 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, 0x52, 0x03, 0x72, 0x65, 0x71, 0x32, 0xeb, 0x05, 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, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, + 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x06, 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, 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, + 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, 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, 0x12, 0x40, 0x0a, 0x0d, 0x45, 0x78, 0x69, 0x73, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x15, 0x2e, 0x45, 0x78, 0x69, 0x73, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x13, 0x53, 0x72, - 0x6d, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1b, 0x2e, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, - 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, - 0x0a, 0x13, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x2e, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, + 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, 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, 0xbc, 0x02, 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, 0x12, 0x20, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x70, 0x65, 0x63, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x70, 0x65, 0x63, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x75, 0x6e, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x41, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, 0x69, 0x6e, + 0x69, 0x73, 0x68, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 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, 0x22, 0x34, 0x0a, 0x14, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, + 0x2d, 0x0a, 0x15, 0x45, 0x78, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x78, 0x69, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x45, 0x78, 0x69, 0x73, 0x74, 0x22, 0x1c, + 0x0a, 0x1a, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5e, 0x0a, 0x10, + 0x53, 0x72, 0x6d, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x22, 0x44, 0x0a, 0x1b, + 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x72, 0x6d, 0x57, + 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, + 0x66, 0x6f, 0x22, 0x34, 0x0a, 0x1a, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xf6, 0x01, 0x0a, 0x0c, 0x53, 0x72, 0x6d, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, + 0x75, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, + 0x6f, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x22, 0x4c, 0x0a, 0x1b, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2d, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x72, 0x6d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x6d, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, + 0x65, 0x42, 0x79, 0x41, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x71, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 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, 0x52, 0x03, 0x72, 0x65, 0x71, 0x32, 0xeb, + 0x05, 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, 0x41, 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x42, 0x79, 0x41, 0x70, 0x73, 0x52, + 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, 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, + 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, 0x12, 0x40, + 0x0a, 0x0d, 0x45, 0x78, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, + 0x15, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x53, 0x75, + 0x70, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x52, 0x0a, 0x13, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, + 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x2e, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, + 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, + 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x13, 0x53, 0x72, 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x2e, 0x53, 0x72, + 0x6d, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x53, 0x72, 0x6d, 0x47, 0x65, + 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 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, 0x41, 0x70, 0x73, 0x12, + 0x1b, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, + 0x42, 0x79, 0x41, 0x70, 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, 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 ( diff --git a/router/purchase/purchase.go b/router/purchase/purchase.go index 3273abd..740c698 100644 --- a/router/purchase/purchase.go +++ b/router/purchase/purchase.go @@ -9,16 +9,21 @@ purchaseRouter := Router.Group("purchase") PurchaseApi := purchase.PurchaseApi{} { - purchaseRouter.POST("purchase", PurchaseApi.CreatePurchase) // 鍒涘缓閲囪喘鍗� - purchaseRouter.PUT("purchase", PurchaseApi.UpdatePurchase) // 鏇存柊閲囪喘鍗� - purchaseRouter.DELETE("purchase/:id", PurchaseApi.DeletePurchase) // 鍒犻櫎閲囪喘鍗� - purchaseRouter.GET("purchase/:id", PurchaseApi.GetPurchase) // 鑾峰彇鍗曚竴閲囪喘鍗曚俊鎭� - purchaseRouter.GET("purchaseList", PurchaseApi.GetPurchaseList) // 鑾峰彇閲囪喘鍗曞垪琛� - purchaseRouter.POST("submit", PurchaseApi.Submit) // 鎻愪氦閲囪喘鍗� - purchaseRouter.POST("purchaseType", PurchaseApi.SavePurchaseType) // 淇濆瓨閲囪喘绫诲瀷 - purchaseRouter.GET("purchaseTypeList", PurchaseApi.GetPurchaseTypeList) // 鏌ヨ閲囪喘绫诲瀷 - purchaseRouter.GET("getWarehouseInfo", PurchaseApi.GetWarehouseInfo) // 鑾峰彇浠撳簱鍒楄〃 - purchaseRouter.GET("getOperationInfo/:id", PurchaseApi.GetOperationInfo) // 鑾峰彇鎿嶄綔淇℃伅 + purchaseRouter.POST("purchase", PurchaseApi.CreatePurchase) // 鍒涘缓閲囪喘鍗� + purchaseRouter.PUT("purchase", PurchaseApi.UpdatePurchase) // 鏇存柊閲囪喘鍗� + purchaseRouter.DELETE("purchase/:id", PurchaseApi.DeletePurchase) // 鍒犻櫎閲囪喘鍗� + purchaseRouter.GET("purchase/:id", PurchaseApi.GetPurchase) // 鑾峰彇鍗曚竴閲囪喘鍗曚俊鎭� + purchaseRouter.GET("purchaseList", PurchaseApi.GetPurchaseList) // 鑾峰彇閲囪喘鍗曞垪琛� + purchaseRouter.POST("submit", PurchaseApi.Submit) // 鎻愪氦閲囪喘鍗� + purchaseRouter.POST("purchaseType", PurchaseApi.SavePurchaseType) // 淇濆瓨閲囪喘绫诲瀷 + purchaseRouter.GET("purchaseTypeList", PurchaseApi.GetPurchaseTypeList) // 鏌ヨ閲囪喘绫诲瀷 + purchaseRouter.GET("getWarehouseInfo", PurchaseApi.GetWarehouseInfo) // 鑾峰彇浠撳簱鍒楄〃 + purchaseRouter.GET("getOperationInfo/:id", PurchaseApi.GetOperationInfo) // 鑾峰彇鎿嶄綔淇℃伅 + purchaseRouter.GET("newSubmit/:id", PurchaseApi.NewSubmit) // 鏂扮増鎻愪氦 + purchaseRouter.GET("getPurchaseProductConfirmInfo/:number", PurchaseApi.GetPurchaseProductConfirmInfo) // 鑾峰彇纭淇℃伅 + purchaseRouter.POST("savePurchaseProductConfirm", PurchaseApi.SavePurchaseProductConfirm) // 纭鏀惰揣 + purchaseRouter.POST("getPurchaseQualityInspectionInfo", PurchaseApi.GetPurchaseQualityInspectionInfo) // 鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅 + purchaseRouter.POST("savePurchaseQualityInspectionInfo", PurchaseApi.SavePurchaseQualityInspectionInfo) // 淇濆瓨閲囪喘璐ㄦ淇℃伅淇℃伅 } qualityInspectRouter := Router.Group("purchase") diff --git a/service/purchase/purchase.go b/service/purchase/purchase.go index de89020..cafe909 100644 --- a/service/purchase/purchase.go +++ b/service/purchase/purchase.go @@ -11,6 +11,8 @@ purchaserequest "srm/model/purchase/request" "srm/proto/qualityinspect" "srm/service/test" + "srm/utils" + "time" ) type PurchaseService struct{} @@ -291,3 +293,111 @@ err := global.GVA_DB.Model(&purchase.Purchase{}).Count(&total).Error return int(total), err } + +func (slf *PurchaseService) SavePurchaseProductConfirm(list []*purchase.PurchaseProductConfirm) (err error) { + if len(list) == 0 { + return errors.New("浜у搧鍒楄〃涓嶈兘涓虹┖") + } + purchaseNumber := list[0].PurchaseNumber + var pur purchase.Purchase + err = global.GVA_DB.Where("number = ?", purchaseNumber).First(&pur).Error + if err != nil { + return err + } + + m := make(map[string]interface{}) + now := int64(0) + yu := int64(0) + for _, confirm := range list { + if !confirm.NowReceiveAmount.IsZero() { + now = confirm.NowReceiveAmount.IntPart() + } + if !confirm.SurplusReceiveAmount.IsZero() { + yu = confirm.SurplusReceiveAmount.IntPart() + } + confirm.OverReceiveAmount = confirm.OverReceiveAmount.Add(confirm.NowReceiveAmount) + confirm.NotReceiveAmount = confirm.Amount.Sub(confirm.OverReceiveAmount) + } + if now == 0 && yu > 0 { + m["status"] = purchase.OrderStatusWaitReceive + } + if now > 0 && yu > 0 { + m["status"] = purchase.OrderStatusPartReceive + } + if now > 0 && yu == 0 { + m["status"] = purchase.OrderStatusWaitQuality + } + + err = global.GVA_DB.Transaction(func(tx *gorm.DB) error { + err = tx.Where("purchase_number = ?", purchaseNumber).Delete(&purchase.PurchaseProductConfirm{}).Error + if err != nil { + return err + } + + err = tx.Create(list).Error + if err != nil { + return err + } + err = tx.Where("number = ?", purchaseNumber).Model(&purchase.Purchase{}).Updates(m).Error + if err != nil { + return err + } + + return nil + }) + return err +} + +func (slf *PurchaseService) GetPurchaseProductConfirmInfo(number string) ([]*purchase.PurchaseProductConfirm, error) { + var list []*purchase.PurchaseProductConfirm + err := global.GVA_DB.Model(&purchase.PurchaseProductConfirm{}).Where("purchase_number = ?", number).Find(&list).Error + return list, err +} + +func (slf *PurchaseService) SavePurchaseQualityInspection(list []*purchase.PurchaseProductConfirm) (err error) { + if len(list) == 0 { + return errors.New("浜у搧鍒楄〃涓嶈兘涓虹┖") + } + purchaseNumber := list[0].PurchaseNumber + qualityList := make([]*purchase.PurchaseQualityInspection, 0) + for _, confirm := range list { + var pqi purchase.PurchaseQualityInspection + pqi.PurchaseNumber = purchaseNumber + pqi.Principal = confirm.Principal + pqi.ProductId = confirm.ProductId + pqi.ProductName = confirm.ProductName + pqi.Amount = confirm.NowReceiveAmount + pqi.Status = purchase.WaitInspection + pqi.CreateTime = utils.TimeToString(time.Now()) + pqi.Unit = confirm.Unit + pqi.Specs = confirm.Specs + pqi.Type = confirm.Type + qualityList = append(qualityList, &pqi) + } + err = global.GVA_DB.Model(purchase.PurchaseQualityInspection{}).Create(qualityList).Error + return err +} + +func (slf *PurchaseService) GetPurchaseQualityInspection(params purchaserequest.GetQualityInspectionInfo) ([]*purchase.PurchaseQualityInspection, error) { + var list []*purchase.PurchaseQualityInspection + db := global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("purchase_number = ?", params.PurchaseNumber) + if len(params.Status) > 0 { + db = db.Where("status in (?)", params.Status) + } + if len(params.Times) > 0 { + db = db.Where("create_time in (?)", params.Times) + } + err := db.Find(&list).Error + return list, err +} + +func (slf *PurchaseService) UpdatePurchaseQualityInspection(ids []int, status int) error { + err := global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("id in (?)", ids).Updates(map[string]interface{}{"status": status}).Error + return err +} + +func (slf *PurchaseService) GetPurchaseQualityInspectionList(ids []int) ([]*purchase.PurchaseQualityInspection, error) { + var list []*purchase.PurchaseQualityInspection + err := global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("id in (?)", ids).Find(&list).Error + return list, err +} diff --git a/utils/timex.go b/utils/timex.go new file mode 100644 index 0000000..5e32afd --- /dev/null +++ b/utils/timex.go @@ -0,0 +1,91 @@ +package utils + +import ( + "time" +) + +func StringToTime(timeStr string) (time.Time, error) { + return time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local) +} + +func StringToTime2(timeStr string) (time.Time, error) { + return time.ParseInLocation("2006-01-02", timeStr, time.Local) +} + +func StringToTime3(timeStr string) (time.Time, error) { + return time.ParseInLocation("2006-01-02 15:04", timeStr, time.Local) +} + +func StringToClock(timeStr string) (time.Time, error) { + return time.ParseInLocation("15:04", timeStr, time.Local) +} + +func TimeToString(time time.Time) string { + return time.Format("2006-01-02 15:04:05") +} + +func TimeToString2(time time.Time) string { + return time.Format("2006-01-02") +} + +func TimeToString3(time time.Time) string { + return time.Format("15:04") +} + +func TimeToMonthDay(time time.Time) string { + return time.Format("01-02") +} + +func UnixTimeToString(_t int64) string { + return time.Unix(_t, 0).In(time.Local).Format("2006-01-02 15:04:05") +} +func UnixTimeToDate(_t int64) string { + return time.Unix(_t, 0).In(time.Local).Format("2006-01-02") +} + +func DayStartTime(_t int64) int64 { + l := time.Unix(_t, 0).In(time.Local) + k := time.Date(l.Year(), l.Month(), l.Day(), 0, 0, 0, 0, time.Local).Unix() + return k +} + +func DayStart(_t time.Time) time.Time { + l := _t.In(time.Local) + k := time.Date(l.Year(), l.Month(), l.Day(), 0, 0, 0, 0, time.Local) + return k +} + +func DayStartTimeDateStr(_t int64) string { + l := time.Unix(_t, 0).In(time.Local) + k := time.Date(l.Year(), l.Month(), l.Day(), 0, 0, 0, 0, time.Local) + return TimeToString2(k) +} + +const timeLayout = "2006-01-02 15:04:05" + +func GetCurrentTime() string { + return time.Now().Format(timeLayout) +} + +// WeekdayCount 鏍规嵁寮�濮嬫椂闂存埑锛岀粨鏉熸椂闂存埑(涓嶅惈)杩斿洖宸ヤ綔鏃ュぉ鏁� +func WeekdayCount(startTs, endTs int64) (workDays int64) { + for startTs < endTs { + startDate := time.Unix(startTs, 0).In(time.Local) + weekday := startDate.Weekday() + if weekday >= time.Monday && weekday <= time.Friday { + workDays++ + } + startTs += 86400 + } + return workDays +} + +func TodayStartTime() time.Time { + l := time.Now().In(time.Local) + k := time.Date(l.Year(), l.Month(), l.Day(), 0, 0, 0, 0, time.Local) + return k +} + +func TodayStartTs() int64 { + return TodayStartTime().Unix() +} -- Gitblit v1.8.0