فهرست منبع

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
#	mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
Joburgess 5 سال پیش
والد
کامیت
c55b0ed3ef
16فایلهای تغییر یافته به همراه726 افزوده شده و 49 حذف شده
  1. 17 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherCourseStatisticsDao.java
  3. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupCourseScheduleDto.java
  4. 230 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherCourseStatistics.java
  5. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCourseStatisticsQueryInfo.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/queryMusicGroupCourseScheduleQueryInfo.java
  7. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherCourseStatisticsService.java
  8. 8 23
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  9. 48 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherCourseStatisticsServiceImpl.java
  10. 11 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  11. 61 7
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  12. 2 2
      mec-biz/src/main/resources/config/mybatis/GroupMapper.xml
  13. 105 0
      mec-biz/src/main/resources/config/mybatis/TeacherCourseStatisticsMapper.xml
  14. 58 8
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  15. 12 3
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  16. 59 0
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherCourseStatisticsController.java

+ 17 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -13,9 +13,7 @@ import com.ym.mec.common.page.PageInfo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
@@ -969,7 +967,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param search: 搜索关键字
      * @return java.util.List<java.lang.Integer>
      */
-    List<Integer> findCourseIdsByStudent(String search);
+    Set<Integer> findCourseIdsByStudent(String search);
 
     /**
      * @describe 根据关键字查询教师相关的课程编号
@@ -978,7 +976,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param search: 搜索关键字
      * @return java.util.List<java.lang.Integer>
      */
-    List<Integer> findCourseIdsByTeacher(String search);
+    Set<Integer> findCourseIdsByTeacher(String search);
 
     /**
      * @describe 统计团体下的总课次
@@ -1012,4 +1010,18 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     Date findGroupCourseEndTime(@Param("groupType") GroupType groupType,
                                   @Param("groupId") String groupId);
+
+    /**
+     * 获取课程编号列表
+     * @param params
+     * @return
+     */
+    Set<Integer> queryMusicCourseScheduleIds(Map<String, Object> params);
+
+    /**
+     * 获取课程编号列表
+     * @param params
+     * @return
+     */
+    Set<Integer> queryVipCourseScheduleIds(Map<String, Object> params);
 }

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherCourseStatisticsDao.java

@@ -0,0 +1,18 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.TeacherCourseStatistics;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+public interface TeacherCourseStatisticsDao extends BaseDAO<Long, TeacherCourseStatistics> {
+
+    List<TeacherCourseStatistics> findUserByWarringSalary(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("salary") BigDecimal salary);
+
+    List<TeacherCourseStatistics> findUserCourseSalaryByUserIds(@Param("userIds") List<Integer> userIds,@Param("startDate") Date startDate, @Param("endDate") Date endDate);
+
+    int batchAdd(@Param("lists") List<TeacherCourseStatistics> lists);
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupCourseScheduleDto.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
 import java.util.List;
 
 public class MusicGroupCourseScheduleDto {
@@ -50,6 +51,9 @@ public class MusicGroupCourseScheduleDto {
     @ApiModelProperty(value = "签退状态",required = false)
     private String signOutStatus;
 
+    @ApiModelProperty(value = "结算时间",required = false)
+    private Date settlementTime;
+
     @ApiModelProperty(value = "主教老师编号")
     private Integer masterTeacherId;
 
@@ -62,6 +66,14 @@ public class MusicGroupCourseScheduleDto {
     @ApiModelProperty(value = "老师人数",required = false)
     private Integer teacherNum;
 
+    public Date getSettlementTime() {
+        return settlementTime;
+    }
+
+    public void setSettlementTime(Date settlementTime) {
+        this.settlementTime = settlementTime;
+    }
+
     public String getStartClassTimeStr() {
         return startClassTimeStr;
     }

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

@@ -0,0 +1,230 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+public class TeacherCourseStatistics {
+    private Long id;
+
+    /**
+     * 教师id
+     */
+    private Integer userId;
+
+    /**
+    * 分部
+    */
+    private Integer organId;
+
+    /**
+    * 月份
+    */
+    private Date month;
+
+    /**
+    * 专业
+    */
+    private String subjectIdList;
+
+    /**
+    * vip课节数
+    */
+    private Integer vipCourseNum;
+
+    /**
+    * 乐团课节数
+    */
+    private Integer musicCourseNum;
+
+    /**
+    * 预计乐团课酬
+    */
+    private BigDecimal expectMusicCourseSalary;
+
+    /**
+    * 预计小课课酬
+    */
+    private BigDecimal expectVipCourseSalary;
+
+    /**
+    * 预计合计课酬
+    */
+    private BigDecimal expectTotalSalary;
+
+    /**
+    * 平均上课时长
+    */
+    private Integer averageClassMinutes;
+
+    /**
+    * 统计时间
+    */
+    private Date statisticsDateTime;
+
+    private String groupType;
+
+    private String realName;
+
+    private String phone;
+
+    private String organName;
+
+    private String monthStr;
+
+    private List<Subject> subjectList;
+
+    private String subjectListStr;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public Date getMonth() {
+        return month;
+    }
+
+    public void setMonth(Date month) {
+        this.month = month;
+    }
+
+    public String getSubjectIdList() {
+        return subjectIdList;
+    }
+
+    public void setSubjectIdList(String subjectIdList) {
+        this.subjectIdList = subjectIdList;
+    }
+
+    public Integer getVipCourseNum() {
+        return vipCourseNum;
+    }
+
+    public void setVipCourseNum(Integer vipCourseNum) {
+        this.vipCourseNum = vipCourseNum;
+    }
+
+    public Integer getMusicCourseNum() {
+        return musicCourseNum;
+    }
+
+    public void setMusicCourseNum(Integer musicCourseNum) {
+        this.musicCourseNum = musicCourseNum;
+    }
+
+    public BigDecimal getExpectMusicCourseSalary() {
+        return expectMusicCourseSalary;
+    }
+
+    public void setExpectMusicCourseSalary(BigDecimal expectMusicCourseSalary) {
+        this.expectMusicCourseSalary = expectMusicCourseSalary;
+    }
+
+    public BigDecimal getExpectVipCourseSalary() {
+        return expectVipCourseSalary;
+    }
+
+    public void setExpectVipCourseSalary(BigDecimal expectVipCourseSalary) {
+        this.expectVipCourseSalary = expectVipCourseSalary;
+    }
+
+    public BigDecimal getExpectTotalSalary() {
+        return expectTotalSalary;
+    }
+
+    public void setExpectTotalSalary(BigDecimal expectTotalSalary) {
+        this.expectTotalSalary = expectTotalSalary;
+    }
+
+    public Integer getAverageClassMinutes() {
+        return averageClassMinutes;
+    }
+
+    public void setAverageClassMinutes(Integer averageClassMinutes) {
+        this.averageClassMinutes = averageClassMinutes;
+    }
+
+    public Date getStatisticsDateTime() {
+        return statisticsDateTime;
+    }
+
+    public void setStatisticsDateTime(Date statisticsDateTime) {
+        this.statisticsDateTime = statisticsDateTime;
+    }
+
+    public String getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(String groupType) {
+        this.groupType = groupType;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getMonthStr() {
+        return monthStr;
+    }
+
+    public void setMonthStr(String monthStr) {
+        this.monthStr = monthStr;
+    }
+
+    public List<Subject> getSubjectList() {
+        return subjectList;
+    }
+
+    public void setSubjectList(List<Subject> subjectList) {
+        this.subjectList = subjectList;
+    }
+
+    public String getSubjectListStr() {
+        return subjectListStr;
+    }
+
+    public void setSubjectListStr(String subjectListStr) {
+        this.subjectListStr = subjectListStr;
+    }
+}

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

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+import java.util.List;
+
+public class TeacherCourseStatisticsQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "机构编号")
+    private String organId;
+
+    @ApiModelProperty(value = "教师编号")
+    private Integer userId;
+
+    @ApiModelProperty(value = "月份")
+    private String monthStr;
+
+    @ApiModelProperty(value = "月份")
+    private Date month;
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getMonthStr() {
+        return monthStr;
+    }
+
+    public void setMonthStr(String monthStr) {
+        this.monthStr = monthStr;
+    }
+
+    public Date getMonth() {
+        return month;
+    }
+
+    public void setMonth(Date month) {
+        this.month = month;
+    }
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/queryMusicGroupCourseScheduleQueryInfo.java

@@ -23,6 +23,17 @@ public class queryMusicGroupCourseScheduleQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "班级编号",required = false)
     private Integer classGroupId;
 
+    @ApiModelProperty(value = "是否结算",required = false)
+    private Integer isSettlement;
+
+    public Integer getIsSettlement() {
+        return isSettlement;
+    }
+
+    public void setIsSettlement(Integer isSettlement) {
+        this.isSettlement = isSettlement;
+    }
+
     public Integer getClassGroupId() {
         return classGroupId;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherCourseStatisticsService.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.TeacherCourseStatistics;
+import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.BaseService;
+
+
+public interface TeacherCourseStatisticsService extends BaseService<Long, TeacherCourseStatistics> {
+
+    /**
+     * 分页查询查询
+     *
+     * @param queryInfo
+     * @return
+     */
+    PageInfo<TeacherCourseStatistics> queryPageDetail(TeacherCourseStatisticsQueryInfo queryInfo);
+
+}

+ 8 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -363,7 +363,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             return pageInfo;
         }
 
-
         List<CourseScheduleDto> dataList = null;
         int count = courseScheduleDao.countCourseSchedulesWithDate(params);
         if (count > 0) {
@@ -2266,26 +2265,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>(16);
         MapUtil.populateMap(params, queryInfo);
-
-        if(StringUtils.isNotBlank(queryInfo.getSearch())||StringUtils.isNotBlank(queryInfo.getOrganIdList())){
-            params.put("musicGroupStatus", MusicGroupStatusEnum.PROGRESS);
-            params.put("vipGroupStatus", VipGroupStatusEnum.PROGRESS);
-            List<Group> groups = groupDao.searchGroups(params);
-            if(!CollectionUtils.isEmpty(groups)){
-                params.put("groups", groups);
-            }else{
-                if(StringUtils.isNotBlank(queryInfo.getOrganIdList())){
-                    return pageInfo;
-                }
-            }
-            List<Integer> studentCourseIds=courseScheduleDao.findCourseIdsByStudent(queryInfo.getSearch());
-            List<Integer> teacherCourseIds=courseScheduleDao.findCourseIdsByTeacher(queryInfo.getSearch());
-            studentCourseIds.addAll(teacherCourseIds);
-            if(!CollectionUtils.isEmpty(studentCourseIds)){
-                params.put("courseIds", studentCourseIds);
-            }
-        }
-
         if(StringUtils.isNotBlank(queryInfo.getTeacherName())){
             List<TeacherBasicDto> teachers = teacherDao.searchTeachers(params);
             if(!CollectionUtils.isEmpty(teachers)){
@@ -2293,7 +2272,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 params.put("teacherIdList",StringUtils.join(teacherIds.toArray(),","));
             }
         }
-
+        Set<Integer> courseScheduleIdSet = new HashSet<>();
+        courseScheduleIdSet.addAll(courseScheduleDao.queryMusicCourseScheduleIds(params));
+        courseScheduleIdSet.addAll(courseScheduleDao.queryVipCourseScheduleIds(params));
+        if(courseScheduleIdSet.size() == 0){
+            return pageInfo;
+        }
+        params.put("courseScheduleIds", courseScheduleIdSet);
         List<CourseScheduleEndDto> results = new ArrayList<>();
         int count = courseScheduleDao.endCountCourseSchedules(params);
         if (count > 0) {
@@ -2313,7 +2298,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 groups.add(group);
                 teacherIds.add(courseScheduleEndDto.getActualTeacherId());
             }
-            List<Map<Integer, String>> nameIdMaps = teacherDao.queryUsernameByIds(teacherIds);
+            List<Map<Integer, String>> nameIdMaps = teacherDao.queryNameByIds(StringUtils.join(teacherIds,","));
             Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
             groups = groupDao.findByGroupIds(groups);
             Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));

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

@@ -0,0 +1,48 @@
+package com.ym.mec.biz.service.impl;
+
+
+import com.ym.mec.biz.dal.dao.TeacherCourseStatisticsDao;
+import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.TeacherCourseStatistics;
+import com.ym.mec.biz.dal.page.TeacherCourseStatisticsQueryInfo;
+import com.ym.mec.biz.service.TeacherCourseStatisticsService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class TeacherCourseStatisticsServiceImpl extends BaseServiceImpl<Long, TeacherCourseStatistics> implements TeacherCourseStatisticsService {
+
+    @Autowired
+    private TeacherCourseStatisticsDao teacherCourseStatisticsDao;
+
+    @Override
+    public BaseDAO<Long, TeacherCourseStatistics> getDAO() {
+        return teacherCourseStatisticsDao;
+    }
+
+    @Override
+    public PageInfo<TeacherCourseStatistics> queryPageDetail(TeacherCourseStatisticsQueryInfo queryInfo) {
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        PageInfo<TeacherCourseStatistics> pageInfo = queryPage(queryInfo);
+        List<TeacherCourseStatistics> rows = pageInfo.getRows();
+        if (rows != null && rows.size() > 0) {
+            for (TeacherCourseStatistics row : rows) {
+                if (row.getSubjectList() != null && row.getSubjectList().size() > 0) {
+                    String subjectList = row.getSubjectList().stream().map(Subject::getName).collect(Collectors.joining(","));
+                    row.setSubjectListStr(subjectList);
+                }
+            }
+        }
+        return pageInfo;
+    }
+}

+ 11 - 1
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -582,6 +582,12 @@
             <if test="classGroupId != null">
                 AND cg.id_ = #{classGroupId}
             </if>
+            <if test="isSettlement == 0">
+                AND csts.settlement_time_ IS NULL
+            </if>
+            <if test="isSettlement == 1">
+                AND csts.settlement_time_ IS NOT NULL
+            </if>
         </where>
     </sql>
     <resultMap id="MusicGroupCourseScheduleDto" type="com.ym.mec.biz.dal.dto.MusicGroupCourseScheduleDto">
@@ -598,6 +604,7 @@
         <result property="courseScheduleStatus" column="course_schedule_status_"/>
         <result property="signInStatus" column="sign_in_status_"/>
         <result property="signOutStatus" column="sign_out_status_"/>
+        <result property="settlementTime" column="settlement_time_"/>
     </resultMap>
     <select id="queryMusicGroupCourseSchedule" resultMap="MusicGroupCourseScheduleDto">
         SELECT cs.id_ course_schedule_id_,cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.class_group_id_,
@@ -620,10 +627,12 @@
         SELECT cs.id_ course_schedule_id_,cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.class_group_id_,
         cs.type_ course_schedule_type_,cs.status_ course_schedule_status_,cg.name_ course_schedule_name_,
         IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
-        IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_
+        IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_,
+        csts.settlement_time_
         FROM course_schedule cs
         LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+        LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_ AND csts.teacher_role_ = 'BISHOP'
         <include refid="queryMusicGroupCourseScheduleDetailSql"/>
         ORDER BY cs.class_date_ ,cs.start_class_time_ ,cg.name_
         <include refid="global.limit"/>
@@ -634,6 +643,7 @@
         FROM course_schedule cs
         LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_
         LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+        LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_ AND csts.teacher_role_ = 'BISHOP'
         <include refid="queryMusicGroupCourseScheduleDetailSql"/>
     </select>
 

+ 61 - 7
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1245,6 +1245,7 @@
     <select id="queryTeacherCourseScheduleListByTimeRangeAndType" resultMap="CourseSchedule" parameterType="map">
         SELECT
             cs.id_,
+            cs.music_group_id_,
             cs.class_group_id_,
             cs.status_,
             cs.subsidy_,
@@ -1312,7 +1313,7 @@
         SELECT DISTINCT cgsm.music_group_id_ FROM class_group_student_mapper cgsm
         LEFT JOIN music_group mg ON mg.id_ = cgsm.music_group_id_ AND cgsm.group_type_ = 'MUSIC'
         LEFT JOIN vip_group vg ON vg.id_ = cgsm.music_group_id_ AND cgsm.group_type_ = 'VIP'
-        WHERE cgsm.user_id_ = #{userId} AND cgsm.status_ != 'QUIT' AND (mg.status_ = 'PROGRESS' OR vg.group_status_ = 2 OR vg.group_status_=5 OR vg.group_status_=1)
+        WHERE cgsm.user_id_ = #{userId} AND cgsm.status_ != 'QUIT' AND (mg.status_ = 'PROGRESS' OR vg.status_ = 2 OR vg.status_=5 OR vg.status_=1)
         ORDER BY cgsm.music_group_id_
         <include refid="global.limit"/>
     </select>
@@ -1328,7 +1329,7 @@
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
         WHERE spo.type_ != 'OTHER' AND spo.music_group_id_ IS NOT NULL
         AND spo.user_id_ = #{userId} AND spo.status_='SUCCESS' AND cgsm.status_ != 'QUIT'
-        AND IF(spo.group_type_ = 'VIP', (vg.group_status_ = 4 OR vg.group_status_ = 3 ),0)=0 AND cg.del_flag_ = 0
+        AND IF(spo.group_type_ = 'VIP', (vg.status_ = 4 OR vg.status_ = 3 ),0)=0 AND cg.del_flag_ = 0
         <include refid="global.limit"/>
     </select>
 
@@ -1339,7 +1340,7 @@
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
         WHERE spo.type_ != 'OTHER' AND spo.music_group_id_ IS NOT NULL
         AND spo.user_id_ = #{userId} AND spo.status_='SUCCESS' AND cgsm.status_ != 'QUIT'
-        AND IF(spo.group_type_ = 'VIP', (vg.group_status_ = 4 OR vg.group_status_ = 3),0)=0 AND cg.del_flag_ = 0
+        AND IF(spo.group_type_ = 'VIP', (vg.status_ = 4 OR vg.status_ = 3),0)=0 AND cg.del_flag_ = 0
     </select>
     <select id="countExistRepeatInDateZone" resultType="int">
         SELECT
@@ -1924,13 +1925,13 @@
         <where>
             <if test="search != null">
                 AND (cs.name_ LIKE CONCAT('%',#{search},'%') OR cs.id_ = #{search}
-                  <if test="groups != null and organIdList==null">
+                  <if test="groups != null and groupId==null">
                       OR cs.music_group_id_ IN
                       <foreach collection="groups" item="group" open="(" close=")" separator=",">
                           #{group.id}
                       </foreach>
                   </if>
-                  <if test="courseIds != null and organIdList==null">
+                  <if test="courseIds != null and groupId==null">
                     OR cs.id_ IN
                     <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
                         #{courseId}
@@ -1938,13 +1939,13 @@
                   </if>
                 )
             </if>
-            <if test="groups != null and organIdList!=null">
+            <if test="groups != null and groupId!=null">
                 AND cs.music_group_id_ IN
                 <foreach collection="groups" item="group" open="(" close=")" separator=",">
                     #{group.id}
                 </foreach>
             </if>
-            <if test="courseIds != null and organIdList!=null">
+            <if test="courseIds != null and groupId!=null">
                 AND cs.id_ IN
                 <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
                     #{courseId}
@@ -2075,4 +2076,57 @@
         WHERE group_type_=#{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
                 AND music_group_id_=#{groupId}
     </select>
+    <select id="queryMusicCourseScheduleIds" resultType="java.lang.Integer">
+        SELECT cs.id_ FROM course_schedule cs
+        LEFT JOIN music_group mg ON cs.music_group_id_ = mg.id_
+        LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
+        WHERE cs.group_type_ = 'MUSIC' AND mg.status_ = 'PROGRESS' AND cs.del_flag_ = 0 AND cg.del_flag_ = 0
+        <if test="search != null and search != ''">
+            AND (mg.id_ = #{search} OR mg.name_ LIKE CONCAT('%',#{search},'%')
+            OR cs.id_ = #{search} OR cs.name_ LIKE CONCAT('%',#{search},'%')
+            OR cg.id_ = #{search} OR cg.name_ LIKE CONCAT('%',#{search},'%'))
+        </if>
+        <if test="organIdList != null and organIdList != ''">
+            AND FIND_IN_SET(mg.organ_id_,#{organIdList})
+        </if>
+        <include refid="queryVipCourseScheduleIds"/>
+    </select>
+    <sql id="queryVipCourseScheduleIds">
+        <if test="startTime!=null and endTime==null">
+            AND cs.class_date_ &gt; DATE_FORMAT(#{startTime},"%Y-%m-%d")
+        </if>
+        <if test="startTime==null and endTime!=null">
+            AND cs.class_date_ &lt; DATE_FORMAT(#{endTime},"%Y-%m-%d")
+        </if>
+        <if test="startTime!=null and endTime!=null">
+            AND cs.class_date_ BETWEEN DATE_FORMAT(#{startTime},"%Y-%m-%d") AND DATE_FORMAT(#{endTime},"%Y-%m-%d")
+        </if>
+        <if test="courseStatus!=null">
+            AND cs.status_ = #{courseStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        </if>
+        <if test="courseType!=null">
+            AND cs.type_ = #{courseType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        </if>
+        <if test="schoolId!=null">
+            AND cs.schoole_id_ = #{schoolId}
+        </if>
+        <if test="teacherIdList != null">
+            AND FIND_IN_SET(cs.actual_teacher_id_,#{teacherIdList})
+        </if>
+    </sql>
+    <select id="queryVipCourseScheduleIds" resultType="java.lang.Integer">
+        SELECT cs.id_ FROM course_schedule cs
+        LEFT JOIN vip_group vg ON cs.music_group_id_ = vg.id_
+        LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
+        WHERE cs.group_type_ = 'VIP' AND vg.status_ = '2' AND cs.del_flag_ = 0 AND cg.del_flag_ = 0
+        <if test="search != null and search != ''">
+            AND (vg.id_ = #{search} OR vg.name_ LIKE CONCAT('%',#{search},'%')
+            OR cs.id_ = #{search} OR cs.name_ LIKE CONCAT('%',#{search},'%')
+            OR cg.id_ = #{search} OR cg.name_ LIKE CONCAT('%',#{search},'%'))
+        </if>
+        <if test="organIdList != null and organIdList != ''">
+            AND FIND_IN_SET(vg.organ_id_,#{organIdList})
+        </if>
+        <include refid="queryVipCourseScheduleIds"/>
+    </select>
 </mapper>

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/GroupMapper.xml

@@ -17,7 +17,7 @@
     <sql id="searchMusicGroupsCondition">
         <where>
             <if test="search!=null">
-                AND g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' )
+                AND (g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' ))
             </if>
             <if test="organIdList!=null">
                 AND FIND_IN_SET(g.organ_id_,#{organIdList})
@@ -31,7 +31,7 @@
     <sql id="searchVipGroupsCondition">
         <where>
             <if test="search!=null">
-                AND g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' )
+                AND (g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' ))
             </if>
             <if test="organIdList!=null">
                 AND FIND_IN_SET(g.organ_id_,#{organIdList})

+ 105 - 0
mec-biz/src/main/resources/config/mybatis/TeacherCourseStatisticsMapper.xml

@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.TeacherCourseStatisticsDao">
+    <resultMap id="TeacherCourseStatistics" type="com.ym.mec.biz.dal.entity.TeacherCourseStatistics">
+        <result column="id_" jdbcType="BIGINT" property="id"/>
+        <result column="user_id_" jdbcType="INTEGER" property="userId"/>
+        <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
+        <result column="month_" jdbcType="DATE" property="month"/>
+        <result column="subject_id_list_" jdbcType="VARCHAR" property="subjectIdList"/>
+        <result column="vip_course_num_" jdbcType="INTEGER" property="vipCourseNum"/>
+        <result column="music_course_num_" jdbcType="INTEGER" property="musicCourseNum"/>
+        <result column="expect_music_course_salary_" jdbcType="DECIMAL" property="expectMusicCourseSalary"/>
+        <result column="expect_vip_course_salary_" jdbcType="DECIMAL" property="expectVipCourseSalary"/>
+        <result column="expect_total_salary_" jdbcType="DECIMAL" property="expectTotalSalary"/>
+        <result column="average_class_minutes_" jdbcType="INTEGER" property="averageClassMinutes"/>
+        <result column="statistics_date_time_" jdbcType="DATE" property="statisticsDateTime"/>
+        <result column="group_type_" jdbcType="VARCHAR" property="groupType"/>
+        <result column="real_name_" jdbcType="VARCHAR" property="realName"/>
+        <result column="phone_" jdbcType="VARCHAR" property="phone"/>
+        <result column="organ_name_" jdbcType="VARCHAR" property="organName"/>
+        <result column="month_str_" jdbcType="VARCHAR" property="monthStr"/>
+        <collection property="subjectList" ofType="com.ym.mec.biz.dal.entity.Subject">
+            <result column="subject_id" property="id"/>
+            <result column="subject_name" property="name"/>
+        </collection>
+    </resultMap>
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TeacherCourseStatistics" useGeneratedKeys="true"
+            keyColumn="id" keyProperty="id">
+        INSERT INTO teacher_course_statistics (id_, user_id_, organ_id_, month_,
+        subject_id_list_, vip_course_num_, music_course_num_,
+        expect_music_course_salary_, expect_vip_course_salary_,
+        expect_total_salary_, average_class_minutes_,
+        statistics_date_time_)
+        VALUES (#{id,jdbcType=BIGINT}, #{userId,jdbcType=INTEGER}, #{organId,jdbcType=INTEGER}, #{month,jdbcType=DATE},
+        #{subjectIdList,jdbcType=VARCHAR}, #{vipCourseNum,jdbcType=INTEGER}, #{musicCourseNum,jdbcType=INTEGER},
+        #{expectMusicCourseSalary,jdbcType=DECIMAL}, #{expectVipCourseSalary,jdbcType=DECIMAL},
+        #{expectTotalSalary,jdbcType=DECIMAL}, #{averageClassMinutes,jdbcType=INTEGER},NOW())
+    </insert>
+
+    <insert id="batchAdd" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        INSERT INTO teacher_course_statistics (id_, user_id_, organ_id_, month_,
+        subject_id_list_, vip_course_num_, music_course_num_,
+        expect_music_course_salary_, expect_vip_course_salary_,
+        expect_total_salary_, average_class_minutes_,statistics_date_time_)
+        VALUE
+        <foreach collection="lists" item="list" separator=",">
+        (#{list.id,jdbcType=BIGINT}, #{list.userId,jdbcType=INTEGER}, #{list.organId,jdbcType=INTEGER}, #{list.month,jdbcType=DATE},
+        #{list.subjectIdList,jdbcType=VARCHAR}, #{list.vipCourseNum,jdbcType=INTEGER}, #{list.musicCourseNum,jdbcType=INTEGER},
+        #{list.expectMusicCourseSalary,jdbcType=DECIMAL}, #{list.expectVipCourseSalary,jdbcType=DECIMAL},
+        #{list.expectTotalSalary,jdbcType=DECIMAL}, #{list.averageClassMinutes,jdbcType=INTEGER},NOW())
+        </foreach>
+    </insert>
+
+    <!-- 查找下月排课小于基准课酬的老师-->
+    <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') AND cs.del_flag_ != 1
+        GROUP BY csts.user_id_ HAVING expect_total_salary_ <= #{salary}
+        ]]>
+  </select>
+    <select id="findUserCourseSalaryByUserIds" resultMap="TeacherCourseStatistics">
+        SELECT SUM(csts.expect_salary_) expect_total_salary_, COUNT(csts.id_) music_course_num_, csts.user_id_, csts.group_type_
+        FROM course_schedule_teacher_salary csts LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
+        WHERE csts.user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+        <![CDATA[AND cs.class_date_ >= #{startDate} AND cs.class_date_ <= #{endDate} AND csts.group_type_ IN ('VIP','MUSIC') AND cs.del_flag_ != 1
+        GROUP BY csts.user_id_, csts.group_type_;
+  ]]></select>
+
+    <select id="queryPage" resultMap="TeacherCourseStatistics" parameterType="map">
+        SELECT tcs.*,u.real_name_,u.phone_,o.name_ organ_name_,DATE_FORMAT(tcs.month_,'%Y年%m月') month_str_,
+        s.id_ subject_id,s.name_ subject_name FROM teacher_course_statistics tcs
+        left join sys_user u on tcs.user_id_ = u.id_
+        left join organization o on tcs.organ_id_ = o.id_
+        LEFT JOIN subject s ON FIND_IN_SET(s.id_,tcs.subject_id_list_)
+        <include refid="queryParams"/>
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int" parameterType="map">
+        SELECT COUNT(*) FROM teacher_course_statistics tcs
+        <include refid="queryParams"/>
+    </select>
+
+    <sql id="queryParams">
+        <where>
+            <if test="organId != null">
+                AND FIND_IN_SET(tcs.organ_id_,#{organId})
+            </if>
+            <if test="monthStr != null">
+                AND DATE_FORMAT(tcs.month_,'%Y-%m') = #{monthStr}
+            </if>
+            <if test="userId != null">
+                AND tcs.user_id_ = #{userId}
+            </if>
+        </where>
+    </sql>
+</mapper>

+ 58 - 8
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -2,10 +2,12 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherCourseStatisticsDao;
 import com.ym.mec.biz.dal.dto.LuckStatisDto;
 import com.ym.mec.biz.dal.dto.OrderStatisDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -76,6 +78,8 @@ public class StudentOrderController extends BaseController {
     private SporadicChargeInfoService sporadicChargeInfoService;
     @Autowired
     private OrganizationDao organizationDao;
+    @Autowired
+    private TeacherCourseStatisticsDao teacherCourseStatisticsDao;
 
     @PostMapping("/notify")
     public Msg notify(@ModelAttribute Msg msg) throws Exception {
@@ -126,7 +130,7 @@ public class StudentOrderController extends BaseController {
             List<Goods> goodsList = studentPaymentOrderDetailService.findApplyOrderGoods(orderByOrderNo.getId());
             orderDetail.put("goods", goodsList);
             orderDetail.put("course", musicGroup.getCourseForm());
-            orderDetail.put("ownershipType",musicGroup.getOwnershipType());
+            orderDetail.put("ownershipType", musicGroup.getOwnershipType());
         } else if (orderByOrderNo.getGroupType().equals(GroupType.VIP)) {
             VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
             orderDetail.put("detail", vipBuyResultInfo);
@@ -285,7 +289,7 @@ public class StudentOrderController extends BaseController {
 
 
     @RequestMapping("paymentResult")
-    public void paymentResult(HttpServletResponse response,String orderNo) {
+    public void paymentResult(HttpServletResponse response, String orderNo) {
         try {
             String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
             response.sendRedirect(baseApiUrl + "/#/paymentresult?orderNo=" + orderNo);
@@ -320,9 +324,9 @@ public class StudentOrderController extends BaseController {
         BigDecimal totalMoney = BigDecimal.ZERO;
         Integer totalNum = 0;
         Iterator<OrderStatisDto> iterator = orders.iterator();
-        while (iterator.hasNext()){
+        while (iterator.hasNext()) {
             OrderStatisDto order = iterator.next();
-            if (order.getOrganName().equals("总部国际") || order.getOrganName().equals("阳光总部国际") || order.getOrganName().equals("武汉小学")){
+            if (order.getOrganName().equals("总部国际") || order.getOrganName().equals("阳光总部国际") || order.getOrganName().equals("武汉小学")) {
                 iterator.remove();
                 continue;
             }
@@ -369,22 +373,68 @@ public class StudentOrderController extends BaseController {
                 if (tempRoutingResultList.contains("武汉大雅乐盟教育咨询有限公司")) {
                     type = "com";
                 }
-                fixUpdateOrder(orderNo,type);
+                fixUpdateOrder(orderNo, type);
             }
         }
     }
 
-    void fixUpdateOrder(String orderNo,String type) {
+    void fixUpdateOrder(String orderNo, String type) {
         StudentPaymentOrder order = studentPaymentOrderService.findOrderByOrderNo(orderNo);
-        if(type.equals("com")){
+        if (type.equals("com")) {
             order.setComAmount(order.getActualAmount());
             order.setPerAmount(BigDecimal.ZERO);
             order.setMerNos("0023115");
-        }else {
+        } else {
             order.setComAmount(BigDecimal.ZERO);
             order.setPerAmount(order.getActualAmount());
             order.setMerNos("0031215");
         }
         studentPaymentOrderService.update(order);
     }
+
+    @GetMapping("/teacherCourseStatistic")
+    public HttpResponseResult teacherCourseStatistic() {
+        Date nextMonthDate = DateUtil.addMonths(new Date(), 1);
+        Date startDate = DateUtil.getFirstDayOfMonth(nextMonthDate);
+        Date endDate = DateUtil.getLastDayOfMonth(nextMonthDate);
+        BigDecimal salary = new BigDecimal("4000");
+        List<TeacherCourseStatistics> teacherCourseStatisticsList = teacherCourseStatisticsDao.findUserByWarringSalary(startDate, endDate, salary);
+        if(teacherCourseStatisticsList.size() ==0){
+            return failed("没有做");
+        }
+        List<Integer> userIds = teacherCourseStatisticsList.stream().map(TeacherCourseStatistics::getUserId).collect(Collectors.toList());
+
+        List<TeacherCourseStatistics> teCourseSalaryStatisAndTypes = teacherCourseStatisticsDao.findUserCourseSalaryByUserIds(userIds,startDate,endDate);
+
+        for (TeacherCourseStatistics teacherCourseStatistics : teacherCourseStatisticsList) {
+            int vipCourseNum = 0;
+            int musicCourseNum =0;
+            BigDecimal expectVipCourseSalary = BigDecimal.ZERO;
+            BigDecimal expectMusicCourseSalary = BigDecimal.ZERO;
+
+            for (TeacherCourseStatistics teCourseSalaryStatisAndType : teCourseSalaryStatisAndTypes) {
+                if(!teacherCourseStatistics.getUserId().equals(teCourseSalaryStatisAndType.getUserId())) continue;
+
+                if(teCourseSalaryStatisAndType.getGroupType().equals("VIP")){
+                    expectVipCourseSalary = teCourseSalaryStatisAndType.getExpectTotalSalary();
+                    vipCourseNum = teCourseSalaryStatisAndType.getMusicCourseNum();
+                }else if(teCourseSalaryStatisAndType.getGroupType().equals("MUSIC")){
+                    expectMusicCourseSalary = teCourseSalaryStatisAndType.getExpectTotalSalary();
+                    musicCourseNum = teCourseSalaryStatisAndType.getMusicCourseNum();
+                }
+            }
+            teacherCourseStatistics.setExpectVipCourseSalary(expectVipCourseSalary);
+            teacherCourseStatistics.setExpectMusicCourseSalary(expectMusicCourseSalary);
+            teacherCourseStatistics.setVipCourseNum(vipCourseNum);
+            teacherCourseStatistics.setMusicCourseNum(musicCourseNum);
+
+            if(teacherCourseStatistics.getSubjectIdList()==null){
+                teacherCourseStatistics.setSubjectIdList("");
+            }
+            teacherCourseStatistics.setMonth(startDate);
+        }
+
+        teacherCourseStatisticsDao.batchAdd(teacherCourseStatisticsList);
+        return succeed(teacherCourseStatisticsList);
+    }
 }

+ 12 - 3
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -272,9 +272,18 @@ public class CourseScheduleController extends BaseController {
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-        Employee employee = employeeDao.get(sysUser.getId());
-        if(StringUtils.isEmpty(queryInfo.getOrganIdList())&&Objects.nonNull(employee)){
-            queryInfo.setOrganIdList(employee.getOrganIdList());
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (org.apache.commons.lang3.StringUtils.isEmpty(queryInfo.getOrganIdList())) {
+                queryInfo.setOrganIdList(employee.getOrganIdList());
+            }else if(org.apache.commons.lang3.StringUtils.isEmpty(employee.getOrganIdList())){
+                return failed("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganIdList().split(",")))){
+                    return failed("非法请求");
+                }
+            }
         }
         return succeed(scheduleService.endFindCourseSchedules(queryInfo));
     }

+ 59 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherCourseStatisticsController.java

@@ -0,0 +1,59 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.page.TeacherCourseStatisticsQueryInfo;
+import com.ym.mec.biz.service.TeacherCourseStatisticsService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+
+
+@RequestMapping("teacherCourseStatistics")
+@Api(tags = "教师服务")
+@RestController
+public class TeacherCourseStatisticsController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
+
+    @Autowired
+    private TeacherCourseStatisticsService teacherCourseStatisticsService;
+
+    @ApiOperation(value = "分页查询教师列表")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('teacherCourseStatistics/queryPage')")
+    public Object queryPage(TeacherCourseStatisticsQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+                return failed("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                    return failed("非法请求");
+                }
+            }
+        }
+        return succeed(teacherCourseStatisticsService.queryPageDetail(queryInfo));
+    }
+}