From 2030ec81f18f4ec9ea1800f13046acafff6d50f7 Mon Sep 17 00:00:00 2001
From: yinbentan <yinbentan@live.com>
Date: 星期四, 26 九月 2024 00:48:59 +0800
Subject: [PATCH] 添加grpc方法:客户信息维护

---
 api/v1/product.go |  146 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 144 insertions(+), 2 deletions(-)

diff --git a/api/v1/product.go b/api/v1/product.go
index 86ee33d..c3aeedd 100644
--- a/api/v1/product.go
+++ b/api/v1/product.go
@@ -9,9 +9,11 @@
 	"aps_crm/pkg/ecode"
 	"aps_crm/pkg/logx"
 	"aps_crm/proto/product"
+	"aps_crm/proto/product_inventory"
 	"github.com/gin-gonic/gin"
 	"github.com/shopspring/decimal"
 	"github.com/spf13/cast"
+	"strconv"
 )
 
 type ProductApi struct{}
@@ -55,6 +57,19 @@
 		return
 	}
 
+	if params.QuotationNumber != "" {
+		find, err := model.NewQuotationSearch(nil).SetNumber(params.QuotationNumber).Find()
+		if err != nil {
+			ctx.FailWithMsg(ecode.UnknownErr, "鎶ヤ环鍗曚俊鎭煡璇㈠け璐�")
+			return
+		}
+		products := find.Products
+		ctx.OkWithDetailed(response.ListResponse{
+			Data:  products,
+			Count: int64(len(products)),
+		})
+		return
+	}
 	cli := product.NewProductServiceClient(grpc_init.CrmApsGrpcServiceConn)
 	getProductListResponse, err := cli.GetProductList(ctx.GetCtx(), &product.GetProductListRequest{
 		Page:          cast.ToInt32(params.Page),
@@ -82,6 +97,9 @@
 		productList[k].Amount = decimal.NewFromFloat(1)
 		productList[k].Total = productList[k].Price.Mul(productList[k].Amount).Round(2)
 		productList[k].Unit = v.Unit
+		productList[k].Type = v.Type
+		productList[k].Specs = v.Specs
+		productList[k].Price = decimal.NewFromFloat(v.SalePrice)
 	}
 
 	ctx.OkWithDetailed(response.ListResponse{
@@ -127,7 +145,7 @@
 // @Summary	鑾峰彇浜у搧璁㈠崟淇℃伅
 // @Produce	application/json
 // @Param		number	path		string	true	"鏄庣粏缂栫爜"
-// @Success	200	{object}	contextx.Response{data=[]product.WorkOrderInfo}	"鎴愬姛"
+// @Success	200	{object}	contextx.Response{data=response.Info}	"鎴愬姛"
 //
 //	@Router		/api/product/getProductOrderInfo/{number} [get]
 func (ci *ProductApi) GetProductOrderInfo(c *gin.Context) {
@@ -140,6 +158,32 @@
 		ctx.Ok()
 		return
 	}
+	first, err := model.NewSalesDetailsSearch().SetPreload(true).SetNumber(number).First()
+	if err != nil {
+		ctx.FailWithMsg(ecode.DBErr, "鏌ヨ閿�鍞槑缁嗗嚭閿�")
+		return
+	}
+	productInfo := make([]response.SalesDetailsProductInfo, 0)
+	amountMap := make(map[string]int64)
+	overMap := make(map[string]int64)
+	outputMap := make(map[string]int)
+	for _, p := range first.Products {
+		amountMap[p.Number] = 0
+		overMap[p.Number] = 0
+		var sdpi response.SalesDetailsProductInfo
+		sdpi.ProductId = p.Number
+		sdpi.ProductName = p.Name
+		sdpi.Specs = p.Specs
+		sdpi.Unit = p.Unit
+		sdpi.Amount = p.Amount
+		sdpi.Cost = p.Cost
+		sdpi.Price = p.Price
+		sdpi.Total = p.Total
+		sdpi.Profit = p.Profit
+		sdpi.Margin = p.Margin
+		productInfo = append(productInfo, sdpi)
+	}
+
 	client := product.NewProductServiceClient(grpc_init.CrmApsGrpcServiceConn)
 	info, err := client.GetProductOrder(ctx.GetCtx(), &product.GetProductOrderRequest{SalesDetailsNumber: number})
 	if err != nil {
@@ -147,6 +191,20 @@
 		ctx.FailWithMsg(ecode.UnknownErr, "鍐呴儴閿欒")
 		return
 	}
+	//鏌ヨ鍙戣揣淇℃伅
+	cl := product_inventory.NewProductInventoryServiceClient(grpc_init.ProductInventoryServiceConn)
+	operationInfo, err := cl.GetOutputOperationInfo(ctx.GetCtx(), &product_inventory.GetOutputOperationInfoRequest{Number: number})
+	if err != nil {
+		logx.Errorf("grpc GetOutputOperationInfo err: %v", err.Error())
+		ctx.FailWithMsg(ecode.UnknownErr, "鍐呴儴閿欒")
+		return
+	}
+	for _, outputProduct := range operationInfo.Products {
+		amount, _ := strconv.Atoi(outputProduct.Amount)
+		outputMap[outputProduct.Number] = amount
+	}
+	var result response.Info
+	//鍒堕�犱俊鎭�
 	var list []response.WorkOrderInfo
 	for _, orderInfo := range info.List {
 		var wo response.WorkOrderInfo
@@ -157,7 +215,91 @@
 		wo.WorkOrderStatus = orderInfo.WorkOrderStatus
 		wo.StartTime = orderInfo.StartTime
 		wo.EndTime = orderInfo.EndTime
+		wo.ProductId = orderInfo.ProductId
+		wo.Specs = orderInfo.Specs
+		wo.Unit = orderInfo.Unit
+		wo.Amount = orderInfo.Amount
+		wo.FinishAmount = orderInfo.FinishAmount
+		at := amountMap[orderInfo.ProductId] + orderInfo.Amount
+		amountMap[orderInfo.ProductId] = at
+		fat := overMap[orderInfo.ProductId] + orderInfo.FinishAmount
+		overMap[orderInfo.ProductId] = fat
 		list = append(list, wo)
 	}
-	ctx.OkWithDetailed(list)
+	for i := 0; i < len(productInfo); i++ {
+		productInfo[i].MakeAmount = amountMap[productInfo[i].ProductId]
+		amountMap[productInfo[i].ProductId] = 0
+		productInfo[i].MakeFinishAmount = overMap[productInfo[i].ProductId]
+		productInfo[i].FinishAmount = productInfo[i].FinishAmount + overMap[productInfo[i].ProductId]
+		overMap[productInfo[i].ProductId] = 0
+	}
+	result.MakeInfo = list
+
+	//閲囪喘淇℃伅
+	var purchaseInfo []response.Purchase
+	for _, pl := range info.PurchaseList {
+		var p response.Purchase
+		p.Amount = pl.Amount
+		p.Status = pl.Status
+		p.PurchaseName = pl.PurchaseName
+		p.PurchaseNumber = pl.PurchaseNumber
+		p.SupplierName = pl.SupplierName
+		p.ProductId = pl.ProductId
+		p.ProductName = pl.ProductName
+		p.Specs = pl.Specs
+		p.Unit = pl.Unit
+		p.Amount = pl.Amount
+		p.FinishAmount = pl.FinishAmount
+		at := amountMap[pl.ProductId] + pl.Amount
+		amountMap[pl.ProductId] = at
+		fat := overMap[pl.ProductId] + pl.FinishAmount
+		overMap[pl.ProductId] = fat
+		purchaseInfo = append(purchaseInfo, p)
+	}
+	for i := 0; i < len(productInfo); i++ {
+		productInfo[i].PurchaseAmount = amountMap[productInfo[i].ProductId]
+		amountMap[productInfo[i].ProductId] = 0
+		productInfo[i].PurchaseFinishAmount = overMap[productInfo[i].ProductId]
+		productInfo[i].FinishAmount = productInfo[i].FinishAmount + overMap[productInfo[i].ProductId]
+		overMap[productInfo[i].ProductId] = 0
+	}
+	result.PurchaseInfo = purchaseInfo
+
+	//濮斿淇℃伅
+	var outsourcingList []response.OutsourcingInfo
+	for _, outsourcingInfo := range info.OutsourcingList {
+		var oi response.OutsourcingInfo
+		oi.OutsourcingId = outsourcingInfo.OutsourcingId
+		oi.OutsourcingStatus = outsourcingInfo.OutsourcingStatus
+		oi.ProductId = outsourcingInfo.ProductId
+		oi.ProductName = outsourcingInfo.ProductName
+		oi.SupplierName = outsourcingInfo.SupplierName
+		oi.StartTime = outsourcingInfo.StartTime
+		oi.EndTime = outsourcingInfo.EndTime
+		oi.Specs = outsourcingInfo.Specs
+		oi.Unit = outsourcingInfo.Unit
+		oi.Amount = outsourcingInfo.Amount
+		oi.FinishAmount = outsourcingInfo.FinishAmount
+		at := amountMap[outsourcingInfo.ProductId] + outsourcingInfo.Amount
+		amountMap[outsourcingInfo.ProductId] = at
+		fat := overMap[outsourcingInfo.ProductId] + outsourcingInfo.FinishAmount
+		overMap[outsourcingInfo.ProductId] = fat
+		outsourcingList = append(outsourcingList, oi)
+	}
+	for i := 0; i < len(productInfo); i++ {
+		productInfo[i].OutsourcingAmount = amountMap[productInfo[i].ProductId]
+		amountMap[productInfo[i].ProductId] = 0
+		productInfo[i].OutsourcingFinishAmount = overMap[productInfo[i].ProductId]
+		productInfo[i].FinishAmount = productInfo[i].FinishAmount + overMap[productInfo[i].ProductId]
+		overMap[productInfo[i].ProductId] = 0
+	}
+
+	//鍙戣揣淇℃伅
+	for i := 0; i < len(productInfo); i++ {
+		productInfo[i].DeliveryAmount = productInfo[i].DeliveryAmount + outputMap[productInfo[i].ProductId]
+	}
+
+	result.OutsourcingInfo = outsourcingList
+	result.ProductInfo = productInfo
+	ctx.OkWithDetailed(result)
 }

--
Gitblit v1.8.0