第六天的内容

设置默认收货地址

首先进行mapper层的设计

首先需要分三步走

//查看用户想设置为默认地址的这条数据是否存在
    Address isMorenAddress(Integer aid);
    //在修改用户的收货默认地址之前先把所有地址设为非默认
    Integer IsNotDefault(Integer uid);
    //将用户选中的这条记录作为默认地址
    Integer IsDefault(@Param("aid") Integer aid, @Param("modifiedUser") String modifiedUser, @Param("modifiedTime") Date modifiedTime);
<select id="isMorenAddress" resultType="com.cy.store.entity.Address" resultMap="AddressEntityMap">
        select * from t_address where aid=#{aid}
    </select>
    <update id="IsNotDefault">
        update t_address set is_default=0 where uid=#{uid}
    </update>
    <update id="IsDefault">
        update t_address set is_default=1,
                             modified_user=#{modifiedUser},
                             modified_time=#{modifiedTime}
        where aid=#{aid}
    </update>

默认收获地址时需要永远把默认的收货地址设置为第一条,所以展示收货地址的sql语句需要改变

<select id="showAddress" resultType="com.cy.store.entity.Address" resultMap="AddressEntityMap">
        select * from t_address where uid=#{uid} order by is_default desc,created_time desc
</select>

接着设计service层

//设置默认地址
    void setDefaultAddress(Integer aid,
                      Integer uid,
                      String username);

需要设计异常   AccessDeniedException     AddressNotFoundException

@Override
    public void setDefaultAddress(Integer aid, Integer uid, String username) {
        Address address = addressMapper.isMorenAddress(aid);
        if (address == null){
            throw new AddressNotFoundException("收货地址不存在");
        }
        //获取当前收货地址的归属
        if (!address.getUid().equals(uid)){
            throw new AccessDeniedException("非法数据访问");
        }
        //先将所有的用户地址设置为非默认
        Integer rows = addressMapper.IsNotDefault(uid);
        if (rows < 1){
            throw new UpdateException("更新数据产生未知的异常");
        }
        rows = addressMapper.IsDefault(aid,username,new Date());
        if (rows != 1){
            throw new UpdateException("更新数据产生未知的异常");
        }
    }

接着设计controller层

RestFul是一种风格,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制

但是他也必须要使用@PathVariable注解,两者必须搭配使用,否则会报错。

//RestFul风格的请求编写
    @RequestMapping("{aid}/set_default")
    public JsonResult<List<Void>> showaddAddress(@PathVariable("aid") Integer aid,
                                                    HttpSession session){
        addressService.setDefaultAddress(aid,getUidFromSession(session),getUsernameFromSession(session));
        return new JsonResult<>(OK);
    }

前端页面的实现

function showAddressList(){
			$("#address-list").empty();
			$.ajax({
				url:"/address/showAddress",
				dataType:"json",
				type:"post",
				success:function (data){
					if (data.state==200){
						let list = data.data;
						/*let x=0;*/
							for (let i = 0; i < list.length;i++) {
								let tr = "<tr>\n" +
										"<td>"+list[i].tag+"</td>\n" +
										"<td>"+list[i].name+"</td>\n" +
										"<td>"+list[i].address+"</td>\n" +
										"<td>"+list[i].phone+"</td>\n" +
										"<td><a class=\"btn btn-xs btn-info\"><span class=\"fa fa-edit\"></span> 修改</a></td>\n" +
										"<td><a class=\"btn btn-xs add-del btn-info\"><span class=\"fa fa-trash-o\"></span> 删除</a></td>\n" +
										"<td><a onclick=\"setDefault(#{aid})\" class=\"btn btn-xs add-def btn-default\">设为默认</a></td>\n" +
										"</tr>";
								tr=tr.replace("#{aid}",list[i].aid);
								//alert(list[i].aid);
								$("#address-list").append(tr);
								/*if (list[i].is_default==1){
									x=i;
								}*/
							}
						//将第一行的设置默认隐藏,因为第一个就是默认
						$(".add-def:eq(0)").hide();
					}else{
						alert("新增失败");
					}
				},
				error:function (data){
					alert("产生未知错误"+data.status)
				}
			})
		}
		function setDefault(aid){
			$.ajax({
				url:"/address/"+aid+"/set_default",
				dataType:"json",
				type:"post",
				success:function (data){
					if (data.state==200){
						//$("#address-list").clear();
						showAddressList();
					}else{
						alert("设置默认收货地址失败");
					}
				},
				error:function (data){
					alert("设置默认收货地址产生未知错误"+data.status)
				}
			})
		}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值