dzx 1 éve
szülő
commit
1381adfc4f

+ 10 - 1
src/main/java/com/xjrsoft/module/banding/controller/BandingTaskController.java

@@ -162,6 +162,16 @@ public class BandingTaskController {
     @ApiOperation(value = "确认分班")
     @SaCheckPermission("bandingTaskClass:sure")
     public RT<Boolean> sure(@Valid @RequestBody SureBandingTaskDto dto){
+        Boolean isSuccess = bandingTaskService.sure(dto);
+        return RT.ok(isSuccess);
+    }
+
+
+
+    @PostMapping("/automatic-banding")
+    @ApiOperation(value = "自动分班")
+    @SaCheckPermission("bandingTaskClass:automatic-banding")
+    public RT<Boolean> automaticBanding(@Valid @RequestBody SureBandingTaskDto dto){
         BandingTask bandingTask = bandingTaskService.getById(dto.getId());
         bandingTask.setStatus(1);
         bandingTask.setModifyDate(new Date());
@@ -169,5 +179,4 @@ public class BandingTaskController {
         return RT.ok(isSuccess);
     }
 
-
 }

+ 2 - 2
src/main/java/com/xjrsoft/module/banding/entity/BandingTaskClass.java

@@ -113,8 +113,8 @@ public class BandingTaskClass implements Serializable {
     /**
     * 体重
     */
-    @ApiModelProperty("体重")
-    private BigDecimal weight;
+    @ApiModelProperty("分数")
+    private BigDecimal score;
 
     @ApiModelProperty("分班任务(banding_task)")
     private Long bandingTaskId;

+ 3 - 0
src/main/java/com/xjrsoft/module/banding/entity/BandingTaskClassStudent.java

@@ -85,4 +85,7 @@ public class BandingTaskClassStudent implements Serializable {
     @ApiModelProperty("新生id")
     private Long newStudentId;
 
+    @ApiModelProperty("状态(0:未确认 1:已确认)")
+    private Integer status;
+
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/banding/service/IBandingTaskService.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.banding.service;
 
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.banding.dto.SureBandingTaskDto;
 import com.xjrsoft.module.banding.entity.BandingTask;
 
 import java.util.List;
@@ -36,4 +37,9 @@ public interface IBandingTaskService extends MPJBaseService<BandingTask> {
     * @return
     */
     Boolean delete(List<Long> ids);
+
+    Boolean automaticBanding(SureBandingTaskDto dto);
+
+
+    Boolean sure(SureBandingTaskDto dto);
 }

+ 97 - 8
src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskServiceImpl.java

@@ -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;
+    }
 }

+ 14 - 2
src/main/java/com/xjrsoft/module/banding/vo/BandingTaskClassPageVo.java

@@ -41,8 +41,8 @@ public class BandingTaskClassPageVo {
     @ApiModelProperty("身高")
     private BigDecimal height;
 
-    @ApiModelProperty("体重")
-    private BigDecimal weight;
+    @ApiModelProperty("分数")
+    private BigDecimal score;
 
     @ApiModelProperty("是否订单班(0:否 1:是)")
     private Integer isOrderClass;
@@ -53,4 +53,16 @@ public class BandingTaskClassPageVo {
     @ApiModelProperty("剩余人数")
     private Integer surplusCount;
 
+    @ApiModelProperty("班主任id")
+    private Long teacherId;
+
+    @ApiModelProperty("班主任名称")
+    private String teacherName;
+
+    @ApiModelProperty("教室id")
+    private Long classroomId;
+
+    @ApiModelProperty("教室名称")
+    private String classroomName;
+
 }

+ 1 - 1
src/main/resources/mapper/banding/BandingTaskClassMapper.xml

@@ -7,7 +7,7 @@
         SELECT t1.id, t1.major_set_id,t2.name AS major_set_name, t1.name, t1.number,t1.sort_code,t1.is_order_class,
         (SELECT COUNT(*) FROM base_new_student WHERE delete_mark = 0 AND first_ambition_id = t1.major_set_id) AS first_ambition_count,
         (SELECT COUNT(*) FROM base_new_student WHERE delete_mark = 0 AND second_ambition_id = t1.major_set_id) AS second_ambition_count,
-        t1.height, t1.weight, 0 as satisfy_count, 0 as surplus_count FROM banding_task_class t1
+        t1.height, t1.score, 0 as satisfy_count, 0 as surplus_count, t3.name as teacher_name,t3.id as teacher_id, t4.name as classroom_name,t4.id as classroom_id FROM banding_task_class t1
         LEFT JOIN base_major_set t2 ON t1.major_set_id = t2.id
         LEFT JOIN xjr_user t3 ON t1.teacher_id = t3.id
         LEFT JOIN base_classroom t4 ON t1.classroom_id = t4.id