From 0c65eeb1f1ac4b3dd14727f41a25582fc3ee701e Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期四, 21 九月 2023 09:52:21 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/aps/WMS

---
 controllers/operation.go    |   64 +++++++++++----
 docs/swagger.yaml           |   24 ++----
 request/operation.go        |   25 +++--
 docs/docs.go                |   31 ++-----
 models/operation_details.go |   15 +++
 docs/swagger.json           |   29 ++-----
 router/router.go            |    2 
 7 files changed, 100 insertions(+), 90 deletions(-)

diff --git a/controllers/operation.go b/controllers/operation.go
index 06b3c19..97ba0fd 100644
--- a/controllers/operation.go
+++ b/controllers/operation.go
@@ -2,7 +2,9 @@
 
 import (
 	"errors"
+	"fmt"
 	"github.com/gin-gonic/gin"
+	"github.com/shopspring/decimal"
 	"github.com/spf13/cast"
 	"gorm.io/gorm"
 	"strconv"
@@ -110,7 +112,7 @@
 	//妫�鏌ユ槑缁嗛儴鍒�
 	for _, v := range params.Details {
 		if v.ProductId == "" {
-			return errors.New("productID涓�0")
+			return errors.New("productID涓虹┖")
 		}
 		if v.ProductName == "" {
 			return errors.New("浜у搧鍚嶇О寮傚父")
@@ -170,7 +172,7 @@
 // @Param     object  body request.UpdateOperation true  "鍏ュ簱淇℃伅"
 // @Param     id  path int true  "鍏ュ簱淇℃伅id"
 // @Success   200 {object} util.Response "鎴愬姛"
-// @Router    /api-wms/v1/operation/operation/{id} [put]
+// @Router    /api-wms/v1/operation/operation/{id} [post]
 func (slf OperationController) Update(c *gin.Context) {
 	id := cast.ToUint(c.Param("id"))
 	if id == 0 {
@@ -199,6 +201,11 @@
 		util.ResponseFormat(c, code.RequestParamError, err.Error())
 		return
 	}
+	fmt.Printf("%+v\n", *reqParams.Details[0])
+	fmt.Printf("%+v\n", *reqParams.Details[1])
+	fmt.Println("===============================================")
+	fmt.Printf("%+v\n", *params.Details[0])
+	fmt.Printf("%+v\n", *params.Details[1])
 	if err := models.WithTransaction(func(tx *gorm.DB) error {
 		if err := models.NewOperationDetailsSearch().SetOrm(tx).SetOperationId(params.Id).Delete(); err != nil {
 			return err
@@ -284,28 +291,47 @@
 		util.ResponseFormat(c, code.RequestError, "璇ュ嚭鍏ュ簱淇℃伅鏃犳硶瀹屾垚")
 		return
 	}
-	//operationType, err := models.NewOperationTypeSearch().SetID(uint(operation.OperationTypeId)).First()
-	//if err != nil {
-	//	util.ResponseFormat(c, code.RequestError, err.Error())
-	//	return
-	//}
-	//if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
-	//	if location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First(); err != nil {
-	//		return err
-	//	} else {
-	//		params.FromLocationId = location.Id
-	//	}
-	//	if params.ToLocationId == 0 {
-	//		return errors.New("璇烽�夋嫨鐩爣浣嶇疆")
-	//	}
-	//}
+	operationType, err := models.NewOperationTypeSearch().SetID(uint(operation.OperationTypeId)).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(id).Update(&models.Operation{Status: constvar.OperationStatus_Finish}); err != nil {
 			return err
 		}
-		if err := models.NewMaterialSearch().Orm.Exec("update material INNER JOIN wms_operation_details on wms_operation_details.product_id=material.id INNER JOIN wms_operation on wms_operation.id=wms_operation_details.operation_id set material.amount=material.amount + wms_operation_details.quantity where wms_operation.id=?", id).Error; err != nil {
-			return err
+		if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
+			if err := models.NewMaterialSearch().Orm.Exec("update material INNER JOIN wms_operation_details on wms_operation_details.product_id=material.id INNER JOIN wms_operation on wms_operation.id=wms_operation_details.operation_id set material.amount=material.amount + wms_operation_details.quantity where wms_operation.id=?", id).Error; err != nil {
+				return err
+			}
+		} else if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing {
+			var listProdtId []string
+			var listProdt []*models.Material
+			mapProdt := make(map[string]decimal.Decimal)
+			listDetails, err := models.NewOperationDetailsSearch().SetOperationId(operation.Id).FindAll()
+			if err != nil {
+				return err
+			}
+			for _, v := range listDetails {
+				listProdtId = append(listProdtId, v.ProductId)
+				mapProdt[v.ProductId] = v.Quantity
+			}
+			if err := models.NewMaterialSearch().Orm.Where("id IN ?", listProdtId).Find(&listProdt).Error; err != nil {
+				return err
+			}
+			for _, v := range listProdt {
+				if value, ok := mapProdt[v.ID]; !ok {
+					return errors.New("浜у搧绉嶇被寮傚父")
+				} else {
+					if v.Amount.LessThan(value) {
+						return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Name, v.Amount.String(), value.String()))
+					}
+				}
+			}
+			if err := models.NewMaterialSearch().Orm.Exec("update material INNER JOIN wms_operation_details on wms_operation_details.product_id=material.id INNER JOIN wms_operation on wms_operation.id=wms_operation_details.operation_id set material.amount=material.amount - wms_operation_details.quantity where wms_operation.id=?", id).Error; err != nil {
+				return err
+			}
 		}
 		return nil
 	}); err != nil {
diff --git a/docs/docs.go b/docs/docs.go
index e08cc06..bc7b478 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -565,7 +565,7 @@
             }
         },
         "/api-wms/v1/operation/operation/{id}": {
-            "put": {
+            "post": {
                 "produces": [
                     "application/json"
                 ],
@@ -2114,6 +2114,7 @@
             "type": "object",
             "properties": {
                 "comment": {
+                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "companyID": {
@@ -2319,9 +2320,13 @@
         "request.OperationDetails": {
             "type": "object",
             "properties": {
+                "OperationId": {
+                    "description": "鎿嶄綔id",
+                    "type": "integer"
+                },
                 "productId": {
                     "description": "浜у搧id",
-                    "type": "integer"
+                    "type": "string"
                 },
                 "productName": {
                     "description": "浜у搧鍚嶇О",
@@ -2375,12 +2380,8 @@
         "request.UpdateOperation": {
             "type": "object",
             "properties": {
-                "carrierID": {
-                    "description": "鎵胯繍鍟咺D-闈炲繀濉�",
-                    "type": "integer"
-                },
-                "carrierName": {
-                    "description": "鎵胯繍鍟嗗悕绉�-闈炲繀濉�",
+                "comment": {
+                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "companyID": {
@@ -2439,18 +2440,6 @@
                 "toLocationId": {
                     "description": "鐩爣浣嶇疆id",
                     "type": "integer"
-                },
-                "tracking": {
-                    "description": "杩借釜鍙傝��-闈炲繀濉�",
-                    "type": "string"
-                },
-                "transferWeight": {
-                    "description": "鐗╂祦閲嶉噺(kg)-闈炲繀濉�",
-                    "type": "number"
-                },
-                "weight": {
-                    "description": "閲嶉噺(kg)-闈炲繀濉�",
-                    "type": "number"
                 }
             }
         },
@@ -2572,8 +2561,6 @@
 	Description:      "",
 	InfoInstanceName: "swagger",
 	SwaggerTemplate:  docTemplate,
-	LeftDelim:        "{{",
-	RightDelim:       "}}",
 }
 
 func init() {
diff --git a/docs/swagger.json b/docs/swagger.json
index c925da1..281bd04 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -553,7 +553,7 @@
             }
         },
         "/api-wms/v1/operation/operation/{id}": {
-            "put": {
+            "post": {
                 "produces": [
                     "application/json"
                 ],
@@ -2102,6 +2102,7 @@
             "type": "object",
             "properties": {
                 "comment": {
+                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "companyID": {
@@ -2307,9 +2308,13 @@
         "request.OperationDetails": {
             "type": "object",
             "properties": {
+                "OperationId": {
+                    "description": "鎿嶄綔id",
+                    "type": "integer"
+                },
                 "productId": {
                     "description": "浜у搧id",
-                    "type": "integer"
+                    "type": "string"
                 },
                 "productName": {
                     "description": "浜у搧鍚嶇О",
@@ -2363,12 +2368,8 @@
         "request.UpdateOperation": {
             "type": "object",
             "properties": {
-                "carrierID": {
-                    "description": "鎵胯繍鍟咺D-闈炲繀濉�",
-                    "type": "integer"
-                },
-                "carrierName": {
-                    "description": "鎵胯繍鍟嗗悕绉�-闈炲繀濉�",
+                "comment": {
+                    "description": "澶囨敞",
                     "type": "string"
                 },
                 "companyID": {
@@ -2427,18 +2428,6 @@
                 "toLocationId": {
                     "description": "鐩爣浣嶇疆id",
                     "type": "integer"
-                },
-                "tracking": {
-                    "description": "杩借釜鍙傝��-闈炲繀濉�",
-                    "type": "string"
-                },
-                "transferWeight": {
-                    "description": "鐗╂祦閲嶉噺(kg)-闈炲繀濉�",
-                    "type": "number"
-                },
-                "weight": {
-                    "description": "閲嶉噺(kg)-闈炲繀濉�",
-                    "type": "number"
                 }
             }
         },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 184cba4..024ec46 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -589,6 +589,7 @@
   request.AddOperation:
     properties:
       comment:
+        description: 澶囨敞
         type: string
       companyID:
         description: 鍏徃ID-瀹㈡埛
@@ -730,9 +731,12 @@
     type: object
   request.OperationDetails:
     properties:
+      OperationId:
+        description: 鎿嶄綔id
+        type: integer
       productId:
         description: 浜у搧id
-        type: integer
+        type: string
       productName:
         description: 浜у搧鍚嶇О
         type: string
@@ -769,11 +773,8 @@
     type: object
   request.UpdateOperation:
     properties:
-      carrierID:
-        description: 鎵胯繍鍟咺D-闈炲繀濉�
-        type: integer
-      carrierName:
-        description: 鎵胯繍鍟嗗悕绉�-闈炲繀濉�
+      comment:
+        description: 澶囨敞
         type: string
       companyID:
         description: 鍏徃ID-瀹㈡埛
@@ -815,15 +816,6 @@
       toLocationId:
         description: 鐩爣浣嶇疆id
         type: integer
-      tracking:
-        description: 杩借釜鍙傝��-闈炲繀濉�
-        type: string
-      transferWeight:
-        description: 鐗╂祦閲嶉噺(kg)-闈炲繀濉�
-        type: number
-      weight:
-        description: 閲嶉噺(kg)-闈炲繀濉�
-        type: number
     type: object
   request.UpdateOperationType:
     properties:
@@ -1255,7 +1247,7 @@
       summary: 鍒犻櫎鍏ュ簱/鍑哄簱淇℃伅
       tags:
       - 鍏ュ簱/鍑哄簱
-    put:
+    post:
       parameters:
       - description: 鍏ュ簱淇℃伅
         in: body
diff --git a/models/operation_details.go b/models/operation_details.go
index 7901215..270e34d 100644
--- a/models/operation_details.go
+++ b/models/operation_details.go
@@ -154,7 +154,7 @@
 
 func (slf *OperationDetailsSearch) Delete() error {
 	var db = slf.build()
-	return db.Delete(&OperationDetails{}).Error
+	return db.Unscoped().Delete(&OperationDetails{}).Error
 }
 
 func (slf *OperationDetailsSearch) First() (*OperationDetails, error) {
@@ -243,3 +243,16 @@
 
 	return records, nil
 }
+
+func (slf *OperationDetailsSearch) FindAll() ([]*OperationDetails, error) {
+	var (
+		records = make([]*OperationDetails, 0)
+		db      = slf.build()
+	)
+
+	if err := db.Find(&records).Error; err != nil {
+		return records, fmt.Errorf("find records err: %v", err)
+	}
+
+	return records, nil
+}
diff --git a/request/operation.go b/request/operation.go
index 44d5402..a87eeb0 100644
--- a/request/operation.go
+++ b/request/operation.go
@@ -19,7 +19,7 @@
 	ContacterName   string                   `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"` //鑱旂郴浜哄鍚�-闈炲繀濉�
 	CompanyID       int                      `json:"companyID" gorm:"type:int;comment:鍏徃ID"`              //鍏徃ID-瀹㈡埛
 	CompanyName     string                   `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О"`   //鍏徃鍚嶇О-瀹㈡埛鍚嶇О
-	Comment         string                   `json:"comment" gorm:"type:text;comment:澶囨敞"`
+	Comment         string                   `json:"comment" gorm:"type:text;comment:澶囨敞"`                 //澶囨敞
 
 	//Weight          decimal.Decimal          `json:"weight" gorm:"type:decimal(20,2);comment:閲嶉噺(kg)"`           //閲嶉噺(kg)-闈炲繀濉�
 	//TransferWeight  decimal.Decimal          `json:"transferWeight" gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺(kg)"` //鐗╂祦閲嶉噺(kg)-闈炲繀濉�
@@ -29,7 +29,8 @@
 }
 
 type OperationDetails struct {
-	ProductId   int             `json:"productId" gorm:"type:int;not null;comment:浜у搧id"`            //浜у搧id
+	OperationId int             `json:"OperationId" gorm:"type:int;not null;comment:鎿嶄綔璁板綍id"`        //鎿嶄綔id
+	ProductId   string          `json:"productId" gorm:"type:varchar(191);not null;comment:浜у搧id"`   //浜у搧id
 	ProductName string          `json:"productName" gorm:"type:varchar(255);not null;comment:浜у搧鍚嶇О"` //浜у搧鍚嶇О
 	Quantity    decimal.Decimal `json:"quantity" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"`     //鏁伴噺
 	Unit        string          `json:"unit" gorm:"type:varchar(31);comment:鍗曚綅"`
@@ -50,13 +51,15 @@
 	ToLocationId    int                      `json:"toLocationId"    gorm:"type:int;not null;comment:鐩爣浣嶇疆id"` //鐩爣浣嶇疆id
 	OperationDate   string                   `json:"operationDate" gorm:"type:varchar(31);comment:瀹夋帓鏃ユ湡"`      //瀹夋帓鏃ユ湡
 	Details         []*OperationDetails      `json:"details"`
-	CarrierID       int                      `json:"carrierID" gorm:"type:int;comment:鎵胯繍鍟咺D"`                   //鎵胯繍鍟咺D-闈炲繀濉�
-	CarrierName     string                   `json:"carrierName" gorm:"type:varchar(63);comment:鎵胯繍鍟嗗悕绉�"`         //鎵胯繍鍟嗗悕绉�-闈炲繀濉�
-	Tracking        string                   `json:"tracking" gorm:"type:varchar(127);comment:杩借釜鍙傝��"`            //杩借釜鍙傝��-闈炲繀濉�
-	ContacterID     int                      `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"`                 //鑱旂郴浜篒D-闈炲繀濉�
-	ContacterName   string                   `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"`       //鑱旂郴浜哄鍚�-闈炲繀濉�
-	Weight          decimal.Decimal          `json:"weight" gorm:"type:decimal(20,2);comment:閲嶉噺(kg)"`           //閲嶉噺(kg)-闈炲繀濉�
-	TransferWeight  decimal.Decimal          `json:"transferWeight" gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺(kg)"` //鐗╂祦閲嶉噺(kg)-闈炲繀濉�
-	CompanyID       int                      `json:"companyID" gorm:"type:int;comment:鍏徃ID"`                    //鍏徃ID-瀹㈡埛
-	CompanyName     string                   `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О"`         //鍏徃鍚嶇О-瀹㈡埛鍚嶇О
+	ContacterID     int                      `json:"contacterID" gorm:"type:int;comment:鑱旂郴浜篒D"`           //鑱旂郴浜篒D-闈炲繀濉�
+	ContacterName   string                   `json:"contacterName" gorm:"type:varchar(63);comment:鑱旂郴浜哄鍚�"` //鑱旂郴浜哄鍚�-闈炲繀濉�
+	CompanyID       int                      `json:"companyID" gorm:"type:int;comment:鍏徃ID"`              //鍏徃ID-瀹㈡埛
+	CompanyName     string                   `json:"companyName" gorm:"type:varchar(127);comment:鍏徃鍚嶇О"`   //鍏徃鍚嶇О-瀹㈡埛鍚嶇О
+	Comment         string                   `json:"comment" gorm:"type:text;comment:澶囨敞"`                 //澶囨敞
+
+	//CarrierID      int             `json:"carrierID" gorm:"type:int;comment:鎵胯繍鍟咺D"`                   //鎵胯繍鍟咺D-闈炲繀濉�
+	//CarrierName    string          `json:"carrierName" gorm:"type:varchar(63);comment:鎵胯繍鍟嗗悕绉�"`         //鎵胯繍鍟嗗悕绉�-闈炲繀濉�
+	//Tracking       string          `json:"tracking" gorm:"type:varchar(127);comment:杩借釜鍙傝��"`            //杩借釜鍙傝��-闈炲繀濉�
+	//Weight         decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:閲嶉噺(kg)"`           //閲嶉噺(kg)-闈炲繀濉�
+	//TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:鐗╂祦閲嶉噺(kg)"` //鐗╂祦閲嶉噺(kg)-闈炲繀濉�
 }
diff --git a/router/router.go b/router/router.go
index 084dc11..623eab5 100644
--- a/router/router.go
+++ b/router/router.go
@@ -79,7 +79,7 @@
 	{
 		operationAPI.GET("operation", operationController.List)
 		operationAPI.POST("operation", operationController.Add)
-		operationAPI.PUT("operation/:id", operationController.Update)
+		operationAPI.POST("operation/:id", operationController.Update)
 		operationAPI.DELETE("operation/:id", operationController.Delete)
 		operationAPI.PUT("Finish/:id", operationController.Finish)
 	}

--
Gitblit v1.8.0