浏览代码

Merge branch 'feature/0529-live' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 1 年之前
父节点
当前提交
04484c9a67

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImLiveBroadcastRoomDto.java

@@ -30,6 +30,9 @@ public class ImLiveBroadcastRoomDto implements Serializable {
     @ApiModelProperty(value = "主讲人id/老师id")
     private Integer speakerId;
 
+
+    @ApiModelProperty(value = "主讲人名称")
+    private String speakerName;
     @ApiModelProperty("用户类型 TEACHER 老师 EDUCATION 教务端")
     private SysUserType clientType;
 
@@ -79,6 +82,15 @@ public class ImLiveBroadcastRoomDto implements Serializable {
     @ApiModelProperty("声部")
     private String subjectId;
 
+
+    public String getSpeakerName() {
+        return speakerName;
+    }
+
+    public void setSpeakerName(String speakerName) {
+        this.speakerName = speakerName;
+    }
+
     public ImLiveBroadcastRoomDto groupType(String groupType) {
         this.groupType = groupType;
         return this;

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysCoupon.java

@@ -42,7 +42,7 @@ public class SysCoupon extends BaseEntity implements Serializable{
 	@ApiModelProperty("券类型:FULL_REDUCTION(满减券),DISCOUNT(折扣券)")
 	private CouponTypeEnum type;
 
-    @NotBlank(message = "优惠券详细分类不能为空!")
+    //@NotNull(message = "优惠券详细分类不能为空!")
     @ApiModelProperty(value = "详情-CouponDetailTypeEnum-枚举类")
     private CouponDetailTypeEnum typeDetail;
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CouponDetailTypeEnum.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.enums;
 
+import com.ym.mec.common.enums.BaseEnum;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.ArrayList;
@@ -14,7 +15,7 @@ import java.util.stream.Collectors;
  * @author hgw
  * Created by 2021-12-29
  */
-public enum CouponDetailTypeEnum {
+public enum CouponDetailTypeEnum implements BaseEnum<String, CouponDetailTypeEnum> {
 
     //商品-其他类型优惠券
     OTHER("OTHER", "其他"),

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -433,4 +433,11 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
     * @date 2021/10/12 14:51
     */
     List<StudentVipGroupShowListDto> queryVipPracticeGroups(StudentVipGroupQueryInfo queryInfo);
+
+    /**
+     * 直播课程组信息
+     *
+     * @param id 直播课程组id
+     */
+    VipGroupApplyDto liveGroupDetail(Long id);
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/FinancialExpenditureServiceImpl.java

@@ -624,7 +624,7 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
                         Objects.isNull(e.getAmount()) ||
                         Objects.isNull(e.getStudentId()) ||
                         Objects.isNull(e.getVipGroupId())).count();
-                if(count > 0l){
+                if(count > 0L){
                     throw new BizException("表单信息有误,请核实");
                 }
                 for (FinancialExpenditure financialExpenditure : financialExpenditureList) {
@@ -635,7 +635,7 @@ public class FinancialExpenditureServiceImpl extends BaseServiceImpl<Long, Finan
                     returnFeeDto.setConfirmReturnActivityGive(true);
                     returnFeeDto.setGroupId(financialExpenditure.getVipGroupId());
                     returnFeeDto.setVipGroupId(financialExpenditure.getVipGroupId());
-                    if(returnFeeDto.getGroupType() == GroupType.VIP){
+                    if(returnFeeDto.getGroupType() == GroupType.VIP || returnFeeDto.getGroupType() == GroupType.LIVE){
                         vipGroupService.checkApplyRefundForStudentOa(returnFeeDto);
                     }else if(returnFeeDto.getGroupType() == GroupType.COMM || returnFeeDto.getGroupType() == GroupType.PRACTICE){
                         groupClassService.checkCancelGroupOa(returnFeeDto);

+ 107 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -248,6 +248,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     @Autowired
     private SysUserCashAccountLogService sysUserCashAccountLogService;
 
+    @Autowired
+    private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
+
     private static final Logger LOGGER = LoggerFactory.getLogger(VipGroup.class);
 
     @Override
@@ -1599,11 +1602,16 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
     @Override
     public PageInfo<VipGroup> findVipGroups(VipGroupQueryInfo queryInfo) {
+        if (queryInfo.getGroupType().equals(GroupType.LIVE.getCode())) {
+            queryInfo.setOrganId(null);
+            queryInfo.setLiveOrganId(null);
+        }
         PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
 
         List<VipGroup> dataList = null;
+
         int count = vipGroupDao.countVipGroupByOrgan(params);
         if (queryInfo.isExport() && count > 50000) {
             throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
@@ -1618,9 +1626,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 Map<String, Integer> vipGroupOverCourseMaps = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(vipGroupOverCourses)), HashMap.class);
                 List<Integer> educationalTeacherIds = dataList.stream().filter(data -> Objects.nonNull(data.getEducationalTeacherId())).map(VipGroup::getEducationalTeacherId).collect(Collectors.toList());
 
+                // 报名人数
                 List<ClassGroup> classGroupsByVipGroups = classGroupDao
                         .findByMusicGroupsAndType(vipGroupIds.stream().map(vipGroupId -> String.valueOf(vipGroupId)).collect(Collectors.toList()),
-                                GroupType.VIP.getCode());
+                                StringUtils.isBlank(queryInfo.getGroupType())? GroupType.VIP.getCode():queryInfo.getGroupType());
 
                 Map<String, ClassGroup> vipGroupClassGroupMap = classGroupsByVipGroups.stream().collect(Collectors.toMap(ClassGroup::getMusicGroupId, classGroup -> classGroup));
 
@@ -1635,6 +1644,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 }
 
                 List<Integer> organIds = dataList.stream().map(VipGroup::getOrganId).collect(Collectors.toList());
+                // 直播课 分部为 organIdList
+                organIds.addAll(dataList.stream().filter(o -> StringUtils.isNotBlank(o.getOrganIdList()))
+                        .flatMap( o -> Arrays.stream(o.getOrganIdList().split(",")))
+                        .map(Integer::parseInt)
+                        .collect(Collectors.toSet()));
                 List<Organization> organs = organizationDao.findOrgans(organIds);
                 Map<Integer, String> organNameMap = new HashMap<>();
                 if (!CollectionUtils.isEmpty(organs)) {
@@ -1666,6 +1680,23 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                     vipGroup.setCurrentClassTimes(aLong1 == null ? 0 : aLong1.intValue());
 
                     vipGroup.setOrganName(organNameMap.get(vipGroup.getOrganId()));
+                    // 直播课 分部为 organIdList
+                    if (vipGroup.getGroupType().equals(GroupType.LIVE.getCode())) {
+                        String organIdList = vipGroup.getOrganIdList();
+                        if (StringUtils.isNotBlank(organIdList)) {
+                            List<String> organNames = new ArrayList<>();
+                            for (String s : organIdList.split(",")) {
+                                String s1 = organNameMap.get(Integer.parseInt(s));
+                                if (StringUtils.isNotBlank(s1) && !organNames.contains(s1)) {
+                                    organNames.add(s1);
+                                }
+                            }
+                            vipGroup.setOrganName(String.join(",", organNames));
+                        } else {
+                            vipGroup.setOrganName("");
+                        }
+
+                    }
 
                     if ((Objects.isNull(aLong1) || aLong1 <= 0)
                             && (Objects.isNull(classGroup) || Optional.ofNullable(classGroup.getStudentNum()).orElse(0) <= 0)) {
@@ -2844,7 +2875,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         Long vipGroupId = returnFeeDto.getVipGroupId();
         Integer studentId = returnFeeDto.getStudentId();
         if (Objects.isNull(vipGroupId) || Objects.isNull(studentId)) {
-            throw new BizException("请指定课与学生");
+            throw new BizException("请指定课与学生");
         }
         SysUser user = teacherDao.getUser(studentId);
         if (user == null) {
@@ -2865,7 +2896,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             throw new BizException("课程 {} {} 不支持退学", vipGroupId, vipGroup.getName());
         }
 
-        List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(), GroupType.VIP.getCode(), studentId);
+        List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(),vipGroup.getGroupType(), studentId);
         if (!CollectionUtils.isEmpty(studentApplyRefunds)) {
             throw new BizException("学生 {} {} 存在退课申请", studentId, user.getUsername());
         }
@@ -2913,10 +2944,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         if (vipGroup.getName().startsWith("考前辅导课")) {
             return;
         }
-
         VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId());
 
-        List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(), GroupType.VIP.getCode(), studentId);
+        List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(), vipGroup.getGroupType(), studentId);
         if (!CollectionUtils.isEmpty(studentApplyRefunds)) {
             return;
         }
@@ -2938,20 +2968,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             if (Objects.isNull(amount)) {
                 return;
             }
-//			Map<String, BigDecimal> studentSurplusCourseFee = getStudentSurplusCourseFee(vipGroupId, studentId);
-//			BigDecimal suplusCourseFee = studentSurplusCourseFee.get("suplusCourseOriginalFee");
-//			if(amount.compareTo(suplusCourseFee) > 0){
-//				throw new BizException("学员最大可退费金额为{}元", suplusCourseFee.toString());
-//			}
         }
-        //退还活动购买
-//        ActivityUserMapper activityUserMapper = activityUserMapperService.findByStudentId(vipGroup.getId(), studentId);
-//        HttpResponseResult result = groupClassService.quitActivityGive(activityUserMapper, returnFeeDto.getConfirmReturnActivityGive(), vipGroup.getId(), VIP);
+        GroupType groupType = GroupType.VIP;
+        ReturnFeeEnum returnFeeEnum = ReturnFeeEnum.VIP;
+        if("LIVE".equals(vipGroup.getGroupType())){
+            groupType = GroupType.LIVE;
+            returnFeeEnum = ReturnFeeEnum.LIVE;
+        }
 
         if (classStudentMapperByUserIdAndClassGroupId.getStatus().equals(ClassGroupStudentStatusEnum.QUIT_SCHOOL)) {
             classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT);
             classGroupStudentMapperDao.update(classStudentMapperByUserIdAndClassGroupId);
-            studentPauseInfoDao.deleteUserPauseInfoWithGroup(GroupType.VIP, vipGroupId.toString(), studentId);
+            studentPauseInfoDao.deleteUserPauseInfoWithGroup(groupType, vipGroupId.toString(), studentId);
 
             classGroup.setStudentNum(classGroup.getStudentNum() - 1);
             classGroupDao.update(classGroup);
@@ -2961,18 +2989,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         //记录日志
         SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
         sysUserCashAccountLog.setUserId(studentId);
-        sysUserCashAccountLog.setGroupType(VIP);
+        sysUserCashAccountLog.setGroupType(groupType);
         sysUserCashAccountLog.setOrganId(vipGroup.getOrganId());
         sysUserCashAccountLog.setGroupId(vipGroupId.toString());
         sysUserCashAccountLog.setAmount(amount);
-        sysUserCashAccountLog.setReturnFeeType(ReturnFeeEnum.VIP);
-        sysUserCashAccountLog.setComment("OA审批VIP退课");
+        sysUserCashAccountLog.setReturnFeeType(returnFeeEnum);
+        sysUserCashAccountLog.setComment("OA审批" + groupType.getDesc() + "退学");
         sysUserCashAccountLogDao.insert(sysUserCashAccountLog);
 
         classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT);
         classGroupStudentMapperDao.update(classStudentMapperByUserIdAndClassGroupId);
 
-        courseScheduleService.batchDeleteMusicGroupCourseWithStudent(vipGroupId.toString(), studentId, GroupType.VIP);
+        courseScheduleService.batchDeleteMusicGroupCourseWithStudent(vipGroupId.toString(), studentId, groupType);
 
         List<Integer> studentPaymentIds = courseScheduleStudentPaymentDao.findNotStartCourseStudentPaymentIdsWithClassGroupAndStudent(classGroup.getId(), studentId);
         if (!CollectionUtils.isEmpty(studentPaymentIds)) {
@@ -4253,7 +4281,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     public void updateVipGroupStatusToFinished() {
 
         Date now = new Date();
-    	//更新至已结束
+        //更新至已结束
         List<VipGroup> vipGroupList = vipGroupDao.queryRequiredOverList();
         if (vipGroupList != null && vipGroupList.size() > 0) {
             for (VipGroup vipGroup : vipGroupList) {
@@ -4277,9 +4305,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         //关闭没有学生的课程组
         List<VipGroupClassGroupMapper> vipGroupClassGroupMapperList = classGroupStudentMapperDao.queryWaitCancelVipGroup();
         if(vipGroupClassGroupMapperList != null && vipGroupClassGroupMapperList.size() > 0){
-        	vipGroupList = vipGroupDao.queryByIds(vipGroupClassGroupMapperList.stream().map(t -> t.getId().toString()).collect(Collectors.joining(",")));
-        	for(VipGroup vipGroup : vipGroupList){
-        		vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
+            vipGroupList = vipGroupDao.queryByIds(vipGroupClassGroupMapperList.stream().map(t -> t.getId().toString()).collect(Collectors.joining(",")));
+            for(VipGroup vipGroup : vipGroupList){
+                vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
                 vipGroup.setUpdateTime(now);
                 vipGroup.setStopReason("没有学员");
                 
@@ -4289,11 +4317,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
                 //删除考勤
                 teacherAttendanceDao.deleteByMusicGroupId(vipGroup.getId() + "", GroupType.VIP);
-        	}
+            }
             vipGroupDao.batchUpdate(vipGroupList);
             
             for(VipGroupClassGroupMapper vgcgm : vipGroupClassGroupMapperList){
-            	imGroupService.cancel(vgcgm.getClassGroupId().toString());
+                imGroupService.cancel(vgcgm.getClassGroupId().toString());
             }
         }
         
@@ -4397,4 +4425,59 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         List<StudentVipGroupShowListDto> collect = vipGroups.stream().sorted(Comparator.comparing(StudentVipGroupShowListDto::getCreateTime).reversed()).collect(Collectors.toList());
         return collect;
     }
+
+
+    /**
+     * 直播课程组信息
+     *
+     * @param id 直播课程组id
+     */
+    @Override
+    public VipGroupApplyDto liveGroupDetail(Long id) {
+        VipGroup vipGroup = this.get(id);
+        if (Objects.isNull(vipGroup)) {
+            throw new BizException("未找到此课程");
+        }
+        if (!vipGroup.getGroupType().equals(GroupType.LIVE.getCode())) {
+            throw new BizException("此课程不是直播课程");
+        }
+        VipGroupApplyDto vipGroupApplyDto = new VipGroupApplyDto();
+
+        VipGroupApplyBaseInfoDto baseInfoDto = JSON.parseObject(JSON.toJSONString(vipGroup), VipGroupApplyBaseInfoDto.class);
+
+        vipGroupApplyDto.setVipGroupApplyBaseInfo(baseInfoDto);
+        //  分部名  声部  乐团主管
+
+        String organIdList = baseInfoDto.getOrganIdList();
+
+        baseInfoDto.setOrganName(organizationDao.findByOrganIds(organIdList).stream().collect(Collectors.joining(",")));
+
+        String subjectIdList = baseInfoDto.getSubjectIdList();
+        if ("-1".equals(subjectIdList)) {
+            baseInfoDto.setSubjectName("乐理");
+        } else {
+            baseInfoDto.setSubjectName(subjectDao.findNames(subjectIdList));
+        }
+        Integer educationalTeacherId = baseInfoDto.getEducationalTeacherId();
+        if (Objects.nonNull(educationalTeacherId)) {
+            baseInfoDto.setEducationalTeacherName(sysUserService.queryUserById(educationalTeacherId).getRealName());
+        }
+
+        // 设置课程
+        List<CourseSchedule> courseSchedules = JSON.parseArray(baseInfoDto.getCourseSchedulesJson(), CourseSchedule.class);
+
+        vipGroupApplyDto.setCourseSchedules(courseSchedules);
+
+        // 直播信息
+        ImLiveBroadcastRoomDto imLiveBroadcastRoomDto = JSON.parseObject(baseInfoDto.getLiveConfigJson(), ImLiveBroadcastRoomDto.class);
+
+        vipGroupApplyDto.setLiveBroadcastRoom(imLiveBroadcastRoomDto);
+        // 主讲人信息
+        SysUser sysUser = sysUserService.queryUserById(imLiveBroadcastRoomDto.getSpeakerId());
+        imLiveBroadcastRoomDto.setSpeakerName(sysUser.getRealName());
+
+
+        return vipGroupApplyDto;
+
+    }
 }

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -684,7 +684,8 @@
             IF(sa.status_ IS NULL,'NORMAL',sa.status_) attendance_status_,
             csc.id_ IS NOT NULL complaint_status_,
             cs.teach_mode_,
-            cs.new_course_id_
+            cs.new_course_id_,
+            cs.group_type_
         FROM
             course_schedule_student_payment cssp
             LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_

+ 1 - 0
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -47,6 +47,7 @@
         <result column="educational_teacher_id_" property="educationalTeacherId"/>
         <result column="vip_group_category_name_" property="vipGroupCategoryName"/>
         <result column="educational_teacher_name_" property="educationalTeacherName" />
+        <result column="live_config_json_" property="liveConfigJson" />
         <result column="tenant_id_" property="tenantId" />
     </resultMap>
 

+ 2 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java

@@ -57,7 +57,7 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
 
     @Override
     public void afterPropertiesSet() {
-        /*ProjectConfig projectconfig = new ProjectConfig();
+        ProjectConfig projectconfig = new ProjectConfig();
         projectconfig.setProjectId(projectId);
         projectconfig.setProjectSecret(projectSecret);
         projectconfig.setItsmApiUrl(apisUrl);
@@ -69,7 +69,7 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
         serviceClient = ServiceClientManager.get(projectId);
         if (serviceClient == null) {
             throw new ThirdpartyException("获取e签宝客户端失败");
-        }*/
+        }
     }
 
     @Override

+ 0 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -130,7 +130,6 @@ public class TaskController extends BaseController {
     private TeacherCloudCourseReportService teacherCloudCourseReportService;
     @Autowired
     private LessonExaminationService lessonExaminationService;
-
     @Autowired
     private DegreeService degreeService;
 

+ 10 - 0
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

@@ -166,6 +166,16 @@ public class VipGroupManageController extends BaseController {
         return vipGroupService.createVipGroup(vipGroupApplyDto);
     }
 
+
+    @ApiOperation(value = "直播课详情")
+    @GetMapping("/liveGroupDetail/{id}")
+    @PreAuthorize("@pcs.hasPermissions('vipGroupManage/liveGroupDetail')")
+    public HttpResponseResult<VipGroupApplyDto> liveGroupDetail(@PathVariable Long id){
+        return succeed(vipGroupService.liveGroupDetail(id));
+
+    }
+
+
     @ApiOperation(value = "获取教务与指导老师公共分部")
     @GetMapping("/getPublicOrgans")
     @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getPublicOrgans')")