From c7e82fd1d76b9fb25497d5aba4372bbfe13a8468 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 28 三月 2024 20:00:21 +0800
Subject: [PATCH] 采购入库增加来源

---
 api/v1/purchase/purchase.go |  208 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 159 insertions(+), 49 deletions(-)

diff --git a/api/v1/purchase/purchase.go b/api/v1/purchase/purchase.go
index 26e101b..753d8dc 100644
--- a/api/v1/purchase/purchase.go
+++ b/api/v1/purchase/purchase.go
@@ -226,7 +226,7 @@
 // @Security  ApiKeyAuth
 // @accept    application/json
 // @Produce   application/json
-// @Param		id	path		int	true	"閲囪喘鍗旾D"
+// @Param     data  body     purchaserequest.SubmitPurchase   true  "鍙傛暟"
 // @Success   200   {object}  response.Response{msg=string}  "鎻愪氦閲囪喘鍗�"
 // @Router    /purchase/submit [post]
 func (e *PurchaseApi) Submit(c *gin.Context) {
@@ -260,10 +260,11 @@
 		}
 		client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
 		resp, err := client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
-			Number:       data.Number,
-			SupplierName: data.Supplier.Name,
-			Product:      product,
-			Source:       "SRM_PURCHASE",
+			Number:          data.Number,
+			SupplierName:    data.Supplier.Name,
+			Product:         product,
+			Source:          "SRM_PURCHASE",
+			OperationSource: purchase_wms.OperationSource_OperationSourcePurchase,
 		})
 		if err != nil {
 			global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
@@ -387,33 +388,48 @@
 	}
 
 	operationInfos := make([]purchaseRes.OperationInfo, 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
-		if operation.OverTime != "" {
-			oi.OverTime = operation.OverTime
-			oi.OverAmount = operation.Amount
-		} else {
+	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
 			oi.SendAmount = 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
-				break
+			if operation.OverTime != "" {
+				oi.OverTime = operation.OverTime
+				oi.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
+					break
+				}
+			}
+			operationInfos = append(operationInfos, oi)
 		}
-		operationInfos = append(operationInfos, oi)
+	} 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
+			operationInfos = append(operationInfos, oi)
+		}
 	}
+
 	response.OkWithData(operationInfos, c)
 }
 
@@ -423,22 +439,39 @@
 // @Security  ApiKeyAuth
 // @accept    application/json
 // @Produce   application/json
-// @Param		id	path		int	true	"閲囪喘鍗旾D"                                           true  "閲囪喘鍗旾D"
+// @Param     data  body     purchaserequest.SubmitPurchase   true  "鍙傛暟"
 // @Success   200   {object}  response.Response{msg=string}  "鏂扮増鎻愪氦"
-// @Router    /purchase/newSubmit/{id} [get]
+// @Router    /purchase/newSubmit [post]
 func (e *PurchaseApi) NewSubmit(c *gin.Context) {
-	id, _ := strconv.Atoi(c.Param("id"))
+	var params purchaserequest.SubmitPurchase
+	err := c.ShouldBindJSON(&params)
+	if err != nil {
+		global.GVA_LOG.Error("Submit failed", zap.Error(err))
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	id := uint(params.Id)
 	if id == 0 {
 		response.FailWithMessage("鍙傛暟缂哄け", c)
 		return
 	}
-	data, err := service.NewPurchaseService().GetPurchase(uint(id))
+	if params.Status == purchase.OrderStatusCanceled {
+		err = service.NewPurchaseService().Submit(params.Id, params.Status, "")
+		if err != nil {
+			global.GVA_LOG.Error("鎻愪氦澶辫触!", zap.Error(err))
+			response.FailWithMessage("鎻愪氦澶辫触", c)
+			return
+		}
+		response.OkWithMessage("鎻愪氦鎴愬姛", c)
+		return
+	}
+	data, err := service.NewPurchaseService().GetPurchase(id)
 	if err != nil {
 		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
 		response.FailWithMessage("鑾峰彇澶辫触", c)
 		return
 	}
-	productList, err := service.NewPurchaseService().GetPurchaseProductList(uint(id))
+	productList, err := service.NewPurchaseService().GetPurchaseProductList(id)
 	if err != nil {
 		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
 		response.FailWithMessage("鑾峰彇澶辫触", c)
@@ -461,7 +494,7 @@
 		ppc.SurplusReceiveAmount = products.Amount
 		list = append(list, &ppc)
 	}
-	err = service.NewPurchaseService().SavePurchaseProductConfirm(list)
+	err = service.NewPurchaseService().SavePurchaseProductConfirm(list, true)
 
 	if err != nil {
 		global.GVA_LOG.Error("鎻愪氦澶辫触!", zap.Error(err))
@@ -519,14 +552,14 @@
 	}
 
 	server := service.NewPurchaseService()
-	err = server.SavePurchaseProductConfirm(list)
+	err = server.SavePurchaseProductConfirm(list, false)
 
 	if err != nil {
 		global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
 		response.FailWithMessage("淇濆瓨澶辫触", c)
 		return
 	}
-	err = server.SavePurchaseQualityInspection(list)
+	_, err = server.SavePurchaseQualityInspection(list)
 	if err != nil {
 		global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
 		response.FailWithMessage("淇濆瓨澶辫触", c)
@@ -585,6 +618,12 @@
 		return
 	}
 	server := service.PurchaseService{}
+	purchaseData, err := server.GetPurchase(params.PurchaseId)
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇澶辫触", c)
+		return
+	}
 	if params.Status == purchase.Unqualified {
 		err := server.UpdatePurchaseQualityInspection(params.Ids, params.Status)
 		if err != nil {
@@ -593,12 +632,6 @@
 			return
 		}
 	} else if params.Status == purchase.InWarehouse {
-		purchaseData, err := server.GetPurchase(params.PurchaseId)
-		if err != nil {
-			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
-			response.FailWithMessage("鑾峰彇澶辫触", c)
-			return
-		}
 		inspectionList, err := server.GetPurchaseQualityInspectionList(params.Ids)
 		if err != nil {
 			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
@@ -614,12 +647,13 @@
 		}
 		client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
 		_, err = client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
-			Number:        purchaseData.Number,
-			SupplierName:  purchaseData.Supplier.Name,
-			SupplierId:    int64(purchaseData.SupplierId),
-			Product:       product,
-			Source:        "SRM_PURCHASE",
-			WarehouseName: purchaseData.Warehouse,
+			Number:          purchaseData.Number,
+			SupplierName:    purchaseData.Supplier.Name,
+			SupplierId:      int64(purchaseData.SupplierId),
+			Product:         product,
+			Source:          "SRM_PURCHASE",
+			WarehouseName:   purchaseData.Warehouse,
+			OperationSource: purchase_wms.OperationSource_OperationSourcePurchase,
 		})
 		if err != nil {
 			global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
@@ -633,7 +667,7 @@
 			return
 		}
 	}
-	err = server.UpdatePurchaseStatus(params.PurchaseId, purchase.WaitInspection)
+	err = server.UpdatePurchaseStatus(purchaseData.Number, purchase.WaitInspection)
 	if err != nil {
 		global.GVA_LOG.Error("鐘舵�佹洿鏂板け璐�!", zap.Error(err))
 		response.FailWithMessage("鐘舵�佹洿鏂板け璐�", c)
@@ -641,3 +675,79 @@
 	}
 	response.OkWithMessage("璐ㄦ鎴愬姛", c)
 }
+
+// AllProductInWarehouse
+// @Tags      Purchase
+// @Summary   鍏ㄩ儴鍚堟牸鍏ュ簱
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Param     data  body     purchaserequest.PurchaseProductConfirmInfo   true  "鍙傛暟"
+// @Success   200   {object}  response.Response{}  "鑾峰彇纭淇℃伅"
+// @Router    /purchase/allProductInWarehouse [post]
+func (e *PurchaseApi) AllProductInWarehouse(c *gin.Context) {
+	var params []*purchaserequest.PurchaseProductConfirmInfo
+	err := c.ShouldBindJSON(&params)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	list := make([]*purchase.PurchaseProductConfirm, 0, len(params))
+	if err := utils.AssignTo(params, &list); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	server := service.NewPurchaseService()
+	err = server.SavePurchaseProductConfirm(list, false)
+
+	if err != nil {
+		global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
+		response.FailWithMessage("淇濆瓨澶辫触", c)
+		return
+	}
+	inspectionList, err := server.SavePurchaseQualityInspection(list)
+	if err != nil {
+		global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
+		response.FailWithMessage("淇濆瓨澶辫触", c)
+		return
+	}
+	purchaseData, err := server.GetPurchaseByNumber(list[0].PurchaseNumber)
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇澶辫触", c)
+		return
+	}
+	product := make([]*purchase_wms.PurchaseProduct, 0)
+	ids := make([]int, 0)
+	for _, inspection := range inspectionList {
+		var p purchase_wms.PurchaseProduct
+		p.Id = inspection.ProductId
+		p.Amount = inspection.Amount.IntPart()
+		product = append(product, &p)
+		ids = append(ids, int(inspection.ID))
+	}
+	client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
+	_, err = client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
+		Number:          purchaseData.Number,
+		SupplierName:    purchaseData.Supplier.Name,
+		SupplierId:      int64(purchaseData.SupplierId),
+		Product:         product,
+		Source:          "SRM_PURCHASE",
+		WarehouseName:   purchaseData.Warehouse,
+		OperationSource: purchase_wms.OperationSource_OperationSourcePurchase,
+	})
+	if err != nil {
+		global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
+		response.FailWithMessage("grpc璋冪敤澶辫触", c)
+		return
+	}
+	err = server.UpdatePurchaseQualityInspection(ids, purchase.InWarehouse)
+	if err != nil {
+		global.GVA_LOG.Error("璐ㄦ澶辫触!", zap.Error(err))
+		response.FailWithMessage("璐ㄦ澶辫触", c)
+		return
+	}
+	response.OkWithMessage("璐ㄦ鎴愬姛", c)
+}

--
Gitblit v1.8.0