浏览代码

Merge remote-tracking branch 'origin/master'

hgw 3 年之前
父节点
当前提交
6b7049be0c

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -11,6 +11,7 @@ import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -161,5 +162,8 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
      * @return
      */
     Integer selectWeekStudentRepliedCourseSchedule(@Param("userId") Long userId);
+
+    //根据订单号查询开课时间
+    List<String> selectStartTime(String orderNo);
 }
 

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

@@ -26,7 +26,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     LIVE_COMPLETION_SUCCESS("LIVE_COMPLETION_SUCCESS","直播课成课"),
     LIVE_COMPLETION_FAIL("LIVE_COMPLETION_FAIL","直播课成课失败"),
     TOMORROW_COURSE_REMINDER("TOMORROW_COURSE_REMINDER","明日课程提醒(每晚9点)"),
-    PRACTICE_REMINDER("PRACTICE_REMINDER","陪练课提醒(陪练课开始前20分钟)"),
+    STUDENT_PRACTICE_REMINDER("STUDENT_PRACTICE_REMINDER","陪练课提醒(陪练课开始前20分钟)"),
     LIVE_REMINDER("LIVE_REMINDER","直播课提醒(直播课开始前20分钟)"),
     COURSE_SETTLEMENT("COURSE_SETTLEMENT","课酬结算(每晚9点)"),
     NOT_EVALUATE_STUDENT_PRACTICE("NOT_EVALUATE_STUDENT_PRACTICE","当日陪练课未评价/布置作业(每晚9点30,已评价/已布置不发)"),

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleRepliedDao;
@@ -11,16 +12,23 @@ import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRepliedService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.vo.CourseRepliedVo;
 import com.yonge.cooleshow.biz.dal.vo.MyRepliedVo;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * @Author: cy
  * @Date: 2022/4/12
@@ -30,6 +38,10 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
     private final static Logger log = LoggerFactory.getLogger(CourseRepliedServiceImpl.class);
 
     @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysMessageService sysMessageService;
+    @Autowired
     private CourseScheduleRepliedDao repliedDao;
     @Autowired
     private CourseScheduleDao scheduleDao;
@@ -85,6 +97,15 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
             return;
         }
         repliedDao.insert(replied);
+
+        //消息推送
+        SysUser student = sysUserFeignService.queryUserById(userId);
+        Map<Long, String> studentReceivers = new HashMap<>();
+        studentReceivers.put(studentId, student.getPhone());
+        String url = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_EVALUATE_TEACHER_PRACTICE.getCode());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_EVALUATE_TEACHER_PRACTICE,
+                studentReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
+                student.getUsername(), url);
     }
 
     /**

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

@@ -30,6 +30,7 @@ import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -42,6 +43,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
@@ -81,6 +85,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
     @Autowired
     private TeacherFreeTimeDao teacherFreeTimeDao;
+    @Autowired
+    private SysMessageService sysMessageService;
 
     @Override
     public CourseScheduleDao getDao() {
@@ -937,7 +943,43 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
         log.info("buyPracticeCourseSuccess ok");
 
+        //消息推送
+        practiceSend(paymentList.get(0).getTeacherId(), orderParam.getUserId(),paymentList.size() + "",orderNo);
+    }
 
+    public void practiceSend(Long teacherId, Long studentId,String courseNum,String orderNo) {
+        //查询老师&学生信息
+        SysUser teacher = sysUserFeignService.queryUserById(teacherId);
+        SysUser student = sysUserFeignService.queryUserById(studentId);
+
+        //消息接收者(Key:用户编号 value:消息接收对象)
+        Map<Long, String> teacherReceivers = new HashMap<>();
+        teacherReceivers.put(teacherId, teacher.getPhone());
+        Map<Long, String> studentReceivers = new HashMap<>();
+        studentReceivers.put(studentId, student.getPhone());
+
+        //老师端-学生买陪练课
+        String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_BUY_PRACTICE.getCode());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_BUY_PRACTICE,
+                teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
+                student.getUsername(),courseNum, teacherUrl);
+
+        //学生端-买陪练课
+        String studentUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.PRACTICE_BUY.getCode());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_BUY,
+                studentReceivers, null, 0, null, ClientEnum.STUDENT.getCode(),
+                teacher.getUsername(), courseNum, studentUrl);
+
+        //陪练课开课提醒
+        List<String> startTimeList = baseMapper.selectStartTime(orderNo);
+        for (String startTime : startTimeList) {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PRACTICE_REMINDER,
+                    teacherReceivers, DateUtil.offsetMinute(startTime, -20), 0, null, ClientEnum.TEACHER.getCode(),
+                    student.getUsername());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_REMIND,
+                    studentReceivers, DateUtil.offsetMinute(startTime, -20), 0, null, ClientEnum.STUDENT.getCode(),
+                    teacher.getUsername());
+        }
     }
 
     /**

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -563,4 +563,10 @@
         where cs.teacher_id_ = #{userId} and cs.status_ = 'COMPLETE' and cs.type_ = 'PRACTICE'
         and csr.student_replied_ is not null
     </select>
+    <select id="selectStartTime" resultType="java.lang.String" parameterType="java.lang.String">
+        SELECT s.start_time_
+        FROM course_schedule_student_payment p
+        LEFT JOIN course_schedule s ON p.course_id_=s.id_
+        WHERE p.order_no_=#{orderNo}
+    </select>
 </mapper>

+ 13 - 0
toolset/utils/src/main/java/com/yonge/toolset/utils/date/DateUtil.java

@@ -1306,6 +1306,19 @@ public class DateUtil {
         }
     }
 
+	public static Date offsetMinute(String time,int offset){
+		try {
+			Date parse = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time);
+			Calendar beforeTime = Calendar.getInstance();
+			beforeTime.setTime(parse);
+			beforeTime.add(Calendar.MINUTE, offset);
+			return beforeTime.getTime();
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
 	public static void main(String[] args) throws ParseException {
 		// DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
 		DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");