From cf1b4c60a7005b1dcd2f7e5c4b2ce5ec01c7501e Mon Sep 17 00:00:00 2001 From: jiangshuai <291802688@qq.com> Date: 星期四, 28 九月 2023 10:19:00 +0800 Subject: [PATCH] 1.库存盘点修改、验证 --- models/material.go | 10 ++ request/location_product_amount.go | 6 + docs/swagger.yaml | 31 +++++++ docs/docs.go | 47 +++++++++++ docs/swagger.json | 47 +++++++++++ controllers/location_product_amount.go | 61 +++++++++++++++ router/router.go | 1 7 files changed, 203 insertions(+), 0 deletions(-) diff --git a/controllers/location_product_amount.go b/controllers/location_product_amount.go index d7594dc..2d76187 100644 --- a/controllers/location_product_amount.go +++ b/controllers/location_product_amount.go @@ -203,3 +203,64 @@ util.ResponseFormat(c, code.Success, "淇敼鎴愬姛") } + +// finish +// +// @Tags 搴撳瓨鐩樼偣 +// @Summary 搴旂敤銆侀獙璇� +// @Produce application/json +// @Param object body request.FinishLocationProductAmount true "鍏ュ弬" +// @Success 200 {object} util.Response "鎴愬姛" +// @Router /api-wms/v1/locationProductAmount/finish [post] +func (slf LocationProductAmountController) Finish(c *gin.Context) { + var reqParams request.FinishLocationProductAmount + if err := c.BindJSON(&reqParams); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + if reqParams.LocationProductAmountId == 0 { + util.ResponseFormat(c, code.RequestParamError, "locationProductAmountId涓�0") + return + } + if reqParams.OperationId == 0 { + util.ResponseFormat(c, code.RequestParamError, "operationId涓�0") + return + } + operationSearch := models.NewOperationSearch().SetPreload(true) + operationSearch.SetOrm(operationSearch.Orm.InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation_details.product_id=? and wms_operation.id=?", reqParams.ProductId, reqParams.OperationId)) + operation, err := operationSearch.First() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏈壘鍒扮浉鍏充俊鎭�:"+err.Error()) + return + } + if operation.Status != constvar.OperationStatus_Ready { + util.ResponseFormat(c, code.RequestError, "璇ラ獙璇佹棤娉曞畬鎴�") + return + } + material, err := models.NewMaterialSearch().SetID(reqParams.ProductId).First() + if err != nil { + util.ResponseFormat(c, code.RequestError, err.Error()) + return + } + locProdtAmount, err := models.NewLocationProductAmountSearch().SetID(reqParams.LocationProductAmountId).First() + if err != nil { + util.ResponseFormat(c, code.RequestError, err.Error()) + return + } + if err := models.WithTransaction(func(tx *gorm.DB) error { + if err := models.NewOperationSearch().SetOrm(tx).SetID(reqParams.OperationId).Update(&models.Operation{Status: constvar.OperationStatus_Finish}); err != nil { + return err + } + if err := models.NewMaterialSearch().SetOrm(tx).SetID(reqParams.ProductId).Update(&models.Material{Amount: material.Amount.Add(operation.Details[0].Amount)}); err != nil { + return err + } + if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(reqParams.LocationProductAmountId).Update(&models.LocationProductAmount{Amount: locProdtAmount.Amount.Add(operation.Details[0].Amount)}); err != nil { + return err + } + return nil + }); err != nil { + util.ResponseFormat(c, code.RequestError, err.Error()) + return + } + util.ResponseFormat(c, code.Success, "鎿嶄綔鎴愬姛") +} diff --git a/docs/docs.go b/docs/docs.go index 4f78bf4..ce8cdb9 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -750,6 +750,36 @@ } } }, + "/api-wms/v1/locationProductAmount/finish": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "搴撳瓨鐩樼偣" + ], + "summary": "搴旂敤銆侀獙璇�", + "parameters": [ + { + "description": "鍏ュ弬", + "name": "object", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.FinishLocationProductAmount" + } + } + ], + "responses": { + "200": { + "description": "鎴愬姛", + "schema": { + "$ref": "#/definitions/util.Response" + } + } + } + } + }, "/api-wms/v1/locationProductAmount/list": { "post": { "produces": [ @@ -2956,6 +2986,23 @@ } } }, + "request.FinishLocationProductAmount": { + "type": "object", + "properties": { + "locationProductAmountId": { + "description": "搴撳瓨鐩樼偣id", + "type": "integer" + }, + "operationId": { + "description": "鍑哄叆搴搃d", + "type": "integer" + }, + "productId": { + "description": "浜у搧id", + "type": "string" + } + } + }, "request.GetInventoryForms": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index 67b761c..a6dca38 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -738,6 +738,36 @@ } } }, + "/api-wms/v1/locationProductAmount/finish": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "搴撳瓨鐩樼偣" + ], + "summary": "搴旂敤銆侀獙璇�", + "parameters": [ + { + "description": "鍏ュ弬", + "name": "object", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/request.FinishLocationProductAmount" + } + } + ], + "responses": { + "200": { + "description": "鎴愬姛", + "schema": { + "$ref": "#/definitions/util.Response" + } + } + } + } + }, "/api-wms/v1/locationProductAmount/list": { "post": { "produces": [ @@ -2944,6 +2974,23 @@ } } }, + "request.FinishLocationProductAmount": { + "type": "object", + "properties": { + "locationProductAmountId": { + "description": "搴撳瓨鐩樼偣id", + "type": "integer" + }, + "operationId": { + "description": "鍑哄叆搴搃d", + "type": "integer" + }, + "productId": { + "description": "浜у搧id", + "type": "string" + } + } + }, "request.GetInventoryForms": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index eecd6f1..fe5de96 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -799,6 +799,18 @@ required: - code type: object + request.FinishLocationProductAmount: + properties: + locationProductAmountId: + description: 搴撳瓨鐩樼偣id + type: integer + operationId: + description: 鍑哄叆搴搃d + type: integer + productId: + description: 浜у搧id + type: string + type: object request.GetInventoryForms: properties: categoryIds: @@ -1674,6 +1686,25 @@ summary: 娣诲姞搴撳瓨鐩樼偣淇℃伅 tags: - 搴撳瓨鐩樼偣 + /api-wms/v1/locationProductAmount/finish: + post: + parameters: + - description: 鍏ュ弬 + in: body + name: object + required: true + schema: + $ref: '#/definitions/request.FinishLocationProductAmount' + produces: + - application/json + responses: + "200": + description: 鎴愬姛 + schema: + $ref: '#/definitions/util.Response' + summary: 搴旂敤銆侀獙璇� + tags: + - 搴撳瓨鐩樼偣 /api-wms/v1/locationProductAmount/list: post: parameters: diff --git a/models/material.go b/models/material.go index f22f5b9..77f3181 100644 --- a/models/material.go +++ b/models/material.go @@ -512,3 +512,13 @@ Amount decimal.Decimal `json:"amount" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"` //鏁伴噺 Unit string `json:"unit" gorm:"type:varchar(31);comment:鍗曚綅"` } + +func (slf *MaterialSearch) Update(record *Material) error { + var db = slf.build() + + if err := db.Omit("CreatedAt").Updates(record).Error; err != nil { + return fmt.Errorf("save err: %v, record: %+v", err, record) + } + + return nil +} diff --git a/request/location_product_amount.go b/request/location_product_amount.go index fac0745..82a7b48 100644 --- a/request/location_product_amount.go +++ b/request/location_product_amount.go @@ -18,3 +18,9 @@ Amount decimal.Decimal `json:"Amount"` //搴撳瓨鏁伴噺 ProductId string `json:"productId"` //浜у搧id } + +type FinishLocationProductAmount struct { + LocationProductAmountId int `json:"locationProductAmountId"` //搴撳瓨鐩樼偣id + OperationId int `json:"operationId"` //鍑哄叆搴搃d + ProductId string `json:"productId"` //浜у搧id +} diff --git a/router/router.go b/router/router.go index 11a3378..271eb00 100644 --- a/router/router.go +++ b/router/router.go @@ -128,6 +128,7 @@ locationProductAmountAPI.POST("add", locationProductAmountController.Add) //娣诲姞搴撳瓨鐩樼偣淇℃伅 locationProductAmountAPI.POST("list", locationProductAmountController.List) //鏌ョ湅搴撳瓨鐩樼偣鍒楄〃 locationProductAmountAPI.POST("update", locationProductAmountController.Update) //淇敼搴撳瓨鐩樼偣淇℃伅 + locationProductAmountAPI.POST("finish", locationProductAmountController.Finish) //搴旂敤銆侀獙璇佸簱瀛樼洏鐐逛俊鎭� } //鎶ヨ〃 -- Gitblit v1.8.0