Index: src/main/groovy/com/lemans/pricecalc/services/vendor/VendorService.groovy =================================================================== diff -u -rf0af1b4ca145bb49ca4f85806b7cb053456d5c18 -rdbfbb30f0326ce6f438b40c02399faf5d5e869a2 --- src/main/groovy/com/lemans/pricecalc/services/vendor/VendorService.groovy (.../VendorService.groovy) (revision f0af1b4ca145bb49ca4f85806b7cb053456d5c18) +++ src/main/groovy/com/lemans/pricecalc/services/vendor/VendorService.groovy (.../VendorService.groovy) (revision dbfbb30f0326ce6f438b40c02399faf5d5e869a2) @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service import javax.servlet.ServletResponse +import java.util.concurrent.CompletableFuture @Service @SuppressWarnings(['CyclomaticComplexity']) @@ -23,11 +24,7 @@ cv.vendorId, cv.vendorName, cv.vendorDueDate, - cv.revisionDeadlineDate, - cv.buyerGlobalId, - cv.buyerManagerGlobalId, - cv.managerName AS manager, - cv.buyerName AS buyer + cv.revisionDeadlineDate FROM CalcPro.[vwcatalogVendor] cv WITH(NOLOCK) ) @@ -94,11 +91,30 @@ Map findVendors(Map criteria) { criteria.sorting = criteria.sorting ?: 'vendorId+ASC' Map data = dqx(criteria).executeFrom(VENDOR_QUERY, clauses(criteria)) - augmentFirstSection(data.results, criteria) - vendorMetaData(data.results, criteria) + CompletableFuture augmentTask = CompletableFuture.runAsync ({ -> augmentFirstSection(data.results, criteria) }) + CompletableFuture vendorMetaDataTask = CompletableFuture.runAsync ({ -> vendorMetaData(data.results, criteria) }) + CompletableFuture buyerManagerTask = CompletableFuture.runAsync ({ -> buyerManager(data.results, criteria) }) + CompletableFuture.allOf(augmentTask, vendorMetaDataTask, buyerManagerTask).join() data } + private void buyerManager(List vendors, Map criteria) { + String query = """SELECT DISTINCT vp.buyerGlobalId, vp.buyerManagerGlobalId, vp.buyerName, vp.buyerManagerName, vp.vendorId FROM vwPart vp WITH(NOLOCK) WHERE vp.vendorId IN (${vendors.collect { "'${it.vendorId}'" }.join(',')})""" + Map buyerManagerData = sql().rows(query).groupBy { it.vendorId} + vendors.each { vendor -> + def vendorId = vendor.vendorId + List data = buyerManagerData.get(vendorId, []).collect { it -> + [ + buyerGlobalId: it.buyerGlobalId, + buyerManagerGlobalId: it.buyerManagerGlobalId, + buyer: it.buyerName, + manager: it.buyerManagerName + ] + } + vendor.buyerManager = data + } + } + Map findVendor(Map criteria) { CatalogVendor catalogVendor = catalogVendorRepository.findByIdAndDateDeletedIsNull(criteria.catalogVendorId) dqx([catalogVendorId: catalogVendor.id]).executeOneFrom('CalcPro.vwCatalogVendor', ['catalogVendorId = :catalogVendorId'])