springboot项目之计算购物车

本文讨论了商城购物车的价格计算过程,包括商品金额、单位价、运费等费用的计算方法,并提及了后续的优化潜力。代码展示了如何通过AJAX获取数据并计算总价格,以及可能的四舍五入处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

商城购物车

商城购物车计算,感觉还有很多的优化空间,后期再做优化方案

代码实现 

public AjaxResult calCart(@RequestParam("bgroupId") String bgroupId,@RequestParam("cartIds") String cartIds){

        **********************略******************
        Long[] ids= Convert.toLongArray(cartIds);
        //List<CartTotalDto> cartList=new ArrayList<>();
        final BigDecimal stotal = BigDecimal.valueOf(0);
        List<CartTotalDto> cartList=Arrays.stream(ids).map(e->{
            CartTotalDto cartTotalDto=new CartTotalDto();
            DdBgroupCart cart=iDdBgroupCartService.selectDdBgroupCartByCartId(e);
            cartTotalDto.setCartId(cart.getCartId());
            cartTotalDto.setAmount(cart.getAmount());
            BigDecimal uniPrice=commService.getUnitPrice(cart.getWeighId());
            cartTotalDto.setUnitPrice(uniPrice);
            DdGoodWeigh ddGoodWeigh=iDdGoodWeighService.selectDdGoodWeighByGoodWeighTreeId(cart.getWeighId());
            //计算总价
            BigDecimal total=BigDecimal.valueOf(0);
            if(cart.getWeighUnit()==null){
                total=commService.getTotalPrice(cart.getAmount(),uniPrice,ddGoodWeigh.getUpWeigh(), BigDecimal.valueOf(1));
                total = total.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setProductPrice(total);
                //中转费
                BigDecimal zhongPrice=commService.getZhongPrice(cart.getAmount(),ddGoodWeigh.getZhongPrice(),ddGoodWeigh.getUpWeigh(), BigDecimal.valueOf(1));
                zhongPrice = zhongPrice.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setZhongPrice(zhongPrice);
                //配站费
                BigDecimal platPrice=commService.getPlatPrice(cart.getAmount(),ddGoodWeigh.getStationPrice(),ddGoodWeigh.getUpWeigh(), BigDecimal.valueOf(1));
                platPrice = platPrice.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setPlatePrice(platPrice);
                //配送费
                BigDecimal peiPrice=commService.getDeliverPrice(cart.getAmount(),ddGoodWeigh.getStationPrice(),ddGoodWeigh.getUpWeigh(),BigDecimal.valueOf(1),101l,bgroupAddr.getLat(),bgroupAddr.getLng());
                //计算总计
                peiPrice = peiPrice.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setDeliverPrice(peiPrice);
                BigDecimal sum=NumberUtil.add(total,zhongPrice).add(peiPrice).add(platPrice);//total.add(zhongPrice).add(platPrice).add(peiPrice);
                sum = sum.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setTotalPrice(sum);
                return cartTotalDto;
            }else {
                BigDecimal pate=commService.getWeighPate(cart.getWeighUnit());
                total=commService.getTotalPrice(cart.getAmount(),uniPrice,ddGoodWeigh.getUpWeigh(), pate);
                total = total.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setProductPrice(total);

                //中转费
                BigDecimal zhongPrice=commService.getZhongPrice(cart.getAmount(),ddGoodWeigh.getZhongPrice(),ddGoodWeigh.getUpWeigh(), pate);
                zhongPrice = zhongPrice.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setZhongPrice(zhongPrice);
                //配站费
                BigDecimal platPrice=commService.getPlatPrice(cart.getAmount(),ddGoodWeigh.getStationPrice(),ddGoodWeigh.getUpWeigh(), pate);
                platPrice = platPrice.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setPlatePrice(platPrice);

                //配送费
                BigDecimal peiPrice=commService.getDeliverPrice(cart.getAmount(),ddGoodWeigh.getStationPrice(),ddGoodWeigh.getUpWeigh(),pate,101l,bgroupAddr.getLat(),bgroupAddr.getLng());
                //计算总计
                peiPrice = peiPrice.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setDeliverPrice(peiPrice);
                //计算总计
                BigDecimal sum=NumberUtil.add(total,zhongPrice).add(peiPrice).add(platPrice);//total.add(zhongPrice).add(platPrice).add(peiPrice);
                sum = sum.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入
                cartTotalDto.setTotalPrice(sum);
                return cartTotalDto;
            }

        }).collect(Collectors.toList());
        
***********************************************************略
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值