From 4607cf5737cf68bbf5132cf02e88d3cc325d8a2e Mon Sep 17 00:00:00 2001
From: rentaiming <806181662@qq.com>
Date: 星期六, 01 六月 2024 18:46:19 +0800
Subject: [PATCH] 用户端 商品

---
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuListVO.java                       |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsGroupPurchaseController.java |   38 +++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/MemberGoodsCollectionServiceImpl.java            |   74 +++++++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java               |   34 +++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java                         |  107 ++++++++++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java                                 |    3 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsBrowseRecordController.java  |   37 +++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuInfoVO.java                       |   79 +++++++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java                       |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/vo/GoodsGroupPurchaseInfoVO.java          |   77 +++++++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java                        |    6 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java                |   57 +++++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/HomeGoodsSkuDTO.java                         |    6 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IMemberGoodsCollectionService.java                    |    9 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsSkuController.java           |   14 
 15 files changed, 541 insertions(+), 10 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/HomeGoodsSkuDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/HomeGoodsSkuDTO.java
index fe27a0a..884419f 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/HomeGoodsSkuDTO.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/HomeGoodsSkuDTO.java
@@ -6,9 +6,12 @@
 
 @Data
 public class HomeGoodsSkuDTO extends BasePage {
+
     @ApiModelProperty(value = "商品名称")
     private String skuName;
 
+    @ApiModelProperty(value = "商品skuId")
+    private Long goodsSkuId;
 
     @ApiModelProperty(value = "商品分类id")
     private Long categoryId;
@@ -28,5 +31,8 @@
     @ApiModelProperty(value = "排序方式1.全部2.30+ 3.30-15 4.15-5")
     private Integer year;
 
+    @ApiModelProperty(value = "会员id")
+    private Long memberId;
+
 
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuInfoVO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuInfoVO.java
new file mode 100644
index 0000000..84de4f7
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuInfoVO.java
@@ -0,0 +1,79 @@
+package com.ruoyi.system.api.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class HomeGoodsSkuInfoVO {
+    @ApiModelProperty(value = "商品id")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @ApiModelProperty(value = "商品名称")
+    private String skuName;
+
+    @ApiModelProperty(value = "商品年份")
+    private String years;
+
+    @ApiModelProperty(value = "商品分类")
+    private String category;
+
+    @ApiModelProperty(value = "商品系列")
+    private String series;
+
+    @ApiModelProperty(value = "商品品牌")
+    private String brand;
+
+    @ApiModelProperty(value = "商品香型")
+    private String flavorType;
+
+    @ApiModelProperty(value = "商品价格")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "库存")
+    private Integer stock;
+
+    @ApiModelProperty(value = "已售数量")
+    private Integer soldQuantity;
+
+    @ApiModelProperty(value = "单位")
+    private String unit;
+
+    @ApiModelProperty(value = "规格")
+    private String spec;
+
+    @ApiModelProperty(value = "规格单位")
+    private String specUnit;
+
+    @ApiModelProperty(value = "封面图")
+    private String coverPic;
+
+    @ApiModelProperty(value = "详情图,不超过五张图片")
+    private String album;
+
+    @ApiModelProperty(value = "分享标题")
+    private String shareTitle;
+
+    @ApiModelProperty(value = "分享图片")
+    private String sharePic;
+
+    @ApiModelProperty(value = "商品描述")
+    private String description;
+
+    @ApiModelProperty(value = "商品说明")
+    private String detail;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sortNum;
+
+    @ApiModelProperty(value = "是收藏 1未收藏,2收藏")
+    private Integer isCollection;
+
+    @ApiModelProperty(value = "是团购 1没有团购,2有团购")
+    private Integer isGoodsGroupPurchase;
+
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuListVO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuListVO.java
index 04b4faa..e57eca3 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuListVO.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/HomeGoodsSkuListVO.java
@@ -29,4 +29,9 @@
     @ApiModelProperty(value = "封面图")
     private String coverPic;
 
+    @ApiModelProperty(value = "是收藏 1未收藏,2收藏")
+    private Integer isCollection;
+
+
+
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsBrowseRecordController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsBrowseRecordController.java
new file mode 100644
index 0000000..612a8fb
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsBrowseRecordController.java
@@ -0,0 +1,37 @@
+package com.ruoyi.goods.controller.forepart;
+
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.page.PageDTO;
+import com.ruoyi.goods.service.IGoodsBrowseRecordService;
+import com.ruoyi.system.api.domain.dto.AuctionCollectionDTO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+@RestController
+@RequestMapping("/forepart/goods-browse-record")
+public class ForepartGoodsBrowseRecordController {
+    @Resource
+    private IGoodsBrowseRecordService iGoodsBrowseRecordService;
+    @RequestMapping("/geBrowseRecordList")
+    @ResponseBody
+    @ApiOperation(value = "用户端-我的浏览的普通商品")
+    public R<PageDTO<HomeGoodsSkuListVO>> geBrowseRecordList(@RequestBody AuctionCollectionDTO auctionCollectionDTO) {
+        return R.ok(iGoodsBrowseRecordService.geBrowseRecordList(auctionCollectionDTO));
+    }
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsGroupPurchaseController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsGroupPurchaseController.java
new file mode 100644
index 0000000..9051af8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsGroupPurchaseController.java
@@ -0,0 +1,38 @@
+package com.ruoyi.goods.controller.forepart;
+
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.annotation.InnerAuth;
+import com.ruoyi.goods.controller.forepart.vo.GoodsGroupPurchaseInfoVO;
+import com.ruoyi.goods.service.IGoodsGroupPurchaseService;
+import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 商品团购表 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-16
+ */
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/forepart/goods-group-purchase")
+public class ForepartGoodsGroupPurchaseController {
+
+    private final IGoodsGroupPurchaseService goodsGroupPurchaseService;
+
+    @RequestMapping("/getGoodsGroupPurchaseInfo")
+    @ResponseBody
+    @ApiOperation(value = "用户端-团购商品详情")
+    public R<GoodsGroupPurchaseInfoVO> getGoodsGroupPurchaseInfo(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO) {
+        return R.ok(goodsGroupPurchaseService.getGoodsGroupPurchaseInfo(homeGoodsSkuDTO));
+    }
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsSkuController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsSkuController.java
index 0d83a5b..722e107 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsSkuController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/ForepartGoodsSkuController.java
@@ -1,22 +1,17 @@
 package com.ruoyi.goods.controller.forepart;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.goods.service.IGoodsSkuService;
-import com.ruoyi.system.api.domain.GoodsBrand;
-import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
-import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO;
 import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.List;
 
 /**
  * <p>
@@ -41,5 +36,12 @@
        return R.ok(iGoodsSkuService.getHomeGoodsSkuVOList(homeGoodsSkuDTO));
     }
 
+    @RequestMapping("/getHomeGoodsSkuInfoVO")
+    @ResponseBody
+    @ApiOperation(value = "用户端-普通拍卖商品详情")
+    public R<HomeGoodsSkuInfoVO> getHomeGoodsSkuInfo(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO) {
+        return R.ok(iGoodsSkuService.getHomeGoodsSkuInfo(homeGoodsSkuDTO));
+    }
+
 
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/vo/GoodsGroupPurchaseInfoVO.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/vo/GoodsGroupPurchaseInfoVO.java
new file mode 100644
index 0000000..5bb11f6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/forepart/vo/GoodsGroupPurchaseInfoVO.java
@@ -0,0 +1,77 @@
+package com.ruoyi.goods.controller.forepart.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.common.core.enums.GroupStatusEnum;
+import com.ruoyi.common.core.enums.ListingStatusEnum;
+import com.ruoyi.common.core.enums.StartStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+@Data
+public class GoodsGroupPurchaseInfoVO {
+    @ApiModelProperty(value = "商品id")
+    private Long goodsSkuId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsSkuName;
+    @ApiModelProperty(value = "商品年份")
+    private String years;
+
+    @ApiModelProperty(value = "封面图")
+    private String coverPic;
+
+    @ApiModelProperty(value = "商品价格")
+    private BigDecimal price;
+
+
+    @ApiModelProperty(value = "分享标题")
+    @TableField("share_title")
+    private String shareTitle;
+
+    @ApiModelProperty(value = "分享图片")
+    @TableField("share_pic")
+    private String sharePic;
+
+    @ApiModelProperty(value = "团购价格")
+    @TableField("group_purchase_price")
+    private BigDecimal groupPurchasePrice;
+
+    @ApiModelProperty(value = "成团人数")
+    @TableField("group_size")
+    private Integer groupSize;
+
+    @ApiModelProperty(value = "限购数量")
+    @TableField("limit_number")
+    private Integer limitNumber;
+
+    @ApiModelProperty(value = "当前人数")
+    @TableField("current_number")
+    private Integer currentNumber;
+
+    @ApiModelProperty(value = "团购开始时间")
+    @TableField("start_time")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty(value = "团购结束时间")
+    @TableField("end_time")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "参团说明")
+    @TableField("description")
+    private String description;
+
+    @ApiModelProperty(value = "开始状态 0=未开始 1=已开始 2=已结束 ")
+    @TableField("start_status")
+    private StartStatusEnum startStatus;
+
+    @ApiModelProperty(value = "上架状态 0=已上架 1=已下架")
+    @TableField("listing_status")
+    private ListingStatusEnum listingStatus;
+
+    @ApiModelProperty(value = "成团状态 0=待成团 1=已成团 2=成团失败")
+    @TableField("group_status")
+    private GroupStatusEnum groupStatus;
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java
index 97743e7..1db571d 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java
@@ -1,7 +1,11 @@
 package com.ruoyi.goods.service;
 
+import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.goods.domain.GoodsBrowseRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.api.domain.dto.AuctionCollectionDTO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
@@ -12,5 +16,5 @@
  * @since 2024-05-30
  */
 public interface IGoodsBrowseRecordService extends IService<GoodsBrowseRecord> {
-
+    PageDTO<HomeGoodsSkuListVO> geBrowseRecordList(@RequestBody AuctionCollectionDTO auctionCollectionDTO);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java
index 1550c37..5ec4038 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java
@@ -7,7 +7,10 @@
 import com.ruoyi.goods.controller.management.dto.GoodsGroupPurchaseQuery;
 import com.ruoyi.goods.controller.management.vo.GoodsGroupPurchaseVO;
 import com.ruoyi.goods.domain.GoodsGroupPurchase;
+import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
+import com.ruoyi.goods.controller.forepart.vo.GoodsGroupPurchaseInfoVO;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
@@ -69,4 +72,6 @@
      * @param id 团购商品id
      */
     void stopImmediately(Long id);
+
+    GoodsGroupPurchaseInfoVO getGoodsGroupPurchaseInfo(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
index 7c2e329..8693f69 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
@@ -11,6 +11,7 @@
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
@@ -65,4 +66,6 @@
     void updGoodsStock(List<GoodsStockUpdDTO> goodsStockUpdDTOS);
 
     PageDTO<HomeGoodsSkuListVO> getHomeGoodsSkuVOList(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO);
+
+    HomeGoodsSkuInfoVO getHomeGoodsSkuInfo(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IMemberGoodsCollectionService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IMemberGoodsCollectionService.java
index 907e374..d7ac1c7 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IMemberGoodsCollectionService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IMemberGoodsCollectionService.java
@@ -1,7 +1,12 @@
 package com.ruoyi.goods.service;
 
+import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.goods.domain.MemberGoodsCollection;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.api.domain.dto.AuctionCollectionDTO;
+import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
@@ -13,4 +18,8 @@
  */
 public interface IMemberGoodsCollectionService extends IService<MemberGoodsCollection> {
 
+    void  saveGoodsCollection(AuctionCollectionDTO auctionCollectionDTO);
+
+    PageDTO<HomeGoodsSkuListVO> getGoodsCollectionList(@RequestBody AuctionCollectionDTO auctionCollectionDTO);
+
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java
index 0c44780..4a04dfa 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java
@@ -1,10 +1,28 @@
 package com.ruoyi.goods.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.goods.domain.GoodsBrowseRecord;
+import com.ruoyi.goods.domain.MemberGoodsCollection;
 import com.ruoyi.goods.mapper.GoodsBrowseRecordMapper;
+import com.ruoyi.goods.mapper.GoodsSkuMapper;
 import com.ruoyi.goods.service.IGoodsBrowseRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.dto.AuctionCollectionDTO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
+import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -16,5 +34,44 @@
  */
 @Service
 public class GoodsBrowseRecordServiceImpl extends ServiceImpl<GoodsBrowseRecordMapper, GoodsBrowseRecord> implements IGoodsBrowseRecordService {
+    @Resource
+    private GoodsSkuMapper goodsSkuMapper;
 
+    @Resource
+    private GoodsSkuClient goodsSkuClient;
+
+    @Override
+    public PageDTO<HomeGoodsSkuListVO> geBrowseRecordList(AuctionCollectionDTO auctionCollectionDTO) {
+
+
+        Set<Long> goodsSkuIdList1 = null;
+        if (StringUtils.isNotEmpty(auctionCollectionDTO.getGoodsSkuName())) {
+            List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(auctionCollectionDTO.getGoodsSkuName(),
+                            SecurityConstants.INNER)
+                    .getData();
+            goodsSkuIdList1 = goodsSku.stream().map(GoodsSku::getId)
+                    .collect(Collectors.toSet());
+        }
+
+        Page<HomeGoodsSkuListVO> page = new Page<>();
+        page.setSize(auctionCollectionDTO.getPageSize());
+        page.setCurrent(auctionCollectionDTO.getPageCurr());
+        LambdaQueryWrapper<GoodsBrowseRecord> wrapper= Wrappers.lambdaQuery();
+        wrapper.eq(GoodsBrowseRecord::getMemberId,auctionCollectionDTO.getMemberId());
+        wrapper.in(GoodsBrowseRecord::getGoodsSkuId,goodsSkuIdList1);
+        List<GoodsBrowseRecord> list = this.list(wrapper);
+
+        List<HomeGoodsSkuListVO> auctionGoodsVOS=new ArrayList<>();
+        for (GoodsBrowseRecord auctionCollection:list){
+            HomeGoodsSkuListVO auctionGoodsVO=new HomeGoodsSkuListVO();
+            GoodsSku goodsSku = goodsSkuMapper.selectById(auctionCollection.getGoodsSkuId());
+            auctionGoodsVO.setId(goodsSku.getId());
+            auctionGoodsVO.setPrice(goodsSku.getPrice());
+            auctionGoodsVO.setCoverPic(goodsSku.getCoverPic());
+            auctionGoodsVO.setSkuName(goodsSku.getSkuName());
+            auctionGoodsVO.setSoldQuantity(goodsSku.getSoldQuantity());
+        }
+        page.setRecords(auctionGoodsVOS);
+        return PageDTO.of(page);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
index 1991a32..f2cdbce 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -1,5 +1,7 @@
 package com.ruoyi.goods.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -15,10 +17,12 @@
 import com.ruoyi.common.core.utils.page.BeanUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.goods.controller.forepart.vo.GoodsGroupPurchaseInfoVO;
 import com.ruoyi.goods.controller.management.dto.GoodsGroupPurchaseDTO;
 import com.ruoyi.goods.controller.management.dto.GoodsGroupPurchaseQuery;
 import com.ruoyi.goods.controller.management.vo.GoodsGroupPurchaseVO;
 import com.ruoyi.goods.domain.GoodsGroupPurchase;
+import com.ruoyi.goods.domain.MemberGoodsCollection;
 import com.ruoyi.goods.mapper.GoodsGroupPurchaseMapper;
 import com.ruoyi.goods.service.IGoodsGroupPurchaseService;
 import com.ruoyi.goods.service.IGoodsSkuService;
@@ -27,6 +31,7 @@
 import com.ruoyi.system.api.constants.NotificationTypeConstant;
 import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.domain.Order;
+import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import com.ruoyi.system.api.domain.dto.OrderUpdDTO;
 import com.ruoyi.system.api.domain.dto.RefundDTO;
@@ -274,4 +279,33 @@
                     .eq(GoodsGroupPurchase::getId, id).update();
         }
     }
+
+    @Override
+    public GoodsGroupPurchaseInfoVO getGoodsGroupPurchaseInfo(HomeGoodsSkuDTO homeGoodsSkuDTO) {
+        GoodsSku byId = goodsSkuService.getById(homeGoodsSkuDTO.getGoodsSkuId());
+
+        LambdaQueryWrapper<GoodsGroupPurchase> wrapper3= Wrappers.lambdaQuery();
+        wrapper3.eq(GoodsGroupPurchase::getDelFlag,0);
+        wrapper3.eq(GoodsGroupPurchase::getGoodsSkuId,homeGoodsSkuDTO.getGoodsSkuId());
+        GoodsGroupPurchase one = this.getOne(wrapper3);
+        GoodsGroupPurchaseInfoVO  goodsGroupPurchaseInfoVO=new GoodsGroupPurchaseInfoVO();
+        goodsGroupPurchaseInfoVO.setGoodsSkuId(one.getId());
+        goodsGroupPurchaseInfoVO.setGoodsSkuName(byId.getSkuName());
+        goodsGroupPurchaseInfoVO.setYears(String.valueOf(byId.getYears().getYear()));
+        goodsGroupPurchaseInfoVO.setCoverPic(byId.getCoverPic());
+        goodsGroupPurchaseInfoVO.setPrice(byId.getPrice());
+        goodsGroupPurchaseInfoVO.setShareTitle(byId.getShareTitle());
+        goodsGroupPurchaseInfoVO.setSharePic(byId.getSharePic());
+        goodsGroupPurchaseInfoVO.setGroupPurchasePrice(one.getGroupPurchasePrice());
+        goodsGroupPurchaseInfoVO.setGroupSize(one.getGroupSize());
+        goodsGroupPurchaseInfoVO.setLimitNumber(one.getLimitNumber());
+        goodsGroupPurchaseInfoVO.setStartTime(one.getStartTime());
+        goodsGroupPurchaseInfoVO.setEndTime(one.getEndTime());
+        goodsGroupPurchaseInfoVO.setDescription(one.getDescription());
+        goodsGroupPurchaseInfoVO.setStartStatus(one.getStartStatus());
+        goodsGroupPurchaseInfoVO.setListingStatus(one.getListingStatus());
+        goodsGroupPurchaseInfoVO.setGroupStatus(one.getGroupStatus());
+
+        return goodsGroupPurchaseInfoVO;
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
index 04afe89..c04b4bb 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.enums.ListingStatusEnum;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -18,24 +19,29 @@
 import com.ruoyi.goods.controller.management.vo.GoodsSkuVO;
 import com.ruoyi.goods.domain.GoodsGroupPurchase;
 import com.ruoyi.goods.domain.GoodsInfoTitleValue;
+import com.ruoyi.goods.domain.MemberGoodsCollection;
 import com.ruoyi.goods.mapper.GoodsGroupPurchaseMapper;
 import com.ruoyi.goods.mapper.GoodsSeckillMapper;
 import com.ruoyi.goods.mapper.GoodsSkuMapper;
 import com.ruoyi.goods.service.IGoodsInfoTitleValueService;
 import com.ruoyi.goods.service.IGoodsSkuService;
-import com.ruoyi.system.api.domain.GoodsSeckill;
-import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.goods.service.IMemberGoodsCollectionService;
+import com.ruoyi.system.api.domain.*;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
-import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO;
 import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
+import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RLock;
@@ -43,6 +49,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
 
 /**
  * <p>
@@ -61,6 +69,12 @@
     private final GoodsSeckillMapper goodsSeckillMapper;
     private final GoodsGroupPurchaseMapper goodsGroupPurchaseMapper;
     private final RedissonClient redissonClient;
+    @Resource
+    private  GoodsSkuClient goodsSkuClient;
+
+    @Resource
+    private IMemberGoodsCollectionService iMemberGoodsCollectionService;
+
 
     private static final ObjectMapper objectMapper = new ObjectMapper();
 
@@ -276,6 +290,7 @@
 
         LambdaQueryWrapper<GoodsSku> wrapper3= Wrappers.lambdaQuery();
         wrapper3.eq(GoodsSku::getDelFlag,0);
+        wrapper3.eq(GoodsSku::getListingStatus,0);
         wrapper3.like(GoodsSku::getSkuName,homeGoodsSkuDTO.getSkuName());
         wrapper3.eq(GoodsSku::getSkuName,homeGoodsSkuDTO.getSkuName());
         wrapper3.eq(GoodsSku::getBrandId,homeGoodsSkuDTO.getBrandId());
@@ -294,12 +309,98 @@
         if (homeGoodsSkuDTO.getSort()==5){
             wrapper3.orderByDesc(GoodsSku::getSoldQuantity);
         }
+        if(homeGoodsSkuDTO.getYear()==2){
+            LocalDateTime now = LocalDateTime.now();
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDateTime newTime7 = now.minusYears(30);
+            String formattedDate7 = newTime7.format(formatter);
+            LocalDateTime parseTime7 = LocalDateTime.parse(formattedDate7, formatter);
+            wrapper3.gt(GoodsSku::getYears,parseTime7);
+        }
+        if(homeGoodsSkuDTO.getYear()==3){
+            LocalDateTime now = LocalDateTime.now();
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDateTime newTime7 = now.minusYears(30);
+            String formattedDate7 = newTime7.format(formatter);
+            LocalDateTime parseTime7 = LocalDateTime.parse(formattedDate7, formatter);
+
+            LocalDateTime newTime15 = now.minusYears(15);
+            String formattedDate15 = newTime15.format(formatter);
+            LocalDateTime parseTime15= LocalDateTime.parse(formattedDate15, formatter);
+            wrapper3.gt(GoodsSku::getYears, parseTime15)
+                    .le(GoodsSku::getYears, parseTime7);
+        }
+
+        if(homeGoodsSkuDTO.getYear()==3){
+            LocalDateTime now = LocalDateTime.now();
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDateTime newTime7 = now.minusYears(5);
+            String formattedDate7 = newTime7.format(formatter);
+            LocalDateTime parseTime7 = LocalDateTime.parse(formattedDate7, formatter);
+
+            LocalDateTime newTime15 = now.minusYears(15);
+            String formattedDate15 = newTime15.format(formatter);
+            LocalDateTime parseTime15= LocalDateTime.parse(formattedDate15, formatter);
+            wrapper3.ge(GoodsSku::getYears, parseTime7)
+                    .le(GoodsSku::getYears, parseTime15);
+        }
+        wrapper3.orderByAsc(GoodsSku::getSortNum);
         Page<GoodsSku> page1 = this.page(page, wrapper3);
         PageDTO<HomeGoodsSkuListVO> articleCommentsVOPageDTO = PageDTO.of(page1, HomeGoodsSkuListVO.class);
         return  articleCommentsVOPageDTO;
 
     }
 
+    @Override
+    public HomeGoodsSkuInfoVO getHomeGoodsSkuInfo(HomeGoodsSkuDTO homeGoodsSkuDTO) {
+        GoodsSku byId = this.getById(homeGoodsSkuDTO.getGoodsSkuId());
+        HomeGoodsSkuInfoVO homeGoodsSkuInfoVO=new HomeGoodsSkuInfoVO();
+        homeGoodsSkuInfoVO.setId(byId.getId());
+        homeGoodsSkuInfoVO.setSkuName(byId.getSkuName());
+        homeGoodsSkuInfoVO.setYears(String.valueOf(byId.getYears().getYear()));
+        GoodsBrand data = goodsSkuClient.getBrandOne(byId.getBrandId(), SecurityConstants.INNER).getData();
+        GoodsCategory data1 = goodsSkuClient.getCategoryOne(byId.getCategoryId(), SecurityConstants.INNER).getData();
+        GoodsSeries data2 = goodsSkuClient.getSeriesOne(byId.getSeriesId(), SecurityConstants.INNER).getData();
+        GoodsFlavorType data3 = goodsSkuClient.getFlavorTypeOne(byId.getFlavorTypeId(), SecurityConstants.INNER).getData();
+        homeGoodsSkuInfoVO.setBrand(data.getBrandName());
+        homeGoodsSkuInfoVO.setCategory(data1.getCategoryName());
+        homeGoodsSkuInfoVO.setSeries(data2.getSeriesName());
+        homeGoodsSkuInfoVO.setFlavorType(data3.getFlavorTypeName());
+        homeGoodsSkuInfoVO.setPrice(byId.getPrice());
+        homeGoodsSkuInfoVO.setSoldQuantity(byId.getSoldQuantity());
+        homeGoodsSkuInfoVO.setUnit(byId.getUnit());
+        homeGoodsSkuInfoVO.setSpec(byId.getSpec());
+        homeGoodsSkuInfoVO.setSpecUnit(byId.getSpecUnit());
+        homeGoodsSkuInfoVO.setCoverPic(byId.getCoverPic());
+        homeGoodsSkuInfoVO.setAlbum(byId.getAlbum());
+        homeGoodsSkuInfoVO.setDescription(byId.getDescription());
+        homeGoodsSkuInfoVO.setDetail(byId.getDetail());
+        homeGoodsSkuInfoVO.setShareTitle(byId.getShareTitle());
+        homeGoodsSkuInfoVO.setSharePic(byId.getSharePic());
+
+        LambdaQueryWrapper<MemberGoodsCollection> wrapper3= Wrappers.lambdaQuery();
+        wrapper3.eq(MemberGoodsCollection::getDelFlag,0);
+        wrapper3.eq(MemberGoodsCollection::getMemberId,homeGoodsSkuDTO.getMemberId());
+        wrapper3.eq(MemberGoodsCollection::getTargetId,homeGoodsSkuDTO.getGoodsSkuId());
+        List<MemberGoodsCollection> list = iMemberGoodsCollectionService.list(wrapper3);
+        if (list.size()>0){
+            homeGoodsSkuInfoVO.setIsCollection(2);
+        }else{
+            homeGoodsSkuInfoVO.setIsCollection(1);
+        }
+        LambdaQueryWrapper<GoodsGroupPurchase> queryWrapper1 =new LambdaQueryWrapper<>();
+        queryWrapper1.eq(GoodsGroupPurchase::getListingStatus,
+                        ListingStatusEnum.ON_SHELVES)
+                .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId());
+        GoodsGroupPurchase goodsGroupPurchase = goodsGroupPurchaseMapper.selectOne(queryWrapper1);
+        if (goodsGroupPurchase!=null){
+            homeGoodsSkuInfoVO.setIsGoodsGroupPurchase(2);
+        }else{
+            homeGoodsSkuInfoVO.setIsGoodsGroupPurchase(1);
+        }
+        return homeGoodsSkuInfoVO;
+    }
+
     private boolean updateGoodsStock(GoodsSku skus, Integer auctionStock) {
         return this.lambdaUpdate()
                 .set(skus.getStock() + auctionStock > 0, GoodsSku::getStock,
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/MemberGoodsCollectionServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/MemberGoodsCollectionServiceImpl.java
index 93d95ed..48bb229 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/MemberGoodsCollectionServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/MemberGoodsCollectionServiceImpl.java
@@ -1,10 +1,26 @@
 package com.ruoyi.goods.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.goods.domain.MemberGoodsCollection;
+import com.ruoyi.goods.mapper.GoodsSkuMapper;
 import com.ruoyi.goods.mapper.MemberGoodsCollectionMapper;
 import com.ruoyi.goods.service.IMemberGoodsCollectionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.api.domain.AuctionGoods;
+import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.dto.AuctionCollectionDTO;
+import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO;
+import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +33,62 @@
 @Service
 public class MemberGoodsCollectionServiceImpl extends ServiceImpl<MemberGoodsCollectionMapper, MemberGoodsCollection> implements IMemberGoodsCollectionService {
 
+
+     @Resource
+     private GoodsSkuMapper goodsSkuMapper;
+
+    @Override
+    public void saveGoodsCollection(AuctionCollectionDTO auctionCollectionDTO) {
+        if (auctionCollectionDTO.getMemberId()!=null) {
+            throw new ServiceException("用户ID不能为空");
+        }
+        if (auctionCollectionDTO.getState()!=null) {
+            throw new ServiceException("类型不能为空");
+        }
+
+        LambdaQueryWrapper< MemberGoodsCollection> wrapper= Wrappers.lambdaQuery();
+        wrapper.eq(MemberGoodsCollection::getMemberId,auctionCollectionDTO.getMemberId());
+        wrapper.eq(MemberGoodsCollection::getTargetId,auctionCollectionDTO.getGoodsSkuId());
+        if (auctionCollectionDTO.getState()==1){
+            List<MemberGoodsCollection> list = this.list(wrapper);
+            if (list.size()==0){
+                MemberGoodsCollection m =new MemberGoodsCollection();
+                m.setMemberId(auctionCollectionDTO.getMemberId());
+                m.setTargetId(auctionCollectionDTO.getGoodsSkuId());
+                this.save(m);
+            }
+        }else{
+            List<MemberGoodsCollection> list = this.list(wrapper);
+            if (list.size()>0){
+                for (MemberGoodsCollection memberArticleCollection:list){
+                    this.removeById(memberArticleCollection);
+                }
+            }
+
+        }
+    }
+
+    @Override
+    public PageDTO<HomeGoodsSkuListVO> getGoodsCollectionList(AuctionCollectionDTO auctionCollectionDTO) {
+        Page<HomeGoodsSkuListVO> page = new Page<>();
+        page.setSize(auctionCollectionDTO.getPageSize());
+        page.setCurrent(auctionCollectionDTO.getPageCurr());
+        LambdaQueryWrapper< MemberGoodsCollection> wrapper= Wrappers.lambdaQuery();
+        wrapper.eq(MemberGoodsCollection::getMemberId,auctionCollectionDTO.getMemberId());
+        List<MemberGoodsCollection> list = this.list(wrapper);
+
+        List<HomeGoodsSkuListVO> auctionGoodsVOS=new ArrayList<>();
+        for (MemberGoodsCollection auctionCollection:list){
+            HomeGoodsSkuListVO auctionGoodsVO=new HomeGoodsSkuListVO();
+            GoodsSku goodsSku = goodsSkuMapper.selectById(auctionCollection.getTargetId());
+            auctionGoodsVO.setId(goodsSku.getId());
+            auctionGoodsVO.setPrice(goodsSku.getPrice());
+            auctionGoodsVO.setCoverPic(goodsSku.getCoverPic());
+            auctionGoodsVO.setSkuName(goodsSku.getSkuName());
+            auctionGoodsVO.setSoldQuantity(goodsSku.getSoldQuantity());
+            auctionGoodsVO.setIsCollection(2);
+        }
+        page.setRecords(auctionGoodsVOS);
+        return PageDTO.of(page);
+    }
 }

--
Gitblit v1.7.1