From 0eac8cd498471e510c1887a914e6e28d1dfb4b19 Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期二, 31 十月 2023 11:54:49 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/aps/WMS

---
 constvar/const.go                      |    7 
 controllers/operation.go               |  212 ++++++++++++++++++++++---
 models/location_product.go             |   29 ++-
 request/location_product.go            |   22 +-
 controllers/location_product.go        |   84 +++++++++-
 docs/swagger.yaml                      |   19 ++
 docs/docs.go                           |   31 +++
 docs/swagger.json                      |   31 +++
 controllers/location_product_amount.go |    2 
 9 files changed, 376 insertions(+), 61 deletions(-)

diff --git a/constvar/const.go b/constvar/const.go
index 5c6a63f..a84fd10 100644
--- a/constvar/const.go
+++ b/constvar/const.go
@@ -184,3 +184,10 @@
 	PostType_Soon       PostType = iota + 1 //灏藉揩
 	PostType_AfterReady                     //褰撴墍鏈変骇鍝佸氨缁椂
 )
+
+type RuleType int
+
+const (
+	RuleType_Product         RuleType = iota + 1 //浜у搧涓婃灦瑙勫垯
+	RuleType_ProductCategory                     //浜у搧绫诲埆涓婃灦瑙勫垯
+)
diff --git a/controllers/location_product.go b/controllers/location_product.go
index 854d451..5955d2c 100644
--- a/controllers/location_product.go
+++ b/controllers/location_product.go
@@ -1,8 +1,11 @@
 package controllers
 
 import (
+	"errors"
 	"github.com/gin-gonic/gin"
+	"gorm.io/gorm"
 	"strconv"
+	"wms/constvar"
 	"wms/extend/code"
 	"wms/extend/util"
 	"wms/models"
@@ -40,14 +43,43 @@
 		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浣嶇疆")
 		return
 	}
-	if params.ProductId == "" {
-		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧")
+
+	if params.RuleType != constvar.RuleType_Product && params.RuleType != constvar.RuleType_ProductCategory {
+		util.ResponseFormat(c, code.RequestParamError, "ruleType寮傚父")
 		return
 	}
-	//if params.ProductCategoryID == 0 {
-	//	util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆")
-	//	return
-	//}
+
+	if params.RuleType == constvar.RuleType_Product {
+		if params.ProductId == "" {
+			util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧")
+			return
+		}
+		if _, err := models.NewLocationProductSearch().SetProductId(params.ProductId).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil {
+			if !errors.Is(err, gorm.ErrRecordNotFound) {
+				util.ResponseFormat(c, code.RequestParamError, err.Error())
+				return
+			}
+		} else {
+			util.ResponseFormat(c, code.RequestParamError, "宸插瓨鍦ㄨ涓婂瑙勫垯锛岃鍕块噸澶嶆坊鍔�")
+			return
+		}
+	}
+
+	if params.RuleType == constvar.RuleType_ProductCategory {
+		if params.ProductCategoryID == 0 {
+			util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆")
+			return
+		}
+		if _, err := models.NewLocationProductSearch().SetProductCategoryId(params.ProductCategoryID).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil {
+			if !errors.Is(err, gorm.ErrRecordNotFound) {
+				util.ResponseFormat(c, code.RequestParamError, err.Error())
+				return
+			}
+		} else {
+			util.ResponseFormat(c, code.RequestParamError, "宸插瓨鍦ㄨ涓婂瑙勫垯锛岃鍕块噸澶嶆坊鍔�")
+			return
+		}
+	}
 
 	if err := models.NewLocationProductSearch().Create(&params); err != nil {
 		logx.Errorf("Operation create err: %v", err)
@@ -116,14 +148,44 @@
 		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浣嶇疆")
 		return
 	}
-	if params.ProductId == "" {
-		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧")
+
+	if params.RuleType != constvar.RuleType_Product && params.RuleType != constvar.RuleType_ProductCategory {
+		util.ResponseFormat(c, code.RequestParamError, "ruleType寮傚父")
 		return
 	}
-	if params.ProductCategoryID == 0 {
-		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆")
-		return
+
+	if params.RuleType == constvar.RuleType_Product {
+		if params.ProductId == "" {
+			util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧")
+			return
+		}
+		if rule, err := models.NewLocationProductSearch().SetProductId(params.ProductId).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil {
+			if !errors.Is(err, gorm.ErrRecordNotFound) {
+				util.ResponseFormat(c, code.RequestParamError, err.Error())
+				return
+			}
+		} else if params.Id != rule.Id {
+			util.ResponseFormat(c, code.RequestParamError, "宸插瓨鍦ㄨ涓婂瑙勫垯锛岃鍕块噸澶嶆坊鍔�")
+			return
+		}
 	}
+
+	if params.RuleType == constvar.RuleType_ProductCategory {
+		if params.ProductCategoryID == 0 {
+			util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆")
+			return
+		}
+		if rule, err := models.NewLocationProductSearch().SetProductCategoryId(params.ProductCategoryID).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil {
+			if !errors.Is(err, gorm.ErrRecordNotFound) {
+				util.ResponseFormat(c, code.RequestParamError, err.Error())
+				return
+			}
+		} else if params.Id != rule.Id {
+			util.ResponseFormat(c, code.RequestParamError, "宸插瓨鍦ㄨ涓婂瑙勫垯锛岃鍕块噸澶嶆坊鍔�")
+			return
+		}
+	}
+
 	if err := models.NewLocationProductSearch().SetID(params.Id).Update(&params); err != nil {
 		logx.Errorf("LocationProduct update err: %v", err)
 		util.ResponseFormat(c, code.SaveFail, "淇敼澶辫触锛�"+err.Error())
diff --git a/controllers/location_product_amount.go b/controllers/location_product_amount.go
index 3f33ff3..bcf0abb 100644
--- a/controllers/location_product_amount.go
+++ b/controllers/location_product_amount.go
@@ -60,7 +60,7 @@
 	if params.Page*params.PageSize > 0 {
 		search.Orm = search.Orm.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize)
 	}
-	if err := search.Orm.Order("wms_location_product_amount.updated_at desc").Find(&records).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+	if err := search.Orm.Order("wms_location_product_amount.updated_at desc").Find(&records).Error; err != nil {
 		util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err))
 		return
 	}
diff --git a/controllers/operation.go b/controllers/operation.go
index 3b435f6..5bd16ef 100644
--- a/controllers/operation.go
+++ b/controllers/operation.go
@@ -74,7 +74,7 @@
 }
 
 func CheckDetailsRepeat(details []*models.OperationDetails) bool {
-	detailIDs := []string{}
+	var detailIDs []string
 	var tempID string
 	for _, v := range details {
 		detailIDs = append(detailIDs, v.ProductId)
@@ -349,7 +349,7 @@
 		}
 
 		if operation.BaseOperationType == constvar.BaseOperationTypeIncoming {
-			operationInputs := []*models.Operation{}
+			var operationInputs []*models.Operation
 			for k, v := range listProdt {
 				value, ok := mapProdt[v.ID]
 				if !ok {
@@ -365,6 +365,7 @@
 				if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
 					return err
 				}
+
 				if err == nil {
 					operationTransfer := &models.Operation{
 						Number:            operation.Number,
@@ -382,20 +383,10 @@
 						Comment:           operation.Comment,
 						BaseOperationType: constvar.BaseOperationTypeInternal,
 						Details: []*models.OperationDetails{
-							&models.OperationDetails{
+							{
 								ProductId: v.ID,
 								Amount:    value,
 							},
-						},
-					}
-					operationTransfer.Id = 0
-					operationTransfer.FromLocationID = locationRule.AreaId
-					operationTransfer.ToLocationID = locationRule.LocationId
-					operationTransfer.Status = constvar.OperationStatus_Finish
-					operationTransfer.Details = []*models.OperationDetails{
-						&models.OperationDetails{
-							ProductId: v.ID,
-							Amount:    value,
 						},
 					}
 					operationInputs = append(operationInputs, operationTransfer)
@@ -420,20 +411,70 @@
 						return res.Error
 					}
 				} else {
-					//TODO:鍑哄叆搴撶殑finish鍜屾姤搴熺殑finish閮借澧炲姞瀵筶ocation_product_amount琛ㄦ暟閲忕殑鏇存柊,鍥犱负姝よ〃鏈塒roductCategory瀛楁锛屾墍浠peration_details琛ㄤ腑瑕佸鍔燩roductCategoryId瀛楁
-					locAmount, err := models.NewLocationProductAmountSearch().
-						SetProductId(v.ID).
-						SetLocationId(operation.ToLocationID).
-						First()
+					locationRule, err = models.NewLocationProductSearch().SetProductCategoryId(v.CategoryId).SetAreaId(operation.ToLocationID).First()
 					if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
 						return err
 					}
-					locAmount.LocationId = operation.ToLocationID
-					locAmount.ProductId = v.ID
-					locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
-					locAmount.Amount = locAmount.Amount.Add(value)
-					if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
-						return res.Error
+					if err == nil {
+						operationTransfer := &models.Operation{
+							Number:            operation.Number,
+							SourceNumber:      operation.SourceNumber,
+							OperationTypeId:   0,
+							OperationTypeName: operation.OperationTypeName,
+							Status:            constvar.OperationStatus_Finish,
+							FromLocationID:    locationRule.AreaId,
+							ToLocationID:      locationRule.LocationId,
+							OperationDate:     operation.OperationDate,
+							ContacterID:       operation.ContacterID,
+							ContacterName:     operation.ContacterName,
+							CompanyID:         operation.CompanyID,
+							CompanyName:       operation.CompanyName,
+							Comment:           operation.Comment,
+							BaseOperationType: constvar.BaseOperationTypeInternal,
+							Details: []*models.OperationDetails{
+								{
+									ProductId: v.ID,
+									Amount:    value,
+								},
+							},
+						}
+						operationInputs = append(operationInputs, operationTransfer)
+
+						//if err := tx.Create(&operationTransfer).Error; err != nil {
+						//	return err
+						//}
+
+						//TODO:鍑哄叆搴撶殑finish鍜屾姤搴熺殑finish閮借澧炲姞瀵筶ocation_product_amount琛ㄦ暟閲忕殑鏇存柊,鍥犱负姝よ〃鏈塒roductCategory瀛楁锛屾墍浠peration_details琛ㄤ腑瑕佸鍔燩roductCategoryId瀛楁
+						locAmount, err := models.NewLocationProductAmountSearch().
+							SetProductId(v.ID).
+							SetLocationId(locationRule.LocationId).
+							First()
+						if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+							return err
+						}
+						locAmount.LocationId = locationRule.LocationId
+						locAmount.ProductId = v.ID
+						locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
+						locAmount.Amount = locAmount.Amount.Add(value)
+						if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
+							return res.Error
+						}
+					} else {
+						//TODO:鍑哄叆搴撶殑finish鍜屾姤搴熺殑finish閮借澧炲姞瀵筶ocation_product_amount琛ㄦ暟閲忕殑鏇存柊,鍥犱负姝よ〃鏈塒roductCategory瀛楁锛屾墍浠peration_details琛ㄤ腑瑕佸鍔燩roductCategoryId瀛楁
+						locAmount, err := models.NewLocationProductAmountSearch().
+							SetProductId(v.ID).
+							SetLocationId(operation.ToLocationID).
+							First()
+						if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+							return err
+						}
+						locAmount.LocationId = operation.ToLocationID
+						locAmount.ProductId = v.ID
+						locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
+						locAmount.Amount = locAmount.Amount.Add(value)
+						if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
+							return res.Error
+						}
 					}
 				}
 			}
@@ -486,7 +527,9 @@
 				}
 			}
 		}
+
 		if operation.BaseOperationType == constvar.BaseOperationTypeInternal {
+			var operationInputs []*models.Operation
 			for _, v := range listProdt {
 				value, ok := mapProdt[v.ID]
 				if !ok {
@@ -511,15 +554,122 @@
 					return err
 				}
 
-				toLocAmount, res := models.NewLocationProductAmountSearch().
-					SetProductId(v.ID).
-					SetLocationId(operation.ToLocationID).
-					FirstRes()
-				if res.Error != nil {
+				locationRule, err := models.NewLocationProductSearch().SetProductId(v.ID).SetAreaId(operation.ToLocationID).First()
+				if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
 					return err
 				}
-				toLocAmount.Amount = toLocAmount.Amount.Add(value)
-				if err := models.NewLocationProductAmountSearch().SetID(toLocAmount.Id).Update(toLocAmount); err != nil {
+
+				if err == nil {
+					operationTransfer := &models.Operation{
+						Number:            operation.Number,
+						SourceNumber:      operation.SourceNumber,
+						OperationTypeId:   0,
+						OperationTypeName: operation.OperationTypeName,
+						Status:            constvar.OperationStatus_Finish,
+						FromLocationID:    locationRule.AreaId,
+						ToLocationID:      locationRule.LocationId,
+						OperationDate:     operation.OperationDate,
+						ContacterID:       operation.ContacterID,
+						ContacterName:     operation.ContacterName,
+						CompanyID:         operation.CompanyID,
+						CompanyName:       operation.CompanyName,
+						Comment:           operation.Comment,
+						BaseOperationType: constvar.BaseOperationTypeInternal,
+						Details: []*models.OperationDetails{
+							{
+								ProductId: v.ID,
+								Amount:    value,
+							},
+						},
+					}
+					operationInputs = append(operationInputs, operationTransfer)
+
+					//if err := tx.Create(&operationTransfer).Error; err != nil {
+					//	return err
+					//}
+
+					locAmount, err := models.NewLocationProductAmountSearch().
+						SetProductId(v.ID).
+						SetLocationId(locationRule.LocationId).
+						First()
+					if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+						return err
+					}
+					locAmount.LocationId = locationRule.LocationId
+					locAmount.ProductId = v.ID
+					locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
+					locAmount.Amount = locAmount.Amount.Add(value)
+					if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
+						return res.Error
+					}
+				} else {
+					locationRule, err = models.NewLocationProductSearch().SetProductCategoryId(v.CategoryId).SetAreaId(operation.ToLocationID).First()
+					if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+						return err
+					}
+					if err == nil {
+						operationTransfer := &models.Operation{
+							Number:            operation.Number,
+							SourceNumber:      operation.SourceNumber,
+							OperationTypeId:   0,
+							OperationTypeName: operation.OperationTypeName,
+							Status:            constvar.OperationStatus_Finish,
+							FromLocationID:    locationRule.AreaId,
+							ToLocationID:      locationRule.LocationId,
+							OperationDate:     operation.OperationDate,
+							ContacterID:       operation.ContacterID,
+							ContacterName:     operation.ContacterName,
+							CompanyID:         operation.CompanyID,
+							CompanyName:       operation.CompanyName,
+							Comment:           operation.Comment,
+							BaseOperationType: constvar.BaseOperationTypeInternal,
+							Details: []*models.OperationDetails{
+								{
+									ProductId: v.ID,
+									Amount:    value,
+								},
+							},
+						}
+						operationInputs = append(operationInputs, operationTransfer)
+
+						//if err := tx.Create(&operationTransfer).Error; err != nil {
+						//	return err
+						//}
+
+						locAmount, err := models.NewLocationProductAmountSearch().
+							SetProductId(v.ID).
+							SetLocationId(locationRule.LocationId).
+							First()
+						if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+							return err
+						}
+						locAmount.LocationId = locationRule.LocationId
+						locAmount.ProductId = v.ID
+						locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
+						locAmount.Amount = locAmount.Amount.Add(value)
+						if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
+							return res.Error
+						}
+					} else {
+						locAmount, err := models.NewLocationProductAmountSearch().
+							SetProductId(v.ID).
+							SetLocationId(operation.ToLocationID).
+							First()
+						if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+							return err
+						}
+						locAmount.LocationId = operation.ToLocationID
+						locAmount.ProductId = v.ID
+						locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
+						locAmount.Amount = locAmount.Amount.Add(value)
+						if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
+							return res.Error
+						}
+					}
+				}
+			}
+			if len(operationInputs) > 0 {
+				if err := tx.Create(&operationInputs).Error; err != nil {
 					return err
 				}
 			}
diff --git a/docs/docs.go b/docs/docs.go
index 58d7d71..4e9ca24 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -2353,6 +2353,21 @@
                 "ReservationMethodByDate"
             ]
         },
+        "constvar.RuleType": {
+            "type": "integer",
+            "enum": [
+                1,
+                2
+            ],
+            "x-enum-comments": {
+                "RuleType_Product": "浜у搧涓婃灦瑙勫垯",
+                "RuleType_ProductCategory": "浜у搧绫诲埆涓婃灦瑙勫垯"
+            },
+            "x-enum-varnames": [
+                "RuleType_Product",
+                "RuleType_ProductCategory"
+            ]
+        },
         "constvar.WhetherType": {
             "type": "integer",
             "enum": [
@@ -3073,6 +3088,14 @@
                 "productId": {
                     "description": "浜у搧id",
                     "type": "string"
+                },
+                "ruleType": {
+                    "description": "涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.RuleType"
+                        }
+                    ]
                 }
             }
         },
@@ -3652,6 +3675,14 @@
                 "productId": {
                     "description": "浜у搧id",
                     "type": "string"
+                },
+                "ruleType": {
+                    "description": "涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.RuleType"
+                        }
+                    ]
                 }
             }
         },
diff --git a/docs/swagger.json b/docs/swagger.json
index c430ead..953fc06 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -2341,6 +2341,21 @@
                 "ReservationMethodByDate"
             ]
         },
+        "constvar.RuleType": {
+            "type": "integer",
+            "enum": [
+                1,
+                2
+            ],
+            "x-enum-comments": {
+                "RuleType_Product": "浜у搧涓婃灦瑙勫垯",
+                "RuleType_ProductCategory": "浜у搧绫诲埆涓婃灦瑙勫垯"
+            },
+            "x-enum-varnames": [
+                "RuleType_Product",
+                "RuleType_ProductCategory"
+            ]
+        },
         "constvar.WhetherType": {
             "type": "integer",
             "enum": [
@@ -3061,6 +3076,14 @@
                 "productId": {
                     "description": "浜у搧id",
                     "type": "string"
+                },
+                "ruleType": {
+                    "description": "涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.RuleType"
+                        }
+                    ]
                 }
             }
         },
@@ -3640,6 +3663,14 @@
                 "productId": {
                     "description": "浜у搧id",
                     "type": "string"
+                },
+                "ruleType": {
+                    "description": "涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�",
+                    "allOf": [
+                        {
+                            "$ref": "#/definitions/constvar.RuleType"
+                        }
+                    ]
                 }
             }
         },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index a9369d0..5a13e9c 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -178,6 +178,17 @@
     - ReservationMethodAtConfirm
     - ReservationMethodManual
     - ReservationMethodByDate
+  constvar.RuleType:
+    enum:
+    - 1
+    - 2
+    type: integer
+    x-enum-comments:
+      RuleType_Product: 浜у搧涓婃灦瑙勫垯
+      RuleType_ProductCategory: 浜у搧绫诲埆涓婃灦瑙勫垯
+    x-enum-varnames:
+    - RuleType_Product
+    - RuleType_ProductCategory
   constvar.WhetherType:
     enum:
     - 1
@@ -687,6 +698,10 @@
       productId:
         description: 浜у搧id
         type: string
+      ruleType:
+        allOf:
+        - $ref: '#/definitions/constvar.RuleType'
+        description: 涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�
     type: object
   request.AddOperation:
     properties:
@@ -1087,6 +1102,10 @@
       productId:
         description: 浜у搧id
         type: string
+      ruleType:
+        allOf:
+        - $ref: '#/definitions/constvar.RuleType'
+        description: 涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�
     type: object
   request.UpdateLocationProductAmount:
     properties:
diff --git a/models/location_product.go b/models/location_product.go
index f737765..6a66ba5 100644
--- a/models/location_product.go
+++ b/models/location_product.go
@@ -3,21 +3,23 @@
 import (
 	"fmt"
 	"gorm.io/gorm"
+	"wms/constvar"
 	"wms/pkg/mysqlx"
 )
 
 type (
 	LocationProduct struct {
 		WmsModel
-		Id                int             `json:"id"  gorm:"column:id;primary_key;AUTO_INCREMENT"`
-		LocationId        int             `json:"locationId" gorm:"type:int;not null;comment:浣嶇疆id"` //浣嶇疆id
-		Location          Location        `json:"location" gorm:"foreignKey:LocationId;references:id"`
-		AreaId            int             `json:"areaId" grom:"type:int;not null;comment:鍖哄煙id"` //鍖哄煙id
-		Area              Location        `json:"area" gorm:"foreignKey:AreaId;references:id"`
-		ProductCategoryID int             `json:"productCategoryId" gorm:"type:int;not null;comment:浜у搧绉嶇被id"` //浜у搧绉嶇被id
-		ProductCategory   ProductCategory `json:"productCategory"`
-		ProductId         string          `json:"productId" gorm:"type:varchar(191);not null;comment:浜у搧id"` //浜у搧id
-		Product           Material        `json:"product" gorm:"foreignKey:ProductId;references:ID"`
+		Id                int               `json:"id"  gorm:"column:id;primary_key;AUTO_INCREMENT"`
+		LocationId        int               `json:"locationId" gorm:"type:int;not null;comment:浣嶇疆id"` //浣嶇疆id
+		Location          Location          `json:"location" gorm:"foreignKey:LocationId;references:id"`
+		AreaId            int               `json:"areaId" grom:"type:int;not null;comment:鍖哄煙id"` //鍖哄煙id
+		Area              Location          `json:"area" gorm:"foreignKey:AreaId;references:id"`
+		ProductCategoryID int               `json:"productCategoryId" gorm:"type:int;not null;comment:浜у搧绉嶇被id"` //浜у搧绉嶇被id
+		ProductCategory   ProductCategory   `json:"productCategory"`
+		ProductId         string            `json:"productId" gorm:"type:varchar(191);not null;comment:浜у搧id"` //浜у搧id
+		Product           Material          `json:"product" gorm:"foreignKey:ProductId;references:ID"`
+		RuleType          constvar.RuleType `json:"ruleType" gorm:"type:int(11);not null;comment:涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�"`
 	}
 
 	LocationProductSearch struct {
@@ -90,6 +92,11 @@
 	return slf
 }
 
+func (slf *LocationProductSearch) SetProductCategoryId(productCategoryID int) *LocationProductSearch {
+	slf.ProductCategoryID = productCategoryID
+	return slf
+}
+
 func (slf *LocationProductSearch) build() *gorm.DB {
 	var db = slf.Orm.Model(&LocationProduct{})
 
@@ -130,6 +137,10 @@
 		db = db.Where("area_id = ?", slf.AreaId)
 	}
 
+	if slf.ProductCategoryID != 0 {
+		db = db.Where("product_category_id = ?", slf.ProductCategoryID)
+	}
+
 	return db
 }
 
diff --git a/request/location_product.go b/request/location_product.go
index feccc4f..b0e3320 100644
--- a/request/location_product.go
+++ b/request/location_product.go
@@ -1,16 +1,20 @@
 package request
 
+import "wms/constvar"
+
 type AddLocationProduct struct {
-	LocationId        int    `json:"locationId"`        //浣嶇疆id
-	ProductId         string `json:"productId"`         //浜у搧id
-	ProductCategoryId int    `json:"productCategoryId"` //浜у搧绉嶇被id
-	AreaId            int    `json:"areaId"`            //鍖哄煙id
+	LocationId        int               `json:"locationId"`        //浣嶇疆id
+	ProductId         string            `json:"productId"`         //浜у搧id
+	ProductCategoryId int               `json:"productCategoryId"` //浜у搧绉嶇被id
+	AreaId            int               `json:"areaId"`            //鍖哄煙id
+	RuleType          constvar.RuleType `json:"ruleType"`          //涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�
 }
 
 type UpdateLocationProduct struct {
-	Id                int    `json:"id"`
-	LocationId        int    `json:"locationId"`        //浣嶇疆id
-	ProductId         string `json:"productId"`         //浜у搧id
-	ProductCategoryId int    `json:"productCategoryId"` //浜у搧绉嶇被id
-	AreaId            int    `json:"areaId"`            //鍖哄煙id
+	Id                int               `json:"id"`
+	LocationId        int               `json:"locationId"`        //浣嶇疆id
+	ProductId         string            `json:"productId"`         //浜у搧id
+	ProductCategoryId int               `json:"productCategoryId"` //浜у搧绉嶇被id
+	AreaId            int               `json:"areaId"`            //鍖哄煙id
+	RuleType          constvar.RuleType `json:"ruleType"`          //涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�
 }

--
Gitblit v1.8.0