移动商城第十八篇【结算】

248 阅读2分钟

tags: 移动商城项目


移动商城第十八篇【结算】

当我们点击结算的时候,我们要做什么事情呢??

  • 要结算了当然是需要登陆的,所以在结算之前判断该用户登陆了没有
  • 还需要再一次检查库存是否足够
  • 跳转到确认页面上。

结算

登陆了

  • 查看库存
    • 库存足够
      • 跳转到页面上
    • 库存不够
      • 提示用户

没登陆

  • 弹出登陆页面

通过AJAX获取用户的信息,如果没有获取得到,那么说明用户还没有登陆。于是就要弹出登陆窗口

如果获取得到用户的信息了,那么就对其进行库存校验 在对购物车的商品库存校验,我们并不一定要通过前台把数据传递给后台进行处理

  • 因为我们购物车的数据和Cookie里边存储的数据是一模一样的。因此,我们可以直接解析Cookie就可以对其进行库存校验了!

function trueBuy(){

	//弹出框来对其登陆
	$.ajax({
		url:"${path}/user/getUser.do",
		type:"post",
		dataType:"text",
		success:function(responseText){
			var userObj  = $.parseJSON(responseText);
			if(userObj.user != null){
				var result = validCar();
				if(result == "success"){
					window.location.href = "${path}/order/toSubmitOrder.do";
				}else{
					alert(result);
				}
			}else{
				tipShow("#loginAlert");
			}
		},
		error:function(){
			alert("系统错误");
		}
	})

}

登陆


function loginAjax() {
	var username = $("#username").val();
	var password = $("#password").val();
	var captcha = $("#captcha").val();
	$.ajax({
		url:"${path}/user/loginAjax.do",
		type:"post",
		dataType:"text",
		data:{
			username:username,
			password:password,
			captcha:captcha
		},
		success:function(responseText){
			if(responseText == "caperror"){
				$("#errorName").html("验证码错误");
				$("#errorName").show(500);
			}else if(responseText == "userpasserror"){
				$("#errorName").html("用户名或者密码错误");
				$("#errorName").show(500);
			}else if(responseText == "success"){
				$("#loginAlertIs").html(username);
				tipHide("#loginAlert");
				//校验库存
				var result = validCar();
				if(result == "success"){
					window.location.href = "${path}/order/toSubmitOrder.do";
				}else{
					alert(result);
				}
			}
		},
		error:function(){
			alert("系统错误");
		}
	})
}

验证购物车库存是否足够

我们并不需要外界传递id和数据进来,直接使用Cookie来对其判断就行了。因为我们的数据本来就是从Cookie来的。!



function validCar(){
	var result = "success";
	$.ajax({
		url:"${path}/cart/validCar.do",
		type:"post",
		dataType:"text",
		async:false,
		success:function(responseText){
			result = responseText;
		},
		error:function(){
			alert("系统错误");
		}
		
	})
	return result;
}


public String validateCar(HttpServletRequest request, HttpServletResponse response) {

        List<EbCart> cartList = null;


        StringBuilder builder = null;
        //json的配置对象
        JsonConfig jc = new JsonConfig();
        //设置要转换的类
        jc.setRootClass(EbCart.class);
        //设置不需要转换的属性
        jc.setExcludes(new String[]{"sku"});

        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie c : cookies) {
                String name = c.getName();

                //读取购物车的key,在配置文件中保存起来了。
                String cart_key = ResourcesUtils.readProp("cart_key");
                if (StringUtils.equalsIgnoreCase(name, cart_key)) {
                    //得到cookie里边的值【JSON格式的数组】
                    String value = c.getValue();

                    //将JSON数组转成是Java对象
                    JSONArray ja = JSONArray.fromObject(value);
                    cartList = (List<EbCart>) JSONSerializer.toJava(ja, jc);

                    //遍历购物车中的数据与库存做比较
                    for (EbCart cart : cartList) {

                        int cartQuantity = cart.getQuantity().intValue();

                        //根据购物车中商品的id获取详细信息
                        Long skuId = cart.getSkuId();
                        EbSku sku = skuService.selectByPrimaryKeyForDetail(skuId);

                        if (cartQuantity > sku.getStockInventory().intValue()) {

                            builder = new StringBuilder();

                            //这个商品的库存不足
                            String itemName = sku.getItem().getItemName();

                            builder.append(itemName);
                            List<EbSpecValue> specList = sku.getSpecList();
                            for (EbSpecValue ebSpecValue : specList) {
                                builder.append(ebSpecValue.getSpecValue());
                            }
                            builder.append("库存不足");
                            return builder.toString();
                        }
                    }
                }
            }
        }
        return "success";
    }

总结

  • 如果我们的数据是在后台传过去或者转换而成的,在前台上并没有做什么改变的话。那么我们可以直接使用后台的数据来对其进行操作。
    • 不要老想着全部操作都由前台传递参数来进行处理!

如果您觉得这篇文章帮助到了您,可以给作者一点鼓励