From b7a424cffb2c0384767242e4074a7d902c638488 Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Tue, 22 Aug 2023 01:29:21 +0800
Subject: [PATCH] 添加收藏和浏览记录逻辑

---
 src/main/java/cc/mrbird/febs/mall/dto/AddFootprintDto.java                          |   14 +
 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberFootprintMapper.java             |   12 +
 src/main/resources/mapper/modules/MallMemberCollectionMapper.xml                    |   24 ++
 src/main/resources/mapper/modules/MallMemberFootprintMapper.xml                     |   24 ++
 src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java     |   46 ++++
 src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberCollectionServiceImpl.java |   68 ++++++
 src/main/java/cc/mrbird/febs/mall/service/IMallMemberCollectionService.java         |   19 +
 src/main/java/cc/mrbird/febs/mall/vo/FootprintListVo.java                           |   34 +++
 src/main/java/cc/mrbird/febs/mall/vo/AddCollectionVo.java                           |   13 +
 src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java      |   59 +++++
 src/main/java/cc/mrbird/febs/mall/vo/CollectionListVo.java                          |   25 ++
 src/main/java/cc/mrbird/febs/mall/entity/MallMemberFootprint.java                   |   29 ++
 src/main/java/cc/mrbird/febs/mall/dto/AddCollectionDto.java                         |   14 +
 src/main/java/cc/mrbird/febs/mall/entity/MallMemberCollection.java                  |   24 ++
 src/main/java/cc/mrbird/febs/mall/service/IMallMemberFootprintService.java          |   22 ++
 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberCollectionMapper.java            |   12 +
 src/main/java/cc/mrbird/febs/mall/dto/MemberFootprintListDto.java                   |   17 +
 src/main/java/cc/mrbird/febs/mall/dto/MemberCollectionListDto.java                  |   17 +
 src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberFootprintServiceImpl.java  |   84 ++++++++
 19 files changed, 557 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java
new file mode 100644
index 0000000..680b621
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java
@@ -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("取消成功");
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java
new file mode 100644
index 0000000..19b57e2
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMemberFootprintController.java
@@ -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("清空成功");
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddCollectionDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddCollectionDto.java
new file mode 100644
index 0000000..1316118
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AddCollectionDto.java
@@ -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;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddFootprintDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddFootprintDto.java
new file mode 100644
index 0000000..57e90f3
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AddFootprintDto.java
@@ -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;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/MemberCollectionListDto.java b/src/main/java/cc/mrbird/febs/mall/dto/MemberCollectionListDto.java
new file mode 100644
index 0000000..636b914
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/MemberCollectionListDto.java
@@ -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;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/MemberFootprintListDto.java b/src/main/java/cc/mrbird/febs/mall/dto/MemberFootprintListDto.java
new file mode 100644
index 0000000..76f8c36
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/MemberFootprintListDto.java
@@ -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;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberCollection.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberCollection.java
new file mode 100644
index 0000000..73b90ef
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberCollection.java
@@ -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;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberFootprint.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberFootprint.java
new file mode 100644
index 0000000..cedcb29
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberFootprint.java
@@ -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;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberCollectionMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberCollectionMapper.java
new file mode 100644
index 0000000..edd18fd
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberCollectionMapper.java
@@ -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);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberFootprintMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberFootprintMapper.java
new file mode 100644
index 0000000..7a73e26
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberFootprintMapper.java
@@ -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);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallMemberCollectionService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallMemberCollectionService.java
new file mode 100644
index 0000000..2e7e118
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMallMemberCollectionService.java
@@ -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);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallMemberFootprintService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallMemberFootprintService.java
new file mode 100644
index 0000000..dba66b5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMallMemberFootprintService.java
@@ -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();
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberCollectionServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberCollectionServiceImpl.java
new file mode 100644
index 0000000..a70cb57
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberCollectionServiceImpl.java
@@ -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);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberFootprintServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberFootprintServiceImpl.java
new file mode 100644
index 0000000..7c07569
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberFootprintServiceImpl.java
@@ -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);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AddCollectionVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AddCollectionVo.java
new file mode 100644
index 0000000..1e15951
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AddCollectionVo.java
@@ -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;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/CollectionListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/CollectionListVo.java
new file mode 100644
index 0000000..a728c6d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/CollectionListVo.java
@@ -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;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/FootprintListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/FootprintListVo.java
new file mode 100644
index 0000000..a19c44f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/FootprintListVo.java
@@ -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;
+
+}
diff --git a/src/main/resources/mapper/modules/MallMemberCollectionMapper.xml b/src/main/resources/mapper/modules/MallMemberCollectionMapper.xml
new file mode 100644
index 0000000..c6c80e1
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallMemberCollectionMapper.xml
@@ -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>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallMemberFootprintMapper.xml b/src/main/resources/mapper/modules/MallMemberFootprintMapper.xml
new file mode 100644
index 0000000..9d83225
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallMemberFootprintMapper.xml
@@ -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>
\ No newline at end of file

--
Gitblit v1.9.1