|
@@ -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());
|
|
|
+
|
|
|
+ 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()));
|
|
|
+
|
|
|
+ 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;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ 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;
|
|
|
+
|
|
|
+ }
|
|
|
}
|