From c28ff1e6df57900a5d2fced3becae8ddc3313608 Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期四, 14 三月 2024 10:34:23 +0800
Subject: [PATCH] aps在srm创建采购单

---
 proto/purchase_wms/server.go |   97 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 97 insertions(+), 0 deletions(-)

diff --git a/proto/purchase_wms/server.go b/proto/purchase_wms/server.go
index 6eabcf6..29037a8 100644
--- a/proto/purchase_wms/server.go
+++ b/proto/purchase_wms/server.go
@@ -181,3 +181,100 @@
 	resp.Exist = true
 	return resp, nil
 }
+
+func (s *Server) CreatePurchaseByAps(ctx context.Context, req *CreatePurchaseByApsRequest) (*CreatePurchaseByWmsResponse, error) {
+	if len(req.Req) == 0 {
+		return nil, errors.New("浜у搧id涓虹┖")
+	}
+	productIds := make([]string, 0)
+	amount := int64(0)
+	numMap := make(map[string]int64)
+	for _, request := range req.Req {
+		productIds = append(productIds, request.ProductId)
+		numMap[request.ProductId] = request.Amount
+		amount += request.Amount
+	}
+	var products []test.SupplierMaterial
+	var newProducts []test.SupplierMaterial
+	err := global.GVA_DB.Model(&test.SupplierMaterial{}).Where("number in (?)", productIds).Order("id desc").Find(&products).Error
+	if err != nil {
+		return nil, err
+	}
+	for _, id := range productIds {
+		flag := false
+		for _, product := range products {
+			if id == product.Number {
+				newProducts = append(newProducts, product)
+				flag = true
+				break
+			}
+		}
+		if !flag {
+			var material test.Material
+			var product test.SupplierMaterial
+			err = global.GVA_DB.Model(&test.Material{}).Where("id = ?", id).First(&material).Error
+			if err != nil {
+				return nil, err
+			}
+			product.Name = material.Name
+			product.Number = material.ID
+			product.Unit = material.Unit
+			product.PurchasePrice = material.PurchasePrice.InexactFloat64()
+			product.Specifications = material.Specs
+			product.ModelNumber = material.Type
+			err = global.GVA_DB.Create(&product).Error
+			if err != nil {
+				return nil, err
+			}
+			newProducts = append(newProducts, product)
+		}
+	}
+
+	//閲囪喘鍗�
+	var purchaseRecord purchase.Purchase
+	purchaseRecord.OrderSource = "APS鎺ㄩ��"
+	purchaseRecord.Name = "APS閲囪喘"
+	purchaseRecord.ID = 0
+	purchaseRecord.Status = purchase.OrderStatusConfirmed
+	purchaseRecord.HandledBy = "admin"
+	purchaseRecord.Creator = "admin"
+	purchaseRecord.Number = fmt.Sprintf("CG%v", time.Now().Unix())
+	purchaseRecord.Principal = "admin"
+	purchaseRecord.OrderType = "閲囪喘璁㈠崟"
+	purchaseRecord.Quantity = decimal.NewFromInt(amount)
+	purchaseRecord.SourceOrder = req.SourceOrder
+
+	price := float64(0)
+	var pps []purchase.PurchaseProducts
+	for _, product := range newProducts {
+		//浜у搧
+		var pp purchase.PurchaseProducts
+		pp.ProductId = int(product.ID)
+		pp.Amount = decimal.NewFromInt(numMap[product.Number])
+		pp.Price = decimal.NewFromFloat(product.PurchasePrice)
+		price += product.PurchasePrice
+		pp.Total = pp.Amount.Mul(pp.Price)
+		pp.Remark = "APS閲囪喘"
+		pps = append(pps, pp)
+	}
+	purchaseRecord.TotalPrice = purchaseRecord.Quantity.Mul(decimal.NewFromFloat(price))
+	purchaseRecord.UnInvoiceAmount = purchaseRecord.TotalPrice
+	purchaseRecord.ShouldPayAmount = purchaseRecord.TotalPrice
+
+	err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
+		err = tx.Create(&purchaseRecord).Error
+		if err != nil {
+			return err
+		}
+		for i := 0; i < len(pps); i++ {
+			pps[i].PurchaseId = int(purchaseRecord.ID)
+		}
+		return tx.Create(&pps).Error
+	})
+	if err != nil {
+		return nil, err
+	}
+	resp := new(CreatePurchaseByWmsResponse)
+	resp.PurchaseNumber = purchaseRecord.Number
+	return resp, nil
+}

--
Gitblit v1.8.0