确认订单、显示收货地址功能的实现
显示勾选的购物车信息
(一)显示勾选的购物车信息(持久层)
1.规划sql
用户在购物车列表页中通过随机勾选相关的商品,在点击"结算"按钮后跳转到"确认订单页",在这个页面中需要展示用户在上个页面所勾选的"购物车列表页"中对应的数据.且展示的内容还是来自于购物车表,所以"购物车列表页"需要将用户勾选的商品id传递给"确认订单页"
select
cid,
uid,
pid,
t_cart.price,
t_cart.num,
title,
t_product.price as realPrice,
image
from t_cart
left join t_product on t_cart.pid = t_product.id
where
cid in (?,?,?)
order by
t_cart.created_time desc
2.设计接口和抽象方法
List<CartVo> findByCid2(Integer[] cids);
<select id="findByCid2" resultType="com.cy.store.vo.CartVo">
select cid,uid,pid,t_cart.price,t_cart.num,t_product.image,
t_product.title,t_product.price as realPrice
from t_cart left join t_product on t_product.id=t_cart.pid
where cid in (
<foreach collection="array" item="cid" separator=",">
#{cid}
</foreach>
)
order by t_cart.created_time desc
</select>
(二)显示勾选的购物车信息(业务层)
1.规划异常
2.设计接口和抽象方法及实现
List<CartVo> getByCids(Integer uid,Integer[] cids);
@Override
public List<CartVo> getByCids(Integer uid, Integer[] cids) {
List<CartVo> result = cartMapper.findByCid2(cids);
if (result==null){
throw new CartNotFoundException("商品不存在");
}
Iterator<CartVo> iterator = result.iterator();
while (iterator.hasNext()){
CartVo cartVo = iterator.next();
Integer uid1 = cartVo.getUid();
if (!uid1.equals(uid)){
result.remove(cartVo);
throw new AccessDeniedException("数据访问异常");
}
}
return result;
}
(三)显示勾选的购物车信息(控制层)
1.处理异常
2.设计请求
3.处理请求
@GetMapping("/list")
public JsonResult<List<CartVo>> findVOByCids(Integer[] cids,HttpSession session){
List<CartVo> cartVoList = cartService.getByCids(getuidfromsession(session), cids);
return new JsonResult<>(ok,cartVoList);
}
(四)显示勾选的购物车信息(前端页面)
<!-- <script src="../js/orderConfirm.js" type="text/javascript" charset="utf-8"></script>-->
<script type="text/javascript">
$(document).ready(function() {
showCartList();
});
function showCartList() {
$("#cart-list").empty();
$.ajax({
url: "/carts/list",
type: "GET",
data: location.search.substr(1),
dataType: "JSON",
success: function(json) {
if (json.state == 200) {
var list = json.data;
console.log(location.search.substr(1));//调试用
//声明两个变量用于更新"确认订单"页的总件数和总价
var allCount = 0;
var allPrice = 0;
for (var i = 0; i < list.length; i++) {
var tr = '<tr>\n' +
'<td><img src="..#{image}collect.png" class="img-responsive" /></td>\n' +
'<td>#{title}</td>\n' +
'<td>¥<span>#{price}</span></td>\n' +
'<td>#{num}</td>\n' +
'<td><span>#{totalPrice}</span></td>\n' +
'</tr>';
tr = tr.replace("#{image}",list[i].image);
tr = tr.replace("#{title}",list[i].title);
tr = tr.replace("#{price}",list[i].realPrice);
tr = tr.replace("#{num}",list[i].num);
tr = tr.replace("#{totalPrice}",list[i].realPrice*list[i].num);
$("#cart-list").append(tr);
//更新"确认订单"页的总件数和总价
allCount += list[i].num;
allPrice += list[i].realPrice*list[i].num;
}
$("#all-count").html(allCount);
$("#all-price").html(allPrice);
}
},
error: function (xhr) {
alert("在确认订单页加载勾选的购物车数据时发生未知的异常"+xhr.status);
}
});
}
</script>
订单显示收货地址
$(document).ready(function() {
showCartList();
showAddressList();
});
function showAddressList() {
$("#address-list").empty();
$.ajax({
url: "/addresses",
type: "GET",
dataType: "JSON",
success: function(json) {
if (json.state == 200) {
var list = json.data;
for (var i = 0; i < list.length; i++) {
/*
value="#{aid}"在该模块没有用,但是扔写上,只要是从数据库查到到的数据,都要让前端页
面的该条数据和id绑定(因为可能干别的什么时需要用到,就比如说下一个"创建订单"模块
就需要根据前端传给后端的aid查询用户选中的是哪一个地址然后将其加入订单表)
* */
var opt = '<option value="#{aid}">#{name} #{tag} #{provinceName}#{cityName}#{areaName}#{address} #{tel}</option>';
opt = opt.replace("#{aid}",list[i].aid);
opt = opt.replace("#{name}",list[i].name);
opt = opt.replace("#{tag}",list[i].tag);
opt = opt.replace("#{provinceName}",list[i].provinceName);
opt = opt.replace("#{cityName}",list[i].cityName);
opt = opt.replace("#{areaName}",list[i].areaName);
opt = opt.replace("#{address}",list[i].address);
opt = opt.replace("#{tel}",list[i].tel);
$("#address-list").append(opt);
}
}
},
error: function (xhr) {
alert("在确认订单页加载用户地址时发生未知的异常"+xhr.status);
}
});
}
后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹