فهرست منبع

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow

liujunchi 3 سال پیش
والد
کامیت
dcd09310c7
19فایلهای تغییر یافته به همراه434 افزوده شده و 148 حذف شده
  1. 3 3
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/StudentFeignService.java
  2. 1 1
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/StudentFeignServiceFallback.java
  3. 2 2
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/StudentHalfHourTask.java
  4. 15 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java
  5. 15 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java
  6. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  7. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MemberPriceSettingsService.java
  8. 6 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java
  9. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  10. 6 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  11. 8 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  12. 119 87
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  13. 42 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java
  14. 42 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthMusicianRecordServiceImpl.java
  15. 11 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java
  16. 100 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  17. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VipCardRecordVo.java
  18. 25 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml
  19. 8 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/task/TaskController.java

+ 3 - 3
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/StudentFeignService.java

@@ -17,13 +17,13 @@ public interface StudentFeignService {
     @GetMapping(value = "/task/queryStudentTotal")
     Object queryStudentTotal();
     /***
-     * 统计学员第一次购买时间(半小时一次,统计当天数据)
+     * 半小时一次
      * @author liweifan
      * @updateTime 2022/3/28 15:34
      * @return: java.lang.Object
      */
-    @GetMapping(value = "/task/totalStudentTime")
-    Object totalStudentTime();
+    @GetMapping(value = "/task/halfHourTask")
+    Object halfHourTask();
     /***
      * 轮询用户订单
      * @author liweifan

+ 1 - 1
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/StudentFeignServiceFallback.java

@@ -12,7 +12,7 @@ public class StudentFeignServiceFallback implements StudentFeignService {
     }
 
     @Override
-    public Object totalStudentTime() {
+    public Object halfHourTask() {
         return null;
     }
 

+ 2 - 2
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/TotalStudentTimeTask.java → cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/StudentHalfHourTask.java

@@ -12,12 +12,12 @@ import org.springframework.stereotype.Service;
  * @Data: 2022/3/28 15:55
  */
 @Service
-public class TotalStudentTimeTask extends BaseTask {
+public class StudentHalfHourTask extends BaseTask {
     @Autowired
     private StudentFeignService studentFeignService;
 
     @Override
     public void execute() throws TaskException {
-        Object o = studentFeignService.totalStudentTime();
+        Object o = studentFeignService.halfHourTask();
     }
 }

+ 15 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java

@@ -26,5 +26,19 @@ public interface VipCardRecordDao extends BaseMapper<VipCardRecord>{
      * @return: com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo
 	 */
 	List<VipCardRecordVo> selectPage(@Param("page") IPage page, @Param("param") VipCardRecordSearch vipCardRecord);
-	
+
+	/***
+	 * 查询临期3天会员
+	 * @author liweifan
+	 * @updateTime 2022/5/5 19:33
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo>
+	 */
+	List<VipCardRecordVo> selectTemporaryRecord();
+	/***
+	 * 查询到期会员
+	 * @author liweifan
+	 * @updateTime 2022/5/5 20:18
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo>
+	 */
+	List<VipCardRecordVo> selectExpireRecord();
 }

+ 15 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java

@@ -51,6 +51,13 @@ public class VipCardRecord implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date endTime;
+    /***
+     * 消息发送 0、未发送 1、已发送提前3天消息 2、已发送会员过期消息
+     * @author liweifan
+     * @updateTime 2022/5/5 19:25
+     */
+    @TableField(value = "msg_status_")
+    private Integer msgStatus;
 
 	public Long getId() {
         return id;
@@ -115,5 +122,12 @@ public class VipCardRecord implements Serializable {
     public void setEndTime(Date endTime) {
         this.endTime = endTime;
     }
-    
+
+    public Integer getMsgStatus() {
+        return msgStatus;
+    }
+
+    public void setMsgStatus(Integer msgStatus) {
+        this.msgStatus = msgStatus;
+    }
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -49,6 +49,14 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS("SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS","学员购买乐谱(短信)"),
 
+    SMS_TEACHER_AUTH_PASS("SMS_TEACHER_AUTH_PASS","老师认证通过(短信)"),
+    SMS_TEACHER_AUTH_FAIL("SMS_TEACHER_AUTH_FAIL","老师认证失败(短信)"),
+    SMS_MUSICIAN_AUTH_PASS("SMS_MUSICIAN_AUTH_PASS","音乐人认证通过(短信)"),
+    SMS_MUSICIAN_AUTH_FAIL("SMS_MUSICIAN_AUTH_FAIL","音乐人认证失败(短信)"),
+    SMS_VIP_BUY_SUCCESS("SMS_VIP_BUY_SUCCESS","会员购买成功(短信)"),
+    SMS_VIP_EXPIRE_THIRTY_DAY("SMS_VIP_EXPIRE_THIRTY_DAY","会员到期前30天(短信)"),
+    SMS_VIP_EXPIRE("SMS_VIP_EXPIRE","会员到期(短信)"),
+
     ;
 
     MessageTypeEnum(String code, String msg) {

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MemberPriceSettingsService.java

@@ -52,4 +52,5 @@ public interface MemberPriceSettingsService extends IService<MemberPriceSettings
      * @updateTime 2022/3/31 17:24
      */
     void orderSuccess(UserOrderDetailVo orderDetailVo);
+
 }

+ 6 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java

@@ -31,5 +31,10 @@ public interface VipCardRecordService extends IService<VipCardRecord>  {
      */
     IPage<VipCardRecordVo> selectPage(IPage<VipCardRecordVo> page, VipCardRecordSearch query);
 
-
+	/***
+	 * 会员卡到期提醒
+	 * @author liweifan
+	 * @updateTime 2022/5/5 19:28
+	 */
+	void pollExpireMsg();
 }

+ 9 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java

@@ -98,8 +98,16 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
         }
         repliedDao.insert(replied);
 
+        try {
+            repliedSend(userId);
+        } catch (Exception e) {
+            log.error("视频课消息推送失败");
+        }
+    }
+
+    public void repliedSend(Long studentId){
         //消息推送
-        SysUser student = sysUserFeignService.queryUserById(userId);
+        SysUser student = sysUserFeignService.queryUserById(studentId);
         Map<Long, String> studentReceivers = new HashMap<>();
         studentReceivers.put(studentId, student.getPhone());
         String url = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_EVALUATE_TEACHER_PRACTICE.getCode());

+ 6 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -462,10 +462,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             //获取当前日期周几
             int weekNum = firstDay.getDayOfWeek().getValue();
             JSONArray jsonArray = teacherPracticeTime.get(weekNum);
-            List<CourseTimeEntity> timeEntities = jsonArray.stream()
-                    .map(t -> getCourseTimeEntity(entity, (JSONObject) t))
-                    .collect(Collectors.toList());
-            entity.setCourseTime(timeEntities);
+            if (Objects.nonNull(jsonArray)){
+                List<CourseTimeEntity> timeEntities = jsonArray.stream()
+                        .map(t -> getCourseTimeEntity(entity, (JSONObject) t))
+                        .collect(Collectors.toList());
+                entity.setCourseTime(timeEntities);
+            }
             list.add(entity);
             firstDay = firstDay.plusDays(1L);
         }

+ 8 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -576,16 +576,15 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         //result
         Map<String, Object> result = new HashMap<>();
         //{"day":"01","month":"05","year":"2022","singleCourseMinutes":60,"teacherId":4}
-//        Map<String, Object> param = new HashMap<>();
-//        param.put("day", "01");
-//        param.put("month", "04");
-//        param.put("year", "2022");
-//        param.put("singleCourseMinutes", 60);
-//        param.put("teacherId", "4");
-//        param.put("studentId", 143);
-//        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createPracticeCourseCalender(param);
+        Map<String, Object> param = new HashMap<>();
+        param.put("day", "05");
+        param.put("month", "05");
+        param.put("year", "2022");
+        param.put("teacherId", "174");
+        param.put("studentId", 164);
+        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createPracticeCourseCalender(param);
 //        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createLiveCourseCalendar(param);
-//        result.put("自动生成课时", courseTimeEntities);
+        result.put("自动生成课时", courseTimeEntities);
 
         //获取房间信息
         RBucket<RoomInfoCache> speakerCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));

+ 119 - 87
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java

@@ -4,13 +4,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.date.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
@@ -21,96 +26,123 @@ import com.yonge.cooleshow.biz.dal.dto.search.MemberPriceSettingsSearch;
 import com.yonge.cooleshow.biz.dal.dao.MemberPriceSettingsDao;
 import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
 
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 
 @Service
 public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSettingsDao, MemberPriceSettings> implements MemberPriceSettingsService {
-	private final static Logger log = LoggerFactory.getLogger(MemberPriceSettingsServiceImpl.class);
-	@Autowired
-	private StudentService studentService;
-	@Autowired
-	private VipCardRecordService vipCardRecordService;
-
-	@Override
-	public MemberPriceSettingsVo detail(Long id) {
-		return baseMapper.detail(id);
-	}
-
-	@Override
-	public IPage<MemberPriceSettingsVo> selectPage(IPage<MemberPriceSettingsVo> page, MemberPriceSettingsSearch query){
-		return page.setRecords(baseMapper.selectPage(page, query));
-	}
-
-	@Override
-	public List<MemberPriceSettingsVo> selectList(MemberPriceSettingsSearch query) {
-		return baseMapper.selectList(query);
-	}
-
-
-	@Override
-	public HttpResponseResult<OrderCreateRes> orderCreate(OrderReq.OrderReqInfo orderReqInfo) {
-		MemberPriceSettingsVo detail = detail(Long.parseLong(orderReqInfo.getBizContent().toString()));
-		if (null == detail) {
-			return HttpResponseResult.failed("未找到会员卡信息");
-		}
-		//插入会员卡信息到会员卡记录表
-		OrderCreateRes orderCreateRes = new OrderCreateRes();
-		orderCreateRes.setRes(true);
-		orderCreateRes.setBizId(detail.getId());
-		orderCreateRes.setBizContent("会员卡购买-" + detail.getPeriod().getMsg());
-		orderCreateRes.setGoodNum(1);
-		orderCreateRes.setOriginalPrice(detail.getOriginalPrice());
-		orderCreateRes.setExpectPrice(detail.getSalePrice());
-		return HttpResponseResult.succeed(orderCreateRes);
-	}
-
-
-	@Override
-	public void orderSuccess(UserOrderDetailVo orderDetailVo) {
-		MemberPriceSettingsVo detail = detail(orderDetailVo.getBizId());
-		if (null == detail) {
-			return;
-		}
-		StudentVo studentVo = studentService.detail(orderDetailVo.getUserId());
-		//修改用户会员时长
-		Date membershipEndTime = studentVo.getMembershipEndTime();
-		Calendar now = Calendar.getInstance();
-
-		VipCardRecord vipCardRecord = new VipCardRecord();
-		vipCardRecord.setUserId(orderDetailVo.getUserId());
-		vipCardRecord.setOrderId(orderDetailVo.getOrderId());
-		vipCardRecord.setVipCardId(detail.getId());
-
-		if (null == membershipEndTime || membershipEndTime.before(new Date())) {
-			//没有会员、会员已过期
-			studentVo.setMembershipStartTime(now.getTime());
-		} else {
-			now.setTime(studentVo.getMembershipEndTime());
-		}
-		vipCardRecord.setStartTime(now.getTime());
-
-		if(PeriodEnum.DAY.equals(detail.getPeriod())){
-			now.add(Calendar.DAY_OF_MONTH, 1);
-		}else if (PeriodEnum.MONTH.equals(detail.getPeriod())) {
-			now.add(Calendar.MONTH, 1);
-		} else if (PeriodEnum.QUARTERLY.equals(detail.getPeriod())) {
-			now.add(Calendar.MONTH, 3);
-		} else if (PeriodEnum.YEAR_HALF.equals(detail.getPeriod())) {
-			now.add(Calendar.MONTH, 6);
-		} else if (PeriodEnum.YEAR.equals(detail.getPeriod())) {
-			now.add(Calendar.YEAR, 1);
-		}
-
-		vipCardRecord.setEndTime(now.getTime());
-		studentVo.setMembershipEndTime(now.getTime());
-		studentVo.setMemberRankSettingId(1l);
-		studentVo.setUpdateTime(new Date());
-		studentService.updateById(studentVo);
-		//会员购买记录入库
-		vipCardRecordService.save(vipCardRecord);
-	}
+    private final static Logger log = LoggerFactory.getLogger(MemberPriceSettingsServiceImpl.class);
+    @Autowired
+    private StudentService studentService;
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    @Override
+    public MemberPriceSettingsVo detail(Long id) {
+        return baseMapper.detail(id);
+    }
+
+    @Override
+    public IPage<MemberPriceSettingsVo> selectPage(IPage<MemberPriceSettingsVo> page, MemberPriceSettingsSearch query) {
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    @Override
+    public List<MemberPriceSettingsVo> selectList(MemberPriceSettingsSearch query) {
+        return baseMapper.selectList(query);
+    }
+
+
+    @Override
+    public HttpResponseResult<OrderCreateRes> orderCreate(OrderReq.OrderReqInfo orderReqInfo) {
+        MemberPriceSettingsVo detail = detail(Long.parseLong(orderReqInfo.getBizContent().toString()));
+        if (null == detail) {
+            return HttpResponseResult.failed("未找到会员卡信息");
+        }
+        //插入会员卡信息到会员卡记录表
+        OrderCreateRes orderCreateRes = new OrderCreateRes();
+        orderCreateRes.setRes(true);
+        orderCreateRes.setBizId(detail.getId());
+        orderCreateRes.setBizContent("会员卡购买-" + detail.getPeriod().getMsg());
+        orderCreateRes.setGoodNum(1);
+        orderCreateRes.setOriginalPrice(detail.getOriginalPrice());
+        orderCreateRes.setExpectPrice(detail.getSalePrice());
+        return HttpResponseResult.succeed(orderCreateRes);
+    }
+
+
+    @Override
+    public void orderSuccess(UserOrderDetailVo orderDetailVo) {
+        MemberPriceSettingsVo detail = detail(orderDetailVo.getBizId());
+        if (null == detail) {
+            return;
+        }
+        StudentVo studentVo = studentService.detail(orderDetailVo.getUserId());
+        //修改用户会员时长
+        Date membershipEndTime = studentVo.getMembershipEndTime();
+        Calendar now = Calendar.getInstance();
+
+        VipCardRecord vipCardRecord = new VipCardRecord();
+        vipCardRecord.setUserId(orderDetailVo.getUserId());
+        vipCardRecord.setOrderId(orderDetailVo.getOrderId());
+        vipCardRecord.setVipCardId(detail.getId());
+
+        if (null == membershipEndTime || membershipEndTime.before(new Date())) {
+            //没有会员、会员已过期
+            studentVo.setMembershipStartTime(now.getTime());
+        } else {
+            now.setTime(studentVo.getMembershipEndTime());
+        }
+        vipCardRecord.setStartTime(now.getTime());
+
+        if (PeriodEnum.DAY.equals(detail.getPeriod())) {
+            now.add(Calendar.DAY_OF_MONTH, 1);
+        } else if (PeriodEnum.MONTH.equals(detail.getPeriod())) {
+            now.add(Calendar.MONTH, 1);
+        } else if (PeriodEnum.QUARTERLY.equals(detail.getPeriod())) {
+            now.add(Calendar.MONTH, 3);
+        } else if (PeriodEnum.YEAR_HALF.equals(detail.getPeriod())) {
+            now.add(Calendar.MONTH, 6);
+        } else if (PeriodEnum.YEAR.equals(detail.getPeriod())) {
+            now.add(Calendar.YEAR, 1);
+        }
+
+        vipCardRecord.setEndTime(now.getTime());
+        studentVo.setMembershipEndTime(now.getTime());
+        studentVo.setMemberRankSettingId(1l);
+        studentVo.setUpdateTime(new Date());
+        studentService.updateById(studentVo);
+        //会员购买记录入库
+        vipCardRecordService.save(vipCardRecord);
+
+        //会员购买消息推送
+        authSend(studentVo.getUserId(), studentVo.getPhone(), DateUtil.format(vipCardRecord.getEndTime(), DateUtil.DEFAULT_PATTERN));
+
+    }
+
+
+
+
+    // 发送会员购买消息推送
+    private void authSend(Long userId, String phone, String param1) {
+        Map<Long, String> receivers = new HashMap<>();
+        receivers.put(userId, phone);
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_BUY_SUCCESS,
+                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), param1);
+        } catch (Exception e) {
+            log.error("会员购买极光消息推送异常,userId={}", userId);
+        }
+
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TEACHER_AUTH_PASS,
+                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), param1);
+        } catch (Exception e) {
+            log.error("会员购买短信消息推送异常,userId={}", userId);
+        }
+
+    }
 
 }

+ 42 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java

@@ -21,6 +21,8 @@ import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.string.StringUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
 import org.apache.commons.beanutils.BeanUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.TeacherAuthEntryRecord;
@@ -35,6 +37,8 @@ import java.util.Map;
 @Service
 public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEntryRecordDao, TeacherAuthEntryRecord> implements TeacherAuthEntryRecordService {
 
+    private static final Logger log = LoggerFactory.getLogger(TeacherAuthEntryRecordServiceImpl.class);
+
     @Autowired
     private SysMessageService sysMessageService;
 
@@ -55,7 +59,7 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser sysUser) throws Exception {
         TeacherAuthEntryRecord build = baseMapper.selectById(authOperaReq.getId());
-        if(!AuthStatusEnum.DOING.equals(build.getTeacherAuthStatus()) ){
+        if (!AuthStatusEnum.DOING.equals(build.getTeacherAuthStatus())) {
             return HttpResponseResult.failed("审核单已审核");
         }
 
@@ -69,7 +73,7 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
         if (null == teacher) {
             return HttpResponseResult.failed("未找到用户信息");
         }
-        if(YesOrNoEnum.YES.equals(teacher.getEntryFlag()) ){
+        if (YesOrNoEnum.YES.equals(teacher.getEntryFlag())) {
             return HttpResponseResult.failed("用户已经通过审核");
         }
         if (authOperaReq.getPass()) {
@@ -86,21 +90,46 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
         teacher.setUpdateTime(new Date());
 
         Teacher newTeacher = new Teacher();
-        BeanUtils.copyProperties(newTeacher,teacher);
+        BeanUtils.copyProperties(newTeacher, teacher);
         teacherDao.updateById(newTeacher);
 
         // 发送审核通知
-        Map<Long,String> receivers = new HashMap<>();
-        receivers.put(teacher.getUserId(), teacher.getPhone());
+        authSend(teacher.getUserId(), teacher.getPhone(), authOperaReq.getPass(),authOperaReq.getReason());
+        return HttpResponseResult.succeed(baseMapper.updateById(build) > 0);
+    }
 
-        if (authOperaReq.getPass()) {
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_AUTH_PASS,
-                    receivers,null,0,null, ClientEnum.TEACHER.getCode());
-        } else{
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,MessageTypeEnum.TEACHER_AUTH_FAIL,
-                    receivers,null,0,null,ClientEnum.TEACHER.getCode());
+    // 发送审核通知
+    private void authSend(Long userId, String phone, Boolean isPass, String reason) {
+        Map<Long, String> receivers = new HashMap<>();
+        receivers.put(userId, phone);
+        if (isPass) {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_AUTH_PASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), "app内陪练课设置链接");
+            } catch (Exception e) {
+                log.error("入驻审核极光消息推送异常,userId={}", userId);
+            }
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TEACHER_AUTH_PASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode());
+            } catch (Exception e) {
+                log.error("入驻审核短信消息推送异常,userId={}", userId);
+            }
+        } else {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_AUTH_FAIL,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), reason, "app内认证链接");
+            } catch (Exception e) {
+                log.error("入驻审核极光消息推送异常,userId={}", userId);
+            }
+
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_TEACHER_AUTH_FAIL,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), reason);
+            } catch (Exception e) {
+                log.error("入驻审核短信消息推送异常,userId={}", userId);
+            }
         }
-        return HttpResponseResult.succeed(baseMapper.updateById(build) > 0);
     }
 
     @Override
@@ -127,7 +156,7 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
     @Override
     public TeacherAuthEntryRecordVo getLastRecordByUserId(Long userId) {
         TeacherAuthEntryRecordVo authEntryRecordVo = baseMapper.getLastRecordByUserId(userId);
-        if(null != authEntryRecordVo){
+        if (null != authEntryRecordVo) {
             authEntryRecordVo.setIdCardNo(ValueUtil.fuzzyIdCard(authEntryRecordVo.getIdCardNo()));
             authEntryRecordVo.setPhone(ValueUtil.fuzzyMobile(authEntryRecordVo.getPhone()));
         }

+ 42 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthMusicianRecordServiceImpl.java

@@ -18,6 +18,8 @@ import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.apache.commons.beanutils.BeanUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.TeacherAuthMusicianRecord;
@@ -32,6 +34,7 @@ import java.util.Map;
 
 @Service
 public class TeacherAuthMusicianRecordServiceImpl extends ServiceImpl<TeacherAuthMusicianRecordDao, TeacherAuthMusicianRecord> implements TeacherAuthMusicianRecordService {
+    private static final Logger log = LoggerFactory.getLogger(TeacherAuthMusicianRecordServiceImpl.class);
 
     @Autowired
     private SysMessageService sysMessageService;
@@ -64,7 +67,7 @@ public class TeacherAuthMusicianRecordServiceImpl extends ServiceImpl<TeacherAut
         }
         //判断用户是否已经通过申请
         Teacher teacher = teacherDao.selectById(userId);
-        if(YesOrNoEnum.YES.equals(teacher.getMusicianFlag())){
+        if (YesOrNoEnum.YES.equals(teacher.getMusicianFlag())) {
             return HttpResponseResult.failed("已经通过审批");
         }
 
@@ -83,7 +86,7 @@ public class TeacherAuthMusicianRecordServiceImpl extends ServiceImpl<TeacherAut
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser sysUser) throws Exception {
         TeacherAuthMusicianRecord build = baseMapper.selectById(authOperaReq.getId());
-        if(!AuthStatusEnum.DOING.equals(build.getTeacherAuthStatus()) ){
+        if (!AuthStatusEnum.DOING.equals(build.getTeacherAuthStatus())) {
             return HttpResponseResult.failed("审核单已审核");
         }
 
@@ -97,7 +100,7 @@ public class TeacherAuthMusicianRecordServiceImpl extends ServiceImpl<TeacherAut
         if (null == teacher) {
             return HttpResponseResult.failed("未找到用户信息");
         }
-        if(YesOrNoEnum.YES.equals(teacher.getMusicianFlag()) ){
+        if (YesOrNoEnum.YES.equals(teacher.getMusicianFlag())) {
             return HttpResponseResult.failed("用户已经通过审核");
         }
 
@@ -106,23 +109,48 @@ public class TeacherAuthMusicianRecordServiceImpl extends ServiceImpl<TeacherAut
         teacher.setUpdateTime(new Date());
 
         Teacher newTeacher = new Teacher();
-        BeanUtils.copyProperties(newTeacher,teacher);
+        BeanUtils.copyProperties(newTeacher, teacher);
         teacherDao.updateById(newTeacher);
 
         // 发送审核通知
-        Map<Long,String> receivers = new HashMap<>();
-        receivers.put(teacher.getUserId(), teacher.getPhone());
-
-        if (authOperaReq.getPass()) {
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.MUSICIAN_AUTH_PASS,
-                    receivers,null,0,null, ClientEnum.TEACHER.getCode());
-        } else{
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,MessageTypeEnum.MUSICIAN_AUTH_FAIL,
-                    receivers,null,0,null,ClientEnum.TEACHER.getCode());
-        }
+        authSend(teacher.getUserId(), teacher.getPhone(), authOperaReq.getPass(), authOperaReq.getReason());
         return HttpResponseResult.succeed(baseMapper.updateById(build) > 0);
     }
 
+    // 发送审核通知
+    private void authSend(Long userId, String phone, Boolean isPass, String reason) {
+        Map<Long, String> receivers = new HashMap<>();
+        receivers.put(userId, phone);
+        if (isPass) {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.MUSICIAN_AUTH_PASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), "app内上传乐谱链接");
+            } catch (Exception e) {
+                log.error("音乐人认证极光消息推送异常,userId={}", userId);
+            }
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_MUSICIAN_AUTH_PASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode());
+            } catch (Exception e) {
+                log.error("音乐人认证短信消息推送异常,userId={}", userId);
+            }
+        } else {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.MUSICIAN_AUTH_FAIL,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), reason);
+            } catch (Exception e) {
+                log.error("音乐人认证极光消息推送异常,userId={}", userId);
+            }
+
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_MUSICIAN_AUTH_FAIL,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), reason);
+            } catch (Exception e) {
+                log.error("音乐人认证短信消息推送异常,userId={}", userId);
+            }
+        }
+    }
+
     /***
      * 判断用户是否已经提交申请
      * @author liweifan

+ 11 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java

@@ -166,6 +166,14 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         userAccountService.accountChange(userAccountRecord);
         log.info("buyVideoCourseSuccess ok");
 
+        try {
+            videoSend(teacherId, studentId, lessonGroup.getLessonName());
+        } catch (Exception e) {
+            log.error("视频课消息推送失败");
+        }
+    }
+
+    public void videoSend(Long teacherId, Long studentId, String lessonName) {
         //查询老师&学生信息
         SysUser teacher = sysUserFeignService.queryUserById(teacherId);
         SysUser student = sysUserFeignService.queryUserById(studentId);
@@ -173,19 +181,19 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         //消息接收者(Key:用户编号 value:消息接收对象)
         Map<Long, String> teacherReceivers = new HashMap<>();
         teacherReceivers.put(teacherId, teacher.getPhone());
-        Map<Long,String> studentReceivers = new HashMap<>();
+        Map<Long, String> studentReceivers = new HashMap<>();
         studentReceivers.put(studentId, student.getPhone());
 
         //消息推送-老师端
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_BUY_VIDEO,
                 teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
-                student.getUsername(), lessonGroup.getLessonName());
+                student.getUsername(), lessonName);
 
         //消息推送-学生端
         String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIDEO_BUY.getCode());
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIDEO_BUY,
                 studentReceivers, null, 0, null, ClientEnum.STUDENT.getCode(),
-                teacher.getUsername(), lessonGroup.getLessonName(),url);
+                teacher.getUsername(), lessonName, url);
     }
 
     /**

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

@@ -2,7 +2,14 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
@@ -11,20 +18,108 @@ import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.dao.VipCardRecordDao;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 
 @Service
 public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipCardRecord> implements VipCardRecordService {
+    private final static Logger log = LoggerFactory.getLogger(VipCardRecordServiceImpl.class);
+
     @Autowired
-    private MemberPriceSettingsService memberPriceSettingsService;
-	@Override
+    private SysMessageService sysMessageService;
+
+    @Override
     public VipCardRecordVo detail(Long id) {
         VipCardRecordVo detail = baseMapper.detail(id);
         return detail;
     }
-    
-     @Override
-    public IPage<VipCardRecordVo> selectPage(IPage<VipCardRecordVo> page, VipCardRecordSearch query){
+
+    @Override
+    public IPage<VipCardRecordVo> selectPage(IPage<VipCardRecordVo> page, VipCardRecordSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
 
+    @Override
+    public void pollExpireMsg() {
+        //提前三天提示
+        List<VipCardRecordVo> temporaryRecords = baseMapper.selectTemporaryRecord();
+        //标识
+        Map<Long, Long> temporaryFlagMap = new HashMap<>();
+        for (VipCardRecordVo record : temporaryRecords) {
+            if (null != temporaryFlagMap.get(record.getUserId())) {
+                continue;
+            }
+            temporaryFlagMap.put(record.getUserId(), record.getUserId());
+            //发送消息
+            temporary3DaysSend(record.getUserId(), record.getPhone());
+            record.setMsgStatus(1);
+            record.setUpdateTime(new Date());
+
+            VipCardRecord vipCardRecord = new VipCardRecord();
+            BeanUtils.copyProperties(record,vipCardRecord);
+            baseMapper.updateById(vipCardRecord);
+        }
+
+        //到期提示
+        List<VipCardRecordVo> expireRecords = baseMapper.selectExpireRecord();
+        //标识
+        Map<Long, Long> expireFlagMap = new HashMap<>();
+        for (VipCardRecordVo record : expireRecords) {
+            if (null != expireFlagMap.get(record.getUserId())) {
+                continue;
+            }
+            expireFlagMap.put(record.getUserId(), record.getUserId());
+            //发送消息
+            expireSend(record.getUserId(), record.getPhone());
+            record.setMsgStatus(2);
+            record.setUpdateTime(new Date());
+
+            VipCardRecord vipCardRecord = new VipCardRecord();
+            BeanUtils.copyProperties(record,vipCardRecord);
+            baseMapper.updateById(vipCardRecord);
+        }
+
+    }
+
+
+    // 发送会员到期3天消息推送
+    private void temporary3DaysSend(Long userId, String phone) {
+        Map<Long, String> receivers = new HashMap<>();
+        receivers.put(userId, phone);
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY,
+                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), "会员中心链接");
+        } catch (Exception e) {
+            log.error("会员到期3天极光消息推送异常,userId={}", userId);
+        }
+
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIP_EXPIRE_THIRTY_DAY,
+                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), "会员中心链接");
+        } catch (Exception e) {
+            log.error("会员到期3天短信消息推送异常,userId={}", userId);
+        }
+    }
+
+    // 发送会员到期消息推送
+    private void expireSend(Long userId, String phone) {
+        Map<Long, String> receivers = new HashMap<>();
+        receivers.put(userId, phone);
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE,
+                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), "会员中心链接");
+        } catch (Exception e) {
+            log.error("会员到期3天极光消息推送异常,userId={}", userId);
+        }
+
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIP_EXPIRE,
+                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), "会员中心链接");
+        } catch (Exception e) {
+            log.error("会员到期3天短信消息推送异常,userId={}", userId);
+        }
+    }
 }

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VipCardRecordVo.java

@@ -10,5 +10,18 @@ import io.swagger.annotations.ApiModel;
 @ApiModel(value = "VipCardRecordVo对象", description = "购买会员卡记录表查询视图对象")
 public class VipCardRecordVo extends VipCardRecord{
 	private static final long serialVersionUID = 1L;
+	/***
+	 * 手机号
+	 * @author liweifan
+	 * @updateTime 2022/5/5 20:11
+	 */
+	private String phone;
 
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
 }

+ 25 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml

@@ -10,6 +10,7 @@
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
 	        <result column="end_time_" property="endTime" />
+            <result column="msg_status_" property="msgStatus" />
 		</resultMap>
 
     <!-- 表字段 -->
@@ -22,6 +23,7 @@
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         , t.end_time_ as endTime
+        , t.msg_status_ as msgStatus
         </sql>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo">
@@ -36,4 +38,27 @@
         	<include refid="baseColumns" />
 		FROM vip_card_record t
 	</select>
+
+    <select id="selectTemporaryRecord" resultType="com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo">
+        select
+            <include refid="baseColumns"/>,
+            u.phone_ as phone
+        from vip_card_record t
+        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
+    </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
+        left join sys_user u on t.user_id_ = u.id_
+        where t.end_time_ &lt;= now()
+        and msg_status_ in (0,1)
+        order by end_time_ desc
+    </select>
 </mapper>

+ 8 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/task/TaskController.java

@@ -26,6 +26,8 @@ public class TaskController extends BaseController {
     private StudentTimeService studentTimeService;
     @Autowired
     private UserOrderService userOrderService;
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
     /***
      * 查询所有学生统计数据
      * @author liweifan
@@ -38,14 +40,17 @@ public class TaskController extends BaseController {
     }
 
     /***
-     * 统计学员第一次购买时间(半小时一次,统计当天数据)
+     * 半小时一次
      * @author liweifan
      * @updateTime 2022/4/29 19:12
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
      */
-    @GetMapping("/totalStudentTime")
-    public HttpResponseResult<Boolean> totalStudentTime() {
+    @GetMapping("/halfHourTask")
+    public HttpResponseResult<Boolean> halfHourTask() {
+        //统计学员第一次购买时间
         studentTimeService.totalStudentTime();
+        //会员卡到期提醒
+        vipCardRecordService.pollExpireMsg();
         return succeed(true);
     }