xiaoyong931011
2021-09-22 d8c97392354a6b6d14efbdd4a73ee0148609bef8
Merge branch 'master' of http://120.27.238.55:7000/r/xc-mall

 Conflicts:
 pom.xml
 src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java
40 files added
10 files modified
1359 ■■■■■ changed files
pom.xml 29 ●●●●● patch | view | raw | blame | history
sql/xc_mall.sql 146 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java 2 ●●● 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/ApiMallGoodsController.java 17 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java 37 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java 52 ●●●●● 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/conversion/MallGoodsConversion.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsSkuConversion.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsStyleConversion.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/conversion/MallShoppingCartConversion.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddCartDto.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java 20 ●●●●● 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/entity/MallGoods.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallGoodsStyle.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java 33 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallShoppingCart.java 31 ●●●●● 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/mapper/MallGoodsImagesMapper.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallOrderItemMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java 18 ●●●●● 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/IApiMallGoodsService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallShoppingCartService.java 20 ●●●●● 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/service/impl/ApiMallGoodsServiceImpl.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java 64 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AddressInfoVo.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsSkuVo.java 37 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsStyleVo.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java 46 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ShoppingCartGoodsVo.java 27 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallAddressInfoMapper.xml 19 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallGoodsImagesMapper.xml 8 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallGoodsMapper.xml 51 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallGoodsSkuMapper.xml 9 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMoneyFlowMapper.xml 5 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallOrderInfoMapper.xml 5 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallOrderItemMapper.xml 5 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallShoppingCartMapper.xml 23 ●●●●● patch | view | raw | blame | history
pom.xml
@@ -23,6 +23,7 @@
        <tomcat.version>9.0.31</tomcat.version>
        <hutool.version>5.3.1</hutool.version>
        <aliyun-oss.version>3.8.0</aliyun-oss.version>
        <mapstruct.version>1.3.1.Final</mapstruct.version>
    </properties>
    <dependencies>
@@ -260,6 +261,12 @@
            <version>4.3.5</version>
        </dependency>
        <!-- submail邮件 end -->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${mapstruct.version}</version>
        </dependency>
    </dependencies>
    <build>
@@ -268,6 +275,28 @@
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
sql/xc_mall.sql
New file
@@ -0,0 +1,146 @@
DROP TABLE IF EXISTS mall_member;
CREATE TABLE mall_member(
    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 '主键' ,
    name VARCHAR(32)    COMMENT '名称' ,
    phone VARCHAR(32)    COMMENT '手机号' ,
    email VARCHAR(90)    COMMENT '邮箱' ,
    password VARCHAR(500)    COMMENT '密码' ,
    sex VARCHAR(2)    COMMENT '性别' ,
    invite_id VARCHAR(8)    COMMENT '邀请码' ,
    referrer_id VARCHAR(8)    COMMENT '推荐人邀请码' ,
    referrer_ids TEXT    COMMENT '推荐人线路' ,
    level VARCHAR(255)    COMMENT '代理层级' ,
    account_status INT    COMMENT '账户状态;1-正常 2-禁用' ,
    account_type INT    COMMENT '账户类型;1-正常用户' ,
    PRIMARY KEY (ID)
)  COMMENT = '商城用户表';
DROP TABLE IF EXISTS mall_goods_category;
CREATE TABLE mall_goods_category(
    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 '主键' ,
    name VARCHAR(32)    COMMENT '名称' ,
    parent_id BIGINT    COMMENT '父级ID' ,
    parent_ids VARCHAR(900)    COMMENT '父级ids' ,
    PRIMARY KEY (ID)
)  COMMENT = '商品分类';
DROP TABLE IF EXISTS mall_goods;
CREATE TABLE mall_goods(
    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 '主键' ,
    goods_no VARCHAR(32)    COMMENT '商品编号' ,
    goods_name VARCHAR(255)    COMMENT '商品名称' ,
    goods_introdution TEXT(255)    COMMENT '商品介绍' ,
    unit VARCHAR(10)    COMMENT '单位' ,
    thumb VARCHAR(500)    COMMENT '缩略图' ,
    goods_details TEXT    COMMENT '商品详情' ,
    is_sale INT    COMMENT '是否上架;1-上架 2-下架' ,
    original_price VARCHAR(90)    COMMENT '原价' ,
    present_price VARCHAR(90)    COMMENT '现价' ,
    category_id BIGINT    COMMENT '分类ID' ,
    PRIMARY KEY (ID)
)  COMMENT = '商品信息表';
DROP TABLE IF EXISTS mall_goods_images;
CREATE TABLE mall_goods_images(
    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 '主键' ,
    image_url VARCHAR(900)    COMMENT '主图链接' ,
    seq INT    COMMENT '排序' ,
    goods_id BIGINT    COMMENT '' ,
    PRIMARY KEY (ID)
)  COMMENT = '商品主图';
DROP TABLE IF EXISTS mall_goods_style;
CREATE TABLE mall_goods_style(
    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 '主键' ,
    goods_id BIGINT    COMMENT '商品ID' ,
    name VARCHAR(90)    COMMENT '样式名称' ,
    PRIMARY KEY (ID)
)  COMMENT = '商品样式';
DROP TABLE IF EXISTS mall_goods_sku;
CREATE TABLE mall_goods_sku(
    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 '主键' ,
    sku_name VARCHAR(90)    COMMENT 'sku名称' ,
    sku_image VARCHAR(900)    COMMENT 'sku图片' ,
    stock INT    COMMENT '库存' ,
    sku_volume INT    COMMENT '销售数量' ,
    original_price DECIMAL(20,2)    COMMENT '原价' ,
    present_price DECIMAL(20,2)    COMMENT '现价' ,
    style_id BIGINT    COMMENT '样式ID' ,
    goods_id BIGINT    COMMENT '商品ID' ,
    PRIMARY KEY (ID)
)  COMMENT = '商品sku';
alter table mall_member add avatar varchar(500) null comment '头像';
ALTER TABLE `mall_goods_category` ADD COLUMN `is_recommend`  int(11) NULL COMMENT '是否推荐 1:是 2:否' AFTER `parent_ids`;
alter table mall_goods add is_hot int default 2 null comment '是否热卖 1-是 2-否';
DROP TABLE IF EXISTS mall_shopping_cart;
CREATE TABLE mall_shopping_cart(
   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' ,
   goods_id BIGINT    COMMENT '商品ID' ,
   style_id BIGINT    COMMENT '样式ID' ,
   sku_id BIGINT    COMMENT 'skuId' ,
   cnt VARCHAR(255)    COMMENT '数量' ,
   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/common/interceptor/LoginInterceptor.java
@@ -87,7 +87,7 @@
    }
    private Boolean verifyTokenExpired(Long time) {
        boolean isDebug = false;
        boolean isDebug = true;
        if (!isDebug) {
            long currentTime = System.currentTimeMillis();
            return currentTime - time <= 30000;
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/ApiMallGoodsController.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.service.IApiMallGoodsService;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -11,10 +12,7 @@
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
@@ -29,7 +27,7 @@
public class ApiMallGoodsController {
    private final IApiMallGoodsService mallGoodsService;
    @ApiOperation(value = "findMallGoodsList", notes = "获取商城商品列表")
    @ApiOperation(value = "获取商城商品列表", notes = "获取商城商品列表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = MallGoodsListVo.class)
    })
@@ -38,4 +36,13 @@
        return new FebsResponse().success().data(mallGoodsService.findMallGoodsListInPage(queryDto));
    }
    @ApiOperation(value = "获取商品详情", notes = "获取商品详情")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = MallGoodsDetailsVo.class)
    })
    @GetMapping(value = "/findMallGoodsDetailsById/{id}")
    public FebsResponse findMallGoodsDetailsById(@PathVariable("id") Long id) {
        return new FebsResponse().success().data(mallGoodsService.findMallGoodsDetailsById(id));
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
New file
@@ -0,0 +1,37 @@
package cc.mrbird.febs.mall.controller;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.AddOrderDto;
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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 java.util.List;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/order")
@Api(value = "ApiMallOrderController", tags = "订单接口类")
public class ApiMallOrderController {
    private final IApiMallOrderInfoService mallOrderInfoService;
    @ApiOperation(value = "addOrder", notes = "提交订单")
    @PostMapping(value = "/addOrder")
    public FebsResponse addOrder(@RequestBody List<AddOrderDto> list) {
        return null;
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
New file
@@ -0,0 +1,52 @@
package cc.mrbird.febs.mall.controller;
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.*;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/cart")
@Api(value = "ApiMallShoppingCartController", tags = "商城购物车接口请求类")
public class ApiMallShoppingCartController {
    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());
    }
    @ApiOperation(value = "添加商品到购物车", notes = "添加商品到购物车")
    @PostMapping(value = "/addGoodsToCart")
    public FebsResponse addGoodsToCart(@RequestBody AddCartDto addCartDto) {
        mallShoppingCartService.addGoodsToCart(addCartDto);
        return new FebsResponse().success().data("添加成功");
    }
    @ApiOperation(value = "从购物车中删除商品", notes = "从购物车中删除商品")
    @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/conversion/MallGoodsConversion.java
New file
@@ -0,0 +1,21 @@
package cc.mrbird.febs.mall.conversion;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Mapper
public abstract class MallGoodsConversion {
    public static final MallGoodsConversion INSTANCE = Mappers.getMapper(MallGoodsConversion.class);
    public abstract MallGoodsDetailsVo entityToDetailsVo(MallGoods mallGoods);
    public abstract List<MallGoodsDetailsVo> entityListToDetailsVoList(List<MallGoods> mallGoods);
}
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsSkuConversion.java
New file
@@ -0,0 +1,21 @@
package cc.mrbird.febs.mall.conversion;
import cc.mrbird.febs.mall.entity.MallGoodsSku;
import cc.mrbird.febs.mall.vo.GoodsDetailsSkuVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Mapper
public abstract class MallGoodsSkuConversion {
    public static final MallGoodsSkuConversion INSTANCE = Mappers.getMapper(MallGoodsSkuConversion.class);
    public abstract GoodsDetailsSkuVo entityToVo(MallGoodsSku sku);
    public abstract List<GoodsDetailsSkuVo> entityListToSkuVoList(List<MallGoodsSku> skus);
}
src/main/java/cc/mrbird/febs/mall/conversion/MallGoodsStyleConversion.java
New file
@@ -0,0 +1,21 @@
package cc.mrbird.febs.mall.conversion;
import cc.mrbird.febs.mall.entity.MallGoodsStyle;
import cc.mrbird.febs.mall.vo.GoodsDetailsStyleVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Mapper
public abstract class MallGoodsStyleConversion {
    public static final MallGoodsStyleConversion INSTANCE = Mappers.getMapper(MallGoodsStyleConversion.class);
    public abstract GoodsDetailsStyleVo entityToStyleVo(MallGoodsStyle goodsStyle);
    public abstract List<GoodsDetailsStyleVo> entityListToStyleVoList(List<MallGoodsStyle> goodsStyleList);
}
src/main/java/cc/mrbird/febs/mall/conversion/MallShoppingCartConversion.java
New file
@@ -0,0 +1,21 @@
package cc.mrbird.febs.mall.conversion;
import cc.mrbird.febs.mall.entity.MallShoppingCart;
import cc.mrbird.febs.mall.vo.ShoppingCartGoodsVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Mapper
public abstract class MallShoppingCartConversion {
    public static final MallShoppingCartConversion INSTANCE = Mappers.getMapper(MallShoppingCartConversion.class);
    public abstract ShoppingCartGoodsVo entityToVo(MallShoppingCart cart);
    public abstract List<ShoppingCartGoodsVo> entityListToVoList(List<MallShoppingCart> carts);
}
src/main/java/cc/mrbird/febs/mall/dto/AddCartDto.java
New file
@@ -0,0 +1,24 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@ApiModel(value = "AddCartDto", description = "添加到购物车接收参数类")
public class AddCartDto {
    @NotNull(message = "参数不能为空")
    @ApiModelProperty(value = "skuId")
    private Long skuId;
    @NotNull(message = "参数不能为空")
    @ApiModelProperty(value = "数量")
    private Integer cnt;
}
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
New file
@@ -0,0 +1,20 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Data
@ApiModel(value = "AddOrderDto", description = "新增订单接口参数接收类")
public class AddOrderDto {
    @ApiModelProperty(value = "skuID", example = "1")
    private Long skuId;
    @ApiModelProperty(value = "数量", example = "2")
    private Integer cnt;
}
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/entity/MallGoods.java
@@ -1,8 +1,11 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.List;
/**
 * @author wzy
@@ -33,4 +36,10 @@
    private Long categoryId;
    private Integer isHot;
    @TableField(exist = false)
    private List<MallGoodsStyle> styles;
    @TableField(exist = false)
    private List<String> images;
}
src/main/java/cc/mrbird/febs/mall/entity/MallGoodsStyle.java
@@ -1,8 +1,11 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.List;
/**
 * @author wzy
@@ -15,4 +18,7 @@
    private Long goodsId;
    private String name;
    @TableField(exist = false)
    private List<MallGoodsSku> skus;
}
src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java
New file
@@ -0,0 +1,24 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Data
@TableName("mall_money_flow")
public class MallMoneyFlow extends BaseEntity {
    private Long memberId;
    private BigDecimal amount;
    private Integer type;
    private String orderNo;
}
src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
New file
@@ -0,0 +1,49 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Data
@TableName("mall_order_info")
public class MallOrderInfo extends BaseEntity {
    private String orderNo;
    private Long memberId;
    private Date orderTime;
    private Date payTime;
    private BigDecimal amount;
    private String payMethod;
    /**
     * 状态 1-待支付2-待发货3-待收货4-已完成5-退款中6-已退款7-已取消
     */
    private Integer status;
    /**
     * 取消类型 1-超时未支付2-主动取消
     */
    private Integer cancelType;
    private String name;
    private String phone;
    private String address;
    private String longitude;
    private String latitude;
}
src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
New file
@@ -0,0 +1,33 @@
package cc.mrbird.febs.mall.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Data
@TableName("mall_order_item")
public class MallOrderItem {
    private Long orderId;
    private Long skuId;
    private Long goodsId;
    private String goodsName;
    private String styleName;
    private String skuName;
    private Integer cnt;
    private BigDecimal price;
    private BigDecimal amount;
}
src/main/java/cc/mrbird/febs/mall/entity/MallShoppingCart.java
New file
@@ -0,0 +1,31 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@TableName("mall_shopping_cart")
public class MallShoppingCart extends BaseEntity {
    private Long memberId;
    private Long goodsId;
    private Long styleId;
    private Long skuId;
    private Integer cnt;
    @TableField(exist = false)
    private MallGoods goods;
    @TableField(exist = false)
    private MallGoodsSku sku;
}
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/mapper/MallGoodsImagesMapper.java
@@ -1,10 +1,15 @@
package cc.mrbird.febs.mall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
public interface MallGoodsImagesMapper extends BaseMapper<MallGoodsMapper> {
    List<String> selectGoodsImagesByGoodsId(@Param("goodsId") Long goodsId);
}
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java
@@ -9,12 +9,12 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface MallGoodsMapper extends BaseMapper<MallGoods> {
    IPage<MallGoodsListVo> selectMallGoodsListQueryInPage(@Param("record") MallGoodsQueryDto queryDto, Page<MallGoodsListVo> page);
    MallGoods selectGoodsDetailById(@Param("id") Long id);
    IPage<AdminMallGoodsVo> selectMallGoodsInPage(Page<AdminMallGoodsVo> page, @Param("record")MallGoods mallGoods);
    Integer selectMallGoodsCountByGoodsName(@Param("goodsName")String goodsName);
src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
New file
@@ -0,0 +1,7 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallMoneyFlow;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface MallMoneyFlowMapper extends BaseMapper<MallMoneyFlow> {
}
src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
New file
@@ -0,0 +1,11 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @author wzy
 * @date 2021-09-18
 **/
public interface MallOrderInfoMapper extends BaseMapper<MallOrderInfo> {
}
src/main/java/cc/mrbird/febs/mall/mapper/MallOrderItemMapper.java
New file
@@ -0,0 +1,7 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallOrderItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface MallOrderItemMapper extends BaseMapper<MallOrderItem> {
}
src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java
New file
@@ -0,0 +1,18 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallShoppingCart;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
public interface MallShoppingCartMapper extends BaseMapper<MallShoppingCart> {
    List<MallShoppingCart> selectCartGoodsList(@Param("memberId") Long memberId);
    MallShoppingCart selectCartGoodsBySkuId(@Param("skuId") Long skuId, @Param("memberId") Long memberId);
}
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/IApiMallGoodsService.java
@@ -2,11 +2,15 @@
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
public interface IApiMallGoodsService extends IService<MallGoods> {
    IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto);
    MallGoodsDetailsVo findMallGoodsDetailsById(@Param("id") Long id);
}
src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
New file
@@ -0,0 +1,7 @@
package cc.mrbird.febs.mall.service;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IApiMallOrderInfoService extends IService<MallOrderInfo> {
}
src/main/java/cc/mrbird/febs/mall/service/IApiMallShoppingCartService.java
New file
@@ -0,0 +1,20 @@
package cc.mrbird.febs.mall.service;
import cc.mrbird.febs.mall.dto.AddCartDto;
import cc.mrbird.febs.mall.entity.MallShoppingCart;
import cc.mrbird.febs.mall.vo.ShoppingCartGoodsVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
public interface IApiMallShoppingCartService extends IService<MallShoppingCart> {
    List<ShoppingCartGoodsVo> findCartGoodsList();
    void addGoodsToCart(AddCartDto addCartDto);
}
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/service/impl/ApiMallGoodsServiceImpl.java
@@ -1,9 +1,14 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.mall.conversion.MallGoodsConversion;
import cc.mrbird.febs.mall.conversion.MallMemberConversion;
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.mapper.MallGoodsImagesMapper;
import cc.mrbird.febs.mall.mapper.MallGoodsMapper;
import cc.mrbird.febs.mall.service.IApiMallGoodsService;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -23,9 +28,23 @@
@RequiredArgsConstructor
public class ApiMallGoodsServiceImpl extends ServiceImpl<MallGoodsMapper, MallGoods> implements IApiMallGoodsService {
    private final MallGoodsImagesMapper goodsImagesMapper;
    @Override
    public IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto) {
        Page<MallGoodsListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
        return this.baseMapper.selectMallGoodsListQueryInPage(queryDto, page);
    }
    @Override
    public MallGoodsDetailsVo findMallGoodsDetailsById(Long id) {
        MallGoods mallGoods = this.baseMapper.selectGoodsDetailById(id);
        if (mallGoods == null) {
            throw new FebsException("商品不存在");
        }
        List<String> images = goodsImagesMapper.selectGoodsImagesByGoodsId(mallGoods.getId());
        MallGoodsDetailsVo mallGoodsDetailsVo = MallGoodsConversion.INSTANCE.entityToDetailsVo(mallGoods);
        mallGoodsDetailsVo.setImages(images);
        return mallGoodsDetailsVo;
    }
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
New file
@@ -0,0 +1,19 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
 * @author wzy
 * @date 2021-09-18
 **/
@Slf4j
@Service
@RequiredArgsConstructor
public class ApiMallOrderInfoServiceImpl extends ServiceImpl<MallOrderInfoMapper, MallOrderInfo> implements IApiMallOrderInfoService {
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java
New file
@@ -0,0 +1,64 @@
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.MallShoppingCartConversion;
import cc.mrbird.febs.mall.dto.AddCartDto;
import cc.mrbird.febs.mall.entity.MallGoodsSku;
import cc.mrbird.febs.mall.entity.MallShoppingCart;
import cc.mrbird.febs.mall.mapper.MallGoodsSkuMapper;
import cc.mrbird.febs.mall.mapper.MallShoppingCartMapper;
import cc.mrbird.febs.mall.service.IApiMallShoppingCartService;
import cc.mrbird.febs.mall.vo.ShoppingCartGoodsVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Slf4j
@Service
@RequiredArgsConstructor
public class ApiMallShoppingCartServiceImpl extends ServiceImpl<MallShoppingCartMapper, MallShoppingCart> implements IApiMallShoppingCartService {
    private final MallGoodsSkuMapper mallGoodsSkuMapper;
    @Override
    public List<ShoppingCartGoodsVo> findCartGoodsList() {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        List<MallShoppingCart> carts = this.baseMapper.selectCartGoodsList(memberId);
        return MallShoppingCartConversion.INSTANCE.entityListToVoList(carts);
    }
    @Override
    public void addGoodsToCart(AddCartDto addCartDto) {
        MallGoodsSku sku = mallGoodsSkuMapper.selectById(addCartDto.getSkuId());
        if (sku == null) {
            throw new FebsException("sku不存在");
        }
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallShoppingCart cartGoods = this.baseMapper.selectCartGoodsBySkuId(sku.getId(), memberId);
        if (cartGoods == null) {
            cartGoods = new MallShoppingCart();
            cartGoods.setGoodsId(sku.getGoodsId());
            cartGoods.setSkuId(sku.getId());
            cartGoods.setStyleId(sku.getStyleId());
            cartGoods.setCnt(addCartDto.getCnt());
            cartGoods.setMemberId(memberId);
            this.baseMapper.insert(cartGoods);
        } else {
            cartGoods.setCnt(cartGoods.getCnt() + addCartDto.getCnt());
            this.baseMapper.updateById(cartGoods);
        }
    }
}
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/java/cc/mrbird/febs/mall/vo/GoodsDetailsSkuVo.java
New file
@@ -0,0 +1,37 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@ApiModel(value = "GoodsDetailsSkuVo", description = "商品详情sku返回参数类")
public class GoodsDetailsSkuVo {
    @ApiModelProperty(value = "id")
    private Long id;
    @ApiModelProperty(value = "sku名称")
    private String skuName;
    @ApiModelProperty(value = "sku图片")
    private String skuImage;
    @ApiModelProperty(value = "库存")
    private Integer stock;
    @ApiModelProperty(value = "销量")
    private Integer skuVolume;
    @ApiModelProperty(value = "原价")
    private BigDecimal originalPrice;
    @ApiModelProperty(value = "现价")
    private BigDecimal presentPrice;
}
src/main/java/cc/mrbird/febs/mall/vo/GoodsDetailsStyleVo.java
New file
@@ -0,0 +1,25 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@ApiModel(value = "GoodsDetailsStyleVo", description = "商品详情样式返回参数类")
public class GoodsDetailsStyleVo {
    @ApiModelProperty(value = "id")
    private String id;
    @ApiModelProperty(value = "样式名称")
    private String name;
    @ApiModelProperty(value = "sku")
    private List<GoodsDetailsSkuVo> skus;
}
src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java
New file
@@ -0,0 +1,46 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@ApiModel(value = "MallGoodsDetailsVo", description = "商品详情返回参数类")
public class MallGoodsDetailsVo {
    @ApiModelProperty(value = "id")
    private Long id;
    @ApiModelProperty(value = "商品编号")
    private String goodsNo;
    @ApiModelProperty(value = "商品名称")
    private String goodsName;
    @ApiModelProperty(value = "商品介绍")
    private String goodsIntrodution;
    @ApiModelProperty(value = "商品详情")
    private String goodsDetails;
    @ApiModelProperty(value = "原价")
    private String originalPrice;
    @ApiModelProperty(value = "现价")
    private String presentPrice;
    @ApiModelProperty(value = "是否上架 1-上架 2-下架")
    private Integer isSale;
    @ApiModelProperty(value = "轮播图")
    private List<String> images;
    @ApiModelProperty(value = "样式")
    private List<GoodsDetailsStyleVo> styles;
}
src/main/java/cc/mrbird/febs/mall/vo/ShoppingCartGoodsVo.java
New file
@@ -0,0 +1,27 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author wzy
 * @date 2021-09-17
 **/
@Data
@ApiModel(value = "ShoppingCartGoodsVo", description = "购物车返回参数类")
public class ShoppingCartGoodsVo {
    @ApiModelProperty(value = "id")
    private Long id;
    @ApiModelProperty(value = "数量")
    private Integer cnt;
    @ApiModelProperty(value = "商品详情 若该字段为null则提示商品已删除")
    private MallGoodsDetailsVo goods;
    @ApiModelProperty(value = "sku信息 若该字段为null则提示sku已删除")
    private GoodsDetailsSkuVo sku;
}
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>
src/main/resources/mapper/modules/MallGoodsImagesMapper.xml
New file
@@ -0,0 +1,8 @@
<?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.MallGoodsImagesMapper">
    <select id="selectGoodsImagesByGoodsId" resultType="java.lang.String">
        select image_url from mall_goods_images where goods_id=#{goodsId}
    </select>
</mapper>
src/main/resources/mapper/modules/MallGoodsMapper.xml
@@ -2,6 +2,57 @@
<!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.MallGoodsMapper">
    <resultMap id="MallGoodsMap" type="cc.mrbird.febs.mall.entity.MallGoods">
        <id property="id" column="id" />
        <result property="goodsNo" column="goods_no" />
        <result property="goodsName" column="goods_name" />
        <result property="goodsIntrodution" column="goods_introdution" />
        <result property="unit" column="unit" />
        <result property="thumb" column="thumb" />
        <result property="goodsDetails" column="goods_details" />
        <result property="isSale" column="is_sale" />
        <result property="originalPrice" column="original_price" />
        <result property="presentPrice" column="present_price" />
        <result property="categoryId" column="category_id" />
        <collection property="styles" ofType="cc.mrbird.febs.mall.entity.MallGoodsStyle">
            <id property="id" column="style_id" />
            <result property="name" column="style_name" />
            <result property="goodsId" column="style_goods_id" />
            <collection property="skus" ofType="cc.mrbird.febs.mall.entity.MallGoodsSku">
                <id property="id" column="sku_id" />
                <result property="skuName" column="sku_name" />
                <result property="skuImage" column="sku_image" />
                <result property="stock" column="stock" />
                <result property="skuVolume" column="sku_volume" />
                <result property="originalPrice" column="sku_original_price" />
                <result property="presentPrice" column="sku_present_price" />
                <result property="styleId" column="sku_style_id"/>
                <result property="goodsId" column="sku_goods_id" />
            </collection>
        </collection>
    </resultMap>
    <select id="selectGoodsDetailById" resultMap="MallGoodsMap">
        select
            a.*,
            b.id style_id,
            b.name style_name,
            b.goods_id style_goods_id,
            c.id sku_id,
            c.sku_name,
            c.sku_image,
            c.stock,
            c.sku_volume,
            c.original_price sku_original_price,
            c.present_price sku_present_price,
            c.style_id sku_style_id,
            c.goods_id sku_goods_id
        from mall_goods a
          inner join mall_goods_style b on a.id = b.goods_id
          inner join mall_goods_sku c on b.id=c.style_id
        where a.id=#{id}
    </select>
    <select id="selectMallGoodsListQueryInPage" resultType="cc.mrbird.febs.mall.vo.MallGoodsListVo">
        select
            a.id,
src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
New file
@@ -0,0 +1,9 @@
<?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.MallGoodsSkuMapper">
    <select id="selectSkuInfoById" resultType="cc.mrbird.febs.mall.entity.MallGoodsSku">
        select * from mall_goods_sku where id=#{id}
    </select>
</mapper>
src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
New file
@@ -0,0 +1,5 @@
<?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.MallMoneyFlowMapper">
</mapper>
src/main/resources/mapper/modules/MallOrderInfoMapper.xml
New file
@@ -0,0 +1,5 @@
<?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.MallOrderInfoMapper">
</mapper>
src/main/resources/mapper/modules/MallOrderItemMapper.xml
New file
@@ -0,0 +1,5 @@
<?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.MallOrderItemMapper">
</mapper>
src/main/resources/mapper/modules/MallShoppingCartMapper.xml
New file
@@ -0,0 +1,23 @@
<?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.MallShoppingCartMapper">
    <resultMap id="ShoppingCartMap" type="cc.mrbird.febs.mall.entity.MallShoppingCart">
        <id property="id" column="id" />
        <result property="goodsId" column="goods_id" />
        <result property="styleId" column="style_id" />
        <result property="skuId" column="sku_id" />
        <result property="cnt" column="cnt" />
        <association property="goods" select="cc.mrbird.febs.mall.mapper.MallGoodsMapper.selectGoodsDetailById" column="{id=goods_id}"></association>
        <association property="sku" select="cc.mrbird.febs.mall.mapper.MallGoodsSkuMapper.selectSkuInfoById" column="{id=sku_id}"></association>
    </resultMap>
    <select id="selectCartGoodsList" resultMap="ShoppingCartMap">
        select * from mall_shopping_cart where member_id=#{memberId}
    </select>
    <select id="selectCartGoodsBySkuId" resultType="cc.mrbird.febs.mall.entity.MallShoppingCart">
        select * from mall_shopping_cart
        where member_id=#{memberId} and sku_id=#{skuId}
    </select>
</mapper>