|
@@ -1,11 +1,33 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
-import com.ym.mec.biz.dal.dao.*;
|
|
|
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.NO;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
import com.ym.mec.biz.dal.entity.MusicGroup;
|
|
|
import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
|
|
|
import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
|
|
|
import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
|
|
|
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.FeeType;
|
|
|
import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
|
|
|
import com.ym.mec.biz.dal.enums.MessageTypeEnum;
|
|
|
import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
|
|
@@ -21,17 +43,6 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
|
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
-
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.NO;
|
|
|
-
|
|
|
@Service
|
|
|
public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalender> implements MusicGroupPaymentCalenderService {
|
|
|
|
|
@@ -67,7 +78,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
|
|
|
musicGroupPaymentCalender.setCreateTime(date);
|
|
|
musicGroupPaymentCalender.setUpdateTime(date);
|
|
|
- musicGroupPaymentCalender.setDeadlinePaymentDate(DateUtil.addDays(musicGroupPaymentCalender.getStartPaymentDate(), 3));
|
|
|
+ if (musicGroupPaymentCalender.getDeadlinePaymentDate() == null) {
|
|
|
+ musicGroupPaymentCalender.setDeadlinePaymentDate(DateUtil.addDays(musicGroupPaymentCalender.getStartPaymentDate(), 3));
|
|
|
+ }
|
|
|
// 判断缴费开始时间、结束时间是否被其他缴费记录占用
|
|
|
int count = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(musicGroupId, musicGroupPaymentCalender.getStartPaymentDate(),
|
|
|
musicGroupPaymentCalender.getDeadlinePaymentDate());
|
|
@@ -103,10 +116,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
|
|
|
musicGroupPaymentCalenderDetail.setCreateTime(date);
|
|
|
musicGroupPaymentCalenderDetail.setExpectAmount(mgsf.getCourseFee());
|
|
|
- if (mgsf.getCourseFee().doubleValue() == 0) {
|
|
|
- musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
|
|
|
- } else {
|
|
|
- musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
|
|
|
+ musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
|
|
|
+ if (mgsf.getCourseFee().doubleValue() != 0) {
|
|
|
studentIds.add(mgsf.getUserId());
|
|
|
}
|
|
|
musicGroupPaymentCalenderDetail.setUpdateTime(date);
|
|
@@ -117,14 +128,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
|
|
|
// 更新学员缴费状态
|
|
|
for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
|
|
|
- if (mgsf.getCourseFee().doubleValue() == 0) {
|
|
|
- mgsf.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
|
|
|
- if (musicGroupPaymentCalender.getType() != FeeType.OFFLINE) {
|
|
|
- mgsf.setRemainNetworkClassTimes(mgsf.getRemainNetworkClassTimes() + 1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- mgsf.setPaymentStatus(PaymentStatus.NON_PAYMENT);
|
|
|
- }
|
|
|
+ mgsf.setPaymentStatus(PaymentStatus.NON_PAYMENT);
|
|
|
mgsf.setUpdateTime(date);
|
|
|
updateMusicGroupStudentFeeList.add(mgsf);
|
|
|
}
|
|
@@ -157,36 +161,24 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
|
|
|
- //获取当天创建且未缴费的数据,并推送
|
|
|
+ // 获取当天创建且未缴费的数据,并推送
|
|
|
List<MusicGroupPaymentCalenderDetail> details = musicGroupPaymentCalenderDetailDao.queryNoPaymentCanPushList();
|
|
|
- if(details != null && details.size() > 0){
|
|
|
+ if (details != null && details.size() > 0) {
|
|
|
Set<String> musicGroupIds = details.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
|
|
|
Map<String, String> musicGroupNameMap = MapUtil.convertMybatisMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
|
|
|
- for (MusicGroupPaymentCalenderDetail detail:details) {
|
|
|
+ for (MusicGroupPaymentCalenderDetail detail : details) {
|
|
|
+ if (detail.getExpectAmount().doubleValue() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
Map<Integer, String> push = new HashMap<>(1);
|
|
|
push.put(detail.getUserId(), detail.getUserId() + "");
|
|
|
-// MusicGroup musicGroup = musicGroupDao.get(detail.getMusicGroupId());
|
|
|
+ // MusicGroup musicGroup = musicGroupDao.get(detail.getMusicGroupId());
|
|
|
String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
|
|
|
String memo = "4?" + baseUrl + "/#/renew?musicGroupId=" + detail.getMusicGroupId();
|
|
|
// 发送续费通知
|
|
|
sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
|
|
|
null, 0, memo, "STUDENT", musicGroupNameMap.get(detail.getMusicGroupId()));
|
|
|
}
|
|
|
- /*Map<Integer,String> listMap = MapUtil.convertMybatisMap(musicGroupPaymentCalenderDetailDao.queryPaymentPushMap());
|
|
|
- Set<Integer> studentIds = details.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
|
|
|
- String musicGroupId = details.get(0).getMusicGroupId();
|
|
|
- if (studentIds.size() > 0) {
|
|
|
- Map<Integer, String> push = new HashMap<>();
|
|
|
- for (Integer userId : studentIds) {
|
|
|
- push.put(userId, userId + "");
|
|
|
- }
|
|
|
- MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
|
|
|
- String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
|
|
|
- String memo = "4?" + baseUrl + "/#/renew?musicGroupId=" + musicGroup.getId();
|
|
|
- // 发送续费通知
|
|
|
- sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
|
|
|
- null, 0, memo, "STUDENT", musicGroup.getName());
|
|
|
- }*/
|
|
|
}
|
|
|
|
|
|
Date date = new Date();
|
|
@@ -198,18 +190,42 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
List<MusicGroupPaymentCalender> updateMusicGroupPaymentCalenderList = new ArrayList<MusicGroupPaymentCalender>();
|
|
|
|
|
|
MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
|
|
|
+ MusicGroupStudentFee musicGroupStudentFee = null;
|
|
|
List<MusicGroupStudentFee> updateMusicGroupStudentFeeList = new ArrayList<MusicGroupStudentFee>();
|
|
|
List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
|
|
|
+ List<MusicGroupPaymentCalenderDetail> updateMusicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
|
|
|
|
|
|
for (MusicGroupPaymentCalender mgpc : musicGroupPaymentCalenderList) {
|
|
|
|
|
|
+ List<MusicGroupStudentFee> musicGroupStudentFeeList = musicGroupStudentFeeDao.queryByMusicGroupId(mgpc.getMusicGroupId());
|
|
|
+ Map<Integer, MusicGroupStudentFee> feeMap = musicGroupStudentFeeList.stream()
|
|
|
+ .collect(Collectors.toMap(MusicGroupStudentFee::getUserId, fee -> fee));
|
|
|
+
|
|
|
if (mgpc.getDeadlinePaymentDate() != null && date.after(mgpc.getDeadlinePaymentDate()) && mgpc.getPaymentStatus() == PaymentStatusEnum.OPEN) {
|
|
|
// “进行中”更新至“已结束”
|
|
|
mgpc.setUpdateTime(date);
|
|
|
mgpc.setPaymentStatus(PaymentStatusEnum.YES);
|
|
|
updateMusicGroupPaymentCalenderList.add(mgpc);
|
|
|
|
|
|
- // 学生状态更新已结束
|
|
|
+ // 0元学生改成“已缴费”
|
|
|
+ List<MusicGroupPaymentCalenderDetail> list = musicGroupPaymentCalenderDetailDao.queryByCalenderId(mgpc.getId());
|
|
|
+ for (MusicGroupPaymentCalenderDetail mgpcd : list) {
|
|
|
+ if (mgpcd.getExpectAmount().doubleValue() == 0) {
|
|
|
+ mgpcd.setActualAmount(BigDecimal.ZERO);
|
|
|
+ mgpcd.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
|
|
|
+ mgpcd.setUpdateTime(date);
|
|
|
+ updateMusicGroupPaymentCalenderDetailList.add(mgpcd);
|
|
|
+
|
|
|
+ // 更新fee表,且加1
|
|
|
+ musicGroupStudentFee = feeMap.get(mgpcd.getUserId());
|
|
|
+ if (musicGroupStudentFee != null) {
|
|
|
+ musicGroupStudentFee.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
|
|
|
+ musicGroupStudentFee.setUpdateTime(date);
|
|
|
+ musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getContinuousAbsenteeismTimes() + 1);
|
|
|
+ updateMusicGroupStudentFeeList.add(musicGroupStudentFee);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
} else if (mgpc.getStartPaymentDate() != null && date.after(mgpc.getStartPaymentDate()) && mgpc.getPaymentStatus() == PaymentStatusEnum.NO) {
|
|
|
// “未开始”更新至“进行中”
|
|
@@ -218,7 +234,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
updateMusicGroupPaymentCalenderList.add(mgpc);
|
|
|
|
|
|
// 学生状态更新进行中
|
|
|
- List<MusicGroupStudentFee> musicGroupStudentFeeList = musicGroupStudentFeeDao.queryByMusicGroupId(mgpc.getMusicGroupId());
|
|
|
Set<Integer> studentIds = new HashSet<Integer>();
|
|
|
// 创建缴费明细
|
|
|
for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
|
|
@@ -226,10 +241,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(mgpc.getId());
|
|
|
musicGroupPaymentCalenderDetail.setCreateTime(date);
|
|
|
musicGroupPaymentCalenderDetail.setExpectAmount(mgsf.getCourseFee());
|
|
|
- if (mgsf.getCourseFee().doubleValue() == 0) {
|
|
|
- musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
|
|
|
- } else {
|
|
|
- musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
|
|
|
+ musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
|
|
|
+ if (mgsf.getCourseFee().doubleValue() != 0) {
|
|
|
studentIds.add(mgsf.getUserId());
|
|
|
}
|
|
|
musicGroupPaymentCalenderDetail.setUpdateTime(date);
|
|
@@ -240,14 +253,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
|
|
|
// 更新学员缴费状态
|
|
|
for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
|
|
|
- if (mgsf.getCourseFee().doubleValue() == 0) {
|
|
|
- mgsf.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
|
|
|
- if (mgpc.getType() != FeeType.OFFLINE) {
|
|
|
- mgsf.setRemainNetworkClassTimes(mgsf.getRemainNetworkClassTimes() + 1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- mgsf.setPaymentStatus(PaymentStatus.NON_PAYMENT);
|
|
|
- }
|
|
|
+ mgsf.setPaymentStatus(PaymentStatus.NON_PAYMENT);
|
|
|
mgsf.setUpdateTime(date);
|
|
|
updateMusicGroupStudentFeeList.add(mgsf);
|
|
|
}
|
|
@@ -278,6 +284,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
musicGroupStudentFeeDao.batchUpdate(updateMusicGroupStudentFeeList);
|
|
|
}
|
|
|
|
|
|
+ if (updateMusicGroupPaymentCalenderDetailList.size() > 0) {
|
|
|
+ musicGroupPaymentCalenderDetailDao.batchUpdate(updateMusicGroupPaymentCalenderDetailList);
|
|
|
+ }
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -377,10 +387,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(id);
|
|
|
Set<Long> set = new HashSet<>();
|
|
|
set.add(id);
|
|
|
- Map<Long,Long> expectNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countExpectNum(set));
|
|
|
- Map<Long,Long> actualNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countActualNum(set));
|
|
|
- calender.setActualNum(actualNumMap.get(id)==null?0:actualNumMap.get(id).intValue());
|
|
|
- calender.setExpectNum(expectNumMap.get(id)==null?0:expectNumMap.get(id).intValue());
|
|
|
+ Map<Long, Long> expectNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countExpectNum(set));
|
|
|
+ Map<Long, Long> actualNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countActualNum(set));
|
|
|
+ calender.setActualNum(actualNumMap.get(id) == null ? 0 : actualNumMap.get(id).intValue());
|
|
|
+ calender.setExpectNum(expectNumMap.get(id) == null ? 0 : expectNumMap.get(id).intValue());
|
|
|
BigDecimal sumActualAmount = musicGroupPaymentCalenderDetailDao.sumActualAmount(id);
|
|
|
Map<String, Object> result = new HashMap<>(2);
|
|
|
result.put("calender", calender);
|
|
@@ -392,30 +402,30 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
public Object queryDetailPage(MusicCalenderQueryInfo queryInfo) {
|
|
|
PageInfo<MusicGroupPaymentCalender> pageInfo = queryPage(queryInfo);
|
|
|
List<MusicGroupPaymentCalender> rows = pageInfo.getRows();
|
|
|
- if(rows.size() == 0){
|
|
|
+ if (rows.size() == 0) {
|
|
|
return pageInfo;
|
|
|
}
|
|
|
Set<Long> collect = rows.stream().map(e -> e.getId()).collect(Collectors.toSet());
|
|
|
- Map<Long,Long> expectNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countExpectNum(collect));
|
|
|
- Map<Long,Long> actualNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countActualNum(collect));
|
|
|
- rows.forEach(e->{
|
|
|
- e.setActualNum(actualNumMap.get(e.getId())==null?0:actualNumMap.get(e.getId()).intValue());
|
|
|
- e.setExpectNum(expectNumMap.get(e.getId())==null?0:expectNumMap.get(e.getId()).intValue());
|
|
|
+ Map<Long, Long> expectNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countExpectNum(collect));
|
|
|
+ Map<Long, Long> actualNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countActualNum(collect));
|
|
|
+ rows.forEach(e -> {
|
|
|
+ e.setActualNum(actualNumMap.get(e.getId()) == null ? 0 : actualNumMap.get(e.getId()).intValue());
|
|
|
+ e.setExpectNum(expectNumMap.get(e.getId()) == null ? 0 : expectNumMap.get(e.getId()).intValue());
|
|
|
});
|
|
|
return pageInfo;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void paymentPush(Long id, String userIds) {
|
|
|
- //推送所有
|
|
|
- if(StringUtils.isEmpty(userIds)){
|
|
|
+ // 推送所有
|
|
|
+ if (StringUtils.isEmpty(userIds)) {
|
|
|
List<MusicGroupPaymentCalenderDetail> details = musicGroupPaymentCalenderDetailDao.queryCanPushList(id);
|
|
|
- if(details == null || details.size() == 0){
|
|
|
+ if (details == null || details.size() == 0) {
|
|
|
return;
|
|
|
}
|
|
|
String musicGroupId = details.get(0).getMusicGroupId();
|
|
|
Set<Integer> studentIds = details.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
|
|
|
- //推送消息
|
|
|
+ // 推送消息
|
|
|
if (studentIds.size() > 0) {
|
|
|
Map<Integer, String> push = new HashMap<>();
|
|
|
for (Integer userId : studentIds) {
|
|
@@ -425,11 +435,12 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
|
|
|
String memo = "4?" + baseUrl + "/#/renew?musicGroupId=" + musicGroupId;
|
|
|
// 发送续费通知
|
|
|
- sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push, null, 0, memo,"STUDENT",musicGroup.getName());
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
|
|
|
+ null, 0, memo, "STUDENT", musicGroup.getName());
|
|
|
}
|
|
|
- }else {
|
|
|
- //获取课推送列表
|
|
|
- //批量推送
|
|
|
+ } else {
|
|
|
+ // 获取课推送列表
|
|
|
+ // 批量推送
|
|
|
MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(id);
|
|
|
Set<String> studentIds = new HashSet<>(Arrays.asList(userIds.split(",")));
|
|
|
if (studentIds.size() > 0) {
|
|
@@ -441,7 +452,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
|
|
|
String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
|
|
|
String memo = "4?" + baseUrl + "/#/renew?musicGroupId=" + calender.getMusicGroupId();
|
|
|
// 发送续费通知
|
|
|
- sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push, null, 0, memo,"STUDENT",musicGroup.getName());
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push,
|
|
|
+ null, 0, memo, "STUDENT", musicGroup.getName());
|
|
|
}
|
|
|
}
|
|
|
}
|