新增收获地址,默认地址

新增收货地址

1.表

2.entity

package com.cy.store.entity;

/** 收货地址数据的实体类 */
public class Address extends BaseEntity implements Serializable {
   private Integer aid;
   private Integer uid;
   private String name;
   private String provinceName;
   private String provinceCode;
   private String cityName;
   private String cityCode;
   private String areaName;
   private String areaCode;
   private String zip;
   private String address;
   private String phone;
   private String tel;
   private String tag;
   private Integer isDefault;

   // Generate: Getter and Setter、Generate hashCode() and equals()、toString()
}

 

3.持久层

3.1开发顺序

当前收货地址功能模块:先有增加收货地址,点击进行增加,增加完毕以后,返回页面,页面直接从数据库用list读取页面,读取完毕后再进行删改操作

3.2sql语句的规划

增加地址:

insert into t_address ()  value ()

每个地址不超过20,所以还有用一个count来计数

select count(*) from t_adress where uid = ?

这个是查询uid的个数有多少个的(可以在可视化界面中操作一下)

3.3接口和抽象方法
package com.cy.store.mapper;

import com.cy.store.entity.Address;

public interface AddressMapper {

   /**
    * 插入受到行数改变
    * @param address
    * @return
    */
   Integer insert(Address address);

   /**
    * 计数要用到uid
    * @param uid
    * @return
    */
   Integer countByUid(Integer uid);

}
3.4映射接口
    <resultMap id="AddressEntityMap" type="com.cy.store.entity.Address">
       <id column="aid" property="aid"/>
       <result column="province_code" property="provinceCode"/>
       <result column="province_name" property="provinceName"/>
       <result column="city_code" property="cityCode"/>
       <result column="city_name" property="cityName"/>
       <result column="area_code" property="areaCode"/>
       <result column="area_name" property="areaName"/>
       <result column="is_default" property="isDefault"/>
       <result column="created_user" property="createdUser"/>
       <result column="created_time" property="createdTime"/>
       <result column="modified_user" property="modifiedUser"/>
       <result column="modified_time" property="modifiedTime"/>
   </resultMap>
   <insert id="insert" useGeneratedKeys="true" keyProperty="aid">
       INSERT INTO t_address (
      uid, name, province_name, province_code, city_name, city_code, area_name, area_code, zip,
      address, phone, tel,tag, is_default, created_user, created_time, modified_user, modified_time
   ) VALUES (
       #{uid}, #{name}, #{provinceName}, #{provinceCode}, #{cityName}, #{cityCode}, #{areaName},
       #{areaCode}, #{zip}, #{address}, #{phone}, #{tel}, #{tag}, #{isDefault}, #{createdUser},
       #{createdTime}, #{modifiedUser}, #{modifiedTime}
   )
   </insert>

   <select id="countByUid" resultType="java.lang.Integer">
   SELECT
  COUNT(*)
   FROM
  t_address
   WHERE
  uid=#{uid}

4.业务层

4.1规划异常

1.AddressCountLimitException类来继承ServiceException

这个异常是用户有太多的地址了

2.在执行插入数据时,还可能抛出InsertException异常,此异常无需再次创建。

4.2接口抽象方法

 

package com.cy.store.service;

import com.cy.store.entity.Address;

public interface IAddressService {

   void AddNewAddress(Integer uid, String username, Address address);

}

uid是来标识谁创建的这个地址,因为uid还要进行计数处理,username是用来设计4个参数的

 

4.3实现类
package com.cy.store.service.Impl;

import com.cy.store.entity.Address;
import com.cy.store.mapper.AddressMapper;
import com.cy.store.service.IAddressService;
import com.cy.store.service.ex.AddressCountLimitException;
import com.cy.store.service.ex.InsertException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class AddNewAddressImpl implements IAddressService {

   @Autowired
   private AddressMapper addressMapper;

   //这个是在配置中有的
   //假如面试官问你,1.直接改2.设置一个参数在配置文件中让springboot读取就可以,3.在数据库中s
   @Value("${user.address.max-count}")
   private Integer countmax;

   @Override
   public void AddNewAddress(Integer uid, String username, Address address) {
       Integer integer = addressMapper.countByUid(uid);

       if(integer >= countmax)
      {
           throw new AddressCountLimitException("地址太多了");
      }
       address.setUid(uid);
       if(integer == 0)
       address.setIsDefault(1);
       else address.setIsDefault(0);

       Integer insert = addressMapper.insert(address);
       if(insert != 1) throw new InsertException("插入产生未知异常");

  }
}

 

5.控制层

5.1处理异常
else if (e instanceof AddressCountLimitException) {
           result.setState(5004);
           result.setMessage("用户地址超出上限异常");
      }
5.2设计请求

post

json<void>

address,session

5.3编写接口
@RequestMapping("address_new")
   public JsonResult<Void> addAddress(HttpSession session, Address address)
  {
       Integer uid = getUidFromSession(session);
       String username = getUsernameFromSession(session);
       iAddressService.AddNewAddress(uid,username,address);
       return new JsonResult<>(OK);
  }

还要自行测试一下

Address/address_new?name=tmo&phone=1651561

6.前端页面

<script type="text/javascript">
       $("#btn-add-new-address").click(function () {
           $.ajax({
               url:"/Address/address_new",
               type:"post",
               data:$("#form-add-new-address").serialize(),
               dataType:"json",
               success:function (json) {
                   if(json.state==200)
                  {
                       alert("新增收获地址成功");
                  }
                   else
                  {
                       alert("新增收获地址失败");
                  }
              },
               error:function (xhr) {
                   alert("新增收获地址产生未知异常"  +  xhr);
              }
          });
      })
   </script>

新增默认地址

1.持久层

1.1设计sql语句

 

1.2设计接口
    Address findByAid (Integer aid);

   /**
    * 根据用户的uid来修改收货地址改为非默认值
    * @param uid
    * @return
    */
   Integer UpdateNull(Integer uid);

   Integer UpdateDefaultByAid(Integer aid);

 

1.3编写mapper
<select id="findByAid" resultType="com.cy.store.entity.Address">
       select * from t_address where aid=#{aid}
   </select>

   <update id="UpdateNull">
       UPDATE t_address
       set is_default=0
       where uid=#{uid}
   </update>

   <update id="UpdateDefaultByAid">
       UPDATE t_address
       set is_default=1
       where aid = #{aid}
   </update>

 

2.业务层

2.1规划异常

AccessException,从aid中获得address,address中的uid和传入的uid不是一个uid就抛出权限异常

更新异常

AddresssNotFound用户找不到

2.2设计接口
void setDefault(Integer aid,Integer uid );
2.3编写类
@Override
   public void setDefault(Integer aid, Integer uid) {
       Address byAid = addressMapper.findByAid(aid);
       if(byAid == null)
      {
           throw new AddressNotFound("用户没有找到");
      }
       //判断你传过来的aid是不是等于uid的,可能非法访问
       //System.out.println();
       //System.out.println(byAid.getUid() +" " + uid);
       if(byAid.getUid() != uid)
      {
           throw new AccessException("没有访问权限");
      }

       Integer integer = addressMapper.UpdateNull(uid);
       if(integer < 1)
      {
           throw new updateException("更新数据产生未知异常");
      }

       Integer integer1 = addressMapper.UpdateDefaultByAid(aid);
       if (integer1 != 1)
      {
           throw new updateException("更新数据产生未知异常");
      }

 

3.控制层

3.1处理异常
3.2设计请求

/Address/{id}/set_default

@PathVarible("id")Int aid,HttpSession session

post

JsonResult<Void>

3.3方法定义
@RequestMapping("{id}/set_default")
   public JsonResult<Void> setDefault(HttpSession session,@PathVariable("id") Integer aid)
  {
       iAddressService.setDefault(aid,getUidFromSession(session));
       return new JsonResult<>(OK);
  }

4.前端页面

posted @   爽爽子的秃头生活  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示