소스 검색

Merge branch 'zx_saas_goods' of http://git.dayaedu.com/yonge/mec into test

zouxuan 1 년 전
부모
커밋
20465c714c

+ 8 - 0
mec-application/src/main/java/com/ym/mec/web/controller/ImGroupController.java

@@ -380,4 +380,12 @@ public class ImGroupController extends BaseController {
 		return succeed();
 	}
 
+
+    @GetMapping("/deleteGroup")
+    public Object deleteGroup() {
+        ExecutorService executor = Executors.newSingleThreadExecutor();
+        executor.execute(() -> imGroupService.deleteGroup());
+        return succeed();
+    }
+
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -514,7 +514,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @param courseIds
      * @return
      */
-    List<CourseSchedule> getCourseScheduleStudentNum(@Param("courseIds") List<Long> courseIds);
+    List<CourseExpectPriceDto> getCourseScheduleStudentNum(@Param("courseIds") List<Long> courseIds);
 
     List<CourseScheduleStudentPayment> getWithClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds,
                                                             @Param("studentId") Integer studentId);

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -542,4 +542,6 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     List<ExportMusicGroupEchelonDataDto> queryCoopEchelonData(@Param("organIds") List<Integer> organIds);
 
     List<ExportMusicGroupEchelonDataDto> queryMusicGroupEchelonData(@Param("musicGroupIds") List<String> musicGroupIds);
+
+    List<String> getDelImGroupId();
 }

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseExpectPriceDto.java

@@ -0,0 +1,18 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class CourseExpectPriceDto {
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+
+    @ApiModelProperty(value = "学生数量")
+    private Integer studentNum;
+
+    @ApiModelProperty(value = "课耗收入")
+    private BigDecimal expectPrice;
+}

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java

@@ -222,4 +222,9 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
     com.yonge.mongodb.PageInfo<HistoryMessageTencentWrapper.HistoryMessageTencent> historyMessage(HistoryMessageTencentWrapper.HistoryMessageTencentQuery query);
 
     Map<String,ImGroup> getMapByIds(List<String> groupIdList);
+
+    void deleteGroup();
+
+    @Transactional(rollbackFor = Exception.class)
+    void delGroup(String imGroupId);
 }

+ 15 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -72,6 +72,7 @@ import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType.MUSIC_NETWORK;
@@ -4342,8 +4343,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				courseMergeCourseNumMap = MapUtil.convertIntegerMap(courseMergeCourseNum);
 			}
 			//获取课程的预计人数
-			List<CourseSchedule> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
-			Map<Long, Integer> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseSchedule::getId, CourseSchedule::getStudentNum));
+			List<CourseExpectPriceDto> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
+			Map<Long, CourseExpectPriceDto> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseExpectPriceDto::getCourseId, Function.identity()));
 			//获取班级声部名称
             List<Map<Integer, String>> classGroupSubjectNameMaps = classGroupDao.findClassGroupSubjectNameMaps(courseScheduleIds);
             Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);
@@ -4409,8 +4410,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 if (courseMergeCourseNumMap.containsKey(result.getId())) {
                     result.setBeMerged(courseMergeCourseNumMap.get(result.getId()) > 0 ? true : false);
                 }
-                result.setStudentNum(courseScheduleStudentNumMap.getOrDefault(result.getId(), 0));
-
+				CourseExpectPriceDto priceDto = courseScheduleStudentNumMap.get(result.getId());
+				if(Objects.nonNull(priceDto)){
+					result.setStudentNum(priceDto.getStudentNum());
+					result.setExpectPrice(priceDto.getExpectPrice());
+				}
                 MusicGroupBasicDto musicGroupBasicDto = cooperationMap.get(result.getId().toString());
                 if(null != musicGroupBasicDto){
                     result.setCooperationOrgan(musicGroupBasicDto.getCooperationOrganName());
@@ -4471,8 +4475,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			courseMergeCourseNumMap = MapUtil.convertIntegerMap(courseMergeCourseNum);
 		}
 		//获取课程的预计人数
-		List<CourseSchedule> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
-		Map<Long, Integer> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseSchedule::getId, CourseSchedule::getStudentNum));
+		List<CourseExpectPriceDto> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
+		Map<Long, CourseExpectPriceDto> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseExpectPriceDto::getCourseId, Function.identity()));
 		//获取班级声部名称
 		List<Map<Integer, String>> classGroupSubjectNameMaps = classGroupDao.findClassGroupSubjectNameMaps(courseScheduleIds);
 		Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);
@@ -4535,7 +4539,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			if (courseMergeCourseNumMap.containsKey(result.getId())) {
 				result.setBeMerged(courseMergeCourseNumMap.get(result.getId()) > 0 ? true : false);
 			}
-			result.setStudentNum(courseScheduleStudentNumMap.getOrDefault(result.getId(), 0));
+			CourseExpectPriceDto priceDto = courseScheduleStudentNumMap.get(result.getId());
+			if(Objects.nonNull(priceDto)){
+				result.setStudentNum(priceDto.getStudentNum());
+				result.setExpectPrice(priceDto.getExpectPrice());
+			}
 
 			MusicGroupBasicDto musicGroupBasicDto = cooperationMap.get(result.getId().toString());
 			if(null != musicGroupBasicDto){

+ 53 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -13,7 +13,6 @@ import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.microsvc.toolkit.middleware.im.message.MessageWrapper;
 import com.microsvc.toolkit.middleware.im.message.TencentRequest;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.ImGroupDto;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
@@ -142,6 +141,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
     @Autowired
     private HistoryMessageTenantService historyMessageTencentService;
 
+    @Autowired
+    private ImGroupService imGroupService;
+
     @Override
     public BaseDAO<String, ImGroup> getDAO() {
         return imGroupDao;
@@ -1855,6 +1857,56 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         return imGroups.stream().collect(Collectors.toMap(ImGroup::getId, item -> item));
     }
 
+    @Override
+    public void deleteGroup() {
+
+        // 100个线程的无界线程池
+        ThreadPoolExecutor executorService =  new ThreadPoolExecutor(100, 100,
+            0L, TimeUnit.MILLISECONDS,
+            new LinkedBlockingQueue<Runnable>());
+
+        log.info("-------------------------------deleteGroup start---------------------------");
+
+
+        List<String> imGroupIds =
+            musicGroupDao.getDelImGroupId();
+        for (String imGroupId : imGroupIds) {
+            executorService.execute(() -> {
+                imGroupService.delGroup(imGroupId);
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    log.error("线程等待异常", e);
+                }
+            });
+        }
+
+        while (executorService.getQueue().size() > 0) {
+            try {
+                log.info("线程池中正在执行的任务数量:{},等待数量:{}", executorService.getActiveCount(),executorService.getQueue().size());
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                log.error("线程等待异常", e);
+            }
+        }
+        executorService.shutdown();
+        log.info("------------------------------- deleteGroup end---------------------------");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delGroup(String imGroupId) {
+        if (StringUtils.isEmpty(imGroupId)) {
+            return;
+        }
+        try {
+            imGroupCoreService.groupDismiss(imGroupId);
+        } catch (Exception e) {
+            log.error("删除群组失败:{}",imGroupId, e);
+            throw new BizException("删除群组失败");
+        }
+    }
+
     private TencentRequest.MessageBody getTimGifElem(String remoteUr,int size,int width,int height) {
         if (StringUtils.isEmpty(remoteUr) && size == 0 && width == 0 && height == 0) {
             return null;

+ 3 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexErrDataRecordServiceImpl.java

@@ -4,10 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.CourseScheduleEndDto;
-import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
-import com.ym.mec.biz.dal.dto.SimpleUserDto;
-import com.ym.mec.biz.dal.dto.TeacherVisitDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.IndexErrorType;
 import com.ym.mec.biz.dal.enums.InspectionItemEnum;
@@ -427,8 +424,8 @@ public class IndexErrDataRecordServiceImpl extends BaseServiceImpl<Long, IndexEr
 				courseMergeCourseNumMap = MapUtil.convertIntegerMap(courseMergeCourseNum);
 			}
 			//获取课程的预计人数
-			List<CourseSchedule> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
-			Map<Long, Integer> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseSchedule::getId, CourseSchedule::getStudentNum));
+			List<CourseExpectPriceDto> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
+			Map<Long, Integer> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseExpectPriceDto::getCourseId, CourseExpectPriceDto::getStudentNum));
 			//获取班级声部名称
 			List<Map<Integer, String>> classGroupSubjectNameMaps = classGroupDao.findClassGroupSubjectNameMaps(courseScheduleIds);
 			Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);

+ 9 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -2100,11 +2100,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("乐团当前状态是{},不能恢复", musicGroup.getStatus().getMsg());
         }
 
-        musicGroup.setStatus(MusicGroupStatusEnum.PROGRESS);
-        musicGroup.setUpdateTime(new Date());
-        musicGroupDao.update(musicGroup);
+		//恢复课表
+		if (musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE) {
+			courseScheduleDao.resumeCourseScheduleByMusicGroupId(musicGroup.getId());
+		}
+		musicGroup.setStatus(MusicGroupStatusEnum.PROGRESS);
+		musicGroup.setUpdateTime(new Date());
+		musicGroupDao.update(musicGroup);
 
-        // 重新设置下次缴费时间
+		// 重新设置下次缴费时间
         /*List<MusicGroupStudentFee> fees = musicGroupStudentFeeDao.queryByMusicGroupId(musicGroupId);
         Date date = new Date();
         fees.forEach(e -> {
@@ -2113,12 +2117,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         });
         musicGroupStudentFeeDao.batchUpdate(fees);*/
 //        musicGroupStudentFeeDao.updateNextPaymentDate(musicGroupId, musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null));
-        musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "恢复乐团", sysUser.getId(), ""));
+		musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "恢复乐团", sysUser.getId(), ""));
 
-        //恢复课表
-        if (musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE) {
-        	courseScheduleDao.resumeCourseScheduleByMusicGroupId(musicGroup.getId());
-        }
 
         //统计变更学员数
         groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, null);

+ 29 - 33
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -884,10 +884,9 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
             List<Goods> goodsList = goodsService.findGoodsByIds(goodsIdsStr);
             Map<Integer, Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, t -> t));
             BigDecimal totalGroupPurchasePrice =
-                    goodsSellDtos.stream().map(t -> goodsMap.get(t.getGoodsId()).getGroupPurchasePrice().
+                    goodsSellDtos.stream().map(t -> goodsMap.get(t.getGoodsId()).getDiscountPrice().
                             multiply(new BigDecimal(t.getGoodsNum()))).reduce(BigDecimal.ZERO, BigDecimal::add);
 
-            Goods goods = null;
             String[] goodsIds = goodsIdsStr.split(",");
             BigDecimal subTotalPrice = totalGroupPurchasePrice;
             for (int i = 0; i < goodsIds.length; i++) {
@@ -895,39 +894,36 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                 if (StringUtils.isBlank(goodsIdStr)) {
                     continue;
                 }
-                goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-
-                if (goods != null) {
-                    studentPaymentOrderDetail = new StudentPaymentOrderDetail();
-                    studentPaymentOrderDetail.setCreateTime(date);
-                    studentPaymentOrderDetail.setTenantId(studentPaymentOrder.getTenantId());
-                    if (goods.getType() == GoodsType.INSTRUMENT) {
-                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
-                    } else if (goods.getType() == GoodsType.ACCESSORIES) {
-                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
-                    } else if (goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF) {
-                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
-                    } else {
-                        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
-                    }
-                    studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
+                Goods goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+                studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+                studentPaymentOrderDetail.setCreateTime(date);
+                studentPaymentOrderDetail.setTenantId(studentPaymentOrder.getTenantId());
+                if (goods.getType() == GoodsType.INSTRUMENT) {
+                    studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
+                } else if (goods.getType() == GoodsType.ACCESSORIES) {
+                    studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
+                } else if (goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF) {
+                    studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
+                } else {
+                    studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
+                }
+                studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
 
-                    //获取比例
-                    BigDecimal tempPrice = BigDecimal.ZERO;
-                    if (totalGroupPurchasePrice.compareTo(BigDecimal.ZERO) > 0) {
-                        tempPrice = goods.getDiscountPrice().divide(totalGroupPurchasePrice,6, RoundingMode.DOWN);
-                    }
-                    if(i == goodsIds.length - 1){
-                        studentPaymentOrderDetail.setPrice(subTotalPrice);
-                    }else {
-                        BigDecimal decimal = studentPaymentOrder.getExpectAmount().multiply(tempPrice).setScale(2, RoundingMode.DOWN);
-                        studentPaymentOrderDetail.setPrice(decimal);
-                        subTotalPrice = subTotalPrice.subtract(decimal);
-                    }
-                    studentPaymentOrderDetail.setUpdateTime(date);
-                    studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-                    studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
+                //获取比例
+                BigDecimal tempPrice = BigDecimal.ZERO;
+                if (totalGroupPurchasePrice.compareTo(BigDecimal.ZERO) > 0) {
+                    tempPrice = goods.getDiscountPrice().divide(totalGroupPurchasePrice,6, RoundingMode.DOWN);
+                }
+                if(i == goodsIds.length - 1){
+                    studentPaymentOrderDetail.setPrice(subTotalPrice);
+                }else {
+                    BigDecimal decimal = studentPaymentOrder.getExpectAmount().multiply(tempPrice).setScale(2, RoundingMode.DOWN);
+                    studentPaymentOrderDetail.setPrice(decimal);
+                    subTotalPrice = subTotalPrice.subtract(decimal);
                 }
+                studentPaymentOrderDetail.setUpdateTime(date);
+                studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
             }
         }
 

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -542,6 +542,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     routeOrder.setUpdateTime(date);
                     studentPaymentRouteOrderDao.update(routeOrder);
                 } catch (Exception e) {
+                	LOGGER.error("分账失败 orderId:{}", order.getId(), e);
                     continue;
                 }
             }

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

@@ -2493,12 +2493,11 @@
         CASE WHEN COUNT(CASE WHEN sa.id_ IS NULL OR (sa.status_ = 'LEAVE' AND sa.remark_ IS NOT NULL) THEN NULL ELSE 1 END) > 0 THEN 1 ELSE 0 END isCallNames,
         CASE WHEN COUNT(CASE WHEN ta.is_complaints_ = 1 THEN 1 ELSE NULL END) > 0 THEN '1' ELSE '0' END is_complaints_,
         GROUP_CONCAT(distinct CASE WHEN csts.teacher_role_ = 'TEACHING' THEN csts.user_id_ END) teachingTeacherIds,
-        csts.expect_salary_,SUM(cssp.expect_price_) expect_price_
+        csts.expect_salary_
         FROM
         course_schedule cs
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
         left join teacher_attendance ta on ta.course_schedule_id_ = cs.id_
-        LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
         LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
         WHERE cs.del_flag_ = '0' AND cs.pre_course_flag_ = 0
         <if test="startTime != null and startTime != ''">

+ 8 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -747,8 +747,14 @@
 		  AND cs.type_ = #{courseType}
 	  </if>
 	</select>
-    <select id="getCourseScheduleStudentNum" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
-		SELECT course_schedule_id_ id_,COUNT(*) student_num_ FROM course_schedule_student_payment WHERE course_schedule_id_ IN
+	<resultMap id="CourseExpectPriceDto" type="com.ym.mec.biz.dal.dto.CourseExpectPriceDto">
+		<result property="courseId" column="course_schedule_id_"/>
+		<result property="expectPrice" column="expect_price_"/>
+		<result property="studentNum" column="student_num_"/>
+	</resultMap>
+    <select id="getCourseScheduleStudentNum" resultMap="CourseExpectPriceDto">
+		SELECT course_schedule_id_,COUNT(*) student_num_,SUM(expect_price_) expect_price_
+		FROM course_schedule_student_payment WHERE course_schedule_id_ IN
 		<foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
 			#{courseId}
 		</foreach>

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -1316,4 +1316,11 @@
         </foreach>
         group by sr.music_group_id_,st.current_grade_num_ order by sr.music_group_id_,st.current_grade_num_
     </select>
+
+    <select id="getDelImGroupId" resultType="java.lang.String">
+        select distinct ig.id_ from music_group mg
+                             left join class_group cg ON cg.music_group_id_ = mg.id_
+                             left join im_group ig ON ig.id_ = cg.id_
+        where mg.status_ IN ('CANCELED','CLOSE') and cg.group_type_ = 'MUSIC';
+    </select>
 </mapper>