From 247cb86585a1d1894596ed18a6c93efecb992946 Mon Sep 17 00:00:00 2001 From: luohairen <3399054449@qq.com> Date: 星期四, 14 十一月 2024 10:34:27 +0800 Subject: [PATCH] 班级成绩图表分析 --- src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java | 224 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 179 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java index 50ba3f3..481ed76 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java @@ -1,28 +1,36 @@ package com.ycl.jxkg.service.impl; -import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.ycl.jxkg.context.WebContext; -import com.ycl.jxkg.domain.entity.Meet; -import com.ycl.jxkg.mapper.ClassesUserMapper; -import com.ycl.jxkg.mapper.MeetMapper; -import com.ycl.jxkg.service.MeetService; -import com.ycl.jxkg.base.Result; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ycl.jxkg.base.Result; +import com.ycl.jxkg.base.SystemCode; +import com.ycl.jxkg.context.WebContext; +import com.ycl.jxkg.domain.entity.*; import com.ycl.jxkg.domain.form.MeetForm; -import com.ycl.jxkg.domain.vo.MeetVO; import com.ycl.jxkg.domain.query.MeetQuery; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.User; -import org.springframework.stereotype.Service; -import lombok.RequiredArgsConstructor; +import com.ycl.jxkg.domain.vo.ClassesVO; +import com.ycl.jxkg.domain.vo.MeetClassesVo; +import com.ycl.jxkg.domain.vo.MeetVO; +import com.ycl.jxkg.domain.vo.StudentSimpleVO; +import com.ycl.jxkg.enums.MeetStatusEnum; +import com.ycl.jxkg.mapper.*; +import com.ycl.jxkg.rabbitmq.msg.MeetStatusMsg; +import com.ycl.jxkg.rabbitmq.product.Producer; +import com.ycl.jxkg.service.MeetService; +import com.ycl.jxkg.utils.DateTimeUtil; import com.ycl.jxkg.utils.PageUtil; +import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; - -import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -42,16 +50,33 @@ private WebContext webContext; @Autowired private ClassesUserMapper classesUserMapper; + private final Producer producer; + private final MeetStudentMapper meetStudentMapper; + private final StudyRecordMapper studyRecordMapper; + private final MeetClassesMapper meetClassesMapper; /** * 娣诲姞 * @param form * @return */ @Override + @Transactional(rollbackFor = Exception.class) public Result add(MeetForm form) { Meet entity = MeetForm.getEntityByForm(form, null); + entity.setStatus(MeetStatusEnum.Wait.getCode()); entity.setCreateUser(webContext.getCurrentUser().getId()); - baseMapper.insert(entity); + // 璁剧疆涔愯閿佺増鏈� + entity.setUpdateVersion(0); + if (baseMapper.insert(entity) > 0) { + this.sendMQ(entity, 0); + } + // 鍚戜細璁彮绾т腑闂磋〃涓彃鍏ユ暟鎹� + form.getClassesIds().forEach(classId -> { + MeetClasses meetClasses = new MeetClasses(); + meetClasses.setMeetId(entity.getId()); + meetClasses.setClassesId(classId); + meetClassesMapper.insert(meetClasses); + }); return Result.ok("娣诲姞鎴愬姛"); } @@ -63,11 +88,27 @@ @Override public Result update(MeetForm form) { Meet entity = baseMapper.selectById(form.getId()); - // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); BeanUtils.copyProperties(form, entity); - baseMapper.updateById(entity); + + // 鍏堝垹闄ゅ啀鏂板 + new LambdaUpdateChainWrapper<>(meetClassesMapper) + .eq(MeetClasses::getMeetId, entity.getId()) + .remove(); + // 鍚戜細璁彮绾т腑闂磋〃涓彃鍏ユ暟鎹� + form.getClassesIds().forEach(classId -> { + MeetClasses meetClasses = new MeetClasses(); + meetClasses.setMeetId(entity.getId()); + meetClasses.setClassesId(classId); + meetClassesMapper.insert(meetClasses); + }); + + + // 濡傛灉淇敼鎴愬姛鍙戦�乵q娑堟伅 + if (baseMapper.updateById(entity) > 0) { + this.sendMQ(entity, entity.getUpdateVersion()); + } return Result.ok("淇敼鎴愬姛"); } @@ -100,18 +141,29 @@ */ @Override public Result page(MeetQuery query) { - Integer id = webContext.getCurrentUser().getId(); - query.setTeacherId(id); - IPage<Meet> page = PageUtil.getPage(query, Meet.class); - baseMapper.getPage(page, query); - List<Meet> records = page.getRecords(); - List<MeetVO> vos = new ArrayList<>(); - for (Meet record : records) { - MeetVO meetVO = new MeetVO(); - BeanUtils.copyProperties(record,meetVO); - vos.add(meetVO); + Integer userId = webContext.getCurrentUser().getId(); + //鏌ヨ嚜宸辩殑浼氳 + List<ClassesUser> classes = new LambdaQueryChainWrapper<>(classesUserMapper) + .eq(ClassesUser::getUserId, userId) + .eq(ClassesUser::getTeacher, Boolean.TRUE) + .list(); + List<Integer> classesIds = classes.stream().map(ClassesUser::getClassesId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(classesIds) && 3 != webContext.getCurrentUser().getRole()) { + throw new RuntimeException("鎮ㄦ殏鏃舵棤娉曡闂椤甸潰"); } - return Result.ok().data(vos).total(page.getTotal()); + query.setClassesIds(classesIds); + IPage<MeetVO> page = PageUtil.getPage(query, MeetVO.class); + baseMapper.teacherPage(page, query); + page.getRecords().forEach(vo -> { + if (! CollectionUtils.isEmpty(vo.getClassesIds())) { + // 鏌ヤ富璁茶�佸笀 + List<String> teacherNames = classesUserMapper.getTeachersByClassesIds(vo.getClassesIds()); + if (! CollectionUtils.isEmpty(teacherNames)) { + vo.setTeacherNamesStr(teacherNames.stream().collect(Collectors.joining("銆�"))); + } + } + }); + return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** @@ -122,22 +174,39 @@ @Override public Result studentPage(MeetQuery query) { Integer userId = webContext.getCurrentUser().getId(); - //鏌ュ嚭瀛︾敓鎵�鍦ㄧ彮绾� - List<Integer> classes = classesUserMapper.getClassesByUserId(userId); - if(CollectionUtils.isEmpty(classes)){ - return Result.ok("鎮ㄦ殏鏈姞鍏ョ彮绾�"); + if (CollectionUtils.isEmpty(query.getClassesIds())) { + //鏌ュ嚭瀛︾敓鎵�鍦ㄧ彮绾� + List<Integer> classes = classesUserMapper.getClassesByUserId(userId); + if(CollectionUtils.isEmpty(classes)){ + return Result.fail(500, "鎮ㄦ殏鏈姞鍏ョ彮绾�"); + } + query.setClassesIds(classes); } - query.setClassesIds(classes); - IPage<Meet> page = PageUtil.getPage(query, Meet.class); - baseMapper.getPage(page, query); - List<Meet> records = page.getRecords(); - List<MeetVO> vos = new ArrayList<>(); - for (Meet record : records) { - MeetVO meetVO = new MeetVO(); - BeanUtils.copyProperties(record,meetVO); - vos.add(meetVO); + IPage<MeetVO> page = PageUtil.getPage(query, MeetVO.class); + baseMapper.studentPage(page, query); + for (MeetVO vo : page.getRecords()) { + if (! CollectionUtils.isEmpty(vo.getClassesIds())) { + // 鏌ヤ富璁茶�佸笀 + List<String> teacherNames = classesUserMapper.getTeachersByClassesIds(vo.getClassesIds()); + if (! CollectionUtils.isEmpty(teacherNames)) { + vo.setTeacherNamesStr(teacherNames.stream().collect(Collectors.joining("銆�"))); + } + } } - return Result.ok().data(vos).total(page.getTotal()); + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } + + @Override + public Result start(MeetForm form) { + Meet entity = baseMapper.selectById(form.getId()); + // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 + Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); + // 涓嶄娇鐢╱pdateById杩欑鏂瑰紡锛岄伩鍏嶄箰瑙傞攣鍔犱竴銆� + new LambdaUpdateChainWrapper<>(meetMapper) + .eq(Meet::getId, entity.getId()) + .set(Meet::getStatus,form.getStatus()) + .update(); + return Result.ok(); } /** @@ -147,9 +216,46 @@ */ @Override public Result detail(Integer id) { - MeetVO vo = baseMapper.getById(id); + Meet vo = baseMapper.getById(id); Assert.notNull(vo, "璁板綍涓嶅瓨鍦�"); - return Result.ok().data(vo); + if(vo.getStatus().equals(MeetStatusEnum.Starting.getCode())){ + Integer userId = webContext.getCurrentUser().getId(); + //楠岃瘉鏈夋病鏈夐噸澶嶈繘鍏ワ紙閲嶅杩涘叆浼氬鑷翠笂璇炬鏁板澶氾級 + QueryWrapper<MeetStudent> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("meet_id",id); + queryWrapper.eq("student_id",userId); + queryWrapper.eq("version",vo.getUpdateVersion()); + MeetStudent one = meetStudentMapper.selectOne(queryWrapper); + if(one != null){ + return Result.ok(); + } + //澧炲姞瀛︾敓涓婅璁板綍 + MeetStudent meetStudent = new MeetStudent(); + meetStudent.setMeetId(id); + meetStudent.setStudentId(userId); + meetStudent.setCreateTime(new Date()); + meetStudent.setStartTime(vo.getStartTime()); + meetStudent.setVersion(vo.getUpdateVersion()); + meetStudent.setMeetName(vo.getMeetName()); + //TODO锛氭殏鏃跺鐞嗭紝鍚庢湡鑰冭檻jitsiApi + meetStudent.setDuringTime(0L); + meetStudentMapper.insert(meetStudent); + //瀛︾敓瀛︿範妗f鏇存柊 + StudyRecord studyRecord = studyRecordMapper.getByStudentId(userId); + if(studyRecord ==null){ + StudyRecord record = new StudyRecord(); + record.setMeetCount(0); + record.setStudyTime(0L); + record.setStudentId(userId); + studyRecordMapper.insert(record); + }else { + studyRecord.setMeetCount(studyRecord.getMeetCount()+1); + studyRecordMapper.updateById(studyRecord); + } + return Result.ok(); + }else { + return Result.fail(SystemCode.InnerError.getCode(),"鎴块棿灏氭湭寮�濮嬫垨宸茬粨鏉�"); + } } /** @@ -164,4 +270,32 @@ .collect(Collectors.toList()); return Result.ok().data(vos); } + + @Override + public Result getStudentList(Integer meetId, String keyword) { + List<StudentSimpleVO> studentList = baseMapper.getStudentList(meetId, keyword); + return Result.ok().data(studentList); + } + + @Override + public Result getStudentClasses() { + Integer userId = webContext.getCurrentUser().getId(); + List<ClassesVO> classes = classesUserMapper.getClassesByUserId1(userId); + return Result.ok().data(classes); + } + + /** + * 鍙戦�乵q娑堟伅 + * + * @param entity 鑰冭瘯瀹炰綋绫� + * @param version 涔愯閿佺増鏈� + */ + public void sendMQ(Meet entity, Integer version) { + MeetStatusMsg finishedMsg = new MeetStatusMsg(); + finishedMsg.setVersion(version); + finishedMsg.setMeetId(entity.getId()); + finishedMsg.setMeetStatus(MeetStatusEnum.End.getCode()); + producer.meetMsg(entity.getId(), JSON.toJSONString(finishedMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getEndTime(), new Date())); + } + } -- Gitblit v1.8.0