From 0c3fc88c8ddd697e8297da2abe5cf99dd2b43ecb Mon Sep 17 00:00:00 2001 From: chenlin Date: Thu, 1 Aug 2024 16:11:40 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E9=87=87=E8=B4=AD=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=EF=BC=88=E6=8C=89=E5=95=86=E5=93=81=EF=BC=89=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=95=86=E5=93=81=E6=95=B0=E9=87=8F=E4=B8=8D=E5=87=86?= =?UTF-8?q?=E7=A1=AE=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/purchasemanage/purchase.go | 2 +- app/admin/models/purchase.go | 49 ++++++++++++++++++----- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/app/admin/apis/purchasemanage/purchase.go b/app/admin/apis/purchasemanage/purchase.go index 26c2d52..af450dd 100644 --- a/app/admin/apis/purchasemanage/purchase.go +++ b/app/admin/apis/purchasemanage/purchase.go @@ -814,7 +814,7 @@ func ErpPurchaseReportByCommodity(c *gin.Context) { app.Error(c, http.StatusInternalServerError, err, "查询失败:"+err.Error()) return } - fmt.Println(resp) + //fmt.Println(resp) app.OK(c, resp, "查询成功") return diff --git a/app/admin/models/purchase.go b/app/admin/models/purchase.go index d5a6192..aa0afdd 100644 --- a/app/admin/models/purchase.go +++ b/app/admin/models/purchase.go @@ -4122,8 +4122,9 @@ func getReportByCommodityFromCommon(req *ErpPurchaseReportByCommodityReq, c *gin return nil, err } - tempDataMap := make(map[uint32][]TempData) - + //var wg sync.WaitGroup + //ch := make(chan TempData, len(orders)*len(commodityAndOrderIdMap)) + // //// 补充所有采购订单的商品信息和采购执行数量 //for _, v := range orders { // commodityIds := findCommodityIDsByOrderID(v.ID, commodityAndOrderIdMap) @@ -4141,7 +4142,12 @@ func getReportByCommodityFromCommon(req *ErpPurchaseReportByCommodityReq, c *gin // tempDataMap[commodityId] = append(tempDataMap[commodityId], tempData) // } //} + //wg.Wait() + //close(ch) + // 并发查询的限制 + const maxConcurrency = 15 + sem := make(chan struct{}, maxConcurrency) var wg sync.WaitGroup ch := make(chan TempData, len(orders)*len(commodityAndOrderIdMap)) @@ -4150,13 +4156,30 @@ func getReportByCommodityFromCommon(req *ErpPurchaseReportByCommodityReq, c *gin commodityIds := findCommodityIDsByOrderID(v.ID, commodityAndOrderIdMap) for _, commodityID := range commodityIds { wg.Add(1) - go getPurchaseOrderAndCommodityDataAsync(v.ID, commodityID, ch, &wg) + sem <- struct{}{} + go func(orderID, commodityID uint32) { + defer wg.Done() + defer func() { <-sem }() + purchaseOrderData, commodityData, err := getPurchaseOrderAndCommodityData(orderID, commodityID) + if err != nil { + logger.Errorf("getPurchaseOrderAndCommodityData err:", err) + return + } + tempData := TempData{ + CommodityData: commodityData, + ErpCommodityPurchaseOrderData: purchaseOrderData, + } + ch <- tempData + }(v.ID, commodityID) } } - wg.Wait() - close(ch) + go func() { + wg.Wait() + close(ch) + }() + tempDataMap := make(map[uint32][]TempData) for data := range ch { tempDataMap[data.ErpCommodityId] = append(tempDataMap[data.ErpCommodityId], data) } @@ -4275,14 +4298,18 @@ func getReportByCommodityFromCommon(req *ErpPurchaseReportByCommodityReq, c *gin sortByCommodityIDDesc(dataList) resp.Total = len(dataList) - // 计算分页所需的切片索引 - startIndex := page * req.PageSize - endIndex := (page + 1) * req.PageSize - if endIndex > len(dataList) { - endIndex = len(dataList) + if req.IsExport == 1 { + resp.List = dataList + } else { + // 计算分页所需的切片索引 + startIndex := page * req.PageSize + endIndex := (page + 1) * req.PageSize + if endIndex > len(dataList) { + endIndex = len(dataList) + } + resp.List = dataList[startIndex:endIndex] } - resp.List = dataList[startIndex:endIndex] resp.PlanCount = totalData.PlanCount resp.PlanAmount = totalData.PlanAmount resp.Amount = totalData.Amount