Jelajahi Sumber

首页配置、平台分类

zoujiajian 3 tahun lalu
induk
melakukan
fa242d6fe2
33 mengubah file dengan 579 tambahan dan 163 penghapusan
  1. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/GoodsClickUserRecordMapper.java
  2. 2 2
      netflix-dao/src/main/java/com/cyksj/mapper/manage/statistics/StatisticsExportMapper.java
  3. 20 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsClickUserRecord.java
  4. 1 1
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java
  5. 10 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonCategory.java
  6. 1 1
      netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSpuInsert.java
  7. 1 1
      netflix-dao/src/main/java/com/cyksj/model/manage/views/GoodsDonViewer.java
  8. 12 2
      netflix-dao/src/main/java/com/cyksj/model/request/ClickRecordReq.java
  9. 1 1
      netflix-dao/src/main/java/com/cyksj/model/request/HomeManageConfigReq.java
  10. 1 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryFrontView.java
  11. 44 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryGoodsView.java
  12. 42 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryView.java
  13. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonPopularizeView.java
  14. 23 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSearchView.java
  15. 8 1
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonViews.java
  16. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListView.java
  17. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsHomePageView.java
  18. 3 0
      netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementAvailableGoodsView.java
  19. 3 0
      netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementConfigView.java
  20. 6 1
      netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementFrontView.java
  21. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java
  22. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeRateView.java
  23. 13 0
      netflix-service/src/main/java/com/cyksj/service/home/ClickRecordFrontService.java
  24. 0 11
      netflix-service/src/main/java/com/cyksj/service/home/HomeManagementFrontService.java
  25. 91 0
      netflix-service/src/main/java/com/cyksj/service/home/impl/ClickRecordFrontServiceImpl.java
  26. 15 6
      netflix-service/src/main/java/com/cyksj/service/home/impl/HomeManagementConfigServiceImpl.java
  27. 0 38
      netflix-service/src/main/java/com/cyksj/service/home/impl/HomeManagementFrontServiceImpl.java
  28. 4 4
      netflix-service/src/main/java/com/cyksj/service/mange/statistics/impl/StatisticsDataServiceImpl.java
  29. 109 78
      netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java
  30. 0 4
      netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java
  31. 129 4
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonCategoryController.java
  32. 15 3
      netflix-web/src/main/java/com/cyksj/web/controller/manage/home/HomeManageConfigController.java
  33. 7 0
      netflix-web/src/main/java/com/cyksj/web/util/StpUserUtil.java

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GoodsClickUserRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GoodsClickUserRecord;
+
+/*
+ *项目名: netflix
+ *文件名: GoodsClickUserRecordMapper
+ *创建者: JavaZou
+ *创建时间:2023/8/18 10:48
+ */
+public interface GoodsClickUserRecordMapper extends BaseMapper<GoodsClickUserRecord> {
+}

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/mapper/manage/statistics/StatisticsExportMapper.java

@@ -42,7 +42,7 @@ public interface StatisticsExportMapper{
 
 	Integer getMonthAiNewPayStreamingNumOfUser(@Param("thisMonth") DateTime thisMonth, @Param("nextMonth") DateTime nextMonth);
 
-	Integer getMonthPrivateCorpNumOfUser(@Param("type") Integer type, @Param("category") Integer category);
+	Integer getMonthPrivateCorpNumOfUser(@Param("type") Integer type, @Param("category") Long category);
 
 	BigDecimal getShouldApplyMoney(String endDate);
 
@@ -58,7 +58,7 @@ public interface StatisticsExportMapper{
 
 	BigDecimal getMonthAmountOfOrderByType(@Param("type") Integer type, @Param("startDate") String startDate, @Param("endDate") String endDate);
 
-	BigDecimal getMonthGoodsTypeAmountOfOrderByType(@Param("type") Integer type, @Param("goodsType") Integer goodsType, @Param("category") Integer category, @Param("startDate") String startDate, @Param("endDate") String endDate);
+	BigDecimal getMonthGoodsTypeAmountOfOrderByType(@Param("type") Integer type, @Param("goodsType") Integer goodsType, @Param("category") Long category, @Param("startDate") String startDate, @Param("endDate") String endDate);
 
 	Integer getMonthUserSourceNumOrderByType(@Param("type") Integer type, @Param("startDate") String startDate, @Param("endDate") String endDate);
 

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsClickUserRecord.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: GoodsClickUserRecord
+ *创建者: JavaZou
+ *创建时间:2023/8/18 10:47
+ */
+@Getter
+@Setter
+public class GoodsClickUserRecord extends BaseEntity{
+	private Long userId;
+
+	private Long goodsId;
+
+	private Long category;
+}

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java

@@ -73,7 +73,7 @@ public class GoodsDon extends BaseEntity {
      * 分类
      * 1、AI  2、流媒体
      */
-    private Integer category;
+    private Long category;
 
     /**
      * 二级分类

+ 10 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonCategory.java

@@ -1,9 +1,13 @@
 package com.cyksj.model.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.cyksj.model.views.GoodsDonCategoryGoodsView;
+import com.ejlchina.searcher.bean.DbIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.constraints.NotEmpty;
+import java.util.List;
 
 /*
  *项目名: netflix
@@ -18,4 +22,10 @@ public class GoodsDonCategory extends BaseEntity {
 	private String name;
 
 	private Integer sorted;
+
+	private Boolean status;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private List<GoodsDonCategoryGoodsView> categoryGoodsList;
 }

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSpuInsert.java

@@ -70,7 +70,7 @@ public class ReqGoodsSpuInsert {
      * 分类
      * 1、AI  2、流媒体
      */
-    private Integer category;
+    private Long category;
 
     /**
      *  轮播图

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/views/GoodsDonViewer.java

@@ -111,7 +111,7 @@ public class GoodsDonViewer {
      * 1、AI  2、流媒体
      */
     @DbField("g.category")
-    private Integer category;
+    private Long category;
 
     /**
      * banner

+ 12 - 2
netflix-dao/src/main/java/com/cyksj/model/request/HomeManagementClickRecordReq.java → netflix-dao/src/main/java/com/cyksj/model/request/ClickRecordReq.java

@@ -5,14 +5,24 @@ import lombok.Setter;
 
 /*
  *项目名: netflix
- *文件名: HomeManagementClickRecordReq
+ *文件名: ClickRecordReq
  *创建者: JavaZou
  *创建时间:2023/8/17 18:13
  */
 @Getter
 @Setter
-public class HomeManagementClickRecordReq {
+public class ClickRecordReq {
 	private Boolean isLogin;
 
 	private Long configId;
+
+	private Long category;
+
+	private Long goodsId;
+
+	/**
+	 * 1、首页点击
+	 * 2、平台分类点击
+	 */
+	private Integer type;
 }

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/request/HomeManageConfigReq.java

@@ -26,7 +26,7 @@ public class HomeManageConfigReq {
 	/**
 	 * 可以多选
 	 */
-	private List<Long> goodsId;
+	private List<Long> goodsIds;
 
 	private HomeManagementConfig.Type type;
 

+ 1 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryFrontView.java

@@ -13,6 +13,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @SearchBean(tables = "goods_don_category"
+		, where = "status is true"
 		, orderBy = "sorted desc")
 public class GoodsDonCategoryFrontView {
 	private Long id;

+ 44 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryGoodsView.java

@@ -0,0 +1,44 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: GoodsDonCategoryGoodsView
+ *创建者: JavaZou
+ *创建时间:2023/8/18 11:11
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don g",
+		where = "g.deleted is true")
+public class GoodsDonCategoryGoodsView {
+
+	@DbField("g.id")
+	private Long goodsId;
+
+	@DbField("g.category")
+	private Long category;
+
+	@DbField("g.title")
+	private String title;
+
+	/**
+	 * 前端组件使用
+	 */
+	@DbField("g.title")
+	private String name;
+
+	@DbField("g.status")
+	private Boolean status;
+
+	@DbIgnore
+	private Integer click;
+
+	@DbField("g.sort_by")
+	private Integer sorted;
+}

+ 42 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonCategoryView.java

@@ -0,0 +1,42 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: GoodsDonCategoryView
+ *创建者: JavaZou
+ *创建时间:2023/8/18 10:36
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don_category gc left join goods_don g on g.category = gc.id and g.deleted is true",
+		groupBy = "gc.id,gc.name,gc.sorted,gc.update_time")
+public class GoodsDonCategoryView {
+	@DbField("gc.id")
+	private Long id;
+
+	@DbField("gc.name")
+	private String name;
+
+	@DbField("gc.sorted")
+	private Integer sorted;
+
+	@DbField("count(g.id)")
+	private Integer count;
+
+	@DbIgnore
+	private Integer click;
+
+	@DbField("gc.status")
+	private Boolean status;
+
+	@DbField("gc.update_time")
+	private Date updateTime;
+}

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonPopularizeView.java

@@ -64,7 +64,7 @@ public class GoodsDonPopularizeView {
 	 * 1、AI  2、流媒体
 	 */
 	@DbField("g.category")
-	private Integer category;
+	private Long category;
 
 	@DbField("g.second_type")
 	private Integer secondType;

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSearchView.java

@@ -0,0 +1,23 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: GoodsDonSearchView
+ *创建者: JavaZou
+ *创建时间:2023/8/25 16:40
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don g",
+		where = "g.deleted is true and g.status is true")
+public class GoodsDonSearchView {
+	@DbField("g.id")
+	private Long goodsId;
+
+	private String title;
+}

+ 8 - 1
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonViews.java

@@ -3,6 +3,7 @@ package com.cyksj.model.views;
 import com.cyksj.model.entity.GoodsDon;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -57,7 +58,7 @@ public class GoodsDonViews {
      * 分类
      * 1、AI  2、流媒体
      */
-    private Integer category;
+    private Long category;
 
     /**
      * 二级分类
@@ -122,6 +123,12 @@ public class GoodsDonViews {
      */
     private String recommendGoods;
 
+    @DbIgnore
+    private Integer sold;
+
+    @JsonIgnore
+    private Integer virtualSold;
+
     @DbIgnore
     private List<GoodsDonSkuFrontView> skuList;
 

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListView.java

@@ -62,7 +62,7 @@ public class GoodsFrontListView {
 	 * 1、AI  2、流媒体
 	 */
 	@DbField("g.category")
-	private Integer category;
+	private Long category;
 
 	@DbField("g.second_type")
 	private Integer secondType;

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/GoodsHomePageView.java

@@ -57,7 +57,7 @@ public class GoodsHomePageView {
 	 * 1、AI  2、流媒体
 	 */
 	@DbField("g.category")
-	private Integer category;
+	private Long category;
 
 	/**
 	 * 最低规格价格

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementAvailableGoodsView.java

@@ -19,6 +19,9 @@ public class HomeManagementAvailableGoodsView {
 	@DbField("g.id")
 	private Long goodsId;
 
+	@DbField("g.category")
+	private Long category;
+
 	@DbField("g.type")
 	private Long goodsType;
 

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementConfigView.java

@@ -32,6 +32,9 @@ public class HomeManagementConfigView {
 	@DbField("hc.goods_id")
 	private Long goodsId;
 
+	@DbField("hc.url")
+	private String url;
+
 	@DbField("g.title")
 	private String goodsTitle;
 

+ 6 - 1
netflix-dao/src/main/java/com/cyksj/model/views/HomeManagementFrontView.java

@@ -3,6 +3,7 @@ package com.cyksj.model.views;
 import com.cyksj.model.entity.HomeManagementConfig;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -15,8 +16,9 @@ import lombok.Setter;
 @Getter
 @Setter
 @SearchBean(tables = "(select * from home_management_config where status is true and deleted is true) hc left join goods_don g on g.id = hc.goods_id",
-		where = "g.deleted is true and g.status is true",
+		where = ":condition:",
 		orderBy = "hc.sorted desc")
+@JsonInclude(JsonInclude.Include.NON_NULL)
 public class HomeManagementFrontView {
 	@DbField("hc.id")
 	private Long id;
@@ -30,6 +32,9 @@ public class HomeManagementFrontView {
 	@DbField("g.title")
 	private String goodsTitle;
 
+	@DbField("g.logo")
+	private String logo;
+
 	@DbField("hc.url")
 	private String url;
 

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java

@@ -66,7 +66,7 @@ public class RenewalView {
     private String img;
 
     @DbField("g.category")
-    private Integer category;
+    private Long category;
 
     @DbField("g.type")
     @JsonIgnore

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeRateView.java

@@ -18,7 +18,7 @@ import lombok.Setter;
 public class UserDistributeRateView {
 
 	@DbField("g.category")
-	private Integer category;
+	private Long category;
 
 	@DbField("g.title")
 	private String title;

+ 13 - 0
netflix-service/src/main/java/com/cyksj/service/home/ClickRecordFrontService.java

@@ -0,0 +1,13 @@
+package com.cyksj.service.home;
+
+import com.cyksj.model.request.ClickRecordReq;
+
+/*
+ *项目名: netflix
+ *文件名: ClickRecordFrontService
+ *创建者: JavaZou
+ *创建时间:2023/8/17 18:07
+ */
+public interface ClickRecordFrontService {
+	void click(Long userId, ClickRecordReq request);
+}

+ 0 - 11
netflix-service/src/main/java/com/cyksj/service/home/HomeManagementFrontService.java

@@ -1,11 +0,0 @@
-package com.cyksj.service.home;
-
-/*
- *项目名: netflix
- *文件名: HomeManagementFrontService
- *创建者: JavaZou
- *创建时间:2023/8/17 18:07
- */
-public interface HomeManagementFrontService {
-	void click(Long userId, Long configId);
-}

+ 91 - 0
netflix-service/src/main/java/com/cyksj/service/home/impl/ClickRecordFrontServiceImpl.java

@@ -0,0 +1,91 @@
+package com.cyksj.service.home.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.GoodsClickUserRecordMapper;
+import com.cyksj.mapper.GoodsDonCategoryMapper;
+import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
+import com.cyksj.mapper.manage.home.HomeManagementConfigUserClickRecordMapper;
+import com.cyksj.model.entity.*;
+import com.cyksj.model.request.ClickRecordReq;
+import com.cyksj.service.home.ClickRecordFrontService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/*
+ *项目名: netflix
+ *文件名: ClickRecordFrontServiceImpl
+ *创建者: JavaZou
+ *创建时间:2023/8/17 18:08
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class ClickRecordFrontServiceImpl implements ClickRecordFrontService {
+
+	private final HomeManagementConfigMapper homeManagementConfigMapper;
+
+	private final HomeManagementConfigUserClickRecordMapper homeManagementConfigUserClickRecordMapper;
+
+	private final GoodsDonMapper goodsDonMapper;
+
+	private final GoodsDonCategoryMapper goodsDonCategoryMapper;
+
+	private final GoodsClickUserRecordMapper goodsClickUserRecordMapper;
+
+
+	@Override
+	public void click(Long userId, ClickRecordReq request) {
+		Assert.notNull(request.getType(), "参数错误");
+		if (request.getType() == 1) {
+			clickHomePage(userId, request.getConfigId());
+			return;
+		}
+		if (request.getType() == 2) {
+			clickGoodsCategoryOrGoods(userId, request.getGoodsId(), request.getCategory());
+			return;
+		}
+	}
+
+	public void clickHomePage(Long userId, Long configId) {
+		Assert.notNull(configId, "参数错误");
+		HomeManagementConfig homeManagementConfig = homeManagementConfigMapper.selectById(configId);
+		if (homeManagementConfig == null) {
+			return;
+		}
+		HomeManagementConfigUserClickRecord clickRecord = new HomeManagementConfigUserClickRecord();
+		clickRecord.setConfigId(configId);
+		clickRecord.setUserId(userId);
+		homeManagementConfigUserClickRecordMapper.insert(clickRecord);
+	}
+
+	public void clickGoodsCategoryOrGoods(Long userId, Long goodsId, Long category) {
+		if (goodsId == null && category == null) {
+			throw BusinessRuntimeException.getInstance("参数错误");
+		}
+		GoodsClickUserRecord goodsClickUserRecord;
+		if (goodsId != null) {
+			GoodsDon goodsDon = goodsDonMapper.selectById(goodsId);
+			if (goodsDon != null) {
+				goodsClickUserRecord = new GoodsClickUserRecord();
+				goodsClickUserRecord.setUserId(userId);
+				goodsClickUserRecord.setGoodsId(goodsId);
+				goodsClickUserRecordMapper.insert(goodsClickUserRecord);
+				return;
+			}
+		}
+
+		if (category != null) {
+			GoodsDonCategory goodsDonCategory = goodsDonCategoryMapper.selectById(category);
+			if (goodsDonCategory != null) {
+				goodsClickUserRecord = new GoodsClickUserRecord();
+				goodsClickUserRecord.setUserId(userId);
+				goodsClickUserRecord.setCategory(category);
+				goodsClickUserRecordMapper.insert(goodsClickUserRecord);
+				return;
+			}
+		}
+	}
+}

+ 15 - 6
netflix-service/src/main/java/com/cyksj/service/home/impl/HomeManagementConfigServiceImpl.java

@@ -1,9 +1,11 @@
 package com.cyksj.service.home.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.GoodsDonMapper;
 import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
 import com.cyksj.model.entity.GoodsDon;
@@ -39,21 +41,28 @@ public class HomeManagementConfigServiceImpl extends ServiceImpl<HomeManagementC
 		}
 
 		//首页平台推荐、首页精彩推荐
-		List<Long> goodsIds = config.getGoodsId();
+		List<Long> goodsIds = config.getGoodsIds();
+		if (CollUtil.isEmpty(goodsIds)) {
+			throw BusinessRuntimeException.getInstance("请选择对应的平台");
+		}
 		goodsIds.forEach(goodsId -> {
 			GoodsDon goodsDon = goodsDonMapper.selectById(goodsId);
 			if (goodsDon == null || !goodsDon.getStatus()) {
 				return;
 			}
 			HomeManagementConfig homeManagementConfig = this.getOne(Wrappers.lambdaQuery(HomeManagementConfig.class)
+					.ne(config.getId() != null, HomeManagementConfig::getId, config.getId())
 					.eq(HomeManagementConfig::getGoodsId, goodsId)
 					.eq(HomeManagementConfig::getType, config.getType())
-					.eq(HomeManagementConfig::getDeleted, true));
-			if (homeManagementConfig == null) {
-				homeManagementConfig = new HomeManagementConfig();
-				homeManagementConfig.setGoodsId(goodsId);
-				this.save(homeManagementConfig);
+					.eq(HomeManagementConfig::getDeleted, true).last("limit 1"));
+			if (homeManagementConfig != null) {
+				return;
 			}
+			homeManagementConfig = new HomeManagementConfig();
+			BeanUtil.copyProperties(config, homeManagementConfig);
+			homeManagementConfig.setGoodsId(goodsId);
+			homeManagementConfig.setType(config.getType());
+			this.saveOrUpdate(homeManagementConfig);
 		});
 	}
 

+ 0 - 38
netflix-service/src/main/java/com/cyksj/service/home/impl/HomeManagementFrontServiceImpl.java

@@ -1,38 +0,0 @@
-package com.cyksj.service.home.impl;
-
-import com.cyksj.mapper.manage.home.HomeManagementConfigMapper;
-import com.cyksj.mapper.manage.home.HomeManagementConfigUserClickRecordMapper;
-import com.cyksj.model.entity.HomeManagementConfig;
-import com.cyksj.model.entity.HomeManagementConfigUserClickRecord;
-import com.cyksj.service.home.HomeManagementFrontService;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/*
- *项目名: netflix
- *文件名: HomeManagementFrontServiceImpl
- *创建者: JavaZou
- *创建时间:2023/8/17 18:08
- */
-@Service
-@RequiredArgsConstructor
-@Slf4j
-public class HomeManagementFrontServiceImpl implements HomeManagementFrontService {
-
-	private final HomeManagementConfigMapper homeManagementConfigMapper;
-
-	private final HomeManagementConfigUserClickRecordMapper homeManagementConfigUserClickRecordMapper;
-
-	@Override
-	public void click(Long userId, Long configId) {
-		HomeManagementConfig homeManagementConfig = homeManagementConfigMapper.selectById(configId);
-		if (homeManagementConfig == null) {
-			return;
-		}
-		HomeManagementConfigUserClickRecord clickRecord = new HomeManagementConfigUserClickRecord();
-		clickRecord.setConfigId(configId);
-		clickRecord.setUserId(userId);
-		homeManagementConfigUserClickRecordMapper.insert(clickRecord);
-	}
-}

+ 4 - 4
netflix-service/src/main/java/com/cyksj/service/mange/statistics/impl/StatisticsDataServiceImpl.java

@@ -474,20 +474,20 @@ public class StatisticsDataServiceImpl implements StatisticsDataService {
 		excelMonthlyDistributeOrderData.setMonthDsFAmountOfOrder(monthDsFAmountOfOrder);
 		//自然渠道
 		//流媒体
-		BigDecimal monthStreamingAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 2, startDate, endDate);
+		BigDecimal monthStreamingAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 2l, startDate, endDate);
 		excelMonthlyDistributeOrderData.setMonthStreamingAmountOfOrder(monthStreamingAmountOfOrder);
 		// AI销售金额
-		BigDecimal monthAiAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 1, startDate, endDate);
+		BigDecimal monthAiAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, null, 1l, startDate, endDate);
 		excelMonthlyDistributeOrderData.setMonthAiAmountOfOrder(monthAiAmountOfOrder);
 		//设备销售金额
 		BigDecimal monthOfEqAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(1, 2, null, startDate, endDate);
 		excelMonthlyDistributeOrderData.setMonthOfEqAmountOfOrder(monthOfEqAmountOfOrder);
 		//渠道商+个人分销
 		//流媒体
-		BigDecimal monthOfSpecStreamingAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 2, startDate, endDate);
+		BigDecimal monthOfSpecStreamingAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 2l, startDate, endDate);
 		excelMonthlyDistributeOrderData.setMonthOfSpecStreamingAmountOfOrder(monthOfSpecStreamingAmountOfOrder);
 		// AI销售金额
-		BigDecimal monthOfSpecAiAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 1, startDate, endDate);
+		BigDecimal monthOfSpecAiAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, null, 1l, startDate, endDate);
 		excelMonthlyDistributeOrderData.setMonthOfSpecAiAmountOfOrder(monthOfSpecAiAmountOfOrder);
 		//设备销售金额
 		BigDecimal monthOfSpecEqAmountOfOrder = statisticsExportMapper.getMonthGoodsTypeAmountOfOrderByType(2, 2, null, startDate, endDate);

+ 109 - 78
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -7,7 +7,6 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.servlet.ServletUtil;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.util.Jsons;
@@ -19,10 +18,10 @@ import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.RegisterOrderDonMapper;
 import com.cyksj.mapper.SysConfigMapper;
 import com.cyksj.model.entity.*;
-import com.cyksj.model.request.HomeManagementClickRecordReq;
+import com.cyksj.model.request.ClickRecordReq;
 import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
-import com.cyksj.service.home.HomeManagementFrontService;
+import com.cyksj.service.home.ClickRecordFrontService;
 import com.cyksj.web.util.StpUserUtil;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -34,9 +33,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Stream;
 
 /**
  * @author chan
@@ -62,15 +61,32 @@ public class GoodsDonController {
 
     private final SysConfigMapper sysConfigMapper;
 
-    private final HomeManagementFrontService homeManagementFrontService;
+    private final ClickRecordFrontService clickRecordFrontService;
 
     /**
      * 获取平台商品分类
      */
     @GetMapping("/get/category")
-    public Result<SearchResult<GoodsDonCategoryFrontView>> getCategory() {
-        SearchResult<GoodsDonCategoryFrontView> search = beanSearcher.search(GoodsDonCategoryFrontView.class, MapUtils.flatBuilder(request.getParameterMap())
-                .build());
+    public Result<List<GoodsDonCategoryFrontView>> getCategory() {
+        String key = RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "category";
+        Object o = redisService.get(key);
+        List<GoodsDonCategoryFrontView> list;
+        if (o == null) {
+            list = beanSearcher.searchAll(GoodsDonCategoryFrontView.class, MapUtils.flatBuilder(request.getParameterMap())
+                    .build());
+            redisService.setNx(key, list, 30 * 60l);
+            o = redisService.get(key);
+        }
+        list = Jsons.parseList(o, GoodsDonCategoryFrontView.class);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(list);
+    }
+
+    /**
+     * 商品搜索
+     */
+    @GetMapping("/search")
+    public Result<SearchResult<GoodsDonSearchView>> search() {
+        SearchResult<GoodsDonSearchView> search = beanSearcher.search(GoodsDonSearchView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(search);
     }
 
@@ -290,6 +306,10 @@ public class GoodsDonController {
     public Result<GoodsDonViews> getDetail(@PathVariable Long id) {
         GoodsDonViews views = beanSearcher.searchFirst(GoodsDonViews.class, MapUtils.builder().field(GoodsDonViews::getId, id).build());
 
+        Integer sold = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
+                .eq(OrderDon::getGoodsId, views.getId()).notIn(OrderDon::getStatus, Constant.noOrderStatus));
+        views.setSold(sold + views.getVirtualSold());
+
         views.setSpecs(beanSearcher.searchFirst(GoodsDonSpecFrontView.class, MapUtils.builder().field(GoodsDonSpecFrontView::getGoodsId, views.getId()).build()));
         MapBuilder builder = MapUtils.builder().field(GoodsDonSku::getGoodsId, views.getId()).field(GoodsDonSku::getStatus, true);
 
@@ -365,6 +385,42 @@ public class GoodsDonController {
         return GatewayResponse.SUCCESS.newBuilder().toResult(search);
     }
 
+    /**
+     * 获取首页配置列表
+     */
+    @GetMapping("/get/homeManage")
+    public Result<Map<String, List<HomeManagementFrontView>>> getHomeManagementFrontPage() {
+        String key = RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "homeManage";
+        Object o = redisService.get(key);
+        if (o == null) {
+            String condition = "g.deleted is true and g.status is true";
+            Map<String, List<HomeManagementFrontView>> map = new ConcurrentHashMap<>();
+            Stream.of(HomeManagementConfig.Type.values())
+                    .forEach(type -> {
+                        MapBuilder builder = MapUtils.builder()
+                                .field(HomeManagementConfig::getType, type.name());
+                        if (type == HomeManagementConfig.Type.ex || type == HomeManagementConfig.Type.vg) {
+                            builder.put("condition", condition);
+                        }
+                        List<HomeManagementFrontView> homeManagementFrontViews = beanSearcher.searchAll(HomeManagementFrontView.class, builder.build());
+                        map.putIfAbsent(type.name(), homeManagementFrontViews);
+                    });
+            redisService.setNx(key, map, 50 * 60l);
+            return GatewayResponse.SUCCESS.newBuilder().toResult(map);
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult(Jsons.parseObject(o, Map.class));
+    }
+
+    /**
+     * 首页点击 记录
+     */
+    @PostMapping("/homePage/click")
+    public Result<String> homeManageClick(@RequestBody ClickRecordReq request) {
+        Long userId = StpUserUtil.getUserIdAfterLogin();
+        clickRecordFrontService.click(userId, request);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
     public List<Long> getFilterGoodsIds() {
         //过滤杭州Ai ChatGPT平台
         //获取当前ip地址
@@ -389,74 +445,49 @@ public class GoodsDonController {
      * @return
      */
     public String getPayMsgTime(Long goodsId, DateTime now, Integer type) {
-	    Date startTime = null;
-	    StringBuilder notifyMsg = new StringBuilder();
-	    if (type == 1) {
-		    OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
-				    .eq(OrderDon::getGoodsId, goodsId)
-				    .notIn(OrderDon::getStatus, Constant.noOrderStatus).select(OrderDon::getCreatedTime, OrderDon::getPayTime, OrderDon::getId)
-				    .orderByDesc(OrderDon::getId)
-				    .last("limit 1"));
-		    if (orderDon == null) {
-			    notifyMsg.append("点击购买立即上车");
-			    return notifyMsg.toString();
-		    }
-		    startTime = orderDon.getPayTime() != null ? orderDon.getPayTime() : orderDon.getCreatedTime();
-	    } else if (type == 2) {
-		    RegisterOrderDon orderDon = registerOrderDonMapper.selectOne(Wrappers.lambdaQuery(RegisterOrderDon.class)
-				    .eq(RegisterOrderDon::getGoodsId, goodsId)
-				    .notIn(RegisterOrderDon::getStatus, Constant.noOrderStatus).select(RegisterOrderDon::getCreatedTime, RegisterOrderDon::getPayTime, RegisterOrderDon::getId)
-				    .orderByDesc(RegisterOrderDon::getId)
-				    .last("limit 1"));
-		    if (orderDon == null) {
-			    return null;
-		    }
-		    startTime = orderDon.getPayTime() != null ? orderDon.getPayTime() : orderDon.getCreatedTime();
-	    }
-	    long hour = DateUtil.between(startTime, now, DateUnit.HOUR);
-	    if (hour == 0) {
-		    long minute = DateUtil.between(startTime, now, DateUnit.MINUTE);
-		    if (minute == 0) {
-			    notifyMsg.append("1分钟");
-		    } else {
-			    notifyMsg.append(minute);
-			    notifyMsg.append("分钟");
-		    }
-	    } else {
-		    if (hour > 3) {
-			    int hours = RandomUtil.randomInt(3) + 1;
-			    notifyMsg.append(hours);
-		    } else {
-			    notifyMsg.append(hour);
-		    }
-		    notifyMsg.append("小时");
-	    }
-	    notifyMsg.append("前有人购买");
-	    return notifyMsg.toString();
-    }
-
-    /**
-     * 获取首页配置列表
-     */
-    @GetMapping("/get/homeManage")
-    public Result<List<HomeManagementFrontView>> getHomeManagementFrontPage() {
-        List<HomeManagementFrontView> views = beanSearcher.searchAll(HomeManagementFrontView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
-        return GatewayResponse.SUCCESS.newBuilder().toResult(views);
-    }
-
-    /**
-     * 记录首页配置 用户点击记录
-     */
-    @PostMapping("/homeManage/click")
-    public Result<String> homeManageClick(@RequestBody HomeManagementClickRecordReq request) {
-        Long userId = null;
-        Boolean isLogin = request.getIsLogin();
-        Long configId = request.getConfigId();
-        Assert.notNull(configId, "参数错误");
-        if (isLogin != null && isLogin) {
-            userId = StpUserUtil.getLoginIdAsLong();
+        Date startTime = null;
+        StringBuilder notifyMsg = new StringBuilder();
+        if (type == 1) {
+            OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
+                    .eq(OrderDon::getGoodsId, goodsId)
+                    .notIn(OrderDon::getStatus, Constant.noOrderStatus).select(OrderDon::getCreatedTime, OrderDon::getPayTime, OrderDon::getId)
+                    .orderByDesc(OrderDon::getId)
+                    .last("limit 1"));
+            if (orderDon == null) {
+                notifyMsg.append("点击购买立即上车");
+                return notifyMsg.toString();
+            }
+            startTime = orderDon.getPayTime() != null ? orderDon.getPayTime() : orderDon.getCreatedTime();
+        } else if (type == 2) {
+            RegisterOrderDon orderDon = registerOrderDonMapper.selectOne(Wrappers.lambdaQuery(RegisterOrderDon.class)
+                    .eq(RegisterOrderDon::getGoodsId, goodsId)
+                    .notIn(RegisterOrderDon::getStatus, Constant.noOrderStatus).select(RegisterOrderDon::getCreatedTime, RegisterOrderDon::getPayTime, RegisterOrderDon::getId)
+                    .orderByDesc(RegisterOrderDon::getId)
+                    .last("limit 1"));
+            if (orderDon == null) {
+                return null;
+            }
+            startTime = orderDon.getPayTime() != null ? orderDon.getPayTime() : orderDon.getCreatedTime();
         }
-        homeManagementFrontService.click(userId, configId);
-        return GatewayResponse.SUCCESS.newBuilder().toResult();
+        long hour = DateUtil.between(startTime, now, DateUnit.HOUR);
+        if (hour == 0) {
+            long minute = DateUtil.between(startTime, now, DateUnit.MINUTE);
+            if (minute == 0) {
+                notifyMsg.append("1分钟");
+            } else {
+                notifyMsg.append(minute);
+                notifyMsg.append("分钟");
+            }
+        } else {
+            if (hour > 3) {
+                int hours = RandomUtil.randomInt(3) + 1;
+                notifyMsg.append(hours);
+            } else {
+                notifyMsg.append(hour);
+            }
+            notifyMsg.append("小时");
+        }
+        notifyMsg.append("前有人购买");
+        return notifyMsg.toString();
     }
 }

+ 0 - 4
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java

@@ -2,7 +2,6 @@ package com.cyksj.web.controller.manage;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
@@ -15,13 +14,10 @@ import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.corp.CorpUserFollowRelationMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.UserView;
-import com.cyksj.model.request.HomeManagementClickRecordReq;
 import com.cyksj.model.request.UserFuncPropertyReq;
 import com.cyksj.model.views.*;
-import com.cyksj.service.home.HomeManagementFrontService;
 import com.cyksj.service.relation.GroupRelationClearService;
 import com.cyksj.service.user.UserBindRelationService;
-import com.cyksj.web.util.StpUserUtil;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.param.Operator;

+ 129 - 4
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonCategoryController.java

@@ -1,8 +1,18 @@
 package com.cyksj.web.controller.manage.goods;
 
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsClickUserRecordMapper;
+import com.cyksj.model.entity.GoodsClickUserRecord;
+import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.GoodsDonCategory;
+import com.cyksj.model.views.GoodsDonCategoryGoodsView;
+import com.cyksj.model.views.GoodsDonCategoryView;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.mange.CmsGoodsDonService;
 import com.cyksj.service.mange.GoodsDonCategoryService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -13,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Set;
 
 /*
  *项目名: netflix
@@ -30,33 +41,147 @@ public class CmsGoodsDonCategoryController {
 
 	private final HttpServletRequest request;
 
+	private final GoodsClickUserRecordMapper goodsClickUserRecordMapper;
+
+	private final CmsGoodsDonService goodsDonService;
+
+	private final RedisService redisService;
+
+	/**
+	 * 新增分类
+	 */
 	@PostMapping("/post")
 	public Result<String> saveGoodsDonCategory(@RequestBody @Validated GoodsDonCategory category) {
 		goodsDonCategoryService.saveOrUpdateGoods(category);
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
+	/**
+	 * 编辑分类
+	 */
 	@PutMapping("/put")
-	public Result<String> updateGoodsDonCategory(@RequestBody @Validated GoodsDonCategory category) {
-		goodsDonCategoryService.saveOrUpdateGoods(category);
+	public Result<String> updateGoodsDonCategory(@RequestBody List<GoodsDonCategory> categorys) {
+		categorys.forEach(category -> goodsDonCategoryService.saveOrUpdateGoods(category));
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "category" + "*");
+		redisService.del(keys.toArray(String[]::new));
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
+	/**
+	 * 分类上下架
+	 */
+	@PutMapping("/update/status/{id}")
+	public Result<String> updateStatusById(@PathVariable Long id) {
+		GoodsDonCategory byId = goodsDonCategoryService.getById(id);
+		Assert.notNull(byId, "分类不存在");
+		byId.setStatus(!byId.getStatus());
+		goodsDonCategoryService.updateById(byId);
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "category" + "*");
+		redisService.del(keys.toArray(String[]::new));
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 根据id删除分类
+	 */
 	@DeleteMapping("/del/{id}")
 	public Result<String> del(@PathVariable Long id) {
+		int count = goodsDonService.count(Wrappers.lambdaQuery(GoodsDon.class)
+				.eq(GoodsDon::getCategory, id));
+		if (count > 0) {
+			throw BusinessRuntimeException.getInstance("存在该分类下平台");
+		}
 		goodsDonCategoryService.delById(id);
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "category" + "*");
+		redisService.del(keys.toArray(String[]::new));
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 修改分类排序
+	 */
+	@PutMapping("/sort")
+	public Result<String> sortCategory(@RequestBody GoodsDonCategory category) {
+		Long id = category.getId();
+		Assert.notNull(id, "分类不存在");
+		GoodsDonCategory byId = goodsDonCategoryService.getById(id);
+		if (category.getSorted() != null) {
+			byId.setSorted(category.getSorted());
+			goodsDonCategoryService.updateById(byId);
+			Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "category" + "*");
+			redisService.del(keys.toArray(String[]::new));
+		}
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
+	/**
+	 * 分类列表 分页
+	 */
 	@GetMapping("/get")
-	public Result<SearchResult<GoodsDonCategory>> getCategory() {
-		SearchResult<GoodsDonCategory> search = beanSearcher.search(GoodsDonCategory.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+	public Result<SearchResult<GoodsDonCategoryView>> getCategory() {
+		SearchResult<GoodsDonCategoryView> search = beanSearcher.search(GoodsDonCategoryView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		search.getDataList().forEach(data->{
+			Integer count = goodsClickUserRecordMapper.selectCount(Wrappers.lambdaQuery(GoodsClickUserRecord.class)
+					.eq(GoodsClickUserRecord::getCategory, data.getId()));
+			data.setClick(count);
+		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
 
+	/**
+	 * 分类平台列表
+	 */
+	@GetMapping("/get/goods")
+	public Result<SearchResult<GoodsDonCategoryGoodsView>> getCategoryGoodsView() {
+		SearchResult<GoodsDonCategoryGoodsView> search = beanSearcher.search(GoodsDonCategoryGoodsView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		search.getDataList().forEach(data->{
+			Integer count = goodsClickUserRecordMapper.selectCount(Wrappers.lambdaQuery(GoodsClickUserRecord.class)
+					.eq(GoodsClickUserRecord::getGoodsId, data.getGoodsId()));
+			data.setClick(count);
+		});
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+	/**
+	 * 修改平台排序
+	 */
+	@PutMapping("/sort/goods")
+	public Result<String> sortGoods(@RequestBody GoodsDonCategoryGoodsView request) {
+		Long goodsId = request.getGoodsId();
+		Integer sorted = request.getSorted();
+		Assert.notNull(goodsId, "平台不存在");
+		GoodsDon byId = goodsDonService.getById(goodsId);
+		if (request.getSorted() != null) {
+			byId.setSortBy(sorted);
+			goodsDonService.updateById(byId);
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 获取所有分类列表
+	 */
 	@GetMapping("/get/all")
 	public Result<List<GoodsDonCategory>> getAll() {
 		List<GoodsDonCategory> search = beanSearcher.searchAll(GoodsDonCategory.class, MapUtils.flatBuilder(request.getParameterMap()).build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
+
+	/**
+	 * 获取所有分类下平台 树形结构
+	 */
+	@GetMapping("/get/goods/tree")
+	public Result<List<GoodsDonCategory>> getCategoryGoodsTreeView() {
+		List<GoodsDonCategory> all = beanSearcher.searchAll(GoodsDonCategory.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(GoodsDonCategory::getStatus, true)
+				.orderBy(GoodsDonCategory::getSorted).desc()
+				.build());
+		all.forEach(data -> {
+			List<GoodsDonCategoryGoodsView> categoryGoodsViewList = beanSearcher.searchAll(GoodsDonCategoryGoodsView.class, MapUtils.
+					builder().field(GoodsDonCategoryGoodsView::getCategory, data.getId())
+					.field(GoodsDonCategoryGoodsView::getStatus, true).build());
+			data.setCategoryGoodsList(categoryGoodsViewList);
+		});
+		return GatewayResponse.SUCCESS.newBuilder().toResult(all);
+	}
 }

+ 15 - 3
netflix-web/src/main/java/com/cyksj/web/controller/manage/home/HomeManageConfigController.java

@@ -9,6 +9,7 @@ import com.cyksj.model.entity.HomeManagementConfigUserClickRecord;
 import com.cyksj.model.request.HomeManageConfigReq;
 import com.cyksj.model.views.HomeManagementAvailableGoodsView;
 import com.cyksj.model.views.HomeManagementConfigView;
+import com.cyksj.redis.RedisService;
 import com.cyksj.service.home.HomeManagementConfigService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -18,8 +19,9 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Set;
 
-/* 首页配置管理
+/*
  *项目名: netflix
  *文件名: HomeManageConfigController
  *创建者: JavaZou
@@ -35,6 +37,8 @@ public class HomeManageConfigController {
 
 	private final HttpServletRequest request;
 
+	private final RedisService redisService;
+
 	/**
 	 * 新增首页配置
 	 */
@@ -50,6 +54,8 @@ public class HomeManageConfigController {
 	@PutMapping("/put")
 	public Result<String> updateConfig(@RequestBody HomeManageConfigReq config) {
 		homeManagementConfigService.saveOrUpdateConfig(config);
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "homeManage" + "*");
+		redisService.del(keys.toArray(String[]::new));
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -63,6 +69,8 @@ public class HomeManageConfigController {
 		Assert.notNull(byId, "配置不存在");
 		byId.setStatus(!byId.getStatus());
 		homeManagementConfigService.updateById(byId);
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "homeManage" + "*");
+		redisService.del(keys.toArray(String[]::new));
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -77,6 +85,8 @@ public class HomeManageConfigController {
 		Integer sorted = config.getSorted();
 		byId.setSorted(sorted);
 		homeManagementConfigService.updateById(byId);
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "homeManage" + "*");
+		redisService.del(keys.toArray(String[]::new));
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
@@ -86,9 +96,11 @@ public class HomeManageConfigController {
 	@DeleteMapping("/del/{id}")
 	public Result<String> delById(@PathVariable Long id) {
 		homeManagementConfigService.update(null, Wrappers.lambdaUpdate(HomeManagementConfig.class)
-						.set(HomeManagementConfig::getDeleted, true)
+						.set(HomeManagementConfig::getDeleted, false)
 						.eq(HomeManagementConfig::getId, id)
-						.eq(HomeManagementConfig::getDeleted, false));
+						.eq(HomeManagementConfig::getDeleted, true));
+		Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "homeManage" + "*");
+		redisService.del(keys.toArray(String[]::new));
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 

+ 7 - 0
netflix-web/src/main/java/com/cyksj/web/util/StpUserUtil.java

@@ -86,6 +86,13 @@ public class StpUserUtil {
         return stpLogic.isLogin();
     }
 
+    public static Long getUserIdAfterLogin() {
+        if (isLogin()) {
+            return StpUserUtil.getLoginIdAsLong();
+        }
+        return null;
+    }
+
     public static void checkLogin() {
         stpLogic.checkLogin();
     }