From d91f181819984ed68d928bec6e926da6566e7a3f Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 05 七月 2024 14:53:02 +0800 Subject: [PATCH] 当操作为出库或调拨时,操作详情明细返回产品相应位置的实时库存 --- controllers/operation.go | 29 ++++++++- models/location_product_amount.go | 10 +++ docs/swagger.yaml | 14 ++++ docs/docs.go | 26 +++++++- docs/swagger.json | 23 +++++++ service/location_amount.go | 24 ++++++++ service/operation.go | 2 7 files changed, 114 insertions(+), 14 deletions(-) diff --git a/controllers/operation.go b/controllers/operation.go index f0afda4..5efb66b 100644 --- a/controllers/operation.go +++ b/controllers/operation.go @@ -287,12 +287,11 @@ // GetOperationInfo // @Tags 鍏ュ簱/鍑哄簱 -// @Summary 鍏ュ簱/鍑哄簱鍒楄〃 +// @Summary 鎿嶄綔璇︽儏鎺ュ彛 // @Produce application/json -// -// @Param id path string true "id" -// -// @Success 200 {object} util.Response "鎴愬姛" +// @Param id path string true "id" +// @Param Authorization header string true "token" +// @Success 200 {object} util.Response{data=models.Operation} "鎴愬姛" // @Router /api-wms/v1/operation/getOperationInfo/{id} [get] func (slf OperationController) GetOperationInfo(c *gin.Context) { number := c.Param("id") @@ -306,6 +305,26 @@ util.ResponseFormat(c, code.RequestParamError, err.Error()) return } + + if operation.BaseOperationType == constvar.BaseOperationTypeOutgoing || operation.BaseOperationType == constvar.BaseOperationTypeInternal { //鏌ヨ瀹炴椂鍦ㄥ簱搴撳瓨 + productIds := make([]string, 0) + locationIds := make([]int, 0) + for _, v := range operation.Details { + productIds = append(productIds, v.ProductId) + locationIds = append(locationIds, v.FromLocationID) + } + locationAmountMap, err := service.GetLocationAmounts(productIds, locationIds) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鏌ヨ浜у搧搴撳瓨閿欒") + return + } + for _, v := range operation.Details { + if locationAmountMap[v.ProductId] != nil { + v.StockAmount = locationAmountMap[v.ProductId][v.FromLocationID] + } + } + } + util.ResponseFormat(c, code.Success, operation) } diff --git a/docs/docs.go b/docs/docs.go index da9fa40..aee23f5 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1,5 +1,4 @@ -// Code generated by swaggo/swag. DO NOT EDIT. - +// Package docs Code generated by swaggo/swag. DO NOT EDIT package docs import "github.com/swaggo/swag" @@ -2032,7 +2031,7 @@ "tags": [ "鍏ュ簱/鍑哄簱" ], - "summary": "鍏ュ簱/鍑哄簱鍒楄〃", + "summary": "鎿嶄綔璇︽儏鎺ュ彛", "parameters": [ { "type": "string", @@ -2040,13 +2039,32 @@ "name": "id", "in": "path", "required": true + }, + { + "type": "string", + "description": "token", + "name": "Authorization", + "in": "header", + "required": true } ], "responses": { "200": { "description": "鎴愬姛", "schema": { - "$ref": "#/definitions/util.Response" + "allOf": [ + { + "$ref": "#/definitions/util.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.Operation" + } + } + } + ] } } } diff --git a/docs/swagger.json b/docs/swagger.json index 6d4985c..76cdd10 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -2020,7 +2020,7 @@ "tags": [ "鍏ュ簱/鍑哄簱" ], - "summary": "鍏ュ簱/鍑哄簱鍒楄〃", + "summary": "鎿嶄綔璇︽儏鎺ュ彛", "parameters": [ { "type": "string", @@ -2028,13 +2028,32 @@ "name": "id", "in": "path", "required": true + }, + { + "type": "string", + "description": "token", + "name": "Authorization", + "in": "header", + "required": true } ], "responses": { "200": { "description": "鎴愬姛", "schema": { - "$ref": "#/definitions/util.Response" + "allOf": [ + { + "$ref": "#/definitions/util.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.Operation" + } + } + } + ] } } } diff --git a/docs/swagger.yaml b/docs/swagger.yaml index ff40eef..336f0d7 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -3669,14 +3669,24 @@ name: id required: true type: string + - description: token + in: header + name: Authorization + required: true + type: string produces: - application/json responses: "200": description: 鎴愬姛 schema: - $ref: '#/definitions/util.Response' - summary: 鍏ュ簱/鍑哄簱鍒楄〃 + allOf: + - $ref: '#/definitions/util.Response' + - properties: + data: + $ref: '#/definitions/models.Operation' + type: object + summary: 鎿嶄綔璇︽儏鎺ュ彛 tags: - 鍏ュ簱/鍑哄簱 /api-wms/v1/operation/getPersonnelList: diff --git a/models/location_product_amount.go b/models/location_product_amount.go index 98abd13..6b82f7c 100644 --- a/models/location_product_amount.go +++ b/models/location_product_amount.go @@ -36,6 +36,7 @@ ProductIds []string Ids []int Query string + Fields string } LocationProductAmountWithOperation struct { @@ -131,6 +132,11 @@ return slf } +func (slf *LocationProductAmountSearch) SetFields(fields string) *LocationProductAmountSearch { + slf.Fields = fields + return slf +} + func (slf *LocationProductAmountSearch) build() *gorm.DB { var db = slf.Orm.Model(&LocationProductAmount{}) @@ -181,6 +187,10 @@ db = db.Where("warehouse_id = ?", slf.WarehouseId) } + if slf.Fields != "" { + db = db.Select(slf.Fields) + } + return db } diff --git a/service/location_amount.go b/service/location_amount.go new file mode 100644 index 0000000..b6c7b69 --- /dev/null +++ b/service/location_amount.go @@ -0,0 +1,24 @@ +package service + +import ( + "github.com/shopspring/decimal" + "wms/models" +) + +func GetLocationAmounts(productIds []string, locationIds []int) (locationAmountMap map[string]map[int]decimal.Decimal, err error) { + locationAmounts, err := models.NewLocationProductAmountSearch(). + SetProductIds(productIds).SetLocationIds(locationIds). + SetFields("product_id, location_id, amount"). + Find() + if err != nil { + return nil, err + } + locationAmountMap = make(map[string]map[int]decimal.Decimal) + for _, locationAmount := range locationAmounts { + if locationAmountMap[locationAmount.ProductId] == nil { + locationAmountMap[locationAmount.ProductId] = make(map[int]decimal.Decimal) + } + locationAmountMap[locationAmount.ProductId][locationAmount.LocationId] = locationAmount.Amount + } + return +} diff --git a/service/operation.go b/service/operation.go index 0775865..733d84f 100644 --- a/service/operation.go +++ b/service/operation.go @@ -336,7 +336,7 @@ if locAmount.Amount.Equal(v.Amount) { continue } - if v.Amount.GreaterThan(locAmount.Amount) { + if v.Amount.GreaterThan(locAmount.Amount) { //todo 鏀规垚stockAmount inputDetails = append(inputDetails, &models.OperationDetails{ ProductId: v.ProductId, Amount: v.Amount.Sub(locAmount.Amount), -- Gitblit v1.8.0