Ver código fonte

添加会员到期过期推送

yuanliang 9 meses atrás
pai
commit
186500f21f

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/VipRecordSearch.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.dto.search;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.EVipType;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
@@ -48,6 +49,9 @@ public class VipRecordSearch extends QueryInfo {
     @ApiModelProperty(value = "是否展示1:展示,0:隐藏",hidden = true)
     private Boolean displayFlag;
 
+    @ApiModelProperty("会员类型")
+    private EVipType vipType;
+
     public SourceTypeEnum getSourceType() {
         return sourceType;
     }
@@ -105,4 +109,12 @@ public class VipRecordSearch extends QueryInfo {
     public void setDisplayFlag(Boolean displayFlag) {
         this.displayFlag = displayFlag;
     }
+
+    public EVipType getVipType() {
+        return vipType;
+    }
+
+    public void setVipType(EVipType vipType) {
+        this.vipType = vipType;
+    }
 }

+ 9 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -67,11 +67,15 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 //    SMS_VIP_BUY_SUCCESS("会员购买成功(短信)"),
     SMS_NEW_VIP_BUY_SUCCESS("会员购买成功(短信)"),
 
-    VIP_EXPIRE_THIRTY_DAY("会员到期前30天"),
-    SMS_VIP_EXPIRE_THIRTY_DAY("会员到期前30天(短信)"),
-
-    VIP_EXPIRE("会员到期"),
-    SMS_VIP_EXPIRE("会员到期(短信)"),
+    VIP_EXPIRE_THIRTY_DAY("VIP会员到期前30天"),
+    SVIP_EXPIRE_THIRTY_DAY("SVIP会员到期前30天"),
+    SMS_VIP_EXPIRE_THIRTY_DAY("VIP会员到期前30天(短信)"),
+    SMS_SVIP_EXPIRE_THIRTY_DAY("SVIP会员到期前30天(短信)"),
+
+    VIP_EXPIRE("VIP会员到期"),
+    SVIP_EXPIRE("SVIP会员到期"),
+    SMS_VIP_EXPIRE("VIP会员到期(短信)"),
+    SMS_SVIP_EXPIRE("SVIP会员到期(短信)"),
 
     PRACTICE_BUY("陪练课购买"),
     SMS_PRACTICE_BUY("陪练课购买(短信)"),

+ 47 - 37
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java

@@ -192,15 +192,16 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         //提前三天提示
         List<VipCardRecordVo> temporaryRecords = baseMapper.selectTemporaryRecord();
         //标识
-        Map<Long, Long> temporaryFlagMap = new HashMap<>();
+        Set<String> sendFlag = new HashSet<>();
         for (VipCardRecordVo record : temporaryRecords) {
-            if (null != temporaryFlagMap.get(record.getUserId())) {
+            String key = record.getUserId() + "_" + record.getVipType().getCode() + "_" + record.getClientType().getCode();
+            if (sendFlag.contains(key)) {
                 continue;
             }
-            temporaryFlagMap.put(record.getUserId(), record.getUserId());
+            sendFlag.add(key);
             //发送消息
             CompletableFuture.runAsync(() -> {
-                temporary3DaysSend(record.getUserId(), record.getPhone(),record.getClientType());
+                temporary3DaysSend(record.getUserId(), record.getPhone(), record.getClientType(), record.getVipType());
             });
             record.setMsgStatus(1);
             record.setUpdateTime(new Date());
@@ -213,16 +214,17 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         //到期提示
         List<VipCardRecordVo> expireRecords = baseMapper.selectExpireRecord();
         //标识
-        Map<Long, Long> expireFlagMap = new HashMap<>();
+        Set<String> expireSendFlag = new HashSet<>();
         for (VipCardRecordVo record : expireRecords) {
-            if (null != expireFlagMap.get(record.getUserId())) {
+            String key = record.getUserId() + "_" + record.getVipType().getCode() + "_" + record.getClientType().getCode();
+            if (expireSendFlag.contains(key)) {
                 continue;
             }
-            expireFlagMap.put(record.getUserId(), record.getUserId());
+            expireSendFlag.add(key);
             //发送消息
             //发送消息
             CompletableFuture.runAsync(() -> {
-                expireSend(record.getUserId(),record.getPhone(), record.getClientType());
+                expireSend(record.getUserId(),record.getPhone(), record.getClientType(), record.getVipType());
             });
             record.setMsgStatus(2);
             record.setUpdateTime(new Date());
@@ -346,7 +348,12 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
         // 设置剩余天数
         if (userVip.getVipEndDate() != null) {
-            int num = DateUtil.daysBetween(new Date(), userVip.getVipEndDate()) +1;
+            int num;
+            if (userVip.getSvipEndDate() != null && userVip.getSvipEndDate().after(new Date())) {
+                num = DateUtil.daysBetween(userVip.getSvipEndDate(), userVip.getVipEndDate());
+            } else {
+                num = DateUtil.daysBetween(new Date(), userVip.getVipEndDate()) + 1;
+            }
             userVip.setVipEndDays(Math.max(num, 0));
         }
         if (userVip.getSvipEndDate() != null) {
@@ -728,55 +735,58 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
     }
 
     // 发送会员到期3天消息推送
-    private void temporary3DaysSend(Long userId, String phone, ClientEnum clientType) {
+    private void temporary3DaysSend(Long userId, String phone, ClientEnum clientType, EVipType vipType) {
         Map<Long, String> receivers = new HashMap<>();
         receivers.put(userId, phone);
         // 判断是否是机构学生 机构学生推送走另一个
         if (clientType.equals(ClientEnum.STUDENT)) {
-        } else {
-            try {
-                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY.getCode());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY,
-                        receivers, null, 0, url, ClientEnum.STUDENT.getCode());
-            } catch (Exception e) {
-                log.error("会员到期3天极光消息推送异常,userId={}", userId);
+            Student student = studentService.getById(userId);
+            if (student == null || (student.getTenantId() != null && student.getTenantId() > 0 )) {
+                return;
             }
+        }
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                    EVipType.VIP.equals(vipType) ? MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY : MessageTypeEnum.SVIP_EXPIRE_THIRTY_DAY
+                    , receivers, null, 0, null, clientType.getCode());
+        } catch (Exception e) {
+            log.error("会员到期3天极光消息推送异常,userId={}", userId);
+        }
 
-            try {
-                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.SMS_VIP_EXPIRE_THIRTY_DAY.getCode());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIP_EXPIRE_THIRTY_DAY,
-                        receivers, null, 0, null, ClientEnum.STUDENT.getCode(), url);
-            } catch (Exception e) {
-                log.error("会员到期3天短信消息推送异常,userId={}", userId);
-            }
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
+                    EVipType.VIP.equals(vipType) ? MessageTypeEnum.SMS_VIP_EXPIRE_THIRTY_DAY : MessageTypeEnum.SMS_SVIP_EXPIRE_THIRTY_DAY
+                    , receivers, null, 0, null, clientType.getCode());
+        } catch (Exception e) {
+            log.error("会员到期3天短信消息推送异常,userId={}", userId);
         }
     }
 
     // 发送会员到期消息推送
-    private void expireSend(Long userId,String phone,ClientEnum userType) {
+    private void expireSend(Long userId,String phone,ClientEnum userType, EVipType vipType) {
         Map<Long, String> receivers = new HashMap<>();
         receivers.put(userId, phone);
         Student student = studentService.getById(userId);
         if (userType.equals(ClientEnum.STUDENT) && student != null  && student.getTenantId() != null && student.getTenantId() >0) {
-            try {
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_VIP_EXPIRE,
-                        receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode());
-            } catch (Exception e) {
-                log.error("会员到期极光消息推送异常,userId={}", userId);
-            }
+//            try {
+//                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_VIP_EXPIRE,
+//                        receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode());
+//            } catch (Exception e) {
+//                log.error("会员到期极光消息推送异常,userId={}", userId);
+//            }
         } else {
             try {
-                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIP_EXPIRE.getCode());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE,
-                        receivers, null, 0, url, userType.getCode());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                        EVipType.VIP.equals(vipType) ? MessageTypeEnum.VIP_EXPIRE : MessageTypeEnum.SVIP_EXPIRE
+                        ,receivers, null, 0, null, userType.getCode());
             } catch (Exception e) {
                 log.error("会员到期3天极光消息推送异常,userId={}", userId);
             }
 
             try {
-                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.SMS_VIP_EXPIRE.getCode());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIP_EXPIRE,
-                        receivers, null, 0, null, userType.getCode(), url);
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
+                        EVipType.VIP.equals(vipType) ? MessageTypeEnum.SMS_VIP_EXPIRE : MessageTypeEnum.SMS_SVIP_EXPIRE,
+                        receivers, null, 0, null, userType.getCode());
             } catch (Exception e) {
                 log.error("会员到期3天短信消息推送异常,userId={}", userId);
             }

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/VipCardRecordWrapper.java

@@ -45,11 +45,11 @@ public class VipCardRecordWrapper {
     public static class AddVipCardRecord {
 
         @ApiModelProperty("用户ID")
-        @NotNull
+        @NotNull(message = "用户不能为空")
         private Long userId;
 
         @ApiModelProperty("用户类型")
-        @NotNull
+        @NotNull(message = "用户类型不能为空")
         private ClientEnum clientType;
 
         @ApiModelProperty("状态 ADD:新增,DEDUCTION:扣减,UPDATE:变更")

+ 19 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml

@@ -56,7 +56,7 @@
             s.sale_price_ as salePrice,
             s.period_ as `period`
         FROM user_order_detail a
-        left join vip_card_record t on a.order_no_ = t.order_no_ and a.sub_order_no_ = t.sub_order_no_
+        left join vip_card_record t on a.order_no_ = t.order_no_ and a.sub_order_no_ = t.sub_order_no_ and t.display_flag_ = 1
         left join member_price_settings s on t.vip_card_id_ = s.id_
         where a.id_ = #{orderDetilId}
         <if test="userId != null">
@@ -81,23 +81,31 @@
             <include refid="baseColumns"/>,
             u.phone_ as phone
         from (
-            select max(id_) as id_ from vip_card_record group by user_id_
+            select any_value(id_) id_
+            from (
+            select id_ from vip_card_record where efficient_flag_ = 1 and end_time_ &gt;= now() and end_time_ &lt; DATE_ADD(now(),INTERVAL 3 DAY) order by end_time_ desc
+            ) t group by t.user_id_,t.client_type_,t.vip_type_
         ) a
         left join vip_card_record t on a.id_ = t.id_
         left join sys_user u on t.user_id_ = u.id_
-        where t.end_time_ &gt;= now()
-        and t.end_time_ &lt; DATE_ADD(now(),INTERVAL 3 DAY)
-        and msg_status_ = 0
-        order by end_time_ desc
+        where t.msg_status_ = 0
+        order by t.end_time_ desc
     </select>
 
     <select id="selectExpireRecord" resultType="com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo">
         select
             <include refid="baseColumns"/>,
             u.phone_ as phone
-        from vip_card_record t
+        from (
+            select any_value(id_) id_
+            from (
+            select id_ from vip_card_record where efficient_flag_ = 1 order by end_time_ desc
+            ) t group by t.user_id_,t.client_type_,t.vip_type_
+        ) a
+        left join vip_card_record t on a.id_ = t.id_
         left join sys_user u on t.user_id_ = u.id_
-        where t.end_time_ &lt;= now()
+        where t.efficient_flag_ = 1
+        and t.end_time_ &lt;= now()
         and msg_status_ in (0,1)
         order by end_time_ desc
     </select>
@@ -130,6 +138,9 @@
           <if test="param.displayFlag != null">
               and t.display_flag_ = #{param.displayFlag}
           </if>
+          <if test="param.vipType != null">
+              and t.vip_card_record = #{param.vipType}
+          </if>
       </where>
         order by  t.id_ desc
     </select>