|
|
@@ -1,20 +1,31 @@
|
|
|
package com.xjrsoft.module.banding.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.github.yulichang.base.MPJBaseServiceImpl;
|
|
|
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
+import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
+import com.xjrsoft.module.banding.dto.SureBandingTaskDto;
|
|
|
import com.xjrsoft.module.banding.entity.BandingTask;
|
|
|
import com.xjrsoft.module.banding.entity.BandingTaskClass;
|
|
|
+import com.xjrsoft.module.banding.entity.BandingTaskClassStudent;
|
|
|
import com.xjrsoft.module.banding.entity.BandingTaskRule;
|
|
|
import com.xjrsoft.module.banding.mapper.BandingTaskClassMapper;
|
|
|
+import com.xjrsoft.module.banding.mapper.BandingTaskClassStudentMapper;
|
|
|
import com.xjrsoft.module.banding.mapper.BandingTaskMapper;
|
|
|
import com.xjrsoft.module.banding.mapper.BandingTaskRuleMapper;
|
|
|
import com.xjrsoft.module.banding.service.IBandingTaskService;
|
|
|
+import com.xjrsoft.module.student.entity.BaseNewStudent;
|
|
|
+import com.xjrsoft.module.student.entity.EnrollmentPlan;
|
|
|
+import com.xjrsoft.module.student.service.IBaseNewStudentService;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @title: 新生分班任务
|
|
|
@@ -25,17 +36,19 @@ import java.util.List;
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
|
public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper, BandingTask> implements IBandingTaskService {
|
|
|
- private final BandingTaskMapper bandingTaskBandingTaskMapper;
|
|
|
+ private final BandingTaskMapper bandingTaskMapper;
|
|
|
|
|
|
- private final BandingTaskRuleMapper bandingTaskBandingTaskRuleMapper;
|
|
|
- private final BandingTaskClassMapper bandingTaskBandingTaskClassMapper;
|
|
|
+ private final BandingTaskRuleMapper taskRuleMapper;
|
|
|
+ private final BandingTaskClassMapper taskClassMapper;
|
|
|
+ private final BandingTaskClassStudentMapper classStudentMapper;
|
|
|
+ private final IBaseNewStudentService newStudentService;
|
|
|
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean add(BandingTask bandingTask) {
|
|
|
bandingTask.setCreateDate(new Date());
|
|
|
- bandingTaskBandingTaskMapper.insert(bandingTask);
|
|
|
+ bandingTaskMapper.insert(bandingTask);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -43,17 +56,93 @@ public class BandingTaskServiceImpl extends MPJBaseServiceImpl<BandingTaskMapper
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean update(BandingTask bandingTask) {
|
|
|
bandingTask.setModifyDate(new Date());
|
|
|
- bandingTaskBandingTaskMapper.updateById(bandingTask);
|
|
|
+ bandingTaskMapper.updateById(bandingTask);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean delete(List<Long> ids) {
|
|
|
- bandingTaskBandingTaskMapper.deleteBatchIds(ids);
|
|
|
- bandingTaskBandingTaskRuleMapper.delete(Wrappers.lambdaQuery(BandingTaskRule.class).in(BandingTaskRule::getBandingTaskId, ids));
|
|
|
- bandingTaskBandingTaskClassMapper.delete(Wrappers.lambdaQuery(BandingTaskClass.class).in(BandingTaskClass::getBandingTaskId, ids));
|
|
|
+ bandingTaskMapper.deleteBatchIds(ids);
|
|
|
+ taskRuleMapper.delete(Wrappers.lambdaQuery(BandingTaskRule.class).in(BandingTaskRule::getBandingTaskId, ids));
|
|
|
+ taskClassMapper.delete(Wrappers.lambdaQuery(BandingTaskClass.class).in(BandingTaskClass::getBandingTaskId, ids));
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动分班
|
|
|
+ * 1、根据分班任务的信息,查询出来需要分班的学生
|
|
|
+ * 2、查询该任务下的班级信息
|
|
|
+ * 3、查询该任务使用的规则
|
|
|
+ * 4、执行自动分班
|
|
|
+ * 5、完成后,将分好班的信息存到banding_task_class_student表中
|
|
|
+ * @param dto
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean automaticBanding(SureBandingTaskDto dto) {
|
|
|
+ BandingTask bandingTask = this.getById(dto.getId());
|
|
|
+ //查询需要分班的学生信息
|
|
|
+ List<BaseNewStudent> baseNewStudents = newStudentService.selectJoinList(BaseNewStudent.class,
|
|
|
+ new MPJLambdaWrapper<BaseNewStudent>()
|
|
|
+ .select(BaseNewStudent::getId)
|
|
|
+ .select(BaseNewStudent.class, x -> VoToColumnUtil.fieldsToColumns(BaseNewStudent.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(EnrollmentPlan.class, EnrollmentPlan::getId, BaseNewStudent::getEnrollmentPlanId)
|
|
|
+ .eq(EnrollmentPlan::getGradeId, bandingTask.getGradeId())
|
|
|
+ .eq(EnrollmentPlan::getEnrollType, bandingTask.getEnrollType())
|
|
|
+ .eq(BaseNewStudent::getStatus, 0)
|
|
|
+ );
|
|
|
+ //查询所有班级信息
|
|
|
+ List<BandingTaskClass> classList = taskClassMapper.selectList(
|
|
|
+ new QueryWrapper<BandingTaskClass>().lambda()
|
|
|
+ .select(BandingTaskClass::getId)
|
|
|
+ .select(BandingTaskClass.class, x -> VoToColumnUtil.fieldsToColumns(BandingTaskClass.class).contains(x.getProperty()))
|
|
|
+ .eq(BandingTaskClass::getBandingTaskId, dto.getId())
|
|
|
+ .orderByAsc(BandingTaskClass::getSortCode)
|
|
|
+ );
|
|
|
+ //查询所用到的规则
|
|
|
+ taskRuleMapper.selectJoinList(BandingTaskRule.class,
|
|
|
+ new MPJLambdaWrapper<BandingTaskRule>()
|
|
|
+ .select(BandingTaskRule::getId)
|
|
|
+ .select(BandingTaskRule.class, x -> VoToColumnUtil.fieldsToColumns(BandingTaskRule.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(EnrollmentPlan.class, EnrollmentPlan::getId, BaseNewStudent::getEnrollmentPlanId)
|
|
|
+ .eq(EnrollmentPlan::getGradeId, bandingTask.getGradeId())
|
|
|
+ .eq(EnrollmentPlan::getEnrollType, bandingTask.getEnrollType())
|
|
|
+ .eq(BaseNewStudent::getStatus, 0)
|
|
|
+ );
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean sure(SureBandingTaskDto dto) {
|
|
|
+ List<BandingTaskClassStudent> classStudents = classStudentMapper.selectJoinList(BandingTaskClassStudent.class,
|
|
|
+ new MPJLambdaWrapper<BandingTaskClassStudent>()
|
|
|
+ .select(BandingTaskClassStudent::getId)
|
|
|
+ .select(BandingTaskClassStudent.class, x -> VoToColumnUtil.fieldsToColumns(BandingTaskClassStudent.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(BandingTaskClass.class, BandingTaskClass::getId, BandingTaskClassStudent::getBandingTaskClassId)
|
|
|
+ .eq(BandingTaskClass::getBandingTaskId, dto.getId())
|
|
|
+ .eq(BandingTaskClassStudent::getStatus, 1)
|
|
|
+ );
|
|
|
+ List<Long> studentIds = classStudents.stream().map(BandingTaskClassStudent::getNewStudentId).collect(Collectors.toList());
|
|
|
+ List<BaseNewStudent> list = newStudentService.list(
|
|
|
+ new QueryWrapper<BaseNewStudent>().lambda()
|
|
|
+ .in(BaseNewStudent::getId, studentIds)
|
|
|
+ );
|
|
|
+ List<BaseNewStudent> updateList = new ArrayList<>();
|
|
|
+ for (BaseNewStudent student : list) {
|
|
|
+ student.setStatus(1);
|
|
|
+ updateList.add(student);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!updateList.isEmpty()){
|
|
|
+ newStudentService.updateBatchById(updateList);
|
|
|
+ }
|
|
|
+
|
|
|
+ BandingTask bandingTask = this.getById(dto.getId());
|
|
|
+ bandingTask.setStatus(1);
|
|
|
+ bandingTask.setModifyDate(new Date());
|
|
|
+ Boolean isSuccess = this.update(bandingTask);
|
|
|
+ return isSuccess;
|
|
|
+ }
|
|
|
}
|