BaseStudentAssessmentInspectionServiceImpl.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. package com.xjrsoft.module.student.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import com.alibaba.excel.EasyExcel;
  4. import com.alibaba.excel.ExcelWriter;
  5. import com.alibaba.excel.support.ExcelTypeEnum;
  6. import com.alibaba.excel.write.metadata.WriteSheet;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import com.baomidou.mybatisplus.core.metadata.IPage;
  10. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  11. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  12. import com.github.yulichang.base.MPJBaseServiceImpl;
  13. import com.github.yulichang.toolkit.MPJWrappers;
  14. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  15. import com.xjrsoft.common.enums.ScoreTypeEnum;
  16. import com.xjrsoft.common.model.result.RT;
  17. import com.xjrsoft.common.utils.VoToColumnUtil;
  18. import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
  19. import com.xjrsoft.module.base.entity.BaseClass;
  20. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  21. import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionMobilePageDto;
  22. import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionPageDto;
  23. import com.xjrsoft.module.student.dto.CalssQuantitativeAssessmentPageDto;
  24. import com.xjrsoft.module.student.dto.QuantitativeAssessmentExcelDto;
  25. import com.xjrsoft.module.student.dto.QuantitativeAssessmentSingleScoreDto;
  26. import com.xjrsoft.module.student.entity.BaseClassMajorSet;
  27. import com.xjrsoft.module.student.entity.BaseStudentAssessmentCategory;
  28. import com.xjrsoft.module.student.entity.BaseStudentAssessmentClassRelation;
  29. import com.xjrsoft.module.student.entity.BaseStudentAssessmentInspection;
  30. import com.xjrsoft.module.student.entity.BaseStudentAssessmentStudentRelation;
  31. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  32. import com.xjrsoft.module.student.mapper.BaseStudentAssessmentCategoryMapper;
  33. import com.xjrsoft.module.student.mapper.BaseStudentAssessmentClassRelationMapper;
  34. import com.xjrsoft.module.student.mapper.BaseStudentAssessmentInspectionMapper;
  35. import com.xjrsoft.module.student.mapper.BaseStudentAssessmentStudentRelationMapper;
  36. import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
  37. import com.xjrsoft.module.student.service.IBaseStudentAssessmentInspectionService;
  38. import com.xjrsoft.module.student.vo.BaseStudentAssessmentClassListVo;
  39. import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionMobilePageVo;
  40. import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionMobileVo;
  41. import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionPageVo;
  42. import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionVo;
  43. import com.xjrsoft.module.student.vo.CalssQuantitativeAssessmentPageVo;
  44. import com.xjrsoft.module.student.vo.QuantitativeAssessmentSingleScoreVo;
  45. import com.xjrsoft.module.student.vo.QuantitativeAssessmentSubTableExcelVo;
  46. import com.xjrsoft.module.system.entity.File;
  47. import com.xjrsoft.module.system.service.IFileService;
  48. import com.xjrsoft.module.teacher.entity.XjrUser;
  49. import lombok.AllArgsConstructor;
  50. import org.springframework.http.ResponseEntity;
  51. import org.springframework.stereotype.Service;
  52. import org.springframework.transaction.annotation.Transactional;
  53. import javax.script.ScriptEngine;
  54. import javax.script.ScriptEngineManager;
  55. import java.io.ByteArrayOutputStream;
  56. import java.util.ArrayList;
  57. import java.util.HashMap;
  58. import java.util.List;
  59. import java.util.Map;
  60. import java.util.stream.Collectors;
  61. /**
  62. * @title: 学生班级巡查考核
  63. * @Author dzx
  64. * @Date: 2023-11-16
  65. * @Version 1.0
  66. */
  67. @Service
  68. @AllArgsConstructor
  69. public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceImpl<BaseStudentAssessmentInspectionMapper, BaseStudentAssessmentInspection> implements IBaseStudentAssessmentInspectionService {
  70. private final BaseStudentAssessmentInspectionMapper assessmentInspectionMapper;
  71. private final BaseStudentAssessmentCategoryMapper baseStudentAssessmentCategoryMapper;
  72. private final BaseStudentAssessmentStudentRelationMapper assessmentStudentRelationMapper;
  73. private final BaseStudentAssessmentClassRelationMapper assessmentClassRelationMapper;
  74. private final BaseClassMapper baseClassMapper;
  75. private final BaseStudentSchoolRollMapper baseStudentSchoolRollMapper;
  76. private final IFileService fileService;
  77. @Override
  78. public Page<BaseStudentAssessmentInspectionPageVo> getPage(Page<BaseStudentAssessmentInspectionPageDto> page, BaseStudentAssessmentInspectionPageDto dto) {
  79. Page<BaseStudentAssessmentInspectionPageVo> result = assessmentInspectionMapper.getPage(page, dto);
  80. // 处理加减分
  81. result.getRecords().forEach((node) -> {
  82. if (node.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) {
  83. node.setScore(node.getScore() * -1);
  84. }
  85. });
  86. return result;
  87. }
  88. @Override
  89. public BaseStudentAssessmentInspectionVo getInfo(Long id) {
  90. BaseStudentAssessmentInspectionVo result = assessmentInspectionMapper.getInfo(id);
  91. // 处理加减分
  92. if (result.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) {
  93. result.setScore(result.getScore() * -1);
  94. }
  95. // 获取班级信息
  96. List<BaseStudentAssessmentClassListVo> baseStudentAssessmentClassListVos = assessmentClassRelationMapper.selectJoinList(BaseStudentAssessmentClassListVo.class,
  97. MPJWrappers.<BaseStudentAssessmentClassRelation>lambdaJoin()
  98. .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentAssessmentClassRelation::getClassId)
  99. .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId)
  100. .eq(BaseStudentAssessmentClassRelation::getBaseStudentAssessmentInspectionId, id)
  101. .select(BaseStudentAssessmentClassRelation::getId)
  102. .selectAs(BaseClass::getName, BaseStudentAssessmentClassListVo::getClassName)
  103. .selectAs(XjrUser::getName, BaseStudentAssessmentClassListVo::getTeacherName)
  104. .selectAs(XjrUser::getMobile, BaseStudentAssessmentClassListVo::getMobile)
  105. .select(BaseStudentAssessmentClassRelation.class, x -> VoToColumnUtil.fieldsToColumns(BaseStudentAssessmentClassRelation.class).contains(x.getProperty()))
  106. );
  107. result.setClassList(baseStudentAssessmentClassListVos);
  108. // 获取学生信息
  109. List<BaseStudentAssessmentStudentRelation> baseStudentAssessmentStudentRelations = assessmentStudentRelationMapper.selectList(
  110. Wrappers.<BaseStudentAssessmentStudentRelation>query().lambda()
  111. .eq(BaseStudentAssessmentStudentRelation::getBaseStudentAssessmentInspectionId, result.getId())
  112. );
  113. result.setStudentList(baseStudentAssessmentStudentRelations);
  114. // 获取文件列表
  115. result.setFileInfos(fileService.list(Wrappers.<File>query().lambda().eq(File::getFolderId, result.getFileId())));
  116. return result;
  117. }
  118. @Override
  119. public Page<BaseStudentAssessmentInspectionMobilePageVo> getMobilePage(Page<BaseStudentAssessmentInspectionMobilePageDto> page, BaseStudentAssessmentInspectionMobilePageDto dto) {
  120. if (dto.getClassIds() == null || dto.getClassIds().size() == 0) {
  121. // 获取当前用户所管班级
  122. List<Long> classIds = baseClassMapper.selectList(
  123. Wrappers.<BaseClass>query().lambda()
  124. .eq(BaseClass::getTeacherId, StpUtil.getLoginIdAsLong())
  125. .select(BaseClass::getId)
  126. ).stream().map(BaseClass::getId).collect(Collectors.toList());
  127. dto.setClassIds(classIds);
  128. }
  129. if (dto.getClassIds() == null || dto.getClassIds().size() == 0) {
  130. return null;
  131. }
  132. Page<BaseStudentAssessmentInspectionMobilePageVo> result = assessmentInspectionMapper.getMobilePage(page, dto);
  133. // 处理加减分
  134. result.getRecords().forEach((node) -> {
  135. if (node.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) {
  136. node.setScore(node.getScore() * -1);
  137. }
  138. });
  139. return result;
  140. }
  141. @Override
  142. public BaseStudentAssessmentInspectionMobileVo getMobileInfo(Long id) {
  143. BaseStudentAssessmentInspectionMobileVo result = assessmentInspectionMapper.getMobileInfo(id);
  144. // 处理加减分
  145. if (result.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) {
  146. result.setScore(result.getScore() * -1);
  147. }
  148. // 获取学生信息
  149. List<BaseStudentAssessmentStudentRelation> baseStudentAssessmentStudentRelations = assessmentStudentRelationMapper.selectList(
  150. Wrappers.<BaseStudentAssessmentStudentRelation>query().lambda()
  151. .eq(BaseStudentAssessmentStudentRelation::getBaseStudentAssessmentInspectionId, result.getBaseStudentAssessmentInspectionId())
  152. .eq(BaseStudentAssessmentStudentRelation::getClassId, result.getClassId())
  153. );
  154. result.setStudentList(baseStudentAssessmentStudentRelations);
  155. result.setStudentCount(baseStudentAssessmentStudentRelations.size());
  156. // 获取文件列表
  157. result.setFileInfos(fileService.list(Wrappers.<File>query().lambda().eq(File::getFolderId, result.getFileId())));
  158. return result;
  159. }
  160. @Override
  161. public ResponseEntity<byte[]> getQuantitativeAssessmentExcelByte(QuantitativeAssessmentExcelDto dto) {
  162. //导出的文件名,字节流
  163. String fileName = "StudentAssessmentInspection" + ExcelTypeEnum.XLSX.getValue();
  164. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  165. //获取需要导出的子表
  166. List<Long> baseStudentAssessmentCategoryIdList = new ArrayList<>();
  167. baseStudentAssessmentCategoryIdList.add(1727155216239882240L);
  168. baseStudentAssessmentCategoryIdList.add(1727154864019009536L);
  169. LambdaQueryWrapper<BaseStudentAssessmentCategory> baseStudentAssessmentCategoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
  170. baseStudentAssessmentCategoryLambdaQueryWrapper
  171. .in(BaseStudentAssessmentCategory::getId, baseStudentAssessmentCategoryIdList);
  172. List<BaseStudentAssessmentCategory> baseStudentAssessmentCategorieList = baseStudentAssessmentCategoryMapper.selectList(baseStudentAssessmentCategoryLambdaQueryWrapper);
  173. //导出子表
  174. if(baseStudentAssessmentCategorieList.size() > 0){
  175. //需要合并的列
  176. int[] mergeColumeIndex = {0, 1, 2, 3, 4};
  177. ExcelMergeUtil excelFillCellMergeStrategy = new ExcelMergeUtil(1, mergeColumeIndex);
  178. //开始处理写入
  179. try (ExcelWriter excelWriter = EasyExcel.write(bot, QuantitativeAssessmentSubTableExcelVo.class).registerWriteHandler(excelFillCellMergeStrategy).build()) {
  180. int no = 0;
  181. for (BaseStudentAssessmentCategory bsac : baseStudentAssessmentCategorieList) {
  182. dto.setBaseStudentAssessmentCategoryId(bsac.getId());
  183. //sheet名
  184. String sheetName = bsac.getName();
  185. WriteSheet writeSheet = EasyExcel.writerSheet(no++, sheetName ).build();
  186. //求所有的个人行为集合
  187. List<QuantitativeAssessmentSubTableExcelVo> quantitativeAssessmentSubTableExcelVoList = assessmentInspectionMapper.getQuantitativeAssessmentSubTableExcelVoList(dto);
  188. excelWriter.write(quantitativeAssessmentSubTableExcelVoList, writeSheet);
  189. }
  190. //TODO 班级量化考核统计表总
  191. }
  192. /*for (BaseStudentAssessmentCategory bsac : baseStudentAssessmentCategorieList) {
  193. dto.setBaseStudentAssessmentCategoryId(bsac.getId());
  194. //sheet名
  195. String sheetName = bsac.getName();
  196. //求所有的个人行为集合
  197. List<QuantitativeAssessmentSubTableExcelVo> quantitativeAssessmentSubTableExcelVoList = assessmentInspectionMapper.getQuantitativeAssessmentSubTableExcelVoList(dto);
  198. //需要合并的列
  199. int[] mergeColumeIndex = {0, 1, 2, 3, 4};
  200. //写字节流
  201. ExcelMergeUtil excelFillCellMergeStrategy = new ExcelMergeUtil(1, mergeColumeIndex);
  202. EasyExcel.write(bot, QuantitativeAssessmentSubTableExcelVo.class)
  203. .registerWriteHandler(excelFillCellMergeStrategy)
  204. .sheet(sheetName)
  205. .doWrite(quantitativeAssessmentSubTableExcelVoList);
  206. }*/
  207. }
  208. return RT.fileStream(bot.toByteArray(), fileName);
  209. }
  210. @Override
  211. public IPage<CalssQuantitativeAssessmentPageVo> getCalssQuantitativeAssessmentPage(Page<CalssQuantitativeAssessmentPageDto> page, CalssQuantitativeAssessmentPageDto dto) {
  212. //以班级为数据的基础进行数据的填充
  213. MPJLambdaWrapper<BaseClass> baseClassMPJLambdaWrapper = new MPJLambdaWrapper<>();
  214. baseClassMPJLambdaWrapper
  215. .selectAs(BaseClass::getTeacherId, CalssQuantitativeAssessmentPageVo::getHeadTeacherId)
  216. .selectAs(XjrUser::getUserName, CalssQuantitativeAssessmentPageVo::getOa)
  217. .selectAs(XjrUser::getName, CalssQuantitativeAssessmentPageVo::getHeadTeacherName)
  218. .selectAs(BaseClass::getId, CalssQuantitativeAssessmentPageVo::getClassId)
  219. .selectAs(BaseClass::getName, CalssQuantitativeAssessmentPageVo::getClassName)
  220. .selectAs(BaseClassMajorSet::getTotalStudent, CalssQuantitativeAssessmentPageVo::getStudentNum)
  221. .selectAs(BaseClass::getIsGraduate, CalssQuantitativeAssessmentPageVo::getClassStatus)
  222. .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId)
  223. .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, BaseClass::getId)
  224. .disableSubLogicDel();
  225. IPage<CalssQuantitativeAssessmentPageVo> resultPage = baseClassMapper.selectJoinPage(page, CalssQuantitativeAssessmentPageVo.class, baseClassMPJLambdaWrapper);
  226. //当前数据记录班级id
  227. List<Long> classIdList = new ArrayList<>();
  228. for(CalssQuantitativeAssessmentPageVo c: resultPage.getRecords()){
  229. classIdList.add(Long.parseLong(c.getClassId()));
  230. }
  231. if(classIdList.size() > 0){
  232. //学生个人行为
  233. List<QuantitativeAssessmentSingleScoreVo> individualBehaviorList = assessmentInspectionMapper.getIndividualBehaviorList(new QuantitativeAssessmentSingleScoreDto(){{
  234. setClassIdList(classIdList);
  235. }});
  236. Map<Long , QuantitativeAssessmentSingleScoreVo> individualBehaviorMap = new HashMap<>();
  237. for (QuantitativeAssessmentSingleScoreVo q : individualBehaviorList) {
  238. individualBehaviorMap.put(q.getClassId(), q);
  239. }
  240. //常规管理
  241. List<QuantitativeAssessmentSingleScoreVo> conventionalManagementList = assessmentInspectionMapper.getConventionalManagementList(new QuantitativeAssessmentSingleScoreDto(){{
  242. setClassIdList(classIdList);
  243. }});
  244. Map<Long , QuantitativeAssessmentSingleScoreVo> conventionalManagementMap = new HashMap<>();
  245. for (QuantitativeAssessmentSingleScoreVo q : conventionalManagementList) {
  246. conventionalManagementMap.put(q.getClassId(), q);
  247. }
  248. //获奖及荣誉奖彰
  249. List<QuantitativeAssessmentSingleScoreVo> awardsAndHonorableList = assessmentInspectionMapper.getAwardsAndHonorList(new QuantitativeAssessmentSingleScoreDto(){{
  250. setClassIdList(classIdList);
  251. }});
  252. Map<Long , QuantitativeAssessmentSingleScoreVo> awardsAndHonorableMap = new HashMap<>();
  253. for (QuantitativeAssessmentSingleScoreVo q : awardsAndHonorableList) {
  254. awardsAndHonorableMap.put(q.getClassId(), q);
  255. }
  256. //准军事化考核
  257. List<QuantitativeAssessmentSingleScoreVo> paramilitaryList = assessmentInspectionMapper.getParamilitaryList(new QuantitativeAssessmentSingleScoreDto(){{
  258. setClassIdList(classIdList);
  259. }});
  260. Map<Long , QuantitativeAssessmentSingleScoreVo> paramilitaryMap = new HashMap<>();
  261. for (QuantitativeAssessmentSingleScoreVo q : paramilitaryList) {
  262. awardsAndHonorableMap.put(q.getClassId(), q);
  263. }
  264. //将结果写进对应的班级里
  265. for(CalssQuantitativeAssessmentPageVo c: resultPage.getRecords()){
  266. Long classId = Long.parseLong(c.getClassId());
  267. if(individualBehaviorMap.get(classId) != null){
  268. c.setStuPersonalBehaviorSubScore(individualBehaviorMap.get(classId).getScore());
  269. ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
  270. String geRenXingWeiGongShi = "sumSubScore/itemCount";
  271. /*int totalScore = scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()).getTotalScore();
  272. int itemCount = scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()).getItemCount();
  273. double res = 0;
  274. String newStr1 = zonghezhishu.replace("totalScore", ""+totalScore);
  275. String newStr2 = newStr1.replace("itemCount", ""+itemCount);
  276. try{
  277. res = Double.parseDouble(engine.eval(newStr2).toString());
  278. }catch (ScriptException s){
  279. }
  280. // 创建一个DecimalFormat对象,指定小数位数为两位
  281. DecimalFormat decimalFormat = new DecimalFormat("#.00");
  282. // 格式化double值为字符串
  283. String formattedNumber = decimalFormat.format(res);*/
  284. }
  285. if(conventionalManagementMap.get(classId) != null){
  286. c.setClassConventionalManageSubScore(conventionalManagementMap.get(classId).getScore());
  287. }
  288. if(awardsAndHonorableMap.get(classId) != null){
  289. c.setHonorSumScore(awardsAndHonorableMap.get(classId).getScore());
  290. }
  291. }
  292. }
  293. return resultPage;
  294. }
  295. @Override
  296. @Transactional
  297. public Boolean dataHandle(Long id) {
  298. //获取考核记录
  299. BaseStudentAssessmentInspection baseStudentAssessmentInspection = this.getById(id);
  300. if(baseStudentAssessmentInspection != null){
  301. //同步数据到考核关联班级表
  302. if(baseStudentAssessmentInspection.getAssessmentType() != null
  303. && baseStudentAssessmentInspection.getAssessmentType().equals("class")
  304. && baseStudentAssessmentInspection.getClassIds() != null
  305. && !baseStudentAssessmentInspection.getClassIds().equals("")){
  306. String[] classIds = baseStudentAssessmentInspection.getClassIds().split(",");
  307. for (String classId: classIds) {
  308. assessmentClassRelationMapper.insert(new BaseStudentAssessmentClassRelation(){{
  309. setClassId(Long.parseLong(classId));
  310. setBaseStudentAssessmentInspectionId(baseStudentAssessmentInspection.getId());
  311. QueryWrapper<BaseStudentAssessmentClassRelation> queryWrapperSortcode = new QueryWrapper<>();
  312. queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
  313. BaseStudentAssessmentClassRelation b = assessmentClassRelationMapper.selectOne(queryWrapperSortcode);
  314. setSortCode(b.getSortCode() + 1);
  315. }});
  316. }
  317. }
  318. //同步数据到考核关联学生表
  319. if(baseStudentAssessmentInspection.getAssessmentType() != null
  320. && baseStudentAssessmentInspection.getAssessmentType().equals("personal")
  321. && baseStudentAssessmentInspection.getStudentUserIds() != null
  322. && !baseStudentAssessmentInspection.getStudentUserIds().equals("")){
  323. String[] studentIds = baseStudentAssessmentInspection.getStudentUserIds().split(",");
  324. for (String studentId: studentIds) {
  325. assessmentStudentRelationMapper.insert(new BaseStudentAssessmentStudentRelation(){{
  326. MPJLambdaWrapper<BaseStudentSchoolRoll> baseStudentSchoolRollMPJLambdaWrapper = new MPJLambdaWrapper<>();
  327. baseStudentSchoolRollMPJLambdaWrapper
  328. .select(BaseStudentSchoolRoll::getId)
  329. .select(BaseStudentSchoolRoll.class, x -> VoToColumnUtil.fieldsToColumns(BaseStudentSchoolRoll.class).contains(x.getProperty()))
  330. .eq(BaseStudentSchoolRoll::getUserId, studentId);
  331. BaseStudentSchoolRoll baseStudentSchoolRoll = baseStudentSchoolRollMapper.selectOne(baseStudentSchoolRollMPJLambdaWrapper);
  332. if(baseStudentSchoolRoll != null){
  333. setClassId(baseStudentSchoolRoll.getClassId());
  334. }
  335. setUserId(Long.parseLong(studentId));
  336. setBaseStudentAssessmentInspectionId(baseStudentAssessmentInspection.getId());
  337. QueryWrapper<BaseStudentAssessmentStudentRelation> queryWrapperSortcode = new QueryWrapper<>();
  338. queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
  339. BaseStudentAssessmentStudentRelation b = assessmentStudentRelationMapper.selectOne(queryWrapperSortcode);
  340. setSortCode(b.getSortCode() + 1);
  341. }});
  342. }
  343. }
  344. }
  345. return true;
  346. }
  347. }