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