Преглед на файлове

学员首次请假需求

zouxuan преди 4 години
родител
ревизия
f2ece3745e

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

@@ -285,4 +285,6 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     List<IndexBaseMonthData> getTotalAmountDataWithTimely(@Param("startDate") String startDate,
                                                             @Param("endDate") String endDate,
                                                             @Param("organIds") List<Integer> organIds);
+
+    int countStudentErrorLeave(@Param("organIdList") Set<Integer> organIdList, @Param("format") String format);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -343,4 +343,10 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @return
      */
     List<Map<Integer, Long>> queryLeaveNum(@Param("userIds") Set<Integer> userIds, @Param("month") String month);
+
+    /**
+     * 修改学员请假回访
+     * @param userId
+     */
+    void updateLeaveVisitFlag(Integer userId);
 }

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

@@ -15,6 +15,7 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     STUDENT_INFO("STUDENT_INFO", "学员处理"),
     STUDENT_ARREARAGE("STUDENT_ARREARAGE", "欠费学员数"),
     STUDENT_NOT_PAYMENT("STUDENT_NOT_PAYMENT", "未缴费学员数"),
+    STUDENT_ERROR_LEAVE("STUDENT_ERROR_LEAVE", "学员异常请假"),
     STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP("STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP", "申请退团学员数"),
     WAIT_CREATE_PAYMENT_CALENDER("WAIT_CREATE_PAYMENT_CALENDER", "待创建缴费项目"),
     ATTENDANCE_ERR_STUDENT_NUM("COURSE_TRUANT_STUDENT_NUM", "学员考勤异常"),

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/StudentVisitService.java

@@ -8,7 +8,6 @@ import com.ym.mec.biz.dal.entity.StudentVisit;
 import com.ym.mec.biz.dal.page.StudentVisitQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
-
 import java.util.List;
 
 public interface StudentVisitService extends BaseService<Integer, StudentVisit> {

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

@@ -848,6 +848,9 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		//未缴费学员数
 		result.add(new IndexErrInfoDto(IndexErrorType.STUDENT_NOT_PAYMENT, IndexErrorType.STUDENT_NOT_PAYMENT.getMsg(), indexBaseMonthDataDao.countNoPaymentStudentNum(organIdSet,educationUserId, 1), Arrays.asList(educationUserId)));
 
+		//学员请假异常提醒(获取前两个月的)
+		String format1 = DateUtil.format(DateUtil.addMonths(date, 1), DateUtil.ISO_YEAR_MONTH_FORMAT);
+		result.add(new IndexErrInfoDto(IndexErrorType.STUDENT_ERROR_LEAVE, IndexErrorType.STUDENT_ERROR_LEAVE.getMsg(), indexBaseMonthDataDao.countStudentErrorLeave(organIdSet,format1), null));
 
 		String monthStr = DateUtil.format(date, DateUtil.ISO_YEAR_MONTH_FORMAT);
 		//全职未离职老师

+ 28 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentVisitServiceImpl.java

@@ -55,30 +55,35 @@ public class StudentVisitServiceImpl extends BaseServiceImpl<Integer, StudentVis
         SysUser user = teacherDao.getUser(studentVisit.getStudentId());
         studentVisit.setOrganId(user.getOrganId());
         studentVisit.setCreateTime(now);
-        if(Objects.nonNull(studentVisit.getObjectId()) && "考勤申诉".equals(studentVisit.getPurpose())){
-            CourseScheduleStudentPayment courseScheduleStudentPayment = courseScheduleStudentPaymentDao.get(studentVisit.getObjectId());
-            if(Objects.isNull(courseScheduleStudentPayment)){
-                throw new BizException("学员课程信息不存在");
-            }
-            StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(courseScheduleStudentPayment.getUserId(), courseScheduleStudentPayment.getCourseScheduleId().intValue());
-            if (studentAttendance == null) {
-                studentAttendance = new StudentAttendance();
-                studentAttendance.setClassGroupId(courseScheduleStudentPayment.getClassGroupId());
-                studentAttendance.setCourseScheduleId(courseScheduleStudentPayment.getCourseScheduleId());
-                studentAttendance.setGroupType(courseScheduleStudentPayment.getGroupType());
-                studentAttendance.setMusicGroupId(courseScheduleStudentPayment.getMusicGroupId());
-                studentAttendance.setUserId(courseScheduleStudentPayment.getUserId());
-                studentAttendance.setCreateTime(now);
-                studentAttendance.setUpdateTime(now);
-                studentAttendance.setVisitFlag(YesOrNoEnum.YES);
-                studentAttendanceDao.insert(studentAttendance);
-            } else {
-                studentAttendance.setVisitFlag(YesOrNoEnum.YES);
-                studentAttendance.setUpdateTime(now);
-                studentAttendanceDao.update(studentAttendance);
+        if(Objects.nonNull(studentVisit.getObjectId())){
+            if("考勤申诉".equals(studentVisit.getPurpose())){
+                CourseScheduleStudentPayment courseScheduleStudentPayment = courseScheduleStudentPaymentDao.get(studentVisit.getObjectId());
+                if(Objects.isNull(courseScheduleStudentPayment)){
+                    throw new BizException("学员课程信息不存在");
+                }
+                StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(courseScheduleStudentPayment.getUserId(), courseScheduleStudentPayment.getCourseScheduleId().intValue());
+                if (studentAttendance == null) {
+                    studentAttendance = new StudentAttendance();
+                    studentAttendance.setClassGroupId(courseScheduleStudentPayment.getClassGroupId());
+                    studentAttendance.setCourseScheduleId(courseScheduleStudentPayment.getCourseScheduleId());
+                    studentAttendance.setGroupType(courseScheduleStudentPayment.getGroupType());
+                    studentAttendance.setMusicGroupId(courseScheduleStudentPayment.getMusicGroupId());
+                    studentAttendance.setUserId(courseScheduleStudentPayment.getUserId());
+                    studentAttendance.setCreateTime(now);
+                    studentAttendance.setUpdateTime(now);
+                    studentAttendance.setVisitFlag(YesOrNoEnum.YES);
+                    studentAttendanceDao.insert(studentAttendance);
+                } else {
+                    studentAttendance.setVisitFlag(YesOrNoEnum.YES);
+                    studentAttendance.setUpdateTime(now);
+                    studentAttendanceDao.update(studentAttendance);
+                }
+                CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleStudentPayment.getCourseScheduleId());
+                studentVisit.setOrganId(courseSchedule.getOrganId());
+            }else if("请假回访".equals(studentVisit.getPurpose())){
+                //处理所有的请假考勤为已回访
+                studentAttendanceDao.updateLeaveVisitFlag(user.getId());
             }
-            CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleStudentPayment.getCourseScheduleId());
-            studentVisit.setOrganId(courseSchedule.getOrganId());
         }
         studentVisitDao.insert(studentVisit);
         return studentVisit;

+ 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_ = 'TRUANT' AND sa.visit_flag_ = 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

+ 15 - 2
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_ = 'TRUANT' AND sa.visit_flag_ = 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)
@@ -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_ = 'TRUANT' AND sa.visit_flag_ = 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)
@@ -1387,4 +1387,17 @@
 		ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
 		) e GROUP BY e.organ_id_
 	</select>
+	<select id="countStudentErrorLeave" resultType="java.lang.Integer">
+		SELECT COUNT(DISTINCT c.user_id_) FROM (
+		SELECT sa.user_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') >= #{format} AND sa.status_ = 'LEAVE'
+		<if test="organIdList != null and organIdList.size > 0">
+			AND cs.organ_id_ IN
+			<foreach collection="organIdList" open="(" close=")" item="item" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m') HAVING COUNT(sa.id_) > 1 AND SUM(sa.leave_visit_flag_) = 0) c
+	</select>
 </mapper>

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

@@ -137,6 +137,9 @@
         SET sign_out_time_= NULL
     	WHERE course_schedule_id_=#{courseId} AND user_id_ = #{userId}
     </update>
+    <update id="updateLeaveVisitFlag">
+        UPDATE student_attendance SET leave_visit_flag_ = 1 WHERE user_id_ = #{userId} AND status_ = 'LEAVE'
+    </update>
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">