Explorar el Código

fix 推荐平台

zoujiajian hace 3 años
padre
commit
fa0b572d0a

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GroupsRelationMapper.java

@@ -2,9 +2,11 @@ package com.cyksj.mapper;
 
 import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.views.GroupsRelationUserView;
+import com.cyksj.model.views.UserRecommendGoodsFrontView;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
@@ -45,4 +47,8 @@ public interface GroupsRelationMapper extends BaseMapper<GroupsRelation> {
 	List<GroupsRelation> selectExpiredChatGPTRelation(@Param("nextBeginDay") DateTime nextBeginDay, @Param("list") List<Long> gptSkuIds);
 
 	List<GroupsRelationUserView> getUserRelationUserViews(@Param("groupsId") Long groupsId, @Param("relationId") Long relationId, @Param("userId") Long userId, @Param("status") List<GroupsRelation.Status> status);
+
+	List<Long> getTicketGoodsId(@Param("list") List<Long> userIds, @Param("status") List<String> status);
+
+	Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(@Param("page") Page<UserRecommendGoodsFrontView> page, @Param("list") List<Long> filter_goods_id, @Param("isPayNf") Boolean isPayNf);
 }

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/TicketAdvertiseConfig.java

@@ -42,6 +42,9 @@ public class TicketAdvertiseConfig extends BaseEntity {
 	@DbField("tc.pic")
 	private String pic;
 
+	@DbField("tc.sorted")
+	private Integer sorted;
+
 	@DbField("tc.click")
 	private Integer click;
 

+ 33 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserRecommendGoodsFrontView.java

@@ -0,0 +1,33 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/*
+ *项目名: netflix
+ *文件名: UserRecommendGoodsFrontView
+ *创建者: JavaZou
+ *创建时间:2023/7/17 16:34
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don g"
+		, where = "g.type = 2 and g.deleted is true and g.status is true")
+public class UserRecommendGoodsFrontView {
+	private Long goodsId;
+
+	private String title;
+
+	private String img;
+
+	private String tags;
+
+	private Integer months;
+
+	private Integer days;
+
+	private BigDecimal price;
+}

+ 33 - 0
netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml

@@ -156,4 +156,37 @@
         </foreach>
         limit 4)s2)gr inner join user u on u.id = gr.user_id
     </select>
+
+    <select id="getTicketGoodsId" resultType="java.lang.Long">
+        select sku.goods_id from (select * from `groups_relation` where status in
+        <foreach collection="status" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        and user_id in
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>)gr left join groups_trips gt on gt.id = gr.groups_id
+        left join goods_don_sku sku on sku.id = gt.sku_id
+    </select>
+
+    <select id="getRecommendGoodsViews" resultType="com.cyksj.model.views.UserRecommendGoodsFrontView">
+        select * from (select
+        id as goodsId,
+        title,
+        img,
+        tags,
+        sort_by,
+        (
+        case when type = 2 and ${isPayNf} then 999
+        when type = 2 and !${isPayNf} then 666
+        when category = 1 then 888
+        when category = 2 then 777
+        else 666 end
+        ) as sorted
+        from `goods_don` where id not in
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        and deleted is true and status is true) s order by s.sorted desc,sort_by desc
+    </select>
 </mapper>

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/relation/GroupRelationFrontService.java

@@ -1,7 +1,9 @@
 package com.cyksj.service.relation;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.views.RenewalView;
+import com.cyksj.model.views.UserRecommendGoodsFrontView;
 
 import java.util.List;
 
@@ -17,4 +19,6 @@ public interface GroupRelationFrontService {
 	Boolean isJoinCorpWx(Long userId, Boolean isJoin, Boolean noCoupon);
 
 	GroupsRelation getSimilarExpiredGroupRelation(Long skuId, Integer months, List<Long> errorsRelationIds);
+
+	Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(Boolean isPayNf, List<Long> filter_goods_id, Integer start, Integer limit);
 }

+ 7 - 4
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -5,15 +5,13 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.GroupsRelationMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.model.entity.*;
-import com.cyksj.model.views.CorpUserFollowView;
-import com.cyksj.model.views.GoodsDonViews;
-import com.cyksj.model.views.GroupsRelationUserView;
-import com.cyksj.model.views.RenewalView;
+import com.cyksj.model.views.*;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.user.UserService;
@@ -148,4 +146,9 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		}
 		return relation;
 	}
+
+	@Override
+	public Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(Boolean isPayNf, List<Long> filter_goods_id, Integer start, Integer limit) {
+		return groupsRelationMapper.getRecommendGoodsViews(new Page<>(start, limit),filter_goods_id, isPayNf);
+	}
 }

+ 28 - 1
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -8,7 +8,9 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.annotation.NoSubmit;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.snowflake.Sequence;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
@@ -441,7 +443,10 @@ public class GroupRelationController {
     @GetMapping("/get/advertise/{goodsId}")
     public Result<List<TicketAdvertiseConfigFrontView>> getTicketAdvertiseConfig(@PathVariable Long goodsId) {
         List<TicketAdvertiseConfigFrontView> views = beanSearcher.searchAll(TicketAdvertiseConfigFrontView.class, MapUtils.flatBuilder(request.getParameterMap())
-                .field(TicketAdvertiseConfig::getGoodsId, goodsId).build());
+                .field(TicketAdvertiseConfig::getGoodsId, goodsId)
+                .orderBy(TicketAdvertiseConfig::getSorted).desc()
+                .orderBy(TicketAdvertiseConfig::getId).desc()
+                .build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(views);
     }
 
@@ -454,4 +459,26 @@ public class GroupRelationController {
         ticketAdvertiseConfigClickRecordService.recordUserClickTicketAdvertise(userId, configId);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
+
+    /**
+     * 推荐平台
+     */
+    @GetMapping("/get/recommend/goods")
+    public Result<Page<UserRecommendGoodsFrontView>> getRecommendGoodsViews(@RequestParam(defaultValue = "0") Integer start, @RequestParam(defaultValue = "5") Integer limit) {
+        //推荐用户未购买的车票平台 优先展示ai类平台 然后是影视流媒体
+        long userId = StpUserUtil.getLoginIdAsLong();
+        List<Long> userIds = userService.getRelationUserIdList(userId, null);
+        List<Long> filter_goods_id = relationMapper.getTicketGoodsId(userIds, List.of("validity", "overdue", "outside"));
+        //用户是否购买过奈飞产品
+        int count = orderDonService.count(Wrappers.lambdaQuery(OrderDon.class)
+                .eq(OrderDon::getGoodsId, 1)
+                .notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
+        Boolean isPayNf = false;
+        if (count > 0) {
+            //优先展示路由器、ai、流媒体
+            isPayNf = true;
+        }
+        Page<UserRecommendGoodsFrontView> page = groupRelationFrontService.getRecommendGoodsViews(isPayNf, filter_goods_id, start, limit);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(page);
+    }
 }

+ 4 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/sys/TicketAdvertiseConfigController.java

@@ -66,7 +66,10 @@ public class TicketAdvertiseConfigController {
 	 */
 	@GetMapping("/advertise/get")
 	public Result<SearchResult<TicketAdvertiseConfig>> getAdvertiseConfig() {
-		SearchResult<TicketAdvertiseConfig> search = beanSearcher.search(TicketAdvertiseConfig.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		SearchResult<TicketAdvertiseConfig> search = beanSearcher.search(TicketAdvertiseConfig.class, MapUtils.flatBuilder(request.getParameterMap())
+				.orderBy(TicketAdvertiseConfig::getSorted).desc()
+				.orderBy(TicketAdvertiseConfig::getId).desc()
+				.build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}