Explorar o código

feat:签到签退逻辑调整

Joburgess %!s(int64=4) %!d(string=hai) anos
pai
achega
530ff18f33

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java

@@ -89,6 +89,9 @@ public class TeacherAttendance {
 	//处理结果
 	private Integer operator;
 
+	@ApiModelProperty(value = "签退附件")
+	private String signOutAttachments;
+
 	public Long getCurrentScheduleId() {
 		return currentScheduleId;
 	}
@@ -105,6 +108,14 @@ public class TeacherAttendance {
 		this.complaintsTime = complaintsTime;
 	}
 
+	public String getSignOutAttachments() {
+		return signOutAttachments;
+	}
+
+	public void setSignOutAttachments(String signOutAttachments) {
+		this.signOutAttachments = signOutAttachments;
+	}
+
 	public Integer getOperator() {
 		return operator;
 	}

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -18,6 +18,11 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     public static final String VIP_APPEAL_DAYS_RANGE = "vip_appeal_days_range";
 
     /**
+     * 线下课最早打卡时间可提前分钟数
+     */
+    String OFFLINE_SIGN_IN_EARLY_FORWARD_TIME = "offline_sign_in_early_forward_time";
+
+    /**
      * 老师正常打卡时间,为课程当天,距离开课时间前{}分钟
      */
     public static final String ADVANCE_SIGN_IN_MINUTES = "advance_sign_in_minutes";

+ 52 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -26,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.enums.ComplaintsStatusEnum.REPEAL;
 import static com.ym.mec.biz.dal.enums.SignInStatusEnum.*;
@@ -202,6 +203,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		}else if(teacherAttendance.getSignOutTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_OUT.getCode())){
 			//正常签退范围(结束后1小时内)
 			teacherAttendance.setSignOutTime(date);
+			teacherAttendance.setSignOutAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());
 			ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
 			teacherAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
 			if(DateUtil.minutesBetween(classEndDateTime,date) >= 0 && DateUtil.minutesBetween(date,classEndDateAdd60Minutes) >= 0){
@@ -219,28 +221,30 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				teacherAttendanceDao.insert(teacherAttendance);
 			}
 
-			CourseHomework courseHomework = courseHomeworkDao.findByCourseSchedule(teacherAttendance.getCourseScheduleId());
-			if(Objects.isNull(courseHomework)){
-				//新增课堂作业
-				courseHomework=teacherSignOutDto.getCourseHomeworkInfo();
-				courseHomework.setCourseScheduleId(teacherAttendance.getCourseScheduleId());
-				courseHomework.setMusicGroupId(currentCourseDetail.getMusicGroupId());
-				courseHomework.setGroupType(teacherAttendance.getGroupType());
-				courseHomework.setClassGroupId(currentCourseDetail.getClassId().intValue());
-				courseHomework.setExpiryDate(DateUtil.addDays(date,7));
-				courseHomework.setExpectNum(courseScheduleDao.countCourseStudentNum(teacherAttendance.getCourseScheduleId()));
-				courseHomeworkService.insert(courseHomework);
-				List<StudentCourseHomework> studentCourseHomeworks = studentCourseHomeworkDao
-						.constructInitialStudentHomeworkRecordsWithPayment(teacherAttendance.getCourseScheduleId(),
-								courseHomework.getId());
-				if(CollectionUtils.isEmpty(studentCourseHomeworks)){
-					throw new BizException("此课程没有学生");
+			if(StringUtils.isNotBlank(teacherSignOutDto.getCourseHomeworkInfo().getContent())){
+				CourseHomework courseHomework = courseHomeworkDao.findByCourseSchedule(teacherAttendance.getCourseScheduleId());
+				if(Objects.isNull(courseHomework)){
+					//新增课堂作业
+					courseHomework=teacherSignOutDto.getCourseHomeworkInfo();
+					courseHomework.setCourseScheduleId(teacherAttendance.getCourseScheduleId());
+					courseHomework.setMusicGroupId(currentCourseDetail.getMusicGroupId());
+					courseHomework.setGroupType(teacherAttendance.getGroupType());
+					courseHomework.setClassGroupId(currentCourseDetail.getClassId().intValue());
+					courseHomework.setExpiryDate(DateUtil.addDays(date,7));
+					courseHomework.setExpectNum(courseScheduleDao.countCourseStudentNum(teacherAttendance.getCourseScheduleId()));
+					courseHomeworkService.insert(courseHomework);
+					List<StudentCourseHomework> studentCourseHomeworks = studentCourseHomeworkDao
+							.constructInitialStudentHomeworkRecordsWithPayment(teacherAttendance.getCourseScheduleId(),
+									courseHomework.getId());
+					if(CollectionUtils.isEmpty(studentCourseHomeworks)){
+						throw new BizException("此课程没有学生");
+					}
+					studentCourseHomeworkDao.batchInsertStudentCourseHomeworkRecord(studentCourseHomeworks);
+				}else{
+					courseHomework.setContent(teacherSignOutDto.getCourseHomeworkInfo().getContent());
+					courseHomework.setAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());
+					courseHomeworkService.update(courseHomework);
 				}
-				studentCourseHomeworkDao.batchInsertStudentCourseHomeworkRecord(studentCourseHomeworks);
-			}else{
-				courseHomework.setContent(teacherSignOutDto.getCourseHomeworkInfo().getContent());
-				courseHomework.setAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());
-				courseHomeworkService.update(courseHomework);
 			}
 			return result;
 		}
@@ -433,10 +437,22 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 
 	@Override
 	public boolean pushNoSignOutMessage() {
-
 		Integer minutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.SIGN_OUT_MESSAGE_PUSH_MINUTE));;
 
 		List<Mapper> list = teacherAttendanceDao.queryNoSignOutListByOverMinutes(minutes);
+		if(CollectionUtils.isEmpty(list)){
+			return true;
+		}
+		List<Long> courseScheduleIds = list.stream().map(m -> m.getCourseScheduleId().longValue()).collect(Collectors.toList());
+
+		List<CourseSchedule> courseSchedules = courseScheduleDao.findByCourseScheduleIds(courseScheduleIds);
+		Map<Long, CourseSchedule> idCourseMap = courseSchedules.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c, (c1, c2) -> c1));
+
+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalarys = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
+		Map<Long, List<CourseScheduleTeacherSalary>> courseTeacherSalaryMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(courseScheduleTeacherSalarys)){
+			courseTeacherSalaryMap = courseScheduleTeacherSalarys.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+		}
 
 		for (Mapper mapper : list) {
 			Map<Integer, String> receivers = new HashMap<Integer, String>();
@@ -445,9 +461,22 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 
 			String key = "SignOut_" + userId + "_" + mapper.getCourseScheduleId();
 
+			CourseSchedule courseSchedule = idCourseMap.get(mapper.getCourseScheduleId().longValue());
+
+			List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseTeacherSalaryMap.get(mapper.getCourseScheduleId().longValue());
+			TeachTypeEnum teachType = TeachTypeEnum.BISHOP;
+			if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
+				for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+					if(mapper.getKey().equals(courseScheduleTeacherSalary.getUserId())){
+						teachType = courseScheduleTeacherSalary.getTeacherRole();
+					}
+				}
+			}
+
 			if (!redisCache.exists(key)) {
 				sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_SIGN_OUT_MESSAGE, receivers, null, 0,
-						"5?courseScheduleId=" + mapper.getCourseScheduleId(), "TEACHER", mapper.getValue());
+						"5?courseScheduleId=" + mapper.getCourseScheduleId() + "&teacherRole=" + teachType.getCode(), "TEACHER",
+						mapper.getValue() + (Objects.isNull(courseSchedule)?"":("(" + DateUtil.format(courseSchedule.getStartClassTime(), "yyyy年MM月dd日 HH时mm分") + ")")));
 				redisCache.put(key, 1, (int) DateUtil.getTomorrowZeroSeconds());
 			}
 		}

+ 8 - 4
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -30,6 +30,7 @@
         <result column="operator_" property="operator"/>
         <result column="complaints_time_" property="complaintsTime"/>
         <result column="current_schedule_id_" property="currentScheduleId"/>
+        <result column="sign_out_attachments_" property="signOutAttachments"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
@@ -53,18 +54,18 @@
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,
-        sign_out_status_,current_class_times_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_)
+        sign_out_status_,current_class_times_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_)
         VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherId},
         #{musicGroupId},#{classGroupId},#{courseScheduleId},#{signInTime},#{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{remark},
         now(),#{signOutTime},#{signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude},#{currentScheduleId})
+        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude},#{currentScheduleId},#{signOutAttachments})
     </insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,
-        remark_,create_time_,sign_out_time_,sign_out_status_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_)
+        remark_,create_time_,sign_out_time_,sign_out_status_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_)
         VALUE
         <foreach collection="teacherAttendances" item="teacherAttendance" separator=",">
             (#{teacherAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -73,7 +74,7 @@
             #{teacherAttendance.signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},
             #{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude},#{teacherAttendance.currentScheduleId})
+            #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude},#{teacherAttendance.currentScheduleId},#{teacherAttendance.signOutAttachments})
         </foreach>
     </insert>
 
@@ -141,6 +142,9 @@
             <if test="complaintsTime != null">
                 complaints_time_ = #{complaintsTime},
             </if>
+            <if test="signOutAttachments != null">
+                sign_out_attachments_ = #{signOutAttachments},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

+ 2 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -80,6 +80,7 @@ public class TeacherCourseScheduleController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
+        SysConfig offlineSignInEarlyForwardTime = sysConfigService.findByParamName(SysConfigService.OFFLINE_SIGN_IN_EARLY_FORWARD_TIME);
         SysConfig sysConfigVip = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
         SysConfig courseBeforeBufferTime = sysConfigService.findByParamName(SysConfigService.COURSE_BEFORE_BUFFER_TIME);
         SysConfig courseAfterBufferTime = sysConfigService.findByParamName(SysConfigService.COURSE_AFTER_BUFFER_TIME);
@@ -88,6 +89,7 @@ public class TeacherCourseScheduleController extends BaseController {
         Map<String,Object> result = new HashMap<>();
         result.put("rows",teacherCourseSchedulesWithDate);
         result.put("appealHoursRange",4);
+        result.put("offlineSignInEarlyForwardTime", offlineSignInEarlyForwardTime.getParanValue(Integer.class));
         result.put("enableStudentAttendanceTimeRange",sysConfig.getParanValue(Integer.class));
         result.put("enableStudentAttendanceTimeRangeVip",sysConfigVip.getParanValue(Integer.class));
         result.put("joinRoomBeforeTime",studentAttendanceAfterTimeConfig.getParanValue(Integer.class));