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

Merge remote-tracking branch 'origin/master'

Joburgess 4 éve
szülő
commit
568c477cdd

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupQuitDao.java

@@ -19,8 +19,17 @@ public interface MusicGroupQuitDao extends BaseDAO<Long, MusicGroupQuit> {
 
     /**
      * 获取用户退出的乐团
+     *
      * @param userId
      * @return
      */
     List<MusicGroupQuit> getUserMusicQuit(@Param("userId") Integer userId);
+
+    /**
+     * 获取学生乐团最后一次退团记录
+     * @param musicGroupId
+     * @param userIds
+     * @return
+     */
+    List<MusicGroupQuit> getQuits(@Param("musicGroupId") String musicGroupId, @Param("userIds") List<Integer> userIds);
 }

+ 7 - 11
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -76,14 +76,6 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     String queryNameById(@Param("userId") Integer userId);
 
     /**
-     * 查询分部所有老师
-     *
-     * @param userIds
-     * @return
-     */
-    List<TeacherBasicDto> findTeachers(@Param("userIds") List<Integer> userIds);
-
-    /**
      * @param userIds:
      * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
      * @describe
@@ -267,8 +259,6 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      */
     Map<String, Integer> queryOrganTeacherNum(@Param("organId") String organId);
 
-    List<Teacher> findByFlowOrganRange(Map<String, Object> params);
-
     /**
      * @param teacherIds: 教师编号里列表
      * @return java.util.List<com.ym.mec.biz.dal.entity.Teacher>
@@ -478,7 +468,6 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(@Param("organIdList") String organIdList);
 
     BasicUserDto findUserByPhone(String phone);
-
     /**
      * 是否存在该userId
      * @Author zouxuan
@@ -486,4 +475,11 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @return
      */
     Boolean existUser(@Param("userId") Object userId);
+
+    /**
+     * 获取流动分部老师
+     * @param organId
+     * @return
+     */
+    List<TeacherBasicDto> findByFlowOrganRangeTeachers(String organId);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java

@@ -41,6 +41,9 @@ public class MusicGroupStudentsDto{
     @ApiModelProperty(value = "学员状态 NORMAL(NORMAL, 在读), LEAVE(LEAVE, 请假), QUIT(QUIT, 退班)",required = false)
     private String studentStatus;
 
+    @ApiModelProperty(value = "退团原因",required = false)
+    private String quitReason;
+
     private PaymentFlagEnum paymentStatus;
 
     @ApiModelProperty(value = "是否新增学员(1是0否)",required = false)
@@ -209,4 +212,12 @@ public class MusicGroupStudentsDto{
     public void setNextPaymentDateStr(String nextPaymentDateStr) {
         this.nextPaymentDateStr = nextPaymentDateStr;
     }
+
+    public String getQuitReason() {
+        return quitReason;
+    }
+
+    public void setQuitReason(String quitReason) {
+        this.quitReason = quitReason;
+    }
 }

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

@@ -13,9 +13,6 @@ public class TeacherQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "机构编号")
     private String organId;
 
-    @ApiModelProperty(value = "教师编号")
-    private List<Integer> teacherId;
-
     @ApiModelProperty(value = "教师工作性质")
     private String jobNature;
 
@@ -39,14 +36,6 @@ public class TeacherQueryInfo extends QueryInfo {
         this.tenantId = tenantId;
     }
 
-    public List<Integer> getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(List<Integer> teacherId) {
-        this.teacherId = teacherId;
-    }
-
     public Integer getSubjectId() {
         return subjectId;
     }

+ 99 - 84
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -121,55 +121,55 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
         PageInfo<StudentManageListDto> pageInfo = new PageInfo<StudentManageListDto>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-		
-		List<StudentManageListDto> dataList = null;
-		int count = studentManageDao.countStudentByOrganId(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = studentManageDao.findStudentsByOrganId(params);
-		}
-		if (dataList == null) {
-			dataList = new ArrayList<StudentManageListDto>();
-		}
-		pageInfo.setRows(dataList);
-		
-		if(dataList.size() == 0){
-			return pageInfo;
-		}
-		
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<StudentManageListDto> dataList = null;
+        int count = studentManageDao.countStudentByOrganId(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentManageDao.findStudentsByOrganId(params);
+        }
+        if (dataList == null) {
+            dataList = new ArrayList<StudentManageListDto>();
+        }
+        pageInfo.setRows(dataList);
+
+        if (dataList.size() == 0) {
+            return pageInfo;
+        }
+
         Set<Integer> userIds = dataList.stream().map(StudentManageListDto::getUserId).collect(Collectors.toSet());
-		
-		List<StudentListCourseDto> studentListCourseDtoList = studentManageDao.queryStudentRemianCourse(userIds);
-		Map<Integer,StudentListCourseDto> StudentListCourseDtoMap = studentListCourseDtoList.stream().collect(Collectors.toMap(StudentListCourseDto::getUserId, studentListCourseDto -> studentListCourseDto));
-		
-		StudentListCourseDto studentListCourseDto = null;
-		for (StudentManageListDto dto : dataList) {
-			studentListCourseDto = StudentListCourseDtoMap.get(dto.getUserId());
-			if (studentListCourseDto != null) {
-				if (studentListCourseDto.getRemainCourseNum() > 0) {
-					dto.setHasCourse(YesOrNoEnum.YES);
-				} else {
-					dto.setHasCourse(YesOrNoEnum.NO);
-				}
-				if (studentListCourseDto.getRemainPracticeNum() > 0) {
-					dto.setHasPracticeCourse(YesOrNoEnum.YES);
-				} else {
-					dto.setHasPracticeCourse(YesOrNoEnum.NO);
-				}
-			} else {
-				dto.setHasCourse(YesOrNoEnum.NO);
-				dto.setHasPracticeCourse(YesOrNoEnum.NO);
-			}
-		}
-		
-		if (queryInfo.getIsExport()) {
-			if (count > 50000) {
-				throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
-			}
-			//获取所在乐团
+
+        List<StudentListCourseDto> studentListCourseDtoList = studentManageDao.queryStudentRemianCourse(userIds);
+        Map<Integer, StudentListCourseDto> StudentListCourseDtoMap = studentListCourseDtoList.stream().collect(Collectors.toMap(StudentListCourseDto::getUserId, studentListCourseDto -> studentListCourseDto));
+
+        StudentListCourseDto studentListCourseDto = null;
+        for (StudentManageListDto dto : dataList) {
+            studentListCourseDto = StudentListCourseDtoMap.get(dto.getUserId());
+            if (studentListCourseDto != null) {
+                if (studentListCourseDto.getRemainCourseNum() > 0) {
+                    dto.setHasCourse(YesOrNoEnum.YES);
+                } else {
+                    dto.setHasCourse(YesOrNoEnum.NO);
+                }
+                if (studentListCourseDto.getRemainPracticeNum() > 0) {
+                    dto.setHasPracticeCourse(YesOrNoEnum.YES);
+                } else {
+                    dto.setHasPracticeCourse(YesOrNoEnum.NO);
+                }
+            } else {
+                dto.setHasCourse(YesOrNoEnum.NO);
+                dto.setHasPracticeCourse(YesOrNoEnum.NO);
+            }
+        }
+
+        if (queryInfo.getIsExport()) {
+            if (count > 50000) {
+                throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
+            }
+            //获取所在乐团
             Map<Integer, String> musicGroupNames = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicNames(userIds));
             //获取所在vip
             Map<Integer, String> vipGroupNames = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipNames(userIds));
@@ -177,15 +177,15 @@ public class StudentManageServiceImpl implements StudentManageService {
             Map<Integer, String> musicGroupStatus = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicStatus(userIds));
             //获取所在vip状态
             Map<Integer, String> vipGroupStatus = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipStatus(userIds));
-            
+
             dataList.forEach(e -> {
                 e.setMusicGroupName(musicGroupNames.get(e.getUserId().longValue()));
                 e.setVipGroupName(vipGroupNames.get(e.getUserId()));
                 e.setMusicGroupStatus(musicGroupStatus.get(e.getUserId().longValue()));
                 e.setVipGroupStatus(vipGroupStatus.get(e.getUserId()));
             });
-		}
-		pageInfo.setRows(dataList);
+        }
+        pageInfo.setRows(dataList);
         return pageInfo;
     }
 
@@ -385,6 +385,21 @@ public class StudentManageServiceImpl implements StudentManageService {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = studentManageDao.queryMusicGroupStudent(params);
+            //退团的学生
+            List<Integer> quitUserIds = dataList.stream().filter(e -> e.getStudentStatus().equals("QUIT")).map(MusicGroupStudentsDto::getUserId).collect(Collectors.toList());
+
+            if (quitUserIds.size() > 0) {
+                List<MusicGroupQuit> quits = musicGroupQuitDao.getQuits(queryInfo.getMusicGroupId(), quitUserIds);
+                for (MusicGroupStudentsDto musicGroupStudentsDto : dataList) {
+                    for (MusicGroupQuit quit : quits) {
+                        if (!quit.getUserId().equals(musicGroupStudentsDto.getUserId())) continue;
+                        musicGroupStudentsDto.setQuitReason(quit.getReason());
+                    }
+                }
+            }
+//            Map<Integer,String> maps = MapUtil.convertIntegerMap(musicGroupStudentFeeDao.findPaymentStatusMap(queryInfo.getMusicGroupId()));
+//            dataList.forEach(e->{
+//                e.setPaymentStatus(maps.get(e.getUserId()));
 //            Set<Integer> collect = dataList.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
 //            Map<Integer,String> paymentStatusMap = MapUtil.convertIntegerMap(
 //                    musicGroupPaymentCalenderDao.queryUserCoursePaymentStatus(collect,queryInfo.getMusicGroupId()));
@@ -477,39 +492,39 @@ public class StudentManageServiceImpl implements StudentManageService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-	public int studentRegister(Student student) {
-		if (student == null || StringUtils.isEmpty(student.getPhone())) {
-			throw new BizException("参数校验失败");
-		}
-		Date date = new Date();
-		SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-		if (sysUser != null) {
-			if (sysUser.getUserType().contains("STUDENT")) {
-				throw new BizException("手机号已被占用");
-			} else {
-				student.setId(sysUser.getId());
-				student.setUserType(sysUser.getUserType() + ",STUDENT");
-				student.setUpdateTime(date);
-				sysUserFeignService.updateSysUser(student);
-			}
-		} else {
-			student.setUpdateTime(date);
-			student.setCreateTime(date);
-			student.setUserType("STUDENT");
-			HttpResponseResult<Integer> result = sysUserFeignService.addUser(student);
-			student.setId(result.getData());
-
-			ImResult register = imFeignService.register(new ImUserModel(student.getId().toString(), student.getPhone(), null));
-			student.setImToken(register.getToken());
-			sysUserFeignService.updateSysUser(student);
-
-			sysUserCashAccountDao.insert(new SysUserCashAccount(student.getId(), "CNY"));
-		}
-		student.setUserId(student.getId());
-
-		studentService.upSet(student);
-		return student.getId();
-	}
+    public int studentRegister(Student student) {
+        if (student == null || StringUtils.isEmpty(student.getPhone())) {
+            throw new BizException("参数校验失败");
+        }
+        Date date = new Date();
+        SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
+        if (sysUser != null) {
+            if (sysUser.getUserType().contains("STUDENT")) {
+                throw new BizException("手机号已被占用");
+            } else {
+                student.setId(sysUser.getId());
+                student.setUserType(sysUser.getUserType() + ",STUDENT");
+                student.setUpdateTime(date);
+                sysUserFeignService.updateSysUser(student);
+            }
+        } else {
+            student.setUpdateTime(date);
+            student.setCreateTime(date);
+            student.setUserType("STUDENT");
+            HttpResponseResult<Integer> result = sysUserFeignService.addUser(student);
+            student.setId(result.getData());
+
+            ImResult register = imFeignService.register(new ImUserModel(student.getId().toString(), student.getPhone(), null));
+            student.setImToken(register.getToken());
+            sysUserFeignService.updateSysUser(student);
+
+            sysUserCashAccountDao.insert(new SysUserCashAccount(student.getId(), "CNY"));
+        }
+        student.setUserId(student.getId());
+
+        studentService.upSet(student);
+        return student.getId();
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)

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

@@ -236,17 +236,7 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 
     @Override
     public List<TeacherBasicDto> findTeachers(String organId) {
-		List<Teacher> teacherList = teacherDao.findByFlowOrganRange(null);
-		if(StringUtils.isNotEmpty(organId)){
-			Set<String> list = new HashSet<>(Arrays.asList(organId.split(",")));
-			teacherList = teacherList.stream().
-					filter(teacher -> !Collections.disjoint(new ArrayList<>(Arrays.asList(teacher.getFlowOrganRange().split(","))),list)).collect(Collectors.toList());
-		}
-		List<Integer> userIds = teacherList.stream().map(e -> e.getId()).collect(Collectors.toList());
-		if(userIds != null && userIds.size() > 0){
-			return teacherDao.findTeachers(userIds);
-		}
-		return new ArrayList<>();
+		return teacherDao.findByFlowOrganRangeTeachers(organId);
     }
 
 	@Override
@@ -422,21 +412,6 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	public PageInfo<Teacher> queryPageDetail(TeacherQueryInfo queryInfo) {
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
-		List<Teacher> teacherList = teacherDao.findByFlowOrganRange(params);
-		if(teacherList == null || teacherList.size() < 1){
-			return new PageInfo<>();
-		}
-		if(StringUtils.isNotEmpty(queryInfo.getOrganId())){
-			Set<String> list = new HashSet<>(Arrays.asList(queryInfo.getOrganId().split(",")));
-			teacherList = teacherList.stream().
-					filter(teacher -> !Collections.disjoint(new ArrayList<>(Arrays.asList(teacher.getFlowOrganRange().split(","))),list)).collect(Collectors.toList());
-		}
-		List<Integer> collect = teacherList.stream().map(e -> e.getId()).collect(Collectors.toList());
-		if(collect == null || collect.size() < 1){
-			return new PageInfo<>();
-		}
-		queryInfo.setTeacherId(collect);
-
 		PageInfo<Teacher> pageInfo = queryPage(queryInfo);
 		List<Teacher> rows = pageInfo.getRows();
 		if(rows != null && rows.size() > 0){

+ 104 - 85
mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml

@@ -3,97 +3,116 @@
 <!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.MusicGroupQuitDao">
 
-	<resultMap type="com.ym.mec.biz.dal.entity.MusicGroupQuit"
-		id="MusicGroupQuit">
-		<result column="id_" property="id" />
-		<result column="user_id_" property="userId" />
-		<result column="music_group_id_" property="musicGroupId" />
-		<result column="join_date_" property="joinDate" />
-		<result column="quit_date_" property="quitDate" />
-		<result column="create_time_" property="createTime" />
-		<result column="reason_" property="reason" />
-		<result column="status_" property="status"
-			typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
-	</resultMap>
+    <resultMap type="com.ym.mec.biz.dal.entity.MusicGroupQuit"
+               id="MusicGroupQuit">
+        <result column="id_" property="id"/>
+        <result column="user_id_" property="userId"/>
+        <result column="music_group_id_" property="musicGroupId"/>
+        <result column="join_date_" property="joinDate"/>
+        <result column="quit_date_" property="quitDate"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="reason_" property="reason"/>
+        <result column="status_" property="status"
+                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+    </resultMap>
 
-	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="MusicGroupQuit">
-		SELECT * FROM
-		music_group_quit WHERE id_ = #{id}
-	</select>
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        WHERE id_ = #{id}
+    </select>
 
-	<!-- 全查询 -->
-	<select id="findAll" resultMap="MusicGroupQuit">
-		SELECT * FROM music_group_quit
-		ORDER BY id_
-	</select>
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        ORDER BY id_
+    </select>
 
-	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
-		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
-			AS ID FROM DUAL </selectKey> -->
-		INSERT INTO music_group_quit
-		(id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,status_)
-		VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
-	</insert>
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
+            useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        <!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval
+            AS ID FROM DUAL </selectKey> -->
+        INSERT INTO music_group_quit
+        (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,status_)
+        VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+    </insert>
 
-	<!-- 根据主键查询一条记录 -->
-	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit">
-		UPDATE music_group_quit
-		<set>
-			<if test="userId != null">
-				user_id_ = #{userId},
-			</if>
-			<if test="id != null">
-				id_ = #{id},
-			</if>
-			<if test="joinDate != null">
-				join_date_ = #{joinDate},
-			</if>
-			<if test="reason != null">
-				reason_ = #{reason},
-			</if>
-			<if test="quitDate != null">
-				quit_date_ = #{quitDate},
-			</if>
-			<if test="musicGroupId != null">
-				music_group_id_ = #{musicGroupId},
-			</if>
-			<if test="createTime != null">
-				create_time_ = #{createTime},
-			</if>
-			<if test="status != null">
-				status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-			</if>
-		</set>
-		WHERE id_ = #{id}
-	</update>
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit">
+        UPDATE music_group_quit
+        <set>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="id != null">
+                id_ = #{id},
+            </if>
+            <if test="joinDate != null">
+                join_date_ = #{joinDate},
+            </if>
+            <if test="reason != null">
+                reason_ = #{reason},
+            </if>
+            <if test="quitDate != null">
+                quit_date_ = #{quitDate},
+            </if>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="status != null">
+                status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+        </set>
+        WHERE id_ = #{id}
+    </update>
 
-	<!-- 根据主键删除一条记录 -->
-	<delete id="delete">
-		DELETE FROM music_group_quit WHERE id_ =
-		#{id}
-	</delete>
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
+        DELETE
+        FROM music_group_quit
+        WHERE id_ =
+              #{id}
+    </delete>
 
-	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="MusicGroupQuit" parameterType="map">
-		SELECT * FROM music_group_quit ORDER BY id_
-		<include refid="global.limit" />
-	</select>
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="MusicGroupQuit" parameterType="map">
+        SELECT * FROM music_group_quit ORDER BY id_
+        <include refid="global.limit"/>
+    </select>
 
-	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM
-		music_group_quit
-	</select>
-	<select id="countMusicGroupQuitNum" resultType="int">
-		SELECT COUNT( * )
-		FROM music_group_quit
-		WHERE music_group_id_=#{musicGroupId} AND status_='APPROVED'
-	</select>
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM music_group_quit
+    </select>
+    <select id="countMusicGroupQuitNum" resultType="int">
+        SELECT COUNT(*)
+        FROM music_group_quit
+        WHERE music_group_id_ = #{musicGroupId}
+          AND status_ = 'APPROVED'
+    </select>
 
-	<select id="getUserMusicQuit" resultMap="MusicGroupQuit">
-		SELECT * FROM music_group_quit WHERE user_id_=#{userId} AND status_='APPROVED' ORDER BY id_ ASC
-	</select>
+    <select id="getUserMusicQuit" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        WHERE user_id_ = #{userId}
+          AND status_ = 'APPROVED'
+        ORDER BY id_ ASC
+    </select>
+
+    <select id="getQuits" resultMap="MusicGroupQuit">
+        SELECT * FROM music_group_quit WHERE id_ IN (
+        SELECT MAX(id_) FROM music_group_quit WHERE music_group_id_=#{musicGroupId} AND user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+        GROUP BY user_id_
+        )
+    </select>
 </mapper>

+ 8 - 6
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -558,14 +558,15 @@
     </sql>
     <select id="exportStudentAttendancesQueryPage"
             resultMap="ExportStudentAttendanceDtoMap">
-        SELECT o.name_ organ_name_,o.id_ organ_id_,cs.music_group_id_,mg.name_ music_group_name_,su.username_,cssp.user_id_,
-        cs.name_ course_schedule_name_,cs.id_ course_schedule_id_,
-        cs.class_date_,cs.start_class_time_,cs.end_class_time_,su2.real_name_ guide_teacher_name_,st.teacher_id_ guide_teacher_id_
-        ,su1.real_name_ educational_teacher_name_,mg.educational_teacher_id_,cs.group_type_,
-        CASE WHEN sa.id_ IS NULL THEN 'TRUANT' ELSE sa.status_ END attendance_status_
+        SELECT MAX(o.name_) organ_name_,MAX(o.id_) organ_id_,MAX(cs.music_group_id_) music_group_id_,MAX(mg.name_) music_group_name_,MAX(su.username_) username_,MAX(cssp.user_id_) user_id_,
+        MAX(cs.name_) course_schedule_name_,MAX(cs.id_) course_schedule_id_,
+        MAX(cs.class_date_) class_date_,MAX(cs.start_class_time_) start_class_time_,MAX(cs.end_class_time_) end_class_time_,
+        MAX(su2.real_name_) guide_teacher_name_,MAX(st.teacher_id_) guide_teacher_id_
+        ,MAX(su1.real_name_) educational_teacher_name_,MAX(mg.educational_teacher_id_) educational_teacher_id_,MAX(cs.group_type_) group_type_,
+        CASE WHEN MAX(sa.id_) IS NULL THEN 'TRUANT' ELSE MAX(sa.status_) END attendance_status_
         FROM course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-        LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_
+        LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_ AND sa.user_id_ = cssp.user_id_
         <if test="groupType == 'MUSIC'">
             LEFT JOIN music_group mg ON mg.id_ = cssp.music_group_id_
         </if>
@@ -581,6 +582,7 @@
         LEFT JOIN sys_user su ON su.id_ = cssp.user_id_
         LEFT JOIN sys_user su2 ON su2.id_ = st.teacher_id_
         <include refid="exportStudentAttendancesQueryPageSql"/>
+        GROUP BY cssp.id_
         ORDER BY cssp.music_group_id_ DESC,cssp.id_ DESC
         <include refid="global.limit"/>
     </select>

+ 92 - 103
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -55,7 +55,7 @@
         <result column="subject_name_" property="splitSubjectName"/>
         <result column="id_card_no_" property="idCardNo"/>
     </resultMap>
-    
+
     <resultMap type="com.ym.mec.biz.dal.dto.TeacherDefaultSalaryDto" id="TeacherDefaultSalaryDto">
         <result column="id_" property="userId"/>
         <result column="real_name_" property="realName"/>
@@ -111,7 +111,7 @@
         FROM teacher
         ORDER BY id_
     </select>
-    
+
     <select id="getLocked" resultMap="Teacher">
         SELECT * FROM teacher where id_ = #{id} for update
     </select>
@@ -279,9 +279,9 @@
     <select id="queryPage" resultMap="Teacher" parameterType="map">
         SELECT t.id_,su.real_name_,su.lock_flag_,t.subject_id_,su.phone_,t.organ_id_ teacher_organ_id_,t.organ_id_,t.is_support_extra_practice_lesson_,
         t.job_nature_,t.is_probation_period_,t.memo_,GROUP_CONCAT(s.name_) subject_name_,su.del_flag_
-        FROM teacher t LEFT JOIN sys_user su ON t.id_ = su.id_
+        FROM teacher t
+        LEFT JOIN sys_user su ON t.id_ = su.id_
         LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,t.subject_id_)
-        WHERE su.del_flag_ = 0
         <include refid="queryPageMap"/>
         GROUP BY t.id_
         ORDER BY t.id_ DESC
@@ -291,26 +291,40 @@
     <select id="queryCount" resultType="int">
         SELECT COUNT(DISTINCT t.id_)
         FROM teacher t LEFT JOIN sys_user su ON t.id_ = su.id_
-        WHERE su.del_flag_ = 0
         <include refid="queryPageMap"/>
     </select>
 
     <sql id="queryPageMap">
-        <if test="lockFlag != null">
-            AND su.lock_flag_ = #{lockFlag}
-        </if>
-        <if test="teacherId != null">
-            AND t.id_ IN
-            <foreach collection="teacherId" separator="," open="(" close=")" item="item">
-                #{item}
-            </foreach>
-        </if>
-        <if test="search != null">
-            AND (su.real_name_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%') OR t.id_ = #{search})
-        </if>
-        <if test="isSupportExtraPracticeLesson != null">
-            AND is_support_extra_practice_lesson_ = #{isSupportExtraPracticeLesson}
-        </if>
+        <where>
+            su.del_flag_ = 0
+            <if test="organId != null and organId != ''">
+                AND (INTE_ARRAY(#{organId},t.flow_organ_range_) OR FIND_IN_SET(t.organ_id_,#{organId}))
+            </if>
+            <if test="subjectId != null">
+                AND FIND_IN_SET(#{subjectId},t.subject_id_)
+            </if>
+            <if test="jobNature != null">
+                AND t.job_nature_ = #{jobNature}
+            </if>
+            <if test="isProbationPeriod != null">
+                AND t.is_probation_period_ = #{isProbationPeriod}
+            </if>
+            <if test="isSupportExtraPracticeLesson != null">
+                AND t.is_support_extra_practice_lesson_ = #{isSupportExtraPracticeLesson}
+            </if>
+            <if test="lockFlag != null">
+                AND su.lock_flag_ = #{lockFlag}
+            </if>
+            <if test="teacherId != null">
+                AND t.id_ IN
+                <foreach collection="teacherId" separator="," open="(" close=")" item="item">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="search != null">
+                AND (su.real_name_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%') OR t.id_ = #{search})
+            </if>
+        </where>
     </sql>
 
     <!-- 根据证件号查询老师 -->
@@ -361,18 +375,6 @@
         <result property="subjectNames" column="subject_names_"/>
         <result property="introduction" column="introduction_"/>
     </resultMap>
-    <select id="findTeachers" resultMap="TeacherBasicDto">
-        SELECT su.id_,su.username_,su.real_name_,t.organ_id_ FROM sys_user su
-        LEFT JOIN teacher t ON su.id_=t.id_
-        <where>
-            <if test="userIds != null">
-                su.id_ IN
-                <foreach collection="userIds" separator="," open="(" close=")" item="item">
-                    #{item}
-                </foreach>
-            </if>
-        </where>
-    </select>
 
     <select id="findSimpleTeachers" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
         SELECT su.id_ userId,su.real_name_ userName FROM sys_user su
@@ -389,10 +391,10 @@
 
     <select id="getUsersSimpleInfo" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
         SELECT
-            su.id_ userId,
-            su.username_ nickName,
-            su.real_name_ userName,
-            su.phone_ phone
+        su.id_ userId,
+        su.username_ nickName,
+        su.real_name_ userName,
+        su.phone_ phone
         FROM sys_user su
         <where>
             <if test="userIds != null">
@@ -755,27 +757,14 @@
         select count(*) total,sum(case when job_nature_ = 'PART_TIME' then 1 else 0 end) part_time_num_,sum(case when
         job_nature_ = 'FULL_TIME' then 1 else 0 end) full_time_num_ from teacher
         where demission_date_ is null and organ_id_ not in (36,38)
-            <if test="organId != null">
-                and FIND_IN_SET(organ_id_,#{organId})
-            </if>
+        <if test="organId != null">
+            and FIND_IN_SET(organ_id_,#{organId})
+        </if>
     </select>
-    <select id="findByFlowOrganRange" resultMap="Teacher">
-        SELECT id_,CONCAT(IF(flow_organ_range_ IS NULL OR flow_organ_range_ = '',0,flow_organ_range_),",",
-        IF(organ_id_ IS NULL OR organ_id_ = '',0,organ_id_)) flow_organ_range_ FROM teacher t
-        <where>
-            <if test="subjectId != null">
-                AND FIND_IN_SET(#{subjectId},t.subject_id_)
-            </if>
-            <if test="jobNature != null">
-                AND t.job_nature_ = #{jobNature}
-            </if>
-            <if test="isProbationPeriod != null">
-                AND t.is_probation_period_ = #{isProbationPeriod}
-            </if>
-            <if test="isSupportExtraPracticeLesson != null">
-                AND t.is_support_extra_practice_lesson_ = #{isSupportExtraPracticeLesson}
-            </if>
-        </where>
+    <select id="findByFlowOrganRangeTeachers" resultMap="TeacherBasicDto">
+        SELECT su.id_,su.username_,su.real_name_,t.organ_id_ FROM teacher t
+        LEFT JOIN sys_user su ON t.id_ = su.id_
+        WHERE su.del_flag_ = 0 AND (INTE_ARRAY(#{organId},t.flow_organ_range_) OR FIND_IN_SET(t.organ_id_,#{organId}))
     </select>
 
     <select id="findByTeacherIds" resultMap="Teacher">
@@ -1075,17 +1064,17 @@
         WHERE csts.group_type_ = 'MUSIC' AND (mg.educational_teacher_id_ = #{teacherId} OR mg.director_user_id_ = #{teacherId} OR mg.team_teacher_id_ = #{teacherId})
         GROUP BY csts.user_id_
         UNION ALL
-        SELECT csts.user_id_ FROM vip_group vg 
+        SELECT csts.user_id_ FROM vip_group vg
         LEFT JOIN course_schedule_teacher_salary csts ON vg.id_ = csts.music_group_id_
         WHERE vg.educational_teacher_id_ = #{teacherId} AND csts.group_type_ = 'VIP' AND vg.group_status_ IN (2,3,4)
         GROUP BY csts.user_id_
         UNION ALL
-        SELECT csts.user_id_ FROM courses_group cg 
+        SELECT csts.user_id_ FROM courses_group cg
         LEFT JOIN course_schedule_teacher_salary csts ON cg.id_ = csts.music_group_id_
         WHERE cg.educational_teacher_id_ = #{teacherId} AND csts.group_type_ = 'COMM'
         GROUP BY csts.user_id_
         UNION ALL
-        SELECT csts.user_id_ FROM practice_group pg 
+        SELECT csts.user_id_ FROM practice_group pg
         LEFT JOIN course_schedule_teacher_salary csts ON pg.id_ = csts.music_group_id_
         WHERE pg.educational_teacher_id_ = #{teacherId} AND csts.group_type_ = 'PRACTICE'
         GROUP BY csts.user_id_
@@ -1096,17 +1085,17 @@
         AND (mg.educational_teacher_id_ = #{teacherId} OR mg.director_user_id_ = #{teacherId} OR mg.team_teacher_id_ = #{teacherId})
         GROUP BY cgtm.user_id_
         UNION ALL
-        SELECT cgtm.user_id_ FROM vip_group vg 
+        SELECT cgtm.user_id_ FROM vip_group vg
         LEFT JOIN class_group_teacher_mapper cgtm ON vg.id_ = cgtm.music_group_id_
         WHERE vg.educational_teacher_id_ = #{teacherId} AND cgtm.group_type_ = 'VIP' AND vg.group_status_ IN (2,3,4)
         GROUP BY cgtm.user_id_
         UNION ALL
-        SELECT cgtm.user_id_ FROM courses_group cg 
+        SELECT cgtm.user_id_ FROM courses_group cg
         LEFT JOIN class_group_teacher_mapper cgtm ON cg.id_ = cgtm.music_group_id_
         WHERE cg.educational_teacher_id_ = #{teacherId} AND cgtm.group_type_ = 'COMM'
         GROUP BY cgtm.user_id_
         UNION ALL
-        SELECT cgtm.user_id_ FROM practice_group pg 
+        SELECT cgtm.user_id_ FROM practice_group pg
         LEFT JOIN class_group_teacher_mapper cgtm ON pg.id_ = cgtm.music_group_id_
         WHERE pg.educational_teacher_id_ = #{teacherId} AND cgtm.group_type_ = 'PRACTICE'
         GROUP BY cgtm.user_id_
@@ -1162,50 +1151,50 @@
         SELECT COUNT(s.user_id_) FROM student s
         WHERE s.teacher_id_ = #{search}
     </select>
-    
+
     <select id="queryTeacherDefaultSalary" resultMap="TeacherDefaultSalaryDto">
-    	SELECT t.`id_` ,su.`real_name_` ,o.`name_` ,
-		case when t.`job_nature_` = 'PART_TIME' then '兼职' when  t.`job_nature_` = 'FULL_TIME' then '全职' else '临时工' end job_nature,
-		case when t.`demission_date_` IS NULL then '在职' else '离职' end demisson_status,
-		case when su.`lock_flag_` = 1 then '冻结' WHEN su.`lock_flag_` = 9 then '锁定' else '正常' end status_,
-		max(case when gc.`name_` = '1V1' then gs.`offline_classes_salary_` else 0 end) vip1,
-		max(case when gc.`name_` = '1V2' then gs.`offline_classes_salary_` else 0 end) vip2,
-		max(case when gc.`name_` = '1V3' then gs.`offline_classes_salary_` else 0 end) vip3,
-		max(case when gc.`name_` = '1V4' then gs.`offline_classes_salary_` else 0 end) vip4,
-		max(case when gc.`name_` = '1V5' then gs.`offline_classes_salary_` else 0 end) vip5,
-		max(case when gc.`name_` = '1V6' then gs.`offline_classes_salary_` else 0 end) vip6,
-		max(case when gc.`name_` = '1V7' then gs.`offline_classes_salary_` else 0 end) vip7,
-		max(pgs.main_teacher_salary_) practice,
-		MAX(case when mgs.course_schedule_type_ = 'SINGLE' then mgs.main_teacher_30min_salary_ ELSE 0 END) single2,
-		MAX(case when mgs.course_schedule_type_ = 'MIX' then mgs.main_teacher_30min_salary_ ELSE 0 END) mix2,
-		MAX(case when mgs.course_schedule_type_ = 'COMPREHENSIVE' then mgs.main_teacher_30min_salary_ ELSE 0 END) comprehensive2,
-		MAX(case when mgs.course_schedule_type_ = 'TRAINING_SINGLE' then mgs.main_teacher_30min_salary_ ELSE 0 END) training_single2,
-		MAX(case when mgs.course_schedule_type_ = 'TRAINING_MIX' then mgs.main_teacher_30min_salary_ ELSE 0 END) training_mix2,
-		MAX(case when mgs.course_schedule_type_ = 'HIGH' then mgs.main_teacher_30min_salary_ ELSE 0 END) high2,
-		MAX(case when mgs.course_schedule_type_ = 'CLASSROOM' then mgs.main_teacher_30min_salary_ ELSE 0 END) classroom2,
-		MAX(case when mgs.course_schedule_type_ = 'SINGLE' then mgs.main_teacher_90min_salary_ ELSE 0 END) single,
-		MAX(case when mgs.course_schedule_type_ = 'MIX' then mgs.main_teacher_90min_salary_ ELSE 0 END) mix,
-		MAX(case when mgs.course_schedule_type_ = 'COMPREHENSIVE' then mgs.main_teacher_90min_salary_ ELSE 0 END) comprehensive,
-		MAX(case when mgs.course_schedule_type_ = 'TRAINING_SINGLE' then mgs.main_teacher_90min_salary_ ELSE 0 END) training_single,
-		MAX(case when mgs.course_schedule_type_ = 'TRAINING_MIX' then mgs.main_teacher_90min_salary_ ELSE 0 END) training_mix,
-		MAX(case when mgs.course_schedule_type_ = 'HIGH' then mgs.main_teacher_90min_salary_ ELSE 0 END) high,
-		MAX(case when mgs.course_schedule_type_ = 'CLASSROOM' then mgs.main_teacher_90min_salary_ ELSE 0 END) classroom,
-		MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."3"'),DECIMAL) END) high_online3,
-		MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."4"'),DECIMAL) END) high_online4,
-		MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."5"'),DECIMAL) END) high_online5,
-		MAX(case when mgs.course_schedule_type_ = 'MUSIC_NETWORK' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."1"'),DECIMAL) END) music_network1
-		FROM `teacher` t LEFT JOIN `sys_user` su on t.`id_` = su.`id_` 
-		LEFT JOIN `organization` o on o.`id_` = t.`organ_id_` 
-		LEFT JOIN `teacher_default_vip_group_salary` gs on gs.`user_id_` = t.`id_`
-		LEFT JOIN `vip_group_category` gc on gc.`id_` = gs.`vip_group_category_id_`
-		LEFT JOIN teacher_default_practice_group_salary pgs ON pgs.user_id_ = t.id_
-		LEFT JOIN teacher_default_music_group_salary mgs ON mgs.user_id_ = t.id_
-		<where>
-			<if test="organIdList != null">
+        SELECT t.`id_` ,su.`real_name_` ,o.`name_` ,
+        case when t.`job_nature_` = 'PART_TIME' then '兼职' when  t.`job_nature_` = 'FULL_TIME' then '全职' else '临时工' end job_nature,
+        case when t.`demission_date_` IS NULL then '在职' else '离职' end demisson_status,
+        case when su.`lock_flag_` = 1 then '冻结' WHEN su.`lock_flag_` = 9 then '锁定' else '正常' end status_,
+        max(case when gc.`name_` = '1V1' then gs.`offline_classes_salary_` else 0 end) vip1,
+        max(case when gc.`name_` = '1V2' then gs.`offline_classes_salary_` else 0 end) vip2,
+        max(case when gc.`name_` = '1V3' then gs.`offline_classes_salary_` else 0 end) vip3,
+        max(case when gc.`name_` = '1V4' then gs.`offline_classes_salary_` else 0 end) vip4,
+        max(case when gc.`name_` = '1V5' then gs.`offline_classes_salary_` else 0 end) vip5,
+        max(case when gc.`name_` = '1V6' then gs.`offline_classes_salary_` else 0 end) vip6,
+        max(case when gc.`name_` = '1V7' then gs.`offline_classes_salary_` else 0 end) vip7,
+        max(pgs.main_teacher_salary_) practice,
+        MAX(case when mgs.course_schedule_type_ = 'SINGLE' then mgs.main_teacher_30min_salary_ ELSE 0 END) single2,
+        MAX(case when mgs.course_schedule_type_ = 'MIX' then mgs.main_teacher_30min_salary_ ELSE 0 END) mix2,
+        MAX(case when mgs.course_schedule_type_ = 'COMPREHENSIVE' then mgs.main_teacher_30min_salary_ ELSE 0 END) comprehensive2,
+        MAX(case when mgs.course_schedule_type_ = 'TRAINING_SINGLE' then mgs.main_teacher_30min_salary_ ELSE 0 END) training_single2,
+        MAX(case when mgs.course_schedule_type_ = 'TRAINING_MIX' then mgs.main_teacher_30min_salary_ ELSE 0 END) training_mix2,
+        MAX(case when mgs.course_schedule_type_ = 'HIGH' then mgs.main_teacher_30min_salary_ ELSE 0 END) high2,
+        MAX(case when mgs.course_schedule_type_ = 'CLASSROOM' then mgs.main_teacher_30min_salary_ ELSE 0 END) classroom2,
+        MAX(case when mgs.course_schedule_type_ = 'SINGLE' then mgs.main_teacher_90min_salary_ ELSE 0 END) single,
+        MAX(case when mgs.course_schedule_type_ = 'MIX' then mgs.main_teacher_90min_salary_ ELSE 0 END) mix,
+        MAX(case when mgs.course_schedule_type_ = 'COMPREHENSIVE' then mgs.main_teacher_90min_salary_ ELSE 0 END) comprehensive,
+        MAX(case when mgs.course_schedule_type_ = 'TRAINING_SINGLE' then mgs.main_teacher_90min_salary_ ELSE 0 END) training_single,
+        MAX(case when mgs.course_schedule_type_ = 'TRAINING_MIX' then mgs.main_teacher_90min_salary_ ELSE 0 END) training_mix,
+        MAX(case when mgs.course_schedule_type_ = 'HIGH' then mgs.main_teacher_90min_salary_ ELSE 0 END) high,
+        MAX(case when mgs.course_schedule_type_ = 'CLASSROOM' then mgs.main_teacher_90min_salary_ ELSE 0 END) classroom,
+        MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."3"'),DECIMAL) END) high_online3,
+        MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."4"'),DECIMAL) END) high_online4,
+        MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."5"'),DECIMAL) END) high_online5,
+        MAX(case when mgs.course_schedule_type_ = 'MUSIC_NETWORK' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."1"'),DECIMAL) END) music_network1
+        FROM `teacher` t LEFT JOIN `sys_user` su on t.`id_` = su.`id_`
+        LEFT JOIN `organization` o on o.`id_` = t.`organ_id_`
+        LEFT JOIN `teacher_default_vip_group_salary` gs on gs.`user_id_` = t.`id_`
+        LEFT JOIN `vip_group_category` gc on gc.`id_` = gs.`vip_group_category_id_`
+        LEFT JOIN teacher_default_practice_group_salary pgs ON pgs.user_id_ = t.id_
+        LEFT JOIN teacher_default_music_group_salary mgs ON mgs.user_id_ = t.id_
+        <where>
+            <if test="organIdList != null">
                 AND find_in_set(t.organ_id_,#{organIdList})
             </if>
-		</where>
-		GROUP BY t.`id_` 
+        </where>
+        GROUP BY t.`id_`
     </select>
     <select id="findUserByPhone" resultMap="com.ym.mec.biz.dal.dao.MusicGroupDao.BasicUserDto">
         SELECT username_,id_ user_id_,avatar_ head_url_,