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