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