Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

zouxuan 4 éve
szülő
commit
32b08175d8

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -99,4 +99,6 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
 
     List<IndexBaseMonthData> getGroupCourseData(@Param("month") String month,
                                                 @Param("groupType")GroupType groupType);
+
+    List<String> getLessThenThreeMusicGroup(@Param("organIds") Set<Integer> organIds);
 }

+ 62 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexErrInfoDto.java

@@ -0,0 +1,62 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.IndexErrorType;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/1/19 0019
+ */
+public class IndexErrInfoDto<T> {
+
+    private IndexErrorType errorType;
+
+    private String desc;
+
+    private int num;
+
+    private List<T> result;
+
+    public IndexErrInfoDto(IndexErrorType errorType, String desc, List<T> result) {
+        this.errorType = errorType;
+        this.desc = desc;
+        this.result = result;
+        if(!CollectionUtils.isEmpty(result)){
+            this.num = result.size();
+        }
+    }
+
+    public IndexErrorType getErrorType() {
+        return errorType;
+    }
+
+    public void setErrorType(IndexErrorType errorType) {
+        this.errorType = errorType;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+
+    public int getNum() {
+        return num;
+    }
+
+    public void setNum(int num) {
+        this.num = num;
+    }
+
+    public List<T> getResult() {
+        return result;
+    }
+
+    public void setResult(List<T> result) {
+        this.result = result;
+    }
+}

+ 8 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherCourseStatistics.java

@@ -30,42 +30,42 @@ public class TeacherCourseStatistics {
     /**
     * vip课节数
     */
-    private Integer vipCourseNum;
+    private Integer vipCourseNum = 0;
 
     /**
     * 乐团课节数
     */
-    private Integer musicCourseNum;
+    private Integer musicCourseNum = 0;
 
     /**
      * 网管课节数
      */
-    private Integer practiceCourseNum;
+    private Integer practiceCourseNum = 0;
 
     /**
     * 预计乐团课酬
     */
-    private BigDecimal expectMusicCourseSalary;
+    private BigDecimal expectMusicCourseSalary = BigDecimal.ZERO;
 
     /**
     * 预计小课课酬
     */
-    private BigDecimal expectVipCourseSalary;
+    private BigDecimal expectVipCourseSalary = BigDecimal.ZERO;
 
     /**
      * 预计小课课酬
      */
-    private BigDecimal expectPracticeCourseSalary;
+    private BigDecimal expectPracticeCourseSalary = BigDecimal.ZERO;
 
     /**
     * 预计合计课酬
     */
-    private BigDecimal expectTotalSalary;
+    private BigDecimal expectTotalSalary = BigDecimal.ZERO;
 
     /**
     * 平均上课时长
     */
-    private Integer averageClassMinutes;
+    private Integer averageClassMinutes = 0;
 
     private Boolean lowSalary;
 

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java

@@ -10,7 +10,6 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     HIGH_CLASS_STUDENT_LESS_THAN_THREE("HIGH_CLASS_STUDENT_LESS_THAN_THREE", "基础技能班学员数量异常"),
     MUSIC_PATROL_ITEM("MUSIC_PATROL_ITEM", "乐团巡查事项异常"),
 
-    STUDENT_COURSE_FEE_NOT_ENOUGH("STUDENT_COURSE_FEE_NOT_ENOUGH", "学员欠费上课"),
     STUDENT_NOT_PAYMENT("STUDENT_NOT_PAYMENT", "学员未缴费"),
     STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP("STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP", "学员退团申请"),
     ;

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCourseStatisticsQueryInfo.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.page;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -20,6 +21,12 @@ public class TeacherCourseStatisticsQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "月份")
     private Date month;
 
+    @ApiModelProperty(value = "最小课酬")
+    private BigDecimal minSalary;
+
+    @ApiModelProperty(value = "最大课酬")
+    private BigDecimal maxSalary;
+
     public String getOrganId() {
         return organId;
     }
@@ -51,4 +58,20 @@ public class TeacherCourseStatisticsQueryInfo extends QueryInfo {
     public void setMonth(Date month) {
         this.month = month;
     }
+
+    public BigDecimal getMinSalary() {
+        return minSalary;
+    }
+
+    public void setMinSalary(BigDecimal minSalary) {
+        this.minSalary = minSalary;
+    }
+
+    public BigDecimal getMaxSalary() {
+        return maxSalary;
+    }
+
+    public void setMaxSalary(BigDecimal maxSalary) {
+        this.maxSalary = maxSalary;
+    }
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/IndexBaseMonthDataService.java

@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
+import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.common.service.BaseService;
 
 public interface IndexBaseMonthDataService extends BaseService<Long, IndexBaseMonthData> {
@@ -13,6 +14,6 @@ public interface IndexBaseMonthDataService extends BaseService<Long, IndexBaseMo
 
     Map<String, List<IndexBaseDto>> indexBaseDataTask(String month);
 
-
+    List<IndexErrInfoDto> getIndexErrData(String organIds);
 
 }

+ 43 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1076,19 +1076,37 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (courseScheduleIds.size() > 0) {
             hasTeacherSalaryCount = courseScheduleTeacherSalaryDao.getHasTeacherSalaryCount(courseScheduleIds);
         }
-        if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && hasTeacherSalaryCount > 0) {
+        if ((classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.HIGH)) && hasTeacherSalaryCount > 0) {
             Integer studentNum = classGroup.getStudentNum() + 1;
             List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
             courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
             for (CourseSchedule courseSchedule : courseScheduleList) {
                 for (ClassGroupTeacherMapper classGroupTeacher : classGroupTeachers) {
-                    List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), ClassGroupTypeEnum.HIGH_ONLINE.getCode(), null);
+                    List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), null, null);
                     Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-                    TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(courseSchedule.getType());
-                    if (studentNum > 5) {
+                    TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
+                    if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && studentNum > 5) {
                         studentNum = 5;
                     }
-                    BigDecimal salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
+
+                    BigDecimal salary = null;
+                    if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
+                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                    }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
+                        MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+                        TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
+                        if(Objects.isNull(teacherDefaultMusicGroupSalaryHigh)){
+                            throw new BizException("请设置老师课酬");
+                        }
+                        salary = TeachTypeEnum.BISHOP.equals(classGroupTeacher.getTeacherRole()) ? teacherDefaultMusicGroupSalaryHigh.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryHigh.getAssistantTeacher30MinSalary();
+                        if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                            salary = TeachTypeEnum.BISHOP.equals(classGroupTeacher.getTeacherRole()) ? teacherDefaultMusicGroupSalaryHigh.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryHigh.getAssistantTeacher90MinSalary();
+                        }
+                        salary = salary.multiply(new BigDecimal(studentNum));
+                    }
+                    if(Objects.isNull(salary)){
+                        throw new BizException("请设置老师课酬");
+                    }
 
                     CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                     courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
@@ -1222,7 +1240,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
                 for (CourseSchedule courseSchedule : courseScheduleList) {
                     for (ClassGroupTeacherMapper classGroupTeacher : classGroupTeachers) {
-                        List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), ClassGroupTypeEnum.HIGH_ONLINE.getCode(), null);
+                        List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), null, null);
                         if (teacherSalaryList == null || teacherSalaryList.size() == 0) {
                             throw new BizException("请设置老师线上网管课课酬");
                         }
@@ -1230,11 +1248,28 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
 
                         int studentNum = classGroup.getStudentNum() + 1;
-                        if (studentNum > 5) {
+                        if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && studentNum > 5) {
                             studentNum = 5;
                         }
 
-                        BigDecimal salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                        BigDecimal salary = null;
+                        if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
+                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                        }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
+                            MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+                            TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
+                            if(Objects.isNull(teacherDefaultMusicGroupSalaryHigh)){
+                                throw new BizException("请设置老师课酬");
+                            }
+                            salary = TeachTypeEnum.BISHOP.equals(classGroupTeacher.getTeacherRole()) ? teacherDefaultMusicGroupSalaryHigh.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryHigh.getAssistantTeacher30MinSalary();
+                            if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                                salary = TeachTypeEnum.BISHOP.equals(classGroupTeacher.getTeacherRole()) ? teacherDefaultMusicGroupSalaryHigh.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryHigh.getAssistantTeacher90MinSalary();
+                            }
+                            salary = salary.multiply(new BigDecimal(studentNum));
+                        }
+                        if(Objects.isNull(salary)){
+                            throw new BizException("请设置老师课酬");
+                        }
 
                         CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                         courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());

+ 21 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -329,23 +329,40 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         }
         //4、调整未上课课酬
         List<ClassGroupTeacherMapper> classGroupTeachers = classGroupTeacherMapperService.getClassGroupTeachers(classGroupId);
-        if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && courseScheduleList.size() > 0) {
+        if ((classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.HIGH)) && courseScheduleList.size() > 0) {
             studentNum += userIdStrSet.size();
             List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
             List<Long> courseScheduleIds = courseScheduleList.stream().map(CourseSchedule::getId).collect(Collectors.toList());
             courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
             for (CourseSchedule courseSchedule : courseScheduleList) {
                 for (ClassGroupTeacherMapper classGroupTeacher : classGroupTeachers) {
-                    List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), ClassGroupTypeEnum.HIGH_ONLINE.getCode(), null);
+                    List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), null, null);
                     if (teacherSalaryList == null || teacherSalaryList.size() == 0) {
                         throw new BizException("请设置老师线上网管课课酬");
                     }
                     Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
                     TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(courseSchedule.getType());
-                    if (studentNum > 5) {
+                    if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && studentNum > 5) {
                         studentNum = 5;
                     }
-                    BigDecimal salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
+                    BigDecimal salary = null;
+                    if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
+                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
+                    }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
+                        MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+                        TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
+                        if(Objects.isNull(teacherDefaultMusicGroupSalaryHigh)){
+                            throw new BizException("请设置老师课酬");
+                        }
+                        salary = TeachTypeEnum.BISHOP.equals(classGroupTeacher.getTeacherRole()) ? teacherDefaultMusicGroupSalaryHigh.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryHigh.getAssistantTeacher30MinSalary();
+                        if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                            salary = TeachTypeEnum.BISHOP.equals(classGroupTeacher.getTeacherRole()) ? teacherDefaultMusicGroupSalaryHigh.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryHigh.getAssistantTeacher90MinSalary();
+                        }
+                        salary = salary.multiply(new BigDecimal(studentNum));
+                    }
+                    if(Objects.isNull(salary)){
+                        throw new BizException("请设置老师课酬");
+                    }
 
                     CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                     courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());

+ 2 - 37
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -132,7 +132,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
                 courseScheduleTeacherSalary.setUserId(courseSchedules.get(i).getActualTeacherId().intValue());
                 courseScheduleTeacherSalary.setClassGroupId(courseSchedules.get(i).getClassGroupId());
-                courseScheduleTeacherSalary.setSubsidy(subsidy);
+//                courseScheduleTeacherSalary.setSubsidy(subsidy);
 
                 if (Objects.nonNull(vipGroupActivity)
                         &&vipGroupActivity.getType() == VipGroupActivityTypeEnum.GIVE_CLASS
@@ -537,7 +537,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             CourseSchedule courseSchedule = courseScheduleIdMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
 
             //教师课酬
-            BigDecimal teacherSalary = new BigDecimal(0);
+            BigDecimal teacherSalary = courseScheduleTeacherSalary.getExpectSalary();
 
             Teacher teacher = idTeacherMap.get(courseScheduleTeacherSalary.getUserId());
 
@@ -632,41 +632,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
 
                 continue;
-            }else if(CourseSchedule.CourseScheduleType.HIGH.equals(courseSchedule.getType())){
-                //根据课程类型获取对应的默认课酬设置列表
-                List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
-                if (CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)) {
-                    LOGGER.error("存在未指定结算方式的课程类型[{}]", courseScheduleTeacherSalary.getId());
-                    continue;
-                }
-
-                //根据教师编号将对应结算方式下的默认课酬设置分组
-                Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
-
-                Long normalStudentNum = courseNormalStudentsMap.get(courseSchedule.getId());
-                if(Objects.isNull(normalStudentNum)){
-                    normalStudentNum = Long.valueOf(0);
-                }
-
-                //结算方式
-                String settlementType = musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-                if(StringUtils.isEmpty(settlementType)){
-                    LOGGER.error("未指定课酬结算方式[{}]", courseScheduleTeacherSalary.getId());
-                    continue;
-                }
-
-                teacherSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-                if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                    teacherSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
-                }
-
-                if(Objects.isNull(teacherSalary)){
-                    LOGGER.error("教师课酬设置异常{}", courseSchedule.getId());
-                    continue;
-                }
-                teacherSalary = teacherSalary.multiply(new BigDecimal(normalStudentNum));
             }else{
                 teacherSalary=courseScheduleTeacherSalary.getExpectSalary();
             }

+ 16 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -2,11 +2,9 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
+import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.IndexDataType;
-import com.ym.mec.biz.dal.enums.JobNatureEnum;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -279,4 +277,18 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		indexBaseMonthDataDao.deleteWithMonthAndType(Arrays.asList(startMonth), indexDataType);
 		indexBaseMonthDataDao.batchInsertWithDataType(dataList, indexDataType);
 	}
+
+	@Override
+	public List<IndexErrInfoDto> getIndexErrData(String organIdsStr) {
+		Set<Integer> organIds = null;
+		if(StringUtils.isNotBlank(organIdsStr)){
+			organIds = Arrays.stream(organIdsStr.split(",")).map(Integer::new).collect(Collectors.toSet());
+		}
+
+		List<IndexErrInfoDto> result = new ArrayList<>();
+
+		result.add(new IndexErrInfoDto(IndexErrorType.HIGH_CLASS_STUDENT_LESS_THAN_THREE, IndexErrorType.HIGH_CLASS_STUDENT_LESS_THAN_THREE.getMsg(), indexBaseMonthDataDao.getLessThenThreeMusicGroup(organIds)));
+
+		return result;
+	}
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherCourseStatisticsServiceImpl.java

@@ -98,7 +98,7 @@ public class TeacherCourseStatisticsServiceImpl extends BaseServiceImpl<Long, Te
             teacherCourseStatistics.setPracticeCourseNum(practiceCourseNum);
 
             BigDecimal organWarningSalary = salaryConfigObject.getBigDecimal(teacherCourseStatistics.getOrganId().toString());
-            if(Objects.isNull(organWarningSalary)||teacherCourseStatistics.getExpectTotalSalary().compareTo(organWarningSalary)<=0){
+            if(Objects.isNull(organWarningSalary)||Objects.isNull(teacherCourseStatistics.getExpectTotalSalary())||teacherCourseStatistics.getExpectTotalSalary().compareTo(organWarningSalary)<0){
                 teacherCourseStatistics.setLowSalary(true);
             }else{
                 teacherCourseStatistics.setLowSalary(false);

+ 21 - 0
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -422,4 +422,25 @@
 			</if>
 			AND DATE_FORMAT( sr.create_time_, '%Y-%m' ) &lt;= #{month}
 	</select>
+
+    <select id="getLessThenThreeMusicGroup" resultType="java.lang.String">
+		SELECT
+			cg.music_group_id_
+		FROM
+			class_group cg
+			LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
+			LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
+		WHERE
+			cg.type_ = 'HIGH'
+			<if test="organIds!=null and organIds.size()>0">
+				AND mg.organ_id_ IN
+				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+		GROUP BY
+			cg.music_group_id_
+		HAVING
+			COUNT( DISTINCT cgsm.user_id_ )&lt;3
+	</select>
 </mapper>

+ 26 - 8
mec-biz/src/main/resources/config/mybatis/TeacherCourseStatisticsMapper.xml

@@ -62,14 +62,26 @@
 
     <!-- 查找下月排课小于基准课酬的老师-->
     <select id="findUserByWarringSalary" resultMap="TeacherCourseStatistics"><![CDATA[
-        SELECT SUM(csts.expect_salary_) expect_total_salary_, csts.user_id_,t.organ_id_,t.subject_id_ subject_id_list_,
-        ROUND(AVG(TIMESTAMPDIFF(MINUTE,start_class_time_,end_class_time_)),0) average_class_minutes_
-        FROM course_schedule_teacher_salary csts
-        LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
-        LEFT JOIN teacher t on t.id_ = csts.user_id_
-        WHERE cs.class_date_ >= #{startDate} AND cs.class_date_ <= #{endDate} AND csts.group_type_ IN ('VIP','MUSIC', 'PRACTICE')
-          AND cs.del_flag_ != 1 AND t.organ_id_ IS NOT NULL
-        GROUP BY csts.user_id_
+        SELECT ctt.expect_total_salary_, t.id_ user_id_,t.organ_id_,t.subject_id_ subject_id_list_,
+               ctt.average_class_minutes_
+        FROM teacher t
+         LEFT JOIN sys_user su ON t.id_=su.id_
+         LEFT JOIN (
+            SELECT
+                csts.user_id_,
+                SUM( csts.expect_salary_ ) expect_total_salary_,
+                ROUND( AVG( TIMESTAMPDIFF( MINUTE, start_class_time_, end_class_time_ )), 0 ) average_class_minutes_
+            FROM course_schedule_teacher_salary csts
+                     LEFT JOIN course_schedule cs ON cs.id_=csts.course_schedule_id_
+            WHERE cs.del_flag_ != 1
+              AND cs.class_date_ >= #{startDate} AND cs.class_date_ <= #{endDate}
+              AND csts.group_type_ IN ( 'VIP', 'MUSIC', 'PRACTICE' )
+            GROUP BY
+                csts.user_id_
+        ) ctt ON ctt.user_id_=t.id_
+        WHERE su.del_flag_ != 1 AND su.lock_flag_!=1
+          AND t.demission_date_ IS NULL
+          AND t.organ_id_ IS NOT NULL
         ]]>
   </select>
     <select id="findUserCourseSalaryByUserIds" resultMap="TeacherCourseStatistics">
@@ -110,6 +122,12 @@
             <if test="userId != null">
                 AND tcs.user_id_ = #{userId}
             </if>
+            <if test="minSalary != null">
+                AND tcs.expect_total_salary_ &gt;= #{minSalary}
+            </if>
+            <if test="maxSalary != null">
+                AND tcs.expect_total_salary_ &lt; #{maxSalary}
+            </if>
         </where>
     </sql>
 </mapper>