Helius
2021-09-18 4baf2e4b12ad7c95e86a129e3284441544468198
add address info
9 files added
2 files modified
406 ■■■■■ changed files
sql/xc_mall.sql 18 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java 81 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/conversion/MallAddressInfoConversion.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddressInfoDto.java 44 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallAddressInfo.java 48 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallAddressInfoMapper.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java 88 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AddressInfoVo.java 32 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallAddressInfoMapper.xml 19 ●●●●● patch | view | raw | blame | history
sql/xc_mall.sql
@@ -126,3 +126,21 @@
   PRIMARY KEY (ID)
)  COMMENT = '购物车';
DROP TABLE IF EXISTS mall_address_info;
CREATE TABLE mall_address_info(
      REVISION INT    COMMENT '乐观锁' ,
      CREATED_BY VARCHAR(32)    COMMENT '创建人' ,
      CREATED_TIME DATETIME    COMMENT '创建时间' ,
      UPDATED_BY VARCHAR(32)    COMMENT '更新人' ,
      UPDATED_TIME DATETIME    COMMENT '更新时间' ,
      ID BIGINT NOT NULL AUTO_INCREMENT  COMMENT '主键' ,
      member_id BIGINT    COMMENT '用户ID' ,
      name VARCHAR(255)    COMMENT '姓名' ,
      phone VARCHAR(255)    COMMENT '联系方式' ,
      area TEXT    COMMENT '地区' ,
      address TEXT    COMMENT '地址' ,
      longitude VARCHAR(255)    COMMENT '经度' ,
      latitude VARCHAR(255)    COMMENT '纬度' ,
      is_default INT    COMMENT '是否默认;1-是2-否' ,
      PRIMARY KEY (ID)
)  COMMENT = '用户地址';
src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
New file
@@ -0,0 +1,81 @@
package cc.mrbird.febs.mall.controller;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.conversion.MallAddressInfoConversion;
import cc.mrbird.febs.mall.dto.AddressInfoDto;
import cc.mrbird.febs.mall.entity.MallAddressInfo;
import cc.mrbird.febs.mall.service.IApiMallAddressInfoService;
import cc.mrbird.febs.mall.vo.AddressInfoVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/address")
@Api(value = "ApiMallAddressInfoController", tags = "用户地址管理接口类")
public class ApiMallAddressInfoController {
    private final IApiMallAddressInfoService mallAddressInfoService;
    @ApiOperation(value = "获取地址列表", notes = "获取地址列表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = AddressInfoVo.class)
    })
    @GetMapping(value = "/findAddressList")
    public FebsResponse findAddressList() {
        return new FebsResponse().success().data(mallAddressInfoService.findAddressInfoList());
    }
    @ApiOperation(value = "获取地址信息", notes = "获取地址信息")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = AddressInfoVo.class)
    })
    @GetMapping(value = "/findAddressList/{id}")
    public FebsResponse findAddressInfoById(@PathVariable("id") Long id) {
        MallAddressInfo addressInfo = mallAddressInfoService.getById(id);
        return new FebsResponse().success().data(MallAddressInfoConversion.INSTANCE.entityToVo(addressInfo));
    }
    @ApiOperation(value = "添加地址", notes = "添加地址")
    @PostMapping(value = "/addAddress")
    public FebsResponse addAddress(@RequestBody AddressInfoDto addressInfoDto) {
        mallAddressInfoService.addAddress(addressInfoDto);
        return new FebsResponse().success().message("添加成功");
    }
    @ApiOperation(value = "修改地址", notes = "修改地址")
    @PostMapping(value = "/modifyAddress")
    public FebsResponse modifyAddress(@RequestBody AddressInfoDto addressInfoDto) {
        mallAddressInfoService.modifyAddress(addressInfoDto);
        return new FebsResponse().success().message("修改成功");
    }
    @ApiOperation(value = "删除地址", notes = "删除地址")
    @PostMapping(value = "/delAddress/{id}")
    public FebsResponse delAddress(@PathVariable("id") Long id) {
        mallAddressInfoService.removeById(id);
        return new FebsResponse().success().message("删除成功");
    }
    @ApiOperation(value = "设置地址为默认地址", notes = "设置地址为默认地址")
    @PostMapping(value = "/setAddressDefault/{id}")
    public FebsResponse setAddressDefault(@PathVariable("id") Long id) {
        mallAddressInfoService.setDefaultAddress(id);
        return new FebsResponse().success().message("设置成功");
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
@@ -3,15 +3,15 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.AddCartDto;
import cc.mrbird.febs.mall.service.IApiMallShoppingCartService;
import cc.mrbird.febs.mall.vo.ShoppingCartGoodsVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
 * @author wzy
@@ -28,6 +28,9 @@
    private final IApiMallShoppingCartService mallShoppingCartService;
    @ApiOperation(value = "获取购物车商品列表", notes = "获取购物车商品列表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ShoppingCartGoodsVo.class)
    })
    @PostMapping(value = "/findCartGoodsList")
    public FebsResponse findCartGoodsList() {
        return new FebsResponse().success().data(mallShoppingCartService.findCartGoodsList());
@@ -41,8 +44,9 @@
    }
    @ApiOperation(value = "从购物车中删除商品", notes = "从购物车中删除商品")
    @PostMapping(value = "/delGoods")
    public FebsResponse delGoods() {
        return null;
    @PostMapping(value = "/delGoods/{id}")
    public FebsResponse delGoods(@PathVariable("id") Long id) {
        mallShoppingCartService.removeById(id);
        return new FebsResponse().success().data("删除成功");
    }
}
src/main/java/cc/mrbird/febs/mall/conversion/MallAddressInfoConversion.java
New file
@@ -0,0 +1,25 @@
package cc.mrbird.febs.mall.conversion;
import cc.mrbird.febs.mall.dto.AddressInfoDto;
import cc.mrbird.febs.mall.entity.MallAddressInfo;
import cc.mrbird.febs.mall.vo.AddressInfoVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Mapper
public abstract class MallAddressInfoConversion {
    public static final MallAddressInfoConversion INSTANCE = Mappers.getMapper(MallAddressInfoConversion.class);
    public abstract AddressInfoVo entityToVo(MallAddressInfo addressInfo);
    public abstract List<AddressInfoVo> entityListToVos(List<MallAddressInfo> addressInfoList);
    public abstract MallAddressInfo dtoToEntity(AddressInfoDto addressInfoDto);
}
src/main/java/cc/mrbird/febs/mall/dto/AddressInfoDto.java
New file
@@ -0,0 +1,44 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Data
@ApiModel(value = "AddressInfoDto", description = "地址接收参数类")
public class AddressInfoDto {
    @ApiModelProperty(value = "id", example = "编辑的时候传")
    private Long id;
    @NotBlank(message = "参数不能为空")
    @ApiModelProperty(value = "姓名", example = "王")
    private String name;
    @NotBlank(message = "参数不能为空")
    @ApiModelProperty(value = "手机号", example = "15773001234")
    private String phone;
    @NotBlank(message = "参数不能为空")
    @ApiModelProperty(value = "地区", example = "北京市朝阳区")
    private String area;
    @NotBlank(message = "参数不能为空")
    @ApiModelProperty(value = "地址", example = "朝阳街道110栋119号")
    private String address;
    @ApiModelProperty(value = "经度", example = "112.12345678")
    private String longitude;
    @ApiModelProperty(value = "纬度", example = "87.12345678")
    private String latitude;
    @ApiModelProperty(value = "是否默认", example = "1是2否")
    private Integer isDefault;
}
src/main/java/cc/mrbird/febs/mall/entity/MallAddressInfo.java
New file
@@ -0,0 +1,48 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Data
@TableName("mall_address_info")
public class MallAddressInfo extends BaseEntity {
    private String name;
    private String phone;
    private Long memberId;
    /**
     * 地区 省市区
     */
    private String area;
    /**
     * 具体地址
     */
    private String address;
    /**
     * 经度
     */
    private String longitude;
    /**
     * 纬度
     */
    private String latitude;
    /**
     * 是否默认地址 1-是 2-否
     */
    private Integer isDefault;
    public static final Integer IS_DEFAULT_Y = 1;
    public static final Integer IS_DEFAULT_N = 2;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallAddressInfoMapper.java
New file
@@ -0,0 +1,14 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallAddressInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface MallAddressInfoMapper extends BaseMapper<MallAddressInfo> {
    List<MallAddressInfo> selectAddressInfoListByMemberId(@Param("memberId") Long memberId);
    int updateIsDefault(@Param("isDefault") Integer isDefault, @Param("memberId") Long memberId, @Param("id") Long id);
}
src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java
New file
@@ -0,0 +1,19 @@
package cc.mrbird.febs.mall.service;
import cc.mrbird.febs.mall.dto.AddressInfoDto;
import cc.mrbird.febs.mall.entity.MallAddressInfo;
import cc.mrbird.febs.mall.vo.AddressInfoVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface IApiMallAddressInfoService extends IService<MallAddressInfo> {
    List<AddressInfoVo> findAddressInfoList();
    void addAddress(AddressInfoDto addressInfoDto);
    void modifyAddress(AddressInfoDto addressInfoDto);
    void setDefaultAddress(Long id);
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java
New file
@@ -0,0 +1,88 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.conversion.MallAddressInfoConversion;
import cc.mrbird.febs.mall.dto.AddressInfoDto;
import cc.mrbird.febs.mall.entity.MallAddressInfo;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.mapper.MallAddressInfoMapper;
import cc.mrbird.febs.mall.service.IApiMallAddressInfoService;
import cc.mrbird.febs.mall.vo.AddressInfoVo;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Slf4j
@Service
@RequiredArgsConstructor
public class ApiMallAddressInfoServiceImpl extends ServiceImpl<MallAddressInfoMapper, MallAddressInfo> implements IApiMallAddressInfoService {
    @Override
    public List<AddressInfoVo> findAddressInfoList() {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        List<MallAddressInfo> addressInfos = this.baseMapper.selectAddressInfoListByMemberId(memberId);
        return MallAddressInfoConversion.INSTANCE.entityListToVos(addressInfos);
    }
    @Override
    public void addAddress(AddressInfoDto addressInfoDto) {
        MallAddressInfo addressInfo = MallAddressInfoConversion.INSTANCE.dtoToEntity(addressInfoDto);
        MallMember member = LoginUserUtil.getLoginUser();
        Long memberId = member.getId();
        List<MallAddressInfo> existAddress = this.baseMapper.selectList(null);
        if (CollUtil.isEmpty(existAddress)) {
            addressInfo.setIsDefault(MallAddressInfo.IS_DEFAULT_Y);
        } else {
            if (MallAddressInfo.IS_DEFAULT_Y.equals(addressInfoDto.getIsDefault())) {
                this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, memberId, null);
            }
        }
        addressInfo.setMemberId(memberId);
        addressInfo.setCreatedBy(member.getPhone());
        addressInfo.setUpdatedBy(member.getPhone());
        this.baseMapper.insert(addressInfo);
    }
    @Override
    public void modifyAddress(AddressInfoDto addressInfoDto) {
        MallAddressInfo existAddress = this.baseMapper.selectById(addressInfoDto.getId());
        if (existAddress == null) {
            throw new FebsException("地址不存在");
        }
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallAddressInfo addressInfo = MallAddressInfoConversion.INSTANCE.dtoToEntity(addressInfoDto);
        if (MallAddressInfo.IS_DEFAULT_Y.equals(addressInfoDto.getIsDefault())) {
            this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, memberId, null);
        }
        addressInfo.setUpdatedTime(new Date());
        this.baseMapper.updateById(addressInfo);
    }
    @Override
    public void setDefaultAddress(Long id) {
        MallAddressInfo addressInfo = this.baseMapper.selectById(id);
        if (addressInfo == null) {
            throw new FebsException("地址不存在");
        }
        MallMember member = LoginUserUtil.getLoginUser();
        this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, member.getId(), null);
        this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_Y, member.getId(), id);
    }
}
src/main/java/cc/mrbird/febs/mall/vo/AddressInfoVo.java
New file
@@ -0,0 +1,32 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Data
@ApiModel(value = "AddressInfoVo", description = "地址信息返回参数类")
public class AddressInfoVo {
    @ApiModelProperty(value = "id")
    private String id;
    @ApiModelProperty(value = "姓名")
    private String name;
    @ApiModelProperty(value = "手机号")
    private String phone;
    @ApiModelProperty(value = "地区")
    private String area;
    @ApiModelProperty(value = "地址")
    private String address;
    @ApiModelProperty(value = "是否默认地址 1-是 2-否")
    private Integer isDefault;
}
src/main/resources/mapper/modules/MallAddressInfoMapper.xml
New file
@@ -0,0 +1,19 @@
<?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="cc.mrbird.febs.mall.mapper.MallAddressInfoMapper">
    <select id="selectAddressInfoListByMemberId" resultType="cc.mrbird.febs.mall.entity.MallAddressInfo">
        select * from mall_address_info
        where member_id=#{memberId}
        order by is_default asc, created_time desc
    </select>
    <update id="updateIsDefault">
        update mall_address_info
        set is_default=#{isDefault}
        where member_id=#{memberId}
        <if test="id != null">
            and id=#{id}
        </if>
    </update>
</mapper>