如何将后端的产品从愿望清单添加到购物车

问题描述 投票:0回答:1

我一直致力于开发 am API,它基本上将愿望清单中的所有产品添加/更新到用户的购物车。

API的要求如下:

  1. API 应输入愿望清单的 ID 并将其所有产品添加到购物车
  2. 如果购物车中已存在愿望清单中存储的产品,则购物车数量将更新为愿望清单中存在的数量和购物车中的数量之和。
  3. 添加产品后将保留愿望清单。

我实现的逻辑处理 2 个嵌套的 for 循环,一个循环愿望清单条目,另一个循环购物车条目(如果购物车不为空)。这种逻辑对于添加产品很有效,但我在更新产品时遇到了问题。

当我在空购物车上点击 API 时,我没有看到任何问题,所有产品都已完美添加,但是当我尝试再次点击 API 时,购物车中只有一项正在更新,而其他项保持不变,这种情况正在发生导致当愿望清单的索引递增以检查下一个产品时,之前更新的产品(已更新为两个数量的总和)现在被

addToCart()
方法覆盖。

就像愿望清单和购物车上有 2 个相同的产品,即两个 for 循环上的产品 A 和产品 B

会有四个条件

sl cart   wishlist   operation
1   A         A       update
2   A         B        add
3   B         A        add
4   B         B       update

对于情况 1,产品首先会更新,但在第二次迭代中会被 addToCart 方法覆盖。

我该如何解决这个问题?

也欢迎对其他类型的实现提出建议,但我无法更改大多数预先存在的方法,例如

AddToCart()
UpdateCart()

实施

public void addAllToCart(String wishListId) 
{
    //code for finding the wishlist by ID saves the wishlist on wishlist of type WishListModel
    //code for getting session cart saves on cart of type CartModel
    if (CollectionUtils.isNotEmpty(wishlist.getEntries())) 
    {
        for (WishListEntryModel wishListEntry : wishlist.getEntries()) 
        {
            checkInCartEntry(wishListEntry, cart.getEntries());
        }
    }
}

private void checkInCartEntry(WishListEntryModel wishListEntry, List<AbstractOrderEntryModel> cartEntries)
{
    if (CollectionUtils.isEmpty(cartEntries))
    {
        addToCart(wishListEntry);
    }
    else
    {
        for (AbstractOrderEntryModel cartEntry : cartEntries) 
        {
            if (wishListEntry.getProduct().getCode().equalsIgnoreCase(cartEntry.getProduct().getCode())) 
            {
                updateCartEntry(cartEntry.getEntryNumber, wishlist.getQuantity+cartEntry.getQuantity);
            } 
            else 
            {
                addToCart(wishListEntry);
            }
        }
    }
}
java algorithm for-loop e-commerce sap-commerce-cloud
1个回答
0
投票

您的循环中有一个错误,因此嵌套循环永远不会中断。假设您的愿望清单中有一种产品,购物车中有四种产品。在此设置中,addToCart(wishListEntry)方法将被调用四次。此外,如果有可能在愿望列表中多次出现相同的产品,则更改实现是有意义的,因此有两个单独的循环将填充像 这样的地图,然后迭代该地图,最后调用昂贵的 add/每个产品只需更新一次操作。

© www.soinside.com 2019 - 2024. All rights reserved.