| 
					
				 | 
			
			
				@@ -4,21 +4,25 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.core.metadata.IPage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.education.base.BaseResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.education.base.PageResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.education.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.education.enums.ClassGroupTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.education.enums.ReturnCodeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.education.mapper.TeacherMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.education.req.TeacherReq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.education.resp.TeacherDetailResp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.education.resp.TeacherResp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.education.resp.VipGroupClassResp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.education.service.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.education.utils.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.util.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Arrays; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.atomic.AtomicReference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -40,9 +44,27 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private IClassGroupService classGroupService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IDemoGroupService demoGroupService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private IClassGroupTeacherMapperService classGroupTeacherMapperService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IDemoGroupCoursesPlanService demoGroupCoursesPlanService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ITeacherLeaveRecordService teacherLeaveRecordService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IVipGroupService vipGroupService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IVipGroupCategoryService vipGroupCategoryService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IVipGroupDefaultClassesCycleService vipGroupDefaultClassesCycleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public PageResponse teacherList(TeacherReq req) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         PageResponse response = new PageResponse(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -105,6 +127,131 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         response.setMessage(ReturnCodeEnum.CODE_200.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         response.setRecords(teacherRespList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         response.setTotal(Math.toIntExact(teacherIPage.getTotal())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseResponse teacherDetail(TeacherReq req) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TeacherDetailResp teacherDetailResp = new TeacherDetailResp(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(req == null || req.getUserId() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return  BaseResponse.errorParam(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QueryWrapper<ClassGroupTeacherMapper> mapperQueryWrapper = new QueryWrapper<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mapperQueryWrapper.eq("user_id_",req.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ClassGroupTeacherMapper> groupTeacherMapperList =  classGroupTeacherMapperService.list(mapperQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!CollectionUtils.isEmpty(groupTeacherMapperList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Integer> classIds = groupTeacherMapperList.stream().map(ClassGroupTeacherMapper :: getClassGroupId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            QueryWrapper<ClassGroup> queryWrapper = new QueryWrapper<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            queryWrapper.in("id_",classIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ClassGroup> classGroups = classGroupService.list(queryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!CollectionUtils.isEmpty(classGroups)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<ClassGroup> norClass = classGroups.stream().filter(e -> ClassGroupTypeEnum.NORMAL.getCode().equalsIgnoreCase(e.getType()) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                ClassGroupTypeEnum.MIX.getCode().equalsIgnoreCase(e.getType()) ||  ClassGroupTypeEnum.HIGH.getCode().equalsIgnoreCase(e.getType())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<ClassGroup> vipClass = classGroups.stream().filter(e -> ClassGroupTypeEnum.VIP.getCode().equalsIgnoreCase(e.getType())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(!CollectionUtils.isEmpty(norClass)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Integer norCount = norClass.stream().mapToInt(ClassGroup::getTotalClassTimes).sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    teacherDetailResp.setGroupClassNum(norCount * norClass.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(!CollectionUtils.isEmpty(vipClass)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Integer vipCount = vipClass.stream().mapToInt(ClassGroup::getTotalClassTimes).sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    teacherDetailResp.setVipClassNum(vipCount * vipClass.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                QueryWrapper<DemoGroup> demoGroupQueryWrapper = new QueryWrapper<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                demoGroupQueryWrapper.eq("user_id_",req.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<DemoGroup> demoGroupList = demoGroupService.list(demoGroupQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(!CollectionUtils.isEmpty(demoGroupList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<Long> demoId = demoGroupList.stream().map(e ->e.getId()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    QueryWrapper<DemoGroupCoursesPlan> planQueryWrapper = new QueryWrapper<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    planQueryWrapper.in("demo_group_id_",demoId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<DemoGroupCoursesPlan> demoGroupCoursesPlans =  demoGroupCoursesPlanService.list(planQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(!CollectionUtils.isEmpty(demoGroupCoursesPlans)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Map<Date, List<DemoGroupCoursesPlan>> collect = demoGroupCoursesPlans.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .collect( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Collectors.groupingBy(DemoGroupCoursesPlan::getCourseDate)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if(!CollectionUtils.isEmpty(collect)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            List<TeacherDetailResp.InnerDemoGroup> innerDemoGroups = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            for (Date key : collect.keySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                TeacherDetailResp.InnerDemoGroup demoGroup = new TeacherDetailResp.InnerDemoGroup(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                demoGroup.setDateStr(DateUtil.date2String(key,DateUtil.DATE_FORMAT)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                demoGroup.setWeek(DateUtil.date2Week(key)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                List<DemoGroupCoursesPlan> demoGroupCoursesPlans1 = collect.get(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if(!CollectionUtils.isEmpty(demoGroupCoursesPlans1)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    List<TeacherDetailResp.DemoGroupPlan> planList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    demoGroupCoursesPlans1.forEach(e ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        TeacherDetailResp.DemoGroupPlan demoGroupPlan = new TeacherDetailResp.DemoGroupPlan(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        demoGroupPlan.setStartTime(DateUtil.date2String(e.getStartTime(),DateUtil.TIME_FORMAT)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        demoGroupPlan.setEndTime(DateUtil.date2String(e.getEndTime(),DateUtil.TIME_FORMAT)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        planList.add(demoGroupPlan); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    demoGroup.setDemoGroupPlans(planList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            teacherDetailResp.setDemoGroups(innerDemoGroups); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            QueryWrapper<TeacherLeaveRecord> teacherLeaveRecordQueryWrapper = new QueryWrapper<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            teacherLeaveRecordQueryWrapper.eq("user_id_",req.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<TeacherLeaveRecord> teacherLeaveRecordList = teacherLeaveRecordService.list(teacherLeaveRecordQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!CollectionUtils.isEmpty(teacherLeaveRecordList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AtomicReference<Integer> count = new AtomicReference<>(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                teacherLeaveRecordList.forEach(e ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Integer hour = DateUtil.subMin(e.getStartTime(),e.getEndTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (hour != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        count.set(count.get() + hour); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                teacherDetailResp.setCountNum(teacherLeaveRecordList.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                teacherDetailResp.setHourCount(count.get()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return BaseResponse.success(teacherDetailResp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PageResponse teacherVipClass(TeacherReq req) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(req == null && req.getUserId() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return PageResponse.errorParam(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        IPage page = new Page(req.getPageNo() == null ? 1 : req.getPageNo(),req.getPageSize() == null ? 10 : req.getPageSize()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QueryWrapper<VipGroup> vipGroupQueryWrapper = new QueryWrapper<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vipGroupQueryWrapper.eq("user_id_",req.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        IPage<VipGroup> vipGroupPage = vipGroupService.page(page,vipGroupQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VipGroup> vipGroupList = vipGroupPage.getRecords(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VipGroupClassResp> vipGroupClassRespList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!CollectionUtils.isEmpty(vipGroupList)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            vipGroupList.forEach(e ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                VipGroupClassResp vipGroupClassResp = new VipGroupClassResp(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vipGroupClassResp.setVipGroupName(e.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                VipGroupCategory vipGroupCategory =  vipGroupCategoryService.getById(e.getVipGroupCategoryId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(vipGroupCategory != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    vipGroupClassResp.setVipClassType(vipGroupCategory.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                vipGroupDefaultClassesCycleService.list() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               // vipGroupClassResp.setClassNum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |