From 4baf2e4b12ad7c95e86a129e3284441544468198 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Sat, 18 Sep 2021 14:50:21 +0800
Subject: [PATCH] add address info

---
 src/main/java/cc/mrbird/febs/mall/entity/MallAddressInfo.java                     |   48 ++++++
 src/main/java/cc/mrbird/febs/mall/vo/AddressInfoVo.java                           |   32 ++++
 src/main/resources/mapper/modules/MallAddressInfoMapper.xml                       |   19 ++
 src/main/java/cc/mrbird/febs/mall/mapper/MallAddressInfoMapper.java               |   14 ++
 src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java         |   19 ++
 src/main/java/cc/mrbird/febs/mall/dto/AddressInfoDto.java                         |   44 ++++++
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java    |   81 +++++++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java |   88 ++++++++++++
 sql/xc_mall.sql                                                                   |   18 ++
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java   |   18 +-
 src/main/java/cc/mrbird/febs/mall/conversion/MallAddressInfoConversion.java       |   25 +++
 11 files changed, 399 insertions(+), 7 deletions(-)

diff --git a/sql/xc_mall.sql b/sql/xc_mall.sql
index 3dec379..1b723cd 100644
--- a/sql/xc_mall.sql
+++ b/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 = '用户地址';
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
new file mode 100644
index 0000000..35b5dc0
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
@@ -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("设置成功");
+    }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
index 5b4d427..a2d4ae7 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
+++ b/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("删除成功");
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallAddressInfoConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallAddressInfoConversion.java
new file mode 100644
index 0000000..a9b7c83
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallAddressInfoConversion.java
@@ -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);
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddressInfoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddressInfoDto.java
new file mode 100644
index 0000000..4299ea3
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AddressInfoDto.java
@@ -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;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallAddressInfo.java b/src/main/java/cc/mrbird/febs/mall/entity/MallAddressInfo.java
new file mode 100644
index 0000000..d952e7a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallAddressInfo.java
@@ -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;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallAddressInfoMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallAddressInfoMapper.java
new file mode 100644
index 0000000..eb8e455
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallAddressInfoMapper.java
@@ -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);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java
new file mode 100644
index 0000000..64d27c3
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java
@@ -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);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java
new file mode 100644
index 0000000..1a42e2e
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java
@@ -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);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AddressInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AddressInfoVo.java
new file mode 100644
index 0000000..4983b1d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AddressInfoVo.java
@@ -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;
+}
diff --git a/src/main/resources/mapper/modules/MallAddressInfoMapper.xml b/src/main/resources/mapper/modules/MallAddressInfoMapper.xml
new file mode 100644
index 0000000..c464d62
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallAddressInfoMapper.xml
@@ -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>
\ No newline at end of file

--
Gitblit v1.9.1