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 | 254 +++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 225 insertions(+), 29 deletions(-) diff --git a/api/v1/product.go b/api/v1/product.go index 8782b69..c3aeedd 100644 --- a/api/v1/product.go +++ b/api/v1/product.go @@ -1,35 +1,41 @@ package v1 import ( - "aps_crm/conf" + "aps_crm/model" + "aps_crm/model/grpc_init" "aps_crm/model/request" "aps_crm/model/response" "aps_crm/pkg/contextx" "aps_crm/pkg/ecode" "aps_crm/pkg/logx" "aps_crm/proto/product" - "fmt" + "aps_crm/proto/product_inventory" "github.com/gin-gonic/gin" + "github.com/shopspring/decimal" "github.com/spf13/cast" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" + "strconv" ) type ProductApi struct{} -var ( - productServiceConn *grpc.ClientConn -) - -func InitProductServiceConn() { - fmt.Println(conf.Conf.GrpcServiceAddr.Aps) - var err error - productServiceConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Aps, grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - logx.Errorf("grpc dial product service error: %v", err.Error()) - return - } -} +//var ( +// productServiceConn *grpc.ClientConn +//) +// +//func InitProductServiceConn() { +// var err error +// productServiceConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Aps, grpc.WithTransportCredentials(insecure.NewCredentials())) +// if err != nil { +// logx.Errorf("grpc dial product service error: %v", err.Error()) +// return +// } +//} +// +//func CloseProductServiceConn() { +// if productServiceConn != nil { +// productServiceConn.Close() +// } +//} // List // @@ -51,8 +57,20 @@ return } - cli := product.NewProductServiceClient(productServiceConn) - + 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), PageSize: cast.ToInt32(params.PageSize), @@ -60,17 +78,32 @@ ProductName: params.ProductName, }) if err != nil { - logx.Errorf("GetProductList err: %v", err.Error()) + logx.Errorf("grpc GetProductList err: %v", err.Error()) ctx.FailWithMsg(ecode.UnknownErr, "鍐呴儴閿欒") return } if getProductListResponse.Code != 0 { - logx.Errorf("GetProductList err: %v", err.Error()) + logx.Errorf("grpc GetProductList err: %v", err.Error()) ctx.FailWithMsg(ecode.UnknownErr, "鍐呴儴閿欒") return } + rawProductList := getProductListResponse.List + productList := make([]model.Product, len(rawProductList)) + + for k, v := range rawProductList { + productList[k].Number = v.Number + productList[k].Name = v.Name + productList[k].Price = decimal.NewFromFloat(v.SalePrice).Round(2) + 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{ - Data: getProductListResponse.List, + Data: productList, Count: getProductListResponse.Total, }) } @@ -90,20 +123,183 @@ // 鑾峰彇浜у搧ID productId := c.Query("productNumber") - cli := product.NewProductServiceClient(productServiceConn) + cli := product.NewProductServiceClient(grpc_init.CrmApsGrpcServiceConn) - getProductInfoResponse, err := cli.GetProductInfo(ctx.GetCtx(), &product.GetProductInfoRequest{ProductId: productId}, nil) + getProductInfoResponse, err := cli.GetProductInfo(ctx.GetCtx(), &product.GetProductInfoRequest{ProductId: productId}) if err != nil { - logx.Errorf("GetProductInfo err: %v", err.Error()) + logx.Errorf(" grpc GetProductInfo err: %v", err.Error()) ctx.FailWithMsg(ecode.UnknownErr, "鍐呴儴閿欒") return } if getProductInfoResponse.Code != 0 { - logx.Errorf("GetProductInfo err: %v", err.Error()) + logx.Errorf("grpc GetProductInfo err: %v", err.Error()) ctx.FailWithMsg(ecode.UnknownErr, "鍐呴儴閿欒") return } - ctx.OkWithDetailed(contextx.Response{ - Data: getProductInfoResponse.Data, - }) + ctx.OkWithDetailed(getProductInfoResponse.Data) +} + +// GetProductOrderInfo +// +// @Tags 浜у搧 +// @Summary 鑾峰彇浜у搧璁㈠崟淇℃伅 +// @Produce application/json +// @Param number path string true "鏄庣粏缂栫爜" +// @Success 200 {object} contextx.Response{data=response.Info} "鎴愬姛" +// +// @Router /api/product/getProductOrderInfo/{number} [get] +func (ci *ProductApi) GetProductOrderInfo(c *gin.Context) { + ctx, ok := contextx.NewContext(c, nil) + if !ok { + return + } + number := c.Param("number") + if number == "" || number == "undefined" { + 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 { + logx.Errorf("grpc GetProductOrder err: %v", err.Error()) + 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 + wo.OrderId = orderInfo.OrderId + wo.ProductName = orderInfo.ProductName + wo.OrderStatus = orderInfo.OrderStatus + wo.WorkOrderId = orderInfo.WorkOrderId + 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) + } + 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