diff --git a/admin-core/src/main/java/com/ibeetl/admin/core/util/StreamUtils.java b/admin-core/src/main/java/com/ibeetl/admin/core/util/StreamUtils.java new file mode 100644 index 00000000..d8b75228 --- /dev/null +++ b/admin-core/src/main/java/com/ibeetl/admin/core/util/StreamUtils.java @@ -0,0 +1,44 @@ +package com.ibeetl.admin.core.util; + +import cn.hutool.core.collection.CollectionUtil; + +import java.util.Collection; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 功能描述:
+ * + * @author: mlx + * @description: + * @date: 2023/2/8 23:01 + * @version: 1.0 + */ +public class StreamUtils { + + /** + * List指定字段,并返回join后的值 + * @param list + * @param function + * @param delimiter + * @return + * @param + * @param + */ + public static String listJoin(Collection list, Function function, CharSequence delimiter) { + return CollectionUtil.newArrayList(list).stream().map(function).map(Objects::toString).collect(Collectors.joining(delimiter)); + } + + /** + * List指定字段,并返回join后的值 + * @param list + * @param function + * @return + * @param + * @param + */ + public static String listJoin(Collection list, Function function) { + return CollectionUtil.newArrayList(list).stream().map(function).map(Objects::toString).collect(Collectors.joining(",")); + } +} diff --git a/web/src/main/java/com/ibeetl/jlw/entity/QuestionLogSummary.java b/web/src/main/java/com/ibeetl/jlw/entity/QuestionLogSummary.java index dc6a1775..ed43a175 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/QuestionLogSummary.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/QuestionLogSummary.java @@ -12,7 +12,7 @@ import lombok.EqualsAndHashCode; import org.beetl.sql.annotation.entity.AssignID; import org.beetl.sql.annotation.entity.InsertIgnore; import org.beetl.sql.annotation.entity.UpdateIgnore; -import org.beetl.sql.fetch.annotation.FetchOne; +import org.beetl.sql.fetch.annotation.FetchSql; import javax.validation.constraints.NotNull; import java.math.BigDecimal; @@ -65,7 +65,7 @@ public class QuestionLogSummary extends BaseEntity{ */ @UpdateIgnore @InsertIgnore - @FetchOne("personId") + @FetchSql("select t.*, '' as student_password from student t where student_id = #personId#") @DictDeep private Student studentInfo; diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourse.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourse.java index 607f4ffd..3ad1dcfb 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourse.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourse.java @@ -54,7 +54,7 @@ public class TeacherOpenCourse extends BaseEntity{ @InsertIgnore private String teacherOpenCourseStatusText; - @FetchSql("select t.teacher_id, ta.teacher_name, ta.teacher_sn, teacher_open_course_merge_teacher_auth_code from teacher_open_course_merge_teacher t " + + @FetchSql("select t.teacher_id, ta.teacher_name, ta.teacher_job_number, teacher_open_course_merge_teacher_auth_code from teacher_open_course_merge_teacher t " + "left join teacher ta on ta.teacher_id = t.teacher_id " + "where t.teacher_open_course_id = #teacherOpenCourseId# and t.teacher_open_course_merge_teacher_status = 1 " + "order by teacher_id limit 1 ") @@ -106,7 +106,7 @@ public class TeacherOpenCourse extends BaseEntity{ public static class MergeTeacherInfo { private Long teacherId; private String teacherName; - private String teacherSn; + private String teacherJobNumber; private String teacherOpenCourseMergeTeacherAuthCode; } @Setter diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseMergeStudent.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseMergeStudent.java index 071cdf12..673c8422 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseMergeStudent.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseMergeStudent.java @@ -10,6 +10,7 @@ import org.beetl.sql.annotation.entity.InsertIgnore; import org.beetl.sql.annotation.entity.UpdateIgnore; import org.beetl.sql.fetch.annotation.Fetch; import org.beetl.sql.fetch.annotation.FetchOne; +import org.beetl.sql.fetch.annotation.FetchSql; import javax.validation.constraints.NotNull; import java.util.Date; @@ -58,7 +59,7 @@ public class TeacherOpenCourseMergeStudent extends BaseEntity{ private Long studentId ; - @FetchOne("studentId") + @FetchSql("select t.*, '' as student_password from student t where student_id = #studentId#") @DictDeep @UpdateIgnore @InsertIgnore diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeSchoolClassService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeSchoolClassService.java index 8fafaaff..a33d24a3 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeSchoolClassService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeSchoolClassService.java @@ -1,15 +1,24 @@ package com.ibeetl.jlw.service; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.json.JSONUtil; import cn.jlw.util.ToolUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.service.CoreBaseService; import com.ibeetl.admin.core.util.PlatformException; import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.admin.core.web.JsonReturnCode; import com.ibeetl.jlw.dao.TeacherOpenCourseMergeSchoolClassDao; +import com.ibeetl.jlw.dao.TeacherOpenCourseMergeStudentDao; +import com.ibeetl.jlw.entity.Student; import com.ibeetl.jlw.entity.TeacherOpenCourseMergeSchoolClass; +import com.ibeetl.jlw.entity.TeacherOpenCourseMergeStudent; +import com.ibeetl.jlw.web.query.StudentQuery; import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeSchoolClassQuery; +import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeStudentQuery; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.beetl.sql.core.SqlId; @@ -20,10 +29,16 @@ import org.springframework.transaction.annotation.Transactional; import javax.validation.constraints.NotNull; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.stream.Collectors; +import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser; +import static com.ibeetl.jlw.enums.OpenCourseMergeJoinTypeEnum.class_join; +import static com.ibeetl.jlw.web.query.TeacherOpenCourseMergeSchoolClassQuery.jsonToPO; +import static java.util.stream.Collectors.joining; + /** * 开课关联班级 Service * 当分布式ID开启后请勿使用insert(*,true) @@ -35,6 +50,10 @@ import java.util.stream.Collectors; public class TeacherOpenCourseMergeSchoolClassService extends CoreBaseService implements DeleteResourcesBy{ @Autowired private TeacherOpenCourseMergeSchoolClassDao teacherOpenCourseMergeSchoolClassDao; + @Autowired private TeacherOpenCourseMergeStudentDao teacherOpenCourseMergeStudentDao; + @Autowired private TeacherOpenCourseMergeStudentService teacherOpenCourseMergeStudentService; + @Autowired + private StudentService studentService; public PageQueryqueryByCondition(PageQuery query){ PageQuery ret = teacherOpenCourseMergeSchoolClassDao.queryByCondition(query); @@ -190,4 +209,98 @@ public class TeacherOpenCourseMergeSchoolClassService extends CoreBaseService list = jsonToPO(json); + + if (!list.isEmpty()) { + final Long teacherOpenCourseId = list.get(0).getTeacherOpenCourseId(); + + final CoreUser coreUser = getUser(); + final Date now = new Date(); + final Long orgId = coreUser.getOrgId(); + + list.forEach(item -> { + Assert.notNull(item.getSchoolClassId(), "班级ID为必传参数!"); + Assert.notNull(item.getTeacherOpenCourseId(), "教师开课ID为必传参数!"); + + item.setTeacherOpenCourseMergeSchoolClassAddTime(now); + item.setTeacherOpenCourseMergeSchoolClassStatus(1); + item.setOrgId(orgId); + }); + + + // 获取导入的班级IDs + final String classIds = list.stream().map( + o -> o.getSchoolClassId().toString()).distinct().collect(joining(",")); + TeacherOpenCourseMergeStudentQuery studentQuery = new TeacherOpenCourseMergeStudentQuery(); + studentQuery.setTeacherOpenCourseSchoolClassMergeStudentAddTime(now); + studentQuery.setTeacherOpenCourseId(teacherOpenCourseId); + + // 查询开课和班级已经关联的数据 + final TeacherOpenCourseMergeSchoolClassQuery paras = new TeacherOpenCourseMergeSchoolClassQuery(); + paras.setTeacherOpenCourseId(teacherOpenCourseId); + paras.setSchoolClassIdPlural(classIds); + paras.setTeacherOpenCourseMergeSchoolClassStatus(1); + final List valueList = getValuesByQuery(paras); + if (CollectionUtil.isNotEmpty(valueList)) { + String deleteIds = valueList.stream().map( + o -> o.getTeacherOpenCourseMergeSchoolClassId().toString()).collect(joining(",")); + deleteTeacherOpenCourseMergeSchoolClass(deleteIds); + } + // 偷懒,再转换成json丢进去 + query.setTeacherOpenCourseMergeSchoolClassJsonStr(JSONUtil.toJsonStr(list)); + // 添加班级列表 + String msg = addAll(query); + + // 添加成功的话,则添加这些班级里的所有状态正常的学生到开课中 + if (StringUtils.isBlank(msg)) { + // 这里会有一些散客的学生,尽量先过滤数据,进行批量插入。不要先删再新增 + StudentQuery sq = new StudentQuery(); + sq.setStudentStatus(1); + sq.setClassIds(classIds); + List studentList = studentService.getValuesByQuery(sq); + + // 或者学生的Ids + // 查询班级方式加入的学生 + TeacherOpenCourseMergeStudentQuery existsStudentQuery = new TeacherOpenCourseMergeStudentQuery(); + existsStudentQuery.setTeacherOpenCourseSchoolClassMergeStudentStatus(1); + existsStudentQuery.setTeacherOpenCourseId(teacherOpenCourseId); + existsStudentQuery.setTeacherOpenCourseSchoolClassMergeStudentJoinType(class_join); + List studentDelList = + teacherOpenCourseMergeStudentService.getValuesByQueryNotWithPermission(existsStudentQuery); + + // 获取关联表要删除的主键Ids + String idsDelAdString = CollectionUtil.emptyIfNull(studentDelList).stream().map( + o -> o.getTeacherOpenCourseSchoolClassMergeStudentId().toString()).collect(joining(",")); + // 删除 班级方式加入的学生 + teacherOpenCourseMergeStudentDao.deleteByIds(idsDelAdString); + + // 构建入库的学生列表 + List mergeStudentList = studentList.stream() + .map(o -> { + TeacherOpenCourseMergeStudent mergeStudent = new TeacherOpenCourseMergeStudent(); + + mergeStudent.setStudentId(o.getStudentId()); + mergeStudent.setTeacherOpenCourseId(teacherOpenCourseId); + mergeStudent.setTeacherOpenCourseSchoolClassMergeStudentStatus(1); + mergeStudent.setTeacherOpenCourseSchoolClassMergeStudentAddTime(now); + mergeStudent.setTeacherOpenCourseSchoolClassMergeStudentJoinType(class_join); + mergeStudent.setOrgId(orgId); + + return mergeStudent; + }).collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList)); + + // 批量插入 + teacherOpenCourseMergeStudentService.insertBatch(mergeStudentList); + return JsonResult.successMessage("新增成功"); + } + + return JsonResult.failMessage("新增失败," + msg); + } + + return JsonResult.failMessage("新增失败, 请检查传递的参数!"); + } } diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java index 878c37cf..9b04533c 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import static com.ibeetl.admin.core.util.StreamUtils.listJoin; import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser; import static com.ibeetl.jlw.enums.OpenCourseMergeJoinTypeEnum.student_join; @@ -46,7 +47,6 @@ import static com.ibeetl.jlw.enums.OpenCourseMergeJoinTypeEnum.student_join; @Slf4j public class TeacherOpenCourseMergeStudentService extends CoreBaseService implements DeleteResourcesBy{ - @Autowired private UserConsoleService userConsoleService; @Autowired private TeacherOpenCourseMergeStudentDao teacherOpenCourseMergeStudentDao; @Autowired private TeacherOpenCourseMergeTeacherDao teacherOpenCourseMergeTeacherDao; @@ -95,11 +95,23 @@ public class TeacherOpenCourseMergeStudentService extends CoreBaseService studentDelList = getValuesByQueryNotWithPermission(existsStudentQuery); + // 获取关联表要删除的主键Ids + String idsDelAdString = listJoin(studentDelList, TeacherOpenCourseMergeStudent::getTeacherOpenCourseSchoolClassMergeStudentId); + teacherOpenCourseMergeStudentDao.deleteByIds(idsDelAdString); + ToolUtils.deleteNullList(teacherOpenCourseMergeStudentList); if(null != teacherOpenCourseMergeStudentList && teacherOpenCourseMergeStudentList.size()>0){ for(int i=0;i jsonToPO(String json) { + if (json != null && json.length() > 0 && JSONUtil.isTypeJSON(json)) { + if (JSONUtil.isTypeJSONArray(json)) { + return JSONUtil.toList(json, TeacherOpenCourseMergeSchoolClassQuery.class); + } + else if(JSONUtil.isTypeJSONObject(json)) { + return Collections.singletonList(JSONUtil.toBean(json, TeacherOpenCourseMergeSchoolClassQuery.class)); + } + } + + return Collections.emptyList(); + } }