Hentua
2023-08-22 b7a424cffb2c0384767242e4074a7d902c638488
添加收藏和浏览记录逻辑
19 files added
557 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java 46 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java 59 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddCollectionDto.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddFootprintDto.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/MemberCollectionListDto.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/MemberFootprintListDto.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallMemberCollection.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallMemberFootprint.java 29 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberCollectionMapper.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberFootprintMapper.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IMallMemberCollectionService.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IMallMemberFootprintService.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberCollectionServiceImpl.java 68 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberFootprintServiceImpl.java 84 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AddCollectionVo.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/CollectionListVo.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/FootprintListVo.java 34 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMemberCollectionMapper.xml 24 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMemberFootprintMapper.xml 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java
New file
@@ -0,0 +1,46 @@
package cc.mrbird.febs.mall.controller;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.AddCollectionDto;
import cc.mrbird.febs.mall.dto.MemberCollectionListDto;
import cc.mrbird.febs.mall.service.IMallMemberCollectionService;
import cc.mrbird.febs.mall.vo.AddCollectionVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/collection")
@Api(value = "ApiMemberCollectionController", tags = "收藏接口类")
public class ApiMemberCollectionController {
    @Autowired
    private IMallMemberCollectionService mallMemberCollectionService;
    @ApiOperation(value = "添加收藏")
    @PostMapping(value = "/add")
    public FebsResponse add(@RequestBody AddCollectionDto addCollectionDto) {
        mallMemberCollectionService.add(addCollectionDto);
        return new FebsResponse().success().message("收藏成功");
    }
    @ApiOperation(value = "获取收藏列表")
    @PostMapping(value = "/findMemberCollectionList")
    public FebsResponse findMemberCollectionList(@RequestBody MemberCollectionListDto memberCollectionListDto) {
        return new FebsResponse().success().data(mallMemberCollectionService.findMemberCollectionList(memberCollectionListDto));
    }
    @ApiOperation(value = "取消收藏")
    @PostMapping(value = "/del/{ids}")
    public FebsResponse del(@PathVariable("ids") String ids) {
        mallMemberCollectionService.del(ids);
        return new FebsResponse().success().message("取消成功");
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java
New file
@@ -0,0 +1,59 @@
package cc.mrbird.febs.mall.controller;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.dto.AddCollectionDto;
import cc.mrbird.febs.mall.dto.AddFootprintDto;
import cc.mrbird.febs.mall.dto.MemberCollectionListDto;
import cc.mrbird.febs.mall.dto.MemberFootprintListDto;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.service.IMallMemberCollectionService;
import cc.mrbird.febs.mall.service.IMallMemberFootprintService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/footprint")
@Api(value = "ApiMemberFootprintController", tags = "足迹接口类")
public class ApiMemberFootprintController {
    @Autowired
    private IMallMemberFootprintService mallMemberFootprintService;
    @ApiOperation(value = "添加浏览记录")
    @PostMapping(value = "/add")
    public FebsResponse add(@RequestBody AddFootprintDto addFootprintDto) {
        MallMember loginUser = LoginUserUtil.getLoginUser();
        mallMemberFootprintService.add(addFootprintDto.getGoodsId(), loginUser.getId());
        return new FebsResponse().success().message("添加成功");
    }
    @ApiOperation(value = "浏览记录列表")
    @PostMapping(value = "/findMemberFootprintList")
    public FebsResponse findMemberFootprintList(@RequestBody MemberFootprintListDto memberFootprintListDto) {
        return new FebsResponse().success().data(mallMemberFootprintService.findMemberCollectionList(memberFootprintListDto));
    }
    @ApiOperation(value = "删除浏览记录")
    @PostMapping(value = "/del/{ids}")
    public FebsResponse del(@PathVariable("ids") String ids) {
        mallMemberFootprintService.del(ids);
        return new FebsResponse().success().message("取消成功");
    }
    @ApiOperation(value = "清空浏览记录")
    @PostMapping(value = "/empty")
    public FebsResponse empty() {
        mallMemberFootprintService.empty();
        return new FebsResponse().success().message("清空成功");
    }
}
src/main/java/cc/mrbird/febs/mall/dto/AddCollectionDto.java
New file
@@ -0,0 +1,14 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "AddCollectionDto", description = "添加收藏接受参数类")
public class AddCollectionDto {
    @ApiModelProperty(value = "商品ID")
    private Long goodsId;
}
src/main/java/cc/mrbird/febs/mall/dto/AddFootprintDto.java
New file
@@ -0,0 +1,14 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "AddFootprintDto", description = "添加浏览器记录接受参数类")
public class AddFootprintDto {
    @ApiModelProperty(value = "商品ID")
    private Long goodsId;
}
src/main/java/cc/mrbird/febs/mall/dto/MemberCollectionListDto.java
New file
@@ -0,0 +1,17 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "MemberCollectionListDto", description = "收藏列表接受参数类")
public class MemberCollectionListDto {
    @ApiModelProperty(value = "页码", example = "1")
    private Integer pageNow;
    @ApiModelProperty(value = "每页数量", example = "10")
    private Integer pageSize;
}
src/main/java/cc/mrbird/febs/mall/dto/MemberFootprintListDto.java
New file
@@ -0,0 +1,17 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "MemberFootprintListDto", description = "浏览记录列表接受参数类")
public class MemberFootprintListDto {
    @ApiModelProperty(value = "页码", example = "1")
    private Integer pageNow;
    @ApiModelProperty(value = "每页数量", example = "10")
    private Integer pageSize;
}
src/main/java/cc/mrbird/febs/mall/entity/MallMemberCollection.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.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("mall_member_collection")
public class MallMemberCollection extends BaseEntity {
    private Long memberId;
    private Long goodsId;
    @TableField(exist = false)
    private String goodsName;
    @TableField(exist = false)
    private String thumb;
    @TableField(exist = false)
    private Integer isSale;
}
src/main/java/cc/mrbird/febs/mall/entity/MallMemberFootprint.java
New file
@@ -0,0 +1,29 @@
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;
@Data
@TableName("mall_member_footprint")
public class MallMemberFootprint extends BaseEntity {
    private Long memberId;
    private Long goodsId;
    @TableField(exist = false)
    private String goodsName;
    @TableField(exist = false)
    private String thumb;
    @TableField(exist = false)
    private String presentPrice;
    @TableField(exist = false)
    private Integer isSale;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberCollectionMapper.java
New file
@@ -0,0 +1,12 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallMemberCollection;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
public interface MallMemberCollectionMapper extends BaseMapper<MallMemberCollection> {
    IPage<MallMemberCollection> selectMemberCollectionListInPage(@Param("record") MallMemberCollection mallMemberCollection, Page<MallMemberCollection> page);
}
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberFootprintMapper.java
New file
@@ -0,0 +1,12 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallMemberFootprint;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
public interface MallMemberFootprintMapper extends BaseMapper<MallMemberFootprint> {
    IPage<MallMemberFootprint> selectMemberCollectionListInPage(@Param("record") MallMemberFootprint mallMemberFootprint, Page<MallMemberFootprint> page);
}
src/main/java/cc/mrbird/febs/mall/service/IMallMemberCollectionService.java
New file
@@ -0,0 +1,19 @@
package cc.mrbird.febs.mall.service;
import cc.mrbird.febs.mall.dto.AddCollectionDto;
import cc.mrbird.febs.mall.dto.MemberCollectionListDto;
import cc.mrbird.febs.mall.entity.MallMemberCollection;
import cc.mrbird.febs.mall.vo.AddCollectionVo;
import cc.mrbird.febs.mall.vo.CollectionListVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface IMallMemberCollectionService extends IService<MallMemberCollection> {
    void add(AddCollectionDto addCollectionDto);
    List<CollectionListVo> findMemberCollectionList(MemberCollectionListDto memberCollectionListDto);
    void del(String ids);
}
src/main/java/cc/mrbird/febs/mall/service/IMallMemberFootprintService.java
New file
@@ -0,0 +1,22 @@
package cc.mrbird.febs.mall.service;
import cc.mrbird.febs.mall.dto.AddCollectionDto;
import cc.mrbird.febs.mall.dto.MemberCollectionListDto;
import cc.mrbird.febs.mall.dto.MemberFootprintListDto;
import cc.mrbird.febs.mall.entity.MallMemberFootprint;
import cc.mrbird.febs.mall.vo.CollectionListVo;
import cc.mrbird.febs.mall.vo.FootprintListVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface IMallMemberFootprintService extends IService<MallMemberFootprint> {
    void add(Long goodsId, Long memberId);
    List<FootprintListVo> findMemberCollectionList(MemberFootprintListDto memberFootprintListDto);
    void del(String ids);
    void empty();
}
src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberCollectionServiceImpl.java
New file
@@ -0,0 +1,68 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.dto.AddCollectionDto;
import cc.mrbird.febs.mall.dto.MemberCollectionListDto;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallMemberCollection;
import cc.mrbird.febs.mall.mapper.MallMemberCollectionMapper;
import cc.mrbird.febs.mall.service.IMallMemberCollectionService;
import cc.mrbird.febs.mall.vo.AddCollectionVo;
import cc.mrbird.febs.mall.vo.CollectionListVo;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@RequiredArgsConstructor
public class MallMemberCollectionServiceImpl extends ServiceImpl<MallMemberCollectionMapper, MallMemberCollection> implements IMallMemberCollectionService {
    @Override
    public void add(AddCollectionDto addCollectionDto) {
        MallMember member = LoginUserUtil.getLoginUser();
        MallMemberCollection collection = new MallMemberCollection();
        collection.setMemberId(member.getId());
        collection.setGoodsId(addCollectionDto.getGoodsId());
        this.baseMapper.insert(collection);
    }
    @Override
    public List<CollectionListVo> findMemberCollectionList(MemberCollectionListDto memberCollectionListDto) {
        MallMember member = LoginUserUtil.getLoginUser();
        MallMemberCollection collection = new MallMemberCollection();
        collection.setMemberId(member.getId());
        Page<MallMemberCollection> page = new Page<>(memberCollectionListDto.getPageNow(), memberCollectionListDto.getPageSize());
        IPage<MallMemberCollection> result = this.baseMapper.selectMemberCollectionListInPage(collection, page);
        if (CollUtil.isEmpty(result.getRecords())) {
            return new ArrayList<>();
        }
        return result.getRecords().stream().map(item -> BeanUtil.copyProperties(item, CollectionListVo.class)).collect(Collectors.toList());
    }
    @Override
    public void del(String ids) {
        MallMember member = LoginUserUtil.getLoginUser();
        List<String> idsList = StrUtil.split(ids, ',');
        LambdaQueryWrapper<MallMemberCollection> delQuery = new LambdaQueryWrapper<>();
        delQuery.in(MallMemberCollection::getId, idsList);
        delQuery.eq(MallMemberCollection::getMemberId, member.getId());
        this.baseMapper.delete(delQuery);
    }
}
src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberFootprintServiceImpl.java
New file
@@ -0,0 +1,84 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.dto.MemberFootprintListDto;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallMemberCollection;
import cc.mrbird.febs.mall.entity.MallMemberFootprint;
import cc.mrbird.febs.mall.mapper.MallMemberFootprintMapper;
import cc.mrbird.febs.mall.service.IMallMemberFootprintService;
import cc.mrbird.febs.mall.vo.CollectionListVo;
import cc.mrbird.febs.mall.vo.FootprintListVo;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@RequiredArgsConstructor
public class MallMemberFootprintServiceImpl extends ServiceImpl<MallMemberFootprintMapper, MallMemberFootprint> implements IMallMemberFootprintService {
    @Override
    public void add(Long goodsId, Long memberId) {
        LambdaQueryWrapper<MallMemberFootprint> query = new LambdaQueryWrapper<>();
        query.eq(MallMemberFootprint::getGoodsId, goodsId);
        query.eq(MallMemberFootprint::getMemberId, memberId);
        MallMemberFootprint mallMemberFootprint = this.baseMapper.selectOne(query);
        if (mallMemberFootprint == null) {
            mallMemberFootprint = new MallMemberFootprint();
            mallMemberFootprint.setGoodsId(goodsId);
            mallMemberFootprint.setMemberId(memberId);
            this.baseMapper.insert(mallMemberFootprint);
        } else {
            mallMemberFootprint.setUpdatedTime(new Date());
            this.baseMapper.updateById(mallMemberFootprint);
        }
    }
    @Override
    public List<FootprintListVo> findMemberCollectionList(MemberFootprintListDto memberFootprintListDto) {
        MallMember member = LoginUserUtil.getLoginUser();
        MallMemberFootprint footprint = new MallMemberFootprint();
        footprint.setMemberId(member.getId());
        Page<MallMemberFootprint> page = new Page<>(memberFootprintListDto.getPageNow(), memberFootprintListDto.getPageSize());
        IPage<MallMemberFootprint> result = this.baseMapper.selectMemberCollectionListInPage(footprint, page);
        if (CollUtil.isEmpty(result.getRecords())) {
            return new ArrayList<>();
        }
        return result.getRecords().stream().map(item -> BeanUtil.copyProperties(item, FootprintListVo.class)).collect(Collectors.toList());
    }
    @Override
    public void del(String ids) {
        MallMember member = LoginUserUtil.getLoginUser();
        List<String> idsList = StrUtil.split(ids, ',');
        LambdaQueryWrapper<MallMemberFootprint> delQuery = new LambdaQueryWrapper<>();
        delQuery.in(MallMemberFootprint::getId, idsList);
        delQuery.eq(MallMemberFootprint::getMemberId, member.getId());
        this.baseMapper.delete(delQuery);
    }
    @Override
    public void empty() {
        MallMember member = LoginUserUtil.getLoginUser();
        LambdaQueryWrapper<MallMemberFootprint> delQuery = new LambdaQueryWrapper<>();
        delQuery.eq(MallMemberFootprint::getMemberId, member.getId());
        this.baseMapper.delete(delQuery);
    }
}
src/main/java/cc/mrbird/febs/mall/vo/AddCollectionVo.java
New file
@@ -0,0 +1,13 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "AddCollectionVo", description = "")
public class AddCollectionVo {
    @ApiModelProperty(value = "商品ID")
    private Long goodsId;
}
src/main/java/cc/mrbird/febs/mall/vo/CollectionListVo.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;
@Data
@ApiModel(value = "CollectionListVo", description = "会员收藏列表返回参数类")
public class CollectionListVo {
    @ApiModelProperty(value = "商品ID")
    private Long goodsId;
    @ApiModelProperty(value = "商品名称")
    private String goodsName;
    @ApiModelProperty(value = "缩略图")
    private String thumb;
    @ApiModelProperty(value = "价格")
    private String presentPrice;
    @ApiModelProperty(value = "上下架 2-下架")
    private Integer isSale;
}
src/main/java/cc/mrbird/febs/mall/vo/FootprintListVo.java
New file
@@ -0,0 +1,34 @@
package cc.mrbird.febs.mall.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel(value = "FootprintListVo", description = "浏览记录列表返回参数类")
public class FootprintListVo {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "浏览时间")
    private Date updatedTime;
    @ApiModelProperty(value = "商品ID")
    private Long goodsId;
    @ApiModelProperty(value = "商品名称")
    private String goodsName;
    @ApiModelProperty(value = "缩略图")
    private String thumb;
    @ApiModelProperty(value = "价格")
    private String presentPrice;
    @ApiModelProperty(value = "上下架 2-下架")
    private Integer isSale;
}
src/main/resources/mapper/modules/MallMemberCollectionMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.MallMemberCollectionMapper">
    <select id="selectMemberCollectionListInPage" resultType="cc.mrbird.febs.mall.entity.MallMemberCollection">
        select
            collection.*
             ,goods.goods_name goodsName
             ,goods.thumb
             ,goods.present_price
             ,goods.is_sale
        from mall_member_collection collection
            inner join mall_goods goods on collection.goods_id=goods.ID
        <where>
            <if test="record != null">
                <if test="record.memberId != null">
                    and collection.member_id = #{record.memberId}
                </if>
            </if>
        </where>
        order by collection.created_time desc
    </select>
</mapper>
src/main/resources/mapper/modules/MallMemberFootprintMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.MallMemberFootprintMapper">
    <select id="selectMemberCollectionListInPage" resultType="cc.mrbird.febs.mall.entity.MallMemberFootprint">
        select
            footprint.*
             ,goods.goods_name goodsName
             ,goods.thumb
             ,goods.present_price
             ,goods.is_sale
        from mall_member_footprint footprint
            inner join mall_goods goods on footprint.goods_id=goods.ID
        <where>
            <if test="record != null">
                <if test="record.memberId != null">
                    and collection.member_id = #{record.memberId}
                </if>
            </if>
        </where>
        order by footprint.updated_time desc
    </select>
</mapper>