Forráskód Böngészése

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

liujunchi 3 éve
szülő
commit
b092e1a78b
43 módosított fájl, 546 hozzáadás és 152 törlés
  1. 2 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  2. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherAuthEntryRecordDao.java
  3. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java
  4. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  5. 80 19
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  6. 5 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  7. 7 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java
  8. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  9. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  10. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVo.java
  11. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseRepliedVo.java
  12. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java
  13. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LessonGroupVo.java
  14. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseInfoVo.java
  15. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java
  16. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyRepliedVo.java
  17. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PracticeTeacherVo.java
  18. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PracticeVo.java
  19. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java
  20. 54 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java
  21. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonAuthGroup.java
  22. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonEvaluateVo.java
  23. 11 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonGroupDetailVo.java
  24. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonGroupVo.java
  25. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonPurchaseVo.java
  26. 4 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CoursePlanMapper.xml
  27. 11 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  28. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  29. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/PracticeMapper.xml
  30. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  31. 14 13
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  32. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonEvaluateMapper.xml
  33. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupDetailMapper.xml
  34. 4 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  35. 17 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java
  36. 15 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherAuthEntryRecordController.java
  37. 8 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseGroupController.java
  38. 5 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserBankCardController.java
  39. 5 5
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/entity/UploadSign.java
  40. 1 1
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/storage/provider/AliyunOssStoragePlugin.java
  41. 1 1
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/storage/provider/KS3StoragePlugin.java
  42. 1 1
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/user/realname/RealnameAuthenticationPlugin.java
  43. 100 94
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/user/realname/provider/LinkfaceRealnameAuthenticationPlugin.java

+ 2 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java

@@ -7,10 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
-import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupPlanVo;
-import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentCourseVo;
-import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentVo;
-import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -29,7 +26,7 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
     /**
      * 分页查询课程组信息
      */
-    <T> IPage<T> queryTeacherCourseGroup(Page<T> page, @Param("param") Map<String, Object> param);
+    IPage<CourseGroupVo> queryTeacherCourseGroup(Page<CourseGroupVo> page, @Param("param") Map<String, Object> param);
 
     /**
      * 平台方 老师详情直播课列表

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherAuthEntryRecordDao.java

@@ -33,4 +33,5 @@ public interface TeacherAuthEntryRecordDao extends BaseMapper<TeacherAuthEntryRe
 	 * @return: com.yonge.cooleshow.biz.dal.entity.TeacherAuthEntryRecord
 	 */
 	TeacherAuthEntryRecordVo getLastRecordByUserId(@Param("userId") Long userId);
+
 }

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java

@@ -107,7 +107,6 @@ public class CourseGroup implements Serializable {
     @ApiModelProperty(value = "更新时间")
     private Date updatedTime;
 
-
     public Long getId() {
         return id;
     }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -52,6 +52,13 @@ public interface CourseGroupService extends IService<CourseGroup> {
     void addLiveCourse(LiveCourseGroupDto dto);
 
     /**
+     * 取消课程组-下架课程组
+     *
+     * @param groupId 课程组
+     */
+    void cancelCourseGroup(Long groupId);
+
+    /**
      * 创建直播课程组时将课时写到缓存当作锁定的时间
      */
     List<CourseTimeEntity> lockCourseToCache(CheckCourseTimeDto dto);

+ 80 - 19
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -41,14 +41,13 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 /**
@@ -113,6 +112,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setSalesStartDate(group.getSalesStartDate());
         result.setSalesEndDate(group.getSalesEndDate());
         result.setMixStudentNum(group.getMixStudentNum());
+        result.setImGroupId(group.getImGroupId());
         Optional.ofNullable(group.getTeacherId()).map(this::getSysUser)
                 .ifPresent(sysUser -> result.setTeacherName(sysUser.getRealName()));
         Optional.ofNullable(group.getSubjectId()).map(subjectService::get)
@@ -121,7 +121,16 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setPlanList(coursePlanService.queryCoursePlanByGroupId(groupId));
         //课程组学员信息
         result.setStudentList(courseScheduleStudentPaymentService.queryStudentInfoByGroupId(groupId));
-
+        //查询是否购买过该课程组
+        Long id = getSysUser().getId();
+        List<CourseScheduleStudentPayment> paymentList = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                .eq(CourseScheduleStudentPayment::getUserId, id)
+                .eq(CourseScheduleStudentPayment::getCourseGroupId, groupId)
+        );
+        result.setExistBuy(0);
+        if (CollectionUtils.isNotEmpty(paymentList)) {
+            result.setExistBuy(1);
+        }
         return result;
     }
 
@@ -141,6 +150,27 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         Page<CourseGroupVo> pageInfo = PageUtil.getPageInfo(param);
         pageInfo.setAsc("b.created_time_");
         IPage<CourseGroupVo> page = baseMapper.queryTeacherCourseGroup(pageInfo, param);
+        //学生端查询报名中的课程组需要标明该学生是否已经购买过该课程组
+        String os = WrapperUtil.toStr(param, "os");
+        if ("student".equals(os) && CollectionUtils.isNotEmpty(page.getRecords())) {
+            //获取当前课程组Id
+            List<CourseGroupVo> records = page.getRecords();
+            List<Long> groupId = records.stream().map(CourseGroupVo::getCourseGroupId).collect(Collectors.toList());
+            //根据学生id 及 课程组id集合查询购买记录
+            List<CourseScheduleStudentPayment> paymentList = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                    .eq(CourseScheduleStudentPayment::getUserId, getSysUser().getId())
+                    .in(CourseScheduleStudentPayment::getCourseGroupId, groupId)
+            );
+            if (CollectionUtils.isNotEmpty(paymentList)) {
+                Map<Long, List<CourseScheduleStudentPayment>> payMap = WrapperUtil.groupList(paymentList, CourseScheduleStudentPayment::getCourseGroupId);
+                records.forEach(o -> {
+                    o.setExistBuy(0);
+                    if (payMap.containsKey(o.getCourseGroupId())) {
+                        o.setExistBuy(1);
+                    }
+                });
+            }
+        }
         return PageUtil.pageInfo(page);
     }
 
@@ -219,11 +249,44 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     }
 
     /**
+     * 取消课程组-下架课程组
+     *
+     * @param groupId 课程组
+     */
+    public void cancelCourseGroup(Long groupId) {
+        //获取课程组
+        CourseGroup group = this.getOne(Wrappers.<CourseGroup>lambdaQuery().
+                eq(CourseGroup::getId, groupId));
+        Predicate<CourseGroupEnum> courseStateFunc = e -> group.getStatus().equalsIgnoreCase(e.getCode());
+        if (courseStateFunc.test(CourseGroupEnum.ING)) {
+            throw new BizException("课程组进行中,无法下架/取消课程组!");
+        } else if (courseStateFunc.test(CourseGroupEnum.APPLY)) {
+            //已上架没人买的课程可以下架
+            if (group.getPreStudentNum() > 0) {
+                throw new BizException("课程组已有学生购买,无法下架/取消课程组!");
+            }
+        } else if (courseStateFunc.test(CourseGroupEnum.COMPLETE)) {
+            throw new BizException("课程组已完结!");
+        } else if (courseStateFunc.test(CourseGroupEnum.DISSOLVE) || courseStateFunc.test(CourseGroupEnum.CANCEL)) {
+            throw new BizException("课程组已下架!");
+        }
+        //只剩下未开售状态和上架没人购买,可以直接修改
+        group.setStatus(CourseGroupEnum.CANCEL.getCode());
+        this.updateById(group);
+        //修改课程表
+        courseScheduleService.lambdaUpdate()
+                .eq(CourseSchedule::getCourseGroupId, groupId)
+                .set(CourseSchedule::getStatus, CourseScheduleEnum.CANCEL.getCode())
+                .update();
+    }
+
+    /**
      * 创建课时写到缓存锁定时间
      */
+    @Override
     public List<CourseTimeEntity> lockCourseToCache(CheckCourseTimeDto dto) {
-        //获取课程类型
-        CourseScheduleEnum courseType = CourseScheduleEnum.existCourseType(dto.getCourseType(), "课程类型不正确!");
+        // true:陪练课PRACTICE     false:LIVE直播课
+        boolean courseTypeFlag = CourseScheduleEnum.existCourseType(dto.getCourseType(), "课程类型不正确!").equals(CourseScheduleEnum.PRACTICE);
         //先自校验传入时间是否交集
         List<CourseTimeEntity> timeList = dto.getTimeList();
         if (timeList.size() > 1) {
@@ -241,21 +304,21 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         }
         //批量检查老师课时在数据库是否重复
         batchCheckTeacherCourseTime(dto.getTeacherId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
-        //获取老师锁课缓存并添加课时数据
-        RMap<Long, List<CourseTimeEntity>> map = getExpireLiveLockTimeCache(dto.getTeacherId());
-        map.fastPut(dto.getTeacherId(), timeList);
 
         //需要自动补全课时
         if (dto.getLoop() == 1) {
             //自动排课,获取排课后所有的课程时间
-            List<CourseTimeEntity> allCourseTime = autoPlanningLiveCourseTime(dto.getTeacherId(), dto.getCourseNum(), timeList, courseType);
-            allCourseTime.sort(Comparator.comparing(CourseTimeEntity::getStartTime));
-            //替换掉原有的课时
-            dto.setTimeList(allCourseTime);
-            //将自动排课后的课时写入缓存覆盖原有的
-            map.fastPut(dto.getTeacherId(), dto.getTimeList());
+            timeList = autoPlanningLiveCourseTime(dto.getTeacherId(), dto.getCourseNum(), timeList, courseTypeFlag);
+            timeList.sort(Comparator.comparing(CourseTimeEntity::getStartTime));
+        }
+        //获取老师锁课缓存
+        RMap<Long, List<CourseTimeEntity>> map = getExpireLiveLockTimeCache(dto.getTeacherId());
+        //陪练课无需锁定时间
+        if (!courseTypeFlag) {
+            //直播课添加课时数据
+            map.fastPut(dto.getTeacherId(), timeList);
         }
-        return dto.getTimeList();
+        return timeList;
     }
 
     /**
@@ -299,14 +362,12 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      * @param teacherId      老师id
      * @param totalCourseNum 总课程数量
      * @param paramTimeList  当前课程的时间段
-     * @param courseType     PRACTICE陪练课  LIVE直播课
+     * @param courseTypeFlag true:陪练课PRACTICE     false:LIVE直播课
      * @return 自动排课后的全部课时
      */
-    private List<CourseTimeEntity> autoPlanningLiveCourseTime(Long teacherId, int totalCourseNum, List<CourseTimeEntity> paramTimeList, CourseScheduleEnum courseType) {
+    private List<CourseTimeEntity> autoPlanningLiveCourseTime(Long teacherId, int totalCourseNum, List<CourseTimeEntity> paramTimeList, boolean courseTypeFlag) {
         //是否跳过节假日
         boolean skipHoliday = false;
-        //true 陪练课
-        boolean courseTypeFlag = courseType.equals(CourseScheduleEnum.PRACTICE);
         if (courseTypeFlag) {
             //查询老师陪练课设置
             TeacherFreeTime teacherTime = teacherFreeTimeService.getOne(Wrappers.<TeacherFreeTime>lambdaQuery()

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

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.toolset.utils.date.DateUtil;
+import com.yonge.toolset.utils.string.ValueUtil;
 import org.apache.commons.beanutils.BeanUtils;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,9 +51,11 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         } catch (Exception e) {
             e.printStackTrace();
         }
+        //身份证号、手机号脱敏
+        studentHomeVo.setIdCardNo(ValueUtil.fuzzyIdCard(studentHomeVo.getIdCardNo()));
+        studentHomeVo.setPhone(ValueUtil.fuzzyMobile(studentHomeVo.getPhone()));
         studentHomeVo.setHeardUrl(user.getAvatar());
-        studentHomeVo.setUsername(user.getUsername());
-        studentHomeVo.setBirthdate(user.getBirthdate());
+
         int num = DateUtil.daysBetween(new Date(), detail.getMembershipEndTime());
         studentHomeVo.setMembershipDays(num < 0 ? 0 : num);
         StudentTotal total = (StudentTotal) redissonClient.getBucket(CacheNameEnum.STUDENT_TOTAL.getRedisKey(user.getId()))

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

@@ -14,6 +14,7 @@ import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.utils.string.StringUtil;
+import com.yonge.toolset.utils.string.ValueUtil;
 import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -93,7 +94,12 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
 
     @Override
     public TeacherAuthEntryRecordVo getLastRecordByUserId(Long userId) {
-        return baseMapper.getLastRecordByUserId(userId);
+        TeacherAuthEntryRecordVo authEntryRecordVo = baseMapper.getLastRecordByUserId(userId);
+        if(null != authEntryRecordVo){
+            authEntryRecordVo.setIdCardNo(ValueUtil.fuzzyIdCard(authEntryRecordVo.getIdCardNo()));
+            authEntryRecordVo.setPhone(ValueUtil.fuzzyMobile(authEntryRecordVo.getPhone()));
+        }
+        return authEntryRecordVo;
     }
 
     /***

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

@@ -155,7 +155,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         //开通直播需要已完成课时数
         Integer overClass = Integer.parseInt(sysConfigService.findByParamName(SysConfigConstant.OPEN_LIVE_OVER_CLASS).getParamValue());
         //根据老师规则,判断老师直播权限
-        if (totalVo.getFansNum() > fansNum && totalVo.getExpTime() > overClass) {
+        if (totalVo.getFansNum() >= fansNum && totalVo.getExpTime() >= overClass) {
             Teacher teacher = new Teacher();
             teacher.setUserId(id);
             teacher.setLiveFlag(YesOrNoEnum.YES);

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

@@ -77,20 +77,23 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
 
         BigDecimal practiceAmount = BigDecimal.ZERO;
         BigDecimal liveAmount = BigDecimal.ZERO;
+        BigDecimal videoAmount = BigDecimal.ZERO;
         BigDecimal musicAmount = BigDecimal.ZERO;
         for (AccountTotal info : infoList) {
             info.setPracticeAmount(null == info.getPracticeAmount() ? BigDecimal.ZERO : info.getPracticeAmount());
             info.setLiveAmount(null == info.getLiveAmount() ? BigDecimal.ZERO : info.getLiveAmount());
+            info.setVideoAmount(null == info.getVideoAmount() ? BigDecimal.ZERO : info.getVideoAmount());
             info.setMusicAmount(null == info.getMusicAmount() ? BigDecimal.ZERO : info.getMusicAmount());
 
             practiceAmount = practiceAmount.add(info.getPracticeAmount());
             liveAmount = liveAmount.add(info.getLiveAmount());
+            videoAmount = videoAmount.add(info.getVideoAmount());
             musicAmount = musicAmount.add(info.getMusicAmount());
         }
         AccountTotal total = new AccountTotal();
 
         total.setTotalInAmount(practiceAmount.add(liveAmount).add(musicAmount));
-        if (!BigDecimal.ZERO.equals(total.getTotalInAmount())) {
+        if (total.getTotalInAmount().doubleValue() > 0) {
             total.setPracticeAmount(practiceAmount);
             BigDecimal practiceRate = total.getPracticeAmount()
                     .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
@@ -101,6 +104,11 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
                     .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
             total.setLiveRate(liveRate);
 
+            total.setVideoAmount(videoAmount);
+            BigDecimal videoRate = total.getVideoAmount()
+                    .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
+            total.setVideoRate(videoRate);
+
             total.setMusicAmount(musicAmount);
             BigDecimal musicRate = total.getMusicAmount()
                     .divide(total.getTotalInAmount(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVo.java

@@ -73,6 +73,9 @@ public class CourseGroupVo implements Serializable {
     @ApiModelProperty(value = "直播课成课后生成的im群id")
     private String imGroupId;
 
+    @ApiModelProperty(value = "当前学生有没有购买该课程组   0没有购买    1已经购买过 ")
+    private Integer existBuy;
+
     public Long getCourseGroupId() {
         return courseGroupId;
     }
@@ -216,4 +219,12 @@ public class CourseGroupVo implements Serializable {
     public void setImGroupId(String imGroupId) {
         this.imGroupId = imGroupId;
     }
+
+    public Integer getExistBuy() {
+        return existBuy;
+    }
+
+    public void setExistBuy(Integer existBuy) {
+        this.existBuy = existBuy;
+    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseRepliedVo.java

@@ -14,6 +14,8 @@ public class CourseRepliedVo extends CourseScheduleReplied {
     @ApiModelProperty("用户名")
     private String userName;
 
+    private String realName;
+
     @ApiModelProperty("头像地址")
     private String avatar;
 
@@ -35,6 +37,14 @@ public class CourseRepliedVo extends CourseScheduleReplied {
     @ApiModelProperty("声部名称")
     private String subjectName;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public String getUserName() {
         return userName;
     }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java

@@ -39,6 +39,8 @@ public class CourseStudent implements Serializable {
     @ApiModelProperty(value = "陪练课:用户名,直播课:课程名")
     private String name;
 
+    private String realName;
+
     @ApiModelProperty(value = "陪练课:用户头像,直播课:直播背景图")
     private String cover;
 
@@ -57,6 +59,14 @@ public class CourseStudent implements Serializable {
     @ApiModelProperty(value = "直播课成课后生成的im群id")
     private String imGroupId;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public Integer getCourseId() {
         return courseId;
     }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LessonGroupVo.java

@@ -42,12 +42,22 @@ public class LessonGroupVo extends BaseEntity {
     @ApiModelProperty(value = "用户昵称")
     private String userName;
 
+    private String realName;
+
     @ApiModelProperty(value = "头像")
     private String avatar;
 
     @ApiModelProperty("购买人数")
     private Integer countStudent;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public Long getId() {
         return id;
     }

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseInfoVo.java

@@ -25,12 +25,26 @@ public class LiveCourseInfoVo extends CourseGroupVo implements Serializable {
     @ApiModel(value = "PlanVo", description = "教学计划")
     public static class PlanVo extends CourseTimeEntity implements Serializable {
 
+        @ApiModelProperty(value = "教学计划id")
+        private Long planId;
+
         @ApiModelProperty(value = "课堂编号-第几堂课")
         private Integer classNum;
 
+        @ApiModelProperty(value = "课程id")
+        private Long courseId;
+
         @ApiModelProperty(value = "教学计划/最多200字")
         private String plan;
 
+        public Long getId() {
+            return planId;
+        }
+
+        public void setId(Long id) {
+            this.planId = id;
+        }
+
         public Integer getClassNum() {
             return classNum;
         }
@@ -39,6 +53,22 @@ public class LiveCourseInfoVo extends CourseGroupVo implements Serializable {
             this.classNum = classNum;
         }
 
+        public Long getPlanId() {
+            return planId;
+        }
+
+        public void setPlanId(Long planId) {
+            this.planId = planId;
+        }
+
+        public Long getCourseId() {
+            return courseId;
+        }
+
+        public void setCourseId(Long courseId) {
+            this.courseId = courseId;
+        }
+
         public String getPlan() {
             return plan;
         }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java

@@ -21,6 +21,8 @@ public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "用户姓名")
     private String userName;
 
+    private String realName;
+
     @ApiModelProperty(value = "头像地址")
     private String avatar;
 
@@ -51,6 +53,14 @@ public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "签到时间")
     private String signInTime;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public String getSignInTime() {
         return signInTime;
     }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyRepliedVo.java

@@ -24,6 +24,8 @@ public class MyRepliedVo implements Serializable {
     @ApiModelProperty(value = "用户姓名")
     private String userName;
 
+    private String realName;
+
     @ApiModelProperty(value = "头像地址")
     private String avatar;
 
@@ -48,6 +50,14 @@ public class MyRepliedVo implements Serializable {
     @ApiModelProperty(value = "学员课后评价")
     private String studentReplied;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public Long getCourseId() {
         return courseId;
     }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PracticeTeacherVo.java

@@ -17,6 +17,8 @@ public class PracticeTeacherVo implements Serializable {
     @ApiModelProperty(value = "用户姓名")
     private String userName;
 
+    private String realName;
+
     @ApiModelProperty(value = "头像地址")
     private String avatar;
 
@@ -47,6 +49,14 @@ public class PracticeTeacherVo implements Serializable {
     @ApiModelProperty(value = "课程时长(分钟)")
     private String courseMinutes;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public Integer getTeacherId() {
         return teacherId;
     }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PracticeVo.java

@@ -21,6 +21,8 @@ public class PracticeVo implements Serializable {
     @ApiModelProperty(value = "用户名")
     private String userName;
 
+    private String realName;
+
     @ApiModelProperty(value = "用户手机号")
     private String phone;
 
@@ -54,6 +56,14 @@ public class PracticeVo implements Serializable {
     @ApiModelProperty(value = "课程状态")
     private String status;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public Long getUserId() {
         return userId;
     }

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java

@@ -26,6 +26,7 @@ public class StudentHomePage implements Serializable {
         private Long teacherId;
         @ApiModelProperty(value = "老师姓名")
         private String teacherName;
+        private String realName;
         @ApiModelProperty(value = "老师头像")
         private String avatar;
 
@@ -42,6 +43,14 @@ public class StudentHomePage implements Serializable {
         @ApiModelProperty(value = "开课时间")
         private Date courseStartTime;
 
+        public String getRealName() {
+            return realName;
+        }
+
+        public void setRealName(String realName) {
+            this.realName = realName;
+        }
+
         public Long getTeacherId() {
             return teacherId;
         }
@@ -120,6 +129,7 @@ public class StudentHomePage implements Serializable {
         private Long teacherId;
         @ApiModelProperty(value = "老师姓名")
         private String teacherName;
+        private String realName;
         @ApiModelProperty(value = "老师头像")
         private String avatar;
 
@@ -138,6 +148,14 @@ public class StudentHomePage implements Serializable {
         @ApiModelProperty(value = "购买人数")
         private Integer buyCount;
 
+        public String getRealName() {
+            return realName;
+        }
+
+        public void setRealName(String realName) {
+            this.realName = realName;
+        }
+
         public Integer getBuyCount() {
             return buyCount;
         }
@@ -224,6 +242,7 @@ public class StudentHomePage implements Serializable {
         private Long teacherId;
         @ApiModelProperty(value = "老师姓名")
         private String teacherName;
+        private String realName;
         @ApiModelProperty(value = "老师头像")
         private String avatar;
 
@@ -246,6 +265,14 @@ public class StudentHomePage implements Serializable {
         @ApiModelProperty(value = "购买人数")
         private Integer buyCount;
 
+        public String getRealName() {
+            return realName;
+        }
+
+        public void setRealName(String realName) {
+            this.realName = realName;
+        }
+
         public Integer getBuyCount() {
             return buyCount;
         }

+ 54 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.models.auth.In;
@@ -18,8 +20,6 @@ public class StudentHomeVo extends Student {
     private String heardUrl;
     @ApiModelProperty("学员昵称")
     private String username;
-    @ApiModelProperty(value = "生日")
-    private Date birthdate;
     @ApiModelProperty("会员剩余有效期天数")
     private Integer membershipDays;
     @ApiModelProperty("累计练习天数")
@@ -36,6 +36,18 @@ public class StudentHomeVo extends Student {
     private Integer starTeacherNum;
     @ApiModelProperty(value = "声部名称(支持多个,用逗号分隔) ")
     private String subjectName;
+    @ApiModelProperty(value = "性别 0女 1男")
+    private GenderEnum gender;
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+    @ApiModelProperty(value = "真实姓名")
+    private String realName;
+    @ApiModelProperty(value = "身份证号码")
+    private String idCardNo;
+    @ApiModelProperty(value = "生日")
+    private Date birthdate;
+    @ApiModelProperty(value = "是否实名 0否 1是")
+    private YesOrNoEnum isReal;
 
     public String getHeardUrl() {
         return heardUrl;
@@ -124,4 +136,44 @@ public class StudentHomeVo extends Student {
     public void setSubjectName(String subjectName) {
         this.subjectName = subjectName;
     }
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getIdCardNo() {
+        return idCardNo;
+    }
+
+    public void setIdCardNo(String idCardNo) {
+        this.idCardNo = idCardNo;
+    }
+
+    public YesOrNoEnum getIsReal() {
+        return isReal;
+    }
+
+    public void setIsReal(YesOrNoEnum isReal) {
+        this.isReal = isReal;
+    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonAuthGroup.java

@@ -13,12 +13,22 @@ public class VideoLessonAuthGroup extends VideoLessonGroup {
     @ApiModelProperty(value = "老师姓名")
     private String teacherName;
 
+    private String realName;
+
     @ApiModelProperty(value = "老师手机号")
     private String teacherPhone;
 
     @ApiModelProperty(value = "课程名称")
     private String subjectName;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public String getTeacherPhone() {
         return teacherPhone;
     }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonEvaluateVo.java

@@ -13,6 +13,7 @@ import java.util.Date;
  */
 @ApiModel(value = "VideoLessonEvaluateVo-视频课学员评价")
 public class VideoLessonEvaluateVo extends BaseEntity {
+	private String realName;
 
     @ApiModelProperty(value = "用户id")
     private Long userId;
@@ -35,6 +36,14 @@ public class VideoLessonEvaluateVo extends BaseEntity {
     @ApiModelProperty(value = "评论时间")
     private Date evaluateTime;
 
+	public String getRealName() {
+		return realName;
+	}
+
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+
 	public Long getUserId() {
 		return userId;
 	}

+ 11 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonGroupDetailVo.java

@@ -12,11 +12,21 @@ import io.swagger.annotations.ApiModelProperty;
 public class VideoLessonGroupDetailVo extends VideoLessonGroupDetail {
 
     @ApiModelProperty(value = "老师姓名")
-    private String teacherName;  //主键ID
+    private String teacherName;
+
+    private String realName;
 
     @ApiModelProperty(value = "老师手机号")
     private String teacherPhone;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public String getTeacherName() {
         return teacherName;
     }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonGroupVo.java

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
  */
 @ApiModel(value = "VideoLessonGroupVo对象", description = "视频课组列表")
 public class VideoLessonGroupVo extends VideoLessonGroup {
+    private String realName;
 
     @ApiModelProperty(value = "用户名")
     private String username;
@@ -20,6 +21,14 @@ public class VideoLessonGroupVo extends VideoLessonGroup {
     @ApiModelProperty("购买人数")
     private Integer countStudent;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public String getUsername() {
         return username;
     }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonPurchaseVo.java

@@ -16,6 +16,8 @@ public class VideoLessonPurchaseVo extends BaseEntity {
     @ApiModelProperty("学员姓名")
     private String username;
 
+    private String realName;
+
     @ApiModelProperty(value = "支付金额")
     private String payMoney;
 
@@ -25,6 +27,14 @@ public class VideoLessonPurchaseVo extends BaseEntity {
     @ApiModelProperty(value = "购买时间")
     private String purchaseTime;
 
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
     public String getStudentId() {
         return studentId;
     }

+ 4 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CoursePlanMapper.xml

@@ -24,8 +24,11 @@
     </insert>
 
     <select id="queryCoursePlanByGroupId" resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo$PlanVo">
-        select a.plan_,
+        select
+               a.id_  as planId,
+               a.plan_ as plan,
                a.class_num_,
+               b.id_ as courseId,
                b.start_time_,
                b.end_time_
         from course_plan as a

+ 11 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -143,6 +143,7 @@
         SELECT
             u.id_ AS userId,
             u.username_ AS userName,
+            u.real_name_ AS realName,
             u.avatar_ AS avatar,
             cs.class_date_ AS classDate,
             cs.start_time_ AS startTime,
@@ -236,6 +237,7 @@
             s.teacher_id_ AS teacherId,
             u.id_ AS userId,
             u.username_ AS userName,
+            u.real_name_ AS realName,
             u.avatar_ AS avatar,
             g.subject_id_ AS subjectId,
             b.name_ AS subjectName
@@ -273,6 +275,7 @@
             cs.type_ AS courseType,
             NULL AS userId,
             CONCAT(g.name_,'-第',cs.class_num_,'课') AS name,
+            NULL AS realName,
             p.payCount AS payCount,
             g.background_pic_ AS cover,
             g.subject_id_ AS subjectId,
@@ -303,6 +306,7 @@
             cs.type_ AS courseType,
             u.id_ AS userId,
             u.username_ AS name,
+            u.real_name_ AS realName,
             NULL AS payCount,
             u.avatar_ AS cover,
             g.subject_id_ AS subjectId,
@@ -329,6 +333,7 @@
         SELECT
         t.user_id_ AS teacherId,
         u.username_ AS userName,
+        u.real_name_ AS realName,
         u.avatar_ AS avatar,
 
         tt.star_grade_ AS starGrade,
@@ -373,6 +378,7 @@
             s.status_ AS `status`,
             u.id_ AS userId,
             u.username_ AS name,
+            u.real_name_ AS realName,
             u.avatar_ AS cover,
             g.subject_id_ AS subjectId,
             b.name_ AS subjectName
@@ -394,6 +400,7 @@
             s.status_ AS `status`,
             NULL AS userId,
             CONCAT(g.name_,'-第',s.class_num_,'课') AS name,
+            NULL AS realName,
             g.background_pic_ AS cover,
             g.subject_id_ AS subjectId,
             sb.name_ AS subjectName
@@ -467,6 +474,7 @@
         SELECT
             u.id_ AS teacherId,
             u.username_ AS teacherName,
+            u.real_name_ AS realName,
             u.avatar_ AS avatar,
             g.id_ AS courseGroupId,
             g.name_ AS courseGroupName,
@@ -477,13 +485,14 @@
             g.pre_student_num_ AS buyCount
         FROM course_group g
         LEFT JOIN sys_user u ON g.teacher_id_=u.id_
-        WHERE type_='LIVE'
+        WHERE type_='LIVE' and g.status_ = 'APPLY'
         ORDER BY courseStartTime DESC LIMIT 4
     </select>
     <select id="selectVideo" resultType="com.yonge.cooleshow.biz.dal.vo.StudentHomePage$Video">
         SELECT
             u.id_ AS teacherId,
             u.username_ AS teacherName,
+            u.real_name_ AS realName,
             u.avatar_ AS avatar,
             g.id_ AS videoGroupId,
             g.lesson_name_ AS videoGroupName,
@@ -505,6 +514,7 @@
         SELECT
             u.id_ AS teacherId,
             u.username_ AS teacherName,
+            u.real_name_ AS realName,
             u.avatar_ AS avatar,
             p.course_group_id_ AS courseGroupId,
             p.course_id_ AS courseId,

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml

@@ -117,6 +117,7 @@
             s.start_time_ AS startTime,
             s.end_time_ AS endTime,
             u.id_ AS studentId,
+            u.real_name_ AS realName,
             u.username_ AS userName,
             u.avatar_ AS avatar
         FROM course_schedule_replied r
@@ -138,6 +139,7 @@
         SELECT
             <include refid="baseColumns"/>,
             u.username_ AS userName,
+            u.real_name_ AS realName,
             u.avatar_ AS avatar,
 
             s.class_date_ AS classDate,

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/PracticeMapper.xml

@@ -6,6 +6,7 @@
 		SELECT
 			u.id_ AS userId,
 			u.username_ AS userName,
+			u.real_name_ AS realName,
 			u.phone_ AS phone,
 			s.name_ AS subjectName,
 			p.course_id_ AS courseId,
@@ -51,6 +52,7 @@
 		SELECT
 			u.id_ AS userId,
 			u.username_ AS userName,
+			u.real_name_ AS realName,
 			u.phone_ AS phone,
 			s.name_ AS subjectName,
 			p.course_id_ AS courseId,

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -40,7 +40,7 @@
             u.birthdate_ as birthdate,
             TIMESTAMPDIFF(YEAR, u.birthdate_, CURDATE()) as age,
             u.phone_ as phone,
-            !isnull(birthdate_) as isReal,
+            (case when isnull(u.id_card_no_) then 0 else 1 end) as isReal,
             (!isnull(membership_end_time_) and membership_end_time_ > now()) as isVip,
             (
             SELECT GROUP_CONCAT(name_) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)

+ 14 - 13
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -141,25 +141,26 @@
     </select>
     <select id="getPendingOrder" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
-        <include refid="baseColumns"/>,
-        p.trans_no_ as transNo,
-        p.pay_channel_ as payChannel
+            <include refid="baseColumns"/>,
+            p.trans_no_ as transNo,
+            p.pay_channel_ as payChannel
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_
         where t.status_ in ('WAIT_PAY','PAYING')
         and t.user_id_ = #{param.userId}
         and exists (
-        select 1 from user_order_detail d where t.order_no_ = d.order_no_
-        and d.good_type_ = #{param.goodType}
-        <choose>
-            <when test="param.goodType != null and param.goodType == 'PRACTICE'">
-                and d.merch_id_ = #{param.bizId}
-            </when>
-            <otherwise>
-                and d.biz_id_ = #{param.bizId}
-            </otherwise>
-        </choose>
+            select 1 from user_order_detail d where t.order_no_ = d.order_no_
+            and d.good_type_ = #{param.goodType}
+            <choose>
+                <when test="param.goodType != null and param.goodType == 'PRACTICE'">
+                    and d.merch_id_ = #{param.bizId}
+                </when>
+                <otherwise>
+                    and d.biz_id_ = #{param.bizId}
+                </otherwise>
+            </choose>
         )
+        order by t.create_time_ desc limit 1
     </select>
 
     <select id="selectUnRecordTimeOrder" resultType="com.yonge.cooleshow.biz.dal.entity.UserOrder">

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonEvaluateMapper.xml

@@ -19,6 +19,7 @@
 		SELECT
 			u.id_ AS userId,
 			u.username_ AS userName,
+			u.real_name_ AS realName,
 			u.avatar_ AS avatar,
 			e.is_teacher_ AS isTeacher,
 			e.id_	AS evaluateId,

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupDetailMapper.xml

@@ -85,6 +85,7 @@
 			d.sort_number_ AS sortNumber,
 			d.teacher_id_ AS teacherId,
 			u.username_ AS teacherName,
+			u.real_name_ AS realName,
 			u.phone_ AS teacherPhone,
 			d.create_time_ AS createTime,
 			d.update_by_ AS updateBy,

+ 4 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -94,6 +94,7 @@
 			<include refid="baseColumns"/>
 			s.username_ AS username,
 			s.avatar_ AS avatar,
+		    s.real_name_ AS realName,
 			(SELECT COUNT(1) FROM video_lesson_purchase_record r WHERE r.video_lesson_group_id_=g.id_) AS countStudent
 		FROM video_lesson_group g
 		LEFT JOIN sys_user s ON g.teacher_id_ = s.id_
@@ -188,6 +189,7 @@
 		SELECT
 			p.student_id_ AS studentId,
 			u.username_ AS username,
+			u.real_name_ AS realName,
 			p.pay_money_ AS payMoney,
 			p.order_no_ AS orderNo,
 			p.purchase_time_ AS purchaseTime
@@ -227,6 +229,7 @@
 			g.lesson_count_ AS lessonCount,
 			g.teacher_id_ AS teacherId,
 			u.username_ AS userName,
+			u.real_name_ AS realName,
 			u.avatar_ AS avatar,
 			(SELECT COUNT(1) FROM video_lesson_purchase_record r WHERE r.video_lesson_group_id_=g.id_) AS countStudent
 		FROM video_lesson_group g
@@ -255,6 +258,7 @@
 		r.audit_status_ AS auditStatus,
 		s.name_ AS subjectName,
 		t.username_ AS teacherName,
+		t.real_name_ AS realName,
 		t.phone_ AS teacherPhone
 		FROM video_lesson_group g
 		LEFT JOIN `subject` s ON g.lesson_subject_=s.id_

+ 17 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.student.controller;
 
+import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
+import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.vo.CourseGroupVo;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
@@ -10,6 +12,7 @@ import io.swagger.annotations.*;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -44,8 +47,22 @@ public class StudentCourseGroupController extends BaseController {
     @ApiOperation("分页查询直播课课程组列表")
     @PostMapping("/queryPageCourseGroup")
     public HttpResponseResult<PageInfo<CourseGroupVo>> queryPageLiveCourseGroup(@RequestBody Map<String, Object> param) {
+        param.put("os","student");
         return succeed(courseGroupService.queryPageLiveCourseGroup(param));
     }
 
+    @ApiOperation("创建直播课程组-锁定课程时间-将课时写到缓存当作锁定的时间")
+    @PostMapping("/lockCourseToCache")
+    public HttpResponseResult<List<CourseTimeEntity>> lockCourseToCache(@RequestBody CheckCourseTimeDto dto) {
+        return succeed(courseGroupService.lockCourseToCache(dto));
+    }
+
+    @ApiOperation("创建直播课程组-解除锁定课程时间-删除写到缓存当作锁定的课时")
+    @GetMapping("/unlockCourseToCache")
+    public HttpResponseResult<Object> unlockCourseToCache(@RequestParam("teacherId") Long teacherId) {
+        courseGroupService.unlockCourseToCache(teacherId);
+        return succeed();
+    }
+
 }
 

+ 15 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherAuthEntryRecordController.java

@@ -3,12 +3,16 @@ package com.yonge.cooleshow.teacher.controller;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherApplyDetailReq;
+import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
@@ -24,6 +28,17 @@ public class TeacherAuthEntryRecordController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @GetMapping("/getLastRecordByUserId")
+    @ApiOperation(value = "获取最近一次提交的申请内容")
+    public HttpResponseResult<TeacherAuthEntryRecordVo> getLastRecordByUserId() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        TeacherAuthEntryRecordVo detail = teacherAuthEntryRecordService.getLastRecordByUserId(user.getId());
+        return succeed(detail);
+    }
+
     @PostMapping("/doApply")
     @ApiOperation(value = "提交申请", notes = "传入teacherAuthEntryRecord")
     public HttpResponseResult<Boolean> doApply(@Valid @RequestBody TeacherApplyDetailReq teacherApplyDetailDto) throws Exception {

+ 8 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseGroupController.java

@@ -49,6 +49,7 @@ public class TeacherCourseGroupController extends BaseController {
     @ApiOperation("分页查询直播课课程组列表")
     @PostMapping("/queryPageCourseGroup")
     public HttpResponseResult<PageInfo<CourseGroupVo>> queryPageLiveCourseGroup(@RequestBody Map<String, Object> param) {
+        param.put("os","teacher");
         return succeed(courseGroupService.queryPageLiveCourseGroup(param));
     }
 
@@ -72,6 +73,13 @@ public class TeacherCourseGroupController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("取消课程组-下架课程组")
+    @GetMapping("/cancelCourseGroup")
+    public HttpResponseResult<Object> cancelCourseGroup(@RequestParam("groupId") Long groupId) {
+        courseGroupService.cancelCourseGroup(groupId);
+        return succeed();
+    }
+
     @ApiOperation("获取老师排直播课时锁定的课时")
     @GetMapping("/getLockCache")
     public HttpResponseResult<Object> getLockCache(@RequestParam("teacherId") Long teacherId) {

+ 5 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserBankCardController.java

@@ -92,7 +92,11 @@ public class UserBankCardController extends BaseController {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
 		bankCard.setUserId(user.getId());
-		return userBankCardService.unBind(bankCard);
+		try {
+			return userBankCardService.unBind(bankCard);
+		}catch (Exception e){
+			return HttpResponseResult.failed("姓名与身份证号不一致");
+		}
 	}
 
 }

+ 5 - 5
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/entity/UploadSign.java

@@ -9,18 +9,18 @@ import java.util.Map;
  * @Date: 2022/4/27
  */
 public class UploadSign implements Serializable {
-    private String fileName;
+    private String filename;
     
     private Map<String, String> postData;
     
     private List<String> unknowValueField;
 
-    public String getFileName() {
-        return fileName;
+    public String getFilename() {
+        return filename;
     }
 
-    public void setFileName(String fileName) {
-        this.fileName = fileName;
+    public void setFilename(String filename) {
+        this.filename = filename;
     }
 
     public Map<String, String> getPostData() {

+ 1 - 1
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/storage/provider/AliyunOssStoragePlugin.java

@@ -131,7 +131,7 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
     @Override
     public PostObjectFormFields getUploadSign(UploadSign uploadSign) {
         //要上传的文件名称,不包含路径信息
-        String fileName = uploadSign.getFileName();
+        String fileName = uploadSign.getFilename();
         //可以确定值得表单项
         Map<String, String> postData = uploadSign.getPostData();
         //无法确定值得表单项

+ 1 - 1
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/storage/provider/KS3StoragePlugin.java

@@ -147,7 +147,7 @@ public class KS3StoragePlugin implements StoragePlugin, InitializingBean, Dispos
     @Override
     public PostObjectFormFields getUploadSign(UploadSign uploadSign) {
         //要上传的文件名称,不包含路径信息
-        String fileName = uploadSign.getFileName();
+        String fileName = uploadSign.getFilename();
         //可以确定值得表单项
         Map<String, String> postData = uploadSign.getPostData();
         //无法确定值得表单项

+ 1 - 1
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/user/realname/RealnameAuthenticationPlugin.java

@@ -14,5 +14,5 @@ public interface RealnameAuthenticationPlugin extends InitializingBean, Disposab
 	 * @param idcardNo 身份证号码
 	 * @return true,匹配成功;否则,匹配失败
 	 */
-	public boolean verify(String realname, String idcardNo);
+	boolean verify(String realname, String idcardNo);
 }

+ 100 - 94
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/user/realname/provider/LinkfaceRealnameAuthenticationPlugin.java

@@ -4,6 +4,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -15,100 +17,104 @@ import com.yonge.toolset.utils.http.HttpUtil;
 @Service
 public class LinkfaceRealnameAuthenticationPlugin implements RealnameAuthenticationPlugin {
 
-	@Value("${realnameAuthentication.linkface.projectid:2cd4937c8dbd4f6a9c70c6d3122df5f4}")
-	public String appId;
-
-	@Value("${realnameAuthentication.linkface.projectSecret:3f809f3800654780beff1ce09b780297}")
-	public String appSecret;
-
-	@Value("${realnameAuthentication.linkface.apisUrl:https://cloudapi.linkface.cn/data/verify_id_name}")
-	public String apisUrl;
-
-	private Map<String, String> reason = new HashMap<String, String>() {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = -5123335186604042998L;
-
-		{
-			// 定义错误原因
-			put("ENCODING_ERROR", "参数非 UTF-8 编码");
-			put("INVALID_ARGUMENT", "姓名或者身份证号填写错误");
-			put("UNAUTHORIZED", "账号或密钥错误");
-			put("KEY_EXPIRED", "账号过期");
-			put("RATE_LIMIT_EXCEEDED", "调用频率过高");
-			put("OUT_OF_QUOTA", "调用次数超出限额");
-			put("NO_PERMISSION", "无调用权限");
-			put("NOT_FOUND", "请求路径错误");
-			put("DATA_SERVER_ERROR", "数据服务异常");
-			put("INTERNAL_ERROR", "内部服务异常");
-		}
-	};
-
-	public static String getName() {
-		return "linkface";
-	}
-
-	@Override
-	public void destroy() throws Exception {
-
-	}
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		if (StringUtils.isBlank(appId) || StringUtils.isBlank(appSecret) || StringUtils.isBlank(apisUrl)) {
-			throw new ThirdpartyException("实名认证插件 - Linkface 系统参数缺失,请检查");
-		}
-
-	}
-
-	@Override
-	public boolean verify(String realname, String idcardNo) {
-		String respJson = "";
-		HashMap<String, Object> params = new HashMap<String, Object>();
-		params.put("api_id", appId);
-		params.put("api_secret", appSecret);
-		params.put("name", realname);
-		params.put("id_number", idcardNo);
-		try {
-			respJson = HttpUtil.postForHttps(this.apisUrl, params);
-		} catch (Exception e) {
-			throw new ThirdpartyException("HttpUtil Connection Exception", e);
-		}
-		JSONObject json = JSONObject.parseObject(respJson);
-
-		String status = json.get("status").toString();
-		Integer result = json.get("result") == null ? null : Integer.parseInt(json.get("result").toString());
-
-		// 获取返回码
-		if (StringUtils.equals("OK", status) && (result != null && result == 1)) {
-			return true;
-		} else {
-			String msg = "";
-			if (result != null) {
-				if (result == 2) {
-					msg = "身份证号和姓名不一致";
-				} else if (result == 3) {
-					msg = "查无此身份证号";
-				}
-			} else {
-				msg = reason.get(status);
-			}
-			throw new ThirdpartyException("实名认证失败,原因:{}", msg);
-		}
-	}
-
-	public void setAppId(String appId) {
-		this.appId = appId;
-	}
-
-	public void setAppSecret(String appSecret) {
-		this.appSecret = appSecret;
-	}
-
-	public void setApisUrl(String apisUrl) {
-		this.apisUrl = apisUrl;
-	}
+    private final static Logger log = LoggerFactory.getLogger(LinkfaceRealnameAuthenticationPlugin.class);
+
+    @Value("${realnameAuthentication.linkface.projectid:2cd4937c8dbd4f6a9c70c6d3122df5f4}")
+    public String appId;
+
+    @Value("${realnameAuthentication.linkface.projectSecret:3f809f3800654780beff1ce09b780297}")
+    public String appSecret;
+
+    @Value("${realnameAuthentication.linkface.apisUrl:https://cloudapi.linkface.cn/data/verify_id_name}")
+    public String apisUrl;
+
+    private Map<String, String> reason = new HashMap<String, String>() {
+        /**
+         *
+         */
+        private static final long serialVersionUID = -5123335186604042998L;
+
+        {
+            // 定义错误原因
+            put("ENCODING_ERROR", "参数非 UTF-8 编码");
+            put("INVALID_ARGUMENT", "姓名或者身份证号填写错误");
+            put("UNAUTHORIZED", "账号或密钥错误");
+            put("KEY_EXPIRED", "账号过期");
+            put("RATE_LIMIT_EXCEEDED", "调用频率过高");
+            put("OUT_OF_QUOTA", "调用次数超出限额");
+            put("NO_PERMISSION", "无调用权限");
+            put("NOT_FOUND", "请求路径错误");
+            put("DATA_SERVER_ERROR", "数据服务异常");
+            put("INTERNAL_ERROR", "内部服务异常");
+        }
+    };
+
+    public static String getName() {
+        return "linkface";
+    }
+
+    @Override
+    public void destroy() throws Exception {
+
+    }
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        if (StringUtils.isBlank(appId) || StringUtils.isBlank(appSecret) || StringUtils.isBlank(apisUrl)) {
+            throw new ThirdpartyException("实名认证插件 - Linkface 系统参数缺失,请检查");
+        }
+
+    }
+
+    @Override
+    public boolean verify(String realname, String idcardNo) {
+        String respJson = "";
+        HashMap<String, Object> params = new HashMap<String, Object>();
+        params.put("api_id", appId);
+        params.put("api_secret", appSecret);
+        params.put("name", realname);
+        params.put("id_number", idcardNo);
+        try {
+            respJson = HttpUtil.postForHttps(this.apisUrl, params);
+        } catch (Exception e) {
+            log.error("实名认证接口请求失败,参数:{},异常信息:{}", JSONObject.toJSONString(params), e.getMessage());
+            e.printStackTrace();
+            throw new ThirdpartyException("实名认证请求失败");
+        }
+        JSONObject json = JSONObject.parseObject(respJson);
+
+        String status = json.get("status").toString();
+        Integer result = json.get("result") == null ? null : Integer.parseInt(json.get("result").toString());
+
+        // 获取返回码
+        if (StringUtils.equals("OK", status) && (result != null && result == 1)) {
+            return true;
+        } else {
+            String msg = "";
+            if (result != null) {
+                if (result == 2) {
+                    msg = "身份证号和姓名不一致";
+                } else if (result == 3) {
+                    msg = "查无此身份证号";
+                }
+            } else {
+                msg = reason.get(status);
+            }
+            throw new ThirdpartyException("实名认证失败,原因:{}", msg);
+        }
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
+    public void setApisUrl(String apisUrl) {
+        this.apisUrl = apisUrl;
+    }
 
 	/*public static void main(String[] args) {
 		LinkfaceRealnameAuthenticationPlugin plugin = new LinkfaceRealnameAuthenticationPlugin();