新增收货地址

持久层

1.新增 规划sql语句

insert into t_adress(字段列表)  values (值列表)   

2.一个用户的收货地址规定最多只能由20条数据对应,在插入用户数据之前先做查询操作。收货地址逻辑控制当面的一个异常(如果一个在添加收货地址的时候已经有20个收货地址了)

select count(*) from t_address where uid = #{uid}

3.创建一个新的接口 address 在这个接口中来定义sql语句抽象方法的定义

业务层

1.规划异常

1.如果这个用户是第一次插入用户的收回地址,规则:当用户插入的地址是第一条地址时,需要将当前的地址作为默认的收货地址,如果查询到统计总数为0则将当前的地址的is_default值设置为1.查询统计的结果为0不代表异常
查询的结果大于20了,这时候抛出业务控制的异常AddressCountLimitException 放到service包下,继承ServiceException

2.接口与抽象方法,在定义业务的抽象方法 IAddressService

创建一个实现类 AddressServiceImpl 去实现

3.

public void addNewAddress(Address address, Integer uid, String username)

@Override
  public void addNewAddress(Address address, Integer uid, String username) {
      Integer integer = addressMapper.countByUid(uid);
      if (integer >=  maxCount) {
          throw  new AddressCountLimitException("收货地址超过20条");

      }
      //uid  isDefault
      address.setUid(uid);
      Integer isDefault = integer == 0 ? 1:0;
      address.setIsDefault(isDefault);
      //补齐4个日志
      address.setCreatedUser(username);
      address.setCreatedTime(new Date());
      address.setModifiedUser(username);
      address.setModifiedTime(new Date());
      
      Integer insert = addressMapper.insert(address);
      if (insert != 1) {
          throw  new InsertException("新增收货地址失败");
      }
  }

4.测试类

 @Test
    void addNewAddress(){
        Address address = new Address();
        address.setName("女朋友2");
        address.setPhone("16638992452");
        address.setUid(6);
        address.setAddress("福建省福州市闽侯县上街镇");
        addressService.addNewAddress(address,6,"管理员");
    }

控制层

.异常处理 发生AddressCountLimitException异常,在BaseController添加上次异常,进行处理

else if (e instanceof AddressCountLimitException){
           result.setState(4001);
           result.setMessage("购物车地址超出限制的异常");
       }

2.请求设计

/addresses/add_new_address

/post

/Address address HttpSession session

/JsonResult

前端页面

获取省市区列表

持久层:

1.创建sql语句

 select * from t_dict_district where parent=? order by code asc

2.抽象方法的定义
DistrictMapper

 /**
     * 根据父代号查询区域信息
     * @param parent
     * @return
     */
    List<District> findByParent(String parent);

3.测试

@Test
   void testFindByParent(){
       List<District> byParent = districtMapper.findByParent("210100");
       log.info("查询的结果为:{}",byParent);
   }

2.业务层

1.准备工作

1.创建一个接口IDistrictService
2.实现类:DistrictServiceImpl

package com.cy.store.service;

import com.cy.store.pojo.District;

import java.util.List;

/**
 * 省份列表查询的抽象类  service层
 */
public interface IDistrictService {
    /**
     * 根据父代号来查询区域的信息(省市区)
     * @param parent
     * @return
     */
    List<District> getByParent(String parent);
}

package com.cy.store.service.impl;

import com.cy.store.mapper.DistrictMapper;
import com.cy.store.pojo.District;
import com.cy.store.service.IDistrictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @PROJECT_NAME: store
 * @DESCRIPTION:
 * @USER: 28416
 * @DATE: 2022/11/5 16:43
 */
@Service
public class DistrictServiceImpl   implements IDistrictService {

    @Autowired
    DistrictMapper districtMapper;
    @Override
    public List<District> getByParent(String parent) {
        List<District> byParent = districtMapper.findByParent(parent);
        //在进行网络数据传输时,为了尽量避免无效的数据的传输,可以将无效的数据设置为null,可以节省流量,另一方面提了效率
        for (District district : byParent) {
            district.setId(null);
            district.setParent(null);
        }
        return byParent;
    }
}

请求设计

/districts
/get
String parent
/JsonResult

2.请求处理

创建一个类DistrictController

 @RequestMapping({"/",""})
    public JsonResult<List<District>> getByParentId(String parent){
        List<District> data = departmentService.getByParent(parent);

        return new JsonResult<>(OK,data);

    }

网页端的书写:

1.注释到js代码相关的数据
2.检查前端页面在提交省市区数据时是否相关name属性和id属性。
3.运行前端看是否还可以正常的保存数据(除了省市区以外)

获取省市区的名称

持久层

1.规划sql语句根据当前code来获取当前省市区的名称,对应的就是一条查询语句

select * from t_dist_district where code = ?

2.在接口中定义出来 findNameByCode

2.业务层

1.定异常
2.接口和抽象方法

  /**
     * 查询省市区的名称
     * @param code
     * @return
     */
    @Override
    public String getNameByCode(String code) {
        return districtMapper.findNameByCode(code);
    }
}

3.测试可以省略(超过8行都要进行独立的测试)

控制层

1.异常解决(无异常)

2.请求规划 -业务层优化,
/districts/get_name
/get
/String code
/JsonResult
data

1.在添加地址层依赖于IDistrictService 层
2.在addNewAddress方法中将districtService接口中获取到完整的数据设置到address 则 会返回一个完整的address

   //优化代码  将address的数据进行补全   在AddressServiceImpl中进行修改

        String provinceName = districtService.getNameByCode(address.getProvinceCode());
        String cityName= districtService.getNameByCode(address.getCityCode());
        String areaName= districtService.getNameByCode(address.getAreaCode());
        address.setProvinceName(provinceName);
        address.setCityName(cityName);
        address.setAreaName(areaName);

获取省市区-前端页面的

1.addAddress.html页面中来编写对应的省市区展示以及根据用户的不同选择来展示不同的内容

2.编写相关事件代码
gitee连接:https://gitee.com/lmr0226/stores

原文地址:http://www.cnblogs.com/wiseleer/p/16862613.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性