From 1444c7c800fc042cd99213e901d6ad3722d0f03f Mon Sep 17 00:00:00 2001
From: jiangshuai <291802688@qq.com>
Date: 星期三, 27 九月 2023 16:13:53 +0800
Subject: [PATCH] 1.二期一部分代码

---
 controllers/operation.go               |   28 +++++++++
 models/location_product_amount.go      |   14 +++-
 request/location_product_amount.go     |    8 +-
 controllers/location_product.go        |    8 +-
 docs/swagger.yaml                      |   12 ++--
 docs/docs.go                           |   14 ++--
 docs/swagger.json                      |   14 ++--
 controllers/location_product_amount.go |   34 ++++++++--
 8 files changed, 93 insertions(+), 39 deletions(-)

diff --git a/controllers/location_product.go b/controllers/location_product.go
index 59cf228..3ebb6ef 100644
--- a/controllers/location_product.go
+++ b/controllers/location_product.go
@@ -44,10 +44,10 @@
 		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧")
 		return
 	}
-	if params.ProductCategoryID == 0 {
-		util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆")
-		return
-	}
+	//if params.ProductCategoryID == 0 {
+	//	util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆")
+	//	return
+	//}
 	if err := models.NewLocationProductSearch().Create(&params); err != nil {
 		logx.Errorf("Operation create 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 c3fc1b8..5e0b383 100644
--- a/controllers/location_product_amount.go
+++ b/controllers/location_product_amount.go
@@ -23,14 +23,14 @@
 // @Produce   application/json
 // @Param		 object  body  request.PageInfo true  "鏌ヨ鍙傛暟"
 // @Success   200 {object} util.Response	"鎴愬姛"
-// @Router    /api-wms/v1/locationProductamount/list [post]
+// @Router    /api-wms/v1/locationProductAmount/list [post]
 func (slf LocationProductAmountController) List(c *gin.Context) {
 	var params request.PageInfo
 	if err := c.BindJSON(&params); err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�:"+err.Error())
 		return
 	}
-	if params.Check() {
+	if !params.Check() {
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟寮傚父")
 		return
 	}
@@ -38,10 +38,26 @@
 	search := models.NewLocationProductAmountSearch()
 	search.SetPage(params.Page, params.PageSize)
 
-	search.Orm = search.Orm.Model(&models.LocationProductAmountWithOperation{}).Table("wms_location_product_amount").Select("wms_location_product_amount.*,wms_operation.amount as adjust_amount").InnerJoins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").InnerJoins("inner join wms_operation_details on wms_operation_details.product_id=wms_location_product.product_id").InnerJoins("inner join wms_operation on wms_operation.id=wms_operation_details.operation_id").Where("wms_operation.base_operation_type=?", constvar.BaseOperationTypeAdjust)
+	search.Orm = search.Orm.
+		Table("wms_location_product_amount").
+		Select(`
+					wms_location.id as location_id,
+					wms_location.name as location_name,
+					material.id as product_id,
+					material.name as product_name,
+					wms_location_product_amount.amount,
+					material.unit,
+					wms_location_product_amount.create_date,
+					wms_operation_details.amount as adjust_amount`).
+		InnerJoins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").
+		InnerJoins("inner join wms_location on wms_location.id=wms_location_product.location_id").
+		InnerJoins("inner join wms_operation_details on wms_operation_details.product_id=wms_location_product.product_id").
+		InnerJoins("inner join material on material.id=wms_operation_details.product_id").
+		InnerJoins("inner join wms_operation on wms_operation.id=wms_operation_details.operation_id").
+		Where("wms_operation.base_operation_type=?", constvar.BaseOperationTypeAdjust)
 
 	var (
-		records = make([]*models.ResponseDisuseList, 0)
+		records = make([]*models.LocationProductAmountWithOperation, 0)
 		total   int64
 	)
 
@@ -49,7 +65,7 @@
 		util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err))
 		return
 	}
-	search.Orm = search.Orm.Preload("LocationProduct").Preload("LocationProduct.Location").Preload("LocationProduct.Product")
+	//search.Orm = search.Orm.Preload("LocationProduct").Preload("LocationProduct.Location").Preload("LocationProduct.Product")
 	if params.Page*params.PageSize > 0 {
 		search.Orm = search.Orm.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize)
 	}
@@ -57,7 +73,9 @@
 		util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err))
 		return
 	}
-
+	for k, v := range records {
+		records[k].DifferenceAmount = v.Amount.Sub(v.AdjustAmount)
+	}
 	util.ResponseFormatListWithPage(c, code.Success, records, int(total), params.Page, params.PageSize)
 }
 
@@ -67,7 +85,7 @@
 // @Produce   application/json
 // @Param     object  body  request.AddLocationProductAmount true  "鍏ュ簱/鍑哄簱淇℃伅"
 // @Success   200 {object} util.Response "鎴愬姛"
-// @Router    /api-wms/v1/locationProductamount/add [post]
+// @Router    /api-wms/v1/locationProductAmount/add [post]
 func (slf LocationProductAmountController) Add(c *gin.Context) {
 	var reqParams request.AddLocationProductAmount
 	if err := c.BindJSON(&reqParams); err != nil {
@@ -84,7 +102,7 @@
 	}
 
 	var existCount int64
-	if err := models.NewOperationSearch().Orm.Table("wms_operation").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation.from_location_id=? and wms_operation_details.product_id=? and wms_operation.base_operation_type=? and wms_operaton.status=?", reqParams.LocationId, reqParams.ProductId, constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready).Count(&existCount).Error; err != nil {
+	if err := models.NewOperationSearch().Orm.Table("wms_operation").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation.from_location_id=? and wms_operation_details.product_id=? and wms_operation.base_operation_type=? and wms_operation.status=?", reqParams.LocationId, reqParams.ProductId, constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready).Count(&existCount).Error; err != nil {
 		util.ResponseFormat(c, code.RequestParamError, err.Error())
 		return
 	}
diff --git a/controllers/operation.go b/controllers/operation.go
index 9a87ab0..fa8137d 100644
--- a/controllers/operation.go
+++ b/controllers/operation.go
@@ -6,6 +6,7 @@
 	"github.com/gin-gonic/gin"
 	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
+	"sort"
 	"strconv"
 	"time"
 	"wms/constvar"
@@ -46,6 +47,12 @@
 		util.ResponseFormat(c, code.RequestParamError, err.Error())
 		return
 	}
+
+	if CheckDetailsRepeat(params.Details) {
+		util.ResponseFormat(c, code.RequestParamError, "鏄庣粏涓笉鑳藉瓨鍦ㄩ噸澶嶇殑浜у搧")
+		return
+	}
+
 	operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, err.Error())
@@ -61,6 +68,23 @@
 		return
 	}
 	util.ResponseFormat(c, code.Success, "娣诲姞鎴愬姛")
+}
+
+func CheckDetailsRepeat(details []*models.OperationDetails) bool {
+	detailIDs := []string{}
+	var tempID string
+	for _, v := range details {
+		detailIDs = append(detailIDs, v.ProductId)
+	}
+	sort.Strings(detailIDs)
+	for _, v := range detailIDs {
+		if v != tempID {
+			tempID = v
+		} else {
+			return true
+		}
+	}
+	return false
 }
 
 func (slf OperationController) FormatLocation(params *models.Operation) error {
@@ -202,6 +226,10 @@
 		util.ResponseFormat(c, code.RequestParamError, err.Error())
 		return
 	}
+	if CheckDetailsRepeat(params.Details) {
+		util.ResponseFormat(c, code.RequestParamError, "鏄庣粏涓笉鑳藉瓨鍦ㄩ噸澶嶇殑浜у搧")
+		return
+	}
 	if err := slf.FormatLocation(&params); err != nil {
 		util.ResponseFormat(c, code.RequestParamError, err.Error())
 		return
diff --git a/docs/docs.go b/docs/docs.go
index 531b4e8..e2104ff 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -585,7 +585,7 @@
                 }
             }
         },
-        "/api-wms/v1/locationProductamount/add": {
+        "/api-wms/v1/locationProductAmount/add": {
             "post": {
                 "produces": [
                     "application/json"
@@ -615,7 +615,7 @@
                 }
             }
         },
-        "/api-wms/v1/locationProductamount/list": {
+        "/api-wms/v1/locationProductAmount/list": {
             "post": {
                 "produces": [
                     "application/json"
@@ -2531,15 +2531,15 @@
         "request.AddLocationProductAmount": {
             "type": "object",
             "properties": {
+                "Amount": {
+                    "description": "搴撳瓨鏁伴噺",
+                    "type": "number"
+                },
                 "adjustAmount": {
                     "description": "宸��",
                     "type": "number"
                 },
-                "decimal": {
-                    "description": "搴撳瓨鏁伴噺",
-                    "type": "number"
-                },
-                "difference_amount": {
+                "differenceAmount": {
                     "description": "璁℃暟鏁伴噺",
                     "type": "number"
                 },
diff --git a/docs/swagger.json b/docs/swagger.json
index 0087423..ff7fbba 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -573,7 +573,7 @@
                 }
             }
         },
-        "/api-wms/v1/locationProductamount/add": {
+        "/api-wms/v1/locationProductAmount/add": {
             "post": {
                 "produces": [
                     "application/json"
@@ -603,7 +603,7 @@
                 }
             }
         },
-        "/api-wms/v1/locationProductamount/list": {
+        "/api-wms/v1/locationProductAmount/list": {
             "post": {
                 "produces": [
                     "application/json"
@@ -2519,15 +2519,15 @@
         "request.AddLocationProductAmount": {
             "type": "object",
             "properties": {
+                "Amount": {
+                    "description": "搴撳瓨鏁伴噺",
+                    "type": "number"
+                },
                 "adjustAmount": {
                     "description": "宸��",
                     "type": "number"
                 },
-                "decimal": {
-                    "description": "搴撳瓨鏁伴噺",
-                    "type": "number"
-                },
-                "difference_amount": {
+                "differenceAmount": {
                     "description": "璁℃暟鏁伴噺",
                     "type": "number"
                 },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index dab3c6c..706069c 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -650,13 +650,13 @@
     type: object
   request.AddLocationProductAmount:
     properties:
+      Amount:
+        description: 搴撳瓨鏁伴噺
+        type: number
       adjustAmount:
         description: 宸��
         type: number
-      decimal:
-        description: 搴撳瓨鏁伴噺
-        type: number
-      difference_amount:
+      differenceAmount:
         description: 璁℃暟鏁伴噺
         type: number
       locationId:
@@ -1429,7 +1429,7 @@
       summary: 淇敼涓婃灦瑙勫垯
       tags:
       - 涓婃灦瑙勫垯
-  /api-wms/v1/locationProductamount/add:
+  /api-wms/v1/locationProductAmount/add:
     post:
       parameters:
       - description: 鍏ュ簱/鍑哄簱淇℃伅
@@ -1448,7 +1448,7 @@
       summary: 娣诲姞搴撳瓨鐩樼偣淇℃伅
       tags:
       - 搴撳瓨鐩樼偣
-  /api-wms/v1/locationProductamount/list:
+  /api-wms/v1/locationProductAmount/list:
     post:
       parameters:
       - description: 鏌ヨ鍙傛暟
diff --git a/models/location_product_amount.go b/models/location_product_amount.go
index e8e0e7e..c2ee64c 100644
--- a/models/location_product_amount.go
+++ b/models/location_product_amount.go
@@ -14,6 +14,7 @@
 		LocationProductId int             `json:"locationProductId" gorm:"type:int;not null;comment:涓婃灦瑙勫垯id"` //涓婃灦瑙勫垯id
 		LocationProduct   LocationProduct `json:"locationProduct" gorm:"foreignKey:LocationProductId;references:Id"`
 		Amount            decimal.Decimal `json:"amount" gorm:"type:decimal(20,2);not null;comment:搴撳瓨鏁伴噺"` //搴撳瓨鏁伴噺
+		CreateDate        string          `json:"createDate" gorm:"type:varchar(63);comment:鏃ユ湡"`          //鏃ユ湡
 	}
 
 	LocationProductAmountSearch struct {
@@ -27,9 +28,16 @@
 	}
 
 	LocationProductAmountWithOperation struct {
-		LocationProductAmount LocationProductAmount `json:"locationProductAmount"`
-		AdjustAmount          decimal.Decimal       `json:"adjustAmount" gorm:"column:adjust_amount"`
-		DifferenceAmount      decimal.Decimal       `json:"difference_amount"`
+		//LocationProductAmount LocationProductAmount `json:"locationProductAmount"`
+		LocationId       int             `json:"locationId" gorm:"column:location_id"`
+		LocationName     string          `json:"locationName" gorm:"column:location_name"`
+		ProductId        string          `json:"productId" gorm:"column:product_id"`
+		ProductName      string          `json:"productName" gorm:"column:product_name"`
+		Amount           decimal.Decimal `json:"amount" gorm:"column:amount"`
+		Unit             string          `json:"unit" gorm:"column:unit"`
+		CreateDate       string          `json:"createDate" gorm:"column:create_date"`
+		AdjustAmount     decimal.Decimal `json:"adjustAmount" gorm:"column:adjust_amount"`
+		DifferenceAmount decimal.Decimal `json:"differenceAmount" gorm:"-"`
 	}
 )
 
diff --git a/request/location_product_amount.go b/request/location_product_amount.go
index 7b1ff44..78adb84 100644
--- a/request/location_product_amount.go
+++ b/request/location_product_amount.go
@@ -5,13 +5,13 @@
 type AddLocationProductAmount struct {
 	LocationId       int             `json:"locationId"`
 	ProductId        string          `json:"productId"`
-	Amount           decimal.Decimal `json:"decimal"`           //搴撳瓨鏁伴噺
-	AdjustAmount     decimal.Decimal `json:"adjustAmount" `     //宸��
-	DifferenceAmount decimal.Decimal `json:"difference_amount"` //璁℃暟鏁伴噺
+	Amount           decimal.Decimal `json:"Amount"`           //搴撳瓨鏁伴噺
+	AdjustAmount     decimal.Decimal `json:"adjustAmount" `    //宸��
+	DifferenceAmount decimal.Decimal `json:"differenceAmount"` //璁℃暟鏁伴噺
 }
 
 type UpdateLocationProductAmount struct {
 	LocationProductAmountId int             `json:"locationProductAmountId"` //搴撳瓨鐩樼偣id
 	AdjustAmount            decimal.Decimal `json:"adjustAmount" `           //宸��
-	DifferenceAmount        decimal.Decimal `json:"difference_amount"`       //璁℃暟鏁伴噺
+	DifferenceAmount        decimal.Decimal `json:"differenceAmount"`        //璁℃暟鏁伴噺
 }

--
Gitblit v1.8.0