From 69f0410081da54e6cea8a04a07fd0119a8edc623 Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期六, 30 三月 2024 11:38:42 +0800
Subject: [PATCH] 采购单修改

---
 api/v1/purchase/purchase.go         |   86 +++++++----
 model/purchase/response/purchase.go |   41 +++--
 docs/swagger.yaml                   |   69 ++++++---
 docs/docs.go                        |   94 +++++++++----
 service/purchase/purchase.go        |   13 +
 docs/swagger.json                   |   94 +++++++++----
 6 files changed, 263 insertions(+), 134 deletions(-)

diff --git a/api/v1/purchase/purchase.go b/api/v1/purchase/purchase.go
index e571258..b81fe5a 100644
--- a/api/v1/purchase/purchase.go
+++ b/api/v1/purchase/purchase.go
@@ -394,59 +394,75 @@
 		return
 	}
 
-	operationInfos := make([]purchaseRes.OperationInfo, 0)
+	var operationInfos purchaseRes.OperationInfo
+	productInfos := make([]purchaseRes.ProductInfo, 0)
+	inWarehouseInfos := make([]purchaseRes.InWarehouseInfo, 0)
+	productMap := make(map[string]*purchaseRes.ProductInfo)
 	if len(info.Operations) > 0 {
 		for _, operation := range info.Operations {
-			var oi purchaseRes.OperationInfo
-			oi.Number = operation.ProductId
-			oi.Name = operation.ProductName
-			oi.OperationNumber = operation.Number
-			oi.Status = operation.Status
-			oi.Principal = data.Principal
-			oi.WarehouseName = data.Warehouse
+			var pi purchaseRes.ProductInfo
+			var iwi purchaseRes.InWarehouseInfo
+			if p, ok := productMap[operation.ProductId]; ok {
+				pi = *p
+			}
+			pi.Number = operation.ProductId
+			pi.Name = operation.ProductName
+			iwi.Number = operation.ProductId
+			iwi.Name = operation.ProductName
+			iwi.OperationNumber = operation.Number
+			iwi.Status = operation.Status
+			iwi.Principal = data.Principal
+			iwi.WarehouseName = data.Warehouse
 			if operation.OverTime != "" {
-				oi.OverTime = operation.OverTime
-				oi.OverAmount = operation.Amount
+				iwi.OverTime = operation.OverTime
+				iwi.OverAmount = operation.Amount
+				pi.OverAmount = pi.OverAmount + operation.Amount
 			}
 			for _, products := range productList {
 				if products.Product.Number == operation.ProductId {
-					oi.Amount = products.Amount
-					oi.PurchasePrice = products.Price
-					oi.Total = products.Total
-					oi.Unit = products.Product.Unit
-					oi.Specifications = products.Product.Specifications
-					oi.ModelNumber = products.Product.ModelNumber
+					pi.Amount = products.Amount
+					pi.PurchasePrice = products.Price
+					pi.Total = products.Total
+					pi.Unit = products.Product.Unit
+					pi.Specifications = products.Product.Specifications
+					pi.ModelNumber = products.Product.ModelNumber
 					break
 				}
 			}
 			for _, confirm := range confirmInfo {
 				if operation.ProductId == confirm.ProductId {
-					oi.SendAmount = confirm.OverReceiveAmount.IntPart()
+					pi.SendAmount = confirm.OverReceiveAmount.IntPart()
 					break
 				}
 			}
-			operationInfos = append(operationInfos, oi)
+			inWarehouseInfos = append(inWarehouseInfos, iwi)
+			productMap[operation.ProductId] = &pi
 		}
 	} else {
 		for _, products := range productList {
-			var oi purchaseRes.OperationInfo
-			oi.Number = products.Product.Number
-			oi.Name = products.Product.Name
-			oi.Amount = products.Amount
-			oi.PurchasePrice = products.Price
-			oi.Total = products.Total
-			oi.Unit = products.Product.Unit
-			oi.Specifications = products.Product.Specifications
-			oi.ModelNumber = products.Product.ModelNumber
+			var pi purchaseRes.ProductInfo
+			pi.Number = products.Product.Number
+			pi.Name = products.Product.Name
+			pi.Amount = products.Amount
+			pi.PurchasePrice = products.Price
+			pi.Total = products.Total
+			pi.Unit = products.Product.Unit
+			pi.Specifications = products.Product.Specifications
+			pi.ModelNumber = products.Product.ModelNumber
 			for _, confirm := range confirmInfo {
 				if products.Product.Number == confirm.ProductId {
-					oi.SendAmount = confirm.OverReceiveAmount.IntPart()
+					pi.SendAmount = confirm.OverReceiveAmount.IntPart()
 					break
 				}
 			}
-			operationInfos = append(operationInfos, oi)
+			productMap[pi.Number] = &pi
 		}
 	}
+	for _, productInfo := range productMap {
+		productInfos = append(productInfos, *productInfo)
+	}
+	operationInfos.InWarehouseInfos = inWarehouseInfos
+	operationInfos.ProductInfos = productInfos
 
 	response.OkWithData(operationInfos, c)
 }
@@ -739,13 +755,17 @@
 	}
 	product := make([]*purchase_wms.PurchaseProduct, 0)
 	ids := make([]int, 0)
+	productMap := make(map[string]int64)
 	for _, inspection := range inspectionList {
-		var p purchase_wms.PurchaseProduct
-		p.Id = inspection.ProductId
-		p.Amount = inspection.Amount.IntPart()
-		product = append(product, &p)
+		productMap[inspection.ProductId] = inspection.Amount.IntPart()
 		ids = append(ids, int(inspection.ID))
 	}
+	for k, v := range productMap {
+		var p purchase_wms.PurchaseProduct
+		p.Id = k
+		p.Amount = v
+		product = append(product, &p)
+	}
 	client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
 	_, err = client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
 		Number:          purchaseData.Number,
diff --git a/docs/docs.go b/docs/docs.go
index 853f041..9ebef61 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -4125,7 +4125,7 @@
                     "type": "string"
                 },
                 "sourceOrder": {
-                    "description": "鏉ユ簮鍗曟嵁",
+                    "description": "鏉ユ簮鍗曟嵁 ,閿�鍞槑缁嗙紪鐮�",
                     "type": "string"
                 },
                 "status": {
@@ -4690,17 +4690,9 @@
                 }
             }
         },
-        "response.OperationInfo": {
+        "response.InWarehouseInfo": {
             "type": "object",
             "properties": {
-                "amount": {
-                    "description": "閲囪喘鏁�",
-                    "type": "number"
-                },
-                "modelNumber": {
-                    "description": "鍨嬪彿",
-                    "type": "string"
-                },
                 "name": {
                     "description": "浜у搧鍚嶇О",
                     "type": "string"
@@ -4725,32 +4717,29 @@
                     "description": "璐熻矗浜�",
                     "type": "string"
                 },
-                "purchasePrice": {
-                    "description": "鍗曚环",
-                    "type": "number"
-                },
-                "sendAmount": {
-                    "description": "鍙戣揣鏁�",
-                    "type": "integer"
-                },
-                "specifications": {
-                    "description": "瑙勬牸",
-                    "type": "string"
-                },
                 "status": {
                     "type": "integer"
-                },
-                "total": {
-                    "description": "鎬讳环",
-                    "type": "number"
-                },
-                "unit": {
-                    "description": "鍗曚綅",
-                    "type": "string"
                 },
                 "warehouseName": {
                     "description": "浠撳簱鍚�",
                     "type": "string"
+                }
+            }
+        },
+        "response.OperationInfo": {
+            "type": "object",
+            "properties": {
+                "inWarehouseInfos": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/response.InWarehouseInfo"
+                    }
+                },
+                "productInfos": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/response.ProductInfo"
+                    }
                 }
             }
         },
@@ -4769,6 +4758,51 @@
                 }
             }
         },
+        "response.ProductInfo": {
+            "type": "object",
+            "properties": {
+                "amount": {
+                    "description": "閲囪喘鏁�",
+                    "type": "number"
+                },
+                "modelNumber": {
+                    "description": "鍨嬪彿",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "浜у搧鍚嶇О",
+                    "type": "string"
+                },
+                "number": {
+                    "description": "浜у搧缂栫爜",
+                    "type": "string"
+                },
+                "overAmount": {
+                    "description": "鍏ュ簱鏁�",
+                    "type": "integer"
+                },
+                "purchasePrice": {
+                    "description": "鍗曚环",
+                    "type": "number"
+                },
+                "sendAmount": {
+                    "description": "鏀惰揣鏁�",
+                    "type": "integer"
+                },
+                "specifications": {
+                    "description": "瑙勬牸",
+                    "type": "string"
+                },
+                "total": {
+                    "description": "鎬讳环",
+                    "type": "number"
+                },
+                "unit": {
+                    "description": "鍗曚綅",
+                    "type": "string"
+                }
+            }
+        },
         "response.PurchaseProducts": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 9a104d4..aa52a00 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -4116,7 +4116,7 @@
                     "type": "string"
                 },
                 "sourceOrder": {
-                    "description": "鏉ユ簮鍗曟嵁",
+                    "description": "鏉ユ簮鍗曟嵁 ,閿�鍞槑缁嗙紪鐮�",
                     "type": "string"
                 },
                 "status": {
@@ -4681,17 +4681,9 @@
                 }
             }
         },
-        "response.OperationInfo": {
+        "response.InWarehouseInfo": {
             "type": "object",
             "properties": {
-                "amount": {
-                    "description": "閲囪喘鏁�",
-                    "type": "number"
-                },
-                "modelNumber": {
-                    "description": "鍨嬪彿",
-                    "type": "string"
-                },
                 "name": {
                     "description": "浜у搧鍚嶇О",
                     "type": "string"
@@ -4716,32 +4708,29 @@
                     "description": "璐熻矗浜�",
                     "type": "string"
                 },
-                "purchasePrice": {
-                    "description": "鍗曚环",
-                    "type": "number"
-                },
-                "sendAmount": {
-                    "description": "鍙戣揣鏁�",
-                    "type": "integer"
-                },
-                "specifications": {
-                    "description": "瑙勬牸",
-                    "type": "string"
-                },
                 "status": {
                     "type": "integer"
-                },
-                "total": {
-                    "description": "鎬讳环",
-                    "type": "number"
-                },
-                "unit": {
-                    "description": "鍗曚綅",
-                    "type": "string"
                 },
                 "warehouseName": {
                     "description": "浠撳簱鍚�",
                     "type": "string"
+                }
+            }
+        },
+        "response.OperationInfo": {
+            "type": "object",
+            "properties": {
+                "inWarehouseInfos": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/response.InWarehouseInfo"
+                    }
+                },
+                "productInfos": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/response.ProductInfo"
+                    }
                 }
             }
         },
@@ -4760,6 +4749,51 @@
                 }
             }
         },
+        "response.ProductInfo": {
+            "type": "object",
+            "properties": {
+                "amount": {
+                    "description": "閲囪喘鏁�",
+                    "type": "number"
+                },
+                "modelNumber": {
+                    "description": "鍨嬪彿",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "浜у搧鍚嶇О",
+                    "type": "string"
+                },
+                "number": {
+                    "description": "浜у搧缂栫爜",
+                    "type": "string"
+                },
+                "overAmount": {
+                    "description": "鍏ュ簱鏁�",
+                    "type": "integer"
+                },
+                "purchasePrice": {
+                    "description": "鍗曚环",
+                    "type": "number"
+                },
+                "sendAmount": {
+                    "description": "鏀惰揣鏁�",
+                    "type": "integer"
+                },
+                "specifications": {
+                    "description": "瑙勬牸",
+                    "type": "string"
+                },
+                "total": {
+                    "description": "鎬讳环",
+                    "type": "number"
+                },
+                "unit": {
+                    "description": "鍗曚綅",
+                    "type": "string"
+                }
+            }
+        },
         "response.PurchaseProducts": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index a1b21f2..37c765c 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -506,7 +506,7 @@
         description: 绛剧害鏃ユ湡
         type: string
       sourceOrder:
-        description: 鏉ユ簮鍗曟嵁
+        description: 鏉ユ簮鍗曟嵁 ,閿�鍞槑缁嗙紪鐮�
         type: string
       status:
         allOf:
@@ -888,14 +888,8 @@
           $ref: '#/definitions/test.SupplierType'
         type: array
     type: object
-  response.OperationInfo:
+  response.InWarehouseInfo:
     properties:
-      amount:
-        description: 閲囪喘鏁�
-        type: number
-      modelNumber:
-        description: 鍨嬪彿
-        type: string
       name:
         description: 浜у搧鍚嶇О
         type: string
@@ -914,26 +908,22 @@
       principal:
         description: 璐熻矗浜�
         type: string
-      purchasePrice:
-        description: 鍗曚环
-        type: number
-      sendAmount:
-        description: 鍙戣揣鏁�
-        type: integer
-      specifications:
-        description: 瑙勬牸
-        type: string
       status:
         type: integer
-      total:
-        description: 鎬讳环
-        type: number
-      unit:
-        description: 鍗曚綅
-        type: string
       warehouseName:
         description: 浠撳簱鍚�
         type: string
+    type: object
+  response.OperationInfo:
+    properties:
+      inWarehouseInfos:
+        items:
+          $ref: '#/definitions/response.InWarehouseInfo'
+        type: array
+      productInfos:
+        items:
+          $ref: '#/definitions/response.ProductInfo'
+        type: array
     type: object
   response.PageResult:
     properties:
@@ -945,6 +935,39 @@
       total:
         type: integer
     type: object
+  response.ProductInfo:
+    properties:
+      amount:
+        description: 閲囪喘鏁�
+        type: number
+      modelNumber:
+        description: 鍨嬪彿
+        type: string
+      name:
+        description: 浜у搧鍚嶇О
+        type: string
+      number:
+        description: 浜у搧缂栫爜
+        type: string
+      overAmount:
+        description: 鍏ュ簱鏁�
+        type: integer
+      purchasePrice:
+        description: 鍗曚环
+        type: number
+      sendAmount:
+        description: 鏀惰揣鏁�
+        type: integer
+      specifications:
+        description: 瑙勬牸
+        type: string
+      total:
+        description: 鎬讳环
+        type: number
+      unit:
+        description: 鍗曚綅
+        type: string
+    type: object
   response.PurchaseProducts:
     properties:
       amount:
diff --git a/model/purchase/response/purchase.go b/model/purchase/response/purchase.go
index a66dcc4..ec3a5a8 100644
--- a/model/purchase/response/purchase.go
+++ b/model/purchase/response/purchase.go
@@ -51,19 +51,30 @@
 }
 
 type OperationInfo struct {
-	Number          string          `json:"number"`          //浜у搧缂栫爜
-	Name            string          `json:"name"`            //浜у搧鍚嶇О
-	Specifications  string          `json:"specifications"`  //瑙勬牸
-	ModelNumber     string          `json:"modelNumber"`     //鍨嬪彿
-	Amount          decimal.Decimal `json:"amount"`          //閲囪喘鏁�
-	SendAmount      int64           `json:"sendAmount"`      //鏀惰揣鏁�
-	OverAmount      int64           `json:"overAmount"`      //鍏ュ簱鏁�
-	Unit            string          `json:"unit"`            //鍗曚綅
-	PurchasePrice   decimal.Decimal `json:"purchasePrice"`   //鍗曚环
-	Total           decimal.Decimal `json:"total"`           //鎬讳环
-	OperationNumber string          `json:"operationNumber"` //鍏ュ簱鍗曞彿
-	WarehouseName   string          `json:"warehouseName"`   //浠撳簱鍚�
-	OverTime        string          `json:"overTime"`        //鍏ュ簱鏃堕棿
-	Status          int64           `json:"status"`
-	Principal       string          `json:"principal"` //璐熻矗浜�
+	ProductInfos     []ProductInfo     `json:"productInfos"`
+	InWarehouseInfos []InWarehouseInfo `json:"inWarehouseInfos"`
+}
+
+type ProductInfo struct {
+	Number         string          `json:"number"`         //浜у搧缂栫爜
+	Name           string          `json:"name"`           //浜у搧鍚嶇О
+	Specifications string          `json:"specifications"` //瑙勬牸
+	ModelNumber    string          `json:"modelNumber"`    //鍨嬪彿
+	Amount         decimal.Decimal `json:"amount"`         //閲囪喘鏁�
+	SendAmount     int64           `json:"sendAmount"`     //鏀惰揣鏁�
+	OverAmount     int64           `json:"overAmount"`     //鍏ュ簱鏁�
+	Unit           string          `json:"unit"`           //鍗曚綅
+	PurchasePrice  decimal.Decimal `json:"purchasePrice"`  //鍗曚环
+	Total          decimal.Decimal `json:"total"`          //鎬讳环
+}
+
+type InWarehouseInfo struct {
+	Number          string `json:"number"`          //浜у搧缂栫爜
+	Name            string `json:"name"`            //浜у搧鍚嶇О
+	OperationNumber string `json:"operationNumber"` //鍏ュ簱鍗曞彿
+	WarehouseName   string `json:"warehouseName"`   //浠撳簱鍚�
+	OverTime        string `json:"overTime"`        //鍏ュ簱鏃堕棿
+	Status          int64  `json:"status"`
+	Principal       string `json:"principal"`  //璐熻矗浜�
+	OverAmount      int64  `json:"overAmount"` //鍏ュ簱鏁�
 }
diff --git a/service/purchase/purchase.go b/service/purchase/purchase.go
index 05171f4..aeba8f3 100644
--- a/service/purchase/purchase.go
+++ b/service/purchase/purchase.go
@@ -410,15 +410,22 @@
 
 func (slf *PurchaseService) UpdatePurchaseStatus(number string, status int) error {
 	var total int64
-	err := global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("purchase_number = ?", number).Where("status = ?", status).Count(&total).Error
+	err := global.GVA_DB.Model(&purchase.Purchase{}).Where("number = ?", number).Where("status = ?", purchase.OrderStatusWaitQuality).Count(&total).Error
 	if err != nil {
 		return err
 	}
-	if total == 0 {
-		err = global.GVA_DB.Model(&purchase.Purchase{}).Where("number = ?", number).Updates(map[string]interface{}{"status": purchase.OrderStatusReceived}).Error
+	if total > 0 {
+		err = global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("purchase_number = ?", number).Where("status = ?", status).Count(&total).Error
 		if err != nil {
 			return err
 		}
+
+		if total == 0 {
+			err = global.GVA_DB.Model(&purchase.Purchase{}).Where("number = ?", number).Updates(map[string]interface{}{"status": purchase.OrderStatusReceived}).Error
+			if err != nil {
+				return err
+			}
+		}
 	}
 	return nil
 }

--
Gitblit v1.8.0