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