浏览代码

修改保底判断方式,修改保底数据插入方式

xueyiming 7 月之前
父节点
当前提交
c89a8f97ef

+ 2 - 0
we-com-server/src/main/java/com/tzld/piaoquan/wecom/common/constant/TimeConstant.java

@@ -6,4 +6,6 @@ public interface TimeConstant {
     Integer HOUR = 60 * 60;
     Integer DAY = 60 * 60 * 24;
 
+    Long MILLISECOND_DAY = (long) DAY * 1000;
+
 }

+ 49 - 11
we-com-server/src/main/java/com/tzld/piaoquan/wecom/job/WeComMessageDataJob.java

@@ -25,6 +25,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.tzld.piaoquan.wecom.common.constant.RedisConstant.GUARANTEED_MINIPROGRAM_KEY;
+import static com.tzld.piaoquan.wecom.common.constant.TimeConstant.MILLISECOND_DAY;
 
 @Component
 public class WeComMessageDataJob {
@@ -49,8 +50,12 @@ public class WeComMessageDataJob {
     //保底视频列表
     List<Long> guaranteedVideoIdList = new ArrayList<>();
 
+    //从缓存中获取的保底视频数量
+    int getGuaranteedVideoIdNum = 0;
+
     //初始化操作
     void init() {
+        //历史优质视频获取
         String sql = String.format("SELECT * FROM loghubods.history_good_video_can_push_user_list where dt = %s;", DateUtil.getBeforeDayDateString());
         List<Record> recordList = OdpsUtil.getOdpsData(sql);
         if (CollectionUtils.isEmpty(recordList)) {
@@ -66,22 +71,36 @@ public class WeComMessageDataJob {
             list.add(pushMessage);
         }
         goodHistoryPushList = list;
-        List<Long> saveVideoIds = Objects.requireNonNull(redisTemplate.opsForList().range(GUARANTEED_MINIPROGRAM_KEY, 0, 2))
+
+        getGuaranteedVideoIdNum = 0;
+        //保底视频获取
+        List<Long> videoIdList = Objects.requireNonNull(redisTemplate.opsForList().range(GUARANTEED_MINIPROGRAM_KEY, 0, -1))
                 .stream().map(o -> (Integer) o).map(String::valueOf).map(Long::parseLong).collect(Collectors.toList());
-        if (CollectionUtils.isEmpty(saveVideoIds)) {
+        if (CollectionUtils.isEmpty(videoIdList)) {
             throw new RuntimeException("保底数据为空");
         }
-        MessageAttachmentExample example = new MessageAttachmentExample();
-        example.createCriteria().andMiniprogramVideoIdIn(saveVideoIds);
-        List<MessageAttachment> messageAttachmentList = messageAttachmentMapper.selectByExample(example);
-        if (CollectionUtils.isEmpty(messageAttachmentList) || messageAttachmentList.size() < saveVideoIds.size()) {
-            throw new RuntimeException("保底数据获取失败");
-        }
-        for (MessageAttachment messageAttachment : messageAttachmentList) {
-            if (messageAttachment.getUpdateTime().compareTo(DateUtil.getThatDayDate()) < 0) {
-                throw new RuntimeException("保底数据不是最新的");
+        List<Long> saveVideoIds = new ArrayList<>();
+        for (Long videoId : videoIdList) {
+            getGuaranteedVideoIdNum++;
+            MessageAttachmentExample example = new MessageAttachmentExample();
+            example.createCriteria().andMiniprogramVideoIdEqualTo(videoId);
+            List<MessageAttachment> messageAttachmentList = messageAttachmentMapper.selectByExample(example);
+            if (CollectionUtils.isEmpty(messageAttachmentList)) {
+                continue;
+            }
+            MessageAttachment messageAttachment = messageAttachmentList.get(0);
+            if (messageAttachment.getSendTime() != null
+                    && DateUtil.dateDifference(new Date(), messageAttachment.getSendTime()) < 180 * MILLISECOND_DAY) {
+                continue;
+            }
+            saveVideoIds.add(videoId);
+            if (saveVideoIds.size() >= MAX_VIDEO_NUM) {
+                break;
             }
         }
+        if (saveVideoIds.size() < MAX_VIDEO_NUM) {
+            throw new RuntimeException("保底数据不足");
+        }
         guaranteedVideoIdList = saveVideoIds;
     }
 
@@ -109,6 +128,23 @@ public class WeComMessageDataJob {
             }
         }
         pushMessage(res);
+        saveGuaranteedVideoIdList(guaranteedVideoIdList);
+    }
+
+    public void saveGuaranteedVideoIdList(List<Long> videoIdList) {
+        MessageAttachmentExample example = new MessageAttachmentExample();
+        example.createCriteria().andMiniprogramVideoIdIn(videoIdList);
+        List<MessageAttachment> messageAttachmentList = messageAttachmentMapper.selectByExample(example);
+        for (MessageAttachment messageAttachment : messageAttachmentList) {
+            MessageAttachment updateMessageAttachment = new MessageAttachment();
+            updateMessageAttachment.setId(messageAttachment.getId());
+            updateMessageAttachment.setSendTime(new Date());
+            messageAttachmentMapper.updateByPrimaryKeySelective(updateMessageAttachment);
+        }
+        //移除从redis中获取的保底数据
+        for (int i = 0; i < getGuaranteedVideoIdNum; i++){
+            redisTemplate.opsForList().leftPop(GUARANTEED_MINIPROGRAM_KEY);
+        }
     }
 
 
@@ -200,5 +236,7 @@ public class WeComMessageDataJob {
         for (JSONObject jsonObject : pushList) {
             messageService.pushMessage(jsonObject);
         }
+
+
     }
 }

+ 11 - 0
we-com-server/src/main/java/com/tzld/piaoquan/wecom/model/po/MessageAttachment.java

@@ -23,6 +23,8 @@ public class MessageAttachment {
 
     private Integer isDelete;
 
+    private Date sendTime;
+
     private Date createTime;
 
     private Date updateTime;
@@ -107,6 +109,14 @@ public class MessageAttachment {
         this.isDelete = isDelete;
     }
 
+    public Date getSendTime() {
+        return sendTime;
+    }
+
+    public void setSendTime(Date sendTime) {
+        this.sendTime = sendTime;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }
@@ -139,6 +149,7 @@ public class MessageAttachment {
         sb.append(", cover=").append(cover);
         sb.append(", miniprogramVideoId=").append(miniprogramVideoId);
         sb.append(", isDelete=").append(isDelete);
+        sb.append(", sendTime=").append(sendTime);
         sb.append(", createTime=").append(createTime);
         sb.append(", updateTime=").append(updateTime);
         sb.append("]");

+ 60 - 0
we-com-server/src/main/java/com/tzld/piaoquan/wecom/model/po/MessageAttachmentExample.java

@@ -776,6 +776,66 @@ public class MessageAttachmentExample {
             return (Criteria) this;
         }
 
+        public Criteria andSendTimeIsNull() {
+            addCriterion("send_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeIsNotNull() {
+            addCriterion("send_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeEqualTo(Date value) {
+            addCriterion("send_time =", value, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeNotEqualTo(Date value) {
+            addCriterion("send_time <>", value, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeGreaterThan(Date value) {
+            addCriterion("send_time >", value, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("send_time >=", value, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeLessThan(Date value) {
+            addCriterion("send_time <", value, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeLessThanOrEqualTo(Date value) {
+            addCriterion("send_time <=", value, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeIn(List<Date> values) {
+            addCriterion("send_time in", values, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeNotIn(List<Date> values) {
+            addCriterion("send_time not in", values, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeBetween(Date value1, Date value2) {
+            addCriterion("send_time between", value1, value2, "sendTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSendTimeNotBetween(Date value1, Date value2) {
+            addCriterion("send_time not between", value1, value2, "sendTime");
+            return (Criteria) this;
+        }
+
         public Criteria andCreateTimeIsNull() {
             addCriterion("create_time is null");
             return (Criteria) this;

+ 1 - 3
we-com-server/src/main/java/com/tzld/piaoquan/wecom/service/Impl/MessageAttachmentServiceImpl.java

@@ -81,10 +81,8 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
             videoList.add(videoId);
         }
         addMiniprogram(messageAttachmentList);
-        redisTemplate.delete(GUARANTEED_MINIPROGRAM_KEY);
-        Collections.reverse(videoList);
         for (Long video : videoList) {
-            redisTemplate.opsForList().leftPush(GUARANTEED_MINIPROGRAM_KEY, video);
+            redisTemplate.opsForList().rightPush(GUARANTEED_MINIPROGRAM_KEY, video);
         }
     }
 }

+ 6 - 0
we-com-server/src/main/java/com/tzld/piaoquan/wecom/utils/DateUtil.java

@@ -1,6 +1,8 @@
 package com.tzld.piaoquan.wecom.utils;
 
 
+import com.tzld.piaoquan.wecom.common.constant.TimeConstant;
+
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
@@ -31,5 +33,9 @@ public class DateUtil {
         return dateFormat.format(today);
     }
 
+    public static Long dateDifference(Date date1, Date date2) {
+        return Math.abs(date1.getTime() - date2.getTime());
+    }
+
 
 }

+ 20 - 5
we-com-server/src/main/resources/mapper/MessageAttachmentMapper.xml

@@ -12,6 +12,7 @@
     <result column="cover" jdbcType="VARCHAR" property="cover" />
     <result column="miniprogram_video_id" jdbcType="BIGINT" property="miniprogramVideoId" />
     <result column="is_delete" jdbcType="INTEGER" property="isDelete" />
+    <result column="send_time" jdbcType="TIMESTAMP" property="sendTime" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
   </resultMap>
@@ -75,7 +76,7 @@
   </sql>
   <sql id="Base_Column_List">
     id, `type`, url, title, `desc`, appid, page, cover, miniprogram_video_id, is_delete, 
-    create_time, update_time
+    send_time, create_time, update_time
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.wecom.model.po.MessageAttachmentExample" resultMap="BaseResultMap">
     select
@@ -114,13 +115,13 @@
     insert into we_com_message_attachment (id, `type`, url, 
       title, `desc`, appid, 
       page, cover, miniprogram_video_id, 
-      create_time, update_time
-      )
+      send_time, create_time,
+      update_time)
     values (#{id,jdbcType=BIGINT}, #{type,jdbcType=INTEGER}, #{url,jdbcType=VARCHAR}, 
       #{title,jdbcType=VARCHAR}, #{desc,jdbcType=VARCHAR}, #{appid,jdbcType=VARCHAR}, 
       #{page,jdbcType=VARCHAR}, #{cover,jdbcType=VARCHAR}, #{miniprogramVideoId,jdbcType=BIGINT}, 
-      #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
-      )
+      #{sendTime,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP},
+      #{updateTime,jdbcType=TIMESTAMP})
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.wecom.model.po.MessageAttachment">
     insert into we_com_message_attachment
@@ -155,6 +156,9 @@
       <if test="isDelete != null">
         is_delete,
       </if>
+      <if test="sendTime != null">
+        send_time,
+      </if>
       <if test="createTime != null">
         create_time,
       </if>
@@ -193,6 +197,9 @@
       <if test="isDelete != null">
         #{isDelete,jdbcType=INTEGER},
       </if>
+      <if test="sendTime != null">
+        #{sendTime,jdbcType=TIMESTAMP},
+      </if>
       <if test="createTime != null">
         #{createTime,jdbcType=TIMESTAMP},
       </if>
@@ -240,6 +247,9 @@
       <if test="record.isDelete != null">
         is_delete = #{record.isDelete,jdbcType=INTEGER},
       </if>
+      <if test="record.sendTime != null">
+        send_time = #{record.sendTime,jdbcType=TIMESTAMP},
+      </if>
       <if test="record.createTime != null">
         create_time = #{record.createTime,jdbcType=TIMESTAMP},
       </if>
@@ -263,6 +273,7 @@
       cover = #{record.cover,jdbcType=VARCHAR},
       miniprogram_video_id = #{record.miniprogramVideoId,jdbcType=BIGINT},
       is_delete = #{record.isDelete,jdbcType=INTEGER},
+      send_time = #{record.sendTime,jdbcType=TIMESTAMP},
       create_time = #{record.createTime,jdbcType=TIMESTAMP},
       update_time = #{record.updateTime,jdbcType=TIMESTAMP}
     <if test="_parameter != null">
@@ -299,6 +310,9 @@
       <if test="isDelete != null">
         is_delete = #{isDelete,jdbcType=INTEGER},
       </if>
+      <if test="sendTime != null">
+        send_time = #{sendTime,jdbcType=TIMESTAMP},
+      </if>
       <if test="createTime != null">
         create_time = #{createTime,jdbcType=TIMESTAMP},
       </if>
@@ -319,6 +333,7 @@
       cover = #{cover,jdbcType=VARCHAR},
       miniprogram_video_id = #{miniprogramVideoId,jdbcType=BIGINT},
       is_delete = #{isDelete,jdbcType=INTEGER},
+      send_time = #{sendTime,jdbcType=TIMESTAMP},
       create_time = #{createTime,jdbcType=TIMESTAMP},
       update_time = #{updateTime,jdbcType=TIMESTAMP}
     where id = #{id,jdbcType=BIGINT}

+ 2 - 2
we-com-server/src/main/resources/mybatis-generator-config.xml

@@ -51,8 +51,8 @@
         </javaClientGenerator>
 
 <!--        <table tableName="we_com_user" domainObjectName="User" alias=""/>-->
-        <table tableName="we_com_history_message" domainObjectName="HistoryMessage" alias=""/>
-        <table tableName="we_com_message_attachment" domainObjectName="MessageAttachment" alias=""/>
+<!--        <table tableName="we_com_history_message" domainObjectName="HistoryMessage" alias=""/>-->
+<!--        <table tableName="we_com_message_attachment" domainObjectName="MessageAttachment" alias=""/>-->
 
     </context>