Browse Source

用户收货地址

chao 3 years ago
parent
commit
1f1fd89d33

+ 132 - 0
src/main/java/com/caimei365/order/controller/AddressApi.java

@@ -0,0 +1,132 @@
+package com.caimei365.order.controller;
+
+import com.caimei365.order.model.ResponseJson;
+import com.caimei365.order.model.dto.AddressDto;
+import com.caimei365.order.model.dto.CartDto;
+import com.caimei365.order.model.vo.AddressSelectVo;
+import com.caimei365.order.model.vo.AddressVo;
+import com.caimei365.order.service.AddressService;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+/**
+ * 收货地址Api
+ *
+ * @author : Charles
+ * @date : 2021/7/2
+ */
+@Api(tags="收货地址API")
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/order/address")
+public class AddressApi {
+
+    private final AddressService addressService;
+
+    /**
+     * 收货地址列表
+     */
+    @ApiOperation("收货地址列表(旧:/personalCenter/findAddress)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = true, name = "userId", value = "用户Id"),
+            @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
+            @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
+    })
+    @GetMapping("/list")
+    public ResponseJson<PageInfo<AddressVo>> getUserAddressList(Integer userId,
+                                                                @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                                @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        if (null == userId) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return addressService.getUserAddressList(userId, pageNum, pageSize);
+    }
+
+    /**
+     * 收货地址下拉选项列表
+     */
+    @ApiOperation("收货地址下拉选项列表(旧:/club/province(city)(town))")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = false, name = "type", value = "选项类型:0省(默认),1市,2区"),
+            @ApiImplicitParam(required = false, name = "parentId", value = "父级地址Id")
+    })
+    @GetMapping("/select")
+    public ResponseJson<List<AddressSelectVo>> getSelectAddress(Integer type, Integer parentId) {
+        if (null == type) {
+            type = 0;
+        } else {
+            if (null == parentId) {
+                return ResponseJson.error("父级地址Id不能为空!", null);
+            }
+        }
+        return addressService.getSelectAddress(type, parentId);
+    }
+
+    /**
+     * 保存收货地址
+     *
+     * @param addressDto {
+     *                   userId       用户ID
+     *                   addressId    用户地址Id
+     *                   townId       区ID
+     *                   address      详细地址
+     *                   name         收货人
+     *                   mobile       手机
+     *                   defaultFlag  是否默认收货地址(0 不是默认,1 默认)
+     */
+    @ApiOperation("保存收货地址(旧:/personalCenter/saveAddress)")
+    @PostMapping("/save")
+    public ResponseJson<Integer> addUserAddress(AddressDto addressDto){
+        if (null == addressDto.getUserId()) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        if (null == addressDto.getTownId()) {
+            return ResponseJson.error("地区ID不能为空!", null);
+        }
+        if (StringUtils.isEmpty(addressDto.getAddress())) {
+            return ResponseJson.error("详细地址不能为空!", null);
+        }
+        if (StringUtils.isEmpty(addressDto.getName())) {
+            return ResponseJson.error("收货人不能为空!", null);
+        }
+        if (StringUtils.isEmpty(addressDto.getMobile())) {
+            return ResponseJson.error("手机号码不能为空!", null);
+        }
+        return addressService.addUserAddress(addressDto);
+    }
+
+    /**
+     * 删除收货地址
+     *
+     * @param addressDto {
+     *                   userId       用户ID
+     *                   addressId    用户地址Id
+     */
+    @ApiOperation("删除购物车(旧:/personalCenter/deleteAddress)")
+    @PostMapping("/cart/delete")
+    public ResponseJson<Integer> deleteUserAddress(AddressDto addressDto){
+        if (null == addressDto.getUserId()) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        if (null == addressDto.getTownId()) {
+            return ResponseJson.error("地区ID不能为空!", null);
+        }
+        return addressService.deleteUserAddress(addressDto);
+    }
+
+
+
+
+
+
+
+}

+ 0 - 1
src/main/java/com/caimei365/order/controller/CartClubApi.java

@@ -174,7 +174,6 @@ public class CartClubApi {
     @ApiImplicitParams({
             @ApiImplicitParam(required = false, name = "userId", value = "用户Id"),
             @ApiImplicitParam(required = false, name = "productIds", value = "商品ids,逗号隔开"),
-            @ApiImplicitParam(required = false, name = "totalPrice", value = "商品总金额"),
             @ApiImplicitParam(required = false, name = "townId", value = "地区Id")
     })
     @GetMapping("/postage")

+ 67 - 0
src/main/java/com/caimei365/order/mapper/AddressMapper.java

@@ -0,0 +1,67 @@
+package com.caimei365.order.mapper;
+
+import com.caimei365.order.model.po.AddressPo;
+import com.caimei365.order.model.vo.AddressSelectVo;
+import com.caimei365.order.model.vo.AddressVo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/2
+ */
+@Mapper
+public interface AddressMapper {
+    /**
+     * 收货地址列表
+     * @param userId 用户Id
+     */
+    List<AddressVo> getUserAddressList(Integer userId);
+    /**
+     * 获取所有省份列表
+     */
+    List<AddressSelectVo> getAllProvinceList();
+    /**
+     * 获取当前省份下的所有城市列表
+     * @param provinceId 省份Id
+     */
+    List<AddressSelectVo> getCityListByProvinceId(Integer provinceId);
+    /**
+     * 获取当前城市下的所有地区列表
+     * @param cityId
+     */
+    List<AddressSelectVo> getTownListByCityId(Integer cityId);
+    /**
+     * 地址Id获取收货地址
+     * @param addressId 地址Id
+     */
+    AddressPo getAddressById(Integer addressId);
+    /**
+     * 获取默认地址Id
+     * @param userId 用户Id
+     */
+    Integer getDefaultAddressId(Integer userId);
+    /**
+     * 修改地址默认状态
+     * @param addressId 地址Id
+     * @param defaultFlag 默认状态
+     */
+    void updateAddressDefault(Integer addressId, int defaultFlag);
+    /**
+     * 新增地址
+     */
+    void insertAddress(AddressPo address);
+    /**
+     * 更新地址
+     */
+    void updateAddress(AddressPo address);
+    /**
+     * 删除地址
+     * @param addressId 地址Id
+     * @param userId 用户Id
+     */
+    void deleteAddress(Integer addressId, Integer userId);
+}

+ 53 - 0
src/main/java/com/caimei365/order/model/dto/AddressDto.java

@@ -0,0 +1,53 @@
+package com.caimei365.order.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/2
+ */
+@Data
+public class AddressDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 用户地址Id
+     */
+    @ApiModelProperty("地址Id")
+    private Integer addressId;
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户Id")
+    private Integer userId;
+    /**
+     * 收货人
+     */
+    @ApiModelProperty("收货人")
+    private String name;
+    /**
+     * 区ID
+     */
+    @ApiModelProperty("区县Id")
+    private Integer townId;
+    /**
+     * 详细地址
+     */
+    @ApiModelProperty("详细地址")
+    private String address;
+    /**
+     * 手机
+     */
+    @ApiModelProperty("手机号码")
+    private String mobile;
+    /**
+     * 是否默认收货地址(0 不是默认,1 默认)
+     */
+    @ApiModelProperty("是否默认收货地址(0否,1是)")
+    private Integer defaultFlag;
+
+}

+ 44 - 0
src/main/java/com/caimei365/order/model/po/AddressPo.java

@@ -0,0 +1,44 @@
+package com.caimei365.order.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/2
+ */
+@Data
+public class AddressPo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 用户地址Id
+     */
+    private Integer addressId;
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+    /**
+     * 收货人
+     */
+    private String name;
+    /**
+     * 区ID
+     */
+    private Integer townId;
+    /**
+     * 详细地址
+     */
+    private String address;
+    /**
+     * 手机
+     */
+    private String mobile;
+    /**
+     * 是否默认收货地址(0 不是默认,1 默认)
+     */
+    private Integer defaultFlag;
+}

+ 28 - 0
src/main/java/com/caimei365/order/model/vo/AddressSelectVo.java

@@ -0,0 +1,28 @@
+package com.caimei365.order.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 选择地址下拉框列表 数据
+ *
+ * @author : Charles
+ * @date : 2021/7/2
+ */
+@Data
+public class AddressSelectVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 父级ID
+     */
+    private Integer parentId;
+}

+ 20 - 0
src/main/java/com/caimei365/order/model/vo/AddressVo.java

@@ -17,6 +17,14 @@ public class AddressVo implements Serializable {
      * 用户地址Id
      */
     private Integer addressId;
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+    /**
+     * 收货人
+     */
+    private String name;
     /**
      * 省ID
      */
@@ -41,5 +49,17 @@ public class AddressVo implements Serializable {
      * 村镇名
      */
     private String town;
+    /**
+     * 详细地址
+     */
+    private String address;
+    /**
+     * 手机
+     */
+    private String mobile;
+    /**
+     * 是否默认收货地址(0 不是默认,1 默认)
+     */
+    private String defaultFlag;
 
 }

+ 54 - 0
src/main/java/com/caimei365/order/service/AddressService.java

@@ -0,0 +1,54 @@
+package com.caimei365.order.service;
+
+import com.caimei365.order.model.ResponseJson;
+import com.caimei365.order.model.dto.AddressDto;
+import com.caimei365.order.model.vo.AddressSelectVo;
+import com.caimei365.order.model.vo.AddressVo;
+import com.github.pagehelper.PageInfo;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/2
+ */
+public interface AddressService {
+
+    /**
+     * 收货地址列表
+     * @param userId 用户Id
+     */
+    ResponseJson<PageInfo<AddressVo>> getUserAddressList(Integer userId, int pageNum, int pageSize);
+
+    /**
+     * 收货地址下拉选项列表
+     * @param type     选项类型:0省(默认),1市,2区
+     * @param parentId 父级地址Id
+     */
+    ResponseJson<List<AddressSelectVo>> getSelectAddress(Integer type, Integer parentId);
+
+    /**
+     * 添加收货地址
+     *
+     * @param addressDto {
+     *                   userId       用户ID
+     *                   addressId    用户地址Id
+     *                   townId       区ID
+     *                   address      详细地址
+     *                   name         收货人
+     *                   mobile       手机
+     *                   defaultFlag  是否默认收货地址(0 不是默认,1 默认)
+     */
+    ResponseJson<Integer> addUserAddress(AddressDto addressDto);
+
+    /**
+     * 删除收货地址
+     *
+     * @param addressDto {
+     *                   userId       用户ID
+     *                   addressId    用户地址Id
+     */
+    ResponseJson<Integer> deleteUserAddress(AddressDto addressDto);
+}

+ 136 - 0
src/main/java/com/caimei365/order/service/impl/AddressServiceImpl.java

@@ -0,0 +1,136 @@
+package com.caimei365.order.service.impl;
+
+import com.caimei365.order.mapper.AddressMapper;
+import com.caimei365.order.model.ResponseJson;
+import com.caimei365.order.model.dto.AddressDto;
+import com.caimei365.order.model.po.AddressPo;
+import com.caimei365.order.model.vo.AddressSelectVo;
+import com.caimei365.order.model.vo.AddressVo;
+import com.caimei365.order.service.AddressService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/2
+ */
+@Slf4j
+@Service
+public class AddressServiceImpl implements AddressService {
+    @Resource
+    private AddressMapper addressMapper;
+
+    /**
+     * 收货地址列表
+     *
+     * @param userId   用户Id
+     * @param pageNum
+     * @param pageSize
+     */
+    @Override
+    public ResponseJson<PageInfo<AddressVo>> getUserAddressList(Integer userId, int pageNum, int pageSize) {
+        // 分页请求数据
+        PageHelper.startPage(pageNum, pageSize);
+        // 收货地址列表
+        List<AddressVo> addressList = addressMapper.getUserAddressList(userId);
+        PageInfo<AddressVo> pageInfo = new PageInfo(addressList);
+        return ResponseJson.success(pageInfo);
+    }
+
+    /**
+     * 收货地址下拉选项列表
+     *
+     * @param type     选项类型:0省(默认),1市,2区
+     * @param parentId 父级地址Id
+     */
+    @Override
+    public ResponseJson<List<AddressSelectVo>> getSelectAddress(Integer type, Integer parentId) {
+        if (0 == type) {
+            // 获取所有省份列表
+            List<AddressSelectVo> provinceList = addressMapper.getAllProvinceList();
+            return ResponseJson.success(provinceList);
+        } else if (1 == type) {
+            // 获取当前省份下的所有城市列表
+            List<AddressSelectVo> cityList = addressMapper.getCityListByProvinceId(parentId);
+            return ResponseJson.success(cityList);
+        } else if (2 == type) {
+            // 获取当前城市下的所有地区列表
+            List<AddressSelectVo> townList = addressMapper.getTownListByCityId(parentId);
+            return ResponseJson.success(townList);
+        }
+        return ResponseJson.error("地址选项类型错误!", null);
+    }
+
+    /**
+     * 添加收货地址
+     *
+     * @param addressDto {
+     *                   userId       用户ID
+     *                   addressId    用户地址Id
+     *                   townId       区ID
+     *                   address      详细地址
+     *                   name         收货人
+     *                   mobile       手机
+     *                   defaultFlag  是否默认收货地址(0 不是默认,1 默认)
+     */
+    @Override
+    public ResponseJson<Integer> addUserAddress(AddressDto addressDto) {
+        AddressPo address = null;
+        if (null != addressDto.getAddressId()) {
+            // 获取地址信息
+            address = addressMapper.getAddressById(addressDto.getAddressId());
+        } else {
+            address = new AddressPo();
+        }
+        // 非默认地址
+        address.setDefaultFlag(0);
+        // 如果设置当前地址为默认地址
+        if (null != addressDto.getDefaultFlag() && 1 == addressDto.getDefaultFlag()) {
+            // 获取默认地址Id
+            Integer defaultId = addressMapper.getDefaultAddressId(addressDto.getUserId());
+            // 当前地址非默认地址
+            boolean flag = !(null != defaultId && null != address.getAddressId() && defaultId.equals(address.getAddressId()));
+            if (flag) {
+                // 设取消之前默认
+                addressMapper.updateAddressDefault(defaultId, 0);
+                // 设置当前地址默认
+                address.setDefaultFlag(1);
+            }
+        }
+        address.setAddressId(addressDto.getAddressId());
+        address.setUserId(addressDto.getUserId());
+        address.setTownId(addressDto.getTownId());
+        address.setAddress(addressDto.getAddress());
+        address.setName(addressDto.getName());
+        address.setMobile(addressDto.getMobile());
+        if (null == address.getAddressId()) {
+            // 新增地址
+            addressMapper.insertAddress(address);
+        } else {
+            // 更新地址
+            addressMapper.updateAddress(address);
+        }
+        return ResponseJson.success(1);
+    }
+
+    /**
+     * 删除收货地址
+     *
+     * @param addressDto {
+     *                   userId       用户ID
+     *                   addressId    用户地址Id
+     */
+    @Override
+    public ResponseJson<Integer> deleteUserAddress(AddressDto addressDto) {
+        // 删除地址
+        addressMapper.deleteAddress(addressDto.getAddressId(), addressDto.getUserId());
+        return ResponseJson.success(1);
+    }
+}

+ 75 - 0
src/main/resources/mapper/AddressMapper.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei365.order.mapper.AddressMapper">
+    <select id="getUserAddressList" resultType="com.caimei365.order.model.vo.AddressVo">
+        SELECT
+            a.addressID AS addressId,
+            a.userID AS userId,
+            a.shouHuoRen AS name,
+            a.townID AS townId,
+            a.address,
+            a.mobile,
+            a.defaultFlag,
+            t.name AS town,
+            c.name AS city,
+            c.cityID AS cityId,
+            p.name AS province,
+            p.provinceID AS provinceId
+        FROM address a
+        LEFT JOIN town t ON t.townID = a.townID
+        LEFT JOIN city c ON c.cityID = t.cityID
+        LEFT JOIN province p ON p.provinceID = c.provinceID
+        WHERE a.userID = #{userId}
+        ORDER BY a.defaultFlag DESC, a.addressID ASC
+    </select>
+    <select id="getAllProvinceList" resultType="com.caimei365.order.model.vo.AddressSelectVo">
+        SELECT provinceID AS id, name
+        FROM province WHERE validFlag = '1'
+    </select>
+    <select id="getCityListByProvinceId" resultType="com.caimei365.order.model.vo.AddressSelectVo">
+        SELECT provinceID AS parentId, cityID AS id, name
+        FROM city WHERE provinceID = #{provinceId} AND validFlag = '1'
+    </select>
+    <select id="getTownListByCityId" resultType="com.caimei365.order.model.vo.AddressSelectVo">
+        SELECT cityID AS parentId, townID AS id, name
+        FROM town WHERE cityID = #{cityId} AND validFlag = '1'
+    </select>
+    <select id="getAddressById" resultType="com.caimei365.order.model.po.AddressPo">
+        SELECT
+            a.addressID AS addressId,
+            a.userID AS userId,
+            a.shouHuoRen AS name,
+            a.townID AS townId,
+            a.address,
+            a.mobile,
+            a.defaultFlag
+        FROM address a
+        WHERE a.addressID = #{addressId}
+    </select>
+    <select id="getDefaultAddressId" resultType="java.lang.Integer">
+        SELECT addressID FROM address
+        WHERE userID = #{userId} AND defaultFlag = '1'
+        LIMIT 1
+    </select>
+    <update id="updateAddressDefault">
+        UPDATE address SET defaultFlag = #{defaultFlag}
+        WHERE addressID = #{addressId}
+    </update>
+    <update id="updateAddress" parameterType="com.caimei365.order.model.po.AddressPo">
+        UPDATE address SET
+            shouHuoRen =#{name},
+            townID = #{townId},
+            address = #{address},
+            mobile = #{mobile},
+            defaultFlag = #{defaultFlag}
+        WHERE addressID = #{addressId}
+    </update>
+    <insert id="insertAddress" keyColumn="addressID" keyProperty="addressId" parameterType="com.caimei365.order.model.po.AddressPo" useGeneratedKeys="true">
+        INSERT INTO address (userID, shouHuoRen, townID, address, mobile, defaultFlag)
+        VALUES (#{userId},#{name},#{townId},#{address},#{mobile},#{defaultFlag})
+    </insert>
+    <delete id="deleteAddress">
+        DELETE FROM address WHERE addressID = #{addressId} AND userID = #{userId}
+    </delete>
+
+</mapper>