Browse Source

Merge branch 'zx_saas_courseware_search' of http://git.dayaedu.com/yonge/mec into dev

# Conflicts:
#	pom.xml
zouxuan 7 months ago
parent
commit
b22853251d

+ 68 - 3
mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java

@@ -22,6 +22,7 @@ import com.ym.mec.common.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -128,12 +129,76 @@ public class LessonCoursewareController extends BaseController {
     }
 
     @ApiOperation(value = "获取课件关联的课程列表")
-	@GetMapping("/getLessonCoursewareCourseList/{id}")
-	public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
+	@GetMapping("/getLessonCoursewareCourseList")
+	public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(Long id,String search){
 		List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
 		if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            if(StringUtils.isNotEmpty(search)){
+                //优化模糊匹配,将模糊匹配和过滤没有素材的知识点合并
+                courseScheduleCoursewareDetails = courseScheduleCoursewareDetails.stream().map(courseScheduleCoursewareDetail -> {
+                    // 获取原始的 knowledgePointList
+                    List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList = courseScheduleCoursewareDetail.getKnowledgePointList();
+
+                    // 过滤掉不满足条件的知识点
+                    if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+                        knowledgePointList = knowledgePointList.stream().filter(knowledgePointSmall -> {
+                            // 处理当前知识点的 materialList
+                            List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+
+                            // 始终进行模糊搜索,判断 materialList 是否符合条件
+                            boolean materialListMatches = false;
+                            if (CollectionUtils.isNotEmpty(materialList)) {
+                                if (StringUtils.isNotEmpty(search)) {
+                                    materialList = materialList.stream()
+                                            .filter(materialSmall -> materialSmall.getName().contains(search))
+                                            .collect(Collectors.toList());
+                                    knowledgePointSmall.setMaterialList(materialList);
+                                }
+
+                                // 如果 materialList 经过模糊搜索后仍不为空,则设置标志为 true
+                                if (CollectionUtils.isNotEmpty(materialList)) {
+                                    materialListMatches = true;
+                                }
+                            }
+
+                            // 对 children 进行处理:始终对 child 的 materialList 进行模糊匹配
+                            List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> children = knowledgePointSmall.getChildren();
+                            if (CollectionUtils.isNotEmpty(children)) {
+                                for (CbsLessonCoursewareDetailWrapper.KnowledgePointSmall child : children) {
+                                    List<CbsLessonCoursewareDetailWrapper.MaterialSmall> childMaterialList = child.getMaterialList();
+
+                                    // 对子知识点的 materialList 进行模糊搜索
+                                    if (CollectionUtils.isNotEmpty(childMaterialList)) {
+                                        if (StringUtils.isNotEmpty(search)) {
+                                            childMaterialList = childMaterialList.stream()
+                                                    .filter(materialSmall -> materialSmall.getName().contains(search))
+                                                    .collect(Collectors.toList());
+                                            child.setMaterialList(childMaterialList);
+                                        }
+
+                                        // 如果子知识点的 materialList 仍不为空,保留该子知识点
+                                        if (CollectionUtils.isNotEmpty(childMaterialList)) {
+                                            return true; // 保留该知识点
+                                        }
+                                    }
+                                }
+                            }
+
+                            // 如果 materialList 和 childMaterialList 都为空,剔除该知识点
+                            return materialListMatches || CollectionUtils.isNotEmpty(children);
+                        }).collect(Collectors.toList());
+
+                        // 更新 courseScheduleCoursewareDetail 的 knowledgePointList
+                        courseScheduleCoursewareDetail.setKnowledgePointList(knowledgePointList);
+                    }
+                    // 返回更新后的 courseScheduleCoursewareDetail
+                    return courseScheduleCoursewareDetail;
+                }).collect(Collectors.toList());
+            }
+
 			String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
-			List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject.parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
+			List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList =
+                    JSONObject.parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
 			return succeed(courseScheduleCoursewareDetailList);
 		}
 		return succeed(new ArrayList<>());

+ 2 - 2
mec-application/src/main/resources/exportColumnMapper.ini

@@ -355,8 +355,8 @@ headColumns = ["分部","课程编号","课程收入"]
 fieldColumns = ["organName","courseId","amount"]
 
 [云教练激活明细]
-headColumns = ["分部","学员编号","学员姓名","激活时间","激活月份","金额"]
-fieldColumns = ["organName","studentId","studentName","createTime","time","amount"]
+headColumns = ["分部","学员编号","学员姓名","激活时间","激活月份","金额","激活版本"]
+fieldColumns = ["organName","studentId","studentName","createTime","time","amount","memberRankName"]
 
 [乐团梯队数据导出]
 headColumns = ["乐团","长笛","单簧管","萨克斯","小号","圆号","长号","上低音号","大号","小军鼓","合计"]

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloudCoachActivationDetailsDto.java

@@ -17,4 +17,6 @@ public class CloudCoachActivationDetailsDto {
     private String time;
 
     private BigDecimal amount;
+
+    private String memberRankName;
 }

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

@@ -78,14 +78,14 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult action(List<ClassGroupDto> classGroups) {
         ClassGroupDto classGroupDto = classGroups.get(0);
-        List<Long> oldCourseIdList = Arrays.stream(classGroupDto.getCourseIds().split(",")).map(id -> Long.parseLong(id)).collect(Collectors.toList());
+        List<Long> oldCourseIdList = Arrays.stream(classGroupDto.getCourseIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
         //校验课程是否可以进行转换
         this.checkConvertCourseIds(oldCourseIdList);
         if(!classGroupDto.getConfirmGenerate()){
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
         //校验主教助教是否冲突
-        classGroups.stream().forEach(e->classGroupTeacherMapperService.checkTeachingBishop(e.getClassGroupTeacherMapperList()));
+        classGroups.forEach(e->classGroupTeacherMapperService.checkTeachingBishop(e.getClassGroupTeacherMapperList()));
         int classNum = classGroups.size();
         //课程列表
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
@@ -96,7 +96,7 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
         List<Integer> studentIdList = new ArrayList<>();
 
         for (ClassGroupDto groupDto : classGroups) {
-            List<Integer> userIdStrSet = Arrays.stream(groupDto.getUserIds().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+            List<Integer> userIdStrSet = Arrays.stream(groupDto.getUserIds().split(",")).map(Integer::valueOf).collect(Collectors.toList());
             studentIdList.addAll(userIdStrSet);
             groupDto.setStudentNum(userIdStrSet.size());
             //创建班级
@@ -125,7 +125,7 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
                     courseScheduleStudentPayments.addAll(groupDto.getCourseScheduleStudentPayments());
                 }else {
                     List<CourseSchedule> schedules = result.getData();
-                    List<Integer> teacherIdList = schedules.stream().map(e -> e.getActualTeacherId()).collect(Collectors.toList());
+                    List<Integer> teacherIdList = schedules.stream().map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
                     Map<Integer, String> maps = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(teacherIdList));
                     for (CourseSchedule e : schedules) {e.setActualTeacherName(maps.get(e.getActualTeacherId()));}
                     return result;
@@ -159,10 +159,12 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
         CourseConvertLog courseConvertLog = courseConvertLogService.get(courseConvertId);
         //校验是否可以还原
         this.checkConvertRevoke(courseConvertLog);
-        List<Long> newCourseIdList = Arrays.stream(courseConvertLog.getNewCourseIds().split(",")).map(e -> Long.parseLong(e)).collect(Collectors.toList());
-        List<Integer> userIdList = Arrays.stream(courseConvertLog.getStudentIds().split(",")).map(e -> Integer.parseInt(e)).collect(Collectors.toList());
+        List<Long> newCourseIdList = Arrays.stream(courseConvertLog.getNewCourseIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
+        List<Integer> userIdList = Arrays.stream(courseConvertLog.getStudentIds().split(",")).map(Integer::parseInt).collect(Collectors.toList());
         List<CourseSchedule> courseSchedules = JSONArray.parseArray(courseConvertLog.getOldCourseJson(), CourseSchedule.class);
 //        courseScheduleService.getDao().batchUpdateDelFlag(courseConvertLog.getOldCourseIds());
+        //清除课程编号
+        courseSchedules.forEach(e->e.setId(null));
         courseScheduleService.getDao().batchInsert(courseSchedules);
 
         String studentMapperJson = courseConvertLog.getOldCourseStudentMapperJson();
@@ -170,7 +172,7 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
         //获取学员课程价值
         List<CourseScheduleStudentPayment> paymentList = courseScheduleStudentPaymentService.getDao().findByCourseScheduleIds(newCourseIdList);
         //获取现有所有学员列表
-        List<Integer> currentUserIdList = paymentList.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
+        List<Integer> currentUserIdList = paymentList.stream().map(CourseScheduleStudentPayment::getUserId).distinct().collect(Collectors.toList());
         userIdList.removeAll(currentUserIdList);
         if(!CollectionUtils.isEmpty(userIdList)){
             studentPayments = studentPayments.stream().filter(e->!userIdList.contains(e.getUserId())).collect(Collectors.toList());

+ 25 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -5823,8 +5823,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
 		//2、获取班级学生
-		List<Integer> studentIds = Arrays.stream(groupDto.getUserIds().split(",")).map(id -> Integer.valueOf(id)).distinct().collect(Collectors.toList());
-		List<Long> oldCourseIdList = Arrays.stream(groupDto.getCourseIds().split(",")).map(id -> Long.parseLong(id)).collect(Collectors.toList());
+		List<Integer> studentIds = Arrays.stream(groupDto.getUserIds().split(",")).map(Integer::valueOf).distinct().collect(Collectors.toList());
+		List<Long> oldCourseIdList = Arrays.stream(groupDto.getCourseIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
 
 		//获取可转换课程时长,学员数量,课程数量
 		CourseConvertSumDto courseConvertSumDto = courseScheduleConvertDao.sumCourseConvert(oldCourseIdList);
@@ -5833,8 +5833,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
 		List<CourseSchedule> courseScheduleList = new ArrayList<>();
 		//校验老师是否冲突
-		courseTimeDtoList.stream().forEach(e->classGroupTeacherMapperService.checkTeachingBishop(e.getClassGroupTeacherMapperList()));
-		LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
+		courseTimeDtoList.forEach(e->classGroupTeacherMapperService.checkTeachingBishop(e.getClassGroupTeacherMapperList()));
+//		LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
 		//获取排课总时长
 		int totalCourseTimes = 0;
 		long totalCourseDuration = 0;
@@ -5867,28 +5867,39 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		int generateCourseTimes = 0;
 		WhileNode:
 		while (true) {
-			int dayOfWeek = now.getDayOfWeek().getValue();
+//			int dayOfWeek = now.getDayOfWeek().getValue();
 			for (CourseTimeDto courseTimeDto : courseTimeDtoList) {
+				if(courseTimeDto.getCalendar() == null){
+					//排课开始时间
+					courseTimeDto.setCalendar(courseTimeDto.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+				}
 				List<ClassGroupTeacherMapper> newClassGroupTeacherMapperList = courseTimeDto.getClassGroupTeacherMapperList();
+
+				Set<Integer> noRepeatTeacherIds = newClassGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toSet());
+				if (noRepeatTeacherIds.size() != newClassGroupTeacherMapperList.size()) {
+					throw new BizException("主教与助教存在冲突");
+				}
+
 				Integer teacherId = newClassGroupTeacherMapperList.stream().filter(ct -> TeachTypeEnum.BISHOP.equals(ct.getTeacherRole())).findAny().get().getUserId();
 				if (Objects.isNull(teacherId)) {
 					throw new BizException("请设置主教");
 				}
-				if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
-					throw new BizException("排课循环周期错误,请核查");
-				}
+//				if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
+//					throw new BizException("排课循环周期错误,请核查");
+//				}
 				if (Objects.isNull(courseTimeDto.getStartDate()) || Objects.isNull(courseTimeDto.getEndDate())) {
 					throw new BizException("排课循环周期错误,请核查");
 				}
 
 				//跳过节假日
-				if (courseTimeDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
+				if (courseTimeDto.getHoliday() && holidayDays.contains(courseTimeDto.getCalendar().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
+					courseTimeDto.setCalendar(courseTimeDto.getCalendar().plusDays(courseTimeDto.getIntervalDays()));
 					continue;
 				}
 
-				if (!courseTimeDto.getDayOfWeek().equals(dayOfWeek)) continue;
+//				if (!courseTimeDto.getDayOfWeek().equals(dayOfWeek)) continue;
 
-				Date classDate = DateConvertor.toDate(now);
+				Date classDate = DateConvertor.toDate(courseTimeDto.getCalendar());
 
 				if (courseTimeDto.getStartDate().compareTo(classDate) > 0
 						|| courseTimeDto.getEndDate().compareTo(classDate) < 0
@@ -5899,6 +5910,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					if (totalCourseTimes <= generateCourseTimes) {
 						break WhileNode;
 					}
+					courseTimeDto.setCalendar(courseTimeDto.getCalendar().plusDays(courseTimeDto.getIntervalDays()));
 					continue;
 				}
 
@@ -5944,8 +5956,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				courseScheduleList.add(courseSchedule);
 				courseScheduleTeacherSalaryService.initMusicGroupCourseTeacherSalary(newClassGroupTeacherMapperList,courseSchedule,
 						musicGroup,courseScheduleTeacherSalaryList);
+
+				courseTimeDto.setCalendar(courseTimeDto.getCalendar().plusDays(courseTimeDto.getIntervalDays()));
 			}
-			now = now.plusDays(1);
 		}
 		this.checkNewCourseSchedules(courseScheduleList, false, false);
 		if(!groupDto.getConfirmGenerate()){

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

@@ -107,7 +107,7 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 		if(StringUtils.isNotEmpty(queryInfo.getOrganId())){
-			List<Integer> organIdList = Arrays.stream(queryInfo.getOrganId().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+			List<Integer> organIdList = Arrays.stream(queryInfo.getOrganId().split(",")).map(Integer::valueOf).collect(Collectors.toList());
 			params.put("organIdList",organIdList);
 		}
 		List<StudentStatisticsDto> dataList = null;

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

@@ -591,8 +591,9 @@
         WHEN cto.type_ = 'YEAR' THEN CONCAT(cto.time_ * 12,'月')
         WHEN cto.type_ = 'YEAR_HALF' THEN CONCAT(cto.time_ * 6,'月')
         WHEN cto.type_ = 'QUARTERLY' THEN CONCAT(cto.time_ * 3,'月')
-        ELSE CONCAT(cto.time_,'天') END AS time
+        ELSE CONCAT(cto.time_,'天') END AS time,mrs.name_ memberRankName
         from cloud_teacher_order cto
+        left join member_rank_setting mrs ON mrs.id_ = cto.level_
         left join organization o ON o.id_ = cto.organ_id_
         left join sys_user su ON su.id_ = cto.student_id_
         where cto.status_ = 2

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

@@ -262,7 +262,7 @@
 
 	<sql id="vipGroupSalaryQueryCondition">
 		<where>
-			cs.music_group_id_ = #{vipGroupId}
+			cs.music_group_id_ = #{vipGroupId} AND cs.del_flag_ = '0'
 			<if test="groupType != null and groupType != ''">
 				AND cs.group_type_= #{groupType}
 			</if>

+ 1 - 1
pom.xml

@@ -26,7 +26,7 @@
 		<docker.registry.repository>127.0.0.1:5000</docker.registry.repository>
 		<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
 		<com.microsvc.toolkit.version>1.0.8-RC1</com.microsvc.toolkit.version>
-		<cbs.version>1.0.22</cbs.version>
+		<cbs.version>1.0.23</cbs.version>
 	</properties>
 
 	<dependencyManagement>