瀏覽代碼

学员月内首次请假不提醒异常

zouxuan 4 年之前
父節點
當前提交
349439501f

+ 8 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -22,8 +22,6 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * 批量插入学生上课签到情况
      */
     int addStudentAttendances(List<StudentAttendance> studentAttendances);
-    
-    int batchUpdate(List<StudentAttendance> studentAttendances);
 
     /**
      * @describe
@@ -328,4 +326,12 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @return
      */
     int countErrorAttendance(Integer courseScheduleId);
+
+    /**
+     * 获取当月请假次数
+     * @param userId
+     * @param month
+     * @return
+     */
+    int getLeaveNum(@Param("userId") Integer userId, @Param("month") String month, @Param("attendanceId") Long attendanceId);
 }

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java

@@ -70,7 +70,7 @@ public class StudentAttendance {
 	private StudentAttendanceStatusEnum status;
 
 	@ApiModelProperty(value = "是否回访)",required = false)
-	private YesOrNoEnum visitFlag;
+	private YesOrNoEnum visitFlag = YesOrNoEnum.NO;
 
 	private Date signInTime;
 
@@ -92,6 +92,17 @@ public class StudentAttendance {
 
 	private int normalRemind;
 
+	@ApiModelProperty(value = "是否首次请假")
+	private YesOrNoEnum firstLeave = YesOrNoEnum.NO;
+
+	public YesOrNoEnum getFirstLeave() {
+		return firstLeave;
+	}
+
+	public void setFirstLeave(YesOrNoEnum firstLeave) {
+		this.firstLeave = firstLeave;
+	}
+
 	public int getNormalRemind() {
 		return normalRemind;
 	}

+ 0 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -57,12 +57,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
-	private SysMessageDao sysMessageDao;
-	@Autowired
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 	@Autowired
-	private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
-	@Autowired
 	private ClassGroupDao classGroupDao;
 
 	private static ThreadLocal<Set<Integer>> organIds = new ThreadLocal<Set<Integer>>(){
@@ -448,8 +444,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		if(StringUtils.isNotBlank(organIdsStr)){
 			organIds = Arrays.stream(organIdsStr.split(",")).map(Integer::new).collect(Collectors.toSet());
 		}
-		Date date = new Date();
-
 		List<IndexErrInfoDto> all = new ArrayList<>();
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());

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

@@ -163,6 +163,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         int remindNum = studentAttendanceDao.countNormalRemindNum(courseScheduleId);
         studentAttendanceDao.deleteStudentAttendancesByCourse(courseScheduleId);
         int classTimes = courseScheduleDao.countClassTimes(courseSchedule.getClassGroupId().longValue(), courseSchedule.getStartClassTime());
+        String month = DateUtil.format(date, DateUtil.ISO_YEAR_MONTH_FORMAT);
         studentAttendances.forEach(studentAttendance -> {
             studentAttendance.setTeacherId(sysUser.getId());
             studentAttendance.setCurrentClassTimes(classTimes + 1);
@@ -191,6 +192,12 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                             studentAttendanceInfo.getMusicGroupId(),
                             YesOrNoEnum.NO.getCode());
                 }
+                if (studentAttendanceInfo.getStatus() == StudentAttendanceStatusEnum.LEAVE) {
+                    int leaveNum = studentAttendanceDao.getLeaveNum(studentAttendanceInfo.getUserId(),month,null);
+                    if(leaveNum == 0){
+                        studentAttendanceInfo.setFirstLeave(YesOrNoEnum.YES);
+                    }
+                }
                 if (studentAttendanceInfo.getStatus() == StudentAttendanceStatusEnum.NORMAL) {
                     studentAttendanceInfo.setSignInTime(courseSchedule.getStartClassTime());
                     studentAttendanceInfo.setSignOutTime(courseSchedule.getEndClassTime());
@@ -313,9 +320,19 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
             throw new BizException("此课程已结算");
         }
 
+        String month = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+
         List<Integer> userIds = studentAttendances.stream().map(StudentAttendance::getUserId).collect(Collectors.toList());
         studentAttendanceDao.deleteStudentAttendancesByCourseAndUsers(studentAttendanceInfo.getCourseScheduleId().longValue(), userIds);
+        //获取非请假的学员考勤
         for (StudentAttendance studentAttendance : studentAttendances) {
+            if(studentAttendance.getStatus() == StudentAttendanceStatusEnum.LEAVE){
+                //当前月是否是第一次请假
+                int leaveNum = studentAttendanceDao.getLeaveNum(studentAttendance.getUserId(),month,null);
+                if(leaveNum == 0){
+                    studentAttendance.setFirstLeave(YesOrNoEnum.YES);
+                }
+            }
             studentAttendance.setGroupType(courseSchedule.getGroupType());
             studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
             studentAttendance.setClassGroupId(courseSchedule.getClassGroupId());
@@ -414,7 +431,11 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         studentAttendance.setUserId(userId);
         studentAttendance.setGroupType(courseSchedule.getGroupType());
         studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
-
+        String month = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+        int leaveNum = studentAttendanceDao.getLeaveNum(userId,month,studentAttendance.getId());
+        if(leaveNum == 0){
+            studentAttendance.setFirstLeave(YesOrNoEnum.YES);
+        }
         if (Objects.nonNull(studentAttendance.getId())) {
             studentAttendanceDao.update(studentAttendance);
         } else {

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

@@ -2584,7 +2584,7 @@
         <if test="searchType == 'ERR_ATTENDANCE'">
             AND ta.teacher_id_ = cs.actual_teacher_id_
             AND cs.status_ = 'OVER'
-            AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
+            AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0 AND sa.first_leave_ = 0)))
             AND EXISTS (SELECT id_ FROM course_schedule_teacher_salary WHERE cs.id_=course_schedule_id_ AND settlement_time_ IS NULL)
             AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
             AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_) AND cssp.id_ IS NOT NULL

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

@@ -947,7 +947,7 @@
 		LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
 		WHERE ta.teacher_id_ = cs.actual_teacher_id_
 		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= '2021-02-01'
-		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
+		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0 AND sa.first_leave_ = 0)))
 		AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
 		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_) AND cssp.id_ IS NOT NULL
 		AND EXISTS (SELECT id_ FROM course_schedule_teacher_salary WHERE cs.id_=course_schedule_id_ AND settlement_time_ IS NULL)
@@ -963,7 +963,7 @@
 				#{organId}
 			</foreach>
 		</if>
-		GROUP BY cs.id_) c
+
 	</select>
 
 	<select id="getOrganAttendanceError" resultType="map">
@@ -976,7 +976,7 @@
 		LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
 		WHERE ta.teacher_id_ = cs.actual_teacher_id_
 		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= '2021-02-01'
-		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
+		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0 AND sa.first_leave_ = 0)))
 		AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
 		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_) AND cssp.id_ IS NOT NULL
 		AND EXISTS (SELECT id_ FROM course_schedule_teacher_salary WHERE cs.id_=course_schedule_id_ AND settlement_time_ IS NULL)

+ 17 - 52
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -58,15 +58,17 @@
             keyColumn="id" keyProperty="id">
         INSERT INTO student_attendance
         (group_type_,music_group_id_,class_group_id_,course_schedule_id_,user_id_,teacher_id_,status_,create_time_,
-        update_time_,remark_,current_class_times_,sign_in_time_,sign_out_time_,current_schedule_id_,visit_flag_,normal_remind_)
+        update_time_,remark_,current_class_times_,sign_in_time_,sign_out_time_,current_schedule_id_,visit_flag_,normal_remind_,first_leave_)
         VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{classGroupId},
         #{courseScheduleId},#{userId},#{teacherId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),now(),
-        #{remark},#{currentClassTimes},#{signInTime},#{signOutTime},#{currentScheduleId},#{visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{normalRemind})
+        #{remark},#{currentClassTimes},#{signInTime},#{signOutTime},#{currentScheduleId},#{visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        #{normalRemind},#{firstLeave,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
 
     <insert id="addStudentAttendances" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
       INSERT INTO student_attendance (group_type_, music_group_id_, class_group_id_, course_schedule_id_,
-      user_id_, teacher_id_, status_, create_time_,update_time_, remark_ ,current_class_times_,sign_in_time_,sign_out_time_,current_schedule_id_,visit_flag_,normal_remind_)
+      user_id_, teacher_id_, status_, create_time_,update_time_, remark_ ,current_class_times_,sign_in_time_,
+                                      sign_out_time_,current_schedule_id_,visit_flag_,normal_remind_,first_leave_)
       VALUES
 	  <foreach collection="list" item="studentAttendance" separator=",">
           (#{studentAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -75,7 +77,7 @@
           #{studentAttendance.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{studentAttendance.updateTime},
           #{studentAttendance.remark},#{studentAttendance.currentClassTimes},
           #{studentAttendance.signInTime},#{studentAttendance.signOutTime},#{studentAttendance.currentScheduleId},#{studentAttendance.visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-          #{studentAttendance.normalRemind})
+          #{studentAttendance.normalRemind},#{studentAttendance.firstLeave,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
       </foreach>
     </insert>
 
@@ -83,6 +85,9 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentAttendance">
         UPDATE student_attendance
         <set>
+            <if test="firstLeave != null">
+                first_leave_ = #{firstLeave,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
@@ -130,54 +135,6 @@
         WHERE id_ = #{id}
     </update>
     
-    <update id="batchUpdate"  parameterType="java.util.List">  
-    	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
-	        update student_attendance
-	        <set>
-	            <if test="item.visitFlag != null">
-	                visit_flag_ = #{item.visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-	            </if>
-	            <if test="item.status != null">
-	                status_ = #{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-	            </if>
-                <if test="item.signOutTime != null">
-                    sign_out_time_ = #{item.signOutTime},
-                </if>
-                <if test="item.signInTime != null">
-                    sign_in_time_ = #{item.signInTime},
-                </if>
-	            <if test="item.userId != null">
-	                user_id_ = #{item.userId},
-	            </if>
-	            <if test="item.remark != null">
-	                remark_ = #{item.remark},
-	            </if>
-	            <if test="item.classGroupId != null">
-	                class_group_id_ = #{item.classGroupId},
-	            </if>
-	            <if test="item.groupType != null">
-	                group_type_ = #{item.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-	            </if>
-	            <if test="item.teacherId != null">
-	                teacher_id_ = #{item.teacherId},
-	            </if>
-	            <if test="item.courseScheduleId != null">
-	                course_schedule_id_ = #{item.courseScheduleId},
-	            </if>
-	            <if test="item.musicGroupId != null">
-	                music_group_id_ = #{item.musicGroupId},
-	            </if>
-	            <if test="item.currentClassTimes != null">
-	                current_class_times_ = #{item.currentClassTimes},
-	            </if>
-                <if test="item.normalRemind != null">
-                    normal_remind_ = #{item.normalRemind},
-                </if>
-                update_time_=NOW()
-        	</set>
-	        where id_ = #{item.id}
-	    </foreach>      
-	</update>
     <update id="cleanCourseStudentSignOut">
         UPDATE student_attendance
         SET sign_out_time_= NULL
@@ -690,4 +647,12 @@
         LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
         WHERE (sa.status_ != 'NORMAL' OR sa.status_ IS NULL) AND cssp.course_schedule_id_ = #{courseScheduleId}
     </select>
+    <select id="getLeaveNum" resultType="java.lang.Integer">
+        SELECT COUNT(sa.id_) FROM student_attendance sa
+        LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
+        WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') = #{month} AND sa.user_id_ = #{userId} AND sa.status_ = 'LEAVE'
+        <if test="attendanceId != null">
+            AND sa.id_ != #{attendanceId}
+        </if>
+    </select>
 </mapper>